From 02dac280d0c74a0109e09b613b0a0714caebaf35 Mon Sep 17 00:00:00 2001
From: David Tchepak
Date: Thu, 2 Feb 2012 23:06:47 +1100
Subject: [PATCH 01/39] Extract category_link filter from category_generator.rb
plugin
Allows category_link to be used as a filter to display a link to
any category.
---
plugins/category_generator.rb | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/plugins/category_generator.rb b/plugins/category_generator.rb
index bb5fd32..77e06af 100644
--- a/plugins/category_generator.rb
+++ b/plugins/category_generator.rb
@@ -141,10 +141,7 @@ module Jekyll
# Returns string
#
def category_links(categories)
- dir = @context.registers[:site].config['category_dir']
- categories = categories.sort!.map do |item|
- "#{item}"
- end
+ categories = categories.sort!.map { |c| category_link c }
case categories.length
when 0
@@ -156,6 +153,17 @@ module Jekyll
end
end
+ # Outputs a single category as an link.
+ #
+ # +category+ is a category string to format as an link
+ #
+ # Returns string
+ #
+ def category_link(category)
+ dir = @context.registers[:site].config['category_dir']
+ "#{category}"
+ end
+
# Outputs the post.date as formatted html, with hooks for CSS styling.
#
# +date+ is the date object to format as HTML.
From 79aa4eb4f76619f0e5eef9e799cbc7e5d38f4465 Mon Sep 17 00:00:00 2001
From: Josep del Rio
Date: Thu, 19 Apr 2012 00:15:05 +0200
Subject: [PATCH 02/39] Added robots.txt, with sitemap link
---
.themes/classic/source/robots.txt | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 .themes/classic/source/robots.txt
diff --git a/.themes/classic/source/robots.txt b/.themes/classic/source/robots.txt
new file mode 100644
index 0000000..b18d5dc
--- /dev/null
+++ b/.themes/classic/source/robots.txt
@@ -0,0 +1,7 @@
+---
+layout: nil
+---
+User-agent: *
+Disallow:
+
+Sitemap: {{ site.url }}/sitemap.xml
\ No newline at end of file
From bcbc95b142b807175d0b18611eb0743564819a7d Mon Sep 17 00:00:00 2001
From: Nathan Long
Date: Thu, 12 Jul 2012 05:39:30 -0400
Subject: [PATCH 03/39] Example repo URL - see Github issue 516
---
Rakefile | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Rakefile b/Rakefile
index d4dcb54..1b5ece6 100644
--- a/Rakefile
+++ b/Rakefile
@@ -299,7 +299,9 @@ task :setup_github_pages, :repo do |t, args|
if args.repo
repo_url = args.repo
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
user = repo_url.match(/:([^\/]+)/)[1]
branch = (repo_url.match(/\/[\w-]+.github.com/).nil?) ? 'gh-pages' : 'master'
From 0d14d9cd0692fe6cf65e27f49da0247f98a45cdf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zhao=20L=C3=BC?=
Date: Thu, 19 Jul 2012 22:09:48 -0700
Subject: [PATCH 04/39] Updated Github API to V3.
Github API V2 has been removed. The response data format also changed.
---
.themes/classic/source/javascripts/github.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js
index 678775a..8b79dad 100644
--- a/.themes/classic/source/javascripts/github.js
+++ b/.themes/classic/source/javascripts/github.js
@@ -10,15 +10,15 @@ var github = (function(){
return {
showRepos: function(options){
$.ajax({
- url: "http://github.com/api/v2/json/repos/show/"+options.user+"?callback=?"
+ url: "https://api.github.com/users/"+options.user+"/repos?callback=?"
, type: 'jsonp'
, error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); }
, success: function(data) {
var repos = [];
- if (!data || !data.repositories) { return; }
- for (var i = 0; i < data.repositories.length; i++) {
- if (options.skip_forks && data.repositories[i].fork) { continue; }
- repos.push(data.repositories[i]);
+ if (!data || !data.data) { return; }
+ for (var i = 0; i < data.data.length; i++) {
+ if (options.skip_forks && data.data[i].fork) { continue; }
+ repos.push(data.data[i]);
}
repos.sort(function(a, b) {
var aDate = new Date(a.pushed_at).valueOf(),
From 9d7240e47f8edd732b5f7912d13b95266a3f4098 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zhao=20L=C3=BC?=
Date: Thu, 19 Jul 2012 22:09:48 -0700
Subject: [PATCH 05/39] Updated Github API to V3.
Github API V2 has been removed. The response data format also changed.
---
.themes/classic/source/javascripts/github.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js
index 8b79dad..9e98b8c 100644
--- a/.themes/classic/source/javascripts/github.js
+++ b/.themes/classic/source/javascripts/github.js
@@ -3,7 +3,7 @@ var github = (function(){
var i = 0, fragment = '', t = $(target)[0];
for(i = 0; i < repos.length; i++) {
- fragment += ''+repos[i].name+''+repos[i].description+'
';
+ fragment += ''+repos[i].name+''+(repos[i].description||'')+'
';
}
t.innerHTML = fragment;
}
From 0d222ba6b29b5a1a0a061cd7d00f373e2c655995 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Tue, 31 Jul 2012 14:55:23 -0500
Subject: [PATCH 06/39] Updated gems and rubies to 1.9.3
---
.rbenv-version | 2 +-
.rvmrc | 2 +-
Gemfile.lock | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/.rbenv-version b/.rbenv-version
index 0a95b9f..9bbcf15 100644
--- a/.rbenv-version
+++ b/.rbenv-version
@@ -1 +1 @@
-1.9.2-p290
+1.9.3-p0
diff --git a/.rvmrc b/.rvmrc
index 35845a2..08dd0a7 100644
--- a/.rvmrc
+++ b/.rvmrc
@@ -1 +1 @@
-rvm use 1.9.2
+rvm use 1.9.3
diff --git a/Gemfile.lock b/Gemfile.lock
index 1c1bf8d..5060be1 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -8,7 +8,7 @@ GEM
chunky_png (1.2.5)
classifier (1.3.3)
fast-stemmer (>= 1.0.0)
- compass (0.12.1)
+ compass (0.12.2)
chunky_png (~> 1.2)
fssm (>= 0.2.7)
sass (~> 3.1)
@@ -24,12 +24,12 @@ GEM
kramdown (~> 0.13)
liquid (~> 2.3)
maruku (~> 0.5)
- kramdown (0.13.6)
+ kramdown (0.13.7)
liquid (2.3.0)
maruku (0.6.0)
syntax (>= 1.0.0)
posix-spawn (0.3.6)
- pygments.rb (0.2.12)
+ pygments.rb (0.2.13)
rubypython (~> 0.5.3)
rack (1.4.1)
rack-protection (1.2.0)
@@ -41,7 +41,7 @@ GEM
rubypython (0.5.3)
blankslate (>= 2.1.2.3)
ffi (~> 1.0.7)
- sass (3.1.18)
+ sass (3.1.20)
sinatra (1.3.2)
rack (~> 1.3, >= 1.3.6)
rack-protection (~> 1.2)
From 6029981e35eef840207bfcab423a8056e648ae3f Mon Sep 17 00:00:00 2001
From: Ivo Wever
Date: Thu, 9 Aug 2012 23:34:41 +0300
Subject: [PATCH 07/39] Fix for issue #622
The filters bundled with Octopress are not applied to files ending in
`.md`, because the match in octopress_filters.rb does not match `.md`.
---
plugins/octopress_filters.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/octopress_filters.rb b/plugins/octopress_filters.rb
index 2ba93e9..091f75a 100644
--- a/plugins/octopress_filters.rb
+++ b/plugins/octopress_filters.rb
@@ -24,12 +24,12 @@ module Jekyll
class ContentFilters < PostFilter
include OctopressFilters
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)
end
end
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)
end
end
From ea88b0fc9893776d757602fae66c3593d5edafd8 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Thu, 6 Sep 2012 11:36:16 -0500
Subject: [PATCH 08/39] bumped rbenv version fixing #743
---
.rbenv-version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.rbenv-version b/.rbenv-version
index 9bbcf15..f3a9c9a 100644
--- a/.rbenv-version
+++ b/.rbenv-version
@@ -1 +1 @@
-1.9.3-p0
+1.9.3-p194
From 53ca59d6d0aa79b67ef89dbef16d2550df97e11d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zhao=20L=C3=BC?=
Date: Thu, 19 Jul 2012 22:09:48 -0700
Subject: [PATCH 09/39] Updated Github API to V3.
Github API V2 has been removed. The response data format also changed.
---
.themes/classic/source/javascripts/github.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js
index 678775a..8b79dad 100644
--- a/.themes/classic/source/javascripts/github.js
+++ b/.themes/classic/source/javascripts/github.js
@@ -10,15 +10,15 @@ var github = (function(){
return {
showRepos: function(options){
$.ajax({
- url: "http://github.com/api/v2/json/repos/show/"+options.user+"?callback=?"
+ url: "https://api.github.com/users/"+options.user+"/repos?callback=?"
, type: 'jsonp'
, error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); }
, success: function(data) {
var repos = [];
- if (!data || !data.repositories) { return; }
- for (var i = 0; i < data.repositories.length; i++) {
- if (options.skip_forks && data.repositories[i].fork) { continue; }
- repos.push(data.repositories[i]);
+ if (!data || !data.data) { return; }
+ for (var i = 0; i < data.data.length; i++) {
+ if (options.skip_forks && data.data[i].fork) { continue; }
+ repos.push(data.data[i]);
}
repos.sort(function(a, b) {
var aDate = new Date(a.pushed_at).valueOf(),
From 6c26f907cc0cf4704aaf5377738721177ec048f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zhao=20L=C3=BC?=
Date: Thu, 19 Jul 2012 22:09:48 -0700
Subject: [PATCH 10/39] Updated Github API to V3.
Github API V2 has been removed. The response data format also changed.
---
.themes/classic/source/javascripts/github.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js
index 8b79dad..9e98b8c 100644
--- a/.themes/classic/source/javascripts/github.js
+++ b/.themes/classic/source/javascripts/github.js
@@ -3,7 +3,7 @@ var github = (function(){
var i = 0, fragment = '', t = $(target)[0];
for(i = 0; i < repos.length; i++) {
- fragment += ''+repos[i].name+''+repos[i].description+'
';
+ fragment += ''+repos[i].name+''+(repos[i].description||'')+'
';
}
t.innerHTML = fragment;
}
From a010c99289a9dedd963fb2100d38fb80a80ae7ea Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Sat, 29 Sep 2012 22:42:47 -0500
Subject: [PATCH 11/39] Twitter API call and links are now protocol relative
---
.themes/classic/source/javascripts/twitter.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.themes/classic/source/javascripts/twitter.js b/.themes/classic/source/javascripts/twitter.js
index c9b7519..1a5c154 100644
--- a/.themes/classic/source/javascripts/twitter.js
+++ b/.themes/classic/source/javascripts/twitter.js
@@ -41,9 +41,9 @@ function prettyDate(time) {
function linkifyTweet(text, url) {
// Linkify urls, usernames, hashtags
- text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '$2')
- .replace(/(^|\W)@(\w+)/g, '$1@$2')
- .replace(/(^|\W)#(\w+)/g, '$1#$2');
+ text = text.replace(/(https?:)(\/\/)([\w\-:;?&=+.%#\/]+)/gi, '$3')
+ .replace(/(^|\W)@(\w+)/g, '$1@$2')
+ .replace(/(^|\W)#(\w+)/g, '$1#$2');
// Use twitter's api to replace t.co shortened urls with expanded ones.
for (var u in url) {
@@ -62,7 +62,7 @@ function showTwitterFeed(tweets, twitter_user) {
content = '';
for (var t in tweets) {
- content += ''+''+''+prettyDate(tweets[t].created_at)+''+linkifyTweet(tweets[t].text.replace(/\n/g, '
'), tweets[t].entities.urls)+'
'+'';
+ content += ''+''+''+prettyDate(tweets[t].created_at)+''+linkifyTweet(tweets[t].text.replace(/\n/g, '
'), tweets[t].entities.urls)+'
'+'';
}
timeline.innerHTML = content;
}
@@ -70,7 +70,7 @@ function showTwitterFeed(tweets, twitter_user) {
function getTwitterFeed(user, count, replies) {
count = parseInt(count, 10);
$.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: "//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'
, error: function (err) { $('#tweets li.loading').addClass('error').text("Twitter's busted"); }
, success: function(data) { showTwitterFeed(data.slice(0, count), user); }
From bfbb8f32fb073b5eec466fd15062dd506cf2b22d Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Mon, 1 Oct 2012 07:28:30 -0500
Subject: [PATCH 12/39] Using https instead of protocol relative urls, for
Pinboard and Twitter feeds
---
.themes/classic/source/javascripts/pinboard.js | 4 ++--
.themes/classic/source/javascripts/twitter.js | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/.themes/classic/source/javascripts/pinboard.js b/.themes/classic/source/javascripts/pinboard.js
index 52577e2..a97df03 100644
--- a/.themes/classic/source/javascripts/pinboard.js
+++ b/.themes/classic/source/javascripts/pinboard.js
@@ -44,7 +44,7 @@ function Pinboard_Linkroll() {
if (it.t.length > 0) {
for (var i = 0; i < it.t.length; i++) {
var tag = it.t[i];
- str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " ";
+ str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " ";
}
}
str += "
\n";
@@ -52,5 +52,5 @@ function 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);
diff --git a/.themes/classic/source/javascripts/twitter.js b/.themes/classic/source/javascripts/twitter.js
index 1a5c154..3e2dd0d 100644
--- a/.themes/classic/source/javascripts/twitter.js
+++ b/.themes/classic/source/javascripts/twitter.js
@@ -41,9 +41,9 @@ function prettyDate(time) {
function linkifyTweet(text, url) {
// Linkify urls, usernames, hashtags
- text = text.replace(/(https?:)(\/\/)([\w\-:;?&=+.%#\/]+)/gi, '$3')
- .replace(/(^|\W)@(\w+)/g, '$1@$2')
- .replace(/(^|\W)#(\w+)/g, '$1#$2');
+ text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '$2')
+ .replace(/(^|\W)@(\w+)/g, '$1@$2')
+ .replace(/(^|\W)#(\w+)/g, '$1#$2');
// Use twitter's api to replace t.co shortened urls with expanded ones.
for (var u in url) {
@@ -62,7 +62,7 @@ function showTwitterFeed(tweets, twitter_user) {
content = '';
for (var t in tweets) {
- content += ''+''+''+prettyDate(tweets[t].created_at)+''+linkifyTweet(tweets[t].text.replace(/\n/g, '
'), tweets[t].entities.urls)+'
'+'';
+ content += ''+''+''+prettyDate(tweets[t].created_at)+''+linkifyTweet(tweets[t].text.replace(/\n/g, '
'), tweets[t].entities.urls)+'
'+'';
}
timeline.innerHTML = content;
}
@@ -70,7 +70,7 @@ function showTwitterFeed(tweets, twitter_user) {
function getTwitterFeed(user, count, replies) {
count = parseInt(count, 10);
$.ajax({
- url: "//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'
, error: function (err) { $('#tweets li.loading').addClass('error').text("Twitter's busted"); }
, success: function(data) { showTwitterFeed(data.slice(0, count), user); }
From 2b67270f960563c55dd6c66495517bccc4f7fb17 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Sat, 13 Oct 2012 15:36:25 -0500
Subject: [PATCH 13/39] Disabled Rsync delete by default. Closes #787
---
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Rakefile b/Rakefile
index 1b5ece6..3addaaf 100644
--- a/Rakefile
+++ b/Rakefile
@@ -7,7 +7,7 @@ require "stringex"
ssh_user = "user@domain.com"
ssh_port = "22"
document_root = "~/website.com/"
-rsync_delete = true
+rsync_delete = false
deploy_default = "rsync"
# This will be configured for you when you run config_deploy
From 0ccd0679fdfd13da34b0236361abbd149a42a777 Mon Sep 17 00:00:00 2001
From: Liang Sun
Date: Tue, 27 Nov 2012 10:18:12 +0800
Subject: [PATCH 14/39] To support url without domain name like /path/file
You need to know if you would like to support this, each word in the title can not start with "/".
---
plugins/backtick_code_block.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/backtick_code_block.rb b/plugins/backtick_code_block.rb
index 40e7900..0e7cee4 100644
--- a/plugins/backtick_code_block.rb
+++ b/plugins/backtick_code_block.rb
@@ -2,7 +2,7 @@ require './plugins/pygments_code'
module BacktickCodeBlock
include HighlightCode
- AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+)\s*(.+)?/i
+ AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+|\/\S+)\s*(.+)?/i
LangCaption = /([^\s]+)\s*(.+)?/i
def render_code_block(input)
@options = nil
From 49e97e53f5e92cacb05f0dd33b656d4c813d07ce Mon Sep 17 00:00:00 2001
From: Parker Moore
Date: Fri, 30 Nov 2012 21:42:46 -0500
Subject: [PATCH 15/39] Fixing English error pet-peeve.
---
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Rakefile b/Rakefile
index 3addaaf..8f54ae1 100644
--- a/Rakefile
+++ b/Rakefile
@@ -151,7 +151,7 @@ task :new_page, :filename do |t, args|
end
# 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|
stash_dir = "#{source_dir}/#{stash_dir}"
FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir)
From 916b87a5457e68514c95a1e5f8a0eff324bed9e8 Mon Sep 17 00:00:00 2001
From: Johan Svensson
Date: Sun, 9 Dec 2012 19:04:41 +0100
Subject: [PATCH 16/39] Rakefile option for any additional rsync arguments
Added variable `rsync_args`
---
Rakefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Rakefile b/Rakefile
index 3addaaf..55bb57b 100644
--- a/Rakefile
+++ b/Rakefile
@@ -8,6 +8,7 @@ ssh_user = "user@domain.com"
ssh_port = "22"
document_root = "~/website.com/"
rsync_delete = false
+rsync_args = "" # Any extra arguments to pass to rsync
deploy_default = "rsync"
# This will be configured for you when you run config_deploy
@@ -237,7 +238,7 @@ task :rsync do
exclude = "--exclude-from '#{File.expand_path('./rsync-exclude')}'"
end
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
desc "deploy public directory to github pages"
From 72b4e8d5621dbb3c110fe2c273bcc3ac408ffc32 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Tue, 18 Dec 2012 11:38:37 -0600
Subject: [PATCH 17/39] gist tag plugin now works with the latest changes
GitHub gists and does not fail if you do not specify a filename.
---
.themes/classic/sass/partials/_syntax.scss | 64 ++++++++++++----------
plugins/gist_tag.rb | 4 +-
2 files changed, 39 insertions(+), 29 deletions(-)
diff --git a/.themes/classic/sass/partials/_syntax.scss b/.themes/classic/sass/partials/_syntax.scss
index 77ac8d7..5465286 100644
--- a/.themes/classic/sass/partials/_syntax.scss
+++ b/.themes/classic/sass/partials/_syntax.scss
@@ -1,44 +1,52 @@
.highlight, html .gist .gist-file .gist-syntax .gist-highlight {
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;
}
+.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 {
@include box-shadow(rgba(#000, .06) 0 0 10px);
.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 {
margin-bottom: 1.8em;
position: relative;
border: none;
padding-top: image-height("code_bg.png") !important;
+ .highlight {
+ margin-bottom: 0;
+ }
.gist-syntax {
border-bottom: 0 !important;
background: none !important;
- .gist-highlight{
+ .gist-highlight {
background: $base03 !important;
- pre {
- @extend .pre-code;
- }
+ }
+ .highlight pre {
+ @extend .pre-code;
+ padding: 0;
}
}
.gist-meta {
@@ -107,12 +115,11 @@ p, li {
}
.pre-code {
- @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
font-family: $mono !important;
overflow: scroll;
overflow-y: hidden;
display: block;
- padding: .8em !important;
+ padding: .8em;
overflow-x: auto;
line-height: 1.45em;
background: $base03 $noise-bg !important;
@@ -187,7 +194,7 @@ p, li {
}
.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;
background: $base03;
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 }
}
-.highlight code { @extend .pre-code; background: #000;}
+.highlight code {
+ @extend .pre-code; background: #000;
+}
figure.code {
background: none;
padding: 0;
@@ -250,4 +259,3 @@ figure.code {
text-shadow: #cbcccc 0 1px 0;
padding-left: 3em;
}
-
diff --git a/plugins/gist_tag.rb b/plugins/gist_tag.rb
index 74dd3b3..5f590e9 100644
--- a/plugins/gist_tag.rb
+++ b/plugins/gist_tag.rb
@@ -40,7 +40,9 @@ module Jekyll
end
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
def get_gist_url_for(gist, file)
From c18de558759dff2c77e6e0fc3ce2ad7a9f3fea99 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Wed, 26 Dec 2012 17:18:29 -0600
Subject: [PATCH 18/39] Titles in code plugins can have slashes in them. Closes
#892
---
plugins/backtick_code_block.rb | 2 +-
plugins/code_block.rb | 8 ++++----
source/images/icon-sdc231d6676.png | Bin 0 -> 1513 bytes
3 files changed, 5 insertions(+), 5 deletions(-)
create mode 100644 source/images/icon-sdc231d6676.png
diff --git a/plugins/backtick_code_block.rb b/plugins/backtick_code_block.rb
index 0e7cee4..8e2c114 100644
--- a/plugins/backtick_code_block.rb
+++ b/plugins/backtick_code_block.rb
@@ -2,7 +2,7 @@ require './plugins/pygments_code'
module BacktickCodeBlock
include HighlightCode
- AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+|\/\S+)\s*(.+)?/i
+ AllOptions = /([^\s]+)\s+(.+?)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i
LangCaption = /([^\s]+)\s*(.+)?/i
def render_code_block(input)
@options = nil
diff --git a/plugins/code_block.rb b/plugins/code_block.rb
index 44e3494..62c551a 100644
--- a/plugins/code_block.rb
+++ b/plugins/code_block.rb
@@ -49,8 +49,8 @@ module Jekyll
class CodeBlock < Liquid::Block
include HighlightCode
include TemplateWrapper
- CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i
- CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i
+ CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i
+ CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/\S+|\/\S+)/i
Caption = /(\S[\S\s]*)/
def initialize(tag_name, markup, tokens)
@title = nil
@@ -63,10 +63,10 @@ module Jekyll
end
if markup =~ CaptionUrlTitle
@file = $1
- @caption = "#{$1}#{$4}"
+ @caption = "#{$1}#{$3}"
elsif markup =~ CaptionUrl
@file = $1
- @caption = "#{$1}link"
+ @caption = "#{$1}link"
elsif markup =~ Caption
@file = $1
@caption = "#{$1}\n"
diff --git a/source/images/icon-sdc231d6676.png b/source/images/icon-sdc231d6676.png
new file mode 100644
index 0000000000000000000000000000000000000000..38ef928f78e5684b25350ca827535045008ae8bc
GIT binary patch
literal 1513
zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!3-q5|1_*(U|?Jx;1l8sKxN$%wN(#wXC5}*@!D+9
zTk|#7t+zk5U2xQQ-{{G!rwD(YGW#+Ej&fl;vu$(cF%6^+y8FI};E-Ns#qkDWYo
z{?hG-PdEaktaqH|f
zdmrIInd9~E@9o|FTK?ab2nW_V9x^mv~(qjKcr)eRPsa~25j_%85TTK>JN{N7jj>)&h(E_k%>K3zS(=6Ch}_wT>&7JfKo
z{*U+u#+eKev!*df7){GfaEK~-Z$D+OcF+>Xi3hyh9VfNL9+?nRBT&OI^WP3$4h7zH
zVbueVg^W`|dK?cid$(?Ne8Oaq;^mn1e}k0%nw_FXoa_rKJtoNo&RSv9zxO@EuAm93
zEON6&9TrVse|aK2N{}UNQOZH5Gb*!O4+z}&ogl*4Taa@?v~g)-C+~$xk=;3mI;P*f
z;xkjQtt`hpFe1I8m?uN0Q91me%Ddm$9JwcB15ek=1$9cS*Yeh5{A(BUFgeus+i9Uy
zpLX)tY_L5fn#%Ahdwb-rpsCAZ%61+)yJM~XG*O>bN3(w&ihFtZM&CiBGZxDWh0@nl
zu5NrWrMSP&@W@mRAHxR!^6)pmkIz4`XX~wFK?dek>wRs1#-y81x^Rlg$z^0|L!
z3zs>S{GIEzhoSNH8!@p~X=~5lEz|ejQjwm~a+AAk<-o0aO1=5;b${ppZ=VluPg
zY_H9XSHk9dtx_+@xQ|9)->W9Hg=YOa1%$iklFRm&dC%MNYuny~ZowCf%(J64!7
zTxH($%k&1*Z+kw)1;K6?x7B5@FTcmt-Y|Q=@uvxSFK$e0J|~=cdRgSmJFi~&+|+b?
zKFip1nfSFdg_QG2mOH8s6n}p3z-9MgF1Hhsd7pC>-ds<2`*Wk?lh&!`kO+yj#~v;
zI5!D=Ykz+8K*#hKU&O;UOkey!c=P$U)i?TY3N7L|XLrVa>Q2L+vrp~k`1tWm`Jq&m
z6QU&9cgV*jXi8?c+_8#!L+%3iEw2~;W;PGpeo|A|?Z;%vrEBLht(m*v!ef&({u!%n
u7{u*9t-1V6MZV(x+n96TR{xyOyq_^Wg&}c
Date: Wed, 26 Dec 2012 17:33:48 -0600
Subject: [PATCH 19/39] Removed unnecessary regex in code block plugin
---
plugins/code_block.rb | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/plugins/code_block.rb b/plugins/code_block.rb
index 62c551a..660f73d 100644
--- a/plugins/code_block.rb
+++ b/plugins/code_block.rb
@@ -50,7 +50,6 @@ module Jekyll
include HighlightCode
include TemplateWrapper
CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/\S+|\/\S+)\s*(.+)?/i
- CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/\S+|\/\S+)/i
Caption = /(\S[\S\s]*)/
def initialize(tag_name, markup, tokens)
@title = nil
@@ -63,10 +62,7 @@ module Jekyll
end
if markup =~ CaptionUrlTitle
@file = $1
- @caption = "#{$1}#{$3}"
- elsif markup =~ CaptionUrl
- @file = $1
- @caption = "#{$1}link"
+ @caption = "#{$1}#{$3 || 'link'}"
elsif markup =~ Caption
@file = $1
@caption = "#{$1}\n"
From e179277e40d789bddc514782cda6bb3b2c1c86cd Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Sat, 29 Dec 2012 02:15:19 -0600
Subject: [PATCH 20/39] updated gems
---
Gemfile | 12 ++++++------
Gemfile.lock | 41 ++++++++++++++++++-----------------------
2 files changed, 24 insertions(+), 29 deletions(-)
diff --git a/Gemfile b/Gemfile
index be2518b..f378954 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,18 +1,18 @@
source "http://rubygems.org"
group :development do
- gem 'rake', '~> 0.9.2'
+ gem 'rake', '~> 0.9'
gem 'rack', '~> 1.4.1'
- gem 'jekyll', '~> 0.11.2'
+ gem 'jekyll', '~> 0.12'
gem 'rdiscount', '~> 1.6.8'
- gem 'pygments.rb', '~> 0.2.12'
+ gem 'pygments.rb', '~> 0.3.4'
gem 'RedCloth', '~> 4.2.9'
- gem 'haml', '~> 3.1.6'
- gem 'compass', '~> 0.12.1'
+ gem 'haml', '~> 3.1.7'
+ gem 'compass', '~> 0.12.2'
gem 'rubypants', '~> 0.2.0'
gem 'rb-fsevent', '~> 0.9'
gem 'stringex', '~> 1.4.0'
gem 'liquid', '~> 2.3.0'
end
-gem 'sinatra', '~> 1.3.2'
+gem 'sinatra', '~> 1.3.3'
diff --git a/Gemfile.lock b/Gemfile.lock
index 5060be1..c235b2c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -2,9 +2,6 @@ GEM
remote: http://rubygems.org/
specs:
RedCloth (4.2.9)
- albino (1.3.3)
- posix-spawn (>= 0.3.6)
- blankslate (2.1.2.4)
chunky_png (1.2.5)
classifier (1.3.3)
fast-stemmer (>= 1.0.0)
@@ -14,56 +11,54 @@ GEM
sass (~> 3.1)
directory_watcher (1.4.1)
fast-stemmer (1.0.1)
- ffi (1.0.11)
fssm (0.2.9)
- haml (3.1.6)
- jekyll (0.11.2)
- albino (~> 1.3)
+ haml (3.1.7)
+ jekyll (0.12.0)
classifier (~> 1.3)
directory_watcher (~> 1.1)
- kramdown (~> 0.13)
+ kramdown (~> 0.13.4)
liquid (~> 2.3)
maruku (~> 0.5)
- kramdown (0.13.7)
+ pygments.rb (~> 0.3.2)
+ kramdown (0.13.8)
liquid (2.3.0)
- maruku (0.6.0)
+ maruku (0.6.1)
syntax (>= 1.0.0)
posix-spawn (0.3.6)
- pygments.rb (0.2.13)
- rubypython (~> 0.5.3)
+ pygments.rb (0.3.4)
+ posix-spawn (~> 0.3.6)
+ yajl-ruby (~> 1.1.0)
rack (1.4.1)
- rack-protection (1.2.0)
+ rack-protection (1.3.2)
rack
rake (0.9.2.2)
rb-fsevent (0.9.1)
rdiscount (1.6.8)
rubypants (0.2.0)
- rubypython (0.5.3)
- blankslate (>= 2.1.2.3)
- ffi (~> 1.0.7)
sass (3.1.20)
- sinatra (1.3.2)
+ sinatra (1.3.3)
rack (~> 1.3, >= 1.3.6)
rack-protection (~> 1.2)
tilt (~> 1.3, >= 1.3.3)
stringex (1.4.0)
syntax (1.0.0)
tilt (1.3.3)
+ yajl-ruby (1.1.0)
PLATFORMS
ruby
DEPENDENCIES
RedCloth (~> 4.2.9)
- compass (~> 0.12.1)
- haml (~> 3.1.6)
- jekyll (~> 0.11.2)
+ compass (~> 0.12.2)
+ haml (~> 3.1.7)
+ jekyll (~> 0.12)
liquid (~> 2.3.0)
- pygments.rb (~> 0.2.12)
+ pygments.rb (~> 0.3.4)
rack (~> 1.4.1)
- rake (~> 0.9.2)
+ rake (~> 0.9)
rb-fsevent (~> 0.9)
rdiscount (~> 1.6.8)
rubypants (~> 0.2.0)
- sinatra (~> 1.3.2)
+ sinatra (~> 1.3.3)
stringex (~> 1.4.0)
From 65f7f7f0b3fa2264336d21a169b7ef426079dd2d Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Tue, 1 Jan 2013 14:22:48 -0600
Subject: [PATCH 21/39] Rake task new_post now accepts titles through stdin
This should help resolve issues for zsh users and make it easier to enter
titles which freak out Rake's argument processing
---
Rakefile | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/Rakefile b/Rakefile
index ef9af47..6c699df 100644
--- a/Rakefile
+++ b/Rakefile
@@ -92,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")
desc "Begin a new post in #{source_dir}/#{posts_dir}"
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)
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}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
From c814560c86917f2931c90610e7c5343bbe63b3b6 Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Wed, 2 Jan 2013 21:02:50 -0600
Subject: [PATCH 22/39] removed accidentally added file
---
source/images/icon-sdc231d6676.png | Bin 1513 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 source/images/icon-sdc231d6676.png
diff --git a/source/images/icon-sdc231d6676.png b/source/images/icon-sdc231d6676.png
deleted file mode 100644
index 38ef928f78e5684b25350ca827535045008ae8bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1513
zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!3-q5|1_*(U|?Jx;1l8sKxN$%wN(#wXC5}*@!D+9
zTk|#7t+zk5U2xQQ-{{G!rwD(YGW#+Ej&fl;vu$(cF%6^+y8FI};E-Ns#qkDWYo
z{?hG-PdEaktaqH|f
zdmrIInd9~E@9o|FTK?ab2nW_V9x^mv~(qjKcr)eRPsa~25j_%85TTK>JN{N7jj>)&h(E_k%>K3zS(=6Ch}_wT>&7JfKo
z{*U+u#+eKev!*df7){GfaEK~-Z$D+OcF+>Xi3hyh9VfNL9+?nRBT&OI^WP3$4h7zH
zVbueVg^W`|dK?cid$(?Ne8Oaq;^mn1e}k0%nw_FXoa_rKJtoNo&RSv9zxO@EuAm93
zEON6&9TrVse|aK2N{}UNQOZH5Gb*!O4+z}&ogl*4Taa@?v~g)-C+~$xk=;3mI;P*f
z;xkjQtt`hpFe1I8m?uN0Q91me%Ddm$9JwcB15ek=1$9cS*Yeh5{A(BUFgeus+i9Uy
zpLX)tY_L5fn#%Ahdwb-rpsCAZ%61+)yJM~XG*O>bN3(w&ihFtZM&CiBGZxDWh0@nl
zu5NrWrMSP&@W@mRAHxR!^6)pmkIz4`XX~wFK?dek>wRs1#-y81x^Rlg$z^0|L!
z3zs>S{GIEzhoSNH8!@p~X=~5lEz|ejQjwm~a+AAk<-o0aO1=5;b${ppZ=VluPg
zY_H9XSHk9dtx_+@xQ|9)->W9Hg=YOa1%$iklFRm&dC%MNYuny~ZowCf%(J64!7
zTxH($%k&1*Z+kw)1;K6?x7B5@FTcmt-Y|Q=@uvxSFK$e0J|~=cdRgSmJFi~&+|+b?
zKFip1nfSFdg_QG2mOH8s6n}p3z-9MgF1Hhsd7pC>-ds<2`*Wk?lh&!`kO+yj#~v;
zI5!D=Ykz+8K*#hKU&O;UOkey!c=P$U)i?TY3N7L|XLrVa>Q2L+vrp~k`1tWm`Jq&m
z6QU&9cgV*jXi8?c+_8#!L+%3iEw2~;W;PGpeo|A|?Z;%vrEBLht(m*v!ef&({u!%n
u7{u*9t-1V6MZV(x+n96TR{xyOyq_^Wg&}c
Date: Wed, 2 Jan 2013 20:55:09 -0800
Subject: [PATCH 23/39] Escape github repo descriptions, as they may contain
HTML.
---
.themes/classic/source/javascripts/github.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js
index 9e98b8c..27a5a23 100644
--- a/.themes/classic/source/javascripts/github.js
+++ b/.themes/classic/source/javascripts/github.js
@@ -1,9 +1,12 @@
var github = (function(){
+ function escapeHtml(str) {
+ return $('').text(str).html();
+ }
function render(target, repos){
var i = 0, fragment = '', t = $(target)[0];
for(i = 0; i < repos.length; i++) {
- fragment += ''+repos[i].name+''+(repos[i].description||'')+'
';
+ fragment += ''+repos[i].name+''+escapeHtml(repos[i].description||'')+'
';
}
t.innerHTML = fragment;
}
From 9decd23b5a7a2f26590a4995cafcba010695717d Mon Sep 17 00:00:00 2001
From: Brandon Mathis
Date: Sun, 6 Jan 2013 22:52:54 -0600
Subject: [PATCH 24/39] updated ender.js to latest
---
.themes/classic/source/javascripts/ender.js | 34 +-
.../classic/source/javascripts/libs/ender.js | 4611 ++++++++++++-----
2 files changed, 3202 insertions(+), 1443 deletions(-)
diff --git a/.themes/classic/source/javascripts/ender.js b/.themes/classic/source/javascripts/ender.js
index 1add349..6d9c66e 100644
--- a/.themes/classic/source/javascripts/ender.js
+++ b/.themes/classic/source/javascripts/ender.js
@@ -8,38 +8,38 @@
/*!
* Ender: open module JavaScript framework (client-lib)
- * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
- * http://ender.no.de
+ * copyright Dustin Diaz & Jacob Thornton 2011-2012 (@ded @fat)
+ * http://ender.jit.su
* License MIT
*/
-!function(a){function d(a){var c=b[a]||window[a];if(!c)throw new Error("Requested module '"+a+"' has not been defined.");return c}function e(a,c){return b[a]=c}function f(a,b){for(var c in b)c!="noConflict"&&c!="_VERSION"&&(a[c]=b[c]);return a}function g(a,b,c){return h._select&&(typeof a=="string"||a.nodeName||a.length&&"item"in a||a==window)?(c=h._select(a,b),c.selector=a):c=isFinite(a.length)?a:[a],f(c,g)}function h(a,b){return g(a,b)}a.global=a;var b={},c=a.$;a.provide=e,a.require=d,f(h,{_VERSION:"0.3.4",fn:a.$&&a.$.fn||{},ender:function(a,b){f(b?g:h,a)},_select:function(a,b){return(b||document).querySelectorAll(a)}}),f(g,{forEach:function(a,b,c){for(c=0,l=this.length;c0?this:[]).concat(Array.prototype.slice.call(arguments,0));return b[a].apply(null,c)}},d=c("serialize"),e=c("serializeArray");a.ender({ajax:b,serialize:d,serializeArray:e,toQueryString:b.toQueryString}),a.ender({serialize:d,serializeArray:e},!0)}(ender)}(),!function(){var a={exports:{}},b=a.exports;
+;!function(name,definition){typeof module!="undefined"?module.exports=definition():typeof define=="function"&&define.amd?define(definition):this[name]=definition()}("reqwest",function(){function handleReadyState(o,success,error){return function(){o&&o[readyState]==4&&(twoHundo.test(o.status)?success(o):error(o))}}function setHeaders(http,o){var headers=o.headers||{},h;headers.Accept=headers.Accept||defaultHeaders.accept[o.type]||defaultHeaders.accept["*"];!o.crossOrigin&&!headers[requestedWith]&&(headers[requestedWith]=defaultHeaders.requestedWith);headers[contentType]||(headers[contentType]=o.contentType||defaultHeaders.contentType);for(h in headers)headers.hasOwnProperty(h)&&http.setRequestHeader(h,headers[h])}function setCredentials(http,o){typeof o.withCredentials!="undefined"&&typeof http.withCredentials!="undefined"&&(http.withCredentials=!!o.withCredentials)}function generalCallback(data){lastValue=data}function urlappend(url,s){return url+(/\?/.test(url)?"&":"?")+s}function handleJsonp(o,fn,err,url){var reqId=uniqid++,cbkey=o.jsonpCallback||"callback",cbval=o.jsonpCallbackName||reqwest.getcallbackPrefix(reqId),cbreg=new RegExp("((^|\\?|&)"+cbkey+")=([^&]+)"),match=url.match(cbreg),script=doc.createElement("script"),loaded=0;match?match[3]==="?"?url=url.replace(cbreg,"$1="+cbval):cbval=match[3]:url=urlappend(url,cbkey+"="+cbval);win[cbval]=generalCallback;script.type="text/javascript";script.src=url;script.async=!0;if(typeof script.onreadystatechange!="undefined"){script.event="onclick";script.htmlFor=script.id="_reqwest_"+reqId}script.onload=script.onreadystatechange=function(){if(script[readyState]&&script[readyState]!=="complete"&&script[readyState]!=="loaded"||loaded)return!1;script.onload=script.onreadystatechange=null;script.onclick&&script.onclick();o.success&&o.success(lastValue);lastValue=undefined;head.removeChild(script);loaded=1};head.appendChild(script)}function getRequest(o,fn,err){var method=(o.method||"GET").toUpperCase(),url=typeof o=="string"?o:o.url,data=o.processData!==!1&&o.data&&typeof o.data!="string"?reqwest.toQueryString(o.data):o.data||null,http;if((o.type=="jsonp"||method=="GET")&&data){url=urlappend(url,data);data=null}if(o.type=="jsonp")return handleJsonp(o,fn,err,url);http=xhr();http.open(method,url,!0);setHeaders(http,o);setCredentials(http,o);http.onreadystatechange=handleReadyState(http,fn,err);o.before&&o.before(http);http.send(data);return http}function Reqwest(o,fn){this.o=o;this.fn=fn;init.apply(this,arguments)}function setType(url){var m=url.match(/\.(json|jsonp|html|xml)(\?|$)/);return m?m[1]:"js"}function init(o,fn){function complete(resp){o.timeout&&clearTimeout(self.timeout);self.timeout=null;while(self._completeHandlers.length>0)self._completeHandlers.shift()(resp)}function success(resp){var r=resp.responseText;if(r)switch(type){case"json":try{resp=win.JSON?win.JSON.parse(r):eval("("+r+")")}catch(err){return error(resp,"Could not parse JSON in response",err)}break;case"js":resp=eval(r);break;case"html":resp=r;break;case"xml":resp=resp.responseXML}self._responseArgs.resp=resp;self._fulfilled=!0;fn(resp);while(self._fulfillmentHandlers.length>0)self._fulfillmentHandlers.shift()(resp);complete(resp)}function error(resp,msg,t){self._responseArgs.resp=resp;self._responseArgs.msg=msg;self._responseArgs.t=t;self._erred=!0;while(self._errorHandlers.length>0)self._errorHandlers.shift()(resp,msg,t);complete(resp)}this.url=typeof o=="string"?o:o.url;this.timeout=null;this._fulfilled=!1;this._fulfillmentHandlers=[];this._errorHandlers=[];this._completeHandlers=[];this._erred=!1;this._responseArgs={};var self=this,type=o.type||setType(this.url);fn=fn||function(){};o.timeout&&(this.timeout=setTimeout(function(){self.abort()},o.timeout));o.success&&this._fulfillmentHandlers.push(function(){o.success.apply(o,arguments)});o.error&&this._errorHandlers.push(function(){o.error.apply(o,arguments)});o.complete&&this._completeHandlers.push(function(){o.complete.apply(o,arguments)});this.request=getRequest(o,success,error)}function reqwest(o,fn){return new Reqwest(o,fn)}function normalize(s){return s?s.replace(/\r?\n/g,"\r\n"):""}function serial(el,cb){var n=el.name,t=el.tagName.toLowerCase(),optCb=function(o){o&&!o.disabled&&cb(n,normalize(o.attributes.value&&o.attributes.value.specified?o.value:o.text))};if(el.disabled||!n)return;switch(t){case"input":if(!/reset|button|image|file/i.test(el.type)){var ch=/checkbox/i.test(el.type),ra=/radio/i.test(el.type),val=el.value;(!ch&&!ra||el.checked)&&cb(n,normalize(ch&&val===""?"on":val))}break;case"textarea":cb(n,normalize(el.value));break;case"select":if(el.type.toLowerCase()==="select-one")optCb(el.selectedIndex>=0?el.options[el.selectedIndex]:null);else for(var i=0;el.length&&i0){typeSpec=str2arr(typeSpec);for(i=typeSpec.length;i--;)off(element,typeSpec[i],fn);return element}type=isTypeStr&&typeSpec.replace(nameRegex,"");type&&customEvents[type]&&(type=customEvents[type].base);if(!typeSpec||isTypeStr){if(namespaces=isTypeStr&&typeSpec.replace(namespaceRegex,""))namespaces=str2arr(namespaces,".");removeListener(element,type,fn,namespaces)}else if(isFunction(typeSpec))removeListener(element,null,typeSpec);else for(k in typeSpec)typeSpec.hasOwnProperty(k)&&off(element,k,typeSpec[k]);return element},on=function(element,events,selector,fn){var originalFn,type,types,i,args,entry,first;if(selector===undefined&&typeof events=="object"){for(type in events)events.hasOwnProperty(type)&&on.call(this,element,type,events[type]);return}if(!isFunction(selector)){originalFn=fn;args=slice.call(arguments,4);fn=delegate(selector,originalFn,selectorEngine)}else{args=slice.call(arguments,3);fn=originalFn=selector}types=str2arr(events);this===ONE&&(fn=once(off,element,events,fn,originalFn));for(i=types.length;i--;){first=registry.put(entry=new RegEntry(element,types[i].replace(nameRegex,""),fn,originalFn,str2arr(types[i].replace(namespaceRegex,""),"."),args,!1));entry[eventSupport]&&first&&listener(element,entry.eventType,!0,entry.customType)}return element},add=function(element,events,fn,delfn){return on.apply(null,isString(fn)?[element,fn,events,delfn].concat(arguments.length>3?slice.call(arguments,5):[]):slice.call(arguments))},one=function(){return on.apply(ONE,arguments)},fire=function(element,type,args){var types=str2arr(type),i,j,l,names,handlers;for(i=types.length;i--;){type=types[i].replace(nameRegex,"");if(names=types[i].replace(namespaceRegex,""))names=str2arr(names,".");if(!names&&!args&&element[eventSupport])fireListener(nativeEvents[type],type,element);else{handlers=registry.get(element,type,null,!1);args=[!1].concat(args);for(j=0,l=handlers.length;j]+)/.exec(a),d=c.createElement(b&&k[b[1].toLowerCase()]||"div"),e=[];d.innerHTML=a;var f=d.childNodes;d=d.firstChild,e.push(d);while(d=d.nextSibling)d.nodeType==1&&e.push(d);return e}():A(a)?[a.cloneNode(!0)]:[]},N.doc=function(){var a=this.viewport();return{width:Math.max(c.body.scrollWidth,d.scrollWidth,a.width),height:Math.max(c.body.scrollHeight,d.scrollHeight,a.height)}},N.firstChild=function(a){for(var b=a.childNodes,c=0,d=b&&b.length||0,e;c0?cloneNode(self,el):el)},null,rev)},this,rev);self.length=i;each(r,function(e){self[--i]=e},null,!rev);return self}function xy(el,x,y){var $el=bonzo(el),style=$el.css("position"),offset=$el.offset(),rel="relative",isRel=style==rel,delta=[parseInt($el.css("left"),10),parseInt($el.css("top"),10)];if(style=="static"){$el.css("position",rel);style=rel}isNaN(delta[0])&&(delta[0]=isRel?0:el.offsetLeft);isNaN(delta[1])&&(delta[1]=isRel?0:el.offsetTop);x!=null&&(el.style.left=x-offset.left+delta[0]+px);y!=null&&(el.style.top=y-offset.top+delta[1]+px)}function setter(el,v){return typeof v=="function"?v(el):v}function Bonzo(elements){this.length=0;if(elements){elements=typeof elements!="string"&&!elements.nodeType&&typeof elements.length!="undefined"?elements:[elements];this.length=elements.length;for(var i=0;i/,table=["",1],td=["",3],option=["",1],noscope=["_","",0,1],tagMap={thead:table,tbody:table,tfoot:table,colgroup:table,caption:table,tr:["",2],th:td,td:td,col:["",2],fieldset:["",1],legend:["",2],option:option,optgroup:option,script:noscope,style:noscope,link:noscope,param:noscope,base:noscope},stateAttributes=/^(checked|selected|disabled)$/,ie=/msie/i.test(navigator.userAgent),hasClass,addClass,removeClass,uidMap={},uuids=0,digit=/^-?[\d\.]+$/,dattr=/^data-(.+)$/,px="px",setAttribute="setAttribute",getAttribute="getAttribute",byTag="getElementsByTagName",features=function(){var e=doc.createElement("p");e.innerHTML='x';return{hrefExtended:e[byTag]("a")[0][getAttribute]("href")!="#x",autoTbody:e[byTag]("tbody").length!==0,computedStyle:doc.defaultView&&doc.defaultView.getComputedStyle,cssFloat:e[byTag]("table")[0].style.styleFloat?"styleFloat":"cssFloat",transform:function(){var props=["transform","webkitTransform","MozTransform","OTransform","msTransform"],i;for(i=0;i]+)/),el=doc.createElement("div"),els=[],p=tag?tagMap[tag[1].toLowerCase()]:null,dep=p?p[2]+1:1,ns=p&&p[3],pn=parentNode,tb=features.autoTbody&&p&&p[0]==""&&!/])\s*/g,C=/[\s\>\+\~]/,D=/(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\]|[\s\w\+\-]*\))/,E=/([.*+?\^=!:${}()|\[\]\/\\])/g,F=/^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,G=/\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,H=/:([\w\-]+)(\(['"]?([\s\w\+\-]+)['"]?\))?/,I=new RegExp("("+C.source+")"+D.source,"g"),J=new RegExp(C.source+D.source),K=new RegExp(F.source+"("+G.source+")?"+"("+H.source+")?"),L={" ":function(a){return a&&a!==u&&a.parentNode},">":function(a,b){return a&&a.parentNode==b.parentNode&&a.parentNode},"~":function(a){return a&&a.previousSibling},"+":function(a,b,c,d){return a?(c=S(a),d=S(b),c&&d&&c==d&&c):!1}};M.prototype={g:function(a){return this.c[a]||undefined},s:function(a,b){return this.c[a]=b,b}};var N=new M,O=new M,P=new M,Q=new M,bb="compareDocumentPosition"in u?function(a,b){return(b.compareDocumentPosition(a)&16)==16}:"contains"in u?function(a,c){return c=c==b||c==window?u:c,c!==a&&c.contains(a)}:function(a,b){while(a=a.parentNode)if(a===b)return 1;return 0},bc=function(){if(!b.querySelector||!b.querySelectorAll)return!1;try{return b.querySelectorAll(":nth-of-type(1)").length}catch(a){return!1}}(),bd=bc?function(a,c){return b.getElementsByClassName&&(i=a.match(y))?R(c.getElementsByClassName(i[1])):R(c.querySelectorAll(a))}:function(a,c){a=a.replace(B,"$1");var d=[],e,g,j=[],k;if(i=a.match(A)){s=c.getElementsByTagName(i[1]||"*"),l=N.g(i[2])||N.s(i[2],new RegExp("(^|\\s+)"+i[2]+"(\\s+|$)"));for(k=0,h=s.length,f=0;k]+)\s*/.exec(b)[1],f=(c||a).createElement(e[d]||"div"),g=[];f.innerHTML=b;var h=f.childNodes;f=f.firstChild,f.nodeType==1&&g.push(f);while(f=f.nextSibling)f.nodeType==1&&g.push(f);return g}var c=require("qwery"),d="table",e={thead:d,tbody:d,tfoot:d,tr:"tbody",th:"tr",td:"tr",fieldset:"form",option:"select"};b._select=function(a,b){return/^\s*~+]/,normalizr=/^\s+|\s*([,\s\+\~>]|$)\s*/g,splitters=/[\s\>\+\~]/,splittersMore=/(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\]|[\s\w\+\-]*\))/,specialChars=/([.*+?\^=!:${}()|\[\]\/\\])/g,simple=/^(\*|[a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,attr=/\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,pseudo=/:([\w\-]+)(\(['"]?([^()]+)['"]?\))?/,easy=new RegExp(idOnly.source+"|"+tagOnly.source+"|"+classOnly.source),dividers=new RegExp("("+splitters.source+")"+splittersMore.source,"g"),tokenizr=new RegExp(splitters.source+splittersMore.source),chunker=new RegExp(simple.source+"("+attr.source+")?"+"("+pseudo.source+")?"),walker={" ":function(node){return node&&node!==html&&node.parentNode},">":function(node,contestant){return node&&node.parentNode==contestant.parentNode&&node.parentNode},"~":function(node){return node&&node.previousSibling},"+":function(node,contestant,p1,p2){return node?(p1=previous(node))&&(p2=previous(contestant))&&p1==p2&&p1:!1}};cache.prototype={g:function(k){return this.c[k]||undefined},s:function(k,v,r){v=r?new RegExp(v):v;return this.c[k]=v}};var classCache=new cache,cleanCache=new cache,attrCache=new cache,tokenCache=new cache,isAncestor="compareDocumentPosition"in html?function(element,container){return(container.compareDocumentPosition(element)&16)==16}:"contains"in html?function(element,container){container=container[nodeType]===9||container==window?html:container;return container!==element&&container.contains(element)}:function(element,container){while(element=element.parentNode)if(element===container)return 1;return 0},getAttr=function(){var e=doc.createElement("p");return(e.innerHTML='x')&&e.firstChild.getAttribute("href")!="#x"?function(e,a){return a==="class"?e.className:a==="href"||a==="src"?e.getAttribute(a,2):e.getAttribute(a)}:function(e,a){return e.getAttribute(a)}}(),hasByClass=!!doc[byClass],hasQSA=doc.querySelector&&doc[qSA],selectQSA=function(selector,root){var result=[],ss,e;try{if(root[nodeType]===9||!splittable.test(selector))return arrayify(root[qSA](selector));each(ss=selector.split(","),collectSelector(root,function(ctx,s){e=ctx[qSA](s);e.length==1?result[result.length]=e.item(0):e.length&&(result=result.concat(arrayify(e)))}));return ss.length>1&&result.length>1?uniq(result):result}catch(ex){}return selectNonNative(selector,root)},selectNonNative=function(selector,root){var result=[],items,m,i,l,r,ss;selector=selector.replace(normalizr,"$1");if(m=selector.match(tagAndOrClass)){r=classRegex(m[2]);items=root[byTag](m[1]||"*");for(i=0,l=items.length;i1&&result.length>1?uniq(result):result},configure=function(options){typeof options[useNativeQSA]!="undefined"&&(select=options[useNativeQSA]?hasQSA?selectQSA:selectNonNative:selectNonNative)};configure({useNativeQSA:!0});qwery.configure=configure;qwery.uniq=uniq;qwery.is=is;qwery.pseudos={};return qwery});provide("qwery",module.exports);(function($){var q=function(){var r;try{r=require("qwery")}catch(ex){r=require("qwery-mobile")}finally{return r}}();$.pseudos=q.pseudos;$._select=function(s,r){return($._select=function(){var b;if(typeof $.create=="function")return function(s,r){return/^\s*.+?<\\/" + t + ">", "g"));
- each(bitches, function (m) {
- m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2');
- var bah = doc.createElement(t);
- bah.appendChild(doc.createDocumentFragment(m));
- el.appendChild(bah);
- });
+ return new XMLHttpRequest()
+ } :
+ function () {
+ return new ActiveXObject('Microsoft.XMLHTTP')
+ }
+
+ function handleReadyState(o, success, error) {
+ return function () {
+ if (o && o[readyState] == 4) {
+ if (twoHundo.test(o.status)) {
+ success(o)
+ } else {
+ error(o)
+ }
+ }
+ }
+ }
+
+ function setHeaders(http, o) {
+ var headers = o.headers || {}, h
+ headers.Accept = headers.Accept || defaultHeaders.accept[o.type] || defaultHeaders.accept['*']
+ // breaks cross-origin requests with legacy browsers
+ if (!o.crossOrigin && !headers[requestedWith]) headers[requestedWith] = defaultHeaders.requestedWith
+ if (!headers[contentType]) headers[contentType] = o.contentType || defaultHeaders.contentType
+ for (h in headers) {
+ headers.hasOwnProperty(h) && http.setRequestHeader(h, headers[h])
+ }
+ }
+
+ function setCredentials(http, o) {
+ if (typeof o.withCredentials !== "undefined" && typeof http.withCredentials !== "undefined") {
+ http.withCredentials = !!o.withCredentials
+ }
+ }
+
+ function generalCallback(data) {
+ lastValue = data
+ }
+
+ function urlappend(url, s) {
+ return url + (/\?/.test(url) ? '&' : '?') + s
+ }
+
+ function handleJsonp(o, fn, err, url) {
+ var reqId = uniqid++
+ , cbkey = o.jsonpCallback || 'callback' // the 'callback' key
+ , cbval = o.jsonpCallbackName || reqwest.getcallbackPrefix(reqId)
+ // , cbval = o.jsonpCallbackName || ('reqwest_' + reqId) // the 'callback' value
+ , cbreg = new RegExp('((^|\\?|&)' + cbkey + ')=([^&]+)')
+ , match = url.match(cbreg)
+ , script = doc.createElement('script')
+ , loaded = 0
+
+ if (match) {
+ if (match[3] === '?') {
+ url = url.replace(cbreg, '$1=' + cbval) // wildcard callback func name
} else {
- el.innerHTML = node;
+ cbval = match[3] // provided callback func name
}
- var nodes = el.childNodes;
- el = el.firstChild;
- els.push(el);
- while (el = el.nextSibling) {
- (el.nodeType == 1) && els.push(el);
- }
- return els;
-
- }() : is(node) ? [node.cloneNode(true)] : [];
- };
-
- bonzo.doc = function () {
- var w = html.scrollWidth,
- h = html.scrollHeight,
- vp = this.viewport();
- return {
- width: Math.max(w, vp.width),
- height: Math.max(h, vp.height)
- };
- };
-
- bonzo.firstChild = function (el) {
- for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
- if (c[i].nodeType === 1) {
- e = c[j = i];
+ } else {
+ url = urlappend(url, cbkey + '=' + cbval) // no callback details, add 'em
}
+
+ win[cbval] = generalCallback
+
+ script.type = 'text/javascript'
+ script.src = url
+ script.async = true
+ if (typeof script.onreadystatechange !== 'undefined') {
+ // need this for IE due to out-of-order onreadystatechange(), binding script
+ // execution to an event listener gives us control over when the script
+ // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html
+ script.event = 'onclick'
+ script.htmlFor = script.id = '_reqwest_' + reqId
+ }
+
+ script.onload = script.onreadystatechange = function () {
+ if ((script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded') || loaded) {
+ return false
+ }
+ script.onload = script.onreadystatechange = null
+ script.onclick && script.onclick()
+ // Call the user callback with the last value stored and clean up values and scripts.
+ o.success && o.success(lastValue)
+ lastValue = undefined
+ head.removeChild(script)
+ loaded = 1
+ }
+
+ // Add the script to the DOM head
+ head.appendChild(script)
}
- return e;
- };
-
- bonzo.viewport = function () {
- var h = self.innerHeight,
- w = self.innerWidth;
- ie && (h = html.clientHeight) && (w = html.clientWidth);
- return {
- width: w,
- height: h
- };
- };
-
- bonzo.isAncestor = 'compareDocumentPosition' in html ?
- function (container, element) {
- return (container.compareDocumentPosition(element) & 16) == 16;
- } : 'contains' in html ?
- function (container, element) {
- return container !== element && container.contains(element);
- } :
- function (container, element) {
- while (element = element.parentNode) {
- if (element === container) {
- return true;
+
+ function getRequest(o, fn, err) {
+ var method = (o.method || 'GET').toUpperCase()
+ , url = typeof o === 'string' ? o : o.url
+ // convert non-string objects to query-string form unless o.processData is false
+ , data = (o.processData !== false && o.data && typeof o.data !== 'string')
+ ? reqwest.toQueryString(o.data)
+ : (o.data || null)
+ , http
+
+ // if we're working on a GET request and we have data then we should append
+ // query string to end of URL and not post data
+ if ((o.type == 'jsonp' || method == 'GET') && data) {
+ url = urlappend(url, data)
+ data = null
+ }
+
+ if (o.type == 'jsonp') return handleJsonp(o, fn, err, url)
+
+ http = xhr()
+ http.open(method, url, true)
+ setHeaders(http, o)
+ setCredentials(http, o)
+ http.onreadystatechange = handleReadyState(http, fn, err)
+ o.before && o.before(http)
+ http.send(data)
+ return http
+ }
+
+ function Reqwest(o, fn) {
+ this.o = o
+ this.fn = fn
+
+ init.apply(this, arguments)
+ }
+
+ function setType(url) {
+ var m = url.match(/\.(json|jsonp|html|xml)(\?|$)/)
+ return m ? m[1] : 'js'
+ }
+
+ function init(o, fn) {
+
+ this.url = typeof o == 'string' ? o : o.url
+ this.timeout = null
+
+ // whether request has been fulfilled for purpose
+ // of tracking the Promises
+ this._fulfilled = false
+ // success handlers
+ this._fulfillmentHandlers = []
+ // error handlers
+ this._errorHandlers = []
+ // complete (both success and fail) handlers
+ this._completeHandlers = []
+ this._erred = false
+ this._responseArgs = {}
+
+ var self = this
+ , type = o.type || setType(this.url)
+
+ fn = fn || function () {}
+
+ if (o.timeout) {
+ this.timeout = setTimeout(function () {
+ self.abort()
+ }, o.timeout)
+ }
+
+ if (o.success) {
+ this._fulfillmentHandlers.push(function () {
+ o.success.apply(o, arguments)
+ })
+ }
+
+ if (o.error) {
+ this._errorHandlers.push(function () {
+ o.error.apply(o, arguments)
+ })
+ }
+
+ if (o.complete) {
+ this._completeHandlers.push(function () {
+ o.complete.apply(o, arguments)
+ })
+ }
+
+ function complete(resp) {
+ o.timeout && clearTimeout(self.timeout)
+ self.timeout = null
+ while (self._completeHandlers.length > 0) {
+ self._completeHandlers.shift()(resp)
}
}
- return false;
- };
-
- var old = context.bonzo;
- bonzo.noConflict = function () {
- context.bonzo = old;
- return this;
- };
- context['bonzo'] = bonzo;
-
-}(this);!function ($) {
-
- var b = bonzo;
- b.setQueryEngine($);
- $.ender(b);
- $.ender(b(), true);
- $.ender({
- create: function (node) {
- return $(b.create(node));
+
+ function success(resp) {
+ var r = resp.responseText
+ if (r) {
+ switch (type) {
+ case 'json':
+ try {
+ resp = win.JSON ? win.JSON.parse(r) : eval('(' + r + ')')
+ } catch (err) {
+ return error(resp, 'Could not parse JSON in response', err)
+ }
+ break;
+ case 'js':
+ resp = eval(r)
+ break;
+ case 'html':
+ resp = r
+ break;
+ case 'xml':
+ resp = resp.responseXML;
+ break;
+ }
+ }
+
+ self._responseArgs.resp = resp
+ self._fulfilled = true
+ fn(resp)
+ while (self._fulfillmentHandlers.length > 0) {
+ self._fulfillmentHandlers.shift()(resp)
+ }
+
+ complete(resp)
+ }
+
+ function error(resp, msg, t) {
+ self._responseArgs.resp = resp
+ self._responseArgs.msg = msg
+ self._responseArgs.t = t
+ self._erred = true
+ while (self._errorHandlers.length > 0) {
+ self._errorHandlers.shift()(resp, msg, t)
+ }
+ complete(resp)
+ }
+
+ this.request = getRequest(o, success, error)
}
+
+ Reqwest.prototype = {
+ abort: function () {
+ this.request.abort()
+ }
+
+ , retry: function () {
+ init.call(this, this.o, this.fn)
+ }
+
+ /**
+ * Small deviation from the Promises A CommonJs specification
+ * http://wiki.commonjs.org/wiki/Promises/A
+ */
+
+ /**
+ * `then` will execute upon successful requests
+ */
+ , then: function (success, fail) {
+ if (this._fulfilled) {
+ success(this._responseArgs.resp)
+ } else if (this._erred) {
+ fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
+ } else {
+ this._fulfillmentHandlers.push(success)
+ this._errorHandlers.push(fail)
+ }
+ return this
+ }
+
+ /**
+ * `always` will execute whether the request succeeds or fails
+ */
+ , always: function (fn) {
+ if (this._fulfilled || this._erred) {
+ fn(this._responseArgs.resp)
+ } else {
+ this._completeHandlers.push(fn)
+ }
+ return this
+ }
+
+ /**
+ * `fail` will execute when the request fails
+ */
+ , fail: function (fn) {
+ if (this._erred) {
+ fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
+ } else {
+ this._errorHandlers.push(fn)
+ }
+ return this
+ }
+ }
+
+ function reqwest(o, fn) {
+ return new Reqwest(o, fn)
+ }
+
+ // normalize newline variants according to spec -> CRLF
+ function normalize(s) {
+ return s ? s.replace(/\r?\n/g, '\r\n') : ''
+ }
+
+ function serial(el, cb) {
+ var n = el.name
+ , t = el.tagName.toLowerCase()
+ , optCb = function (o) {
+ // IE gives value="" even where there is no value attribute
+ // 'specified' ref: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-862529273
+ if (o && !o.disabled)
+ cb(n, normalize(o.attributes.value && o.attributes.value.specified ? o.value : o.text))
+ }
+
+ // don't serialize elements that are disabled or without a name
+ if (el.disabled || !n) return;
+
+ switch (t) {
+ case 'input':
+ if (!/reset|button|image|file/i.test(el.type)) {
+ var ch = /checkbox/i.test(el.type)
+ , ra = /radio/i.test(el.type)
+ , val = el.value;
+ // WebKit gives us "" instead of "on" if a checkbox has no value, so correct it here
+ (!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val))
+ }
+ break;
+ case 'textarea':
+ cb(n, normalize(el.value))
+ break;
+ case 'select':
+ if (el.type.toLowerCase() === 'select-one') {
+ optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null)
+ } else {
+ for (var i = 0; el.length && i < el.length; i++) {
+ el.options[i].selected && optCb(el.options[i])
+ }
+ }
+ break;
+ }
+ }
+
+ // collect up all form elements found from the passed argument elements all
+ // the way down to child elements; pass a '