| 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