plugins/blockquote.rb
8698a276
 #
ab29d45a
 # Author: Brandon Mathis
6a6de74a
 # A full rewrite based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb
8698a276
 #
f77db800
 # Outputs a string with a given attribution as a quote
 #
6a6de74a
 #   {% blockquote Bobby Willis http://google.com/search?q=pants the search for bobby's pants %}
f77db800
 #   Wheeee!
 #   {% endblockquote %}
 #   ...
 #   <blockquote>
 #     <p>Wheeee!</p>
 #     <footer>
6a6de74a
 #     <strong>Bobby Willis</strong><cite><a href="http://google.com/search?q=pants">The Search For Bobby's Pants</a>
f77db800
 #   </blockquote>
 #
acd1ba34
 require './plugins/titlecase.rb'
 
8698a276
 module Jekyll
 
   class Blockquote < Liquid::Block
967eeb46
     FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i
     FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i
     Author =  /(.+)/
8698a276
 
     def initialize(tag_name, markup, tokens)
       @by = nil
       @source = nil
       @title = nil
       if markup =~ FullCiteWithTitle
         @by = $1
         @source = $2 + $3
         @title = $4.titlecase
       elsif markup =~ FullCite
         @by = $1
         @source = $2 + $3
       elsif markup =~ Author
967eeb46
         if $1 =~ /([^,]+),([^,]+)/
           @by = $1
           @title = $2.titlecase
         else
           @by = $1
         end
8698a276
       end
       super
     end
 
     def render(context)
a71a709c
       quote = paragraphize(super.map(&:strip).join)
       author = "<strong>#{@by.strip}</strong>" if @by
da514a65
       if @source
         url = @source.match(/https?:\/\/(.+)/)[1].split('/')
         parts = []
         url.each do |part|
           if (parts + [part]).join('/').length < 32
             parts << part
           end
         end
         source = parts.join('/')
         source << '/&hellip;' unless source == @source
       end
967eeb46
       if !@source.nil?
         cite = "<cite><a href='#{@source}'>#{(@title || source)}</a></cite>"
       elsif !@title.nil?
         cite = "<cite>#{@title}</cite>"
       end
       blockquote = if @by.nil?
a71a709c
         quote
967eeb46
       elsif cite
a71a709c
         "#{quote}<footer>#{author + cite}</footer>"
8698a276
       else
a71a709c
         "#{quote}<footer>#{author}</footer>"
8698a276
       end
967eeb46
       "<blockquote>#{blockquote}</blockquote>"
8698a276
     end
da514a65
 
     def paragraphize(input)
       "<p>#{input.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>"
     end
8698a276
   end
 end
 
 Liquid::Template.register_tag('blockquote', Jekyll::Blockquote)