Class: MirrorMirror::Transformation::LinearGradient
Constant Summary
collapse
- IMAGE_PROPERTIES =
Set[
'background',
'background-image',
'border-image',
'list-style-image',
'list-style',
'content'
]
- DIRECTIONAL_KEYWORDS =
Set.new(%w(to top left right bottom))
- S360 =
Sass::Script::Number.new(360)
Instance Method Summary
collapse
instances, #transform_name, #transform_name?, #transform_value, #transform_value?
Methods inherited from Base
inherited, instances
Instance Method Details
#color_stop?(e) ⇒ Boolean
56
57
58
59
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 56
def color_stop?(e)
e.is_a?(Sass::Script::Color) ||
(e.is_a?(Sass::Script::List) && e.value.first.is_a?(Sass::Script::Color))
end
|
#degree?(e) ⇒ Boolean
42
43
44
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 42
def degree?(e)
e.is_a?(Sass::Script::Number) && e.numerator_units.first == "deg"
end
|
#direction?(e) ⇒ Boolean
52
53
54
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 52
def direction?(e)
degree?(e) || directional_keywords?(e)
end
|
#directional_keywords?(e) ⇒ Boolean
47
48
49
50
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 47
def directional_keywords?(e)
(e.is_a?(Sass::Script::List) && e.value.first.is_a?(Sass::Script::String) && DIRECTIONAL_KEYWORDS.include?(e.value.first.value)) ||
e.is_a?(Sass::Script::String) && DIRECTIONAL_KEYWORDS.include?(e.value)
end
|
#find_linear_gradient(expression) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 29
def find_linear_gradient(expression)
case expression
when Sass::Script::List
expression.value.each do |v|
grad = find_linear_gradient(v)
return grad if grad
end
nil
when Sass::Script::Funcall
expression if expression.name =~ /^(-(moz|webkit|o|ms)-)?(repeating-)?linear-gradient$/
end
end
|
#flip(direction) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 62
def flip(direction)
if degree?(direction)
opts(direction.options) { S360.minus(direction).mod(S360) }
else
case direction
when Sass::Script::List
direction.value.map!{|v| flip(v) }
direction
when Sass::Script::String
if direction.value == "left"
opts(direction.options) { Sass::Script::String.new("right") }
elsif direction.value == "right"
opts(direction.options) { Sass::Script::String.new("left") }
else
direction
end
else
direction
end
end
end
|
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 16
def transform_expression(name, expression)
for_each_value(expression) do |e|
if grad = find_linear_gradient(e)
if direction?(grad.args[0])
grad.args[0] = flip(grad.args[0])
end
e
else
e
end
end
end
|
12
13
14
|
# File 'lib/mirror-mirror/transformation/linear_gradient.rb', line 12
def transform_expression?(name)
IMAGE_PROPERTIES.include?(name)
end
|