class Dominate::Dom

Constants

PARTIAL_REGEX
PARTIAL_REGEX_WITHIN
YIELD_REGEX

Attributes

config[RW]
doc[RW]
instance[RW]
options[RW]
raw_html[RW]

Public Class Methods

new(raw_html, instance = false, config = {}) click to toggle source
# File lib/dominate/dom.rb, line 9
def initialize raw_html, instance = false, config = {}
  @raw_html = raw_html
  @instance = instance
  @config   = (Dominate.config.to_h.merge config).to_deep_ostruct

  set_doc raw_html
  load_html if Dominate.config.view_path
end

Public Instance Methods

apply(data, &block) click to toggle source
# File lib/dominate/dom.rb, line 69
def apply data, &block
  @scope.apply data, &block

  self
end
apply_instance() click to toggle source
# File lib/dominate/dom.rb, line 75
def apply_instance
  reset_html
  Scope.new(instance, config, doc).apply_instance
end
html() click to toggle source
# File lib/dominate/dom.rb, line 62
def html
  @html ||= begin
    apply_instance if instance
    "#{doc}"
  end
end
load_html() click to toggle source
# File lib/dominate/dom.rb, line 18
def load_html
  load_layout if config.layout

  inner_html = doc.to_s

  updated_html = inner_html.gsub(PARTIAL_REGEX_WITHIN) do |m|
    match   = m.strip.match(PARTIAL_REGEX)
    partial = match[1]
    HTML.load_file "#{view_path}/#{partial}", config, instance
  end

  updated_html = updated_html.gsub(PARTIAL_REGEX) do |m|
    partial = $~.captures.first
    HTML.load_file "#{view_path}/#{partial}", config, instance
  end

  set_doc updated_html

  # doc.traverse do |e|
  #   if match = e.to_html.strip.match(PARTIAL_REGEX)
  #     partial = match[1]
  #     e.swap Nokogiri::HTML.fragment(
  #       HTML.load_file "#{view_path}/#{partial}", config, instance
  #     )
  #   end
  # end
end
load_layout() click to toggle source
# File lib/dominate/dom.rb, line 46
def load_layout
  path       = "#{config.view_path}/#{config.layout}"
  html       = HTML.load_file path, config, instance
  inner_html = doc.inner_html
  doc.inner_html = html.gsub YIELD_REGEX, inner_html
end
reset_html() click to toggle source
# File lib/dominate/dom.rb, line 80
def reset_html
  @html = false
end
scope(name, &block) click to toggle source
# File lib/dominate/dom.rb, line 53
def scope name, &block
  root_doc = doc.search("[data-scope='#{name}']")
  @scope   = Scope.new instance, config, root_doc

  Instance.new(instance, config).instance_exec(root_doc, &block) if block

  self
end

Private Instance Methods

set_doc(html) click to toggle source
# File lib/dominate/dom.rb, line 86
def set_doc html
  @doc = Nokogiri::HTML html
end
view_path() click to toggle source
# File lib/dominate/dom.rb, line 90
def view_path
  config.view_path
end