class Mobiledoc::Renderer_0_3
Constants
- MOBILEDOC_VERSIONS
Attributes
atom_types[RW]
atoms[RW]
card_types[RW]
unknown_atom_handler[RW]
Public Class Methods
new(mobiledoc, state)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 13 def initialize(mobiledoc, state) version, sections, atom_types, card_types, marker_types = *mobiledoc.values_at('version', 'sections', 'atoms', 'cards', 'markups') validate_version(version) self.doc = Nokogiri::HTML.fragment('') self.root = create_document_fragment self.sections = sections self.atom_types = atom_types self.card_types = card_types self.marker_types = marker_types self.cards = state[:cards] self.atoms = state[:atoms] self.card_options = state[:card_options] self.unknown_card_handler = state[:unknown_card_handler] self.unknown_atom_handler = state[:unknown_atom_handler] end
Public Instance Methods
_create_atom_argument(atom, atom_name, value, payload={})
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 126 def _create_atom_argument(atom, atom_name, value, payload={}) env = { name: atom_name } [ env, value, payload, card_options ] end
_find_atom_by_index(index)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 113 def _find_atom_by_index(index) atom_type = atom_types[index] unless atom_type raise Mobiledoc::Error.new("No atom definition found at index #{index}") end name, value, payload = *atom_type atom = find_atom(name) [ atom, name, value, payload ] end
_find_card_by_index(index)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 47 def _find_card_by_index(index) card_type = card_types[index] unless card_type raise Mobiledoc::Error.new("No card definition found at index #{index}") end name, payload = *card_type card = find_card(name) [ card, name, payload ] end
_render_atom(index)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 103 def _render_atom(index) atom, name, value, payload = _find_atom_by_index(index) atom_arg = _create_atom_argument(atom, name, value, payload) rendered = atom.render(*atom_arg) _validate_atom_render(rendered, atom.name) rendered || create_text_node('') end
_render_markers_on_element(element, markers)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 60 def _render_markers_on_element(element, markers) elements = [element] current_element = element markers.each do |marker| type, open_types, close_count, value = *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 case type when MARKUP_MARKER_TYPE append_child(current_element, create_text_node(value)) when ATOM_MARKER_TYPE append_child(current_element, _render_atom(value)) else raise Mobiledoc::Error.new("Unknown markup type (#{type})"); end close_count.times do elements.pop current_element = elements.last end end end
_validate_atom_render(rendered, atom_name)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 134 def _validate_atom_render(rendered, atom_name) return unless rendered unless rendered.is_a?(String) raise Mobiledoc::Error.new(%Q[Atom "#{atom_name}" must render html, but result was #{rendered.class}"]); end end
find_atom(name)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 97 def find_atom(name) atom = atoms.find { |a| a.name == name } atom || unknown_atom_handler end
render_card_section(type, index)
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 41 def render_card_section(type, index) card, name, payload = _find_card_by_index(index) _render_card_section(card, name, payload) end
render_markup_section(type, tag_name, markers, attributes = [])
click to toggle source
# File lib/mobiledoc/renderers/0.3.rb, line 30 def render_markup_section(type, tag_name, markers, attributes = []) return unless valid_section_tag_name?(tag_name, MARKUP_SECTION_TYPE) element = create_element(tag_name) attributes.each_slice(2) do |prop_name, prop_value| set_attribute(element, prop_name, prop_value) end _render_markers_on_element(element, markers) element end