Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/oyejorge/less.php/lib/Less/Tree/Selector.php
Строк: 212
<?php

/**
 * Selector
 *
 * @package Less
 * @subpackage tree
 */
class Less_Tree_Selector extends Less_Tree{

    public 
$elements;
    public 
$condition;
    public 
$extendList = array();
    public 
$_css;
    public 
$index;
    public 
$evaldCondition false;
    public 
$type 'Selector';
    public 
$currentFileInfo = array();
    public 
$isReferenced;
    public 
$mediaEmpty;

    public 
$elements_len 0;

    public 
$_oelements;
    public 
$_oelements_len;
    public 
$cacheable true;

    
/**
     * @param boolean $isReferenced
     */
    
public function __construct$elements$extendList = array() , $condition null$index=null$currentFileInfo=null$isReferenced=null ){

        
$this->elements $elements;
        
$this->elements_len count($elements);
        
$this->extendList $extendList;
        
$this->condition $condition;
        if( 
$currentFileInfo ){
            
$this->currentFileInfo $currentFileInfo;
        }
        
$this->isReferenced $isReferenced;
        if( !
$condition ){
            
$this->evaldCondition true;
        }

        
$this->CacheElements();
    }

    function 
accept($visitor) {
        
$this->elements $visitor->visitArray($this->elements);
        
$this->extendList $visitor->visitArray($this->extendList);
        if( 
$this->condition ){
            
$this->condition $visitor->visitObj($this->condition);
        }

        if( 
$visitor instanceof Less_Visitor_extendFinder ){
            
$this->CacheElements();
        }
    }

    function 
createDerived$elements$extendList null$evaldCondition null ){
        
$newSelector = new Less_Tree_Selector$elements, ($extendList $extendList $this->extendList), null$this->index$this->currentFileInfo$this->isReferenced);
        
$newSelector->evaldCondition $evaldCondition $evaldCondition $this->evaldCondition;
        return 
$newSelector;
    }


    public function 
match$other ){

        if( !
$other->_oelements || ($this->elements_len $other->_oelements_len) ){
            return 
0;
        }

        for( 
$i 0$i $other->_oelements_len$i++ ){
            if( 
$this->elements[$i]->value !== $other->_oelements[$i]) {
                return 
0;
            }
        }

        return 
$other->_oelements_len// return number of matched elements
    
}


    public function 
CacheElements(){

        
$this->_oelements = array();
        
$css '';

        foreach(
$this->elements as $v){

            
$css .= $v->combinator;
            if( !
$v->value_is_object ){
                
$css .= $v->value;
                continue;
            }

            if( !
property_exists($v->value,'value') || !is_string($v->value->value) ){
                
$this->cacheable false;
                return;
            }
            
$css .= $v->value->value;
        }

        
$this->_oelements_len preg_match_all('/[,&#.w-](?:[w-]|(?:\\.))*/'$css$matches);
        if( 
$this->_oelements_len ){
            
$this->_oelements $matches[0];

            if( 
$this->_oelements[0] === '&' ){
                
array_shift($this->_oelements);
                
$this->_oelements_len--;
            }
        }
    }

    public function 
isJustParentSelector(){
        return !
$this->mediaEmpty &&
            
count($this->elements) === &&
            
$this->elements[0]->value === '&' &&
            (
$this->elements[0]->combinator === ' ' || $this->elements[0]->combinator === '');
    }

    public function 
compile($env) {

        
$elements = array();
        foreach(
$this->elements as $el){
            
$elements[] = $el->compile($env);
        }

        
$extendList = array();
        foreach(
$this->extendList as $el){
            
$extendList[] = $el->compile($el);
        }

        
$evaldCondition false;
        if( 
$this->condition ){
            
$evaldCondition $this->condition->compile($env);
        }

        return 
$this->createDerived$elements$extendList$evaldCondition );
    }


    
/**
     * @see Less_Tree::genCSS
     */
    
function genCSS$output$firstSelector true ){

        if( !
$firstSelector && $this->elements[0]->combinator === "" ){
            
$output->add(' '$this->currentFileInfo$this->index);
        }

        foreach(
$this->elements as $element){
            
$element->genCSS$output );
        }
    }

    function 
markReferenced(){
        
$this->isReferenced true;
    }

    function 
getIsReferenced(){
        return !isset(
$this->currentFileInfo['reference']) || !$this->currentFileInfo['reference'] || $this->isReferenced;
    }

    function 
getIsOutput(){
        return 
$this->evaldCondition;
    }

}
Онлайн: 4
Реклама