diff options
Diffstat (limited to 'plugins/blockquote.rb')
-rw-r--r-- | plugins/blockquote.rb | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/plugins/blockquote.rb b/plugins/blockquote.rb new file mode 100644 index 00000000..d292ce8e --- /dev/null +++ b/plugins/blockquote.rb @@ -0,0 +1,74 @@ +# +# Author: Brandon Mathis +# A full rewrite based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb +# +# Outputs a string with a given attribution as a quote +# +# {% blockquote Bobby Willis http://google.com/search?q=pants the search for bobby's pants %} +# Wheeee! +# {% endblockquote %} +# ... +# <blockquote> +# <p>Wheeee!</p> +# <footer> +# <strong>Bobby Willis</strong><cite><a href="http://google.com/search?q=pants">The Search For Bobby's Pants</a> +# </blockquote> +# +require './plugins/titlecase.rb' + +module Jekyll + + class Blockquote < Liquid::Block + FullCiteWithTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i + FullCite = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i + Author = /(\S[\S\s]*)/ + + 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 + @by = $1 + end + super + end + + def render(context) + output = paragraphize(super.map(&:strip).join) + author = "<strong>#{@by.strip}</strong>" + 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 << '/…' unless source == @source + end + cite = "<cite><a href='#{@source}'>#{(@title || source)}</a></cite>" + result = if @by.nil? + output + elsif !@source.nil? + "#{output}<footer>#{author + cite}</footer>" + else + "#{output}<footer>#{author}</footer>" + end + "<blockquote>#{result}</blockquote>" + end + + def paragraphize(input) + "<p>#{input.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>" + end + end +end + +Liquid::Template.register_tag('blockquote', Jekyll::Blockquote) |