Browse Source

Merge branch 'master' of github.com:imathis/octopress

Conflicts:
	plugins/category_generator.rb
unreleased_contents
Leonardo Saraiva 12 years ago
parent
commit
2fe9da91f5
  1. 2
      .rbenv-version
  2. 64
      .themes/classic/sass/partials/_syntax.scss
  3. 2
      .themes/classic/source/_includes/head.html
  4. 34
      .themes/classic/source/javascripts/ender.js
  5. 23
      .themes/classic/source/javascripts/github.js
  6. 4525
      .themes/classic/source/javascripts/libs/ender.js
  7. 1
      .themes/classic/source/javascripts/octopress.js
  8. 4
      .themes/classic/source/javascripts/pinboard.js
  9. 8
      .themes/classic/source/javascripts/twitter.js
  10. 7
      .themes/classic/source/robots.txt
  11. 5
      .travis.yml
  12. 12
      Gemfile
  13. 45
      Gemfile.lock
  14. 4
      README.markdown
  15. 22
      Rakefile
  16. 6
      config.ru
  17. 2
      plugins/backtick_code_block.rb
  18. 13
      plugins/blockquote.rb
  19. 28
      plugins/category_generator.rb
  20. 8
      plugins/code_block.rb
  21. 2
      plugins/date.rb
  22. 4
      plugins/gist_tag.rb
  23. 2
      plugins/jsfiddle.rb
  24. 4
      plugins/octopress_filters.rb
  25. 2
      plugins/preview_unpublished.rb
  26. 6
      plugins/sitemap_generator.rb
  27. 25
      plugins/video_tag.rb

2
.rbenv-version

@ -1 +1 @@
1.9.2-p290 1.9.3-p194

64
.themes/classic/sass/partials/_syntax.scss

