Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
76 / 76 |
|
100.00% |
11 / 11 |
CRAP | |
100.00% |
1 / 1 |
Less_Tree_Selector | |
100.00% |
76 / 76 |
|
100.00% |
11 / 11 |
42 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
3 | |||
accept | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
3 | |||
createDerived | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
3 | |||
match | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
5 | |||
CacheElements | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
10 | |||
isJustParentSelector | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
5 | |||
compile | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
4 | |||
genCSS | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
4 | |||
markReferenced | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getIsReferenced | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
3 | |||
getIsOutput | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | /** |
3 | * @private |
4 | */ |
5 | class Less_Tree_Selector extends Less_Tree { |
6 | |
7 | public $elements; |
8 | public $condition; |
9 | public $extendList = []; |
10 | public $_css; |
11 | public $index; |
12 | public $evaldCondition = false; |
13 | public $currentFileInfo = []; |
14 | public $isReferenced; |
15 | public $mediaEmpty; |
16 | |
17 | public $elements_len = 0; |
18 | |
19 | public $_oelements; |
20 | public $_oelements_assoc; |
21 | public $_oelements_len; |
22 | public $cacheable = true; |
23 | |
24 | /** |
25 | * @param Less_Tree_Element[] $elements |
26 | * @param Less_Tree_Element[] $extendList |
27 | * @param Less_Tree_Condition|null $condition |
28 | * @param int|null $index |
29 | * @param array|null $currentFileInfo |
30 | * @param bool|null $isReferenced |
31 | */ |
32 | public function __construct( $elements, $extendList = [], $condition = null, $index = null, $currentFileInfo = null, $isReferenced = null ) { |
33 | $this->elements = $elements; |
34 | $this->elements_len = count( $elements ); |
35 | $this->extendList = $extendList; |
36 | $this->condition = $condition; |
37 | if ( $currentFileInfo ) { |
38 | $this->currentFileInfo = $currentFileInfo; |
39 | } |
40 | $this->isReferenced = $isReferenced; |
41 | if ( !$condition ) { |
42 | $this->evaldCondition = true; |
43 | } |
44 | |
45 | $this->CacheElements(); |
46 | } |
47 | |
48 | public function accept( $visitor ) { |
49 | $this->elements = $visitor->visitArray( $this->elements ); |
50 | $this->extendList = $visitor->visitArray( $this->extendList ); |
51 | if ( $this->condition ) { |
52 | $this->condition = $visitor->visitObj( $this->condition ); |
53 | } |
54 | |
55 | if ( $visitor instanceof Less_Visitor_extendFinder ) { |
56 | $this->CacheElements(); |
57 | } |
58 | } |
59 | |
60 | public function createDerived( $elements, $extendList = null, $evaldCondition = null ) { |
61 | $newSelector = new self( |
62 | $elements, |
63 | ( $extendList ?: $this->extendList ), |
64 | null, |
65 | $this->index, |
66 | $this->currentFileInfo, |
67 | $this->isReferenced |
68 | ); |
69 | $newSelector->evaldCondition = $evaldCondition ?: $this->evaldCondition; |
70 | $newSelector->mediaEmpty = $this->mediaEmpty; |
71 | return $newSelector; |
72 | } |
73 | |
74 | public function match( $other ) { |
75 | if ( !$other->_oelements || ( $this->elements_len < $other->_oelements_len ) ) { |
76 | return 0; |
77 | } |
78 | |
79 | for ( $i = 0; $i < $other->_oelements_len; $i++ ) { |
80 | if ( $this->elements[$i]->value !== $other->_oelements[$i] ) { |
81 | return 0; |
82 | } |
83 | } |
84 | |
85 | return $other->_oelements_len; // return number of matched elements |
86 | } |
87 | |
88 | /** |
89 | * @see less-2.5.3.js#Selector.prototype.CacheElements |
90 | */ |
91 | public function CacheElements() { |
92 | $this->_oelements = []; |
93 | $this->_oelements_assoc = []; |
94 | |
95 | $css = ''; |
96 | |
97 | foreach ( $this->elements as $v ) { |
98 | |
99 | $css .= $v->combinator; |
100 | if ( !$v->value_is_object ) { |
101 | $css .= $v->value; |
102 | continue; |
103 | } |
104 | |
105 | if ( isset( $v->value->value ) && is_scalar( $v->value->value ) ) { |
106 | $css .= $v->value->value; |
107 | continue; |
108 | } |
109 | |
110 | if ( ( $v->value instanceof Less_Tree_Selector || $v->value instanceof Less_Tree_Variable ) |
111 | || !is_string( $v->value->value ) ) { |
112 | $this->cacheable = false; |
113 | return; |
114 | } |
115 | } |
116 | |
117 | $this->_oelements_len = preg_match_all( '/[,&#\*\.\w-](?:[\w-]|(?:\\\\.))*/', $css, $matches ); |
118 | if ( $this->_oelements_len ) { |