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