Skip to content

Instantly share code, notes, and snippets.

@nicolechung
Forked from sukima/photos_tag.rb
Created September 3, 2012 22:51
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Embed
What would you like to do?

Revisions

  1. nicolechung revised this gist Sep 3, 2012. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions photos_tag.rb
    @@ -49,7 +49,7 @@ def initialize(context)
    end

    def path_for(filename)
    filename = filename.strip
    filename = filename
    prefix = (@context.environments.first['site']['photos_prefix'] unless filename =~ /^(?:\/|http)/i) || ""
    "#{prefix}#{filename}"
    end
    @@ -114,7 +114,7 @@ def initialize(tag_name, markup, tokens)

    def render(context)
    # Convert the entire content array into one large string
    lines = super.map(&:strip).join("\n")
    lines = super
    # Get a unique identifier based on content
    md5 = Digest::MD5.hexdigest(lines)
    # split the text by newlines
    @@ -125,11 +125,11 @@ def render(context)

    lines.each do |line|
    if /(?<filename>[^\[\]:]+)(?:\[(?<thumb>\S*)\])?(?::(?<title>.*))?/ =~ line
    list << "<li><a href=\"#{p.path_for(filename)}\" class=\"fancybox\" rel=\"gallery-#{md5}\" title=\"#{title.strip}\">"
    list << "<img src=\"#{p.thumb_for(filename,thumb)}\" alt=\"#{title.strip}\" /></a></li>"
    list << "<a href=\"#{p.path_for(filename)}\" class=\"fancybox\" rel=\"gallery-#{md5}\" title=\"#{title}\">"
    list << "<img src=\"#{p.thumb_for(filename,thumb)}\" alt=\"#{title}\" /></a>"
    end
    end
    "<ul class=\"gallery\">\n#{list}\n</ul>"
    "\n#{list}\n"
    end
    end

  2. @sukima sukima created this gist May 8, 2012.
    140 changes: 140 additions & 0 deletions photos_tag.rb
    @@ -0,0 +1,140 @@
    # Title: Photos tag for Jekyll
    # Authors: Devin Weaver
    # Description: Allows photos tag to place photos as thumbnails and open in fancybox. Uses a CDN if needed.
    #
    # ** This only covers the markup. Not the integration of FancyBox **
    #
    # To see an unabridged explination on integrating this with [FancyBox][1]
    # Please read my [blog post about it][2].
    #
    # [1]: http://fancyapps.com/fancybox/
    # [2]: http://tritarget.org/blog/2012/05/07/integrating-photos-into-octopress-using-fancybox-and-plugin/
    #
    # Syntax {% photo filename [tumbnail] [title] %}
    # Syntax {% photos filename [filename] [filename] [...] %}
    # If the filename has no path in it (no slashes)
    # then it will prefix the `_config.yml` setting `photos_prefix` to the path.
    # This allows using a CDN if desired.
    #
    # To make FancyBox work well with OctoPress You need to include the style fix.
    # In your `source/_include/custom/head.html` add the following:
    #
    # {% fancyboxstylefix %}
    #
    # Examples:
    # {% photo photo1.jpg My Photo %}
    # {% photo /path/to/photo.jpg %}
    # {% gallery %}
    # photo1.jpg: my title 1
    # photo2.jpg[thumnail.jpg]: my title 2
    # photo3.jpg: my title 3
    # {% endgallery %}
    #
    # Output:
    # <a href="photo1.jpg" class="fancybox" title="My Photo"><img src="photo1_m.jpg" alt="My Photo" /></a>
    # <a href="/path/to/photo.jpg" class="fancybox" title="My Photo"><img src="/path/to/photo_m.jpg" alt="My Photo" /></a>
    # <ul class="gallery">
    # <li><a href="photo1.jpg" class="fancybox" rel="gallery-e566c90e554eb6c157de1d5869547f7a" title="my title 1"><img src="photo1_m.jpg" alt="my title 1" /></a></li>
    # <li><a href="photo2.jpg" class="fancybox" rel="gallery-e566c90e554eb6c157de1d5869547f7a" title="my title 2"><img src="photo2_m.jpg" alt="my title 2" /></a></li>
    # <li><a href="photo3.jpg" class="fancybox" rel="gallery-e566c90e554eb6c157de1d5869547f7a" title="my title 3"><img src="photo3_m.jpg" alt="my title 3" /></a></li>
    # </ul>

    require 'digest/md5'

    module Jekyll

    class PhotosUtil
    def initialize(context)
    @context = context
    end

    def path_for(filename)
    filename = filename.strip
    prefix = (@context.environments.first['site']['photos_prefix'] unless filename =~ /^(?:\/|http)/i) || ""
    "#{prefix}#{filename}"
    end

    def thumb_for(filename, thumb=nil)
    filename = filename.strip
    # FIXME: This seems excessive
    if filename =~ /\./
    thumb = (thumb unless thumb == 'default') || filename.gsub(/(?:_b)?\.(?<ext>[^\.]+)?$/, "_m.\\k<ext>")
    else
    thumb = (thumb unless thumb == 'default') || "#{filename}_m"
    end
    path_for(thumb)
    end
    end

    class FancyboxStylePatch < Liquid::Tag
    def render(context)
    return <<-eof
    <!-- Fix FancyBox style for OctoPress -->
    <style type="text/css">
    .fancybox-wrap { position: fixed !important; }
    .fancybox-opened {
    -webkit-border-radius: 4px !important;
    -moz-border-radius: 4px !important;
    border-radius: 4px !important;
    }
    .fancybox-close, .fancybox-prev span, .fancybox-next span {
    background-color: transparent !important;
    border: 0 !important;
    }
    </style>
    eof
    end
    end

    class PhotoTag < Liquid::Tag
    def initialize(tag_name, markup, tokens)
    if /(?<filename>\S+)(?:\s+(?<thumb>\S+))?(?:\s+(?<title>.+))?/i =~ markup
    @filename = filename
    @thumb = thumb
    @title = title
    end
    super
    end

    def render(context)
    p = PhotosUtil.new(context)
    if @filename
    "<a href=\"#{p.path_for(@filename)}\" class=\"fancybox\" title=\"#{@title}\"><img src=\"#{p.thumb_for(@filename,@thumb)}\" alt=\"#{@title}\" /></a>"
    else
    "Error processing input, expected syntax: {% photo filename [thumbnail] [title] %}"
    end
    end
    end

    class GalleryTag < Liquid::Block
    def initialize(tag_name, markup, tokens)
    # No initializing needed
    super
    end

    def render(context)
    # Convert the entire content array into one large string
    lines = super.map(&:strip).join("\n")
    # Get a unique identifier based on content
    md5 = Digest::MD5.hexdigest(lines)
    # split the text by newlines
    lines = lines.split("\n")

    p = PhotosUtil.new(context)
    list = ""

    lines.each do |line|
    if /(?<filename>[^\[\]:]+)(?:\[(?<thumb>\S*)\])?(?::(?<title>.*))?/ =~ line
    list << "<li><a href=\"#{p.path_for(filename)}\" class=\"fancybox\" rel=\"gallery-#{md5}\" title=\"#{title.strip}\">"
    list << "<img src=\"#{p.thumb_for(filename,thumb)}\" alt=\"#{title.strip}\" /></a></li>"
    end
    end
    "<ul class=\"gallery\">\n#{list}\n</ul>"
    end
    end

    end

    Liquid::Template.register_tag('photo', Jekyll::PhotoTag)
    Liquid::Template.register_tag('gallery', Jekyll::GalleryTag)
    Liquid::Template.register_tag('fancyboxstylefix', Jekyll::FancyboxStylePatch)