class MirrorMirror::Transformation::BackgroundPosition
Constants
- ONE_HUNDRED_PERCENT
- POSITION_KEYWORDS
Public Instance Methods
flip_it(e, position)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 71 def flip_it(e, position) return e unless e.respond_to?(:value) case e when Sass::Script::Number if position == 0 && e.value == 0 opts(e.options) { ONE_HUNDRED_PERCENT.dup } elsif position == 0 && e.numerator_units.first == "%" opts(e.options) { ONE_HUNDRED_PERCENT.minus(e) } elsif position == 0 Sass.logger.warn("Line #{e.line}: Cannot flip background position: #{e}") e else e end when Sass::Script::String case e.value when "right" e.value.replace("left") when "left" e.value.replace("right") end e else e end end
legal_as_background_position?(e)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 100 def legal_as_background_position?(e) case e when Sass::Script::String POSITION_KEYWORDS.include?(e.value) when Sass::Script::Number true else false end end
transform_background(expression)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 17 def transform_background(expression) unless expression.is_a?(Sass::Script::List) expression = opts(expression.options) do Sass::Script::List.new([expression], :space) end end positions = [] position_indices = [] expression.value.each_with_index do |v, i| if legal_as_background_position?(v) positions << v position_indices << i else break if positions.any? next end positions end return expression unless positions.any? if positions.size > 2 Sass.logger.warn("Line #{expression.line}: malformed background: #{expression.to_sass}") return expression end # tranform the background position elements and replace the position # section of the shorthand with it transformed = transform_background_position(Sass::Script::List.new(positions, :space)) position_indices << position_indices.first if position_indices.size < 2 expression.value[Range.new(*position_indices)] = transformed.value expression end
transform_background_position(expression)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 48 def transform_background_position(expression) unless expression.is_a?(Sass::Script::List) expression = opts(expression.options) do Sass::Script::List.new([expression], :space) end end if expression.value.size > 2 # positions with offsets expression.value.each_with_index do |e, i| next if i % 2 == 1 expression.value[i] = flip_it(e, i / 2) end else # positions expression.value.each_with_index do |e, i| expression.value[i] = flip_it(e, i) end end expression end
transform_expression(name, expression)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 7 def transform_expression(name, expression) for_each_value(expression) do |e| if name == "background" transform_background(e) else transform_background_position(e) end end end
transform_expression?(name)
click to toggle source
# File lib/mirror-mirror/transformation/background_position.rb, line 3 def transform_expression?(name) name == "background" || name == "background-position" || name == "background-position-x" end