Class: Webgen::SourceHandler::Template
- Inherits:
-
Object
- Object
- Webgen::SourceHandler::Template
- Includes:
- Loggable, Base, WebsiteAccess
- Defined in:
- lib/webgen/sourcehandler/template.rb
Overview
Source handler for handling template files in Webgen Page Format.
Instance Method Summary collapse
-
#create_node(path) ⇒ Object
Create a template node for
path
. -
#default_template(dir_node, lang) ⇒ Object
Return the default template for the directory node
dir
. -
#templates_for_node(node, lang = node.lang) ⇒ Object
Return the template chain for
node
.
Methods included from Base
#content, #node_exists?, #output_path, #page_from_path, #parent_node
Methods included from Base::OutputPathHelpers
Methods included from Loggable
Methods included from WebsiteAccess
Instance Method Details
#create_node(path) ⇒ Object
Create a template node for path
.
13 14 15 16 17 18 |
# File 'lib/webgen/sourcehandler/template.rb', line 13 def create_node(path) page = page_from_path(path) super(path) do |node| node.node_info[:page] = page end end |
#default_template(dir_node, lang) ⇒ Object
Return the default template for the directory node dir
. If the template node is not found, the parent directories are searched.
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/webgen/sourcehandler/template.rb', line 52 def default_template(dir_node, lang) template_node = dir_node.resolve(website.config['sourcehandler.template.default_template'], lang) if template_node.nil? if dir_node.is_root? log(:warn) { "No default template in root directory found!" } else template_node = default_template(dir_node.parent, lang) end end template_node end |
#templates_for_node(node, lang = node.lang) ⇒ Object
Return the template chain for node
.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/webgen/sourcehandler/template.rb', line 21 def templates_for_node(node, lang = node.lang) cached_template = (website.cache.volatile[[node.alcn, :templates]] ||= {}) if cached_template[lang] template_node = cached_template[lang] elsif node['template'].kind_of?(String) template_node = node.resolve(node['template'], lang) if template_node.nil? log(:warn) { "Specified template '#{node['template']}' for <#{node.alcn}> not found, using default template!" } template_node = default_template(node.parent, lang) end cached_template[lang] = template_node elsif node..has_key?('template') && node['template'].nil? template_node = cached_template[lang] = nil else log(:info) { "Using default template in language '#{lang}' for <#{node.alcn}>" } template_node = default_template(node.parent, lang) if template_node == node && !node.parent.is_root? template_node = default_template(node.parent.parent, lang) end cached_template[lang] = template_node end if template_node.nil? [] else (template_node == node ? [] : templates_for_node(template_node, lang) + [template_node]) end end |