aboutsummaryrefslogtreecommitdiff
path: root/plugins/blockquote.rb
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/blockquote.rb')
-rw-r--r--plugins/blockquote.rb74
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 << '/&hellip;' 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)