Class FileHandlers::GalleryHandler
In: lib/webgen/plugins/filehandlers/gallery.rb
Parent: DefaultHandler
Webgen::Plugin DefaultHandler FileHandler CopyHandler ThumbnailWriter SipttraHandler VirtualFileHandler GalleryHandler TemplateHandler PageHandler DirectoryHandler 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_26_0.png

Handles image gallery files.

Methods

Classes and Modules

Class FileHandlers::GalleryHandler::GalleryInfo

Public Class methods

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 221
221:     def initialize( plugin_manager )
222:       super
223:       @filedata = {}
224:     end

Public Instance methods

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 226
226:     def create_node( file, parent, meta_info )
227:       @filedata = {}
228:       @imagedata = {}
229:       begin
230:         filedata = []
231:         YAML::load_documents( File.read( file ) ) {|d| filedata << d}
232:         @filedata = filedata[0] if filedata[0].kind_of?( Hash )
233:         @imagedata = filedata[1] if filedata[1].kind_of?( Hash )
234:       rescue
235:         log(:error) { "Could not parse gallery file <#{file}>, not creating gallery pages" }
236:         return
237:       end
238: 
239:       @path = File.dirname( file )
240:       images = Dir.glob( File.join( @path, param( 'images' )), File::FNM_CASEFOLD ).collect {|i| i.sub( /#{Regexp.escape(@path + File::SEPARATOR)}/, '' ) }
241:       images.sort! do |a,b|
242:         aoi = @imagedata[a].nil? ? 0 : @imagedata[a]['orderInfo'].to_s.to_i || 0
243:         boi = @imagedata[b].nil? ? 0 : @imagedata[b]['orderInfo'].to_s.to_i || 0
244:         atitle = @imagedata[a].nil? ? a : @imagedata[a]['title'] || a
245:         btitle = @imagedata[b].nil? ? b : @imagedata[b]['title'] || b
246:         (aoi == boi ? atitle <=> btitle : aoi <=> boi)
247:       end
248: 
249:       @filedata['title'] ||= File.basename( file, '.*' ).capitalize
250:       @filedata['filename'] ||= @filedata['title'].downcase
251:       @filedata['lang'] ||= param( 'lang', 'Core/Configuration' )
252:       log(:info) { "Creating gallery for file <#{file}> with #{images.length} images" }
253:       ginfo = create_gallery( images, parent )
254:       @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].handle_gallery( ginfo, parent ) if @filedata.has_key?('layouter') && @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"]
255: 
256:       nil
257:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 416
416:       def thumbnail_for( image, data, parent )
417:         parent_node = @plugin_manager['File/DirectoryHandler'].recursive_create_path( File.dirname( image ), parent )
418:         tn_handler = @plugin_manager['File/ThumbnailWriter']
419:         file_handler = @plugin_manager['Core/FileHandler']
420:         node = file_handler.create_node( File.basename( image ), parent_node, tn_handler ) do |fn, parent, h, mi|
421:           h.create_node( fn, parent, mi, data['thumbnailSize'], data['thumbnailResizeMethod'] )
422:         end
423:         node.absolute_path
424:       end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 259
259:     def write_node( node )
260:       # do nothing
261:     end

Private Instance methods

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 287
287:     def create_gallery( images, parent )
288:       main_data = main_page_data()
289:       galleries = create_gallery_pages( images, parent )
290: 
291:       info_galleries = galleries.collect {|n,g,i| g}
292:       main_page_used = images.length > param( 'imagesPerPage' )
293: 
294:       gallery_data = @filedata.dup
295:       gallery_data[:galleries] = info_galleries
296:       gallery_data['imagesPerPage'] = param('imagesPerPage'),
297: 
298:       if main_page_used
299:         main_node = create_page_node( gallery_file_name( @filedata['filename'] ), parent, page_data( main_data ) )
300:         main_page = GalleryInfo::MainPage.new( main_node.path, main_data )
301:         main_node.node_info[:ginfo] = GalleryInfo.new( gallery_data )
302:         main_node.node_info[:ginfo].mainpage = main_page
303:       end
304: 
305:       galleries.each_with_index do |gData, gIndex|
306:         gData[0].node_info[:ginfo] = GalleryInfo.new( gallery_data, gIndex )
307:         gData[0].node_info[:ginfo].mainpage = main_page if main_page_used
308:         gData[2].each_with_index do |iData, iIndex|
309:           iData[0].node_info[:ginfo] = GalleryInfo.new( gallery_data, gIndex, iIndex )
310:           iData[0].node_info[:ginfo].mainpage = main_page if main_page_used
311:         end
312:       end
313: 
314:       GalleryInfo.new( gallery_data )
315:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 325
325:     def create_gallery_pages( images, parent )
326:       galleries = []
327:       picsPerPage = param( 'imagesPerPage' )
328:       0.step( images.length - 1, picsPerPage ) do |i|
329:         gIndex = i/picsPerPage + 1
330: 
331:         data = (@filedata['galleryPagesMetaInfo'] || {}).dup
332:         data['template'] ||= param( 'galleryPageTemplate' )
333:         data['orderInfo'] += gIndex if data['orderInfo']
334:         data['title'] = (data['title'] || @filedata['title']) + ' ' + gIndex.to_s
335:         filename = @filedata['filename'] + ' ' + gIndex.to_s
336: 
337:         if images.length <= param( 'imagesPerPage' ) && gIndex == 1
338:           template = data['template']
339:           data.update( main_page_data )
340:           data['template'] = template
341:           filename = @filedata['filename']
342:         end
343: 
344:         node = create_page_node( gallery_file_name( filename ), parent, page_data( data ) )
345:         gal_images = create_image_pages( images[i..(i + picsPerPage - 1)], parent )
346:         gallery = GalleryInfo::Gallery.new( node.path, data, gal_images.collect {|n,i| i} )
347:         galleries << [node, gallery, gal_images]
348:       end
349:       galleries
350:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 356
356:     def create_image_pages( images, parent )
357:       imageList = []
358:       images.each do |image|
359:         data = (@filedata['imagePagesMetaInfo'] || {}).dup
360:         data.update( @imagedata[image] || {} )
361:         data['template'] ||= param( 'imagePageTemplate' )
362:         data['title'] ||= "Image #{File.basename( image )}"
363:         data['thumbnailSize'] ||= @filedata['thumbnailSize']
364:         data['thumbnailResizeMethod'] ||= @filedata['thumbnailResizeMethod']
365:         data['exif'] ||= exif_data( File.join( parent.node_info[:src], image ) )
366: 
367:         if @filedata.has_key?('layouter') && @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].respond_to?( :thumbnail_for )
368:           data['thumbnail'] ||= @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].thumbnail_for( image, data, parent )
369:         else
370:           data['thumbnail'] ||= thumbnail_for( image, data, parent )
371:         end
372: 
373:         filename = @filedata['filename'] + ' ' + image
374:         node = create_page_node( gallery_file_name( filename ), parent, page_data( data ) )
375:         image = GalleryInfo::Image.new( node.path, data, image )
376:         imageList << [node, image]
377:       end
378:       imageList
379:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 279
279:     def create_page_node( filename, parent, data )
280:       filehandler = @plugin_manager['Core/FileHandler']
281:       pagehandler = @plugin_manager['File/PageHandler']
282:       filehandler.create_node( filename, parent, pagehandler ) do |filename, parent, handler, meta_info|
283:         pagehandler.create_node_from_data( filename, parent, data, meta_info )
284:       end
285:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 381
381:     def exif_data( image )
382:       if @plugin_manager.optional_part( 'gallery-exif' )[:loaded]
383:         jpeg = EXIFR::JPEG.new( image ) rescue nil
384:         if !jpeg.nil? && jpeg.exif?
385:           exif = jpeg.exif.to_hash
386:           exif[:width] = jpeg.width
387:           exif[:height] = jpeg.height
388:           exif[:comment] = jpeg.comment
389:           exif[:bits] = jpeg.bits
390:           exif
391:         else
392:           nil
393:         end
394:       else
395:         nil
396:       end
397:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 352
352:     def gallery_file_name( title )
353:       ( title.nil? ? nil : title.tr( '/ .\\', '_' ) + '.page' )
354:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 317
317:     def main_page_data
318:       main = {}
319:       main['title'] = @filedata['title']
320:       main['template'] = param( 'mainPageTemplate' )
321:       main.update( @filedata['mainPageMetaInfo'] || {} )
322:       main
323:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 272
272:     def page_data( metainfo )
273:       metainfo['lang'] = @filedata['lang']
274:       temp = metainfo.to_yaml
275:       temp = "---\n" + temp unless /^---\s*$/ =~ temp
276:       "#{temp}\n---\n"
277:     end

Method overridden to lookup parameters specified in the gallery file first.

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 268
268:     def param( name, plugin = nil )
269:       ( @filedata.has_key?( name ) ? @filedata[name] : super )
270:     end

[Source]

     # File lib/webgen/plugins/filehandlers/gallery.rb, line 399
399:     def thumbnail_for( image, data, parent )
400:       image
401:     end

[Validate]