class DraftjsExporter::WrapperState

Attributes

block_map[R]
document[R]
fragment[R]
wrapper[R]

Public Class Methods

new(block_map) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 3
def initialize(block_map)
  @block_map = block_map
  @document = Nokogiri::HTML::Document.new
  @fragment = Nokogiri::HTML::DocumentFragment.new(document)
  reset_wrapper
end

Public Instance Methods

element_for(block) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 10
def element_for(block)
  type = block.fetch(:type, 'unstyled')
  document.create_element(block_options(type)).tap do |e|
    parent_for(type).add_child(e)
  end
end
to_html(options = {}) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 21
def to_html(options = {})
  fragment.to_html(options)
end
to_s() click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 17
def to_s
  to_html
end

Private Instance Methods

block_options(type) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 63
def block_options(type)
  block_map.fetch(type).fetch(:element)
end
create_wrapper(options) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 67
def create_wrapper(options)
  document.create_element(*options).tap do |new_element|
    reset_wrapper.add_child(new_element)
    set_wrapper(new_element, options)
  end
end
nokogiri_options(element_name, element_attributes) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 56
def nokogiri_options(element_name, element_attributes)
  config = element_attributes || {}
  options = {}
  options[:class] = config.fetch(:className) if config.key?(:className)
  [element_name, options]
end
parent_for(type) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 41
def parent_for(type)
  options = block_map.fetch(type)
  return reset_wrapper unless options.key?(:wrapper)

  new_options = nokogiri_options(*options.fetch(:wrapper))
  return wrapper_element if new_options == wrapper_options

  create_wrapper(new_options)
end
reset_wrapper() click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 51
def reset_wrapper
  set_wrapper(fragment)
  wrapper_element
end
set_wrapper(element, options = {}) click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 29
def set_wrapper(element, options = {})
  @wrapper = [element, options]
end
wrapper_element() click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 33
def wrapper_element
  @wrapper[0] || fragment
end
wrapper_options() click to toggle source
# File lib/draftjs_exporter/wrapper_state.rb, line 37
def wrapper_options
  @wrapper[1]
end