class Bob::Compiler::Walker
Public Class Methods
new(node)
click to toggle source
Calls superclass method
Bob::Compiler::Base::new
# File lib/bob/compiler/walker.rb, line 11 def initialize(node) super() @node = node end
Private Instance Methods
after_element(node, root)
click to toggle source
# File lib/bob/compiler/walker.rb, line 79 def after_element(node, root) append_element(node) unless root end
append_element(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 99 def append_element(node) @buffer << "dom.appendElement();" end
build_comment_node(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 107 def build_comment_node(node) @buffer << "dom.appendComment(#{quote_and_substitute node.text, node});" end
build_element(node, root)
click to toggle source
# File lib/bob/compiler/walker.rb, line 91 def build_element(node, root) @buffer << "dom.createElement(#{quote node.node_name});" filtered_attributes(node).each do |attr| @buffer << "dom.setAttribute(#{quote attr.name}, #{quote_and_substitute attr.value, node});" end end
build_text_node(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 103 def build_text_node(node) @buffer << "dom.appendTextNode(#{quote_and_substitute node.text, node});" end
compile()
click to toggle source
# File lib/bob/compiler/walker.rb, line 17 def compile @buffer << "function(dom, env) {" @buffer.indented do @buffer << "var descriptor = #{pretty_quote descriptor};" @buffer.blankline! walk(@node, true) @buffer.blankline! @buffer << "descriptor.element = dom.getElement();" @buffer.blankline! @buffer << "return descriptor;" end @buffer << "}" end
descriptor()
click to toggle source
# File lib/bob/compiler/walker.rb, line 39 def descriptor { element: nil, editables: [] } end
filtered_attributes(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 70 def filtered_attributes(node) # TODO: switch to a whitelist node.attribute_nodes.reject { |attr| attr.name.start_with?('bob-') } end
filtered_children(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 66 def filtered_children(node) node.children.select { |child| child.element? || child.text? || child.cdata? || child.comment? } end
visit_comment_node(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 87 def visit_comment_node(node) build_comment_node(node) end
visit_element(node, root)
click to toggle source
# File lib/bob/compiler/walker.rb, line 75 def visit_element(node, root) build_element(node, root) end
visit_text_node(node)
click to toggle source
# File lib/bob/compiler/walker.rb, line 83 def visit_text_node(node) build_text_node(node) end
walk(node, root = false)
click to toggle source
# File lib/bob/compiler/walker.rb, line 46 def walk(node, root = false) if node.element? visit_element(node, root) elsif node.text? || node.cdata? visit_text_node(node) elsif node.comment? visit_comment_node(node) else raise TypeError, "Unsupported node type #{node.type}" end if node.element? filtered_children(node).each do |child| walk(child) end after_element(node, root) end end