sass 3.3.0.alpha.107 → 3.3.0.alpha.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/engine.rb +2 -4
- data/lib/sass/script/literal.rb +0 -5
- data/lib/sass/script/operation.rb +3 -1
- data/lib/sass/selector/sequence.rb +1 -1
- data/lib/sass/selector/simple_sequence.rb +3 -3
- data/lib/sass/tree/node.rb +1 -1
- data/lib/sass/tree/rule_node.rb +1 -2
- data/lib/sass/tree/visitors/cssize.rb +3 -3
- data/lib/sass/tree/visitors/to_css.rb +0 -1
- data/lib/sass/util.rb +10 -0
- data/lib/sass/version.rb +0 -4
- data/test/sass/conversion_test.rb +1 -1
- data/test/sass/extend_test.rb +2 -16
- data/test/sass/importer_test.rb +4 -4
- data/test/sass/scss/css_test.rb +1 -1
- data/test/sass/source_map_test.rb +5 -6
- data/test/sass/util_test.rb +1 -1
- data/test/test_helper.rb +6 -1
- metadata +3 -3
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
a3ffe87ffef0dddf468060e1b56ca8a0b93cfea3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.0.alpha.
|
1
|
+
3.3.0.alpha.120
|
data/VERSION_DATE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
22 March 2013
|
1
|
+
22 March 2013 22:05:28 GMT
|
data/lib/sass/engine.rb
CHANGED
@@ -353,7 +353,7 @@ ERR
|
|
353
353
|
rendered << "\n" if rendered[-1] != ?\n
|
354
354
|
rendered << "\n" unless compressed
|
355
355
|
rendered << "/*@ sourceMappingURL="
|
356
|
-
rendered <<
|
356
|
+
rendered << Sass::Util.escape_uri(sourcemap_uri)
|
357
357
|
rendered << " */"
|
358
358
|
rendered = encode_and_set_charset(rendered)
|
359
359
|
return rendered, sourcemap
|
@@ -673,9 +673,7 @@ WARNING
|
|
673
673
|
property
|
674
674
|
else
|
675
675
|
res.pop if comment
|
676
|
-
scanner_start_pos = scanner.pos
|
677
676
|
interp_parsed = parse_interp(scanner.rest)
|
678
|
-
scanned_size = scanner.pos - scanner_start_pos
|
679
677
|
selector_range = Sass::Source::Range.new(
|
680
678
|
ident_range.start_pos,
|
681
679
|
Sass::Source::Position.new(@line, to_parser_offset(line.offset) + line.text.length),
|
@@ -911,7 +909,7 @@ WARNING
|
|
911
909
|
def parse_import_arg(scanner, offset)
|
912
910
|
return if scanner.eos?
|
913
911
|
|
914
|
-
if
|
912
|
+
if scanner.match?(/url\(/i)
|
915
913
|
script_parser = Sass::Script::Parser.new(scanner, @line, to_parser_offset(offset), @options)
|
916
914
|
str = script_parser.parse_string
|
917
915
|
|
data/lib/sass/script/literal.rb
CHANGED
@@ -5,11 +5,6 @@ module Sass::Script
|
|
5
5
|
# are designed to be overridden by subclasses which may change the semantics somewhat.
|
6
6
|
# The operations listed here are just the defaults.
|
7
7
|
class Literal < Node
|
8
|
-
require 'sass/script/string'
|
9
|
-
require 'sass/script/number'
|
10
|
-
require 'sass/script/color'
|
11
|
-
require 'sass/script/bool'
|
12
|
-
require 'sass/script/null'
|
13
8
|
require 'sass/script/list'
|
14
9
|
require 'sass/script/arg_list'
|
15
10
|
|
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'sass/script/literal'
|
2
3
|
require 'sass/script/string'
|
3
4
|
require 'sass/script/number'
|
4
5
|
require 'sass/script/color'
|
6
|
+
require 'sass/script/bool'
|
7
|
+
require 'sass/script/null'
|
5
8
|
require 'sass/script/functions'
|
6
9
|
require 'sass/script/unary_operation'
|
7
10
|
require 'sass/script/interpolation'
|
@@ -35,7 +38,6 @@ module Sass::Script
|
|
35
38
|
|
36
39
|
# @see Node#to_sass
|
37
40
|
def to_sass(opts = {})
|
38
|
-
pred = Sass::Script::Parser.precedence_of(@operator)
|
39
41
|
o1 = operand_to_sass @operand1, :left, opts
|
40
42
|
o2 = operand_to_sass @operand2, :right, opts
|
41
43
|
sep =
|
@@ -255,7 +255,7 @@ module Sass
|
|
255
255
|
# is a supersequence of the other, use that, otherwise give up.
|
256
256
|
lcs = Sass::Util.lcs(ops1, ops2)
|
257
257
|
return unless lcs == ops1 || lcs == ops2
|
258
|
-
res.unshift
|
258
|
+
res.unshift(*(ops1.size > ops2.size ? ops1 : ops2).reverse)
|
259
259
|
return res
|
260
260
|
end
|
261
261
|
|
@@ -135,9 +135,9 @@ module Sass
|
|
135
135
|
# by the time extension and unification happen,
|
136
136
|
# this exception will only ever be raised as a result of programmer error
|
137
137
|
def unify(sels, other_subject)
|
138
|
-
return unless sseq = members.inject(sels) do |
|
139
|
-
return unless
|
140
|
-
sel.unify(
|
138
|
+
return unless sseq = members.inject(sels) do |member, sel|
|
139
|
+
return unless member
|
140
|
+
sel.unify(member)
|
141
141
|
end
|
142
142
|
SimpleSequence.new(sseq, other_subject || subject?)
|
143
143
|
end
|
data/lib/sass/tree/node.rb
CHANGED
data/lib/sass/tree/rule_node.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
require 'uri'
|
3
2
|
|
4
3
|
module Sass::Tree
|
5
4
|
# A static node reprenting a CSS rule.
|
@@ -115,7 +114,7 @@ module Sass::Tree
|
|
115
114
|
#
|
116
115
|
# @return [{#to_s => #to_s}]
|
117
116
|
def debug_info
|
118
|
-
{:filename => filename && ("file://" +
|
117
|
+
{:filename => filename && ("file://" + Sass::Util.escape_uri(File.expand_path(filename))),
|
119
118
|
:line => self.line}
|
120
119
|
end
|
121
120
|
|
@@ -124,12 +124,12 @@ class Sass::Tree::Visitors::Cssize < Sass::Tree::Visitors::Base
|
|
124
124
|
end
|
125
125
|
|
126
126
|
sel = sseq.members
|
127
|
-
parent.resolved_rules.members.each do |
|
128
|
-
if !
|
127
|
+
parent.resolved_rules.members.each do |member|
|
128
|
+
if !member.members.last.is_a?(Sass::Selector::SimpleSequence)
|
129
129
|
raise Sass::SyntaxError.new("#{seq} can't extend: invalid selector")
|
130
130
|
end
|
131
131
|
|
132
|
-
@extends[sel] = Extend.new(
|
132
|
+
@extends[sel] = Extend.new(member, sel, node, @parent_directives.dup, :not_found)
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
@@ -274,7 +274,6 @@ class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base
|
|
274
274
|
joined_rules.gsub!(/\s*\n\s*/, "#{line_separator}#{per_rule_indent}")
|
275
275
|
|
276
276
|
old_spaces = ' ' * @tabs
|
277
|
-
spaces = ' ' * (@tabs + 1)
|
278
277
|
if node.style != :compressed
|
279
278
|
if node.options[:debug_info] && !@in_directive
|
280
279
|
visit(debug_info_rule(node.debug_info, node.options))
|
data/lib/sass/util.rb
CHANGED
@@ -3,6 +3,7 @@ require 'set'
|
|
3
3
|
require 'enumerator'
|
4
4
|
require 'stringio'
|
5
5
|
require 'rbconfig'
|
6
|
+
require 'uri'
|
6
7
|
|
7
8
|
require 'sass/root'
|
8
9
|
require 'sass/util/subset_map'
|
@@ -962,6 +963,15 @@ MSG
|
|
962
963
|
end
|
963
964
|
end
|
964
965
|
|
966
|
+
|
967
|
+
URI_ESCAPE = URI.const_defined?(:DEFAULT_PARSER) ?
|
968
|
+
URI::DEFAULT_PARSER :
|
969
|
+
URI
|
970
|
+
|
971
|
+
def escape_uri(uri)
|
972
|
+
URI_ESCAPE.escape uri
|
973
|
+
end
|
974
|
+
|
965
975
|
private
|
966
976
|
|
967
977
|
# Calculates the memoization table for the Least Common Subsequence algorithm.
|
data/lib/sass/version.rb
CHANGED
data/test/sass/extend_test.rb
CHANGED
@@ -489,7 +489,7 @@ CSS
|
|
489
489
|
SCSS
|
490
490
|
end
|
491
491
|
|
492
|
-
def
|
492
|
+
def test_nested_extender_with_early_child_selector
|
493
493
|
assert_equal <<CSS, render(<<SCSS)
|
494
494
|
.foo .bar, .foo .bip > .baz {
|
495
495
|
a: b; }
|
@@ -1061,7 +1061,7 @@ CSS
|
|
1061
1061
|
x! .bar {a: b}
|
1062
1062
|
y! .bap {@extend .bar}
|
1063
1063
|
SCSS
|
1064
|
-
end
|
1064
|
+
end
|
1065
1065
|
|
1066
1066
|
def test_extend_warns_when_extendee_doesnt_exist
|
1067
1067
|
assert_raise_message(Sass::SyntaxError, <<ERR) {render(<<SCSS)}
|
@@ -1089,20 +1089,6 @@ SCSS
|
|
1089
1089
|
a.bar {
|
1090
1090
|
a: b; }
|
1091
1091
|
|
1092
|
-
.bar, b.foo {
|
1093
|
-
c: d; }
|
1094
|
-
CSS
|
1095
|
-
a.bar {a: b}
|
1096
|
-
.bar {c: d}
|
1097
|
-
b.foo {@extend .bar}
|
1098
|
-
SCSS
|
1099
|
-
end
|
1100
|
-
|
1101
|
-
def test_extend_succeeds_when_one_extension_fails_but_others_dont
|
1102
|
-
assert_equal(<<CSS, render(<<SCSS))
|
1103
|
-
a.bar {
|
1104
|
-
a: b; }
|
1105
|
-
|
1106
1092
|
.bar, b.foo {
|
1107
1093
|
c: d; }
|
1108
1094
|
CSS
|
data/test/sass/importer_test.rb
CHANGED
@@ -200,7 +200,7 @@ CSS
|
|
200
200
|
}
|
201
201
|
SCSS
|
202
202
|
|
203
|
-
|
203
|
+
_, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
|
204
204
|
assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
|
205
205
|
{
|
206
206
|
"version": "3",
|
@@ -223,7 +223,7 @@ JSON
|
|
223
223
|
.foo {a: b}
|
224
224
|
SCSS
|
225
225
|
|
226
|
-
|
226
|
+
_, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
|
227
227
|
|
228
228
|
assert_warning(<<WARNING) {sourcemap.to_json(:css_uri => 'css_uri')}
|
229
229
|
WARNING: Couldn't determine public URL for "#{filename_for_test(:scss)}" while generating sourcemap.
|
@@ -244,7 +244,7 @@ WARNING
|
|
244
244
|
.foo {a: b}
|
245
245
|
SCSS
|
246
246
|
|
247
|
-
|
247
|
+
_, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
|
248
248
|
|
249
249
|
assert_warning(<<WARNING) {sourcemap.to_json(:css_uri => 'css_uri', :css_path => 'css_path')}
|
250
250
|
WARNING: Couldn't determine public URL for "#{filename_for_test(:scss)}" while generating sourcemap.
|
@@ -293,7 +293,7 @@ JSON
|
|
293
293
|
.foo {a: b}
|
294
294
|
SCSS
|
295
295
|
|
296
|
-
|
296
|
+
_, sourcemap = engine.render_with_sourcemap('http://map.example.com/map/style.map')
|
297
297
|
css_path = 'static/style.css'
|
298
298
|
sourcemap_path = 'map/style.map'
|
299
299
|
assert_equal <<JSON.strip, sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path)
|
data/test/sass/scss/css_test.rb
CHANGED
@@ -651,7 +651,7 @@ SCSS
|
|
651
651
|
## Selectors
|
652
652
|
|
653
653
|
# Taken from http://dev.w3.org/csswg/selectors4/#overview
|
654
|
-
def
|
654
|
+
def test_summarized_selectors_with_element
|
655
655
|
assert_selector_parses('*')
|
656
656
|
assert_selector_parses('E')
|
657
657
|
assert_selector_parses('E:not(s)')
|
@@ -5,7 +5,7 @@ require File.dirname(__FILE__) + '/test_helper'
|
|
5
5
|
|
6
6
|
class SourcemapTest < Test::Unit::TestCase
|
7
7
|
def test_to_json_requires_args
|
8
|
-
|
8
|
+
_, sourcemap = render_with_sourcemap('')
|
9
9
|
assert_raise(ArgumentError) {sourcemap.to_json({})}
|
10
10
|
assert_raise(ArgumentError) {sourcemap.to_json({:css_path => 'foo'})}
|
11
11
|
assert_raise(ArgumentError) {sourcemap.to_json({:sourcemap_path => 'foo'})}
|
@@ -474,7 +474,7 @@ SCSS
|
|
474
474
|
CSS
|
475
475
|
end
|
476
476
|
|
477
|
-
def test_while_sourcemap_sass
|
477
|
+
def test_while_sourcemap_sass
|
478
478
|
assert_parses_with_mapping <<'SASS', <<'CSS', :syntax => :sass
|
479
479
|
$i: 6
|
480
480
|
@while $i > 0
|
@@ -723,7 +723,6 @@ CSS
|
|
723
723
|
start_positions = {}
|
724
724
|
text.split("\n").each_with_index do |line_text, line|
|
725
725
|
line += 1 # lines shoud be 1-based
|
726
|
-
match_start = 0
|
727
726
|
while match = line_text.match(ANNOTATION_REGEX)
|
728
727
|
closing = !match[1].empty?
|
729
728
|
name = match[2]
|
@@ -750,13 +749,13 @@ CSS
|
|
750
749
|
source_ranges = build_ranges(source, source_file_name)
|
751
750
|
target_ranges = build_ranges(css)
|
752
751
|
map = Sass::Source::Map.new
|
753
|
-
|
752
|
+
Sass::Util.flatten(source_ranges.map do |(name, sources)|
|
754
753
|
assert(sources.length == 1, "#{sources.length} source ranges encountered for annotation #{name}")
|
755
754
|
assert(target_ranges[name], "No target ranges for annotation #{name}")
|
756
755
|
target_ranges[name].map {|target_range| [sources.first, target_range]}
|
757
756
|
end, 1).
|
758
|
-
sort_by {|(
|
759
|
-
each {|(
|
757
|
+
sort_by {|(_, target)| [target.start_pos.line, target.start_pos.offset]}.
|
758
|
+
each {|(s2, target)| map.add(s2, target)}
|
760
759
|
map
|
761
760
|
end
|
762
761
|
|
data/test/sass/util_test.rb
CHANGED
@@ -324,7 +324,7 @@ class UtilTest < Test::Unit::TestCase
|
|
324
324
|
|
325
325
|
def test_json_value_of
|
326
326
|
assert_json_value 0, "0"
|
327
|
-
assert_json_value
|
327
|
+
assert_json_value(-42, "-42")
|
328
328
|
assert_json_value 42, "42"
|
329
329
|
assert_json_value true, "true"
|
330
330
|
assert_json_value false, "false"
|
data/test/test_helper.rb
CHANGED
@@ -7,7 +7,12 @@ require 'sass'
|
|
7
7
|
require 'mathn' if ENV['MATHN'] == 'true'
|
8
8
|
|
9
9
|
Sass::RAILS_LOADED = true unless defined?(Sass::RAILS_LOADED)
|
10
|
-
|
10
|
+
|
11
|
+
if defined?(Encoding)
|
12
|
+
$-w, w = false, $-w
|
13
|
+
Encoding.default_external = 'UTF-8'
|
14
|
+
$-w = w
|
15
|
+
end
|
11
16
|
|
12
17
|
module Sass::Script::Functions
|
13
18
|
def option(name)
|
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: 592303101
|
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
|
+
- 120
|
12
|
+
version: 3.3.0.alpha.120
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|