diff --git a/.themes/classic/source/index.html b/.themes/classic/source/index.html
index a114e5a8..64b665e4 100644
--- a/.themes/classic/source/index.html
+++ b/.themes/classic/source/index.html
@@ -12,11 +12,11 @@
{% endfor %}
diff --git a/Gemfile b/Gemfile
index cd8ce578..b81ce306 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,20 +1,17 @@
source "https://rubygems.org"
group :development do
- gem 'rake', '~> 0.9'
- gem 'jekyll', '~> 0.12'
+ gem 'rake', '~> 10.0'
+ gem 'jekyll', '~> 2.0'
+ gem 'jekyll-page-hooks', '~> 1.2'
gem 'rdiscount', '~> 2.0.7'
- gem 'pygments.rb', '~> 0.3.4'
gem 'RedCloth', '~> 4.2.9'
gem 'haml', '~> 3.1.7'
gem 'compass', '~> 0.12.2'
- gem 'sass', '~> 3.2'
gem 'sass-globbing', '~> 1.0.0'
gem 'rubypants', '~> 0.2.0'
gem 'rb-fsevent', '~> 0.9'
gem 'stringex', '~> 1.4.0'
- gem 'liquid', '~> 2.3.0'
- gem 'directory_watcher', '1.4.1'
end
gem 'sinatra', '~> 1.4.2'
diff --git a/Gemfile.lock b/Gemfile.lock
index 182c30bc..04187c2b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -2,49 +2,81 @@ GEM
remote: https://rubygems.org/
specs:
RedCloth (4.2.9)
- chunky_png (1.2.5)
- classifier (1.3.3)
+ blankslate (2.1.2.4)
+ celluloid (0.15.2)
+ timers (~> 1.1.0)
+ chunky_png (1.3.1)
+ classifier (1.3.4)
fast-stemmer (>= 1.0.0)
- compass (0.12.2)
+ coffee-script (2.2.0)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.7.0)
+ colorator (0.1)
+ compass (0.12.6)
chunky_png (~> 1.2)
fssm (>= 0.2.7)
- sass (~> 3.1)
- directory_watcher (1.4.1)
- fast-stemmer (1.0.1)
- fssm (0.2.9)
- haml (3.1.7)
- jekyll (0.12.0)
+ sass (~> 3.2.19)
+ execjs (2.2.0)
+ fast-stemmer (1.0.2)
+ ffi (1.9.3)
+ fssm (0.2.10)
+ haml (3.1.8)
+ jekyll (2.0.3)
classifier (~> 1.3)
- directory_watcher (~> 1.1)
- kramdown (~> 0.13.4)
- liquid (~> 2.3)
- maruku (~> 0.5)
- pygments.rb (~> 0.3.2)
- kramdown (0.13.8)
- liquid (2.3.0)
- maruku (0.6.1)
- syntax (>= 1.0.0)
- posix-spawn (0.3.6)
- pygments.rb (0.3.4)
+ colorator (~> 0.1)
+ jekyll-coffeescript (~> 1.0)
+ jekyll-sass-converter (~> 1.0)
+ kramdown (~> 1.3)
+ liquid (~> 2.5.5)
+ listen (~> 2.5)
+ mercenary (~> 0.3.3)
+ pygments.rb (~> 0.5.0)
+ redcarpet (~> 3.1)
+ safe_yaml (~> 1.0)
+ toml (~> 0.1.0)
+ jekyll-coffeescript (1.0.0)
+ coffee-script (~> 2.2)
+ jekyll-page-hooks (1.2.0)
+ jekyll (>= 2.0.0)
+ jekyll-sass-converter (1.0.0)
+ sass (~> 3.2)
+ kramdown (1.4.0)
+ liquid (2.5.5)
+ listen (2.7.9)
+ celluloid (>= 0.15.2)
+ rb-fsevent (>= 0.9.3)
+ rb-inotify (>= 0.9)
+ mercenary (0.3.3)
+ parslet (1.5.0)
+ blankslate (~> 2.0)
+ posix-spawn (0.3.8)
+ pygments.rb (0.5.4)
posix-spawn (~> 0.3.6)
yajl-ruby (~> 1.1.0)
rack (1.5.2)
- rack-protection (1.5.0)
+ rack-protection (1.5.3)
rack
- rake (0.9.2.2)
- rb-fsevent (0.9.1)
+ rake (10.3.2)
+ rb-fsevent (0.9.4)
+ rb-inotify (0.9.5)
+ ffi (>= 0.5.0)
rdiscount (2.0.7.3)
+ redcarpet (3.1.2)
rubypants (0.2.0)
- sass (3.2.9)
+ safe_yaml (1.0.3)
+ sass (3.2.19)
sass-globbing (1.0.0)
sass (>= 3.1)
- sinatra (1.4.2)
- rack (~> 1.5, >= 1.5.2)
+ sinatra (1.4.5)
+ rack (~> 1.4)
rack-protection (~> 1.4)
tilt (~> 1.3, >= 1.3.4)
stringex (1.4.0)
- syntax (1.0.0)
- tilt (1.3.7)
+ tilt (1.4.1)
+ timers (1.1.0)
+ toml (0.1.1)
+ parslet (~> 1.5.0)
yajl-ruby (1.1.0)
PLATFORMS
@@ -53,16 +85,13 @@ PLATFORMS
DEPENDENCIES
RedCloth (~> 4.2.9)
compass (~> 0.12.2)
- directory_watcher (= 1.4.1)
haml (~> 3.1.7)
- jekyll (~> 0.12)
- liquid (~> 2.3.0)
- pygments.rb (~> 0.3.4)
- rake (~> 0.9)
+ jekyll (~> 2.0)
+ jekyll-page-hooks (~> 1.2)
+ rake (~> 10.0)
rb-fsevent (~> 0.9)
rdiscount (~> 2.0.7)
rubypants (~> 0.2.0)
- sass (~> 3.2)
sass-globbing (~> 1.0.0)
sinatra (~> 1.4.2)
stringex (~> 1.4.0)
diff --git a/Rakefile b/Rakefile
index 71fb44ea..7c15332e 100644
--- a/Rakefile
+++ b/Rakefile
@@ -57,7 +57,7 @@ task :generate do
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "## Generating Site with Jekyll"
system "compass compile --css-dir #{source_dir}/stylesheets"
- system "jekyll"
+ system "jekyll build"
end
desc "Watch the site and regenerate when it changes"
@@ -65,7 +65,7 @@ task :watch do
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "Starting to watch source with Jekyll and Compass."
system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
- jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll --auto")
+ jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch")
compassPid = Process.spawn("compass watch")
trap("INT") {
@@ -81,7 +81,7 @@ task :preview do
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "Starting to watch source with Jekyll and Compass. Starting Rack on port #{server_port}"
system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
- jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll --auto")
+ jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch")
compassPid = Process.spawn("compass watch")
rackupPid = Process.spawn("rackup --port #{server_port}")
diff --git a/_config.yml b/_config.yml
index e51e7c38..2a7a8a7e 100644
--- a/_config.yml
+++ b/_config.yml
@@ -39,10 +39,10 @@ rdiscount:
- autolink
- footnotes
- smart
-pygments: false # default python pygments have been replaced by pygments.rb
+highlighter: pygments # default python pygments have been replaced by pygments.rb
paginate: 10 # Posts per page on the blog index
-pagination_dir: blog # Directory base for pagination URLs eg. /blog/page/2/
+paginate_path: "posts/:num" # Directory base for pagination URLs eg. /blog/page/2/
recent_posts: 5 # Posts in the sidebar Recent Posts section
excerpt_link: "Read on →" # "Continue reading" link text at the bottom of excerpted articles
diff --git a/plugins/date.rb b/plugins/date.rb
index 01d94737..031e6736 100644
--- a/plugins/date.rb
+++ b/plugins/date.rb
@@ -63,8 +63,8 @@ class Post
# Convert this Convertible's data to a Hash suitable for use by Liquid.
# Overrides the default return data and adds any date-specific liquid attributes
alias :super_to_liquid :to_liquid
- def to_liquid
- super_to_liquid.deep_merge(liquid_date_attributes)
+ def to_liquid(attrs = nil)
+ Utils.deep_merge_hashes super_to_liquid(attrs), liquid_date_attributes
end
end
@@ -74,8 +74,8 @@ class Page
# Convert this Convertible's data to a Hash suitable for use by Liquid.
# Overrides the default return data and adds any date-specific liquid attributes
alias :super_to_liquid :to_liquid
- def to_liquid
- super_to_liquid.deep_merge(liquid_date_attributes)
+ def to_liquid(attrs = nil)
+ Utils.deep_merge_hashes super_to_liquid(attrs), liquid_date_attributes
end
end
end
diff --git a/plugins/octopress_filters.rb b/plugins/octopress_filters.rb
index a2ed71f8..f543ca5e 100644
--- a/plugins/octopress_filters.rb
+++ b/plugins/octopress_filters.rb
@@ -1,8 +1,7 @@
#custom filters for Octopress
require './plugins/backtick_code_block'
-require './plugins/post_filters'
+require 'jekyll-page-hooks'
require './plugins/raw'
-require './plugins/date'
require 'rubypants'
module OctopressFilters
@@ -21,7 +20,7 @@ def post_filter(input)
end
module Jekyll
- class ContentFilters < PostFilter
+ class ContentFilters < PageHooks
include OctopressFilters
def pre_render(post)
if post.ext.match('html|textile|markdown|md|haml|slim|xml')
diff --git a/plugins/pagination.rb b/plugins/pagination.rb
deleted file mode 100644
index a318754e..00000000
--- a/plugins/pagination.rb
+++ /dev/null
@@ -1,121 +0,0 @@
-module Jekyll
-
- class Pagination < Generator
- # This generator is safe from arbitrary code execution.
- safe true
-
- # Generate paginated pages if necessary.
- #
- # site - The Site.
- #
- # Returns nothing.
- def generate(site)
- site.pages.dup.each do |page|
- paginate(site, page) if Pager.pagination_enabled?(site.config, page)
- end
- end
-
- # Paginates the blog's posts. Renders the index.html file into paginated
- # directories, e.g.: page2/index.html, page3/index.html, etc and adds more
- # site-wide data.
- #
- # site - The Site.
- # page - The index.html Page that requires pagination.
- #
- # {"paginator" => { "page" => ,
- # "per_page" => ,
- # "posts" => [],
- # "total_posts" => ,
- # "total_pages" => ,
- # "previous_page" => ,
- # "next_page" => }}
- def paginate(site, page)
- all_posts = site.site_payload['site']['posts']
- pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
- page_dir = page.destination('').sub(/\/[^\/]+$/, '')
- page_dir_config = site.config['pagination_dir']
- dir = ((page_dir_config || page_dir) + '/').sub(/^\/+/, '')
-
- (1..pages).each do |num_page|
- pager = Pager.new(site.config, num_page, all_posts, page_dir+'/', '/'+dir, pages)
- if num_page > 1
- newpage = Page.new(site, site.source, page_dir, page.name)
- newpage.pager = pager
- newpage.dir = File.join(page.dir, "#{dir}page/#{num_page}")
- site.pages << newpage
- else
- page.pager = pager
- end
- end
- end
- end
-
- class Pager
- attr_reader :page, :per_page, :posts, :total_posts, :total_pages, :previous_page, :next_page
-
- # Calculate the number of pages.
- #
- # all_posts - The Array of all Posts.
- # per_page - The Integer of entries per page.
- #
- # Returns the Integer number of pages.
- def self.calculate_pages(all_posts, per_page)
- (all_posts.size.to_f / per_page.to_i).ceil
- end
-
- # Determine if pagination is enabled for a given file.
- #
- # config - The configuration Hash.
- # file - The String filename of the file.
- #
- # Returns true if pagination is enabled, false otherwise.
- def self.pagination_enabled?(config, file)
- file.name == 'index.html' && !config['paginate'].nil? && file.content =~ /paginator\./
- end
-
- # Initialize a new Pager.
- #
- # config - The Hash configuration of the site.
- # page - The Integer page number.
- # all_posts - The Array of all the site's Posts.
- # num_pages - The Integer number of pages or nil if you'd like the number
- # of pages calculated.
- def initialize(config, page, all_posts, index_dir, pagination_dir, num_pages = nil)
- @page = page
- @per_page = config['paginate'].to_i
- @page_dir = pagination_dir + 'page/'
- @total_pages = num_pages || Pager.calculate_pages(all_posts, @per_page)
- @previous_page = nil
-
- if @page > @total_pages
- raise RuntimeError, "page number can't be greater than total pages: #{@page} > #{@total_pages}"
- end
-
- init = (@page - 1) * @per_page
- offset = (init + @per_page - 1) >= all_posts.size ? all_posts.size : (init + @per_page - 1)
-
- @total_posts = all_posts.size
- @posts = all_posts[init..offset]
- @previous_page = @page != 1 ? @page_dir + (@page - 1).to_s + '/' : nil
- @previous_page = index_dir if @page - 1 == 1
- @next_page = @page != @total_pages ? @page_dir + (@page + 1).to_s + '/' : nil
- end
-
- # Convert this Pager's data to a Hash suitable for use by Liquid.
- #
- # Returns the Hash representation of this Pager.
- def to_liquid
- {
- 'page' => page,
- 'per_page' => per_page,
- 'posts' => posts,
- 'total_posts' => total_posts,
- 'total_pages' => total_pages,
- 'previous_page' => previous_page,
- 'next_page' => next_page
- }
- end
- end
-
-end
-
diff --git a/plugins/post_filters.rb b/plugins/post_filters.rb
deleted file mode 100644
index 08626802..00000000
--- a/plugins/post_filters.rb
+++ /dev/null
@@ -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
diff --git a/plugins/preview_unpublished.rb b/plugins/preview_unpublished.rb
deleted file mode 100644
index 28cbdfe7..00000000
--- a/plugins/preview_unpublished.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# Monkeypatch for Jekyll
-# Introduce distinction between preview/productive site generation
-# so posts with YAML attribute `published: false` can be previewed
-# on localhost without being published to the productive environment.
-
-module Jekyll
-
- class Site
- # Read all the files in