diff --git a/.themes/classic/source/_includes/sidebar.html b/.themes/classic/source/_includes/sidebar.html index f2e0734..2e738c7 100644 --- a/.themes/classic/source/_includes/sidebar.html +++ b/.themes/classic/source/_includes/sidebar.html @@ -1,4 +1 @@ -{% include asides/recent_posts.html %} -{% include asides/twitter.html %} -{% include asides/delicious.html %} -{% include asides/pinboard.html %} +{% include_array asides %} diff --git a/.themes/classic/source/_layouts/default.html b/.themes/classic/source/_layouts/default.html index f633343..5714757 100644 --- a/.themes/classic/source/_layouts/default.html +++ b/.themes/classic/source/_layouts/default.html @@ -6,9 +6,6 @@
{{ content | expand_urls: root_url | backtick_codeblock | smart_quotes }} - {% unless page.sidebar == false %} - - {% endunless %}
diff --git a/.themes/classic/source/_layouts/page.html b/.themes/classic/source/_layouts/page.html index 34cb343..6710f8b 100644 --- a/.themes/classic/source/_layouts/page.html +++ b/.themes/classic/source/_layouts/page.html @@ -29,3 +29,12 @@ layout: default {% endif %} +{% unless page.sidebar == false %} + +{% endunless %} diff --git a/.themes/classic/source/_layouts/post.html b/.themes/classic/source/_layouts/post.html index 0e1004f..78557c0 100644 --- a/.themes/classic/source/_layouts/post.html +++ b/.themes/classic/source/_layouts/post.html @@ -24,3 +24,12 @@ single: true {% endif %} +{% unless page.sidebar == false %} + +{% endunless %} diff --git a/.themes/classic/source/index.html b/.themes/classic/source/index.html index 4719cd1..7f4c0e1 100644 --- a/.themes/classic/source/index.html +++ b/.themes/classic/source/index.html @@ -1,6 +1,5 @@ --- layout: default -meta: false footer: false ---
@@ -36,3 +35,10 @@ footer: false {% endif %}
+ diff --git a/_config.yml b/_config.yml index 9826ec1..5452d12 100644 --- a/_config.yml +++ b/_config.yml @@ -34,6 +34,16 @@ pygments: false paginate: 10 # Posts per page on the blog index recent_posts: 5 # Posts in the sidebar Recent Posts section +# list each of the sidebar modules you want to include, in the order you want them to appear. +# To add custom asides, create files in /source/_includes/asides/custom/ and add them to the list like 'asides/custom/custom_aside_name.html' +default_asides: [asides/recent_posts.html, asides/twitter.html, asides/delicious.html, asides/pinboard.html] + +# Each layout uses the default asides, but they can have their own asides instead. Simply uncomment the lines below +# and add an array with the asides you want to use. +# blog_index_asides: +# post_asides: +# page_asides: + # ----------------------- # # 3rd Party Settings # # ----------------------- # diff --git a/plugins/include_array.rb b/plugins/include_array.rb new file mode 100644 index 0000000..000040f --- /dev/null +++ b/plugins/include_array.rb @@ -0,0 +1,58 @@ +# Title: Include Array Tag for Jekyll +# Author: Jason Woodward http://www.woodwardjd.com +# Description: Import files on your filesystem as specified in a configuration variable in _config.yml. Mostly cribbed from Jekyll's include tag. +# Syntax: {% include_array variable_name_from_config.yml %} +# +# Example 1: +# {% include_array asides %} +# +# _config.yml snippet: +# asides: [asides/twitter.html, asides/custom/my_picture.html] +# +module Jekyll + + class IncludeArrayTag < Liquid::Tag + Syntax = /(#{Liquid::QuotedFragment}+)/ + def initialize(tag_name, markup, tokens) + if markup =~ Syntax + @array_name = $1 + else + raise SyntaxError.new("Error in tag 'include_array' - Valid syntax: include_array [array from _config.yml]") + end + + super + end + + def render(context) + includes_dir = File.join(context.registers[:site].source, '_includes') + + if File.symlink?(includes_dir) + return "Includes directory '#{includes_dir}' cannot be a symlink" + end + + rtn = '' + (context.environments.first['site'][@array_name] || []).each do |file| + if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./ + rtn = rtn + "Include file '#{file}' contains invalid characters or sequences" + end + + Dir.chdir(includes_dir) do + choices = Dir['**/*'].reject { |x| File.symlink?(x) } + if choices.include?(file) + source = File.read(file) + partial = Liquid::Template.parse(source) + context.stack do + rtn = rtn + partial.render(context) + end + else + rtn = rtn + "Included file '#{file}' not found in _includes directory" + end + end + end + rtn + end + end + +end + +Liquid::Template.register_tag('include_array', Jekyll::IncludeArrayTag)