gems.sass-3.2.9.lib.sass.supports.rb Maven / Gradle / Ivy
Go to download
Sass makes CSS fun again. Sass is an extension of CSS3, adding nested rules, variables, mixins, selector
inheritance, and more. It's translated to well-formatted, standard CSS using the command line tool or a
web-framework plugin.
This is a repackaged GEM in a JAR format of the sass-lang.gem package. The sass-gems package version
follows the sass-lang.gem versions located http://rubyforge.org/frs/?group_id=9702. Simply change
the version of this package to download and repackage the same GEM version.
The newest version!
# A namespace for the `@supports` condition parse tree.
module Sass::Supports
# The abstract superclass of all Supports conditions.
class Condition
# Runs the SassScript in the supports condition.
#
# @param env [Sass::Environment] The environment in which to run the script.
def perform(environment); Sass::Util.abstract(self); end
# Returns the CSS for this condition.
#
# @return [String]
def to_css; Sass::Util.abstract(self); end
# Returns the Sass/CSS code for this condition.
#
# @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}).
# @return [String]
def to_src(options); Sass::Util.abstract(self); end
# Returns a deep copy of this condition and all its children.
#
# @return [Condition]
def deep_copy; Sass::Util.abstract(self); end
# Sets the options hash for the script nodes in the supports condition.
#
# @param options [{Symbol => Object}] The options has to set.
def options=(options); Sass::Util.abstract(self); end
end
# An operator condition (e.g. `CONDITION1 and CONDITION2`).
class Operator < Condition
# The left-hand condition.
#
# @return [Sass::Supports::Condition]
attr_accessor :left
# The right-hand condition.
#
# @return [Sass::Supports::Condition]
attr_accessor :right
# The operator ("and" or "or").
#
# @return [String]
attr_accessor :op
def initialize(left, right, op)
@left = left
@right = right
@op = op
end
def perform(env)
@left.perform(env)
@right.perform(env)
end
def to_css
"#{left_parens @left.to_css} #{op} #{right_parens @right.to_css}"
end
def to_src(options)
"#{left_parens @left.to_src(options)} #{op} #{right_parens @right.to_src(options)}"
end
def deep_copy
copy = dup
copy.left = @left.deep_copy
copy.right = @right.deep_copy
copy
end
def options=(options)
@left.options = options
@right.options = options
end
private
def left_parens(str)
return "(#{str})" if @left.is_a?(Negation)
return str
end
def right_parens(str)
return "(#{str})" if @right.is_a?(Negation) || @right.is_a?(Operator)
return str
end
end
# A negation condition (`not CONDITION`).
class Negation < Condition
# The condition being negated.
#
# @return [Sass::Supports::Condition]
attr_accessor :condition
def initialize(condition)
@condition = condition
end
def perform(env)
@condition.perform(env)
end
def to_css
"not #{parens @condition.to_css}"
end
def to_src(options)
"not #{parens @condition.to_src(options)}"
end
def deep_copy
copy = dup
copy.condition = condition.deep_copy
copy
end
def options=(options)
condition.options = options
end
private
def parens(str)
return "(#{str})" if @condition.is_a?(Negation) || @condition.is_a?(Operator)
return str
end
end
# A declaration condition (e.g. `(feature: value)`).
class Declaration < Condition
# The feature name.
#
# @param [Sass::Script::Node]
attr_accessor :name
# The name of the feature after any SassScript has been resolved.
# Only set once \{Tree::Visitors::Perform} has been run.
#
# @return [String]
attr_accessor :resolved_name
# The feature value.
#
# @param [Sass::Script::Node]
attr_accessor :value
# The value of the feature after any SassScript has been resolved.
# Only set once \{Tree::Visitors::Perform} has been run.
#
# @return [String]
attr_accessor :resolved_value
def initialize(name, value)
@name = name
@value = value
end
def perform(env)
@resolved_name = name.perform(env)
@resolved_value = value.perform(env)
end
def to_css
"(#{@resolved_name}: #{@resolved_value})"
end
def to_src(options)
"(#{@name.to_sass(options)}: #{@value.to_sass(options)})"
end
def deep_copy
copy = dup
copy.name = @name.deep_copy
copy.value = @value.deep_copy
copy
end
def options=(options)
@name.options = options
@value.options = options
end
end
# An interpolation condition (e.g. `#{$var}`).
class Interpolation < Condition
# The SassScript expression in the interpolation.
#
# @param [Sass::Script::Node]
attr_accessor :value
# The value of the expression after it's been resolved.
# Only set once \{Tree::Visitors::Perform} has been run.
#
# @return [String]
attr_accessor :resolved_value
def initialize(value)
@value = value
end
def perform(env)
val = value.perform(env)
@resolved_value = val.is_a?(Sass::Script::String) ? val.value : val.to_s
end
def to_css
@resolved_value
end
def to_src(options)
"\#{#{@value.to_sass(options)}}"
end
def deep_copy
copy = dup
copy.value = @value.deep_copy
copy
end
def options=(options)
@value.options = options
end
end
end