Module: Compass::SassExtensions::Functions::Constants

Included in:
GradientSupport::LinearGradient, GradientSupport::RadialGradient, Sass::Script::Functions
Defined in:
lib/compass/sass_extensions/functions/constants.rb

Constant Summary collapse

POSITIONS =
/top|bottom|left|right|center/

Instance Method Summary collapse

Instance Method Details

#is_position(position) ⇒ Object



4
5
6
# File 'lib/compass/sass_extensions/functions/constants.rb', line 4

def is_position(position)
  Sass::Script::Bool.new(position.is_a?(Sass::Script::String) && !!(position.value =~ POSITIONS))
end

#is_position_list(position_list) ⇒ Object



7
8
9
# File 'lib/compass/sass_extensions/functions/constants.rb', line 7

def is_position_list(position_list)
  Sass::Script::Bool.new(position_list.is_a?(Sass::Script::List) && position_list.value.all?{|p| is_position(p).to_bool})
end

#is_url(string) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/compass/sass_extensions/functions/constants.rb', line 49

def is_url(string)
  if string.is_a?(Sass::Script::String)
    is_url = !!(string.value =~ /^url\(.*\)$/)
    Sass::Script::Bool.new(is_url)
  else
    Sass::Script::Bool.new(false)
  end
end

#opposite_position(position) ⇒ Object

returns the opposite position of a side or corner.



11
12
13
14
15
16
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
47
# File 'lib/compass/sass_extensions/functions/constants.rb', line 11

def opposite_position(position)
  position = unless position.is_a?(Sass::Script::List)
    Sass::Script::List.new([position], :space)
  else
    Sass::Script::List.new(position.value.dup, position.separator)
  end
  position.value.map! do |pos|
    if pos.is_a? Sass::Script::String
      opposite = case pos.value
      when "top" then "bottom"
      when "bottom" then "top"
      when "left" then "right"
      when "right" then "left"
      when "center" then "center"
      else
        Compass::Util.compass_warn("Cannot determine the opposite position of: #{pos}")
        pos.value
      end
      Sass::Script::String.new(opposite)
    elsif pos.is_a? Sass::Script::Number
      if pos.numerator_units == ["%"] && pos.denominator_units == []
        Sass::Script::Number.new(100-pos.value, ["%"])
      else
        Compass::Util.compass_warn("Cannot determine the opposite position of: #{pos}")
        pos
      end
    else
      Compass::Util.compass_warn("Cannot determine the opposite position of: #{pos}")
      pos
    end
  end
  if position.value.size == 1
    position.value.first
  else
    position
  end
end