Class: SlateSerializer::Html
- Inherits:
-
Object
- Object
- SlateSerializer::Html
- Defined in:
- lib/slate_serializer/html.rb
Overview
Html de- and serializer
Defined Under Namespace
Classes: SerializerHandler
Constant Summary collapse
- ELEMENTS =
Default lookup list to convert html tags to object types
{ 'a': 'link', 'img': 'image', 'li': 'list-item', 'p': 'paragraph', 'div': 'paragraph', 'ol1': 'ordered-list', 'ol': 'ordered-list', 'ul': 'unordered-list', 'table': 'table', 'tbody': 'tbody', 'tr': 'tr', 'td': 'td', 'text': 'text', 'hr': 'hr', 'figure': 'figure', 'figcaption': 'figcaption' }.freeze
- BLOCK_ELEMENTS =
Default block types list
%w[figure figcaption hr img li p ol ul table tbody tr td].freeze
- INLINE_ELEMENTS =
Default inline types list
%w[a].freeze
- MARK_ELEMENTS =
Default mark types list
{ 'em': 'italic', 'strong': 'bold', 'b': 'bold', 'u': 'underline' }.freeze
Instance Method Summary collapse
-
#deserialize(html) ⇒ Object
Convert html to a Slate document.
-
#initialize(options = {}) ⇒ Html
constructor
A new instance of Html.
- #register_handler(handler) ⇒ Object
-
#serialize(value) ⇒ String
Convert html to a Slate document.
Constructor Details
#initialize(options = {}) ⇒ Html
Returns a new instance of Html.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/slate_serializer/html.rb', line 37 def initialize( = {}) @elements = [:elements] || ELEMENTS @block_elements = [:block_elements] || BLOCK_ELEMENTS @inline_elements = [:inline_elements] || INLINE_ELEMENTS @mark_elements = [:mark_elements] || MARK_ELEMENTS @element_register = {} @node_register = {} @tag_register = {} ([:handlers] || [ SerializerHandler.new( elements: ['img'], node: 'image', serialize: ->(node, children, tag) do "<#{tag} src=\"#{node[:url]}\"/>" end ), SerializerHandler.new( elements: ['hr'], node: 'hr', serialize: ->(node, children, tag) do "<#{tag}/>" end ), SerializerHandler.new(elements: ['text']), SerializerHandler.new(elements: ['i', 'em'], mark: 'italic'), SerializerHandler.new(elements: ['u'], mark: 'underline'), SerializerHandler.new(elements: ['strong', 'b'], mark: 'bold'), SerializerHandler.new(elements: ['a'], node: 'link'), SerializerHandler.new(elements: ['ol'], node: 'ordered-list'), SerializerHandler.new(elements: ['ul'], node: 'unordered-list'), SerializerHandler.new(elements: ['li'], node: 'list-item'), SerializerHandler.new(elements: ['p', 'div'], node: 'paragraph'), SerializerHandler.new(elements: ['table'], node: 'table'), SerializerHandler.new(elements: ['tbody'], node: 'tbody'), SerializerHandler.new(elements: ['tr'], node: 'tr'), SerializerHandler.new(elements: ['td'], node: 'td'), SerializerHandler.new(elements: ['figure'], node: 'figure'), SerializerHandler.new(elements: ['figcaption'], node: 'figcaption'), ]).each do |handler| register_handler(handler) end end |
Instance Method Details
#deserialize(html) ⇒ Object
Convert html to a Slate document
127 128 129 130 131 132 133 134 |
# File 'lib/slate_serializer/html.rb', line 127 def deserialize(html) return empty_state if html.nil? || html == '' html = html.gsub('<br>', "\n") Nokogiri::HTML.fragment(html).elements.flat_map do |element| element_to_node(element) end end |
#register_handler(handler) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/slate_serializer/html.rb', line 81 def register_handler(handler) handler.elements.each do |element| @element_register[element] = handler end @node_register[handler.node] = handler.serialize @tag_register[handler.node] = handler.elements.first end |
#serialize(value) ⇒ String
Convert html to a Slate document
113 114 115 116 117 |
# File 'lib/slate_serializer/html.rb', line 113 def serialize(value) return '' unless value.is_a?(Array) value.map { |n| serialize_node(n) }.join end |