Class: Sass::Tree::Node
- Inherits:
-
Object
- Object
- Sass::Tree::Node
- Includes:
- Enumerable
- Defined in:
- /var/www/sass-pages/.haml/lib/sass/tree/node.rb
Overview
The abstract superclass of all parse-tree nodes.
Direct Known Subclasses
CommentNode, DebugNode, DirectiveNode, ExtendNode, ForNode, IfNode, MixinDefNode, MixinNode, PropNode, RootNode, RuleNode, VariableNode, WarnNode, WhileNode
Instance Attribute Summary
- - (Array<Tree::Node>) children The child nodes of this node.
- - (String) filename The name of the document on which this node appeared.
- - (Boolean) has_children Whether or not this node has child nodes.
- - (Fixnum) line The line of the document on which this node appeared.
- - ({Symbol => Object}) options The options hash for the node.
Instance Method Summary
- - <<(child) Appends a child to the node.
- - (Boolean) =(other) Compares this node and another object (only other Tree::Nodes will be equal).
- - (Tree::Node+) _cssize(extends, parent) protected Converts this static Sass node into a static CSS node, returning the new node.
- - (Tree::Node+) _perform(environment) protected Runs any dynamic Sass code in this particular node.
- - (String?) _to_s protected Computes the CSS corresponding to this particular Sass node.
- - balance(*args) protected
- - check_child!(child) Raises an error if the given child node is invalid.
- - (String) children_to_src(tabs, opts, fmt) protected Converts the children of this node to a Sass or SCSS string.
- - (Tree::Node) cssize(extends, parent = nil) Converts a static Sass tree (e.g. the output of #perform) into a static CSS tree.
- - cssize!(extends, parent) protected Destructively converts this static Sass node into a static CSS node.
-
- (String) dasherize(s, opts)
protected
Convert any underscores in a string into hyphens, but only if the
:dasherizeoption is set. - - (Tree::Node) do_extend(extends) Converts a static CSS tree (e.g. the output of #cssize) into another static CSS tree, with the given extensions applied to all relevant RuleNodes.
- - each(&block) {|node| ... } Iterates through each node in the tree rooted at this node in a pre-order walk.
- - (Node) initialize constructor A new instance of Node.
- - (Boolean, String) invalid_child?(child) protected Returns an error message if the given child node is invalid, and false otherwise.
-
- (Boolean) invisible?
True if #to_s will return
nil; that is, if the node shouldn’t be rendered. - - (Tree::Node) perform(environment) Converts a dynamic tree into a static Sass tree.
- - perform!(environment) protected Destructively runs dynamic Sass code in this particular node.
- - (Array<Tree::Node>) perform_children(environment) protected Non-destructively runs #perform on all children of the current node.
- - (String) run_interp(text, environment) protected Replaces SassScript in a chunk of text with the resulting value.
- - (String) selector_to_sass(sel, opts) protected Converts a selector to a Sass string.
- - (String) selector_to_scss(sel, tabs, opts) protected Converts a selector to a SCSS string.
- - (String) selector_to_src(sel, tabs, opts, fmt) protected Converts a selector to a Sass or SCSS string.
- - (String) semi(fmt) protected Returns a semicolon if this is SCSS, or an empty string if this is Sass.
- - (Symbol) style The output style.
- - (String?) to_s(*args) Computes the CSS corresponding to this static CSS tree.
- - (String) to_sass(tabs = 0, opts = {}) Converts a node to Sass code that will generate it.
- - (String) to_scss(tabs = 0, opts = {}) Converts a node to SCSS code that will generate it.
- - (String) to_src(tabs, opts, fmt) protected Converts a node to Sass or SCSS code that will generate it.
Constructor Details
- (Node) initialize
A new instance of Node
59 60 61 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 59
def initialize
@children = []
end
|
Instance Attribute Details
- (Array<Tree::Node>) children
The child nodes of this node.
34 35 36 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 34
def children
@children
end
|
- (String) filename
The name of the document on which this node appeared.
81 82 83 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 81
def filename
@filename || (@options && @options[:filename])
end
|
- (Boolean) has_children
Whether or not this node has child nodes. This may be true even when #children is empty, in which case this node has an empty block (e.g. {}).
41 42 43 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 41
def has_children
@has_children
end
|
- (Fixnum) line
The line of the document on which this node appeared.
46 47 48 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 46
def line
@line
end
|
- ({Symbol => Object}) options
The options hash for the node. See the Sass options documentation.
57 58 59 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 57
def options
@options
end
|
Instance Method Details
- <<(child)
Appends a child to the node.
90 91 92 93 94 95 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 90
def <<(child)
return if child.nil?
check_child! child
self.has_children = true
@children << child
end
|
- (Boolean) ==(other)
Compares this node and another object (only other Tree::Nodes will be equal). This does a structural comparison; if the contents of the nodes and all the child nodes are equivalent, then the nodes are as well.
Only static nodes need to override this.
119 120 121 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 119
def ==(other)
self.class == other.class && other.children == children
end
|
- (Tree::Node+) _cssize(extends, parent) (protected)
Converts this static Sass node into a static CSS node, returning the new node. This doesn’t modify this node or any of its children.
272 273 274 275 276 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 272
def _cssize(extends, parent)
node = dup
node.cssize!(extends, parent)
node
end
|
- (Tree::Node+) _perform(environment) (protected)
Runs any dynamic Sass code in this particular node. This doesn’t modify this node or any of its children.
299 300 301 302 303 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 299
def _perform(environment)
node = dup
node.perform!(environment)
node
end
|
- (String?) _to_s (protected)
Computes the CSS corresponding to this particular Sass node.
This method should never raise Sass::SyntaxErrors. Such errors will not be properly annotated with Sass backtrace information. All error conditions should be checked in earlier transformations, such as #cssize and #perform.
256 257 258 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 256
def _to_s
raise NotImplementedError.new("All static-node subclasses of Sass::Tree::Node must override #_to_s or #to_s.")
end
|
- balance(*args) (protected)
344 345 346 347 348 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 344
def balance(*args)
res = Haml::Shared.balance(*args)
return res if res
raise Sass::SyntaxError.new("Unbalanced brackets.", :line => line)
end
|
- check_child!(child)
Raises an error if the given child node is invalid.
102 103 104 105 106 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 102
def check_child!(child)
if msg = invalid_child?(child)
raise Sass::SyntaxError.new(msg, :line => child.line)
end
end
|
- (String) children_to_src(tabs, opts, fmt) (protected)
Converts the children of this node to a Sass or SCSS string. This will return the trailing newline for the previous line, including brackets if this is SCSS.
393 394 395 396 397 398 399 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 393
def children_to_src(tabs, opts, fmt)
return fmt == :sass ? "\n" : " {}\n" if children.empty?
(fmt == :sass ? "\n" : " {\n") +
children.map {|c| c.send("to_#{fmt}", tabs + 1, opts)}.join.rstrip +
(fmt == :sass ? "\n" : " }\n")
end
|
- (Tree::Node) cssize(extends, parent = nil)
188 189 190 191 192 193 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 188
def cssize(extends, parent = nil)
_cssize(extends, (parent if parent.class == self.class))
rescue Sass::SyntaxError => e
e.modify_backtrace(:filename => filename, :line => line)
raise e
end
|
- cssize!(extends, parent) (protected)
Destructively converts this static Sass node into a static CSS node. This does modify this node, but will be run non-destructively by #_cssize.
287 288 289 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 287
def cssize!(extends, parent)
self.children = children.map {|c| c.cssize(extends, self)}.flatten
end
|
- (String) dasherize(s, opts) (protected)
Convert any underscores in a string into hyphens, but only if the :dasherize option is set.
444 445 446 447 448 449 450 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 444
def dasherize(s, opts)
if opts[:dasherize]
s.gsub('_', '-')
else
s
end
end
|
- (Tree::Node) do_extend(extends)
166 167 168 169 170 171 172 173 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 166
def do_extend(extends)
node = dup
node.children = children.map {|c| c.do_extend(extends)}
node
rescue Sass::SyntaxError => e
e.modify_backtrace(:filename => filename, :line => line)
raise e
end
|
- each(&block) {|node| ... }
Iterates through each node in the tree rooted at this node in a pre-order walk.
220 221 222 223 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 220
def each(&block)
yield self
children.each {|c| c.each(&block)}
end
|
- (Boolean, String) invalid_child?(child) (protected)
Returns an error message if the given child node is invalid, and false otherwise.
By default, all child nodes except those only allowed under specific nodes (Tree::MixinDefNode, Tree::ImportNode, Tree::ExtendNode) are valid. This is expected to be overriden by subclasses for which some children are invalid.
361 362 363 364 365 366 367 368 369 370 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 361
def invalid_child?(child)
case child
when Tree::MixinDefNode
"Mixins may only be defined at the root of a document."
when Tree::ImportNode
"Import directives may only be used at the root of a document."
when Tree::ExtendNode
"Extend directives may only be used within rules."
end
end
|
- (Boolean) invisible?
True if #to_s will return nil; that is, if the node shouldn’t be rendered. Should only be called in a static tree.
128 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 128
def invisible?; false end
|
- (Tree::Node) perform(environment)
208 209 210 211 212 213 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 208
def perform(environment)
_perform(environment)
rescue Sass::SyntaxError => e
e.modify_backtrace(:filename => filename, :line => line)
raise e
end
|
- perform!(environment) (protected)
Destructively runs dynamic Sass code in this particular node. This does modify this node, but will be run non-destructively by #_perform.
312 313 314 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 312
def perform!(environment)
self.children = perform_children(Environment.new(environment))
end
|
- (Array<Tree::Node>) perform_children(environment) (protected)
Non-destructively runs #perform on all children of the current node.
321 322 323 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 321
def perform_children(environment)
children.map {|c| c.perform(environment)}.flatten
end
|
- (String) run_interp(text, environment) (protected)
Replaces SassScript in a chunk of text with the resulting value.
332 333 334 335 336 337 338 339 340 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 332
def run_interp(text, environment)
text.map do |r|
next r if r.is_a?(String)
val = r.perform(environment)
# Interpolated strings should never render with quotes
next val.value if val.is_a?(Sass::Script::String)
val.to_s
end.join.strip
end
|
- (String) selector_to_sass(sel, opts) (protected)
Converts a selector to a Sass string.
417 418 419 420 421 422 423 424 425 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 417
def selector_to_sass(sel, opts)
sel.map do |r|
if r.is_a?(String)
r.gsub(/(,[ \t]*)?\n\s*/) {$1 ? $1 + "\n" : " "}
else
"\#{#{r.to_sass(opts)}}"
end
end.join
end
|
- (String) selector_to_scss(sel, tabs, opts) (protected)
Converts a selector to a SCSS string.
433 434 435 436 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 433
def selector_to_scss(sel, tabs, opts)
sel.map {|r| r.is_a?(String) ? r : "\#{#{r.to_sass(opts)}}"}.
join.gsub(/^[ \t]*/, ' ' * tabs)
end
|
- (String) selector_to_src(sel, tabs, opts, fmt) (protected)
Converts a selector to a Sass or SCSS string.
408 409 410 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 408
def selector_to_src(sel, tabs, opts, fmt)
fmt == :sass ? selector_to_sass(sel, opts) : selector_to_scss(sel, tabs, opts)
end
|
- (String) semi(fmt) (protected)
Returns a semicolon if this is SCSS, or an empty string if this is Sass.
456 457 458 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 456
def semi(fmt)
fmt == :sass ? "" : ";"
end
|
- (Symbol) style
The output style. See the Sass options documentation.
133 134 135 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 133
def style
@options[:style]
end
|
- (String?) to_s(*args)
Computes the CSS corresponding to this static CSS tree.
#to_s shouldn’t be overridden directly; instead, override #_to_s. Only static-node subclasses need to implement #to_s.
This may return nil, but it will only do so if #invisible? is true.
147 148 149 150 151 152 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 147
def to_s(*args)
_to_s(*args)
rescue Sass::SyntaxError => e
e.modify_backtrace(:filename => filename, :line => line)
raise e
end
|
- (String) to_sass(tabs = 0, opts = {})
Converts a node to Sass code that will generate it.
230 231 232 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 230
def to_sass(tabs = 0, opts = {})
to_src(tabs, opts, :sass)
end
|
- (String) to_scss(tabs = 0, opts = {})
Converts a node to SCSS code that will generate it.
239 240 241 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 239
def to_scss(tabs = 0, opts = {})
to_src(tabs, opts, :scss)
end
|
- (String) to_src(tabs, opts, fmt) (protected)
381 382 383 |
# File '/var/www/sass-pages/.haml/lib/sass/tree/node.rb', line 381
def to_src(tabs, opts, fmt)
raise NotImplementedError.new("All static-node subclasses of Sass::Tree::Node must override #to_#{fmt}.")
end
|