Merge branch 'master' of github.com:imathis/octopress
Conflicts: plugins/category_generator.rb
This commit is contained in:
commit
2fe9da91f5
@ -1 +1 @@
|
|||||||
1.9.2-p290
|
1.9.3-p194
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
File diff suppressed because one or more lines are too long
@ -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);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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() {
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
Normal file
7
.themes/classic/source/robots.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
layout: nil
|
||||||
|
---
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
|
|
||||||
|
Sitemap: {{ site.url }}/sitemap.xml
|
5
.travis.yml
Normal file
5
.travis.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
language: ruby
|
||||||
|
rvm:
|
||||||
|
- 1.9.3
|
||||||
|
- 1.9.2
|
||||||
|
script: bundle exec rake install; bundle exec rake generate
|
12
Gemfile
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
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)
|
||||||
|
@ -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
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'
|
||||||
|
@ -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,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
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -37,4 +37,4 @@ module Jekyll
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Liquid::Template.register_tag('jsfiddle', Jekyll::JsFiddle)
|
Liquid::Template.register_tag('jsfiddle', Jekyll::JsFiddle)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -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…
Reference in New Issue
Block a user