Class | FileHandlers::PageHandler |
In: |
lib/webgen/plugins/filehandlers/page.rb
|
Parent: | DefaultHandler |
File handler plugin for handling page files.
The following message listening hooks (defined via symbols) are available for this plugin (see Listener):
after_node_rendered: | called after rendering a node via render_node |
EXTENSION | = | 'page' |
# File lib/webgen/plugins/filehandlers/page.rb, line 113 113: def initialize( plugin_manager ) 114: super 115: add_msg_name( :after_node_rendered ) 116: @dummy_node = Node.new( nil, 'dummy' ) 117: @dummy_node.node_info[:src] = 'dummy' 118: end
# File lib/webgen/plugins/filehandlers/page.rb, line 120 120: def create_node( src_name, parent, meta_info ) 121: create_node_from_data( src_name, parent, File.read( src_name ), meta_info ) 122: end
Same functionality as create_node, but uses the given data as content.
# File lib/webgen/plugins/filehandlers/page.rb, line 125 125: def create_node_from_data( filename, parent, data, meta_info ) 126: begin 127: data = WebPageData.new( data, @plugin_manager['ContentConverter/Default'].registered_handlers, 128: {'blocks' => meta_info['blocks']} ) 129: rescue WebPageDataInvalid => e 130: log(:error) { "Invalid page file <#{filename}>: #{e.message}" } 131: return nil 132: end 133: 134: data.meta_info.update( meta_info.merge( data.meta_info ) ) 135: analysed_name = analyse_file_name( filename, data.meta_info['lang'] ) 136: 137: data.meta_info['lang'] ||= analysed_name.lang 138: data.meta_info['title'] ||= analysed_name.title 139: data.meta_info['orderInfo'] ||= analysed_name.orderInfo 140: 141: pagename = analysed_name.name + '.' + EXTENSION 142: localizedPagename = analysed_name.name + '.' + data.meta_info['lang'] + '.' + EXTENSION 143: 144: if node = parent.find {|n| n =~ localizedPagename } 145: log(:warn) do 146: "Two input files in the same language for one page, " + \ 147: "using <#{node.node_info[:src]}> instead of <#{filename}>" 148: end 149: else 150: path = create_output_name( analysed_name, data.meta_info['outputNameStyle'] || param( 'outputNameStyle' ) ) 151: node = PageNode.new( parent, path, data ) 152: node.node_info[:src] = analysed_name.filename 153: node.node_info[:processor] = self 154: node.node_info[:pagename] = pagename 155: node.node_info[:local_pagename] = localizedPagename 156: end 157: 158: node 159: end
See DefaultFileHandler#link_from.
The special attr value :resolve_lang_node specifies if the lang node should be resolved or if the current node should be used.
# File lib/webgen/plugins/filehandlers/page.rb, line 205 205: def link_from( node, ref_node, attr = {} ) 206: lang_node = (attr[:resolve_lang_node] == false ? node : node_for_lang( node, ref_node['lang'] ) ) 207: if lang_node.nil? 208: log(:warn) { "Translation of page node <#{node.parent.full_path + node.node_info[:pagename]}> to language '#{ref_node['lang']}' not found, can't create link"} 209: node['title'] 210: else 211: super( lang_node, ref_node, attr ) 212: end 213: end
See DefaultFileHandler#node_for_lang
# File lib/webgen/plugins/filehandlers/page.rb, line 193 193: def node_for_lang( node, lang ) 194: if node['lang'] == lang 195: node 196: else 197: node.parent.find {|c| c.node_info[:pagename] == node.node_info[:pagename] && c['lang'] == lang} 198: end 199: end
Renders the block called block_name of the given node. If use_templates is true, then the node is rendered in context of its templates.
# File lib/webgen/plugins/filehandlers/page.rb, line 163 163: def render_node( node, block_name = 'content', use_templates = true ) 164: chain = [@dummy_node] 165: content = "{block: #{block_name}}" 166: chain += @plugin_manager['File/TemplateHandler'].templates_for_node( node ) if use_templates 167: chain << node 168: 169: result = @plugin_manager['Core/TagProcessor'].process( content, chain ) 170: dispatch_msg( :after_node_rendered, result, node ) 171: result 172: end
See DefaultFileHandler#write_node.
After the node has been written it is validated by the validator specified in the param validator.
# File lib/webgen/plugins/filehandlers/page.rb, line 178 178: def write_node( node ) 179: outstring = render_node( node ) 180: 181: File.open( node.full_path, File::CREAT|File::TRUNC|File::RDWR ) do |file| 182: file.write( outstring ) 183: end 184: 185: validator = param( 'validator' ) 186: validators = @plugin_manager['HtmlValidator/Default'].registered_handlers 187: unless validator.nil? || validator == '' || validators[validator].nil? 188: validators[validator].validate_file( node.full_path ) 189: end 190: end
# File lib/webgen/plugins/filehandlers/page.rb, line 220 220: def analyse_file_name( filename, lang = nil ) 221: matchData = /^(?:(\d+)\.)?([^.]*?)(?:\.(\w\w\w?))?\.(.*)$/.match( File.basename( filename ) ) 222: analysed = OpenStruct.new 223: 224: log(:debug) { "Using default language for file <#{filename}>" } if lang.nil? && matchData[3].nil? 225: analysed.lang = lang || matchData[3] || param( 'lang', 'Core/Configuration' ) 226: analysed.filename = filename 227: analysed.useLangPart = ( param( 'defaultLangInFilename' ) || param( 'lang', 'Core/Configuration' ) != analysed.lang ) 228: analysed.name = matchData[2] 229: analysed.orderInfo = matchData[1].to_i 230: analysed.title = matchData[2].tr('_-', ' ').capitalize 231: log(:debug) { analysed.inspect } 232: 233: analysed 234: end
# File lib/webgen/plugins/filehandlers/page.rb, line 236 236: def create_output_name( analysed, style, omitLangPart = false ) 237: style.collect do |part| 238: case part 239: when String 240: part 241: when :name 242: analysed.name 243: when :lang 244: analysed.useLangPart && !omitLangPart ? analysed.lang : '' 245: when Array 246: part.include?( :lang ) && (!analysed.useLangPart || omitLangPart) ? '' : create_output_name( analysed, part, omitLangPart ) 247: else 248: '' 249: end 250: end.join( '' ) 251: end