Class FileHandlers::PageHandler
In: lib/webgen/plugins/filehandlers/page.rb
Parent: DefaultHandler
Webgen::Plugin DefaultHandler FileHandler CopyHandler ThumbnailWriter SipttraHandler VirtualFileHandler GalleryHandler TemplateHandler DirectoryHandler PageHandler Listener lib/webgen/plugins/filehandlers/filehandler.rb lib/webgen/plugins/filehandlers/copy.rb lib/webgen/plugins/filehandlers/directory.rb lib/webgen/plugins/filehandlers/page.rb lib/webgen/plugins/filehandlers/sipttra.rb lib/webgen/plugins/filehandlers/gallery.rb lib/webgen/plugins/filehandlers/template.rb FileHandlers dot/m_50_0.png

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

Methods

Included Modules

Listener

Classes and Modules

Class FileHandlers::PageHandler::FragmentNode
Class FileHandlers::PageHandler::PageNode

Constants

EXTENSION = 'page'

Public Class methods

[Source]

     # 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

Public Instance methods

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

Private Instance methods

[Source]

     # 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

[Source]

     # 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

[Validate]