Created
January 22, 2011 02:03
-
-
Save stammy/790778 to your computer and use it in GitHub Desktop.
Goes in Rakefile for Jekyll for those wanting tag pages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Using multi-word tags support from http://tesoriere.com/2010/08/25/automatically-generated-tags-and-tag-clouds-with-jekyll--multiple-word-tags-allowed-/ | |
# If using with jekyll gem, remove bits loop and site.read_bits('') and add require 'rubygems' and require 'jekyll' | |
# Using full HTML instead of layout include to manually set different page title (tag, not tag_slug) and canonical URL in header | |
desc 'Build tags pages' | |
task :build_with_tags do | |
sh 'rm -rf _site' | |
puts "Generating tags..." | |
# use custom jekyll that includes archives pages, bits, multiviews, etc | |
# https://github.com/stammy/jekyll | |
require '/Users/Stammy/Projects/jekyll-stammy/lib/jekyll.rb' | |
include Jekyll::Filters | |
options = Jekyll.configuration({}) | |
site = Jekyll::Site.new(options) | |
site.read_posts('') | |
site.read_bits('') | |
# nuke old tags pages, recreate | |
FileUtils.rm_rf("tags") | |
FileUtils.mkdir_p("tags") | |
site.tags.sort.each do |tag, posts| | |
# generate slug-friendly tag | |
tag_slug = tag.gsub(' ','-').gsub('&', '&') | |
html = <<-HTML | |
--- | |
layout: nil | |
--- | |
<!doctype html> | |
<html lang="en-US"> | |
<head> | |
<meta "charset=utf-8"/> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | |
<title>#{tag} — PaulStamatiou.com</title> | |
{% if page.description %} | |
<meta content="{{ page.description }}" name="description"> | |
{% endif %} | |
<meta name="description" content="{{ site.description }}"/> | |
<link rel="canonical" href="{{ site.base_url }}/tags/#{tag_slug}"/> | |
<link rel="alternate" type="application/rss+xml" title="PaulStamatiou.com Feed" href="http://feeds.feedburner.com/paulstamatiou"/> | |
<link rel="stylesheet" href="/sass/screen.css" type="text/css"/> | |
</head> | |
<body> | |
{% include nav.html %} | |
<div id="site"> | |
<div id="post"> | |
{% include cta.html %} | |
<h1>Posts tagged as <span>#{tag}</span></h1> | |
<ul class="posts post_listing"> | |
{% for post in site.posts %} | |
{% for tag in post.tags %} | |
{% if tag == '#{tag}' %} | |
{% include post_listing.html %} | |
{% endif %} | |
{% endfor %} | |
{% endfor %} | |
{% for bit in site.bits %} | |
{% for tag in bit.tags %} | |
{% if tag == '#{tag}' %} | |
{% include bit_listing.html %} | |
{% endif %} | |
{% endfor %} | |
{% endfor %} | |
</ul> | |
<p class="larger">View more in the <a href="{{ site.base_url }}/archives" title="Archives - Paul Stamatiou">archives</a> or <a href="{{ site.base_url }}/search" title="Search">search</a>.</p> | |
</div> | |
</div> | |
{% include load_last_js.html %} | |
</body> | |
</html> | |
HTML | |
File.open("tags/#{tag_slug}.html", 'w+') do |file| | |
file.puts html | |
end | |
end | |
puts 'Generating tag cloud...' | |
html = '' | |
max_count = site.tags.map{|t,p| p.count}.max | |
site.tags.sort.each do |tag, posts| | |
s = posts.count | |
if s > 1 | |
font_size = ((24 - 10.0*(max_count-s)/max_count)*2).to_i/2.0 | |
tag_slug = tag.gsub(' ','-') | |
html << "<a href=\"{{ site.base_url }}/tags/#{tag_slug}\" title=\"Posts tagged #{tag}\" style=\"font-size: #{font_size}px; line-height:#{font_size}px\">#{tag}</a> " | |
end | |
end | |
File.open('_includes/tag_cloud.html', 'w+') do |file| | |
file.puts html | |
end | |
puts 'Done. Now running Jekyll and Compass..' | |
jekyll | |
end | |
def jekyll | |
sh 'jekyll' | |
sh 'compass compile' | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment