# :stopdoc: %w(constants helpers routers shorthands).each do |dep| require "archetype/functions/css/#{dep}" end module Archetype::Functions::CSS #include Sass::Script::Value::Helpers # # returns a best guess for the default CSS value of a given property # # *Parameters*: # - key {String} the property to lookup # *Returns*: # - {*} the default value # def self.default(key) value = ALL_CSS_PROPERTIES[key] || :invalid if value.is_a?(Array) value = Sass::Script::Value::List.new(value.map {|item| CSS_PRIMITIVES[item]}, :space) else value = CSS_PRIMITIVES[value] end helpers.warn("[#{Archetype.name}:css:default] cannot find a default value for `#{key}`") if value.nil? return value end # # calculates derived styles from a given map # # *Parameters*: # - map {Sass::Script::Value::Map} the map of styles # - properties {String|List|Array} the properties to extract the derived styles for # - format {String} the format to return the results in [auto|map|list] # - strict {Boolean} if true, will only return an exact match, and not try to extrapolate the value (TODO) # *Returns*: # - {*} the derived styles as either a list/map of the values or the individual value itself (based on the format) # def self.get_derived_styles(map, properties = [], format = :auto, strict = false) # TODO how to handle multiple values? computed = ::Archetype::Hash.new (properties || []).to_a.each do |property| value = Sass::Script::Value::Null.new if not property.value.nil? property = helpers.to_str(property, ' ', :quotes) # simple case, exact match only value = map[property] if map.key? property # if we're not doing strict matching... if not strict # if the property is a short- or long-hand, we need to figure out what the value actually is value = get_derived_styles_via_router(map, property) || value end end computed[property] = value end format = :map if computed.length > 1 and format == :auto case format when :map return helpers.hash_to_map(computed) when :list return Sass::Script::Value::List.new(computed.values, :comma) else return computed.values.first end end end