blob: 315bb7014d11a7b1972a46fd14aae98283a52005 [file] [log] [blame]
module Sass::Tree
# A static node representing an unprocessed Sass `@`-directive.
# Directives known to Sass, like `@for` and `@debug`,
# are handled by their own nodes;
# only CSS directives like `@media` and `@font-face` become {DirectiveNode}s.
#
# `@import` and `@charset` are special cases;
# they become {ImportNode}s and {CharsetNode}s, respectively.
#
# @see Sass::Tree
class DirectiveNode < Node
# The text of the directive, `@` and all, with interpolation included.
#
# @return [Array<String, Sass::Script::Tree::Node>]
attr_accessor :value
# The text of the directive after any interpolated SassScript has been resolved.
# Only set once \{Tree::Visitors::Perform} has been run.
#
# @return [String]
attr_accessor :resolved_value
# @see RuleNode#tabs
attr_accessor :tabs
# @see RuleNode#group_end
attr_accessor :group_end
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
def initialize(value)
@value = value
@tabs = 0
super()
end
# @param value [String] See \{#resolved_value}
# @return [DirectiveNode]
def self.resolved(value)
node = new([value])
node.resolved_value = value
node
end
# @return [String] The name of the directive, including `@`.
def name
@name ||= value.first.gsub(/ .*$/, '')
end
# Strips out any vendor prefixes and downcases the directive name.
# @return [String] The normalized name of the directive.
def normalized_name
@normalized_name ||= name.gsub(/^(@)(?:-[a-zA-Z0-9]+-)?/, '\1').downcase
end
def bubbles?
has_children
end
end
end