class Sass::Tree::RootNode
A static node that is the root node of the Sass
document.
Attributes
template[R]
The Sass
template from which this node was created
@param template [String]
Public Class Methods
new(template)
click to toggle source
@param template [String] The Sass
template from which this node was created
Calls superclass method
Sass::Tree::Node::new
# File lib/sass/tree/root_node.rb, line 13 def initialize(template) super() @template = template end
Public Instance Methods
render()
click to toggle source
Runs the dynamic Sass
code and computes the CSS
for the tree. @see to_s
# File lib/sass/tree/root_node.rb, line 20 def render Visitors::CheckNesting.visit(self) result = Visitors::Perform.visit(self) Visitors::CheckNesting.visit(result) # Check again to validate mixins result, extends = Visitors::Cssize.visit(result) Visitors::Extend.visit(result, extends) extended_result(result.to_s) end
Private Instance Methods
calculate_class_prefix(name)
click to toggle source
# File lib/sass/tree/root_node.rb, line 38 def calculate_class_prefix(name) names = name.split('/') names = names[0...(names.index { |x| x.start_with?('_') } || -1)] return '' if names.empty? "#{names.join('__')}___" end
calculate_selector(selector, name)
click to toggle source
# File lib/sass/tree/root_node.rb, line 31 def calculate_selector(selector, name) class_prefix = calculate_class_prefix(name) doc = CSSPool.CSS("#{selector} {}") replace_class(doc, class_prefix) doc_to_selector(doc) end
doc_to_selector(doc)
click to toggle source
# File lib/sass/tree/root_node.rb, line 62 def doc_to_selector(doc) doc.to_css.split("\n")[0][0...-1].strip.gsub('\00002e', '.') end
extended_result(result)
click to toggle source
# File lib/sass/tree/root_node.rb, line 66 def extended_result(result) result.split('/*').map { |x| next x if x.strip.empty? a, b = x.split("\n", 2) m = a.match(/\/app\/assets\/stylesheets\/([^. ]+)\./) next "#{a}\n#{b}" unless m selector = calculate_selector(b.split("\n")[0].strip[0...-1].strip, m[1]) "#{a}\n#{selector} {\n#{b.split("\n", 2)[1]}" }.join('/*') end
replace_class(doc, prefix)
click to toggle source
# File lib/sass/tree/root_node.rb, line 45 def replace_class(doc, prefix) doc.rule_sets[0].selectors.map do |selector| selector.simple_selectors.each do |simple_selector| simple_selector.additional_selectors.each do |additional_selector| case additional_selector when CSSPool::Selectors::Class additional_selector.name = "#{prefix}#{additional_selector.name}" when CSSPool::Selectors::PseudoClass d = CSSPool.CSS("#{additional_selector.extra} {}") replace_class(d, prefix) additional_selector.extra = doc_to_selector(d) end end end end end