Module: Less::StyleSheet::Mixin4
- Defined in:
- lib/sass/less.rb
Overview
Selector mixins that don't have arguments. This depends only on the syntax at the call site; if it doesn't use parens, it hits this production, regardless of whether the mixin being called has arguments or not.
Instance Method Summary collapse
- #build_with_sass(env) (also: #build)
- #selector_base(path)
- #selector_str(path)
Instance Method Details
#build_with_sass(env) Also known as: build
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sass/less.rb', line 15
def build_with_sass(env)
selectors.build(env, :mixin).each do |path|
el = path.inject(env.root) do |current, node|
current.descend(node.selector, node) or raise MixinNameError, "#{selectors.text_value} in #{env}"
end
if el.is_a?(Node::Mixin::Def)
# Calling a mixin with arguments, which gets compiled to a Sass mixin
env << Node::Mixin::Call.new(el, [], env)
else
# Calling a mixin without arguments, which gets compiled to @extend
sel = selector_str(path)
base = selector_str(selector_base(path))
if base == sel
env << Node::SassNode.new(Sass::Tree::ExtendNode.new([sel]))
else
Haml::Util.haml_warn <<WARNING
WARNING: Sass doesn't support mixing in selector sequences.
Replacing "#{sel}" with "@extend #{base}"
WARNING
env << Node::SassNode.new(Sass::Tree::CommentNode.new("// #{sel};", true))
env << Node::SassNode.new(Sass::Tree::ExtendNode.new([base]))
end
end
end
end
|
#selector_base(path)
43 44 45 46 47 48 |
# File 'lib/sass/less.rb', line 43
def selector_base(path)
el, i = Haml::Util.enum_with_index(path).to_a.reverse.find {|e, i| e.selector !~ /^:{1,2}$/} ||
[path.first, 0]
sel = (el.selector =~ /^:{0,2}$/ ? el.selector : "")
[Node::Element.new(el.name, sel)] + path[i+1..-1]
end
|
#selector_str(path)
50 51 52 |
# File 'lib/sass/less.rb', line 50
def selector_str(path)
path.map {|e| e.sass_selector_str}.join(' ').gsub(' :', ':')
end
|