sass 3.3.0.alpha.222 → 3.3.0.alpha.224
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/selector.rb +18 -15
- data/lib/sass/selector/simple.rb +1 -1
- data/lib/sass/selector/simple_sequence.rb +12 -5
- data/test/sass/extend_test.rb +35 -0
- metadata +10 -10
data/README.md
CHANGED
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
4dfbda0a8021961739f233828fef25363147c4f2
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.0.alpha.
|
1
|
+
3.3.0.alpha.224
|
data/VERSION_DATE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
06 August 2013 20:03:17 GMT
|
data/lib/sass/selector.rb
CHANGED
@@ -344,19 +344,19 @@ module Sass
|
|
344
344
|
# A pseudoclass (e.g. `:visited`) or pseudoelement (e.g. `::first-line`) selector.
|
345
345
|
# It can have arguments (e.g. `:nth-child(2n+1)`).
|
346
346
|
class Pseudo < Simple
|
347
|
-
#
|
348
|
-
#
|
349
|
-
#
|
347
|
+
# Some psuedo-class-syntax selectors are actually considered
|
348
|
+
# pseudo-elements and must be treated differently. This is a list of such
|
349
|
+
# selectors
|
350
350
|
#
|
351
|
-
# @return [
|
352
|
-
|
351
|
+
# @return [Array<String>]
|
352
|
+
ACTUALLY_ELEMENTS = %w[after before first-line first-letter]
|
353
353
|
|
354
|
-
#
|
355
|
-
#
|
356
|
-
#
|
354
|
+
# Like \{#type}, but returns the type of selector this looks like, rather
|
355
|
+
# than the type it is semantically. This only differs from type for
|
356
|
+
# selectors in \{ACTUALLY\_ELEMENTS}.
|
357
357
|
#
|
358
|
-
# @return [
|
359
|
-
|
358
|
+
# @return [Symbol]
|
359
|
+
attr_reader :syntactic_type
|
360
360
|
|
361
361
|
# The name of the selector.
|
362
362
|
#
|
@@ -378,18 +378,22 @@ module Sass
|
|
378
378
|
# @param arg [nil, Array<String, Sass::Script::Tree::Node>] The argument to the selector,
|
379
379
|
# or nil if no argument was given
|
380
380
|
def initialize(type, name, arg)
|
381
|
-
@
|
381
|
+
@syntactic_type = type
|
382
382
|
@name = name
|
383
383
|
@arg = arg
|
384
384
|
end
|
385
385
|
|
386
|
-
|
387
|
-
|
386
|
+
# The type of the selector. `:class` if this is a pseudoclass selector,
|
387
|
+
# `:element` if it's a pseudoelement.
|
388
|
+
#
|
389
|
+
# @return [Symbol]
|
390
|
+
def type
|
391
|
+
ACTUALLY_ELEMENTS.include?(name.first) ? :element : syntactic_type
|
388
392
|
end
|
389
393
|
|
390
394
|
# @see Selector#to_a
|
391
395
|
def to_a
|
392
|
-
res = [
|
396
|
+
res = [syntactic_type == :class ? ":" : "::"] + @name
|
393
397
|
(res << "(").concat(Sass::Util.strip_string_array(@arg)) << ")" if @arg
|
394
398
|
res
|
395
399
|
end
|
@@ -403,7 +407,6 @@ module Sass
|
|
403
407
|
sel.is_a?(Pseudo) && sel.type == :element &&
|
404
408
|
(sel.name != self.name || sel.arg != self.arg)
|
405
409
|
end
|
406
|
-
return sels + [self] if final?
|
407
410
|
super
|
408
411
|
end
|
409
412
|
|
data/lib/sass/selector/simple.rb
CHANGED
@@ -84,7 +84,7 @@ module Sass
|
|
84
84
|
sels_with_ix = Sass::Util.enum_with_index(sels)
|
85
85
|
_, i =
|
86
86
|
if self.is_a?(Pseudo) || self.is_a?(SelectorPseudoClass)
|
87
|
-
sels_with_ix.find {|sel, _| sel.is_a?(Pseudo) && (sels.last.
|
87
|
+
sels_with_ix.find {|sel, _| sel.is_a?(Pseudo) && (sels.last.type == :element)}
|
88
88
|
else
|
89
89
|
sels_with_ix.find {|sel, _| sel.is_a?(Pseudo) || sel.is_a?(SelectorPseudoClass)}
|
90
90
|
end
|
@@ -42,11 +42,16 @@ module Sass
|
|
42
42
|
@base ||= (members.first if members.first.is_a?(Element) || members.first.is_a?(Universal))
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
def pseudo_elements
|
46
|
+
@pseudo_elements ||= (members - [base]).
|
47
|
+
select {|sel| sel.is_a?(Pseudo) && sel.type == :element}
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns the non-base, non-pseudo-class selectors in this sequence.
|
46
51
|
#
|
47
52
|
# @return [Set<Simple>]
|
48
53
|
def rest
|
49
|
-
@rest ||= Set.new(
|
54
|
+
@rest ||= Set.new(members - [base] - pseudo_elements)
|
50
55
|
end
|
51
56
|
|
52
57
|
# Whether or not this compound selector is the subject of the parent
|
@@ -151,7 +156,9 @@ module Sass
|
|
151
156
|
# @param sseq [SimpleSequence]
|
152
157
|
# @return [Boolean]
|
153
158
|
def superselector?(sseq)
|
154
|
-
(base.nil? || base.eql?(sseq.base)) &&
|
159
|
+
(base.nil? || base.eql?(sseq.base)) &&
|
160
|
+
pseudo_elements.eql?(sseq.pseudo_elements) &&
|
161
|
+
rest.subset?(sseq.rest)
|
155
162
|
end
|
156
163
|
|
157
164
|
# @see Simple#to_a
|
@@ -202,8 +209,8 @@ MESSAGE
|
|
202
209
|
end
|
203
210
|
|
204
211
|
def _eql?(other)
|
205
|
-
other.base.eql?(self.base) &&
|
206
|
-
other.subject? == self.subject?
|
212
|
+
other.base.eql?(self.base) && other.pseudo_elements == pseudo_elements &&
|
213
|
+
Sass::Util.set_eql?(other.rest, self.rest) && other.subject? == self.subject?
|
207
214
|
end
|
208
215
|
end
|
209
216
|
end
|
data/test/sass/extend_test.rb
CHANGED
@@ -1116,6 +1116,41 @@ SCSS
|
|
1116
1116
|
|
1117
1117
|
# Regression Tests
|
1118
1118
|
|
1119
|
+
def test_pseudo_element_superselector
|
1120
|
+
# Pseudo-elements shouldn't be removed in superselector calculations.
|
1121
|
+
assert_equal <<CSS, render(<<SCSS)
|
1122
|
+
a#bar, a#bar::fblthp {
|
1123
|
+
a: b; }
|
1124
|
+
CSS
|
1125
|
+
%x#bar {a: b} // Add an id to make the results have high specificity
|
1126
|
+
%y, %y::fblthp {@extend %x}
|
1127
|
+
a {@extend %y}
|
1128
|
+
SCSS
|
1129
|
+
|
1130
|
+
# Pseudo-classes can be removed when the second law allows.
|
1131
|
+
assert_equal <<CSS, render(<<SCSS)
|
1132
|
+
a#bar {
|
1133
|
+
a: b; }
|
1134
|
+
CSS
|
1135
|
+
%x#bar {a: b}
|
1136
|
+
%y, %y:fblthp {@extend %x}
|
1137
|
+
a {@extend %y}
|
1138
|
+
SCSS
|
1139
|
+
|
1140
|
+
# A few pseudo-elements can be written as pseudo-elements for historical
|
1141
|
+
# reasons. See http://www.w3.org/TR/selectors4/#pseudo-elements.
|
1142
|
+
%w[first-line first-letter before after].each do |pseudo|
|
1143
|
+
assert_equal <<CSS, render(<<SCSS)
|
1144
|
+
a#bar, a#bar:#{pseudo} {
|
1145
|
+
a: b; }
|
1146
|
+
CSS
|
1147
|
+
%x#bar {a: b}
|
1148
|
+
%y, %y:#{pseudo} {@extend %x}
|
1149
|
+
a {@extend %y}
|
1150
|
+
SCSS
|
1151
|
+
end
|
1152
|
+
end
|
1153
|
+
|
1119
1154
|
def test_nested_sibling_extend
|
1120
1155
|
assert_equal <<CSS, render(<<SCSS)
|
1121
1156
|
.parent .bar, .parent .foo {
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 592302797
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 3
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 3.3.0.alpha.
|
11
|
+
- 224
|
12
|
+
version: 3.3.0.alpha.224
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|
@@ -19,7 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2013-
|
22
|
+
date: 2013-08-06 00:00:00 -04:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
@@ -193,10 +193,10 @@ files:
|
|
193
193
|
- lib/sass/tree/warn_node.rb
|
194
194
|
- lib/sass/tree/while_node.rb
|
195
195
|
- lib/sass/util/multibyte_string_scanner.rb
|
196
|
-
- lib/sass/util/subset_map.rb
|
197
|
-
- lib/sass/util/test.rb
|
198
196
|
- lib/sass/util/normalized_map.rb
|
199
197
|
- lib/sass/util/ordered_hash.rb
|
198
|
+
- lib/sass/util/subset_map.rb
|
199
|
+
- lib/sass/util/test.rb
|
200
200
|
- lib/sass/version.rb
|
201
201
|
- lib/sass/features.rb
|
202
202
|
- bin/sass
|
@@ -209,8 +209,8 @@ files:
|
|
209
209
|
- test/sass/engine_test.rb
|
210
210
|
- test/sass/css2sass_test.rb
|
211
211
|
- test/sass/data/hsl-rgb.txt
|
212
|
-
- test/sass/extend_test.rb
|
213
212
|
- test/sass/exec_test.rb
|
213
|
+
- test/sass/extend_test.rb
|
214
214
|
- test/sass/importer_test.rb
|
215
215
|
- test/sass/fixtures/test_staleness_check_across_importers.css
|
216
216
|
- test/sass/fixtures/test_staleness_check_across_importers.scss
|
@@ -318,8 +318,8 @@ files:
|
|
318
318
|
- test/sass/templates/warn_imported.sass
|
319
319
|
- test/sass/test_helper.rb
|
320
320
|
- test/sass/util/multibyte_string_scanner_test.rb
|
321
|
-
- test/sass/util/subset_map_test.rb
|
322
321
|
- test/sass/util/normalized_map_test.rb
|
322
|
+
- test/sass/util/subset_map_test.rb
|
323
323
|
- test/sass/source_map_test.rb
|
324
324
|
- test/test_helper.rb
|
325
325
|
- extra/update_watch.rb
|
@@ -377,8 +377,8 @@ test_files:
|
|
377
377
|
- test/sass/conversion_test.rb
|
378
378
|
- test/sass/engine_test.rb
|
379
379
|
- test/sass/css2sass_test.rb
|
380
|
-
- test/sass/extend_test.rb
|
381
380
|
- test/sass/exec_test.rb
|
381
|
+
- test/sass/extend_test.rb
|
382
382
|
- test/sass/importer_test.rb
|
383
383
|
- test/sass/functions_test.rb
|
384
384
|
- test/sass/plugin_test.rb
|
@@ -391,6 +391,6 @@ test_files:
|
|
391
391
|
- test/sass/scss/scss_test.rb
|
392
392
|
- test/sass/compiler_test.rb
|
393
393
|
- test/sass/util/multibyte_string_scanner_test.rb
|
394
|
-
- test/sass/util/subset_map_test.rb
|
395
394
|
- test/sass/util/normalized_map_test.rb
|
395
|
+
- test/sass/util/subset_map_test.rb
|
396
396
|
- test/sass/source_map_test.rb
|