Class: MirrorMirror::Transformation::BackgroundPosition
Constant Summary
collapse
- ONE_HUNDRED_PERCENT =
Sass::Script::Number.new(100, ["%"], [])
- POSITION_KEYWORDS =
Set.new(%w(top bottom left right center))
Instance Method Summary
collapse
instances, #transform_name, #transform_name?, #transform_value, #transform_value?
Methods inherited from Base
inherited, instances
Instance Method Details
#flip_it(e, position) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# 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) ⇒ Boolean
100
101
102
103
104
105
106
107
108
109
|
# 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
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# 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
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
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# 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
expression.value.each_with_index do |e, i|
next if i % 2 == 1
expression.value[i] = flip_it(e, i / 2)
end
else
expression.value.each_with_index do |e, i|
expression.value[i] = flip_it(e, i)
end
end
expression
end
|
7
8
9
10
11
12
13
14
15
|
# 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
|
3
4
5
|
# File 'lib/mirror-mirror/transformation/background_position.rb', line 3
def transform_expression?(name)
name == "background" || name == "background-position" || name == "background-position-x"
end
|