Class: Webgen::SourceHandler::Page
- Inherits:
-
Object
- Object
- Webgen::SourceHandler::Page
- Includes:
- Base, WebsiteAccess
- Defined in:
- lib/webgen/sourcehandler/page.rb
Overview
Source handler for handling content files in Webgen Page Format.
Instance Method Summary collapse
-
#create_node(parent, path) ⇒ Object
Create a page file from
parent
andpath
. -
#initialize ⇒ Page
constructor
:nodoc:.
-
#render_node(node, block_name = 'content', templates = website.blackboard.invoke(:templates_for_node, node)) ⇒ Object
(also: #content)
Render the block called
block_name
of the givennode
.
Methods included from Base
#node_exists?, #output_path, #page_from_path
Methods included from Base::OutputPathHelpers
Methods included from Loggable
Methods included from WebsiteAccess
Constructor Details
#initialize ⇒ Page
:nodoc:
11 12 13 |
# File 'lib/webgen/sourcehandler/page.rb', line 11 def initialize #:nodoc: website.blackboard.add_listener(:node_meta_info_changed?, method(:meta_info_changed?)) end |
Instance Method Details
#create_node(parent, path) ⇒ Object
Create a page file from parent
and path
.
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/webgen/sourcehandler/page.rb', line 16 def create_node(parent, path) page = page_from_path(path) path.['lang'] ||= website.config['website.lang'] path.ext = 'html' if path.ext == 'page' super(parent, path) do |node| node.node_info[:sh_page_node_mi] = Webgen::Page.(path.io.data) node.node_info[:page] = page end end |
#render_node(node, block_name = 'content', templates = website.blackboard.invoke(:templates_for_node, node)) ⇒ Object Also known as: content
Render the block called block_name
of the given node
. The parameter templates
is set to the default template chain for the given node
but you can assign a custom template chain (an array of template nodes) if need arises. Return nil
if an error occurred.
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/webgen/sourcehandler/page.rb', line 30 def render_node(node, block_name = 'content', templates = website.blackboard.invoke(:templates_for_node, node)) chain = [templates, node].flatten if chain.first.node_info[:page].blocks.has_key?(block_name) node.node_info[:used_nodes] << chain.first.absolute_lcn context = chain.first.node_info[:page].blocks[block_name].render(Webgen::ContentProcessor::Context.new(:chain => chain)) context.content else raise "Error rendering <#{node.absolute_lcn}>: no block named '#{block_name}' in <#{chain.first.absolute_lcn}>" end end |