class Slacken::RenderElement
Internal: Representing a tree structure of a document and
responsible for rendering the structure to string.
Attributes
attrs[R]
children[R]
renderer[R]
type[R]
Public Class Methods
new(type, children = [], attrs = {})
click to toggle source
# File lib/slacken/render_element.rb, line 7 def initialize(type, children = [], attrs = {}) @type = NodeType.create(type) @attrs = attrs @children = children end
Public Instance Methods
child()
click to toggle source
# File lib/slacken/render_element.rb, line 13 def child children.first end
render()
click to toggle source
# File lib/slacken/render_element.rb, line 17 def render case type.name when :text attrs[:content] when :emoji deco "#{attrs[:content]}" when :checkbox deco (attrs[:checked] ? '[x]' : '[ ]') when :b, :strong deco "*#{inner.to_s.strip}*" when :i, :em deco "_#{inner.to_s.strip}_" when :iframe, :a deco SlackUrl.link_tag(inner, attrs[:href]) when :img deco SlackUrl.link_tag(inner, attrs[:src]) when :pre deco "```#{inner}```" when :blockquote insert_head(inner.to_s, '> ') when :code deco "`#{inner}`" when :br "\n" when :hr '-----------' when :li, :dd # Item mark is appended by the parent list tag. inner when :ol, :ul, :dl itemize when :indent insert_head(inner.to_s) when /h\d/ "*#{inner.to_s.strip}*" else inner end end
to_s()
click to toggle source
# File lib/slacken/render_element.rb, line 57 def to_s render.to_s end
Private Instance Methods
deco(str)
click to toggle source
# File lib/slacken/render_element.rb, line 89 def deco(str) Rendering.decorate(str) end
grouping(children_strs)
click to toggle source
# File lib/slacken/render_element.rb, line 75 def grouping(children_strs) if type.inline? Rendering::Inlines.new(children_strs) elsif type.member_of?(:ul, :ol, :dl, :li, :dd, :dt) Rendering::Listings.new(children_strs) elsif type.block? Rendering::Paragraphs.new(children_strs) end end
inner()
click to toggle source
# File lib/slacken/render_element.rb, line 71 def inner grouping(children.map(&:render)) end
insert_head(str, head = ' ' * 4)
click to toggle source
# File lib/slacken/render_element.rb, line 85 def insert_head(str, head = ' ' * 4) str.gsub(/^/, head) end
itemize()
click to toggle source
# File lib/slacken/render_element.rb, line 63 def itemize children_strs = children.map.with_index(1) do |child, idx| mark = type.member_of?(:ol) ? "#{idx}. " : '• ' "#{mark}#{child}" end grouping(children_strs) end