lib/susy/sass_extensions.rb in compass-susy-plugin-0.7.0.pre1 vs lib/susy/sass_extensions.rb in compass-susy-plugin-0.7.0.pre2
- old
+ new
@@ -1,79 +1,68 @@
require 'sass'
module Sass::Script::Functions
- # set the Susy base font size (in pixels)
- # return the percentage base font size
- # this could be done in Sass, but we need to store the px_size so we
- # can provide a px_to_em function
- def base_font_size(base_font_size_px)
- @@susy_base_font_size_px = Float(base_font_size_px.value)
- Sass::Script::Number.new((@@susy_base_font_size_px / 16) * 100)
- end
- # approximate a given pixel size in ems
- def px2em(size_in_px)
- Sass::Script::Number.new((size_in_px.value / @@susy_base_font_size_px))
- end
+ # some helpful constants
+ PERCENT = Sass::Script::Number.new(100, ["%"])
+ ONE = Sass::Script::Number.new(1)
+ TWO = Sass::Script::Number.new(2)
# set the Susy column and gutter widths and number of columns
- # column, gutter and padding widths should be sent as unitless numbers,
- # though they may "really" be ems or pixels (_grid.sass handles units).
- # return total width of container (without units)
+ # return total width of container
def container(total_columns, column_width, gutter_width, side_gutter_width)
- @@susy_total_columns = total_columns.value
- @@susy_column_width = Float(column_width.value)
- @@susy_gutter_width = Float(gutter_width.value)
- @@susy_side_gutter_width = Float(side_gutter_width.value)
+ @@susy_total_columns = total_columns
+ @@susy_column_width = column_width
+ @@susy_gutter_width = gutter_width
+ @@susy_side_gutter_width = side_gutter_width
context
end
# return the width of 'n' columns plus 'n - 1' gutters
# plus page padding in non-nested contexts
- def context(n = nil)
- begin
- n = n.value
- rescue NoMethodError
- n = false
- end
- sg = 0
- if !n
+ def context(n = false)
+ raise Sass::SyntaxError, "container() must be called before context() - should be called in susy/susy.sass" unless defined?(@@susy_total_columns)
+ sg = Sass::Script::Number.new(0)
+ if !n or !n.value
n = @@susy_total_columns
sg = @@susy_side_gutter_width
end
c, g = [@@susy_column_width, @@susy_gutter_width]
- Sass::Script::Number.new(((n * c) + ((n - 1) * g)) + (sg * 2))
+ n.times(c).plus(n.minus(ONE).times(g)).plus(sg.times(TWO))
end
- # return the percentage width of 'number' columns in a context of
+ # return the percentage width of 'n' columns in a context of
# 'context_columns'
- def columns(number, context_columns = nil)
- n = number.value
- context_width = context(context_columns).value
+ def columns(n, context_columns = false)
+ raise Sass::SyntaxError, "container() must be called before columns() - should be called in susy/susy.sass" unless defined?(@@susy_column_width)
+ w = context(context_columns)
c, g = [@@susy_column_width, @@susy_gutter_width]
- Sass::Script::Number.new((((n * c) + ((n - 1) * g)) / context_width) * 100)
+ n.times(c).plus(n.minus(ONE).times(g)).div(w).times(PERCENT)
end
# return the percentage width of a single gutter in a context of
# 'context_columns'
- def gutter(context_columns = nil)
- context_width = context(context_columns).value
+ def gutter(context_columns = false)
+ raise Sass::SyntaxError, "container() must be called before columns() - should be called in susy/susy.sass" unless defined?(@@susy_gutter_width)
+ w = context(context_columns)
g = @@susy_gutter_width
- Sass::Script::Number.new((g / context_width) * 100)
+ g.div(w).times(PERCENT)
end
# return the percentage width of a single side gutter in a context of
# 'context_columns'
- def side_gutter(context_columns = nil)
- context_width = context(context_columns).value
+ def side_gutter(context_columns = false)
+ raise Sass::SyntaxError, "container() must be called before side_gutter() - should be called in susy/susy.sass" unless defined?(@@susy_side_gutter_width)
+ w = context(context_columns)
sg = @@susy_side_gutter_width
- Sass::Script::Number.new((sg / context_width) * 100)
+ sg.div(w).times(PERCENT)
end
# return the percentage width of a single column in a context of
# 'context_columns'
- def column(context_columns = nil)
- context_width = context(context_columns).value
+ def column(context_columns = false)
+ raise Sass::SyntaxError, "container() must be called before column() - should be called in susy/susy.sass" unless defined?(@@susy_column_width)
+ w = context(context_columns)
c = @@susy_column_width
- Sass::Script::Number.new((c / context_width) * 100)
+ c.div(w).times(PERCENT)
end
end