module Inky::ComponentFactory
Constants
- IGNORED_ON_PASSTHROUGH
- INTERIM_TH_TAG
These constants are used to circumvent an issue with JRuby Nokogiri. For more details see github.com/zurb/inky-rb/pull/94
- INTERIM_TH_TAG_REGEX
Public Instance Methods
_combine_attributes(elem, extra_classes = nil)
click to toggle source
# File lib/inky/component_factory.rb, line 37 def _combine_attributes(elem, extra_classes = nil) classes = _combine_classes(elem, extra_classes) [_pass_through_attributes(elem), classes && %{class="#{classes}"}].join end
_combine_classes(elem, extra_classes)
click to toggle source
# File lib/inky/component_factory.rb, line 30 def _combine_classes(elem, extra_classes) existing = elem['class'].to_s.split(' ') to_add = extra_classes.to_s.split(' ') (existing + to_add).uniq.join(' ') end
_has_class(elem, klass)
click to toggle source
# File lib/inky/component_factory.rb, line 26 def _has_class(elem, klass) elem.attr('class') =~ /(^|\s)#{klass}($|\s)/ end
_pass_through_attributes(elem)
click to toggle source
# File lib/inky/component_factory.rb, line 20 def _pass_through_attributes(elem) elem.attributes.reject { |e| IGNORED_ON_PASSTHROUGH.include?(e.downcase) }.map do |name, value| %{#{name}="#{value}" } end.join end
_target_attribute(elem)
click to toggle source
# File lib/inky/component_factory.rb, line 42 def _target_attribute(elem) elem.attributes['target'] ? %{ target="#{elem.attributes['target']}"} : '' end
_transform_block_grid(component, inner)
click to toggle source
# File lib/inky/component_factory.rb, line 102 def _transform_block_grid(component, inner) classes = _combine_classes(component, "block-grid up-#{component.attr('up')}") %{<table class="#{classes}"><tr>#{inner}</tr></table>} end
_transform_callout(component, inner)
click to toggle source
# File lib/inky/component_factory.rb, line 121 def _transform_callout(component, inner) classes = _combine_classes(component, 'callout-inner') attributes = _pass_through_attributes(component) %{<table #{attributes}class="callout"><tr><th class="#{classes}">#{inner}</th><th class="expander"></th></tr></table>} end
_transform_center(component, _inner)
click to toggle source
# File lib/inky/component_factory.rb, line 107 def _transform_center(component, _inner) # NOTE: Using children instead of elements because elements.to_a # sometimes appears to miss elements that show up in size component.elements.each do |child| child['align'] = 'center' child['class'] = _combine_classes(child, 'float-center') items = component.elements.css(".menu-item").to_a.concat(component.elements.css("item").to_a) items.each do |item| item['class'] = _combine_classes(item, 'float-center') end end component.to_s end
_transform_columns(component, inner)
click to toggle source
in inky.js this is factored out into makeClumn. TBD if we need that here.
# File lib/inky/component_factory.rb, line 82 def _transform_columns(component, inner) col_count = component.parent.elements.size small_val = component.attr('small') large_val = component.attr('large') small_size = small_val || column_count large_size = large_val || small_val || (column_count / col_count).to_i classes = _combine_classes(component, "small-#{small_size} large-#{large_size} columns") classes << ' first' unless component.previous_element classes << ' last' unless component.next_element subrows = component.elements.css(".row").to_a.concat(component.elements.css("row").to_a) expander = %{<th class="expander"></th>} if large_size.to_i == column_count && subrows.empty? %{<#{INTERIM_TH_TAG} class="#{classes}" #{_pass_through_attributes(component)}><table><tr><th>#{inner}</th>#{expander}</tr></table></#{INTERIM_TH_TAG}>} end
_transform_container(component, inner)
click to toggle source
# File lib/inky/component_factory.rb, line 71 def _transform_container(component, inner) attributes = _combine_attributes(component, 'container') %{<table #{attributes} align="center"><tbody><tr><td>#{inner}</td></tr></tbody></table>} end
_transform_row(component, inner)
click to toggle source
# File lib/inky/component_factory.rb, line 76 def _transform_row(component, inner) attributes = _combine_attributes(component, 'row') %{<table #{attributes}><tbody><tr>#{inner}</tr></tbody></table>} end
_transform_spacer(component, _inner)
click to toggle source
# File lib/inky/component_factory.rb, line 127 def _transform_spacer(component, _inner) classes = _combine_classes(component, 'spacer') build_table = ->(size, extra) { %{<table class="#{classes} #{extra}"><tbody><tr><td height="#{size}" style="font-size:#{size}px;line-height:#{size}px;"> </td></tr></tbody></table>} } size = component.attr('size') size_sm = component.attr('size-sm') size_lg = component.attr('size-lg') if size_sm || size_lg html = '' html << build_table[size_sm, 'hide-for-large'] if size_sm html << build_table[size_lg, 'show-for-large'] if size_lg html else build_table[size || 16, nil] end end
_transform_wrapper(component, inner)
click to toggle source
# File lib/inky/component_factory.rb, line 143 def _transform_wrapper(component, inner) attributes = _combine_attributes(component, 'wrapper') %{<table #{attributes} align="center"><tr><td class="wrapper-inner">#{inner}</td></tr></table>} end
component_factory(elem)
click to toggle source
# File lib/inky/component_factory.rb, line 3 def component_factory(elem) transform_method = :"_transform_#{component_lookup[elem.name]}" return unless respond_to?(transform_method) inner = elem.children.map(&:to_s).join send(transform_method, elem, inner) end