require 'erb'
module Blueprint
# Generates a custom grid file, using ERB to evaluate custom settings
class CustomLayout
# path to ERB file used for CSS template
CSS_ERB_FILE = File.join(Blueprint::LIB_PATH, 'grid.css.erb')
attr_writer :column_count, :column_width, :gutter_width, :input_padding, :input_border
# Column count of generated CSS. Returns itself or Blueprint's default
def column_count
(@column_count || Blueprint::COLUMN_COUNT).to_i
end
# Column width (in pixels) of generated CSS. Returns itself or Blueprint's default
def column_width
(@column_width || Blueprint::COLUMN_WIDTH).to_i
end
# Gutter width (in pixels) of generated CSS. Returns itself or Blueprint's default
def gutter_width
(@gutter_width || Blueprint::GUTTER_WIDTH).to_i
end
def input_padding
(@input_padding || Blueprint::INPUT_PADDING).to_i
end
def input_border
(@input_border || Blueprint::INPUT_BORDER).to_i
end
# Returns page width (in pixels)
def page_width
column_count * (column_width + gutter_width) - gutter_width
end
# ==== Options
# * options
# * :column_count -- Sets the column count of generated CSS
# * :column_width -- Sets the column width (in pixels) of generated CSS
# * :gutter_width -- Sets the gutter width (in pixels) of generated CSS
# * :input_padding -- Sets the input padding width (in pixels) of generated CSS
# * :input_border -- Sets the border width (in pixels) of generated CSS
def initialize(options = {})
@column_count = options[:column_count]
@column_width = options[:column_width]
@gutter_width = options[:gutter_width]
@input_padding = options[:input_padding]
@input_border = options[:input_border]
end
# Boolean value if current settings are Blueprint's defaults
def default?
self.column_width == Blueprint::COLUMN_WIDTH &&
self.column_count == Blueprint::COLUMN_COUNT &&
self.gutter_width == Blueprint::GUTTER_WIDTH &&
self.input_padding == Blueprint::INPUT_PADDING &&
self.input_border == Blueprint::INPUT_BORDER
end
# Loads grid.css.erb file, binds it to current instance, and returns output
def generate_grid_css
# loads up erb template to evaluate custom widths
css = ERB::new(File.path_to_string(CustomLayout::CSS_ERB_FILE))
# bind it to this instance
css.result(binding)
end
end
end