Changeset 42290 in spip-zone


Ignore:
Timestamp:
Nov 13, 2010, 7:57:29 PM (10 years ago)
Author:
cedric@…
Message:

Correction de 2 bugs de csstidy qui fusionne les selecteurs css et les @media lorsque plusieurs occurences semblables apparaissent dans la feuille.
Lorsqu'on ne demande pas la fusion des selecteurs, il faut respecter ces redondances qui peuvent etre la pour raison de surcharge.

Par ailleurs, on ajoute une fonnctionnalite dans la classe print pour specifier un @media par defaut qui sera applique a tous les selecteurs qui ne sont pas deja dans un @media
Cette fonctionnalite sera utilise pour compacter plusieurs css de differents media en une seule, en respectant leur ordre d'appel.

Passage en v1.3.1 de csstidy

Location:
_core_/plugins/compresseur/csstidy
Files:
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/compresseur/csstidy/class.csstidy.php

    r42287 r42290  
    2424 * @package csstidy
    2525 * @author Florian Schmitz (floele at gmail dot com) 2005-2006
     26 *
    2627 */
    2728
     
    5758 * @package csstidy
    5859 * @author Florian Schmitz (floele at gmail dot com) 2005-2006
    59  * @version 1.3
     60 * @author Cedric Morin (cedric at yterium dot com) 2010+
     61 * @version 1.3.1
    6062 */
    6163class csstidy {
     
    491493                {
    492494                    $this->status = 'is';
     495                                                                                $this->at = $this->css_new_media_section($this->at);
    493496                    $this->_add_token(AT_START, $this->at);
    494497                }
     
    566569                {
    567570                    $this->status = 'ip';
     571                    if($this->at == '')
     572                    {
     573                        $this->at = $this->css_new_media_section(DEFAULT_AT);
     574                    }
     575                                                                                $this->selector = $this->css_new_selector($this->at,$this->selector);
    568576                    $this->_add_token(SEL_START, $this->selector);
    569577                    $this->added = false;
     
    698706                    if($this->at == '')
    699707                    {
    700                         $this->at = DEFAULT_AT;
     708                        $this->at = $this->css_new_media_section(DEFAULT_AT);
    701709                    }
    702710
     
    715723
    716724                    $this->value = implode(' ',$this->sub_value_arr);
    717 
    718                     $this->selector = trim($this->selector);
    719725
    720726                    $this->optimise->value();
     
    910916
    911917/**
     918 * Start a new media section.
     919 * Check the media is not already know,
     920 * else rename it with extra spaces
     921 * to avoid merging
     922 *
     923 * @param string $media
     924 * @return string
     925 */
     926function css_new_media_section($media){
     927    if($this->get_cfg('preserve_css')) {
     928                        return $media;
     929    }
     930               
     931                while (isset($this->css[$media]))
     932                        if (is_numeric($media))
     933                                $media++;
     934                        else
     935                                $media .= " ";
     936                return $media;
     937}
     938
     939/**
     940 * Start a new selector.
     941 * If allready referenced in this media section,
     942 * rename it with extra space to avoid merging
     943 * except if merging is required !
     944 *
     945 * @param string $media
     946 * @param string $selector
     947 * @return string
     948 */
     949function css_new_selector($media,$selector){
     950    if($this->get_cfg('preserve_css')) {
     951                        return $selector;
     952    }
     953                $selector = trim($selector);
     954                if ($this->settings['merge_selectors'] != false)
     955                        return $selector;
     956                while (isset($this->css[$media][$selector]))
     957                        $selector .= " ";
     958                return $selector;
     959}
     960
     961/**
    912962 * Adds CSS to an existing media/selector
    913963 * @param string $media
  • _core_/plugins/compresseur/csstidy/class.csstidy_print.php

    r42287 r42290  
    3434 * @package csstidy
    3535 * @author Florian Schmitz (floele at gmail dot com) 2005-2006
    36  * @version 1.0
     36 * @author Cedric Morin (cedric at yterium dot com) 2010+
     37 * @version 1.1
    3738 */
    3839
     
    9495     * @version 1.0
    9596     */
    96     function plain()
    97     {
    98         $this->_print(true);
     97    function plain($default_media='')
     98    {
     99        $this->_print(true, $default_media);
    99100        return $this->output_css_plain;
    100101    }
     
    102103    /**
    103104     * Returns the formatted CSS code
     105                 * @param string $default_media default @media to add to selectors without any @media
    104106     * @return string
    105107     * @access public
    106108     * @version 1.0
    107109     */
    108     function formatted()
    109     {
    110         $this->_print(false);
     110    function formatted($default_media='')
     111    {
     112        $this->_print(false, $default_media);
    111113        return $this->output_css;
    112114    }
     
    115117     * Returns the formatted CSS Code and saves it into $this->output_css and $this->output_css_plain
    116118     * @param bool $plain plain text or not
     119                 * @param string $default_media default @media to add to selectors without any @media
    117120     * @access private
    118121     * @version 2.0
    119122     */
    120     function _print($plain = false)
     123    function _print($plain = false, $default_media='')
    121124    {
    122125        if ($this->output_css && $this->output_css_plain) {
     
    126129        $output = '';
    127130        if (!$this->parser->get_cfg('preserve_css')) {
    128             $this->_convert_raw_css();
     131            $this->_convert_raw_css($default_media);
    129132        }
    130133
     
    239242    /**
    240243     * Converts $this->css array to a raw array ($this->tokens)
    241      * @access private
    242      * @version 1.0
    243      */
    244     function _convert_raw_css()
     244                 * @param string $default_media default @media to add to selectors without any @media
     245     * @access private
     246     * @version 1.0
     247     */
     248    function _convert_raw_css($default_media='')
    245249    {
    246250        $this->tokens = array();
     
    249253        {
    250254            if ($this->parser->get_cfg('sort_selectors')) ksort($val);
    251             if ($medium != DEFAULT_AT) {
     255            if (intval($medium) < DEFAULT_AT) {
    252256                $this->parser->_add_token(AT_START, $medium, true);
    253257            }
     258                                                elseif ($default_media) {
     259                $this->parser->_add_token(AT_START, $default_media, true);
     260                                                }
    254261
    255262            foreach ($val as $selector => $vali)
     
    267274            }
    268275
    269             if ($medium != DEFAULT_AT) {
     276            if (intval($medium) < DEFAULT_AT) {
    270277                $this->parser->_add_token(AT_END, $medium, true);
    271278            }
     279                                                elseif ($default_media) {
     280                $this->parser->_add_token(AT_END, $default_media, true);
     281                                                }
    272282        }
    273283    }
Note: See TracChangeset for help on using the changeset viewer.