| Class | FileHandlers::GalleryHandler |
| In: |
lib/webgen/plugins/filehandlers/gallery.rb
|
| Parent: | DefaultHandler |
Handles image gallery files.
# File lib/webgen/plugins/filehandlers/gallery.rb, line 221
221: def initialize( plugin_manager )
222: super
223: @filedata = {}
224: end
# 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
# 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
# File lib/webgen/plugins/filehandlers/gallery.rb, line 259
259: def write_node( node )
260: # do nothing
261: end
# 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
# 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
# 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
# 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
# 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
# File lib/webgen/plugins/filehandlers/gallery.rb, line 352
352: def gallery_file_name( title )
353: ( title.nil? ? nil : title.tr( '/ .\\', '_' ) + '.page' )
354: end
# 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
# 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.
# 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