typo_textfilter_lightbox.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:5k
源码类别:

Ajax

开发平台:

Others

  1. require 'net/http'
  2. require 'flickr'
  3. class Typo
  4.   class Textfilter
  5.     class Lightbox < TextFilterPlugin::MacroPost
  6.       plugin_display_name "Lightbox"
  7.       plugin_description "Automatically generate tags for images displayed in a lightbox"
  8.       def self.help_text
  9.         %{
  10. You can use `<typo:lightbox>` to display images from [Flickr](http://flickr.com)
  11. or a provided URL which, when clicked, will be shown in a lightbox using Lokesh Dhakar's
  12. [Lightbox](http://www.huddletogether.com/projects/lightbox/) Javascript
  13. Example:
  14.     <typo:lightbox img="31367273" thumbsize="thumbnail" displaysize="original"/>
  15.     <typo:lightbox src="/files/myimage.png" thumbsrc="/files/myimage-thumb.png"/>
  16. The first will produce an `<img>` tag showing image number 31367273 from Flickr using the thumbnail image size.  The image will be linked to the original image file from Flickr.  When the link is clicked, the larger picture will be overlaid
  17. on top of the existing page instead of taking you over to the Flickr site.
  18. The second will do the same but use the `src` URL as the large picture and the `thumbsrc` URL as the thumbnail image.
  19. To understand what this looks like, have a peek at Lokesh Dhakar's
  20. [examples](http://www.huddletogether.com/projects/lightbox/).
  21. It will also have a
  22. comment block attached if a description has been attached to the picture in Flickr or the caption attribute is used.
  23. For theme writers, the link is enclosed in a div tag with a "lightboxplugin"
  24. class.  Because this filter requires javascript and css include files, it
  25. will only work with themes using the `<%= page_header %>` convenience function
  26. in their layouts. As of this writing only Azure does this.
  27. This macro takes a number of parameters:
  28. Flickr attributes:
  29. * **img** The Flickr image ID of the picture that you wish to use.  This shows up in the URL whenever
  30.   you're viewing a picture in Flickr; for example, the image ID for <http://flickr.com/photos/scottlaird/31367273>
  31.   is 31367273.
  32. * **thumbsize** The image size that you'd like to display.  Typically you would use square, thumbnail or small.  Options are:
  33.   * square (75x75)
  34.   * thumbnail (maximum size 100 pixels)
  35.   * small (maximum size 240 pixels)
  36.   * medium (maximum size 500 pixels)
  37.   * large (maximum size 1024 pixels)
  38.   * original
  39. * **displaysize** The image size for the lightbox overlay shown when the user clicks the thumbnail.  Options are the same as for thumbsize, but typically you would use medium or large.  If your image files are quite large on Flickr you probably want to avoid using original.
  40. Direct URL attributes:
  41. * **src** The URL to the picture you wish to use.
  42. * **thumbsrc** The URL to the thumbnail you would like to use. If this is not provided, the original picture will be used with the width and height properties of the `<img>` tag set to 100x100.
  43. Common attributes:
  44. * **style** This is passed through to the enclosing `<div>` that this macro generates.  To float the
  45.   image on the right, use `style="float:right"`.
  46. * **caption** The caption displayed below the image.  By default, this is Flickr's description of the image.
  47.   to disable, use `caption=""`.
  48. * **title** The tooltip title associated with the image.  Defaults to Flickr's image title.
  49. * **alt** The alt text associated with the image.  By default, this is the same as the title.
  50. }
  51.       end
  52.       def self.macrofilter(blog,content,attrib,params,text="")
  53.         style         = attrib['style']
  54.         caption       = attrib['caption']
  55.         title         = attrib['title']
  56.         alt           = attrib['alt']
  57.         thumburl      = ''
  58.         displayurl    = ''
  59.         img           = attrib['img']
  60.         if img
  61.           thumbsize     = attrib['thumbsize'] || "square"
  62.           displaysize   = attrib['displaysize'] || "original"
  63.           flickr = ::Flickr.new(FLICKR_KEY)
  64.           flickrimage = ::Flickr::Photo.new(img)
  65.           sizes = flickrimage.sizes
  66.           thumbdetails = sizes.find {|s| s['label'].downcase == thumbsize.downcase } || sizes.first
  67.           displaydetails = sizes.find {|s| s['label'].downcase == displaysize.downcase } || sizes.first
  68.           width  = thumbdetails['width']
  69.           height = thumbdetails['height']
  70.           thumburl    = thumbdetails['source']
  71.           displayurl    = displaydetails['source']
  72.           caption ||= flickrimage.description
  73.           title ||= flickrimage.title
  74.           alt ||= title
  75.         else
  76.           thumburl = attrib['thumbsrc'] unless attrib['thumbsrc'].nil?
  77.           displayurl = attrib['src'] unless attrib['src'].nil?
  78.           if thumburl.empty?
  79.             thumburl = displayurl
  80.             width = 100
  81.             height = 100
  82.           else
  83.             width = height = nil
  84.           end
  85.         end
  86.         if(caption.blank?)
  87.           captioncode=""
  88.         else
  89.           captioncode = "<p class="caption" style="width:#{width}px">#{caption}</p>"
  90.         end
  91.         set_whiteboard blog, content unless content.nil?
  92.         %{<div style="#{style}" class="lightboxplugin"><a href="#{displayurl}" rel="lightbox" title="#{title}"><img src="#{thumburl}" #{%{width="#{width}" } unless width.nil?}#{%{height="#{height}" } unless height.nil?}alt="#{alt}" title="#{title}"/></a>#{captioncode}</div>}
  93.       end
  94.       def self.set_whiteboard(blog, content)
  95.         content.whiteboard['page_header_lightbox'] = <<-HTML
  96.           <link href="#{blog.base_url}/stylesheets/lightbox.css" media="all" rel="Stylesheet" type="text/css" />
  97.           <script src="#{blog.base_url}/javascripts/lightbox.js" type="text/javascript"></script>
  98.         HTML
  99.       end
  100.     end
  101.   end
  102. end