Class: Blueprint::SemanticClassNames
- Inherits:
-
Object
- Object
- Blueprint::SemanticClassNames
- Defined in:
- lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb
Overview
parses a hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from
Instance Attribute Summary collapse
-
#class_assignments ⇒ Object
Returns the value of attribute class_assignments.
-
#namespace ⇒ Object
readonly
Returns the value of attribute namespace.
-
#source_file ⇒ Object
readonly
Returns the value of attribute source_file.
Instance Method Summary collapse
-
#css_from_assignments(assignments = {}) ⇒ Object
Returns a CSS string of semantic selectors and associated styles ==== Options *
assignments
– Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from; defaults to what was passed in constructor or empty hash. -
#initialize(options = {}) ⇒ SemanticClassNames
constructor
Options *
options
*:namespace
– Namespace to be used when matching CSS selectors to draw from *:source_file
– Source file to use as reference of CSS selectors.
Constructor Details
#initialize(options = {}) ⇒ SemanticClassNames
Options
-
options
-
:namespace
– Namespace to be used when matching CSS selectors to draw from -
:source_file
– Source file to use as reference of CSS selectors. Defaults to Blueprint’s generated screen.css -
:class_assignments
– Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from
-
13 14 15 16 17 |
# File 'lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb', line 13 def initialize( = {}) @namespace = [:namespace] || "" @source_file = [:source_file] || File.join(Blueprint::BLUEPRINT_ROOT_PATH, "screen.css") self.class_assignments = [:class_assignments] || {} end |
Instance Attribute Details
#class_assignments ⇒ Object
Returns the value of attribute class_assignments.
5 6 7 |
# File 'lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb', line 5 def class_assignments @class_assignments end |
#namespace ⇒ Object (readonly)
Returns the value of attribute namespace.
6 7 8 |
# File 'lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb', line 6 def namespace @namespace end |
#source_file ⇒ Object (readonly)
Returns the value of attribute source_file.
6 7 8 |
# File 'lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb', line 6 def source_file @source_file end |
Instance Method Details
#css_from_assignments(assignments = {}) ⇒ Object
Returns a CSS string of semantic selectors and associated styles
Options
-
assignments
– Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from; defaults to what was passed in constructor or empty hash
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb', line 22 def css_from_assignments(assignments = {}) assignments ||= self.class_assignments # define a wrapper hash to hold all the new CSS assignments output_css = {} #loads full stylesheet into an array of hashes blueprint_assignments = CSSParser.new(File.path_to_string(self.source_file)).parse # iterates through each class assignment ('#footer' => '.span-24', '#header' => '.span-24') assignments.each do |semantic_class, blueprint_classes| # gathers all BP classes we're going to be mimicing blueprint_classes = blueprint_classes.split(/,|\s/).select {|c| !c.blank? }.flatten.map {|c| c.strip } classes = [] # loop through each BP class, grabbing the full hash (containing tags, index, and CSS rules) blueprint_classes.each do |bp_class| match = if bp_class.include?(".") bp_class.gsub(".", ".#{self.namespace}") else ".#{self.namespace}#{bp_class}" end classes << blueprint_assignments.select do |line| line[:tags] =~ Regexp.new(/^([\w\.\-\:]+, ?)*#{match}(, ?[\w\.\-\:]+)*$/) end.uniq end # clean up the array classes = classes.flatten.uniq # set the semantic class to the rules gathered in classes, sorted by index # this way, the styles will be applied in the correct order from top of file to bottom output_css[semantic_class] = "#{classes.sort_by {|i| i[:idx] }.map {|i| i[:rules] }}" end # return the css in proper format css = "" output_css.each do |, rules| css += "#{} {#{rules}}\n" end css end |