class Teacup::Style
The Style
class is where the precedence rules are applied. A Style
can query the Stylesheet
that created it to look up other styles (for `extends:`) and to import other Stylesheets. If it is handed a class (e.g. `UIView`) and orientation, it will merge those in appropriately as well.
The Style
class is where the precedence rules are applied. A Style
can query the Stylesheet
that created it to look up other styles (for `extends:`) and to import other Stylesheets.
Constants
- Orientations
- Overrides
Attributes
stylename[RW]
stylesheet[RW]
Public Instance Methods
build(target_class=nil, rotation_orientation=nil, seen={})
click to toggle source
# File lib/teacup-ios/style.rb, line 31 def build(target_class=nil, rotation_orientation=nil, seen={}) properties = Style.new properties.stylename = self.stylename properties.stylesheet = self.stylesheet # if we have an orientation, only apply those styles. otherwise apply the # entire style, including the current orientation. if rotation_orientation # in order to preserve the "local-first" override, we need to *delete* # the keys in imported_stylesheets and extended_properties that are # present in this style - even though we don't ultimately *apply* the # styles delete_keys = self.keys orientation = rotation_orientation else delete_keys = [] properties.update(self) orientation = UIApplication.sharedApplication.statusBarOrientation end # first, move orientation settings into properties "base" level. Overrides[orientation].each do |orientation_key| if override = self[orientation_key] # override is first, so it takes precedence if override.is_a? Hash Teacup::merge_defaults override, properties, properties end end end # delete all of them from `properties` Orientations.each do |orientation_key| if self[orientation_key] properties.supports[orientation_key] = true end properties.delete(orientation_key) end # now we can merge extends, and imported_stylesheets. before merging, # these will go through the same process that we just finished on the # local style if stylesheet && stylesheet.is_a?(Teacup::Stylesheet) stylesheet.imported_stylesheets.reverse.each do |stylesheet| imported_properties = stylesheet.query(self.stylename, target_class, rotation_orientation, seen) delete_keys.each do |key| imported_properties.delete(key) end Teacup::merge_defaults! properties, imported_properties end if also_includes = self[:extends] also_includes = [also_includes] unless also_includes.is_a? Array # turn style names into Hashes by querying them on the stylesheet # (this does not pass `seen`, because this is a new query) also_includes.each do |also_include| extended_properties = stylesheet.query(also_include, target_class, rotation_orientation) delete_keys.each do |key| extended_properties.delete(key) end Teacup::merge_defaults! properties, extended_properties end end properties.delete(:extends) # if we know the class of the target, we can apply styles via class # inheritance. if target_class unless target_class.is_a?(Class) target_class = target_class.class end target_class.ancestors.each do |ancestor| extended_properties = stylesheet.query(ancestor, nil, rotation_orientation) Teacup::merge_defaults!(properties, extended_properties) end end end return properties end
supports()
click to toggle source
A hash of orientation => true/false. true means the orientation is supported.
# File lib/teacup-ios/style.rb, line 22 def supports @supports ||= {} end
supports?(orientation_key)
click to toggle source
returns the value - `nil` has special meaning when querying :portrait or :upside_up
# File lib/teacup-ios/style.rb, line 27 def supports? orientation_key supports[orientation_key] end