haml 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/VERSION +1 -1
- data/vendor/sass/Rakefile +22 -46
- data/vendor/sass/VERSION +1 -1
- data/vendor/sass/VERSION_NAME +1 -1
- data/vendor/sass/bin/scss +8 -0
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +125 -9
- data/vendor/sass/doc-src/SASS_REFERENCE.md +84 -8
- data/vendor/sass/lib/sass.rb +0 -3
- data/vendor/sass/lib/sass/cache_stores.rb +1 -0
- data/vendor/sass/lib/sass/cache_stores/base.rb +2 -2
- data/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
- data/vendor/sass/lib/sass/cache_stores/filesystem.rb +6 -4
- data/vendor/sass/lib/sass/cache_stores/memory.rb +8 -12
- data/vendor/sass/lib/sass/engine.rb +65 -56
- data/vendor/sass/lib/sass/environment.rb +5 -2
- data/vendor/sass/lib/sass/exec.rb +52 -21
- data/vendor/sass/lib/sass/importers/filesystem.rb +32 -9
- data/vendor/sass/lib/sass/less.rb +1 -1
- data/vendor/sass/lib/sass/plugin.rb +11 -1
- data/vendor/sass/lib/sass/plugin/compiler.rb +21 -12
- data/vendor/sass/lib/sass/plugin/rails.rb +8 -82
- data/vendor/sass/lib/sass/plugin/staleness_checker.rb +10 -10
- data/vendor/sass/lib/sass/railtie.rb +3 -2
- data/vendor/sass/lib/sass/script.rb +2 -25
- data/vendor/sass/lib/sass/script/color.rb +4 -15
- data/vendor/sass/lib/sass/script/funcall.rb +63 -19
- data/vendor/sass/lib/sass/script/functions.rb +257 -19
- data/vendor/sass/lib/sass/script/lexer.rb +1 -4
- data/vendor/sass/lib/sass/script/list.rb +2 -2
- data/vendor/sass/lib/sass/script/node.rb +0 -27
- data/vendor/sass/lib/sass/script/number.rb +1 -1
- data/vendor/sass/lib/sass/script/operation.rb +0 -5
- data/vendor/sass/lib/sass/script/parser.rb +30 -12
- data/vendor/sass/lib/sass/script/string.rb +2 -17
- data/vendor/sass/lib/sass/script/string_interpolation.rb +1 -0
- data/vendor/sass/lib/sass/scss/parser.rb +58 -18
- data/vendor/sass/lib/sass/scss/rx.rb +2 -1
- data/vendor/sass/lib/sass/scss/script_lexer.rb +1 -1
- data/vendor/sass/lib/sass/selector/comma_sequence.rb +2 -3
- data/vendor/sass/lib/sass/selector/sequence.rb +3 -6
- data/vendor/sass/lib/sass/selector/simple_sequence.rb +2 -3
- data/vendor/sass/lib/sass/tree/charset_node.rb +0 -15
- data/vendor/sass/lib/sass/tree/comment_node.rb +20 -71
- data/vendor/sass/lib/sass/tree/debug_node.rb +4 -22
- data/vendor/sass/lib/sass/tree/directive_node.rb +0 -52
- data/vendor/sass/lib/sass/tree/each_node.rb +8 -38
- data/vendor/sass/lib/sass/tree/extend_node.rb +12 -48
- data/vendor/sass/lib/sass/tree/for_node.rb +20 -51
- data/vendor/sass/lib/sass/tree/function_node.rb +27 -0
- data/vendor/sass/lib/sass/tree/if_node.rb +22 -57
- data/vendor/sass/lib/sass/tree/import_node.rb +0 -56
- data/vendor/sass/lib/sass/tree/media_node.rb +0 -43
- data/vendor/sass/lib/sass/tree/mixin_def_node.rb +12 -45
- data/vendor/sass/lib/sass/tree/mixin_node.rb +13 -124
- data/vendor/sass/lib/sass/tree/node.rb +18 -304
- data/vendor/sass/lib/sass/tree/prop_node.rb +24 -92
- data/vendor/sass/lib/sass/tree/return_node.rb +18 -0
- data/vendor/sass/lib/sass/tree/root_node.rb +4 -133
- data/vendor/sass/lib/sass/tree/rule_node.rb +21 -164
- data/vendor/sass/lib/sass/tree/variable_node.rb +14 -23
- data/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
- data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +134 -0
- data/vendor/sass/lib/sass/tree/visitors/convert.rb +255 -0
- data/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
- data/vendor/sass/lib/sass/tree/visitors/perform.rb +301 -0
- data/vendor/sass/lib/sass/tree/visitors/to_css.rb +216 -0
- data/vendor/sass/lib/sass/tree/warn_node.rb +4 -28
- data/vendor/sass/lib/sass/tree/while_node.rb +5 -35
- data/vendor/sass/lib/sass/util.rb +0 -50
- data/vendor/sass/sass.gemspec +1 -1
- data/vendor/sass/test/sass/conversion_test.rb +53 -102
- data/vendor/sass/test/sass/engine_test.rb +416 -540
- data/vendor/sass/test/sass/functions_test.rb +306 -4
- data/vendor/sass/test/sass/importer_test.rb +0 -22
- data/vendor/sass/test/sass/plugin_test.rb +51 -21
- data/vendor/sass/test/sass/results/if.css +3 -0
- data/vendor/sass/test/sass/script_conversion_test.rb +0 -38
- data/vendor/sass/test/sass/script_test.rb +19 -4
- data/vendor/sass/test/sass/scss/scss_test.rb +32 -11
- data/vendor/sass/test/sass/templates/if.sass +11 -0
- data/vendor/sass/test/sass/templates/nested_import.sass +2 -0
- data/vendor/sass/test/sass/util_test.rb +0 -21
- data/vendor/sass/test/test_helper.rb +0 -3
- metadata +268 -258
- data/vendor/sass/bin/css2sass +0 -13
- data/vendor/sass/lib/sass/cache_stores/active_support.rb +0 -28
- data/vendor/sass/lib/sass/importers/rails.rb +0 -75
@@ -4,33 +4,15 @@ module Sass
|
|
4
4
|
#
|
5
5
|
# @see Sass::Tree
|
6
6
|
class DebugNode < Node
|
7
|
+
# The expression to print.
|
8
|
+
# @return [Script::Node]
|
9
|
+
attr_reader :expr
|
10
|
+
|
7
11
|
# @param expr [Script::Node] The expression to print
|
8
12
|
def initialize(expr)
|
9
13
|
@expr = expr
|
10
14
|
super()
|
11
15
|
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
# @see Node#to_src
|
16
|
-
def to_src(tabs, opts, fmt)
|
17
|
-
"#{' ' * tabs}@debug #{@expr.to_sass(opts)}#{semi fmt}\n"
|
18
|
-
end
|
19
|
-
|
20
|
-
# Prints the expression to STDERR.
|
21
|
-
#
|
22
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
23
|
-
# variable and mixin values
|
24
|
-
def _perform(environment)
|
25
|
-
res = @expr.perform(environment)
|
26
|
-
res = res.value if res.is_a?(Sass::Script::String)
|
27
|
-
if filename
|
28
|
-
$stderr.puts "#{filename}:#{line} DEBUG: #{res}"
|
29
|
-
else
|
30
|
-
$stderr.puts "Line #{line} DEBUG: #{res}"
|
31
|
-
end
|
32
|
-
[]
|
33
|
-
end
|
34
16
|
end
|
35
17
|
end
|
36
18
|
end
|
@@ -19,57 +19,5 @@ module Sass::Tree
|
|
19
19
|
@value = value
|
20
20
|
super()
|
21
21
|
end
|
22
|
-
|
23
|
-
protected
|
24
|
-
|
25
|
-
# @see Node#to_src
|
26
|
-
def to_src(tabs, opts, fmt)
|
27
|
-
res = "#{' ' * tabs}#{value}"
|
28
|
-
return res + "#{semi fmt}\n" unless has_children
|
29
|
-
res + children_to_src(tabs, opts, fmt) + "\n"
|
30
|
-
end
|
31
|
-
|
32
|
-
# Computes the CSS for the directive.
|
33
|
-
#
|
34
|
-
# @param tabs [Fixnum] The level of indentation for the CSS
|
35
|
-
# @return [String] The resulting CSS
|
36
|
-
def _to_s(tabs)
|
37
|
-
return value + ";" unless has_children
|
38
|
-
return value + " {}" if children.empty?
|
39
|
-
result = if style == :compressed
|
40
|
-
"#{value}{"
|
41
|
-
else
|
42
|
-
"#{' ' * (tabs - 1)}#{value} {" + (style == :compact ? ' ' : "\n")
|
43
|
-
end
|
44
|
-
was_prop = false
|
45
|
-
first = true
|
46
|
-
children.each do |child|
|
47
|
-
next if child.invisible?
|
48
|
-
if style == :compact
|
49
|
-
if child.is_a?(PropNode)
|
50
|
-
result << "#{child.to_s(first || was_prop ? 1 : tabs + 1)} "
|
51
|
-
else
|
52
|
-
if was_prop
|
53
|
-
result[-1] = "\n"
|
54
|
-
end
|
55
|
-
rendered = child.to_s(tabs + 1).dup
|
56
|
-
rendered = rendered.lstrip if first
|
57
|
-
result << rendered.rstrip + "\n"
|
58
|
-
end
|
59
|
-
was_prop = child.is_a?(PropNode)
|
60
|
-
first = false
|
61
|
-
elsif style == :compressed
|
62
|
-
result << (was_prop ? ";#{child.to_s(1)}" : child.to_s(1))
|
63
|
-
was_prop = child.is_a?(PropNode)
|
64
|
-
else
|
65
|
-
result << child.to_s(tabs + 1) + "\n"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
result.rstrip + if style == :compressed
|
69
|
-
"}"
|
70
|
-
else
|
71
|
-
(style == :expanded ? "\n" : " ") + "}\n"
|
72
|
-
end
|
73
|
-
end
|
74
22
|
end
|
75
23
|
end
|
@@ -5,6 +5,14 @@ module Sass::Tree
|
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class EachNode < Node
|
8
|
+
# The name of the loop variable.
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :var
|
11
|
+
|
12
|
+
# The parse tree for the list.
|
13
|
+
# @param [Script::Node]
|
14
|
+
attr_reader :list
|
15
|
+
|
8
16
|
# @param var [String] The name of the loop variable
|
9
17
|
# @param list [Script::Node] The parse tree for the list
|
10
18
|
def initialize(var, list)
|
@@ -12,43 +20,5 @@ module Sass::Tree
|
|
12
20
|
@list = list
|
13
21
|
super()
|
14
22
|
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
# @see Node#to_src
|
19
|
-
def to_src(tabs, opts, fmt)
|
20
|
-
"#{' ' * tabs}@each $#{dasherize(@var, opts)} in #{@list.to_sass(opts)}" +
|
21
|
-
children_to_src(tabs, opts, fmt)
|
22
|
-
end
|
23
|
-
|
24
|
-
# Runs the child nodes once for each value in the list.
|
25
|
-
#
|
26
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
27
|
-
# variable and mixin values
|
28
|
-
# @return [Array<Tree::Node>] The resulting static nodes
|
29
|
-
# @see Sass::Tree
|
30
|
-
def _perform(environment)
|
31
|
-
list = @list.perform(environment)
|
32
|
-
|
33
|
-
children = []
|
34
|
-
environment = Sass::Environment.new(environment)
|
35
|
-
list.to_a.each do |v|
|
36
|
-
environment.set_local_var(@var, v)
|
37
|
-
children += perform_children(environment)
|
38
|
-
end
|
39
|
-
children
|
40
|
-
end
|
41
|
-
|
42
|
-
# Returns an error message if the given child node is invalid,
|
43
|
-
# and false otherwise.
|
44
|
-
#
|
45
|
-
# {ExtendNode}s are valid within {EachNode}s.
|
46
|
-
#
|
47
|
-
# @param child [Tree::Node] A potential child node.
|
48
|
-
# @return [Boolean, String] Whether or not the child node is valid,
|
49
|
-
# as well as the error message to display if it is invalid
|
50
|
-
def invalid_child?(child)
|
51
|
-
super unless child.is_a?(ExtendNode)
|
52
|
-
end
|
53
23
|
end
|
54
24
|
end
|
@@ -5,6 +5,18 @@ module Sass::Tree
|
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class ExtendNode < Node
|
8
|
+
# The parsed selector after interpolation has been resolved.
|
9
|
+
# Only set once {Tree::Visitors::Perform} has been run.
|
10
|
+
#
|
11
|
+
# @return [Selector::CommaSequence]
|
12
|
+
attr_accessor :resolved_selector
|
13
|
+
|
14
|
+
# The CSS selector to extend, interspersed with {Sass::Script::Node}s
|
15
|
+
# representing `#{}`-interpolation.
|
16
|
+
#
|
17
|
+
# @return [Array<String, Sass::Script::Node>]
|
18
|
+
attr_reader :selector
|
19
|
+
|
8
20
|
# @param selector [Array<String, Sass::Script::Node>]
|
9
21
|
# The CSS selector to extend,
|
10
22
|
# interspersed with {Sass::Script::Node}s
|
@@ -13,53 +25,5 @@ module Sass::Tree
|
|
13
25
|
@selector = selector
|
14
26
|
super()
|
15
27
|
end
|
16
|
-
|
17
|
-
# Registers this extension in the `extends` subset map.
|
18
|
-
#
|
19
|
-
# @param extends [Sass::Util::SubsetMap{Selector::Simple => Selector::Sequence}]
|
20
|
-
# The extensions defined for this tree
|
21
|
-
# @param parent [RuleNode] The parent node of this node
|
22
|
-
# @see Node#cssize
|
23
|
-
def cssize(extends, parent)
|
24
|
-
@resolved_selector.members.each do |seq|
|
25
|
-
if seq.members.size > 1
|
26
|
-
raise Sass::SyntaxError.new("Can't extend #{seq.to_a.join}: can't extend nested selectors")
|
27
|
-
end
|
28
|
-
|
29
|
-
sseq = seq.members.first
|
30
|
-
if !sseq.is_a?(Sass::Selector::SimpleSequence)
|
31
|
-
raise Sass::SyntaxError.new("Can't extend #{seq.to_a.join}: invalid selector")
|
32
|
-
end
|
33
|
-
|
34
|
-
sel = sseq.members
|
35
|
-
parent.resolved_rules.members.each do |seq|
|
36
|
-
if !seq.members.last.is_a?(Sass::Selector::SimpleSequence)
|
37
|
-
raise Sass::SyntaxError.new("#{seq} can't extend: invalid selector")
|
38
|
-
end
|
39
|
-
|
40
|
-
extends[sel] = seq
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
[]
|
45
|
-
end
|
46
|
-
|
47
|
-
protected
|
48
|
-
|
49
|
-
# @see Node#to_src
|
50
|
-
def to_src(tabs, opts, fmt)
|
51
|
-
"#{' ' * tabs}@extend #{selector_to_src(@selector, tabs, opts, fmt).lstrip}#{semi fmt}\n"
|
52
|
-
end
|
53
|
-
|
54
|
-
# Runs SassScript interpolation in the selector,
|
55
|
-
# and then parses the result into a {Sass::Selector::CommaSequence}.
|
56
|
-
#
|
57
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
58
|
-
# variable and mixin values
|
59
|
-
def perform!(environment)
|
60
|
-
@resolved_selector = Sass::SCSS::CssParser.new(run_interp(@selector, environment), self.line).
|
61
|
-
parse_selector(self.filename)
|
62
|
-
super
|
63
|
-
end
|
64
28
|
end
|
65
29
|
end
|
@@ -5,11 +5,26 @@ module Sass::Tree
|
|
5
5
|
#
|
6
6
|
# @see Sass::Tree
|
7
7
|
class ForNode < Node
|
8
|
-
#
|
9
|
-
# @
|
10
|
-
|
11
|
-
|
12
|
-
#
|
8
|
+
# The name of the loop variable.
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :var
|
11
|
+
|
12
|
+
# The parse tree for the initial expression.
|
13
|
+
# @return [Script::Node]
|
14
|
+
attr_reader :from
|
15
|
+
|
16
|
+
# The parse tree for the final expression.
|
17
|
+
# @return [Script::Node]
|
18
|
+
attr_reader :to
|
19
|
+
|
20
|
+
# Whether to include `to` in the loop or stop just before.
|
21
|
+
# @return [Boolean]
|
22
|
+
attr_reader :exclusive
|
23
|
+
|
24
|
+
# @param var [String] See \{#var}
|
25
|
+
# @param from [Script::Node] See \{#from}
|
26
|
+
# @param to [Script::Node] See \{#to}
|
27
|
+
# @param exclusive [Boolean] See \{#exclusive}
|
13
28
|
def initialize(var, from, to, exclusive)
|
14
29
|
@var = var
|
15
30
|
@from = from
|
@@ -17,51 +32,5 @@ module Sass::Tree
|
|
17
32
|
@exclusive = exclusive
|
18
33
|
super()
|
19
34
|
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
# @see Node#to_src
|
24
|
-
def to_src(tabs, opts, fmt)
|
25
|
-
to = @exclusive ? "to" : "through"
|
26
|
-
"#{' ' * tabs}@for $#{dasherize(@var, opts)} from #{@from.to_sass(opts)} #{to} #{@to.to_sass(opts)}" +
|
27
|
-
children_to_src(tabs, opts, fmt)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Runs the child nodes once for each time through the loop,
|
31
|
-
# varying the variable each time.
|
32
|
-
#
|
33
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
34
|
-
# variable and mixin values
|
35
|
-
# @return [Array<Tree::Node>] The resulting static nodes
|
36
|
-
# @see Sass::Tree
|
37
|
-
def _perform(environment)
|
38
|
-
from = @from.perform(environment)
|
39
|
-
to = @to.perform(environment)
|
40
|
-
from.assert_int!
|
41
|
-
to.assert_int!
|
42
|
-
|
43
|
-
to = to.coerce(from.numerator_units, from.denominator_units)
|
44
|
-
range = Range.new(from.to_i, to.to_i, @exclusive)
|
45
|
-
|
46
|
-
children = []
|
47
|
-
environment = Sass::Environment.new(environment)
|
48
|
-
range.each do |i|
|
49
|
-
environment.set_local_var(@var, Sass::Script::Number.new(i, from.numerator_units, from.denominator_units))
|
50
|
-
children += perform_children(environment)
|
51
|
-
end
|
52
|
-
children
|
53
|
-
end
|
54
|
-
|
55
|
-
# Returns an error message if the given child node is invalid,
|
56
|
-
# and false otherwise.
|
57
|
-
#
|
58
|
-
# {ExtendNode}s are valid within {ForNode}s.
|
59
|
-
#
|
60
|
-
# @param child [Tree::Node] A potential child node.
|
61
|
-
# @return [Boolean, String] Whether or not the child node is valid,
|
62
|
-
# as well as the error message to display if it is invalid
|
63
|
-
def invalid_child?(child)
|
64
|
-
super unless child.is_a?(ExtendNode)
|
65
|
-
end
|
66
35
|
end
|
67
36
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Sass
|
2
|
+
module Tree
|
3
|
+
# A dynamic node representing a function definition.
|
4
|
+
#
|
5
|
+
# @see Sass::Tree
|
6
|
+
class FunctionNode < Node
|
7
|
+
# The name of the function.
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# The arguments to the function. Each element is a tuple
|
12
|
+
# containing the variable for argument and the parse tree for
|
13
|
+
# the default value of the argument
|
14
|
+
#
|
15
|
+
# @return [Array<Script::Node>]
|
16
|
+
attr_reader :args
|
17
|
+
|
18
|
+
# @param name [String] The function name
|
19
|
+
# @param args [Array<(Script::Node, Script::Node)>] The arguments for the function.
|
20
|
+
def initialize(name, args)
|
21
|
+
@name = name
|
22
|
+
@args = args
|
23
|
+
super()
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -9,13 +9,18 @@ module Sass::Tree
|
|
9
9
|
#
|
10
10
|
# @see Sass::Tree
|
11
11
|
class IfNode < Node
|
12
|
+
# The conditional expression.
|
13
|
+
# If this is nil, this is an `@else` node, not an `@else if`.
|
14
|
+
#
|
15
|
+
# @return [Script::Expr]
|
16
|
+
attr_reader :expr
|
17
|
+
|
12
18
|
# The next {IfNode} in the if-else list, or `nil`.
|
13
19
|
#
|
14
20
|
# @return [IfNode]
|
15
21
|
attr_accessor :else
|
16
22
|
|
17
|
-
# @param expr [Script::Expr]
|
18
|
-
# If this is nil, this is an `@else` node, not an `@else if`
|
23
|
+
# @param expr [Script::Expr] See \{#expr}
|
19
24
|
def initialize(expr)
|
20
25
|
@expr = expr
|
21
26
|
@last_else = self
|
@@ -36,65 +41,25 @@ module Sass::Tree
|
|
36
41
|
self.else.options = options if self.else
|
37
42
|
end
|
38
43
|
|
39
|
-
|
40
|
-
|
41
|
-
old_else = @else
|
42
|
-
old_last_else = @last_else
|
43
|
-
@else = Sass::Util.dump(@else)
|
44
|
-
@last_else = (self == @last_else ? nil : Sass::Util.dump(@last_else))
|
45
|
-
super
|
46
|
-
ensure
|
47
|
-
@else = old_else
|
48
|
-
@last_else = old_last_else
|
49
|
-
end
|
50
|
-
|
51
|
-
# @see Node#_after_load
|
52
|
-
def _after_load
|
53
|
-
super
|
54
|
-
@else = Sass::Util.load(@else)
|
55
|
-
@last_else = (@last_else ? Sass::Util.load(@last_else) : self)
|
56
|
-
end
|
57
|
-
|
58
|
-
protected
|
59
|
-
|
60
|
-
# @see Node#to_src
|
61
|
-
def to_src(tabs, opts, fmt, is_else = false)
|
62
|
-
name =
|
63
|
-
if !is_else; "if"
|
64
|
-
elsif @expr; "else if"
|
65
|
-
else; "else"
|
66
|
-
end
|
67
|
-
str = "#{' ' * tabs}@#{name}"
|
68
|
-
str << " #{@expr.to_sass(opts)}" if @expr
|
69
|
-
str << children_to_src(tabs, opts, fmt)
|
70
|
-
str << @else.send(:to_src, tabs, opts, fmt, true) if @else
|
71
|
-
str
|
44
|
+
def _dump(f)
|
45
|
+
Marshal.dump([self.expr, self.else, self.children])
|
72
46
|
end
|
73
47
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
environment = Sass::Environment.new(environment)
|
83
|
-
return perform_children(environment) if @expr.nil? || @expr.perform(environment).to_bool
|
84
|
-
return @else.perform(environment) if @else
|
85
|
-
[]
|
48
|
+
def self._load(data)
|
49
|
+
expr, else_, children = Marshal.load(data)
|
50
|
+
node = IfNode.new(expr)
|
51
|
+
node.else = else_
|
52
|
+
node.children = children
|
53
|
+
node.instance_variable_set('@last_else',
|
54
|
+
node.else ? node.else.instance_variable_get('@last_else') : node)
|
55
|
+
node
|
86
56
|
end
|
87
57
|
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
# @param child [Tree::Node] A potential child node.
|
94
|
-
# @return [Boolean, String] Whether or not the child node is valid,
|
95
|
-
# as well as the error message to display if it is invalid
|
96
|
-
def invalid_child?(child)
|
97
|
-
super unless child.is_a?(ExtendNode)
|
58
|
+
# @see Node#deep_copy
|
59
|
+
def deep_copy
|
60
|
+
node = super
|
61
|
+
node.else = self.else.deep_copy if self.else
|
62
|
+
node
|
98
63
|
end
|
99
64
|
end
|
100
65
|
end
|
@@ -25,21 +25,6 @@ module Sass
|
|
25
25
|
@imported_file ||= import
|
26
26
|
end
|
27
27
|
|
28
|
-
# @see Node#to_sass
|
29
|
-
def to_sass(tabs = 0, opts = {})
|
30
|
-
"#{' ' * tabs}@import #{@imported_filename}\n"
|
31
|
-
end
|
32
|
-
|
33
|
-
# @see Node#to_scss
|
34
|
-
def to_scss(tabs = 0, opts = {})
|
35
|
-
"#{' ' * tabs}@import \"#{@imported_filename}\";\n"
|
36
|
-
end
|
37
|
-
|
38
|
-
# @see Node#cssize
|
39
|
-
def cssize(*args)
|
40
|
-
super.first
|
41
|
-
end
|
42
|
-
|
43
28
|
# Returns whether or not this import should emit a CSS @import declaration
|
44
29
|
#
|
45
30
|
# @return [Boolean] Whether or not this is a simple CSS @import declaration.
|
@@ -51,47 +36,6 @@ module Sass
|
|
51
36
|
end
|
52
37
|
end
|
53
38
|
|
54
|
-
protected
|
55
|
-
|
56
|
-
# @see Node#_cssize
|
57
|
-
def _cssize(*args)
|
58
|
-
super.children
|
59
|
-
rescue Sass::SyntaxError => e
|
60
|
-
e.modify_backtrace(:filename => children.first.filename)
|
61
|
-
e.add_backtrace(:filename => @filename, :line => @line)
|
62
|
-
raise e
|
63
|
-
end
|
64
|
-
|
65
|
-
# Returns a static DirectiveNode if this is importing a CSS file,
|
66
|
-
# or parses and includes the imported Sass file.
|
67
|
-
#
|
68
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
69
|
-
# variable and mixin values
|
70
|
-
def _perform(environment)
|
71
|
-
if path = css_import?
|
72
|
-
return DirectiveNode.new("@import url(#{path})")
|
73
|
-
end
|
74
|
-
super
|
75
|
-
end
|
76
|
-
|
77
|
-
# Parses the imported file and runs the dynamic Sass for it.
|
78
|
-
#
|
79
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
80
|
-
# variable and mixin values
|
81
|
-
def perform!(environment)
|
82
|
-
environment.push_frame(:filename => @filename, :line => @line)
|
83
|
-
# TODO: re-enable caching
|
84
|
-
root = imported_file.to_tree
|
85
|
-
self.children = root.children
|
86
|
-
self.children = perform_children(environment)
|
87
|
-
rescue Sass::SyntaxError => e
|
88
|
-
e.modify_backtrace(:filename => imported_file.options[:filename])
|
89
|
-
e.add_backtrace(:filename => @filename, :line => @line)
|
90
|
-
raise e
|
91
|
-
ensure
|
92
|
-
environment.pop_frame
|
93
|
-
end
|
94
|
-
|
95
39
|
private
|
96
40
|
|
97
41
|
def import
|