Class: Sablon::Processor::Document::InlineParagraphBlock

Inherits:
Block
  • Object
show all
Defined in:
lib/sablon/processor/document/blocks.rb

Instance Attribute Summary

Attributes inherited from Block

#end_field, #start_field

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Block

#body, enclosed_by, #initialize, parent, parent_selector, #replace

Constructor Details

This class inherits a constructor from Sablon::Processor::Document::Block

Class Method Details

.encloses?(start_field, end_field) ⇒ Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/sablon/processor/document/blocks.rb', line 129

def self.encloses?(start_field, end_field)
  super && parent(start_field) == parent(end_field)
end

Instance Method Details

#end_nodeObject



165
166
167
# File 'lib/sablon/processor/document/blocks.rb', line 165

def end_node
  @end_node ||= end_field.start_node
end

#process(env) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/sablon/processor/document/blocks.rb', line 133

def process(env)
  # Create a mock document structure so xpath queries will work
  # correctly on block level content (i.e. searching for the first
  # ancestor paragraph)
  doc_node = Nokogiri::XML::Node.new('document', start_node.document)
  doc_node.namespace = start_node.parent.namespace
  p_node = Nokogiri::XML::Node.new('p', doc_node.document)
  p_node.namespace = start_node.parent.namespace
  p_node.children = Nokogiri::XML::NodeSet.new(p_node.document,
                                               body.map(&:dup))
  doc_node.children = Nokogiri::XML::NodeSet.new(p_node.document,
                                                 [p_node])
  Processor::Document.process doc_node, env

  if p_node.parent.nil?
    replace_parent_node(doc_node.children)
    []
  else
    p_node.children
  end
end

#remove_control_elementsObject



155
156
157
158
159
# File 'lib/sablon/processor/document/blocks.rb', line 155

def remove_control_elements
  body.each(&:remove)
  start_field.remove
  end_field.remove
end

#start_nodeObject



161
162
163
# File 'lib/sablon/processor/document/blocks.rb', line 161

def start_node
  @start_node ||= start_field.end_node
end