Sha256: 52cfa4da5f1759549ca0b5a1b38d8ffe15fca12fbf263006d6ed4a1a72795941

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

require 'webgen/websiteaccess'
require 'webgen/sourcehandler/base'

module Webgen::SourceHandler

  # Source handler for handling content files in Webgen Page Format.
  class Page

    include Webgen::WebsiteAccess
    include Base

    # Create a page file from +parent+ and +path+.
    def create_node(parent, path)
      page = page_from_path(path)
      path.meta_info['lang'] ||= website.config['website.lang']
      path.ext = 'html' if path.ext == 'page'

      super(parent, path) do |node|
        node.node_info[:page] = page
        tmp_logger = website.logger
        website.logger = nil    # disabling logging whiling creating fragment nodes
        website.blackboard.invoke(:create_fragment_nodes,
                                  website.blackboard.invoke(:parse_html_headers, render_node(node, 'content', [])),
                                  node, node.meta_info['fragments_in_menu'])
        website.logger = tmp_logger
      end
    end

    # 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.
    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
    alias_method :content, :render_node

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
webgen-0.5.0 lib/webgen/sourcehandler/page.rb