@ -1,44 +1,52 @@
.highlight, html .gist .gist-file .gist-syntax .gist-highlight { .highlight, html .gist .gist-file .gist-syntax .gist-highlight {
table td.code { width: 100%; } table td.code { width: 100%; }
.line-numbers {
text-align: right;
font-size: 13px;
line-height: 1.45em;
@if $solarized == light {
background: lighten($base03, 1) $noise-bg !important;
border-right: 1px solid darken($base02, 2) !important;
@include box-shadow(lighten($base03, 2) -1px 0 inset);
text-shadow: lighten($base02, 2) 0 -1px;
} @else {
background: $base02 $noise-bg !important;
border-right: 1px solid darken($base03, 2) !important;
@include box-shadow(lighten($base02, 2) -1px 0 inset);
text-shadow: darken($base02, 10) 0 -1px;
}
span { color: $base01 !important; }
padding: .8em !important;
@include border-radius(0);
}
border: 1px solid $pre-border !important; border: 1px solid $pre-border !important;
} }
.highlight .line-numbers, html .gist .gist-file .gist-syntax .highlight .line_numbers {
text-align: right;
font-size: 13px;
line-height: 1.45em;
@if $solarized == light {
background: lighten($base03, 1) $noise-bg !important;
border-right: 1px solid darken($base02, 2) !important;
@include box-shadow(lighten($base03, 2) -1px 0 inset);
text-shadow: lighten($base02, 2) 0 -1px;
} @else {
background: $base02 $noise-bg !important;
border-right: 1px solid darken($base03, 2) !important;
@include box-shadow(lighten($base02, 2) -1px 0 inset);
text-shadow: darken($base02, 10) 0 -1px;
}
span { color: $base01 !important; }
padding: .8em !important;
@include border-radius(0);
}
figure.code, .gist-file, pre { figure.code, .gist-file, pre {
@include box-shadow(rgba(#000, .06) 0 0 10px); @include box-shadow(rgba(#000, .06) 0 0 10px);
.highlight pre { @include box-shadow(none); } .highlight pre { @include box-shadow(none); }
} }
.gist .highlight, figure.code .highlight {
@include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
}
html .gist .gist-file { html .gist .gist-file {
margin-bottom: 1.8em; margin-bottom: 1.8em;
position: relative; position: relative;
border: none; border: none;
padding-top: image-height("code_bg.png") !important; padding-top: image-height("code_bg.png") !important;
.highlight {
margin-bottom: 0;
}
.gist-syntax { .gist-syntax {
border-bottom: 0 !important; border-bottom: 0 !important;
background: none !important; background: none !important;
.gist-highlight{ .gist-highlight {
background: $base03 !important; background: $base03 !important;
pre { }
@extend .pre-code; .highlight pre {
} @extend .pre-code;
padding: 0;
} }
} }
.gist-meta { .gist-meta {
@ -107,12 +115,11 @@ p, li {
} }
.pre-code { .pre-code {
@include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
font-family: $mono !important; font-family: $mono !important;
overflow: scroll; overflow: scroll;
overflow-y: hidden; overflow-y: hidden;
display: block; display: block;
padding: .8em !important; padding: .8em;
overflow-x: auto; overflow-x: auto;
line-height: 1.45em; line-height: 1.45em;
background: $base03 $noise-bg !important; background: $base03 $noise-bg !important;
@ -187,7 +194,7 @@ p, li {
} }
.highlight, .gist-highlight { .highlight, .gist-highlight {
pre { background: none; @include border-radius(none); border: none; padding: 0; margin-bottom: 0; } pre { background: none; @include border-radius(0px); border: none; padding: 0; margin-bottom: 0; }
margin-bottom: 1.8em; margin-bottom: 1.8em;
background: $base03; background: $base03;
overflow-y: hidden; overflow-y: hidden;
@ -206,7 +213,9 @@ pre, .highlight, .gist-highlight {
&::-webkit-scrollbar-thumb:horizontal { background: $solar-scroll-thumb; -webkit-border-radius: 4px; border-radius: 4px } &::-webkit-scrollbar-thumb:horizontal { background: $solar-scroll-thumb; -webkit-border-radius: 4px; border-radius: 4px }
} }
.highlight code { @extend .pre-code; background: #000;} .highlight code {
@extend .pre-code; background: #000;
}
figure.code { figure.code {
background: none; background: none;
padding: 0; padding: 0;
@ -250,4 +259,3 @@ figure.code {
text-shadow: #cbcccc 0 1px 0; text-shadow: #cbcccc 0 1px 0;
padding-left: 3em; padding-left: 3em;
} }

2
.themes/classic/source/_includes/head.html

@ -16,7 +16,7 @@
<meta name="MobileOptimized" content="320"> <meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
{% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' }}{% endif %}{% endcapture %} {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{% if page.url contains site.category_dir %}/{% endif %}{{ page.url | remove:'index.html' }}{% endif %}{% endcapture %}
<link rel="canonical" href="{{ canonical }}"> <link rel="canonical" href="{{ canonical }}">
<link href="{{ root_url }}/favicon.png" rel="icon"> <link href="{{ root_url }}/favicon.png" rel="icon">
<link href="{{ root_url }}/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css"> <link href="{{ root_url }}/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">

34
.themes/classic/source/javascripts/ender.js

File diff suppressed because one or more lines are too long

23
.themes/classic/source/javascripts/github.js

@ -1,33 +1,28 @@
var github = (function(){ var github = (function(){
function escapeHtml(str) {
return $('<div/>').text(str).html();
}
function render(target, repos){ function render(target, repos){
var i = 0, fragment = '', t = $(target)[0]; var i = 0, fragment = '', t = $(target)[0];
for(i = 0; i < repos.length; i++) { for(i = 0; i < repos.length; i++) {
fragment += '<li><a href="'+repos[i].url+'">'+repos[i].name+'</a><p>'+repos[i].description+'</p></li>'; fragment += '<li><a href="'+repos[i].html_url+'">'+repos[i].name+'</a><p>'+escapeHtml(repos[i].description||'')+'</p></li>';
} }
t.innerHTML = fragment; t.innerHTML = fragment;
} }
return { return {
showRepos: function(options){ showRepos: function(options){
$.ajax({ $.ajax({
url: "http://github.com/api/v2/json/repos/show/"+options.user+"?callback=?" url: "https://api.github.com/users/"+options.user+"/repos?sort=pushed&callback=?"
, type: 'jsonp' , type: 'jsonp'
, error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); } , error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); }
, success: function(data) { , success: function(data) {
var repos = []; var repos = [];
if (!data || !data.repositories) { return; } if (!data || !data.data) { return; }
for (var i = 0; i < data.repositories.length; i++) { for (var i = 0; i < data.data.length; i++) {
if (options.skip_forks && data.repositories[i].fork) { continue; } if (options.skip_forks && data.data[i].fork) { continue; }
repos.push(data.repositories[i]); repos.push(data.data[i]);
} }
repos.sort(function(a, b) {
var aDate = new Date(a.pushed_at).valueOf(),
bDate = new Date(b.pushed_at).valueOf();
if (aDate === bDate) { return 0; }
return aDate > bDate ? -1 : 1;
});
if (options.count) { repos.splice(options.count); } if (options.count) { repos.splice(options.count); }
render(options.target, repos); render(options.target, repos);
} }

4525
.themes/classic/source/javascripts/libs/ender.js

File diff suppressed because it is too large

1
.themes/classic/source/javascripts/octopress.js

@ -11,6 +11,7 @@ function getNav() {
mobileNav.children('select').bind('change', function(event) { mobileNav.children('select').bind('change', function(event) {
if (event.target.value) { window.location.href = event.target.value; } if (event.target.value) { window.location.href = event.target.value; }
}); });
mobileNav.children('select').val('');
} }
function addSidebarToggler() { function addSidebarToggler() {

4
.themes/classic/source/javascripts/pinboard.js

@ -44,7 +44,7 @@ function Pinboard_Linkroll() {
if (it.t.length > 0) { if (it.t.length > 0) {
for (var i = 0; i < it.t.length; i++) { for (var i = 0; i < it.t.length; i++) {
var tag = it.t[i]; var tag = it.t[i];
str += " <a class=\"pin-tag\" href=\"http://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag).replace(/^\s+|\s+$/g, '') + "</a> "; str += " <a class=\"pin-tag\" href=\"https://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag).replace(/^\s+|\s+$/g, '') + "</a> ";
} }
} }
str += "</p></li>\n"; str += "</p></li>\n";
@ -52,5 +52,5 @@ function Pinboard_Linkroll() {
} }
} }
Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); Pinboard_Linkroll.prototype = new Pinboard_Linkroll();
pinboardNS_fetch_script("http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count); pinboardNS_fetch_script("https://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count);

8
.themes/classic/source/javascripts/twitter.js

@ -42,8 +42,8 @@ function prettyDate(time) {
function linkifyTweet(text, url) { function linkifyTweet(text, url) {
// Linkify urls, usernames, hashtags // Linkify urls, usernames, hashtags
text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>') text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>')
.replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>') .replace(/(^|\W)@(\w+)/g, '$1<a href="https://twitter.com/$2">@$2</a>')
.replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>'); .replace(/(^|\W)#(\w+)/g, '$1<a href="https://search.twitter.com/search?q=%23$2">#$2</a>');
// Use twitter's api to replace t.co shortened urls with expanded ones. // Use twitter's api to replace t.co shortened urls with expanded ones.
for (var u in url) { for (var u in url) {
@ -62,7 +62,7 @@ function showTwitterFeed(tweets, twitter_user) {
content = ''; content = '';
for (var t in tweets) { for (var t in tweets) {
content += '<li>'+'<p>'+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a>'+linkifyTweet(tweets[t].text.replace(/\n/g, '<br>'), tweets[t].entities.urls)+'</p>'+'</li>'; content += '<li>'+'<p>'+'<a href="https://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a>'+linkifyTweet(tweets[t].text.replace(/\n/g, '<br>'), tweets[t].entities.urls)+'</p>'+'</li>';
} }
timeline.innerHTML = content; timeline.innerHTML = content;
} }
@ -70,7 +70,7 @@ function showTwitterFeed(tweets, twitter_user) {
function getTwitterFeed(user, count, replies) { function getTwitterFeed(user, count, replies) {
count = parseInt(count, 10); count = parseInt(count, 10);
$.ajax({ $.ajax({
url: "http://api.twitter.com/1/statuses/user_timeline/" + user + ".json?trim_user=true&count=" + (count + 20) + "&include_entities=1&exclude_replies=" + (replies ? "0" : "1") + "&callback=?" url: "https://api.twitter.com/1/statuses/user_timeline/" + user + ".json?trim_user=true&count=" + (count + 20) + "&include_entities=1&exclude_replies=" + (replies ? "0" : "1") + "&callback=?"
, type: 'jsonp' , type: 'jsonp'
, error: function (err) { $('#tweets li.loading').addClass('error').text("Twitter's busted"); } , error: function (err) { $('#tweets li.loading').addClass('error').text("Twitter's busted"); }
, success: function(data) { showTwitterFeed(data.slice(0, count), user); } , success: function(data) { showTwitterFeed(data.slice(0, count), user); }

7
.themes/classic/source/robots.txt

@ -0,0 +1,7 @@
---
layout: nil
---
User-agent: *
Disallow:
Sitemap: {{ site.url }}/sitemap.xml

5
.travis.yml

@ -0,0 +1,5 @@
language: ruby
rvm:
- 1.9.3
- 1.9.2
script: bundle exec rake install; bundle exec rake generate

12
Gemfile

@ -1,18 +1,18 @@
source "http://rubygems.org" source "http://rubygems.org"
group :development do group :development do
gem 'rake', '~> 0.9.2' gem 'rake', '~> 0.9'
gem 'rack', '~> 1.4.1' gem 'rack', '~> 1.4.1'
gem 'jekyll', '~> 0.11.2' gem 'jekyll', '~> 0.12'
gem 'rdiscount', '~> 1.6.8' gem 'rdiscount', '~> 1.6.8'
gem 'pygments.rb', '~> 0.2.12' gem 'pygments.rb', '~> 0.3.4'
gem 'RedCloth', '~> 4.2.9' gem 'RedCloth', '~> 4.2.9'
gem 'haml', '~> 3.1.6' gem 'haml', '~> 3.1.7'
gem 'compass', '~> 0.12.1' gem 'compass', '~> 0.12.2'
gem 'rubypants', '~> 0.2.0' gem 'rubypants', '~> 0.2.0'
gem 'rb-fsevent', '~> 0.9' gem 'rb-fsevent', '~> 0.9'
gem 'stringex', '~> 1.4.0' gem 'stringex', '~> 1.4.0'
gem 'liquid', '~> 2.3.0' gem 'liquid', '~> 2.3.0'
end end
gem 'sinatra', '~> 1.3.2' gem 'sinatra', '~> 1.3.3'

45
Gemfile.lock

@ -2,68 +2,63 @@ GEM
remote: http://rubygems.org/ remote: http://rubygems.org/
specs: specs:
RedCloth (4.2.9) RedCloth (4.2.9)
albino (1.3.3)
posix-spawn (>= 0.3.6)
blankslate (2.1.2.4)
chunky_png (1.2.5) chunky_png (1.2.5)
classifier (1.3.3) classifier (1.3.3)
fast-stemmer (>= 1.0.0) fast-stemmer (>= 1.0.0)
compass (0.12.1) compass (0.12.2)
chunky_png (~> 1.2) chunky_png (~> 1.2)
fssm (>= 0.2.7) fssm (>= 0.2.7)
sass (~> 3.1) sass (~> 3.1)
directory_watcher (1.4.1) directory_watcher (1.4.1)
fast-stemmer (1.0.1) fast-stemmer (1.0.1)
ffi (1.0.11)
fssm (0.2.9) fssm (0.2.9)
haml (3.1.6) haml (3.1.7)
jekyll (0.11.2) jekyll (0.12.0)
albino (~> 1.3)
classifier (~> 1.3) classifier (~> 1.3)
directory_watcher (~> 1.1) directory_watcher (~> 1.1)
kramdown (~> 0.13) kramdown (~> 0.13.4)
liquid (~> 2.3) liquid (~> 2.3)
maruku (~> 0.5) maruku (~> 0.5)
kramdown (0.13.6) pygments.rb (~> 0.3.2)
kramdown (0.13.8)
liquid (2.3.0) liquid (2.3.0)
maruku (0.6.0) maruku (0.6.1)
syntax (>= 1.0.0) syntax (>= 1.0.0)
posix-spawn (0.3.6) posix-spawn (0.3.6)
pygments.rb (0.2.12) pygments.rb (0.3.4)
rubypython (~> 0.5.3) posix-spawn (~> 0.3.6)
yajl-ruby (~> 1.1.0)
rack (1.4.1) rack (1.4.1)
rack-protection (1.2.0) rack-protection (1.3.2)
rack rack
rake (0.9.2.2) rake (0.9.2.2)
rb-fsevent (0.9.1) rb-fsevent (0.9.1)
rdiscount (1.6.8) rdiscount (1.6.8)
rubypants (0.2.0) rubypants (0.2.0)
rubypython (0.5.3) sass (3.1.20)
blankslate (>= 2.1.2.3) sinatra (1.3.3)
ffi (~> 1.0.7)
sass (3.1.18)
sinatra (1.3.2)
rack (~> 1.3, >= 1.3.6) rack (~> 1.3, >= 1.3.6)
rack-protection (~> 1.2) rack-protection (~> 1.2)
tilt (~> 1.3, >= 1.3.3) tilt (~> 1.3, >= 1.3.3)
stringex (1.4.0) stringex (1.4.0)
syntax (1.0.0) syntax (1.0.0)
tilt (1.3.3) tilt (1.3.3)
yajl-ruby (1.1.0)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
RedCloth (~> 4.2.9) RedCloth (~> 4.2.9)
compass (~> 0.12.1) compass (~> 0.12.2)
haml (~> 3.1.6) haml (~> 3.1.7)
jekyll (~> 0.11.2) jekyll (~> 0.12)
liquid (~> 2.3.0) liquid (~> 2.3.0)
pygments.rb (~> 0.2.12) pygments.rb (~> 0.3.4)
rack (~> 1.4.1) rack (~> 1.4.1)
rake (~> 0.9.2) rake (~> 0.9)
rb-fsevent (~> 0.9) rb-fsevent (~> 0.9)
rdiscount (~> 1.6.8) rdiscount (~> 1.6.8)
rubypants (~> 0.2.0) rubypants (~> 0.2.0)
sinatra (~> 1.3.2) sinatra (~> 1.3.3)
stringex (~> 1.4.0) stringex (~> 1.4.0)

4
README.markdown

@ -16,13 +16,15 @@ Check out [Octopress.org](http://octopress.org/docs) for guides and documentatio
## Contributing ## Contributing
[![Build Status](https://travis-ci.org/imathis/octopress.png?branch=master)](https://travis-ci.org/imathis/octopress)
We love to see people contributing to Octopress, whether it's a bug report, feature suggestion or a pull request. At the moment, we try to keep the core slick and lean, focusing on basic blogging needs, so some of your suggestions might not find their way into Octopress. For those ideas, we started a [list of 3rd party plug-ins](https://github.com/imathis/octopress/wiki/3rd-party-plugins), where you can link your own Octopress plug-in repositories. For the future, we're thinking about ways to easier add them them into our main releases. We love to see people contributing to Octopress, whether it's a bug report, feature suggestion or a pull request. At the moment, we try to keep the core slick and lean, focusing on basic blogging needs, so some of your suggestions might not find their way into Octopress. For those ideas, we started a [list of 3rd party plug-ins](https://github.com/imathis/octopress/wiki/3rd-party-plugins), where you can link your own Octopress plug-in repositories. For the future, we're thinking about ways to easier add them them into our main releases.
## License ## License
(The MIT License) (The MIT License)
Copyright © 2009-2011 Brandon Mathis Copyright © 2009-2013 Brandon Mathis
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ‘Software’), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ‘Software’), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

22
Rakefile

@ -7,7 +7,8 @@ require "stringex"
ssh_user = "user@domain.com" ssh_user = "user@domain.com"
ssh_port = "22" ssh_port = "22"
document_root = "~/website.com/" document_root = "~/website.com/"
rsync_delete = true rsync_delete = false
rsync_args = "" # Any extra arguments to pass to rsync
deploy_default = "rsync" deploy_default = "rsync"
# This will be configured for you when you run config_deploy # This will be configured for you when you run config_deploy
@ -91,10 +92,13 @@ end
# usage rake new_post[my-new-post] or rake new_post['my new post'] or rake new_post (defaults to "new-post") # usage rake new_post[my-new-post] or rake new_post['my new post'] or rake new_post (defaults to "new-post")
desc "Begin a new post in #{source_dir}/#{posts_dir}" desc "Begin a new post in #{source_dir}/#{posts_dir}"
task :new_post, :title do |t, args| task :new_post, :title do |t, args|
if args.title
title = args.title
else
title = get_stdin("Enter a title for your post: ")
end
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir) raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
mkdir_p "#{source_dir}/#{posts_dir}" mkdir_p "#{source_dir}/#{posts_dir}"
args.with_defaults(:title => 'new-post')
title = args.title
filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}" filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"
if File.exist?(filename) if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n' abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
@ -151,7 +155,7 @@ task :new_page, :filename do |t, args|
end end
# usage rake isolate[my-post] # usage rake isolate[my-post]
desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much quicker." desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much more quickly."
task :isolate, :filename do |t, args| task :isolate, :filename do |t, args|
stash_dir = "#{source_dir}/#{stash_dir}" stash_dir = "#{source_dir}/#{stash_dir}"
FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir) FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir)
@ -237,7 +241,7 @@ task :rsync do
exclude = "--exclude-from '#{File.expand_path('./rsync-exclude')}'" exclude = "--exclude-from '#{File.expand_path('./rsync-exclude')}'"
end end
puts "## Deploying website via Rsync" puts "## Deploying website via Rsync"
ok_failed system("rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}") ok_failed system("rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}")
end end
desc "deploy public directory to github pages" desc "deploy public directory to github pages"
@ -299,12 +303,14 @@ task :setup_github_pages, :repo do |t, args|
if args.repo if args.repo
repo_url = args.repo repo_url = args.repo
else else
repo_url = get_stdin("Enter the read/write url for your repository: ") puts "Enter the read/write url for your repository"
puts "(For example, 'git@github.com:your_username/your_username.github.com)"
repo_url = get_stdin("Repository url: ")
end end
user = repo_url.match(/:([^\/]+)/)[1] user = repo_url.match(/:([^\/]+)/)[1]
branch = (repo_url.match(/\/[\w-]+.github.com/).nil?) ? 'gh-pages' : 'master' branch = (repo_url.match(/\/[\w-]+\.github\.com/).nil?) ? 'gh-pages' : 'master'
project = (branch == 'gh-pages') ? repo_url.match(/\/([^\.]+)/)[1] : '' project = (branch == 'gh-pages') ? repo_url.match(/\/([^\.]+)/)[1] : ''
unless `git remote -v`.match(/origin.+?octopress.git/).nil? unless (`git remote -v` =~ /origin.+?octopress(?:\.git)?/).nil?
# If octopress is still the origin remote (from cloning) rename it to octopress # If octopress is still the origin remote (from cloning) rename it to octopress
system "git remote rename origin octopress" system "git remote rename origin octopress"
if branch == 'master' if branch == 'master'

6
config.ru

@ -4,7 +4,7 @@ require 'sinatra/base'
# The project root directory # The project root directory
$root = ::File.dirname(__FILE__) $root = ::File.dirname(__FILE__)
class SinatraStaticServer < Sinatra::Base class SinatraStaticServer < Sinatra::Base
get(/.+/) do get(/.+/) do
send_sinatra_file(request.path) {404} send_sinatra_file(request.path) {404}
@ -16,10 +16,10 @@ class SinatraStaticServer < Sinatra::Base
def send_sinatra_file(path, &missing_file_block) def send_sinatra_file(path, &missing_file_block)
file_path = File.join(File.dirname(__FILE__), 'public', path) file_path = File.join(File.dirname(__FILE__), 'public', path)
file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i
File.exist?(file_path) ? send_file(file_path) : missing_file_block.call File.exist?(file_path) ? send_file(file_path) : missing_file_block.call
end end
end end
run SinatraStaticServer run SinatraStaticServer

2
plugins/backtick_code_block.rb

@ -2,7 +2,7 @@ require './plugins/pygments_code'
module BacktickCodeBlock module BacktickCodeBlock
include HighlightCode include HighlightCode
AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+)\s*(.+)?/i AllOptions = /([^\s]+)\s+(.+?)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i
LangCaption = /([^\s]+)\s*(.+)?/i LangCaption = /([^\s]+)\s*(.+)?/i
def render_code_block(input) def render_code_block(input)
@options = nil @options = nil

13
plugins/blockquote.rb

@ -21,6 +21,7 @@ module Jekyll
class Blockquote < Liquid::Block class Blockquote < Liquid::Block
FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i
FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i
AuthorTitle = /([^,]+),([^,]+)/
Author = /(.+)/ Author = /(.+)/
def initialize(tag_name, markup, tokens) def initialize(tag_name, markup, tokens)
@ -30,17 +31,15 @@ module Jekyll
if markup =~ FullCiteWithTitle if markup =~ FullCiteWithTitle
@by = $1 @by = $1
@source = $2 + $3 @source = $2 + $3
@title = $4.titlecase @title = $4.titlecase.strip
elsif markup =~ FullCite elsif markup =~ FullCite
@by = $1 @by = $1
@source = $2 + $3 @source = $2 + $3
elsif markup =~ AuthorTitle
@by = $1
@title = $2.titlecase.strip
elsif markup =~ Author elsif markup =~ Author
if $1 =~ /([^,]+),([^,]+)/ @by = $1
@by = $1
@title = $2.titlecase
else
@by = $1
end
end end
super super
end end

28
plugins/category_generator.rb

@ -113,7 +113,17 @@ module Jekyll
# Throw an exception if the layout couldn't be found. # Throw an exception if the layout couldn't be found.
else else
throw "No 'category_index' layout found." raise <<-ERR
===============================================
Error for category_generator.rb plugin
-----------------------------------------------
No 'category_index.hmtl' in source/_layouts/
Perhaps you haven't installed a theme yet.
===============================================
ERR
end end
end end
@ -143,10 +153,7 @@ module Jekyll
# Returns string # Returns string
# #
def category_links(categories) def category_links(categories)
dir = @context.registers[:site].config['category_dir'] categories = categories.sort!.map { |c| category_link c }
categories = categories.sort!.map do |item|
"<a class='category' href='/#{dir}/#{item.to_url}/'>#{item}</a>"
end
case categories.length case categories.length
when 0 when 0
@ -158,6 +165,17 @@ module Jekyll
end end
end end
# Outputs a single category as an <a> link.
#
# +category+ is a category string to format as an <a> link
#
# Returns string
#
def category_link(category)
dir = @context.registers[:site].config['category_dir']
"<a class='category' href='/#{dir}/#{category.to_url}/'>#{category}</a>"
end
# Outputs the post.date as formatted html, with hooks for CSS styling. # Outputs the post.date as formatted html, with hooks for CSS styling.
# #
# +date+ is the date object to format as HTML. # +date+ is the date object to format as HTML.

8
plugins/code_block.rb

@ -49,8 +49,7 @@ module Jekyll
class CodeBlock < Liquid::Block class CodeBlock < Liquid::Block
include HighlightCode include HighlightCode
include TemplateWrapper include TemplateWrapper
CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i
CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i
Caption = /(\S[\S\s]*)/ Caption = /(\S[\S\s]*)/
def initialize(tag_name, markup, tokens) def initialize(tag_name, markup, tokens)
@title = nil @title = nil
@ -63,10 +62,7 @@ module Jekyll
end end
if markup =~ CaptionUrlTitle if markup =~ CaptionUrlTitle
@file = $1 @file = $1
@caption = "<figcaption><span>#{$1}</span><a href='#{$2 + $3}'>#{$4}</a></figcaption>" @caption = "<figcaption><span>#{$1}</span><a href='#{$2}'>#{$3 || 'link'}</a></figcaption>"
elsif markup =~ CaptionUrl
@file = $1
@caption = "<figcaption><span>#{$1}</span><a href='#{$2 + $3}'>link</a></figcaption>"
elsif markup =~ Caption elsif markup =~ Caption
@file = $1 @file = $1
@caption = "<figcaption><span>#{$1}</span></figcaption>\n" @caption = "<figcaption><span>#{$1}</span></figcaption>\n"

2
plugins/date.rb

@ -95,4 +95,4 @@ module Jekyll
self.data['updated_formatted'] = format_date(self.data['updated'], date_format) if self.data.has_key?('updated') self.data['updated_formatted'] = format_date(self.data['updated'], date_format) if self.data.has_key?('updated')
end end
end end
end end

4
plugins/gist_tag.rb

@ -40,7 +40,9 @@ module Jekyll
end end
def script_url_for(gist_id, filename) def script_url_for(gist_id, filename)
"https://gist.github.com/#{gist_id}.js?file=#{filename}" url = "https://gist.github.com/#{gist_id}.js"
url = "#{url}?file=#{filename}" unless filename.nil? or filename.empty?
url
end end
def get_gist_url_for(gist, file) def get_gist_url_for(gist, file)

2
plugins/jsfiddle.rb

@ -37,4 +37,4 @@ module Jekyll
end end
end end
Liquid::Template.register_tag('jsfiddle', Jekyll::JsFiddle) Liquid::Template.register_tag('jsfiddle', Jekyll::JsFiddle)

4
plugins/octopress_filters.rb

@ -24,12 +24,12 @@ module Jekyll
class ContentFilters < PostFilter class ContentFilters < PostFilter
include OctopressFilters include OctopressFilters
def pre_render(post) def pre_render(post)
if post.ext.match('html|textile|markdown|haml|slim|xml') if post.ext.match('html|textile|markdown|md|haml|slim|xml')
post.content = pre_filter(post.content) post.content = pre_filter(post.content)
end end
end end
def post_render(post) def post_render(post)
if post.ext.match('html|textile|markdown|haml|slim|xml') if post.ext.match('html|textile|markdown|md|haml|slim|xml')
post.content = post_filter(post.content) post.content = post_filter(post.content)
end end
end end

2
plugins/preview_unpublished.rb

@ -45,4 +45,4 @@ module Jekyll
self.posts = self.posts[-limit_posts, limit_posts] if limit_posts self.posts = self.posts[-limit_posts, limit_posts] if limit_posts
end end
end end
end end

6
plugins/sitemap_generator.rb

@ -1,6 +1,6 @@
# Sitemap.xml Generator is a Jekyll plugin that generates a sitemap.xml file by # Sitemap.xml Generator is a Jekyll plugin that generates a sitemap.xml file by
# traversing all of the available posts and pages. # traversing all of the available posts and pages.
# #
# How To Use: # How To Use:
# 1) Copy source file into your _plugins folder within your Jekyll project. # 1) Copy source file into your _plugins folder within your Jekyll project.
# 2) Change modify the url variable in _config.yml to reflect your domain name. # 2) Change modify the url variable in _config.yml to reflect your domain name.
@ -28,12 +28,12 @@
# system modified date of the page or post, system modified date of # system modified date of the page or post, system modified date of
# included layout, system modified date of included layout within that # included layout, system modified date of included layout within that
# layout, ... # layout, ...
# #
# Author: Michael Levin # Author: Michael Levin
# Site: http://www.kinnetica.com # Site: http://www.kinnetica.com
# Distributed Under A Creative Commons License # Distributed Under A Creative Commons License
# - http://creativecommons.org/licenses/by/3.0/ # - http://creativecommons.org/licenses/by/3.0/
# #
# Modified for Octopress by John W. Long # Modified for Octopress by John W. Long
# #
require 'rexml/document' require 'rexml/document'

25
plugins/video_tag.rb

@ -22,22 +22,31 @@ module Jekyll
@width = '' @width = ''
def initialize(tag_name, markup, tokens) def initialize(tag_name, markup, tokens)
if markup =~ /((https?:\/\/|\/)(\S+))(\s+(\d+)\s(\d+))?(\s+(https?:\/\/|\/)(\S+))?/i if markup =~ /(https?:\S+)(\s+(https?:\S+))?(\s+(https?:\S+))?(\s+(\d+)\s(\d+))?(\s+(https?:\S+))?/i
@video = $1 @video = [$1, $3, $5].compact
@width = $5 @width = $7
@height = $6 @height = $8
@poster = $7 @poster = $10
end end
super super
end end
def render(context) def render(context)
output = super output = super
if @video type = {
'mp4' => "type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'",
'ogv' => "type='video/ogg; codecs=theora, vorbis'",
'webm' => "type='video/webm; codecs=vp8, vorbis'"
}
if @video.size > 0
video = "<video width='#{@width}' height='#{@height}' preload='none' controls poster='#{@poster}'>" video = "<video width='#{@width}' height='#{@height}' preload='none' controls poster='#{@poster}'>"
video += "<source src='#{@video}' type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'/></video>" @video.each do |v|
t = v.match(/([^\.]+)$/)[1]
video += "<source src='#{v}' #{type[t]}>"
end
video += "</video>"
else else
"Error processing input, expected syntax: {% video url/to/video [width height] [url/to/poster] %}" "Error processing input, expected syntax: {% video url/to/video [url/to/video] [url/to/video] [width height] [url/to/poster] %}"
end end
end end
end end

Loading…
Cancel
Save