mirror of
https://github.com/kremalicious/blog.git
synced 2025-01-20 17:42:01 +01:00
jekyll plugins cleanup
This commit is contained in:
parent
cae922e968
commit
963e8ca5ba
@ -1,35 +1,4 @@
|
|||||||
#custom filters for Octopress
|
#custom filters for Octopress
|
||||||
require './_src/_plugins/post_filters.rb'
|
|
||||||
require './_src/_plugins/raw.rb'
|
|
||||||
require 'rubypants'
|
|
||||||
|
|
||||||
module OctopressFilters
|
|
||||||
include TemplateWrapper
|
|
||||||
def pre_filter(input)
|
|
||||||
input = input
|
|
||||||
end
|
|
||||||
def post_filter(input)
|
|
||||||
input = unwrap(input)
|
|
||||||
RubyPants.new(input).to_html
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Jekyll
|
|
||||||
class ContentFilters < PostFilter
|
|
||||||
include OctopressFilters
|
|
||||||
def pre_render(post)
|
|
||||||
if post.ext.match('html|textile|markdown|md|haml|slim|xml')
|
|
||||||
post.content = pre_filter(post.content)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
def post_render(post)
|
|
||||||
if post.ext.match('html|textile|markdown|md|haml|slim|xml')
|
|
||||||
post.content = post_filter(post.content)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
module OctopressLiquidFilters
|
module OctopressLiquidFilters
|
||||||
|
|
||||||
|
@ -1,176 +0,0 @@
|
|||||||
module Jekyll
|
|
||||||
|
|
||||||
# Extended plugin type that allows the plugin
|
|
||||||
# to be called on varous callback methods.
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# https://github.com/tedkulp/octopress/blob/master/plugins/post_metaweblog.rb
|
|
||||||
# https://github.com/tedkulp/octopress/blob/master/plugins/post_twitter.rb
|
|
||||||
class PostFilter < Plugin
|
|
||||||
|
|
||||||
#Called before post is sent to the converter. Allows
|
|
||||||
#you to modify the post object before the converter
|
|
||||||
#does it's thing
|
|
||||||
def pre_render(post)
|
|
||||||
end
|
|
||||||
|
|
||||||
#Called after the post is rendered with the converter.
|
|
||||||
#Use the post object to modify it's contents before the
|
|
||||||
#post is inserted into the template.
|
|
||||||
def post_render(post)
|
|
||||||
end
|
|
||||||
|
|
||||||
#Called after the post is written to the disk.
|
|
||||||
#Use the post object to read it's contents to do something
|
|
||||||
#after the post is safely written.
|
|
||||||
def post_write(post)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Monkey patch for the Jekyll Site class. For the original class,
|
|
||||||
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb
|
|
||||||
class Site
|
|
||||||
|
|
||||||
# Instance variable to store the various post_filter
|
|
||||||
# plugins that are loaded.
|
|
||||||
attr_accessor :post_filters
|
|
||||||
|
|
||||||
# Instantiates all of the post_filter plugins. This is basically
|
|
||||||
# a duplication of the other loaders in Site#setup.
|
|
||||||
def load_post_filters
|
|
||||||
self.post_filters = Jekyll::PostFilter.subclasses.select do |c|
|
|
||||||
!self.safe || c.safe
|
|
||||||
end.map do |c|
|
|
||||||
c.new(self.config)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Monkey patch for the Jekyll Post class. For the original class,
|
|
||||||
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/post.rb
|
|
||||||
class Post
|
|
||||||
|
|
||||||
# Copy the #write method to #old_write, so we can redefine #write
|
|
||||||
# method.
|
|
||||||
alias_method :old_write, :write
|
|
||||||
|
|
||||||
# Write the generated post file to the destination directory. It
|
|
||||||
# then calls any post_write methods that may exist.
|
|
||||||
# +dest+ is the String path to the destination dir
|
|
||||||
#
|
|
||||||
# Returns nothing
|
|
||||||
def write(dest)
|
|
||||||
old_write(dest)
|
|
||||||
post_write if respond_to?(:post_write)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Monkey patch for the Jekyll Page class. For the original class,
|
|
||||||
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/page.rb
|
|
||||||
class Page
|
|
||||||
|
|
||||||
# Copy the #write method to #old_write, so we can redefine #write
|
|
||||||
# method.
|
|
||||||
alias_method :old_write, :write
|
|
||||||
|
|
||||||
# Write the generated post file to the destination directory. It
|
|
||||||
# then calls any post_write methods that may exist.
|
|
||||||
# +dest+ is the String path to the destination dir
|
|
||||||
#
|
|
||||||
# Returns nothing
|
|
||||||
def write(dest)
|
|
||||||
old_write(dest)
|
|
||||||
post_write if respond_to?(:post_write)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Monkey patch for the Jekyll Convertible module. For the original class,
|
|
||||||
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/convertible.rb
|
|
||||||
module Convertible
|
|
||||||
|
|
||||||
def is_post?
|
|
||||||
self.class.to_s == 'Jekyll::Post'
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_page?
|
|
||||||
self.class.to_s == 'Jekyll::Page'
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_filterable?
|
|
||||||
is_post? or is_page?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Call the #pre_render methods on all of the loaded
|
|
||||||
# post_filter plugins.
|
|
||||||
#
|
|
||||||
# Returns nothing
|
|
||||||
def pre_render
|
|
||||||
self.site.load_post_filters unless self.site.post_filters
|
|
||||||
|
|
||||||
if self.site.post_filters and is_filterable?
|
|
||||||
self.site.post_filters.each do |filter|
|
|
||||||
filter.pre_render(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Call the #post_render methods on all of the loaded
|
|
||||||
# post_filter plugins.
|
|
||||||
#
|
|
||||||
# Returns nothing
|
|
||||||
def post_render
|
|
||||||
if self.site.post_filters and is_filterable?
|
|
||||||
self.site.post_filters.each do |filter|
|
|
||||||
filter.post_render(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Call the #post_write methods on all of the loaded
|
|
||||||
# post_filter plugins.
|
|
||||||
#
|
|
||||||
# Returns nothing
|
|
||||||
def post_write
|
|
||||||
if self.site.post_filters and is_filterable?
|
|
||||||
self.site.post_filters.each do |filter|
|
|
||||||
filter.post_write(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Copy the #transform method to #old_transform, so we can
|
|
||||||
# redefine #transform method.
|
|
||||||
alias_method :old_transform, :transform
|
|
||||||
|
|
||||||
# Transform the contents based on the content type. Then calls the
|
|
||||||
# #post_render method if it exists
|
|
||||||
#
|
|
||||||
# Returns nothing.
|
|
||||||
def transform
|
|
||||||
old_transform
|
|
||||||
post_render if respond_to?(:post_render)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Copy the #do_layout method to #old_do_layout, so we can
|
|
||||||
# redefine #do_layout method.
|
|
||||||
alias_method :old_do_layout, :do_layout
|
|
||||||
|
|
||||||
# Calls the pre_render method if it exists and then adds any necessary
|
|
||||||
# layouts to this convertible document.
|
|
||||||
#
|
|
||||||
# payload - The site payload Hash.
|
|
||||||
# layouts - A Hash of {"name" => "layout"}.
|
|
||||||
#
|
|
||||||
# Returns nothing.
|
|
||||||
def do_layout(payload, layouts)
|
|
||||||
pre_render if respond_to?(:pre_render)
|
|
||||||
old_do_layout(payload, layouts)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns the full url of the post, including the
|
|
||||||
# configured url
|
|
||||||
def full_url
|
|
||||||
self.site.config['url'] + self.url
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,40 +0,0 @@
|
|||||||
# Author: Brandon Mathis
|
|
||||||
# Description: Provides plugins with a method for wrapping and unwrapping input to prevent Markdown and Textile from parsing it.
|
|
||||||
# Purpose: This is useful for preventing Markdown and Textile from being too aggressive and incorrectly parsing in-line HTML.
|
|
||||||
module TemplateWrapper
|
|
||||||
# Wrap input with a <div>
|
|
||||||
def safe_wrap(input)
|
|
||||||
"<div class='bogus-wrapper'><notextile>#{input}</notextile></div>"
|
|
||||||
end
|
|
||||||
# This must be applied after the
|
|
||||||
def unwrap(input)
|
|
||||||
input.gsub /<div class='bogus-wrapper'><notextile>(.+?)<\/notextile><\/div>/m do
|
|
||||||
$1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Author: phaer, https://github.com/phaer
|
|
||||||
# Source: https://gist.github.com/1020852
|
|
||||||
# Description: Raw tag for jekyll. Keeps liquid from parsing text betweeen {% raw %} and {% endraw %}
|
|
||||||
|
|
||||||
module Jekyll
|
|
||||||
class RawTag < Liquid::Block
|
|
||||||
def parse(tokens)
|
|
||||||
@nodelist ||= []
|
|
||||||
@nodelist.clear
|
|
||||||
|
|
||||||
while token = tokens.shift
|
|
||||||
if token =~ FullToken
|
|
||||||
if block_delimiter == $1
|
|
||||||
end_tag
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@nodelist << token if not token.empty?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Liquid::Template.register_tag('raw', Jekyll::RawTag)
|
|
Loading…
Reference in New Issue
Block a user