class Mobiledoc::Renderer_0_2
Constants
- MOBILEDOC_VERSIONS
Attributes
card_options[RW]
cards[RW]
doc[RW]
marker_types[RW]
root[RW]
sections[RW]
unknown_card_handler[RW]
Public Class Methods
new(mobiledoc, state)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 16 def initialize(mobiledoc, state) version, section_data = *mobiledoc.values_at('version', 'sections') validate_version(version) self.marker_types, self.sections = *section_data self.doc = Nokogiri::HTML.fragment('') self.root = create_document_fragment self.cards = state[:cards] self.card_options = state[:card_options] self.unknown_card_handler = state[:unknown_card_handler] end
Public Instance Methods
_create_card_argument(card_name, payload={})
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 162 def _create_card_argument(card_name, payload={}) env = { name: card_name } [ env, payload, card_options ] end
_create_card_element()
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 158 def _create_card_element create_element('div') end
_render_card_section(card, name, payload)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 131 def _render_card_section(card, name, payload) card_wrapper = _create_card_element card_arg = _create_card_argument(name, payload) rendered = card.render(*card_arg) _validate_card_render(rendered, card.name) if rendered append_child(card_wrapper, rendered) end card_wrapper end
_render_markers_on_element(element, markers)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 178 def _render_markers_on_element(element, markers) elements = [element] current_element = element markers.each do |marker| open_types, close_count, text = *marker open_types.each do |open_type| marker_type = marker_types[open_type] tag_name = marker_type.first if valid_marker_type?(tag_name) opened_element = create_element_from_marker_type(*marker_type) append_child(current_element, opened_element) elements.push(opened_element) current_element = opened_element else close_count -= 1 end end append_child(current_element, create_text_node(text)) close_count.times do elements.pop current_element = elements.last end end end
_validate_card_render(rendered, card_name)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 170 def _validate_card_render(rendered, card_name) return unless rendered unless rendered.is_a?(String) raise Mobiledoc::Error.new(%Q[Card "#{card_name}" must render html, but result was #{rendered.class}"]); end end
append_child(target, child)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 76 def append_child(target, child) target.add_child(child) end
create_document_fragment()
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 49 def create_document_fragment create_element('div') end
create_element(tag_name)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 53 def create_element(tag_name) tag_name = normalize_tag_name(tag_name) Nokogiri::XML::Node.new(tag_name, doc) end
create_element_from_marker_type(tag_name='', attributes=[])
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 66 def create_element_from_marker_type(tag_name='', attributes=[]) element = create_element(tag_name) attributes.each_slice(2) do |prop_name, prop_value| set_attribute(element, prop_name, prop_value) end element end
create_text_node(text)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 62 def create_text_node(text) Nokogiri::XML::Text.new(text, doc) end
find_card(name)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 145 def find_card(name) card = cards.find { |c| c.name == name } case when card card when ImageCard.name == name ImageCard else unknown_card_handler end end
render()
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 35 def render root = create_document_fragment sections.each do |section| rendered = render_section(section) if rendered append_child(root, rendered) end end root.to_html(save_with: 0).gsub(' ', ' ') end
render_card_section(type, name, payload={})
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 125 def render_card_section(type, name, payload={}) card = find_card(name) _render_card_section(card, name, payload) end
render_image_section(type, url)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 102 def render_image_section(type, url) element = create_element('img') set_attribute(element, 'src', url) element end
render_list_item(markers)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 119 def render_list_item(markers) element = create_element('li') _render_markers_on_element(element, markers) element end
render_list_section(type, tag_name, items)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 108 def render_list_section(type, tag_name, items) return unless valid_section_tag_name?(tag_name, LIST_SECTION_TYPE) element = create_element(tag_name) items.each do |item| append_child(element, render_list_item(item)) end element end
render_markup_section(type, tag_name, markers)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 94 def render_markup_section(type, tag_name, markers) return unless valid_section_tag_name?(tag_name, MARKUP_SECTION_TYPE) element = create_element(tag_name) _render_markers_on_element(element, markers) element end
render_section(section)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 80 def render_section(section) type = section.first case type when MARKUP_SECTION_TYPE render_markup_section(*section) when IMAGE_SECTION_TYPE render_image_section(*section) when LIST_SECTION_TYPE render_list_section(*section) when CARD_SECTION_TYPE render_card_section(*section) end end
set_attribute(element, prop_name, prop_value)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 58 def set_attribute(element, prop_name, prop_value) element.set_attribute(prop_name, prop_value) end
valid_marker_type?(type)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 221 def valid_marker_type?(type) type = normalize_tag_name(type) MARKUP_TYPES.include?(type) end
valid_section_tag_name?(tag_name, section_type)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 208 def valid_section_tag_name?(tag_name, section_type) tag_name = normalize_tag_name(tag_name) case section_type when MARKUP_SECTION_TYPE MARKUP_SECTION_TAG_NAMES.include?(tag_name) when LIST_SECTION_TYPE LIST_SECTION_TAG_NAMES.include?(tag_name) else raise Mobiledoc::Error.new(%Q[Cannot validate tag_name for unknown section type "#{section_type}"]) end end
validate_version(version)
click to toggle source
# File lib/mobiledoc/renderers/0.2.rb, line 29 def validate_version(version) unless self.class::MOBILEDOC_VERSIONS.to_a.include? version raise Mobiledoc::Error.new(%Q[Unexpected Mobiledoc version "#{version}"]) end end