octopress 3.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.editorconfig +22 -0
- data/.gitattributes +1 -0
- data/.gitignore +20 -0
- data/.powrc +4 -0
- data/.rspec +5 -0
- data/.rubocop.yml +119 -0
- data/.slugignore +3 -0
- data/.themes/classic/.editorconfig +44 -0
- data/.themes/classic/_config/adn-timeline.yml +10 -0
- data/.themes/classic/_config/delicious-feed.yml +4 -0
- data/.themes/classic/_config/deploy/gh_pages.yml +9 -0
- data/.themes/classic/_config/deploy/rsync.yml +14 -0
- data/.themes/classic/_config/disqus.yml +11 -0
- data/.themes/classic/_config/facebook-like.yml +2 -0
- data/.themes/classic/_config/gauges-analytics.yml +6 -0
- data/.themes/classic/_config/github-repos.yml +24 -0
- data/.themes/classic/_config/google-analytics.yml +6 -0
- data/.themes/classic/_config/google-plus.yml +13 -0
- data/.themes/classic/_config/jekyll.yml +37 -0
- data/.themes/classic/_config/pinboard-feed.yml +4 -0
- data/.themes/classic/_config/require-js.yml +19 -0
- data/.themes/classic/_config/theme.yml +54 -0
- data/.themes/classic/_config/twitter-timeline.yml +9 -0
- data/.themes/classic/assets/javascripts/lib/ios-rotate-scaling-fix.js +18 -0
- data/.themes/classic/assets/javascripts/lib/jquery.cookie.js +92 -0
- data/.themes/classic/assets/javascripts/lib/modernizr.js +447 -0
- data/.themes/classic/assets/javascripts/lib/octopress.js +83 -0
- data/.themes/classic/assets/javascripts/modules/adn-timeline.coffee +68 -0
- data/.themes/classic/assets/javascripts/modules/delicious-feed.coffee +38 -0
- data/.themes/classic/assets/javascripts/modules/github-repos.coffee +60 -0
- data/.themes/classic/assets/javascripts/modules/github.coffee +60 -0
- data/.themes/classic/assets/javascripts/modules/helpers.coffee +96 -0
- data/.themes/classic/assets/javascripts/modules/pinboard-feed.coffee +42 -0
- data/.themes/classic/assets/javascripts/modules/site.coffee +11 -0
- data/.themes/classic/assets/stylesheets/_base.scss +5 -0
- data/.themes/classic/assets/stylesheets/_partials.scss +8 -0
- data/.themes/classic/assets/stylesheets/base/_layout.scss +191 -0
- data/.themes/classic/assets/stylesheets/base/_solarized.scss +75 -0
- data/.themes/classic/assets/stylesheets/base/_theme.scss +92 -0
- data/.themes/classic/assets/stylesheets/base/_typography.scss +168 -0
- data/.themes/classic/assets/stylesheets/base/_utilities.scss +27 -0
- data/.themes/classic/assets/stylesheets/custom/_colors.scss +49 -0
- data/.themes/classic/assets/stylesheets/custom/_fonts.scss +10 -0
- data/.themes/classic/assets/stylesheets/custom/_layout.scss +17 -0
- data/.themes/classic/assets/stylesheets/custom/_styles.scss +2 -0
- data/.themes/classic/assets/stylesheets/partials/_archive.scss +77 -0
- data/.themes/classic/assets/stylesheets/partials/_blog.scss +165 -0
- data/.themes/classic/assets/stylesheets/partials/_footer.scss +19 -0
- data/.themes/classic/assets/stylesheets/partials/_header.scss +18 -0
- data/.themes/classic/assets/stylesheets/partials/_navigation.scss +136 -0
- data/.themes/classic/assets/stylesheets/partials/_sharing.scss +73 -0
- data/.themes/classic/assets/stylesheets/partials/_sidebar.scss +4 -0
- data/.themes/classic/assets/stylesheets/partials/_syntax.scss +234 -0
- data/.themes/classic/assets/stylesheets/partials/sidebar/_base.scss +106 -0
- data/.themes/classic/assets/stylesheets/partials/sidebar/_delicious.scss +4 -0
- data/.themes/classic/assets/stylesheets/partials/sidebar/_googleplus.scss +26 -0
- data/.themes/classic/assets/stylesheets/partials/sidebar/_pinboard.scss +12 -0
- data/.themes/classic/assets/stylesheets/plugins/_plugins.scss +5 -0
- data/.themes/classic/assets/stylesheets/screen.scss +11 -0
- data/.themes/classic/source/404.markdown +9 -0
- data/.themes/classic/source/_includes/after_footer.html +7 -0
- data/.themes/classic/source/_includes/archive_post.html +12 -0
- data/.themes/classic/source/_includes/article.html +23 -0
- data/.themes/classic/source/_includes/comments.html +9 -0
- data/.themes/classic/source/_includes/custom/after_footer.html +3 -0
- data/.themes/classic/source/_includes/custom/after_page.html +1 -0
- data/.themes/classic/source/_includes/custom/after_post.html +0 -0
- data/.themes/classic/source/_includes/custom/comments.html +5 -0
- data/.themes/classic/source/_includes/custom/footer.html +4 -0
- data/.themes/classic/source/_includes/custom/head.html +7 -0
- data/.themes/classic/source/_includes/custom/header.html +6 -0
- data/.themes/classic/source/_includes/custom/navigation.html +4 -0
- data/.themes/classic/source/_includes/custom/page_meta.html +1 -0
- data/.themes/classic/source/_includes/custom/post_meta.html +1 -0
- data/.themes/classic/source/_includes/custom/sharing.html +3 -0
- data/.themes/classic/source/_includes/disqus.html +22 -0
- data/.themes/classic/source/_includes/facebook_like.html +10 -0
- data/.themes/classic/source/_includes/feed_entry.xml +10 -0
- data/.themes/classic/source/_includes/footer.html +1 -0
- data/.themes/classic/source/_includes/gauges_analytics.html +15 -0
- data/.themes/classic/source/_includes/google_analytics.html +13 -0
- data/.themes/classic/source/_includes/google_plus_one.html +9 -0
- data/.themes/classic/source/_includes/head.html +33 -0
- data/.themes/classic/source/_includes/header.html +1 -0
- data/.themes/classic/source/_includes/navigation.html +15 -0
- data/.themes/classic/source/_includes/post/author.html +8 -0
- data/.themes/classic/source/_includes/post/categories.html +10 -0
- data/.themes/classic/source/_includes/post/date.html +15 -0
- data/.themes/classic/source/_includes/post/disqus_thread.html +1 -0
- data/.themes/classic/source/_includes/post/meta.html +3 -0
- data/.themes/classic/source/_includes/post/sharing.html +36 -0
- data/.themes/classic/source/_includes/post/title.html +5 -0
- data/.themes/classic/source/_includes/post/variables.html +14 -0
- data/.themes/classic/source/_includes/sidebars/blog_index_default.html +3 -0
- data/.themes/classic/source/_includes/sidebars/page_default.html +4 -0
- data/.themes/classic/source/_includes/sidebars/post_default.html +4 -0
- data/.themes/classic/source/_includes/sidebars/sections/delicious.html +8 -0
- data/.themes/classic/source/_includes/sidebars/sections/github.html +9 -0
- data/.themes/classic/source/_includes/sidebars/sections/google_plus.html +5 -0
- data/.themes/classic/source/_includes/sidebars/sections/pinboard.html +17 -0
- data/.themes/classic/source/_includes/sidebars/sections/recent_posts.html +10 -0
- data/.themes/classic/source/_includes/twitter_sharing.html +11 -0
- data/.themes/classic/source/_layouts/category_feed.xml +24 -0
- data/.themes/classic/source/_layouts/category_index.html +19 -0
- data/.themes/classic/source/_layouts/default.html +14 -0
- data/.themes/classic/source/_layouts/page.html +34 -0
- data/.themes/classic/source/_layouts/post.html +39 -0
- data/.themes/classic/source/archives/index.html +20 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/display/background.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/dock/button.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/glow.xml +115 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/item.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png +0 -0
- data/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png +0 -0
- data/.themes/classic/source/assets/jwplayer/player.swf +0 -0
- data/.themes/classic/source/atom.xml +23 -0
- data/.themes/classic/source/images/bird_32_gray.png +0 -0
- data/.themes/classic/source/images/bird_32_gray_fail.png +0 -0
- data/.themes/classic/source/images/code_bg.png +0 -0
- data/.themes/classic/source/images/dotted-border.png +0 -0
- data/.themes/classic/source/images/email.png +0 -0
- data/.themes/classic/source/images/icon/facebook.png +0 -0
- data/.themes/classic/source/images/icon/github.png +0 -0
- data/.themes/classic/source/images/icon/googleplus.png +0 -0
- data/.themes/classic/source/images/icon/twitter-bird.png +0 -0
- data/.themes/classic/source/images/icon/twitter.png +0 -0
- data/.themes/classic/source/images/line-tile.png +0 -0
- data/.themes/classic/source/images/noise.png +0 -0
- data/.themes/classic/source/images/rss.png +0 -0
- data/.themes/classic/source/images/search.png +0 -0
- data/.themes/classic/source/index.html +30 -0
- data/.themes/classic/source/javascripts/jquery.min.js +5 -0
- data/.themes/classic/source/octopress-favicon.png +0 -0
- data/.themes/classic/source/robots.txt +7 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.markdown +46 -0
- data/CONTRIBUTING.markdown +17 -0
- data/Gemfile +2 -0
- data/README.markdown +37 -0
- data/Rakefile +76 -0
- data/bin/octopress +66 -0
- data/lib/console +17 -0
- data/lib/guard/jekyll.rb +33 -0
- data/lib/octopress.rb +89 -0
- data/lib/octopress/command.rb +9 -0
- data/lib/octopress/commands.rb +14 -0
- data/lib/octopress/commands/build.rb +17 -0
- data/lib/octopress/commands/build_javascripts.rb +11 -0
- data/lib/octopress/commands/build_jekyll.rb +25 -0
- data/lib/octopress/commands/build_stylesheets.rb +13 -0
- data/lib/octopress/commands/install.rb +45 -0
- data/lib/octopress/commands/new.rb +21 -0
- data/lib/octopress/commands/scaffold.rb +101 -0
- data/lib/octopress/commands/serve.rb +25 -0
- data/lib/octopress/configuration.rb +231 -0
- data/lib/octopress/core_ext.rb +44 -0
- data/lib/octopress/dependency_installer.rb +287 -0
- data/lib/octopress/errors.rb +3 -0
- data/lib/octopress/filters/content.rb +66 -0
- data/lib/octopress/filters/date.rb +46 -0
- data/lib/octopress/filters/post.rb +175 -0
- data/lib/octopress/filters/url.rb +34 -0
- data/lib/octopress/formatters.rb +9 -0
- data/lib/octopress/formatters/base_formatter.rb +17 -0
- data/lib/octopress/formatters/simple_formatter.rb +9 -0
- data/lib/octopress/formatters/verbose_formatter.rb +9 -0
- data/lib/octopress/generators/category_generator.rb +196 -0
- data/lib/octopress/generators/sitemap_generator.rb +308 -0
- data/lib/octopress/guardfile +43 -0
- data/lib/octopress/helpers/titlecase.rb +37 -0
- data/lib/octopress/ink.rb +12 -0
- data/lib/octopress/inquirable_string.rb +12 -0
- data/lib/octopress/installer.rb +92 -0
- data/lib/octopress/js_asset_manager.rb +98 -0
- data/lib/octopress/liquid_helpers/conditional.rb +36 -0
- data/lib/octopress/liquid_helpers/config.rb +58 -0
- data/lib/octopress/liquid_helpers/include.rb +33 -0
- data/lib/octopress/liquid_helpers/url.rb +29 -0
- data/lib/octopress/liquid_helpers/vars.rb +30 -0
- data/lib/octopress/plugin.rb +33 -0
- data/lib/octopress/rake.rb +16 -0
- data/lib/octopress/scaffold/.gitignore +18 -0
- data/lib/octopress/scaffold/site/Gemfile +3 -0
- data/lib/octopress/scaffold/site/config/compass.rb +27 -0
- data/lib/octopress/scaffold/site/config/rack.rb +25 -0
- data/lib/octopress/scaffold/site/config/site.yml +0 -0
- data/lib/octopress/scaffold/site/javascripts/lib/ios-rotate-scaling-fix.js +19 -0
- data/lib/octopress/scaffold/site/javascripts/lib/jquery-1.9.1.js +9598 -0
- data/lib/octopress/scaffold/site/javascripts/lib/jquery.cookie.js +93 -0
- data/lib/octopress/scaffold/site/stylesheets/_config.scss +1 -0
- data/lib/octopress/scaffold/site/stylesheets/_style.scss +1 -0
- data/lib/octopress/scaffold/site/stylesheets/site.scss +16 -0
- data/lib/octopress/tags/assign.rb +34 -0
- data/lib/octopress/tags/capture.rb +31 -0
- data/lib/octopress/tags/config-tag.rb +23 -0
- data/lib/octopress/tags/include.rb +63 -0
- data/lib/octopress/tags/js-assets.rb +23 -0
- data/lib/octopress/tags/puts.rb +39 -0
- data/lib/octopress/tags/render-partial.rb +89 -0
- data/lib/octopress/tags/return.rb +21 -0
- data/lib/octopress/version.rb +3 -0
- data/lib/rake/clean.rake +8 -0
- data/lib/rake/clobber.rake +5 -0
- data/lib/rake/console.rake +5 -0
- data/lib/rake/deploy.rake +4 -0
- data/lib/rake/gen_deploy.rake +2 -0
- data/lib/rake/generate.rake +4 -0
- data/lib/rake/generate_only.rake +14 -0
- data/lib/rake/hygiene.rake +29 -0
- data/lib/rake/install.rake +8 -0
- data/lib/rake/integrate.rake +4 -0
- data/lib/rake/isolate.rake +13 -0
- data/lib/rake/list_drafts.rake +7 -0
- data/lib/rake/new.rake +7 -0
- data/lib/rake/new_page.rake +49 -0
- data/lib/rake/new_post.rake +32 -0
- data/lib/rake/nuke.rake +4 -0
- data/lib/rake/preview.rake +4 -0
- data/lib/rake/push.rake +37 -0
- data/lib/rake/rsync.rake +20 -0
- data/lib/rake/set_root_dir.rake +35 -0
- data/lib/rake/setup_github_pages.rake +115 -0
- data/lib/rake/watch.rake +11 -0
- data/lib/scaffold/Rakefile +142 -0
- data/lib/scaffold/plugin-name.gemspec +43 -0
- data/lib/spec/fixtures/env/defaults/classic.yml +2 -0
- data/lib/spec/fixtures/no_override/defaults/classic.yml +11 -0
- data/lib/spec/fixtures/override/defaults/classic.yml +11 -0
- data/lib/spec/fixtures/override/site.yml +11 -0
- data/lib/spec/octopress/configuration_spec.rb +67 -0
- data/lib/spec/octopress/dependency_installer_spec.rb +66 -0
- data/lib/spec/octopress/ink_spec.rb +10 -0
- data/lib/spec/octopress/octopress_spec.rb +97 -0
- data/lib/spec/spec_helper.rb +22 -0
- data/lib/spec/support/env.rb +36 -0
- data/lib/spec/support/simplecov.rb +52 -0
- data/octopress.gemspec +52 -0
- metadata +697 -0
@@ -0,0 +1,175 @@
|
|
1
|
+
module Jekyll
|
2
|
+
|
3
|
+
# Extended plugin type that allows the plugin
|
4
|
+
# to be called on varous callback methods.
|
5
|
+
#
|
6
|
+
# Examples:
|
7
|
+
# https://github.com/tedkulp/octopress/blob/master/plugins/post_metaweblog.rb
|
8
|
+
class PostFilter < Plugin
|
9
|
+
|
10
|
+
#Called before post is sent to the converter. Allows
|
11
|
+
#you to modify the post object before the converter
|
12
|
+
#does it's thing
|
13
|
+
def pre_render(post)
|
14
|
+
end
|
15
|
+
|
16
|
+
#Called after the post is rendered with the converter.
|
17
|
+
#Use the post object to modify it's contents before the
|
18
|
+
#post is inserted into the template.
|
19
|
+
def post_render(post)
|
20
|
+
end
|
21
|
+
|
22
|
+
#Called after the post is written to the disk.
|
23
|
+
#Use the post object to read it's contents to do something
|
24
|
+
#after the post is safely written.
|
25
|
+
def post_write(post)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Monkey patch for the Jekyll Site class. For the original class,
|
30
|
+
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb
|
31
|
+
class Site
|
32
|
+
|
33
|
+
# Instance variable to store the various post_filter
|
34
|
+
# plugins that are loaded.
|
35
|
+
attr_accessor :post_filters
|
36
|
+
|
37
|
+
# Instantiates all of the post_filter plugins. This is basically
|
38
|
+
# a duplication of the other loaders in Site#setup.
|
39
|
+
def load_post_filters
|
40
|
+
self.post_filters = instantiate_subclasses(Jekyll::PostFilter)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Monkey patch for the Jekyll Post class. For the original class,
|
45
|
+
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/post.rb
|
46
|
+
class Post
|
47
|
+
|
48
|
+
# Copy the #write method to #old_write, so we can redefine #write
|
49
|
+
# method.
|
50
|
+
alias_method :old_write, :write
|
51
|
+
|
52
|
+
# Write the generated post file to the destination directory. It
|
53
|
+
# then calls any post_write methods that may exist.
|
54
|
+
# +dest+ is the String path to the destination dir
|
55
|
+
#
|
56
|
+
# Returns nothing
|
57
|
+
def write(dest)
|
58
|
+
old_write(dest)
|
59
|
+
post_write if respond_to?(:post_write)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Monkey patch for the Jekyll Page class. For the original class,
|
64
|
+
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/page.rb
|
65
|
+
class Page
|
66
|
+
|
67
|
+
# Copy the #write method to #old_write, so we can redefine #write
|
68
|
+
# method.
|
69
|
+
alias_method :old_write, :write
|
70
|
+
|
71
|
+
# Write the generated post file to the destination directory. It
|
72
|
+
# then calls any post_write methods that may exist.
|
73
|
+
# +dest+ is the String path to the destination dir
|
74
|
+
#
|
75
|
+
# Returns nothing
|
76
|
+
def write(dest)
|
77
|
+
old_write(dest)
|
78
|
+
post_write if respond_to?(:post_write)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Monkey patch for the Jekyll Convertible module. For the original class,
|
83
|
+
# see: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/convertible.rb
|
84
|
+
module Convertible
|
85
|
+
|
86
|
+
def is_post?
|
87
|
+
self.class.to_s == 'Jekyll::Post'
|
88
|
+
end
|
89
|
+
|
90
|
+
def is_page?
|
91
|
+
self.class.to_s == 'Jekyll::Page'
|
92
|
+
end
|
93
|
+
|
94
|
+
def is_convertible_page?
|
95
|
+
self.class.to_s == 'Jekyll::ConvertiblePage'
|
96
|
+
end
|
97
|
+
|
98
|
+
def is_filterable?
|
99
|
+
is_post? or is_page? or is_convertible_page?
|
100
|
+
end
|
101
|
+
|
102
|
+
# Call the #pre_render methods on all of the loaded
|
103
|
+
# post_filter plugins.
|
104
|
+
#
|
105
|
+
# Returns nothing
|
106
|
+
def pre_render
|
107
|
+
self.site.load_post_filters unless self.site.post_filters
|
108
|
+
|
109
|
+
if self.site.post_filters and is_filterable?
|
110
|
+
self.site.post_filters.each do |filter|
|
111
|
+
filter.pre_render(self)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Call the #post_render methods on all of the loaded
|
117
|
+
# post_filter plugins.
|
118
|
+
#
|
119
|
+
# Returns nothing
|
120
|
+
def post_render
|
121
|
+
if self.site.post_filters and is_filterable?
|
122
|
+
self.site.post_filters.each do |filter|
|
123
|
+
filter.post_render(self)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Call the #post_write methods on all of the loaded
|
129
|
+
# post_filter plugins.
|
130
|
+
#
|
131
|
+
# Returns nothing
|
132
|
+
def post_write
|
133
|
+
if self.site.post_filters and is_filterable?
|
134
|
+
self.site.post_filters.each do |filter|
|
135
|
+
filter.post_write(self)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Copy the #transform method to #old_transform, so we can
|
141
|
+
# redefine #transform method.
|
142
|
+
alias_method :old_transform, :transform
|
143
|
+
|
144
|
+
# Transform the contents based on the content type. Then calls the
|
145
|
+
# #post_render method if it exists
|
146
|
+
#
|
147
|
+
# Returns nothing.
|
148
|
+
def transform
|
149
|
+
old_transform
|
150
|
+
post_render if respond_to?(:post_render)
|
151
|
+
end
|
152
|
+
|
153
|
+
# Copy the #do_layout method to #old_do_layout, so we can
|
154
|
+
# redefine #do_layout method.
|
155
|
+
alias_method :old_do_layout, :do_layout
|
156
|
+
|
157
|
+
# Calls the pre_render method if it exists and then adds any necessary
|
158
|
+
# layouts to this convertible document.
|
159
|
+
#
|
160
|
+
# payload - The site payload Hash.
|
161
|
+
# layouts - A Hash of {"name" => "layout"}.
|
162
|
+
#
|
163
|
+
# Returns nothing.
|
164
|
+
def do_layout(payload, layouts)
|
165
|
+
pre_render if respond_to?(:pre_render)
|
166
|
+
old_do_layout(payload, layouts)
|
167
|
+
end
|
168
|
+
|
169
|
+
# Returns the full url of the post, including the
|
170
|
+
# configured url
|
171
|
+
def full_url
|
172
|
+
self.site.config['url'] + self.url
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Liquid filters for Octopress
|
2
|
+
|
3
|
+
module Octopress
|
4
|
+
module UrlFilters
|
5
|
+
include UrlHelpers
|
6
|
+
|
7
|
+
# Replaces relative urls with full urls
|
8
|
+
|
9
|
+
def expand_urls(input, url='')
|
10
|
+
url ||= '/'
|
11
|
+
input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/(?!\/)[^\"'>]*)/ do
|
12
|
+
$1+url+$3
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Removes trailing forward slash from a string for easily appending url segments
|
17
|
+
|
18
|
+
def strip_slash(input)
|
19
|
+
input.sub(/\/\s*$/, '')
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns a url without the protocol (http://)
|
23
|
+
|
24
|
+
def shorthand_url(input)
|
25
|
+
input.gsub /(https?:\/\/)(\S+)/ do
|
26
|
+
$2
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Liquid::Template.register_filter Octopress::UrlFilters
|
34
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Octopress
|
2
|
+
module Formatters
|
3
|
+
class BaseFormatter < Logger::Formatter
|
4
|
+
|
5
|
+
COLORS = {
|
6
|
+
"ERROR" => "red",
|
7
|
+
"WARN" => "yellow",
|
8
|
+
"INFO" => "green",
|
9
|
+
"DEBUG" => "white"
|
10
|
+
}
|
11
|
+
|
12
|
+
def call(severity, timestamp, progname, msg)
|
13
|
+
(progname || msg).to_s.send(COLORS[severity]) + "\n"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,196 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Jekyll category page generator.
|
4
|
+
# http://recursive-design.com/projects/jekyll-plugins/
|
5
|
+
#
|
6
|
+
# Version: 0.1.4 (201101061053)
|
7
|
+
#
|
8
|
+
# Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
|
9
|
+
# Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
10
|
+
#
|
11
|
+
# A generator that creates category pages for jekyll sites.
|
12
|
+
#
|
13
|
+
# Included filters :
|
14
|
+
# - category_links: Outputs the list of categories as comma-separated <a> links.
|
15
|
+
# - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling.
|
16
|
+
#
|
17
|
+
# Available _config.yml settings :
|
18
|
+
# - category_dir: The subfolder to build category pages in (default is 'categories').
|
19
|
+
# - category_title_prefix: The string used before the category name in the page title (default is
|
20
|
+
# 'Category: ').
|
21
|
+
|
22
|
+
require 'stringex'
|
23
|
+
|
24
|
+
module Jekyll
|
25
|
+
|
26
|
+
# The CategoryIndex class creates a single category page for the specified category.
|
27
|
+
class CategoryIndex < Page
|
28
|
+
|
29
|
+
# Initializes a new CategoryIndex.
|
30
|
+
#
|
31
|
+
# +base+ is the String path to the <source>.
|
32
|
+
# +category_dir+ is the String path between <source> and the category folder.
|
33
|
+
# +category+ is the category currently being processed.
|
34
|
+
def initialize(site, base, category_dir, category, title)
|
35
|
+
@site = site
|
36
|
+
@base = base
|
37
|
+
@dir = category_dir
|
38
|
+
@name = 'index.html'
|
39
|
+
self.process(@name)
|
40
|
+
# Read the YAML data from the layout page.
|
41
|
+
return unless self.read_yaml(File.join(base, '_layouts'), 'category-index.html')
|
42
|
+
self.data['category'] = category
|
43
|
+
# Set the title for this page.
|
44
|
+
title_prefix = site.config['category_title_prefix'] || 'Category: '
|
45
|
+
self.data['title'] = "#{title_prefix}#{title}"
|
46
|
+
# Set the meta-description for this page.
|
47
|
+
meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: '
|
48
|
+
self.data['description'] = "#{meta_description_prefix}#{title}"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
# The CategoryFeed class creates an Atom feed for the specified category.
|
54
|
+
class CategoryFeed < Page
|
55
|
+
|
56
|
+
# Initializes a new CategoryFeed.
|
57
|
+
#
|
58
|
+
# +base+ is the String path to the <source>.
|
59
|
+
# +category_dir+ is the String path between <source> and the category folder.
|
60
|
+
# +category+ is the category currently being processed.
|
61
|
+
def initialize(site, base, category_dir, category, title)
|
62
|
+
@site = site
|
63
|
+
@base = base
|
64
|
+
@dir = category_dir
|
65
|
+
@name = 'atom.xml'
|
66
|
+
self.process(@name)
|
67
|
+
# Read the YAML data from the layout page.
|
68
|
+
self.read_yaml(File.join(base, '_includes/custom'), 'category-feed.xml')
|
69
|
+
self.data['category'] = category
|
70
|
+
# Set the title for this page.
|
71
|
+
title_prefix = site.config['category_title_prefix'] || 'Category: '
|
72
|
+
self.data['title'] = "#{title_prefix}#{title}"
|
73
|
+
# Set the meta-description for this page.
|
74
|
+
meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: '
|
75
|
+
self.data['description'] = "#{meta_description_prefix}#{title}"
|
76
|
+
|
77
|
+
# Set the correct feed URL.
|
78
|
+
self.data['feed_url'] = "#{category_dir}/#{name}"
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
# The Site class is a built-in Jekyll class with access to global site config information.
|
84
|
+
class Site
|
85
|
+
|
86
|
+
# Creates an instance of CategoryIndex for each category page, renders it, and
|
87
|
+
# writes the output to a file.
|
88
|
+
#
|
89
|
+
# +category_dir+ is the String path to the category folder.
|
90
|
+
# +category+ is the category currently being processed.
|
91
|
+
def write_category_index(category_dir, category, title)
|
92
|
+
index = CategoryIndex.new(self, self.source, category_dir, category, title)
|
93
|
+
index.render(self.layouts, site_payload)
|
94
|
+
index.write(self.dest)
|
95
|
+
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
96
|
+
self.pages << index
|
97
|
+
|
98
|
+
# Create an Atom-feed for each index.
|
99
|
+
if self.config['category_feeds']
|
100
|
+
feed = CategoryFeed.new(self, self.source, category_dir, category, title)
|
101
|
+
feed.render(self.layouts, site_payload)
|
102
|
+
feed.write(self.dest)
|
103
|
+
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
104
|
+
self.pages << feed
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
# Loops through the list of category pages and processes each one.
|
110
|
+
def write_category_indexes
|
111
|
+
return unless self.layouts.key? 'category_index'
|
112
|
+
dir = self.config['category_dir']
|
113
|
+
self.categories.keys.each do |category|
|
114
|
+
if category =~ /(.+)\[(.+)\]/
|
115
|
+
slug = $1.strip
|
116
|
+
title = $2.strip
|
117
|
+
else
|
118
|
+
slug = title = category
|
119
|
+
end
|
120
|
+
cat_dir = slug.to_url
|
121
|
+
cat_dir = File.join(dir, cat_dir) unless dir.nil? or dir.empty?
|
122
|
+
self.write_category_index(cat_dir, category, title)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
# Jekyll hook - the generate method is called by jekyll, and generates all of the category pages.
|
129
|
+
class GenerateCategories < Generator
|
130
|
+
safe true
|
131
|
+
priority :low
|
132
|
+
|
133
|
+
def generate(site)
|
134
|
+
site.write_category_indexes
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
# Adds some extra filters used during the category creation process.
|
141
|
+
module Filters
|
142
|
+
|
143
|
+
# Outputs a list of categories as comma-separated <a> links. This is used
|
144
|
+
# to output the category list for each post on a category page.
|
145
|
+
#
|
146
|
+
# +categories+ is the list of categories to format.
|
147
|
+
#
|
148
|
+
# Returns string
|
149
|
+
#
|
150
|
+
def category_links(categories)
|
151
|
+
categories = categories.sort!.map { |c| category_link c }
|
152
|
+
case categories.length
|
153
|
+
when 0
|
154
|
+
""
|
155
|
+
when 1
|
156
|
+
categories[0].to_s
|
157
|
+
else
|
158
|
+
"#{categories[0...-1].join(', ')}, #{categories[-1]}"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
# Outputs a single category as an <a> link.
|
163
|
+
#
|
164
|
+
# +category+ is a category string to format as an <a> link
|
165
|
+
#
|
166
|
+
# Returns string
|
167
|
+
#
|
168
|
+
def category_link(category)
|
169
|
+
if category =~ /(.+)\[(.+)\]/
|
170
|
+
slug = $1.strip
|
171
|
+
title = $2.strip
|
172
|
+
else
|
173
|
+
slug = title = category
|
174
|
+
end
|
175
|
+
dir = @context.registers[:site].config['category_dir']
|
176
|
+
url = slug.to_url
|
177
|
+
url = "#{dir}/#{url}" unless dir.nil? or dir.empty?
|
178
|
+
"<a class='category' href='/#{url}/'>#{title}</a>"
|
179
|
+
end
|
180
|
+
|
181
|
+
# Outputs the post.date as formatted html, with hooks for CSS styling.
|
182
|
+
#
|
183
|
+
# +date+ is the date object to format as HTML.
|
184
|
+
#
|
185
|
+
# Returns string
|
186
|
+
def date_to_html_string(date)
|
187
|
+
string = <<HTML.strip
|
188
|
+
<span class='month'>#{date.strftime('%b').upcase}</span>
|
189
|
+
#{date.strftime('<span class="day">%d</span>')}
|
190
|
+
#{date.strftime('<span class="year">%Y</span>')}
|
191
|
+
HTML
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|