Browse code

Moved themes to .themes to get it out of the way. Updated Rakefile to support .themes dir and remove duplication. Improved deploy task. Renamed init_deploy to cofig_deploy and rewrote it to update configurations in the Rakefile for easier deploy use

Brandon Mathis authored on 29/06/2011 at 18:01:06
Showing 227 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,73 @@
0
+#
1
+# Author: Brandon Mathis
2
+# Based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb
3
+#
4
+# Outputs a string with a given attribution as a quote
5
+#
6
+#   {% blockquote Bobby Willis http://google.com/blah the search for bobby's mom %}
7
+#   Wheeee!
8
+#   {% endblockquote %}
9
+#   ...
10
+#   <blockquote>
11
+#     <p>Wheeee!</p>
12
+#     <footer>
13
+#     <strong>Bobby Willis</strong><cite><a href="http://google.com/blah">The Search For Bobby's Mom</a>
14
+#   </blockquote>
15
+#
16
+require './_plugins/titlecase.rb'
17
+module Jekyll
18
+
19
+  class Blockquote < Liquid::Block
20
+    FullCiteWithTitle = /([\w\s]+)(https?:\/\/)(\S+\s)([\w\s]+)/i
21
+    FullCite = /([\w\s]+)(https?:\/\/)(\S+)/i
22
+    Author =  /([\w\s]+)/
23
+
24
+    def initialize(tag_name, markup, tokens)
25
+      @by = nil
26
+      @source = nil
27
+      @title = nil
28
+      if markup =~ FullCiteWithTitle
29
+        @by = $1
30
+        @source = $2 + $3
31
+        @title = $4.titlecase
32
+      elsif markup =~ FullCite
33
+        @by = $1
34
+        @source = $2 + $3
35
+      elsif markup =~ Author
36
+        @by = $1
37
+      end
38
+      super
39
+    end
40
+
41
+    def render(context)
42
+      output = paragraphize(super.map(&:strip).join)
43
+      author = "<strong>#{@by.strip}</strong>"
44
+      if @source
45
+        url = @source.match(/https?:\/\/(.+)/)[1].split('/')
46
+        parts = []
47
+        url.each do |part|
48
+          if (parts + [part]).join('/').length < 32
49
+            parts << part
50
+          end
51
+        end
52
+        source = parts.join('/')
53
+        source << '/&hellip;' unless source == @source
54
+      end
55
+      cite = "<cite><a href='#{@source}'>#{(@title || source)}</a></cite>"
56
+      reply = if @by.nil?
57
+        output
58
+      elsif !@source.nil?
59
+        "#{output}<footer>#{author + cite}</footer>"
60
+      else
61
+        "#{output}<footer>#{author}</footer>"
62
+      end
63
+      "<blockquote>#{reply}</blockquote>"
64
+    end
65
+
66
+    def paragraphize(input)
67
+      "<p>#{input.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>"
68
+    end
69
+  end
70
+end
71
+
72
+Liquid::Template.register_tag('blockquote', Jekyll::Blockquote)
0 73
new file mode 100644
... ...
@@ -0,0 +1,161 @@
0
+# Jekyll category page generator.
1
+# http://recursive-design.com/projects/jekyll-plugins/
2
+#
3
+# Version: 0.1.4 (201101061053)
4
+#
5
+# Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
6
+# Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
7
+#
8
+# A generator that creates category pages for jekyll sites.
9
+#
10
+# To use it, simply drop this script into the _plugins directory of your Jekyll site. You should
11
+# also create a file called 'category_index.html' in the _layouts directory of your jekyll site
12
+# with the following contents (note: you should remove the leading '# ' characters):
13
+#
14
+# ================================== COPY BELOW THIS LINE ==================================
15
+# ---
16
+# layout: default
17
+# ---
18
+#
19
+# <h1 class="category">{{ page.title }}</h1>
20
+# <ul class="posts">
21
+# {% for post in site.categories[page.category] %}
22
+#     <div>{{ post.date | date_to_html_string }}</div>
23
+#     <h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
24
+#     <div class="categories">Filed under {{ post.categories | category_links }}</div>
25
+# {% endfor %}
26
+# </ul>
27
+# ================================== COPY ABOVE THIS LINE ==================================
28
+#
29
+# You can alter the _layout_ setting if you wish to use an alternate layout, and obviously you
30
+# can change the HTML above as you see fit.
31
+#
32
+# When you compile your jekyll site, this plugin will loop through the list of categories in your
33
+# site, and use the layout above to generate a page for each one with a list of links to the
34
+# individual posts.
35
+#
36
+# Included filters :
37
+# - category_links:      Outputs the list of categories as comma-separated <a> links.
38
+# - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling.
39
+#
40
+# Available _config.yml settings :
41
+# - category_dir:          The subfolder to build category pages in (default is 'categories').
42
+# - category_title_prefix: The string used before the category name in the page title (default is
43
+#                          'Category: ').
44
+module Jekyll
45
+
46
+
47
+  # The CategoryIndex class creates a single category page for the specified category.
48
+  class CategoryIndex < Page
49
+
50
+    # Initializes a new CategoryIndex.
51
+    #
52
+    #  +base+         is the String path to the <source>.
53
+    #  +category_dir+ is the String path between <source> and the category folder.
54
+    #  +category+     is the category currently being processed.
55
+    def initialize(site, base, category_dir, category)
56
+      @site = site
57
+      @base = base
58
+      @dir  = category_dir
59
+      @name = 'index.html'
60
+      self.process(@name)
61
+      # Read the YAML data from the layout page.
62
+      self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
63
+      self.data['category']    = category
64
+      # Set the title for this page.
65
+      title_prefix             = site.config['category_title_prefix'] || 'Category: '
66
+      self.data['title']       = "#{title_prefix}#{category}"
67
+      # Set the meta-description for this page.
68
+      meta_description_prefix  = site.config['category_meta_description_prefix'] || 'Category: '
69
+      self.data['description'] = "#{meta_description_prefix}#{category}"
70
+    end
71
+
72
+  end
73
+
74
+
75
+  # The Site class is a built-in Jekyll class with access to global site config information.
76
+  class Site
77
+
78
+    # Creates an instance of CategoryIndex for each category page, renders it, and
79
+    # writes the output to a file.
80
+    #
81
+    #  +category_dir+ is the String path to the category folder.
82
+    #  +category+     is the category currently being processed.
83
+    def write_category_index(category_dir, category)
84
+      index = CategoryIndex.new(self, self.source, category_dir, category)
85
+      index.render(self.layouts, site_payload)
86
+      index.write(self.dest)
87
+      # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
88
+      self.pages << index
89
+    end
90
+
91
+    # Loops through the list of category pages and processes each one.
92
+    def write_category_indexes
93
+      if self.layouts.key? 'category_index'
94
+        dir = self.config['category_dir'] || 'categories'
95
+        self.categories.keys.each do |category|
96
+          self.write_category_index(File.join(dir, category.gsub(/_|\W/, '-')), category)
97
+        end
98
+
99
+      # Throw an exception if the layout couldn't be found.
100
+      else
101
+        throw "No 'category_index' layout found."
102
+      end
103
+    end
104
+
105
+  end
106
+
107
+
108
+  # Jekyll hook - the generate method is called by jekyll, and generates all of the category pages.
109
+  class GenerateCategories < Generator
110
+    safe true
111
+    priority :low
112
+
113
+    def generate(site)
114
+      site.write_category_indexes
115
+    end
116
+
117
+  end
118
+
119
+
120
+  # Adds some extra filters used during the category creation process.
121
+  module Filters
122
+
123
+    # Outputs a list of categories as comma-separated <a> links. This is used
124
+    # to output the category list for each post on a category page.
125
+    #
126
+    #  +categories+ is the list of categories to format.
127
+    #
128
+    # Returns string
129
+    #
130
+    def category_links(categories)
131
+      categories = categories.sort!.map do |item|
132
+        "<a class='category' href='/#{@context.registers[:site].config['category_dir']}/#{item.gsub(/_|\W/, '-')}'/>#{item}</a>"
133
+      end
134
+
135
+      case categories.length
136
+      when 0
137
+        ""
138
+      when 1
139
+        categories[0].to_s
140
+      else
141
+        "#{categories[0...-1].join(', ')}, #{categories[-1]}"
142
+      end
143
+    end
144
+
145
+    # Outputs the post.date as formatted html, with hooks for CSS styling.
146
+    #
147
+    #  +date+ is the date object to format as HTML.
148
+    #
149
+    # Returns string
150
+    def date_to_html_string(date)
151
+      result = '<span class="month">' + date.strftime('%b').upcase + '</span> '
152
+      result += date.strftime('<span class="day">%d</span> ')
153
+      result += date.strftime('<span class="year">%Y</span> ')
154
+      result
155
+    end
156
+
157
+  end
158
+
159
+end
160
+
0 161
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+system "compass compile --css-dir source/stylesheets"
0 1
new file mode 100644
... ...
@@ -0,0 +1,75 @@
0
+#custom filters for Octopress
1
+
2
+module OctopressFilters
3
+  # Used on the blog index to split posts on the <!--more--> marker
4
+  def exerpt(input)
5
+    if input.index(/<!--\s*more\s*-->/i)
6
+      input.split(/<!--\s*more\s*-->/i)[0]
7
+    else
8
+      input
9
+    end
10
+  end
11
+
12
+  # Summary is used on the Archive pages to return the first block of content from a post.
13
+  def summary(input)
14
+    if input.index(/\n\n/)
15
+      input.split(/\n\n/)[0]
16
+    else
17
+      input
18
+    end
19
+  end
20
+
21
+  # Replaces relative urls with full urls
22
+  def full_urls(input, url='')
23
+    input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]+)/ do
24
+      $1+url+$3
25
+    end
26
+  end
27
+
28
+  # Returns a url without the http:// for use in as a search modifier eg. 'search terms site:website.com'
29
+  def search_url(input)
30
+    input.gsub /(https?:\/\/)(\S+)/ do
31
+      $2
32
+    end
33
+  end
34
+
35
+  # replaces primes with smartquotes using RubyPants
36
+  def smart_quotes(input)
37
+    require 'rubypants'
38
+    RubyPants.new(input).to_html
39
+  end
40
+
41
+  # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
42
+  def titlecase(input)
43
+    input.titlecase
44
+  end
45
+
46
+  # Returns a datetime if the input is a string
47
+  def datetime(date)
48
+    if date.class == String
49
+      date = Time.parse(date)
50
+    end
51
+    date
52
+  end
53
+
54
+  # Returns an ordidinal date eg July 22 2007 -> July 22nd 2007
55
+  def ordinalize(date)
56
+    date = datetime(date)
57
+    "#{date.strftime('%b')} #{ordinal(date.strftime('%e').to_i)}, #{date.strftime('%Y')}"
58
+  end
59
+
60
+  # Returns an ordinal number. 13 -> 13th, 21 -> 21st etc.
61
+  def ordinal(number)
62
+    if (11..13).include?(number.to_i % 100)
63
+      "#{number}<span>th</span>"
64
+    else
65
+      case number.to_i % 10
66
+      when 1; "#{number}<span>st</span>"
67
+      when 2; "#{number}<span>nd</span>"
68
+      when 3; "#{number}<span>rd</span>"
69
+      else    "#{number}<span>th</span>"
70
+      end
71
+    end
72
+  end
73
+end
74
+Liquid::Template.register_filter OctopressFilters
0 75
new file mode 100644
... ...
@@ -0,0 +1,94 @@
0
+# A Liquid tag for Jekyll sites that allows embedding Gists and showing code for non-JavaScript enabled browsers and readers.
1
+# by: Brandon Tilly
2
+# Source URL: https://gist.github.com/1027674
3
+# Post http://brandontilley.com/2011/01/31/gist-tag-for-jekyll.html
4
+#
5
+# Example usage: {% gist 1027674 gist_tag.rb %} //embeds a gist for this plugin
6
+
7
+require 'cgi'
8
+require 'digest/md5'
9
+require 'net/https'
10
+require 'uri'
11
+
12
+module Jekyll
13
+  class GistTag < Liquid::Tag
14
+    def initialize(tag_name, text, token)
15
+      super
16
+      @text           = text
17
+      @cache_disabled = false
18
+      @cache_folder   = File.expand_path "../_gist_cache", File.dirname(__FILE__)
19
+      FileUtils.mkdir_p @cache_folder
20
+    end
21
+
22
+    def render(context)
23
+      if parts = @text.match(/([\d]*) (.*)/)
24
+        gist, file = parts[1].strip, parts[2].strip
25
+        script_url = script_url_for gist, file
26
+        code       = get_cached_gist(gist, file) || get_gist_from_web(gist, file)
27
+        html_output_for script_url, code
28
+      else
29
+        ""
30
+      end
31
+    end
32
+
33
+    def html_output_for(script_url, code)
34
+      code = CGI.escapeHTML code
35
+      <<-HTML
36
+<script src='#{script_url}'></script>
37
+<noscript><pre><code>#{code}</code></pre></noscript>
38
+      HTML
39
+    end
40
+
41
+    def script_url_for(gist_id, filename)
42
+      "https://gist.github.com/#{gist_id}.js?file=#{filename}"
43
+    end
44
+
45
+    def get_gist_url_for(gist, file)
46
+      "https://raw.github.com/gist/#{gist}/#{file}"
47
+    end
48
+
49
+    def cache(gist, file, data)
50
+      cache_file = get_cache_file_for gist, file
51
+      File.open(cache_file, "w") do |io|
52
+        io.write data
53
+      end
54
+    end
55
+
56
+    def get_cached_gist(gist, file)
57
+      return nil if @cache_disabled
58
+      cache_file = get_cache_file_for gist, file
59
+      File.read cache_file if File.exist? cache_file
60
+    end
61
+
62
+    def get_cache_file_for(gist, file)
63
+      bad_chars = /[^a-zA-Z0-9\-_.]/
64
+      gist      = gist.gsub bad_chars, ''
65
+      file      = file.gsub bad_chars, ''
66
+      md5       = Digest::MD5.hexdigest "#{gist}-#{file}"
67
+      File.join @cache_folder, "#{gist}-#{file}-#{md5}.cache"
68
+    end
69
+
70
+    def get_gist_from_web(gist, file)
71
+      gist_url          = get_gist_url_for gist, file
72
+      raw_uri           = URI.parse gist_url
73
+      https             = Net::HTTP.new raw_uri.host, raw_uri.port
74
+      https.use_ssl     = true
75
+      https.verify_mode = OpenSSL::SSL::VERIFY_NONE
76
+      request           = Net::HTTP::Get.new raw_uri.request_uri
77
+      data              = https.request request
78
+      data              = data.body
79
+      cache gist, file, data unless @cache_disabled
80
+      data
81
+    end
82
+  end
83
+
84
+  class GistTagNoCache < GistTag
85
+    def initialize(tag_name, text, token)
86
+      super
87
+      @cache_disabled = true
88
+    end
89
+  end
90
+end
91
+
92
+Liquid::Template.register_tag('gist', Jekyll::GistTag)
93
+Liquid::Template.register_tag('gistnocache', Jekyll::GistTagNoCache)
0 94
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+module Jekyll
1
+  require 'haml'
2
+  class HamlConverter < Converter
3
+    safe true
4
+    priority :low
5
+
6
+    def matches(ext)
7
+      ext =~ /haml/i
8
+    end
9
+
10
+    def output_ext(ext)
11
+      ".html"
12
+    end
13
+
14
+    def convert(content)
15
+      begin
16
+        engine = Haml::Engine.new(content)
17
+        engine.render
18
+      rescue StandardError => e
19
+          puts "!!! HAML Error: " + e.message
20
+      end
21
+    end
22
+  end
23
+end
0 24
new file mode 100644
... ...
@@ -0,0 +1,40 @@
0
+require 'pathname'
1
+
2
+module Jekyll
3
+
4
+  class IncludeCodeTag < Liquid::Tag
5
+    def initialize(tag_name, file, tokens)
6
+      super
7
+      @file = file.strip
8
+    end
9
+
10
+    def render(context)
11
+      code_dir = (context.registers[:site].config['code_dir'] || 'downloads/code')
12
+      code_path = (Pathname.new(context.registers[:site].source) + code_dir).expand_path
13
+      file = code_path + @file
14
+
15
+      if File.symlink?(code_path)
16
+        return "Code directory '#{code_path}' cannot be a symlink"
17
+      end
18
+
19
+      unless file.file?
20
+        return "File #{file} could not be found"
21
+      end
22
+
23
+      Dir.chdir(code_path) do
24
+        code = file.read
25
+        file_type = file.extname
26
+        url = "#{context.registers[:site].config['url']}/#{code_dir}/#{@file}"
27
+        source = "<figure><figcaption><span>#{file.basename}</span><a href='#{url}'>download</a></figcaption>\n"
28
+        source += "{% highlight #{file_type} %}\n" + code + "\n{% endhighlight %}</figure>"
29
+        partial = Liquid::Template.parse(source)
30
+        context.stack do
31
+          partial.render(context)
32
+        end
33
+      end
34
+    end
35
+  end
36
+
37
+end
38
+
39
+Liquid::Template.register_tag('include_code', Jekyll::IncludeCodeTag)
0 40
new file mode 100644
... ...
@@ -0,0 +1,31 @@
0
+require 'pathname'
1
+
2
+module Jekyll
3
+
4
+  class IncludePartialTag < Liquid::Tag
5
+    def initialize(tag_name, file, tokens)
6
+      super
7
+      @file = file.strip
8
+    end
9
+
10
+    def render(context)
11
+      file_dir = (context.registers[:site].source || 'source')
12
+      file_path = Pathname.new(file_dir).expand_path
13
+      file = file_path + @file
14
+
15
+      unless file.file?
16
+        return "File #{file} could not be found"
17
+      end
18
+
19
+      Dir.chdir(file_path) do
20
+        partial = Liquid::Template.parse(file.read)
21
+        context.stack do
22
+          partial.render(context)
23
+        end
24
+      end
25
+    end
26
+  end
27
+end
28
+
29
+Liquid::Template.register_tag('include_partial', Jekyll::IncludePartialTag)
30
+
0 31
new file mode 100644
... ...
@@ -0,0 +1,42 @@
0
+#
1
+# Author: Brandon Mathis
2
+# Based on the sematic pullquote technique by Maykel Loomans at http://miekd.com/articles/pull-quotes-with-html5-and-css/
3
+#
4
+# Outputs a span with a data-pullquote attribute set from the marked pullquote. Example:
5
+#
6
+#   {% pullquote %}
7
+#     When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful.
8
+#     It is important to note, {" pullquotes are merely visual in presentation and should not appear twice in the text. "} That is why it is prefered
9
+#     to use a CSS only technique for styling pullquotes.
10
+#   {% endpullquote %}
11
+#   ...will output...
12
+#   <p>
13
+#     <span data-pullquote="pullquotes are merely visual in presentation and should not appear twice in the text.">
14
+#       When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful.
15
+#       It is important to note, pullquotes are merely visual in presentation and should not appear twice in the text. This is why a CSS only approach #       for styling pullquotes is prefered.
16
+#     </span>
17
+#   </p>
18
+#
19
+
20
+module Jekyll
21
+
22
+  class PullquoteTag < Liquid::Block
23
+    PullQuoteMarkup = /\{(.+)\}/i
24
+
25
+    def initialize(tag_name, markup, tokens)
26
+      super
27
+    end
28
+
29
+    def render(context)
30
+      output = super
31
+      if output.join =~ /\{"\s*(.+)\s*"\}/
32
+        @quote = $1
33
+        "<span class='has-pullquote' data-pullquote='#{@quote}'>#{output.join.gsub(/\{"\s*|\s*"\}/, '')}</span>"
34
+      else
35
+        return "Surround your pullquote like this {! text to be quoted !}"
36
+      end
37
+    end
38
+  end
39
+end
40
+
41
+Liquid::Template.register_tag('pullquote', Jekyll::PullquoteTag)
0 42
new file mode 100644
... ...
@@ -0,0 +1,30 @@
0
+#
1
+# Author: Raimonds Simanovskis, http://blog.rayapps.com/
2
+# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb
3
+#
4
+
5
+require 'fileutils'
6
+require 'digest/md5'
7
+
8
+PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__)
9
+FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
10
+
11
+Jekyll::HighlightBlock.class_eval do
12
+  def render_pygments(context, code)
13
+    if defined?(PYGMENTS_CACHE_DIR)
14
+      path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html")
15
+      if File.exist?(path)
16
+        highlighted_code = File.read(path)
17
+      else
18
+        highlighted_code = Albino.new(code, @lang).to_s(@options)
19
+        File.open(path, 'w') {|f| f.print(highlighted_code) }
20
+      end
21
+    else
22
+      highlighted_code = Albino.new(code, @lang).to_s(@options)
23
+    end
24
+    output = add_code_tags(highlighted_code, @lang)
25
+    output = context["pygments_prefix"] + output if context["pygments_prefix"]
26
+    output = output + context["pygments_suffix"] if context["pygments_suffix"]
27
+    output
28
+  end
29
+end
0 30
new file mode 100644
... ...
@@ -0,0 +1,308 @@
0
+# Sitemap.xml Generator is a Jekyll plugin that generates a sitemap.xml file by
1
+# traversing all of the available posts and pages.
2
+# 
3
+# How To Use:
4
+#   1) Copy source file into your _plugins folder within your Jekyll project.
5
+#   2) Change modify the url variable in _config.yml to reflect your domain name.
6
+#   3) Run Jekyll: jekyll --server to re-generate your site.
7
+#
8
+# Variables:
9
+#   * Change SITEMAP_FILE_NAME if you want your sitemap to be called something
10
+#     other than sitemap.xml.
11
+#   * Change the PAGES_INCLUDE_POSTS list to include any pages that are looping
12
+#     through your posts (e.g. "index.html", "archive.html", etc.). This will
13
+#     ensure that right after you make a new post, the last modified date will
14
+#     be updated to reflect the new post.
15
+#   * A sitemap.xml should be included in your _site folder.
16
+#   * If there are any files you don't want included in the sitemap, add them
17
+#     to the EXCLUDED_FILES list. The name should match the name of the source
18
+#     file.
19
+#   * If you want to include the optional changefreq and priority attributes,
20
+#     simply include custom variables in the YAML Front Matter of that file.
21
+#     The names of these custom variables are defined below in the
22
+#     CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME and PRIORITY_CUSTOM_VARIABLE_NAME
23
+#     constants.
24
+#
25
+# Notes:
26
+#   * The last modified date is determined by the latest from the following:
27
+#     system modified date of the page or post, system modified date of
28
+#     included layout, system modified date of included layout within that
29
+#     layout, ...
30
+# 
31
+# Author: Michael Levin
32
+# Site: http://www.kinnetica.com
33
+# Distributed Under A Creative Commons License
34
+#   - http://creativecommons.org/licenses/by/3.0/
35
+# 
36
+# Modified for Octopress by John W. Long
37
+#
38
+require 'rexml/document'
39
+
40
+module Jekyll
41
+
42
+  # Change SITEMAP_FILE_NAME if you would like your sitemap file
43
+  # to be called something else
44
+  SITEMAP_FILE_NAME = "sitemap.xml"
45
+
46
+  # Any files to exclude from being included in the sitemap.xml
47
+  EXCLUDED_FILES = ["atom.xml"]
48
+
49
+  # Any files that include posts, so that when a new post is added, the last
50
+  # modified date of these pages should take that into account
51
+  PAGES_INCLUDE_POSTS = ["index.html"]
52
+
53
+  # Custom variable names for changefreq and priority elements
54
+  # These names are used within the YAML Front Matter of pages or posts
55
+  # for which you want to include these properties
56
+  CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME = "change_frequency"
57
+  PRIORITY_CUSTOM_VARIABLE_NAME = "priority"
58
+
59
+  class Post
60
+    attr_accessor :name
61
+
62
+    def full_path_to_source
63
+      File.join(@base, @name)
64
+    end
65
+
66
+    def location_on_server
67
+      "#{site.config['url']}#{url}"
68
+    end
69
+  end
70
+
71
+  class Page
72
+    attr_accessor :name
73
+
74
+    def full_path_to_source
75
+      File.join(@base, @dir, @name)
76
+    end
77
+
78
+    def location_on_server
79
+      location = "#{site.config['url']}#{@dir}#{url}"
80
+      location.gsub(/index.html$/, "")
81
+    end
82
+  end
83
+
84
+  class Layout
85
+    def full_path_to_source
86
+      File.join(@base, @name)
87
+    end
88
+  end
89
+
90
+  # Recover from strange exception when starting server without --auto
91
+  class SitemapFile < StaticFile
92
+    def write(dest)
93
+      begin
94
+        super(dest)
95
+      rescue
96
+      end
97
+
98
+      true
99
+    end
100
+  end
101
+
102
+  class SitemapGenerator < Generator
103
+
104
+    # Valid values allowed by sitemap.xml spec for change frequencies
105
+    VALID_CHANGE_FREQUENCY_VALUES = ["always", "hourly", "daily", "weekly",
106
+      "monthly", "yearly", "never"]
107
+
108
+    # Goes through pages and posts and generates sitemap.xml file
109
+    #
110
+    # Returns nothing
111
+    def generate(site)
112
+      sitemap = REXML::Document.new << REXML::XMLDecl.new("1.0", "UTF-8")
113
+
114
+      urlset = REXML::Element.new "urlset"
115
+      urlset.add_attribute("xmlns",
116
+        "http://www.sitemaps.org/schemas/sitemap/0.9")
117
+
118
+      @last_modified_post_date = fill_posts(site, urlset)
119
+      fill_pages(site, urlset)
120
+
121
+      sitemap.add_element(urlset)
122
+
123
+      # File I/O: create sitemap.xml file and write out pretty-printed XML
124
+      file = File.new(File.join(site.dest, SITEMAP_FILE_NAME), "w")
125
+      formatter = REXML::Formatters::Pretty.new(4)
126
+      formatter.compact = true
127
+      formatter.write(sitemap, file)
128
+      file.close
129
+
130
+      # Keep the sitemap.xml file from being cleaned by Jekyll
131
+      site.static_files << Jekyll::SitemapFile.new(site, site.dest, "/", SITEMAP_FILE_NAME)
132
+    end
133
+
134
+    # Create url elements for all the posts and find the date of the latest one
135
+    #
136
+    # Returns last_modified_date of latest post
137
+    def fill_posts(site, urlset)
138
+      last_modified_date = nil
139
+      site.posts.each do |post|
140
+        if !excluded?(post.name)
141
+          url = fill_url(site, post)
142
+          urlset.add_element(url)
143
+        end
144
+
145
+        path = post.full_path_to_source
146
+        date = File.mtime(path)
147
+        last_modified_date = date if last_modified_date == nil or date > last_modified_date
148
+      end
149
+
150
+      last_modified_date
151
+    end
152
+
153
+    # Create url elements for all the normal pages and find the date of the
154
+    # index to use with the pagination pages
155
+    #
156
+    # Returns last_modified_date of index page
157
+    def fill_pages(site, urlset)
158
+      site.pages.each do |page|
159
+        if !excluded?(page.name)
160
+          path = page.full_path_to_source
161
+          if File.exists?(path)
162
+            url = fill_url(site, page)
163
+            urlset.add_element(url)
164
+          end
165
+        end
166
+      end
167
+    end
168
+
169
+    # Fill data of each URL element: location, last modified,
170
+    # change frequency (optional), and priority.
171
+    #
172
+    # Returns url REXML::Element
173
+    def fill_url(site, page_or_post)
174
+      url = REXML::Element.new "url"
175
+
176
+      loc = fill_location(page_or_post)
177
+      url.add_element(loc)
178
+
179
+      lastmod = fill_last_modified(site, page_or_post)
180
+      url.add_element(lastmod) if lastmod
181
+
182
+      if (page_or_post.data[CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME])
183
+        change_frequency =
184
+          page_or_post.data[CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME].downcase
185
+
186
+        if (valid_change_frequency?(change_frequency))
187
+          changefreq = REXML::Element.new "changefreq"
188
+          changefreq.text = change_frequency
189
+          url.add_element(changefreq)
190
+        else
191
+          puts "ERROR: Invalid Change Frequency In #{page_or_post.name}"
192
+        end
193
+      end
194
+
195
+      if (page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME])
196
+        priority_value = page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME]
197
+        if valid_priority?(priority_value)
198
+          priority = REXML::Element.new "priority"
199
+          priority.text = page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME]
200
+          url.add_element(priority)
201
+        else
202
+          puts "ERROR: Invalid Priority In #{page_or_post.name}"
203
+        end
204
+      end
205
+
206
+      url
207
+    end
208
+
209
+    # Get URL location of page or post
210
+    #
211
+    # Returns the location of the page or post
212
+    def fill_location(page_or_post)
213
+      loc = REXML::Element.new "loc"
214
+      loc.text = page_or_post.location_on_server
215
+
216
+      loc
217
+    end
218
+
219
+    # Fill lastmod XML element with the last modified date for the page or post.
220
+    #
221
+    # Returns lastmod REXML::Element or nil
222
+    def fill_last_modified(site, page_or_post)
223
+      path = page_or_post.full_path_to_source
224
+
225
+      lastmod = REXML::Element.new "lastmod"
226
+      date = File.mtime(path)
227
+      latest_date = find_latest_date(date, site, page_or_post)
228
+
229
+      if @last_modified_post_date == nil
230
+        # This is a post
231
+        lastmod.text = latest_date.iso8601
232
+      else
233
+        # This is a page
234
+        if posts_included?(page_or_post.name)
235
+          # We want to take into account the last post date
236
+          final_date = greater_date(latest_date, @last_modified_post_date)
237
+          lastmod.text = final_date.iso8601
238
+        else
239
+          lastmod.text = latest_date.iso8601
240
+        end
241
+      end
242
+      lastmod
243
+    end
244
+
245
+    # Go through the page/post and any implemented layouts and get the latest
246
+    # modified date
247
+    #
248
+    # Returns formatted output of latest date of page/post and any used layouts
249
+    def find_latest_date(latest_date, site, page_or_post)
250
+      layouts = site.layouts
251
+      layout = layouts[page_or_post.data["layout"]]
252
+      while layout
253
+        path = layout.full_path_to_source
254
+        date = File.mtime(path)
255
+
256
+        latest_date = date if (date > latest_date)
257
+
258
+        layout = layouts[layout.data["layout"]]
259
+      end
260
+
261
+      latest_date
262
+    end
263
+
264
+    # Which of the two dates is later
265
+    #
266
+    # Returns latest of two dates
267
+    def greater_date(date1, date2)
268
+      if (date1 >= date2)
269
+        date1
270
+      else
271
+        date2
272
+      end
273
+    end
274
+
275
+    # Is the page or post listed as something we want to exclude?
276
+    #
277
+    # Returns boolean
278
+    def excluded?(name)
279
+      EXCLUDED_FILES.include? name
280
+    end
281
+
282
+    def posts_included?(name)
283
+      PAGES_INCLUDE_POSTS.include? name
284
+    end
285
+
286
+    # Is the change frequency value provided valid according to the spec
287
+    #
288
+    # Returns boolean
289
+    def valid_change_frequency?(change_frequency)
290
+      VALID_CHANGE_FREQUENCY_VALUES.include? change_frequency
291
+    end
292
+
293
+    # Is the priority value provided valid according to the spec
294
+    #
295
+    # Returns boolean
296
+    def valid_priority?(priority)
297
+      begin
298
+        priority_val = Float(priority)
299
+        return true if priority_val >= 0.0 and priority_val <= 1.0
300
+      rescue ArgumentError
301
+      end
302
+
303
+      false
304
+    end
305
+  end
306
+end
307
+
0 308
new file mode 100644
... ...
@@ -0,0 +1,36 @@
0
+class String
1
+  def titlecase
2
+    small_words = %w(a an and as at but by en for if in of on or the to v v. via vs vs.)
3
+
4
+    x = split(" ").map do |word|
5
+      # note: word could contain non-word characters!
6
+      # downcase all small_words, capitalize the rest
7
+      small_words.include?(word.gsub(/\W/, "").downcase) ? word.downcase! : word.smart_capitalize!
8
+      word
9
+    end
10
+    # capitalize first and last words
11
+    x.first.to_s.smart_capitalize!
12
+    x.last.to_s.smart_capitalize!
13
+    # small words after colons are capitalized
14
+    x.join(" ").gsub(/:\s?(\W*#{small_words.join("|")}\W*)\s/) { ": #{$1.smart_capitalize} " }
15
+  end
16
+
17
+  def titlecase!
18
+    replace(titlecase)
19
+  end
20
+
21
+  def smart_capitalize
22
+    # ignore any leading crazy characters and capitalize the first real character
23
+    if self =~ /^['"\(\[']*([a-z])/
24
+      i = index($1)
25
+      x = self[i,self.length]
26
+      # word with capitals and periods mid-word are left alone
27
+      self[i,1] = self[i,1].upcase unless x =~ /[A-Z]/ or x =~ /\.\w+/
28
+    end
29
+    self
30
+  end
31
+
32
+  def smart_capitalize!
33
+    replace(smart_capitalize)
34
+  end
35
+end
0 36
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+@import "base/utilities";
1
+@import "base/solarized";
2
+@import "base/theme";
3
+@import "base/layout";
4
+@import "base/typography";
0 5
new file mode 100644
... ...
@@ -0,0 +1,7 @@
0
+@import "partials/header";
1
+@import "partials/navigation";
2
+@import "partials/blog";
3
+@import "partials/syntax";
4
+@import "partials/archive";
5
+@import "partials/sidebar";
6
+@import "partials/footer";
0 7
new file mode 100644
... ...
@@ -0,0 +1,134 @@
0
+$max-width: 1200px !default;
1
+
2
+// Padding used for layout margins
3
+$pad-min: 18px !default;
4
+$pad-narrow: 25px !default;
5
+$pad-medium: 35px !default;
6
+$pad-wide: 55px !default;
7
+
8
+// Sidebar widths used in media queries
9
+$sidebar-width-medium: 240px !default;
10
+$sidebar-pad-medium: 15px !default;
11
+$sidebar-pad-wide: 20px !default;
12
+$sidebar-width-wide: 300px !default;
13
+
14
+.group { @include pie-clearfix; }
15
+
16
+body {
17
+  -webkit-text-size-adjust: none;
18
+  max-width: $max-width;
19
+  position: relative;
20
+  margin: 0 auto;
21
+  > header, > nav, > footer, #articles > article, #articles > nav {
22
+    @extend .group;
23
+    padding-left: $pad-min;
24
+    padding-right: $pad-min;
25
+    @media only screen and (min-width: 480px) {
26
+      padding-left: $pad-narrow;
27
+      padding-right: $pad-narrow;
28
+    }
29
+    @media only screen and (min-width: 768px) {
30
+      padding-left: $pad-medium;
31
+      padding-right: $pad-medium;
32
+    }
33
+    @media only screen and (min-width: 992px) {
34
+      padding-left: $pad-wide;
35
+      padding-right: $pad-wide;
36
+    }
37
+  }
38
+  > header {
39
+    font-size: 1em;
40
+    padding-top: 1.5em;
41
+    padding-bottom: 1.5em;
42
+  }
43
+}
44
+
45
+.toggle-sidebar { display: none; }
46
+#articles { width: 100%;
47
+  + aside {
48
+    float: none;
49
+    padding: 0 $pad-min 1px;
50
+    background-color: $sidebar-bg;
51
+    border-top: 1px solid $sidebar-border;
52
+  }
53
+}
54
+
55
+@media only screen and (min-width: 550px) {
56
+  body > header { font-size: 1em; }
57
+}
58
+@media only screen and (min-width: 768px) {
59
+  body { -webkit-text-size-adjust: auto; }
60
+  body > header { font-size: 1.2em; }
61
+  body > nav {
62
+    + div {
63
+      @extend .group;
64
+      padding: 0;
65
+      margin: 0 auto;
66
+      > div {
67
+        @extend .group;
68
+        margin-right: $sidebar-width-medium;
69
+      }
70
+    }
71
+  }
72
+  #articles {
73
+    padding-top: $pad-medium/2;
74
+    padding-bottom: $pad-medium/2;
75
+    float: left;
76
+    + aside {
77
+      width: $sidebar-width-medium - $sidebar-pad-medium*2;
78
+      padding: 0 $sidebar-pad-medium $sidebar-pad-medium;
79
+      background: none;
80
+      float: left;
81
+      margin: 0 -100% 0 0;
82
+    }
83
+  }
84
+  body > div > div { position: relative; }
85
+
86
+  .collapse-sidebar {
87
+    > div > div { margin-right: 10px; }
88
+    #articles + aside {
89
+      display: none;
90
+    }
91
+    .toggle-sidebar {
92
+      right: -1px;
93
+      background-color: $sidebar-bg;
94
+      border-right-width: 0;
95
+      text-indent: 2px;
96
+      border-left: 1px solid $sidebar-border;
97
+      @include border-bottom-right-radius(0);
98
+      @include border-bottom-left-radius(.3em);
99
+      @include link-colors(#aaa, #888);
100
+    }
101
+  }
102
+
103
+  .toggle-sidebar {
104
+    outline: none;
105
+    position: absolute; right: -21px; top: 0;
106
+    width: 20px;
107
+    font-size: 1.2em;
108
+    line-height: 1.1em;
109
+    padding-bottom: .1em;
110
+    text-indent: -1px;
111
+    text-decoration: none;
112
+    @include link-colors(#ccc, #999);
113
+    @include border-bottom-right-radius(.3em);
114
+    text-align: center;
115
+    background: $main-bg;
116
+    border-bottom: 1px solid $sidebar-border;
117
+    border-right: 1px solid $sidebar-border;
118
+    display: inline-block;
119
+  }
120
+}
121
+
122
+@media only screen and (min-width: 992px) {
123
+  body > header { font-size: 1.3em; }
124
+  body > nav + div > div { margin-right: $sidebar-width-wide; }
125
+  #articles {
126
+    padding-top: $pad-wide/2;
127
+    padding-bottom: $pad-wide/2;
128
+    + aside {
129
+      width: $sidebar-width-wide - $sidebar-pad-wide*2;
130
+      padding: 1.2em $sidebar-pad-wide $sidebar-pad-wide;
131
+    }
132
+  }
133
+}
0 134
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+$base03:    #002b36; //darkest blue
1
+$base02:    #073642; //dark blue
2
+$base01:    #586e75; //darkest gray
3
+$base00:    #657b83; //dark gray
4
+$base0:     #839496; //medium gray
5
+$base1:     #93a1a1; //medium light gray
6
+$base2:     #eee8d5; //cream
7
+$base3:     #fdf6e3; //white
8
+$yellow:    #b58900;
9
+$orange:    #cb4b16;
10
+$red:       #dc322f;
11
+$magenta:   #d33682;
12
+$violet:    #6c71c4;
13
+$blue:      #268bd2;
14
+$cyan:      #2aa198;
15
+$green:     #859900;
0 16
new file mode 100644
... ...
@@ -0,0 +1,76 @@
0
+$img-border: inline-image('dotted-border.png');
1
+
2
+// Main Link Colors
3
+$link-color: lighten(#165b94, 3) !default;
4
+$link-color-hover: adjust-hue($link-color, -200) !default;
5
+$link-color-visited: darken(adjust_hue($link_color, 70), 10) !default;
6
+$link-color-active: darken($link-color-hover, 15) !default;
7
+
8
+// Main Section Colors
9
+$main-bg: #f8f8f8 !default;
10
+$page-bg: #252525 !default;
11
+$article-border: #eeeeee !default;
12
+
13
+$header-bg: #333 !default;
14
+$header-border: lighten($header-bg, 15) !default;
15
+$title-color: #f2f2f2 !default;
16
+$subtitle-color: #aaa !default;
17
+
18
+$text-color: #222 !default;
19
+$text-color-light: #aaa !default;
20
+$type-border: #ddd !default;
21
+
22
+
23
+/* Navigation */
24
+$nav-bg: #ccc !default;
25
+$nav-color: darken($nav-bg, 38) !default;
26
+$nav-color-hover: darken($nav-color, 25) !default;
27
+$nav-placeholder: desaturate(darken($nav-bg, 10), 15) !default;
28
+$nav-border: darken($nav-bg, 10) !default;
29
+$nav-border-top: lighten($nav-bg, 15) !default;
30
+$nav-border-bottom: darken($nav-bg, 25) !default;
31
+$nav-border-left: darken($nav-bg, 11) !default;
32
+$nav-border-right: lighten($nav-bg, 7) !default;
33
+
34
+/* Sidebar colors */
35
+$sidebar-bg: #eee !default;
36
+$sidebar-link-color: $link-color !default;
37
+$sidebar-link-color-hover: $link-color-hover !default;
38
+$sidebar-color: change-color(mix($text-color, $sidebar-bg, 80), $hue: hue($sidebar-bg), $saturation: saturation($sidebar-bg)/2) !default;
39
+$sidebar-border: desaturate(darken($sidebar-bg, 7), 10) !default;
40
+$sidebar-border: darken($sidebar-bg, 7) !default;
41
+$sidebar-link-color-subdued: lighten($sidebar-color, 20) !default;
42
+$sidebar-link-color-subdued-hover: $sidebar-link-color-hover !default;
43
+$twitter-status-link: lighten($sidebar-link-color-subdued, 15) !default;
44
+
45
+$footer-color: #888 !default;
46
+$footer-bg: #ccc !default;
47
+$footer-color: darken($footer-bg, 38) !default;
48
+$footer-color-hover: darken($footer-color, 10) !default;
49
+$footer-border-top: lighten($footer-bg, 15) !default;
50
+$footer-border-bottom: darken($footer-bg, 15) !default;
51
+$footer-link-color: darken($footer-bg, 38) !default;
52
+$footer-link-color-hover: darken($footer-color, 25) !default;
53
+$page-border-bottom: darken($footer-bg, 5) !default;
54
+
55
+
56
+/* Core theme application */
57
+
58
+article a, #articles + aside a {
59
+  @include link-colors($link-color, $hover: $link-color-hover, $focus: $link-color-hover, $visited: $link-color-visited, $active: $link-color-active);
60
+}
61
+a { @include transition(color, .5s); }
62
+
63
+html {
64
+  background: $page-bg image-url('line-tile.png') top left;
65
+}
66
+body {
67
+  > div {
68
+    background: $sidebar-bg image-url('noise.png') top left;
69
+    border-bottom: 1px solid $page-border-bottom;
70
+    > div {
71
+      background: $main-bg image-url('noise.png') top left;
72
+      border-right: 1px solid $sidebar-border;
73
+    }
74
+  }
75
+}
0 76
new file mode 100644
... ...
@@ -0,0 +1,130 @@
0
+$blockquote: $type-border !default;
1
+$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace;
2
+
3
+// Fonts
4
+.heading {
5
+  font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif;
6
+}
7
+.sans { font-family: "PT Sans", "Helvetica Neue", Arial, sans-serif; }
8
+.serif { font-family: "PT Serif", Georgia, Times, "Times New Roman", serif; }
9
+.mono { font-family: $mono; }
10
+
11
+body > header h1 {
12
+  font-size: 2.6em;
13
+  @extend .heading;
14
+  font-weight: normal;
15
+  line-height: 1.2em;
16
+  margin-bottom: 0.6667em;
17
+}
18
+
19
+body {
20
+  line-height: 1.5em;
21
+  color: $text-color;
22
+  @extend .serif;
23
+}
24
+
25
+#{headings()}{
26
+  @extend .heading;
27
+  text-rendering: optimizelegibility;
28
+  margin-bottom: 1em;
29
+  font-weight: bold;
30
+}
31
+h1 {
32
+  font-size: 3.2em;
33
+  line-height: 1.2em;
34
+  @media only screen and (max-width: 768px) { font-size: 2.2em; }
35
+}
36
+
37
+
38
+h2, section h1 {
39
+  font-size: 1.5em;
40
+}
41
+h3, section h2, section section h1 {
42
+  font-size: 1.3em;
43
+}
44
+h4, section h3, section section h2, section section section h1 {
45
+  font-size: 1em;
46
+}
47
+h5, section h4, section section h3 {
48
+  font-size: .9em;
49
+}
50
+h6, section h5, section section h4, section section section h3 {
51
+  font-size: .8em;
52
+}
53
+p, blockquote, ul, ol { margin-bottom: 1.5em; }
54
+
55
+ul{ list-style-type: circle; }
56
+
57
+ol{ list-style-type: decimal; ol { list-style-type: lower-alpha; } }
58
+ul ul, ol ol { margin-left: 1.75em; }
59
+
60
+strong { font-weight: bold; }
61
+
62
+em { font-style: italic; }
63
+
64
+sup, sub { font-size: 0.8em; position: relative;  display: inline-block; }
65
+sup { top: -.5em; }
66
+sub { bottom: -.5em; }
67
+
68
+q { font-style: italic;
69
+  &:before { content: "\201C"; }
70
+  &:after { content: "\201D"; }
71
+}
72
+
73
+em, dfn { font-style: italic; }
74
+
75
+strong, dfn { font-weight: bold; }
76
+
77
+del, s { text-decoration: line-through; }
78
+
79
+abbr, acronym { border-bottom: 1px dotted; cursor: help; }
80
+
81
+pre, code, tt { @extend .mono-font; }
82
+
83
+sub, sup { line-height: 0; }
84
+
85
+hr { margin-bottom: 0.2em; }
86
+
87
+small { font-size: .8em; }
88
+
89
+big { font-size: 1.2em; }
90
+
91
+blockquote {
92
+  $bq-margin: 1.2em;
93
+  font-style: italic;
94
+  position: relative;
95
+  font-size: 1.2em;
96
+  line-height: 1.5em;
97
+  padding-left: 1em;
98
+  border-left: 4px solid rgba($text-color-light, .5);
99
+  cite {
100
+    font-style: italic;
101
+    a { color: $text-color-light !important; word-wrap: break-word; }
102
+    &:before { content: '–'; padding:{right: .3em; left: .3em;} color: $text-color-light; }
103
+  }
104
+  @media only screen and (min-width: 992px) {
105
+    padding-left: 1.5em;
106
+    border-left-width: 4px;
107
+  }
108
+}
109
+
110
+.has-pullquote:before {
111
+  /* Reset metrics. */
112
+  padding: 0;
113
+  border: none;
114
+
115
+  /* Content */
116
+  content: attr(data-pullquote);
117
+
118
+  /* Pull out to the right, modular scale based margins. */
119
+  float: right;
120
+  width: 45%;
121
+  margin: .5em 0 1em 1.5em;
122
+
123
+  /* Baseline correction */
124
+  position: relative;
125
+  top: 7px;
126
+  font-size: 1.4em;
127
+  line-height: 1.45em;
128
+}
129
+
0 130
new file mode 100644
... ...
@@ -0,0 +1,21 @@
0
+@mixin mask-image($img, $repeat: no-repeat){
1
+  @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms);
2
+  @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms);
3
+  width: image-width($img);
4
+  height: image-height($img);
5
+}
6
+
7
+@mixin selection($bg, $color: inherit, $text-shadow: none){
8
+  * {
9
+    &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
10
+    &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
11
+    &::selection { background: $bg; color: $color; text-shadow: $text-shadow; }
12
+  }
13
+}
14
+
15
+@function text-color($color, $dark: dark, $light: light){
16
+  $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000;
17
+  $text-color: if($text-color >= 150, $dark, $light);
18
+  @return $text-color;
19
+}
20
+
0 21
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+// Here you can easily change your sites's color scheme.
1
+// To give it a try, uncomment some of the lines below rebuild your blog, and see how it works.
2
+
3
+//$header-bg: #263347;
4
+//$subtitle-color: lighten($header-bg, 58);
5
+//$nav-bg: desaturate(lighten(#8fc17a, 18), 5);
6
+//$sidebar-bg: desaturate(#eceff5, 8);
7
+//$sidebar-link-color: saturate(#526f9a, 10);
8
+//$sidebar-link-color-hover: darken(#7ab662, 9);
9
+
10
+
11
+//To use the light Solarized highlighting theme uncomment this block
12
+//$base03: $base3;
13
+//$base02: $base2;
14
+//$base01: $base1;
15
+//$base00: $base0;
16
+//$base0: $base00;
17
+//$base1: $base01;
18
+//$base2: $base02;
19
+//$base3: $base03;
0 20
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+// Here you can easily change your sites's layout.
1
+// To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works.
2
+
3
+//$max-width: 1350px;
4
+
5
+// Padding used for layout margins
6
+//$pad-min: 18px;
7
+//$pad-narrow: 25px;
8
+//$pad-medium: 35px;
9
+//$pad-wide: 55px;
10
+
11
+// Sidebar widths used in media queries
12
+//$sidebar-width-medium: 240px;
13
+//$sidebar-pad-medium: 15px;
14
+//$sidebar-pad-wide: 20px;
15
+//$sidebar-width-wide: 300px;
0 16
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+// This File is imported last, and will override other styles in the cascade
1
+// Add styles here to make changes without digging in too much
0 2
new file mode 100644
... ...
@@ -0,0 +1,72 @@
0
+#articles .blog-archives {
1
+  article {
2
+    padding: 1em 0 1em;
3
+    position: relative;
4
+    background: $img-border bottom left repeat-x;
5
+    &:last-child {
6
+      background: none;
7
+    }
8
+  }
9
+  h2 {
10
+    background: none;
11
+    display: none;
12
+  }
13
+  h1, h2 { color: $text-color; margin-bottom: .3em; }
14
+  h1 {
15
+    font-size: 1.5em;
16
+    a {
17
+      @include hover-link;
18
+      color: inherit;
19
+      &:hover { color: $link-color-hover; }
20
+      font-weight: normal;
21
+      display: inline-block;
22
+    }
23
+  }
24
+  a.category, time {
25
+    @extend .sans;
26
+    color: $text-color-light;
27
+  }
28
+  color: $text-color-light;
29
+  .entry-content { display: none; }
30
+  time {
31
+    font-size: .9em;
32
+    line-height: 1em;
33
+    .month, .day { display: inline-block; }
34
+    .month { text-transform: uppercase; }
35
+  }
36
+  p { margin-bottom: 1em; }
37
+  &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }}
38
+  a:hover { color: $link-color-hover; }
39
+  @media only screen and (min-width: 550px) {
40
+    article { margin-left: 5em; }
41
+    h2 {
42
+      background: none;
43
+      display: inline-block;
44
+      float: left;
45
+      padding-top: .75em;
46
+      &:first-child { padding-top: .75em; }
47
+    }
48
+    time {
49
+      position: absolute;
50
+      text-align: right;
51
+      left: 0em;
52
+      top: 1.8em;
53
+    }
54
+    .year { display: none; }
55
+    article {
56
+      padding:{left: 4.5em; bottom: .7em;}
57
+    }
58
+  a.category {
59
+    //text-align: right;
60
+    line-height: 1.1em;
61
+    //float: right;
62
+    }
63
+  }
64
+}
65
+#articles .blog-archives.category {
66
+  article {
67
+    margin-left: 0;
68
+    padding-left: 6.8em;
69
+  }
70
+  .year { display: inline; }
71
+}
0 72
new file mode 100644
... ...
@@ -0,0 +1,131 @@
0
+#articles {
1
+  overflow: hidden;
2
+  ul, ol { margin-left: 1.4em; }
3
+  @media only screen and (min-width: 768px) {
4
+    ul, ol { margin-left: 0; }
5
+  }
6
+  > article {
7
+    padding-bottom: 1em;
8
+    &:last-child { margin-bottom: 0;  }
9
+    h2 {
10
+      padding-top: 0.8em;
11
+      background: $img-border top left repeat-x;
12
+      &:first-child { background: none; padding-top: 0; }
13
+    }
14
+    .byline + time:before, time +time:before, .comments:before, .byline ~ .categories:before {
15
+      @extend .separator;
16
+    }
17
+  }
18
+  header {
19
+    position: relative;
20
+    padding-top: 2em;
21
+    padding-bottom: 1em;
22
+    margin-bottom: 1em;
23
+    background: $img-border bottom left repeat-x;
24
+    h1 {
25
+      margin: 0;
26
+      a { text-decoration: none;
27
+        &:hover { text-decoration: underline; } }
28
+    }
29
+    p {
30
+      font-size: .9em;
31
+      color: $text-color-light;
32
+      margin: 0;
33
+      @extend .sans;
34
+      &.meta {
35
+        text-transform: uppercase;
36
+      }
37
+    }
38
+    @media only screen and (min-width: 768px) {
39
+      margin-bottom: 1.5em;
40
+      padding-bottom: 1em;
41
+      background: $img-border bottom left repeat-x;
42
+      p.meta { position: absolute; top: 0; }
43
+    }
44
+  }
45
+  h1.feature {
46
+    padding-top: .5em;
47
+    margin-bottom: 1em;
48
+    padding-bottom: 1em;
49
+    background: $img-border bottom left repeat-x;
50
+    font-size: 2.0em; font-style: italic;
51
+    line-height: 1.3em;
52
+  }
53
+  .entry-content {
54
+    img, video { max-width: 100%; height: auto; }
55
+    video {
56
+      width: 100%; display: block; margin-bottom: 1.5em;
57
+      padding: .8em; background: #fff; border: 1px solid #eee;
58
+      @include box-sizing(border-box);
59
+    }
60
+  }
61
+  .flash-video {
62
+    max-width: 100%;
63
+    margin-bottom: 1.5em;
64
+    @include box-sizing(border-box);
65
+    padding: .8em; background: #fff; border: 1px solid #eee;
66
+    > div {
67
+      position: relative;
68
+      display: block;
69
+      padding-bottom: 56.25%;
70
+      padding-top: 1px;
71
+      height: 0;
72
+      overflow: hidden;
73
+      iframe, object, embed {
74
+        position: absolute;
75
+        top: 0;
76
+        left: 0;
77
+        width: 100%;
78
+        height: 100%;
79
+      }
80
+    }
81
+  }
82
+  iframe.twitter-share-button {
83
+    position: relative;
84
+    top: .3em;
85
+    padding-left: .5em;
86
+  }
87
+  > article > footer {
88
+    margin-top: 2em;
89
+    padding-top: 1em;
90
+    margin-bottom: 1.5em;
91
+    background: $img-border top left repeat-x;
92
+    @extend .sans;
93
+  }
94
+
95
+}
96
+article + article {
97
+  background: $img-border top left repeat-x;
98
+}
99
+#articles.blog-index {
100
+  article header { background: none; padding-bottom: 0; }
101
+  article h1 {
102
+    font-size: 2.2em;
103
+    a { color: inherit; &:hover { color: $link-color-hover; } }
104
+  }
105
+  a[rel=full-article] {
106
+    background: darken($main-bg, 5);
107
+    display: inline-block;
108
+    padding: .4em .8em;
109
+    margin-right: .5em;
110
+    text-decoration: none;
111
+    color: mix($text-color, $text-color-light);
112
+    @extend .serif;
113
+    @include transition(background-color, .5s);
114
+    &:hover {
115
+      background: $link-color-hover;
116
+      text-shadow: none;
117
+      color: $main-bg;
118
+    }
119
+  }
120
+  footer {
121
+    @extend .sans;
122
+    margin-top: 1em;
123
+  }
124
+}
125
+
126
+.separator {
127
+  content: "\2022 ";
128
+  padding: 0 .4em 0 .2em;
129
+  display: inline-block;
130
+}
0 131
new file mode 100644
... ...
@@ -0,0 +1,19 @@
0
+body > footer {
1
+  @extend .sans;
2
+  font-size: .8em;
3
+  color: $footer-color;
4
+  text-shadow: lighten($footer-bg, 5) 0 1px;
5
+  background-color: $footer-bg;
6
+  @include background(image-url('noise.png'), linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)));
7
+  border-top: 1px solid $footer-border-top;
8
+  position: relative;
9
+  padding-top: 1em;
10
+  padding-bottom: 1em;
11
+  margin-bottom: 3em;
12
+  @include border-bottom-radius(.4em);
13
+  z-index: 1;
14
+  a {
15
+    @include link-colors($footer-link-color, $footer-link-color-hover);
16
+  }
17
+  p:last-child { margin-bottom: 0; }
18
+}
0 19
new file mode 100644
... ...
@@ -0,0 +1,18 @@
0
+body > header {
1
+  background: $header-bg;
2
+  h1 {
3
+    display: inline-block;
4
+    margin: 0;
5
+    a, a:visited {
6
+      color: $title_color;
7
+      text-decoration: none;
8
+    }
9
+  }
10
+  h2 {
11
+    margin: .2em 0 0;
12
+    @extend .sans;
13
+    font-size: 1em;
14
+    color: $subtitle-color;
15
+    font-weight: normal;
16
+  }
17
+}
0 18
new file mode 100644
... ...
@@ -0,0 +1,137 @@
0
+body > nav {
1
+  position: relative;
2
+  background-color: $nav-bg;
3
+  @include background(image-url('noise.png'), linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)));
4
+  border: {
5
+    top: 1px solid $nav-border-top;
6
+    bottom: 1px solid $nav-border-bottom; }
7
+  padding-top: .35em;
8
+  padding-bottom: .35em;
9
+  form {
10
+    @include background-clip(padding-box);
11
+    margin: 0; padding: 0;
12
+    .search {
13
+      padding: .3em .5em 0;
14
+      font-size: .85em;
15
+      @extend .sans;
16
+      line-height: 1.1em;
17
+      width: 95%;
18
+      @include border-radius(.5em);
19
+      @include background-clip(padding-box);
20
+      @include box-shadow(lighten($nav-bg, 2) 0 1px);
21
+      background-color: lighten($nav-bg, 15);
22
+      border: 1px solid $nav-border;
23
+      color: #888;
24
+      &:focus {
25
+        color: #444;
26
+        border-color: #80b1df;
27
+        @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset);
28
+        background-color: #fff;
29
+        outline: none;
30
+      }
31
+    }
32
+  }
33
+  fieldset[role=site-search]{ float: right; width: 48%; }
34
+  fieldset[role=mobile-nav]{ float: left; width: 48%;
35
+    select{ width: 100%; font-size: .8em; border: 1px solid #888;}
36
+  }
37
+  ul { display: none; }
38
+  @media only screen and (min-width: 550px) {
39
+    font-size: .9em;
40
+    ul {
41
+      @include horizontal-list(0);
42
+      float: left;
43
+      display: block;
44
+      padding-top: .15em;
45
+    }
46
+    ul[role=subscription] {
47
+      margin-left: .8em;
48
+      float: right;
49
+      li:last-child a { padding-right: 0; }
50
+    }
51
+    ul li {
52
+      margin: 0;
53
+    }
54
+    a {
55
+      @include link-colors($nav-color, $nav-color-hover, $visited: $nav-color);
56
+      @extend .sans;
57
+      text-shadow: lighten($nav-bg, 12) 0 1px;
58
+      float: left;
59
+      text-decoration: none;
60
+      font-size: 1.1em;
61
+      padding: .1em 0;
62
+      line-height: 1.5em;
63
+    }
64
+    li + li {
65
+      border-left: 1px solid $nav-border-left;
66
+      margin-left: .8em;
67
+      a {
68
+        padding-left: .8em;
69
+        border-left: 1px solid $nav-border-right;
70
+      }
71
+    }
72
+    form {
73
+      float: right;
74
+      text-align: left;
75
+      padding-left: .8em;
76
+      width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 20px;
77
+      .search {
78
+        width: 93%;
79
+        font-size: .95em;
80
+        line-height: 1.2em;
81
+      }
82
+    }
83
+    ul[data-subscription$=email] + form {
84
+      width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 58px;
85
+      .search { width: 91%; }
86
+    }
87
+    fieldset[role=mobile-nav] { display: none; }
88
+    fieldset[role=site-search]{ width: 100%; }
89
+  }
90
+
91
+  @media only screen and (min-width: 992px) {
92
+    form {
93
+      width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 10px;
94
+    }
95
+    ul[data-subscription$=email] + form {
96
+      width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 58px;
97
+    }
98
+  }
99
+}
100
+.no-placeholder {
101
+  body > nav .search {
102
+    background: lighten($nav-bg, 15) image-url('search.png') .3em .25em no-repeat;
103
+    text-indent: 1.3em;
104
+  }
105
+}
106
+@mixin mask-subscription-nav($feed: 'rss.png'){
107
+  position: relative; top: 0px;
108
+  text-indent: -999999em;
109
+  background-color: $nav-border-right;
110
+  border: 0;
111
+  padding: 0;
112
+  &,&:after { @include mask-image($feed); }
113
+  &:after {
114
+    content: "";
115
+    position: absolute; top: -1px; left: 0;
116
+    background-color: lighten($nav-color, 25);
117
+  }
118
+  &:hover:after { background-color: lighten($nav-color, 20); }
119
+}
120
+.maskImage {
121
+  body > nav {
122
+    @media only screen and (min-width: 550px) {
123
+      ul[data-subscription$=email] + form {
124
+        width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 32px;
125
+      }
126
+    }
127
+    @media only screen and (min-width: 992px) {
128
+      ul[data-subscription$=email] + form {
129
+        width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 32px;
130
+      }
131
+    }
132
+  }
133
+  ul[role=subscription] { position: relative; top: .2em; li, a { border: 0; padding: 0; }}
134
+  a[rel=subscribe-rss]{ @include mask-subscription-nav('rss.png'); }
135
+  a[rel=subscribe-email]{ @include mask-subscription-nav('email.png'); }
136
+}
0 137
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+@import "sidebar/base";
1
+@import "sidebar/twitter";
2
+@import "sidebar/pinboard";
3
+@import "sidebar/delicious";
0 4
new file mode 100644
... ...
@@ -0,0 +1,208 @@
0
+$pre-bg: image-url('noise.png') top left;
1
+.highlight, html .gist .gist-file .gist-syntax .gist-highlight {
2
+  .line-numbers {
3
+    text-align: right;
4
+    font-size: .8em;
5
+    line-height: 1.45em;
6
+    background: $base02 $pre-bg !important;
7
+    border-right: 1px solid darken($base03, 2) !important;
8
+    @include box-shadow(lighten($base02, 2) -1px 0 inset);
9
+    text-shadow: darken($base02, 10) 0 -1px;
10
+    span { color: $base01 !important; }
11
+    padding: .8em !important;
12
+    @include border-radius(0);
13
+  }
14
+}
15
+html .gist .gist-file {
16
+  margin-bottom: 1.5em;
17
+  position: relative;
18
+  border: none;
19
+  padding-top: image-height("code_bg.png") !important;
20
+  .gist-syntax {
21
+    border-bottom: 1px solid darken($base03, 2) !important;
22
+    .gist-highlight{
23
+      background: $base03 !important;
24
+      pre {
25
+        @extend .pre-code;
26
+      }
27
+    }
28
+  }
29
+  .gist-meta {
30
+   padding: .6em 0.8em;
31
+   border: 1px solid lighten($base02, 2) !important;
32
+   color: $base01;
33
+   font-size: .7em !important;
34
+   background: $base02 $pre-bg;
35
+   @extend .sans;
36
+   line-height: 1.5em;
37
+    a {
38
+      color: mix($base1, $base01) !important;
39
+      @include hover-link;
40
+      &:hover { color: $base1 !important; }
41
+    }
42
+    a[href*='#file'] {
43
+      position: absolute; top: 0; left:0; right:-10px;
44
+      color: #474747 !important;
45
+      @extend .code-title;
46
+      &:hover { color: $link-color !important; }
47
+    }
48
+    a[href*=raw]{
49
+      @extend .download-source;
50
+      top: .4em;
51
+    }
52
+  }
53
+}
54
+pre {
55
+  background: $base03 $pre-bg;
56
+  @include border-radius(.4em);
57
+  @extend .mono;
58
+  border: 1px solid $base02;
59
+  line-height: 1.45em;
60
+  font-size: .8em;
61
+  margin-bottom: 1.5em;
62
+  padding: .8em 1em;
63
+  color: $base1;
64
+  overflow: auto;
65
+}
66
+h3.filename {
67
+  @extend .code-title;
68
+  + pre { @include border-top-radius(0px); }
69
+}
70
+
71
+p code {
72
+  @extend .mono;
73
+  display: inline-block;
74
+  white-space: no-wrap;
75
+  background: #fff;
76
+  font-size: .9em;
77
+  line-height: 1.5em;
78
+  color: #555;
79
+  border: 1px solid #ddd;
80
+  @include border-radius(.4em);
81
+  padding: 0 .3em;
82
+  margin: -1px 0;
83
+}
84
+
85
+.pre-code {
86
+  @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
87
+  overflow: scroll;
88
+  overflow-y: hidden;
89
+  display: block;
90
+  padding: .8em !important;
91
+  overflow-x: auto;
92
+  line-height: 1.45em;
93
+  background: $base03 $pre-bg !important;
94
+  color: $base1 !important;
95
+  span { color: $base1 !important; }
96
+  span { font-style: normal !important; font-weight: normal !important; }
97
+
98
+  .c      { color: $base01 !important; font-style: italic !important; }                     /* Comment */
99
+  .cm     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Multiline */
100
+  .cp     { color: $base01 !important; font-style: italic !important;  }                     /* Comment.Preproc */
101
+  .c1     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Single */
102
+  .cs     { color: $base01 !important; font-weight: bold !important; font-style: italic !important; }   /* Comment.Special */
103
+  .err    { color: $red !important; background: none !important; }                                            /* Error */
104
+  .k      { color: $orange !important; }                       /* Keyword */
105
+  .o      { color: $base1 !important; font-weight: bold !important; }                       /* Operator */
106
+  .p      { color: $base1 !important; }                                             /* Operator */
107
+  .ow     { color: $cyan !important; font-weight: bold !important; }                       /* Operator.Word */
108
+  .gd     { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: inline-block; }               /* Generic.Deleted */
109
+  .gd .x  { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: inline-block; }               /* Generic.Deleted.Specific */
110
+  .ge     { color: $base1 !important; font-style: italic !important; }                      /* Generic.Emph */
111
+  //.gr     { color: #aa0000 }                                          /* Generic.Error */
112
+  .gh     { color: $base01 !important; }                                          /* Generic.Heading */
113
+  .gi     { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: inline-block; }               /* Generic.Inserted */
114
+  .gi .x  { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: inline-block; }               /* Generic.Inserted.Specific */
115
+  //.go     { color: #888888 }                                          /* Generic.Output */
116
+  //.gp     { color: #555555 }                                          /* Generic.Prompt */
117
+  .gs     { color: $base1 !important; font-weight: bold !important; }                                       /* Generic.Strong */
118
+  .gu     { color: $violet !important; }                                          /* Generic.Subheading */
119
+  //.gt     { color: #aa0000 }                                          /* Generic.Traceback */
120
+  .kc     { color: $green !important; font-weight: bold !important; }                       /* Keyword.Constant */
121
+  .kd     { color: $blue !important; }                       /* Keyword.Declaration */
122
+  .kp     { color: $orange !important; font-weight: bold !important; }                       /* Keyword.Pseudo */
123
+  .kr     { color: $magenta !important; font-weight: bold !important; }                       /* Keyword.Reserved */
124
+  .kt     { color: $cyan !important; }                       /* Keyword.Type */
125
+  .n      { color: $blue !important; }
126
+  .na     { color: $blue !important; }                                          /* Name.Attribute */
127
+  .nb     { color: $green !important; }                                          /* Name.Builtin */
128
+  //.nc     { color: #445588; font-weight: bold }                       /* Name.Class */
129
+  .no     { color: $yellow !important; }                                          /* Name.Constant */
130
+  //.ni     { color: #800080 }                                          /* Name.Entity */
131
+  .ne     { color: $blue !important; font-weight: bold !important; }                       /* Name.Exception */
132
+  .nf     { color: $blue !important; font-weight: bold !important; }                       /* Name.Function */
133
+  .nn     { color: $yellow !important; }                                          /* Name.Namespace */
134
+  .nt     { color: $blue !important; font-weight: bold !important; }                                          /* Name.Tag */
135
+  .nx     { color: $yellow !Important; }
136
+  //.bp     { color: #999999 }                                          /* Name.Builtin.Pseudo */
137
+  //.vc     { color: #008080 }                                          /* Name.Variable.Class */
138
+  .vg     { color: $blue !important; }                                          /* Name.Variable.Global */
139
+  .vi     { color: $blue !important; }                                          /* Name.Variable.Instance */
140
+  .nv     { color: $blue !important; }                                          /* Name.Variable */
141
+  //.w      { color: #bbbbbb }                                          /* Text.Whitespace */
142
+  .mf     { color: $cyan !important; }                                          /* Literal.Number.Float */
143
+  .m      { color: $cyan !important; }                                          /* Literal.Number */
144
+  .mh     { color: $cyan !important; }                                          /* Literal.Number.Hex */
145
+  .mi     { color: $cyan !important; }                                          /* Literal.Number.Integer */
146
+  //.mo     { color: #009999 }                                          /* Literal.Number.Oct */
147
+  .s      { color: $cyan !important; }                                             /* Literal.String */
148
+  //.sb     { color: #d14 }                                             /* Literal.String.Backtick */
149
+  //.sc     { color: #d14 }                                             /* Literal.String.Char */
150
+  .sd     { color: $cyan !important; }                                             /* Literal.String.Doc */
151
+  .s2     { color: $cyan !important; }                                             /* Literal.String.Double */
152
+  .se     { color: $red !important; }                                             /* Literal.String.Escape */
153
+  //.sh     { color: #d14 }                                             /* Literal.String.Heredoc */
154
+  .si     { color: $blue !important; }                                             /* Literal.String.Interpol */
155
+  //.sx     { color: #d14 }                                             /* Literal.String.Other */
156
+  .sr     { color: $cyan !important; }                                          /* Literal.String.Regex */
157
+  .s1     { color: $cyan !important; }                                             /* Literal.String.Single */
158
+  //.ss     { color: #990073 }                                          /* Literal.String.Symbol */
159
+  //.il     { color: #009999 }                                          /* Literal.Number.Integer.Long */
160
+  div { .gd, .gd .x, .gi, .gi .x { display: block; }}
161
+}
162
+
163
+.highlight, .gist-highlight {
164
+  pre { background: none; @include border-radius(none); border: none; padding: 0; margin-bottom: 0; }
165
+  margin-bottom: 1.5em;
166
+  background: $base03;
167
+  overflow-y: hidden;
168
+  overflow-x: auto;
169
+}
170
+.highlight code { @extend .pre-code; background: #000;}
171
+figure {
172
+  margin-bottom: 1.5em;
173
+  figcaption {
174
+    position: relative;
175
+    @extend .code-title;
176
+    a { @extend .download-source; }
177
+  }
178
+  .highlight { margin-bottom: 0; border-bottom: 1px solid darken($base03, 2) !important; }
179
+}
180
+.code-title {
181
+  text-align: center;
182
+  font-size: 13px;
183
+  line-height: 2em;
184
+  text-shadow: #cbcccc 0 1px 0;
185
+  color: #474747;
186
+  font-weight: normal;
187
+  margin-bottom: 0;
188
+  @include border-top-radius(5px);
189
+  font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;
190
+  background: #aaaaaa image-url("code_bg.png") top repeat-x;
191
+  border: 1px solid #565656;
192
+  border-top-color: #cbcbcb;
193
+  border-left-color: #a5a5a5;
194
+  border-right-color: #a5a5a5;
195
+  border-bottom: 0;
196
+}
197
+
198
+.download-source {
199
+  position: absolute; right: .8em;
200
+  @include hover-link;
201
+  color: #666 !important;
202
+  z-index: 1;
203
+  font-size: 13px;
204
+  text-shadow: #cbcccc 0 1px 0;
205
+  padding-left: 3em;
206
+}
207
+
0 208
new file mode 100644
... ...
@@ -0,0 +1,56 @@
0
+.side-shadow-border {
1
+  @include box-shadow(lighten($sidebar-bg, 5) 0 1px);
2
+}
3
+#articles + aside {
4
+  color: $sidebar-color;
5
+  padding-top: 1.2em;
6
+  text-shadow: lighten($sidebar-bg, 8) 0 1px;
7
+  section {
8
+    @extend .sans;
9
+    font-size: .8em;
10
+    line-height: 1.4em;
11
+    margin-bottom: 1.5em;
12
+    h1 {
13
+      margin: 1.5em 0 0;
14
+      padding-bottom: .2em;
15
+      border-bottom: 1px solid $sidebar-border;
16
+      @extend .side-shadow-border;
17
+      + p {
18
+        padding-top: .4em;
19
+      }
20
+    }
21
+  }
22
+  ul {
23
+    margin-bottom: 0.5em;
24
+  }
25
+  li {
26
+    list-style: none;
27
+    padding: .5em 0;
28
+    margin: 0;
29
+    border-bottom: 1px solid $sidebar-border;
30
+    @extend .side-shadow-border;
31
+    p:last-child {
32
+      margin-bottom: 0;
33
+    }
34
+  }
35
+  a {
36
+    color: inherit;
37
+    @include transition(color, .5s);
38
+  }
39
+  &:hover a, &:hover #tweets a { color: $sidebar-link-color;
40
+    &:hover { color: $sidebar-link-color-hover; }
41
+  }
42
+  #recent_posts {
43
+    time {
44
+      text-transform: uppercase;
45
+      font-size: .9em;
46
+      color: #666;
47
+    }
48
+  }
49
+}
50
+.aside-alt-link {
51
+  color: $sidebar-link-color-subdued;
52
+  &:hover {
53
+    color: $sidebar-link-color-subdued-hover;
54
+  }
55
+}
0 56
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+.delicious-posts {
1
+  a.delicious-link { margin-bottom: .5em; display: block; }
2
+  p { font-size: 1em; }
3
+}
0 4
new file mode 100644
... ...
@@ -0,0 +1,12 @@
0
+#pinboard_linkroll {
1
+  .pin-title, .pin-description {
2
+    display: block;
3
+    margin-bottom: .5em;
4
+  }
5
+  .pin-tag {
6
+    @include hover-link;
7
+    @extend .aside-alt-link;
8
+    &:after { content: ','; }
9
+    &:last-child:after { content: ''; }
10
+  }
11
+}
0 12
new file mode 100644
... ...
@@ -0,0 +1,33 @@
0
+#tweets {
1
+  .loading {
2
+    background: inline-image('bird_32_gray.png') no-repeat center .5em;
3
+    color: darken($sidebar-bg, 18);
4
+    text-shadow: $main-bg 0 1px;
5
+    text-align: center;
6
+    padding: 2.5em 0 .5em;
7
+    &.error {
8
+      background: inline-image('bird_32_gray_fail.png') no-repeat center .5em;
9
+    }
10
+  }
11
+  a { color: $sidebar-link-color-subdued; @include hover-link; }
12
+  p {
13
+    position: relative;
14
+    padding-right: 1em;
15
+  }
16
+  a[href*=status]{
17
+    color: $twitter-status-link;
18
+    float: right;
19
+    padding: 0 0 .1em 1em;
20
+    position: relative; right: -1.3em;
21
+    text-shadow: #fff 0 1px;
22
+    font-size: .7em;
23
+    span { font-size: 1.5em; }
24
+    &:hover {
25
+      color: $sidebar-link-color-subdued-hover;
26
+      text-decoration: none;
27
+    }
28
+  }
29
+  a[href*='twitter.com/search']{
30
+    @extend .aside-alt-link;
31
+  }
32
+}
0 33
new file mode 100644
... ...
@@ -0,0 +1,9 @@
0
+@import "compass";
1
+@include global-reset;
2
+@include reset-html5;
3
+
4
+@import "custom/colors";
5
+@import "custom/layout";
6
+@import "base";
7
+@import "partials";
8
+@import "custom/styles";
0 9
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+{% capture category %}{{ post.categories | size }}{% endcapture %}
1
+<h1><a href="{{ post.url }}">{{post.title}}</a></h1>
2
+<time datetime="{{ post.date | datetime }}" pubdate>{{ post.date | date: "<span class='month'>%b</span> <span class='day'>%d</span> <span class='year'>%Y</span>"}}</time>
3
+{% if category != '0' %}
4
+<footer>
5
+  <span class="categories">posted in {{ post.categories | category_links }}</span>
6
+</footer>
7
+{% endif %}
0 8
new file mode 100644
... ...
@@ -0,0 +1,25 @@
0
+{% unless page.no_header %}
1
+  <header>
2
+    {% if index %}
3
+      <h1 class="entry-title"><a href="{{ post.url }}">{{ post.title | titlecase }}</a></h1>
4
+    {% else %}
5
+      <h1 class="entry-title">{{ page.title | titlecase }}</h1>
6
+    {% endif %}
7
+    {% unless page.no_meta or !index %}<p class="meta">{% include post_date.html %}</p>{% endunless %}
8
+  </header>
9
+{% endunless %}
10
+{% if index %}
11
+  <div class="entry-content">{{ content | exerpt | smart_quotes }}</div>
12
+  <p><a rel="full-article" href="{{ post.url }}">Read on &rarr;</a></p>
13
+  <footer>
14
+    <p class="meta">
15
+      {% include post_author.html %}
16
+      {% include post_date.html %}
17
+      {% include post_categories.html %}
18
+      <span class="comments"><a rel="comments" href="{{ post.url }}#disqus_thread">Comments</a></span>
19
+      {% include sharing.html %}
20
+    </p>
21
+  </footer>
22
+{% else %}
23
+<div class="entry-content">{{ content | smart_quotes }}</div>
24
+{% endif %}
0 25
new file mode 100644
... ...
@@ -0,0 +1,7 @@
0
+{% if site.delicious_user %}
1
+<section>
2
+  <h1>On Delicious</h1>
3
+  <script type="text/javascript" src="http://feeds.delicious.com/v2/js/{{ site.delicious_user }}?title=&count={{ site.delicious_count }}&sort=date&extended"></script>
4
+  <p><a href="http://delicious.com/{{ site.delicious_user }}">My Delicious Bookmarks &raquo;</a></p>
5
+</section>
6
+{% endif %}
0 7
new file mode 100644
... ...
@@ -0,0 +1,19 @@
0
+{% if site.pinboard_user %}
1
+<section>
2
+  <h1>My Pinboard</h1>
3
+  <ul id="pinboard_linkroll">Fetching linkroll...</ul>
4
+  <p><a href="http://pinboard.in/u:{{ site.pinboard_user }}">My Pinboard Bookmarks &raquo;</a></p>
5
+</section>
6
+<script type="text/javascript">
7
+  var linkroll = 'pinboard_linkroll'; //id target for pinboard list
8
+  var pinboard_user = "{{ site.pinboard_user }}"; //id target for pinboard list
9
+  var pinboard_count = {{ site.pinboard_count }}; //id target for pinboard list
10
+  (function(){
11
+    var pinboardInit = document.createElement('script');
12
+    pinboardInit.type = 'text/javascript';
13
+    pinboardInit.async = true;
14
+    pinboardInit.src = '/javascripts/pinboard.js';
15
+    document.getElementsByTagName('head')[0].appendChild(pinboardInit);
16
+  })();
17
+</script>
18
+{% endif %}
0 19
new file mode 100644
... ...
@@ -0,0 +1,12 @@
0
+{% if page.single and site.recent_posts %}
1
+<section>
2
+  <h1>Recent Posts</h1>
3
+  <ul id="recent_posts">
4
+    {% for post in site.posts limit: site.recent_posts %}
5
+      <li class="post">
6
+        <a href="{{ post.url }}">{{ post.title }}</a>
7
+      </li>
8
+    {% endfor %}
9
+  </ul>
10
+</section>
11
+{% endif %}
0 12
new file mode 100644
... ...
@@ -0,0 +1,19 @@
0
+{% if site.twitter_user %}
1
+<section>
2
+  <h1>Latest Tweets</h1>
3
+  <ul id="tweets">
4
+    <li class="loading">Status updating...</li>
5
+  </ul>
6
+  <script type="text/javascript">
7
+    $.domReady(function(){
8
+      getTwitterFeed("{{site.twitter_user}}", {{site.twitter_tweet_count}}, {{site.twitter_show_replies}});
9
+    });
10
+  </script>
11
+  <script src="/javascripts/twitter.js" type="text/javascript"> </script>
12
+  {% if site.twitter_follow_button %}
13
+    <a href="http://twitter.com/{{ site.twitter_user }}" class="twitter-follow-button" data-width="208px" data-show-count="{{ site.twitter_show_follower_count }}">Follow @{{ site.twitter_user }}</a>
14
+  {% else %}
15
+    <p>Follow <a href="http://twitter.com/{{site.twitter_user}}">@{{ site.twitter_user }}</a></p>
16
+  {% endif %}
17
+</section>
18
+{% endif %}
0 19
new file mode 100644
... ...
@@ -0,0 +1,13 @@
0
+<div id="disqus_thread"></div>
1
+<script type="text/javascript">
2
+  var disqus_shortname = '{{ site.disqus_short_name }}';
3
+  var disqus_identifier = '{{ site.url }}{{ page.url }}';
4
+  var disqus_url = '{{ site.url }}{{ page.url }}';
5
+  //var disqus_developer = 1;
6
+  (function() {
7
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
8
+    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
9
+    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
10
+  })();
11
+</script>
12
+<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
0 13
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+<p>
1
+  Copyright &copy; {{ site.time | date: "%Y" }} - {{ site.author }} -
2
+  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
3
+</p>
0 4
new file mode 100644
... ...
@@ -0,0 +1,13 @@
0
+{% if site.google_analytics_tracking_id %}
1
+  <script type="text/javascript">
2
+    var _gaq = _gaq || [];
3
+    _gaq.push(['_setAccount', '{{ site.google_analytics_tracking_id }}']);
4
+    _gaq.push(['_trackPageview']);
5
+
6
+    (function() {
7
+      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
8
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
9
+      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
10
+    })();
11
+  </script>
12
+{% endif %}
0 13
new file mode 100644
... ...
@@ -0,0 +1,35 @@
0
+<!DOCTYPE html>
1
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
2
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
3
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
4
+<head>
5
+  <meta charset="utf-8">
6
+  {% if page.title %}
7
+    <title>{{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
8
+  {% else %}
9
+    <title>{{site.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
10
+  {% endif %}
11
+  <meta name="author" content="{{site.author}}">
12
+  {% if page.description %}
13
+    <meta name="description" content="{{page.description}}"/>
14
+  {% endif %}
15
+
16
+  <!-- http://t.co/dKP3o1e -->
17
+  <meta name="HandheldFriendly" content="True">
18
+  <meta name="MobileOptimized" content="320">
19
+  <meta name="viewport" content="width=device-width, initial-scale=1">
20
+
21
+  {% if page.keywords %}
22
+    <meta name="keywords" content="{{page.keywords}}"/>
23
+  {% endif %}
24
+
25
+  <link href="/images/favicon.png" rel="shortcut icon" />
26
+  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
27
+  <script src="/javascripts/modernizr-2.0.js"></script>
28
+  <script src="http://s3.amazonaws.com/ender-js/jeesh.min.js"></script>
29
+  <script src="/javascripts/octopress.js" type="text/javascript"></script>
30
+  <link href='http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
31
+  <link href='http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
32
+  {% include google_analytics.html %}
33
+  <link href="/atom.xml" rel="alternate" title="{{site.title}}" type="application/atom+xml"/>
34
+</head>
0 35
new file mode 100644
... ...
@@ -0,0 +1,6 @@
0
+<hgroup>
1
+  <h1><a href="/">{{ site.title }}</a></h1>
2
+  {% if site.subtitle %}
3
+    <h2>{{ site.subtitle }}</h2>
4
+  {% endif %}
5
+</hgroup>
0 6
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+<ul role="subscription" data-subscription="rss{% if site.subscribe_email %} email{% endif %}">
1
+  <li><a href="{{ site.subscribe_rss }}" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
2
+  {% if site.subscribe_email %}
3
+    <li><a href="{{ site.subscribe_email }}" rel="subscribe-email" title="subscribe via email">Email</a></li>
4
+  {% endif %}
5
+</ul>
6
+<form action="{{ site.simple_search }}" method="get">
7
+  <fieldset role="site-search">
8
+    <input type="hidden" name="q" value="site:{{ site.url | search_url }}" />
9
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
10
+  </fieldset>
11
+</form>
12
+<ul role="main-nav">
13
+  <li><a href="/">Blog</a></li>
14
+  <li><a href="/archives.html">Archives</a></li>
15
+</ul>
0 16
new file mode 100644
... ...
@@ -0,0 +1,6 @@
0
+{% if post.author %}
1
+  {% assign author = post.author %}
2
+{% else %}
3
+  {% assign author = site.author %}
4
+{% endif %}
5
+{% if author %}<span class="byline author vcard">Posted by <span class="fn">{{ author }}</span></span>{% endif %}
0 6
new file mode 100644
... ...
@@ -0,0 +1,10 @@
0
+{% capture category %}{% if post %}{{ post.categories | category_links | size }}{% else %}{{ page.categories | category_links | size }}{% endif %}{% endcapture %}
1
+{% unless category == '0' %}
2
+<span class="categories"> in
3
+  {% if post %}
4
+    {{ post.categories | category_links }}
5
+  {% else %}
6
+    {{ page.categories | category_links }}
7
+  {% endif %}
8
+</span>
9
+{% endunless %}
0 10
new file mode 100644
... ...
@@ -0,0 +1,10 @@
0
+{% capture date %}{{ page.date }}{{ post.date }}{% endcapture %}
1
+{% capture has_date %}{{ date | size }}{% endcapture %}
2
+{% capture updated %}{{ page.updated }}{{ post.updated }}{% endcapture %}
3
+{% capture was_updated %}{{ updated | size }}{% endcapture %}
4
+{% if has_date != '0' %}
5
+<time datetime="{{ date | datetime }}" pubdate {% if updated %} updated {% endif %}>{{ date | ordinalize }}</time>
6
+{% endif %}
7
+{% if was_updated != '0' %}
8
+<time class="updated" datetime="{{ updated | datetime }}"></time>
9
+{% endif %}
0 10
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+<a href="http://twitter.com/share" class="twitter-share-button" data-url="{{ site.url }}{{ page.url }}" data-via="{{ site.twitter_user }}" data-counturl="{{ site.url }}{{ page.url }}" >Tweet</a>
0 1
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+<section>
1
+  <h1>About Me</h1>
2
+  <p>Hi, I'm Octopress!</p>
3
+</section>
4
+{% include asides/recent_posts.html %}
5
+{% include asides/twitter.html %}
6
+{% include asides/delicious.html %}
7
+{% include asides/pinboard.html %}
0 8
new file mode 100644
... ...
@@ -0,0 +1,12 @@
0
+---
1
+layout: post
2
+no_meta: true
3
+---
4
+
5
+<div class="blog-archives category">
6
+{% for post in site.categories[page.category] %}
7
+<article>
8
+  {% include archive_post.html %}
9
+</article>
10
+{% endfor %}
11
+</div>
0 12
new file mode 100644
... ...
@@ -0,0 +1,26 @@
0
+{% include head.html %}
1
+<body {% if page.body_id %} id="{{ page.body_id }}" {% endif %} {% if page.sidebar == 'none' %} class="no-sidebar" {% endif %}>
2
+  <header>{% include header.html %}</header>
3
+  <nav>{% include navigation.html %}</nav>
4
+  <div>
5
+    <div>
6
+      <div id="articles" {% if page.blog_index %} class="blog-index" {% endif %}>{{ content }}</div>
7
+      {% unless page.sidebar == 'none' %}
8
+        <aside>{% include sidebar.html %}</aside>
9
+      {% endunless %}
10
+    </div>
11
+  </div>
12
+  <footer>{% include footer.html %}</footer>
13
+  {% if site.twitter_follow_button or site.twitter_tweet_button %}
14
+    <script type="text/javascript">
15
+      (function(){
16
+        var twitterWidgets = document.createElement('script');
17
+        twitterWidgets.type = 'text/javascript';
18
+        twitterWidgets.async = true;
19
+        twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
20
+        document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
21
+      })();
22
+    </script>
23
+  {% endif %}
24
+</body>
25
+</html>
0 26
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+---
1
+layout: post
2
+---
3
+
4
+<!-- if you want a page layout -->
0 5
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+---
1
+layout: default
2
+single: true
3
+---
4
+
5
+<article class="hentry">
6
+  {% include article.html %}
7
+  {% unless page.no_meta %}
8
+  <footer>
9
+    <p class="meta">
10
+      {% include post_author.html %}
11
+      {% include post_date.html %}
12
+      {% include post_categories.html %}
13
+      {% include sharing.html %}
14
+    </p>
15
+  </footer>
16
+  {% endunless %}
17
+  {% if site.disqus_short_name %}
18
+  <section>
19
+    <h1>Comments</h1>
20
+    <div id="disqus_thread">{% include disqus_thread.html %}</div>
21
+  </section>
22
+  {% endif %}
23
+</article>
0 24
new file mode 100644
... ...
@@ -0,0 +1,17 @@
0
+---
1
+layout: post
2
+title: Blog Archive
3
+no_meta: true
4
+---
5
+<div class="blog-archives">
6
+{% for post in site.posts reverse %}
7
+{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
8
+{% unless year == this_year %}
9
+  {% assign year = this_year %}
10
+  <h2>{{ year }}</h2>
11
+{% endunless %}
12
+<article>
13
+  {% include archive_post.html %}
14
+</article>
15
+{% endfor %}
16
+</div>
0 17
new file mode 100644
1 18
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png differ
2 19
new file mode 100644
3 20
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png differ
4 21
new file mode 100644
5 22
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png differ
6 23
new file mode 100644
7 24
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png differ
8 25
new file mode 100644
9 26
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png differ
10 27
new file mode 100644
11 28
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png differ
12 29
new file mode 100644
13 30
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png differ
14 31
new file mode 100644
15 32
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png differ
16 33
new file mode 100644
17 34
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png differ
18 35
new file mode 100644
19 36
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png differ
20 37
new file mode 100644
21 38
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png differ
22 39
new file mode 100644
23 40
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png differ
24 41
new file mode 100644
25 42
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png differ
26 43
new file mode 100644
27 44
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png differ
28 45
new file mode 100644
29 46
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png differ
30 47
new file mode 100644
31 48
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png differ
32 49
new file mode 100644
33 50
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png differ
34 51
new file mode 100644
35 52
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png differ
36 53
new file mode 100644
37 54
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png differ
38 55
new file mode 100644
39 56
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png differ
40 57
new file mode 100644
41 58
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/display/background.png differ
42 59
new file mode 100644
43 60
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png differ
44 61
new file mode 100644
45 62
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png differ
46 63
new file mode 100644
47 64
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png differ
48 65
new file mode 100644
49 66
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/dock/button.png differ
50 67
new file mode 100644
... ...
@@ -0,0 +1,115 @@
0
+<?xml version="1.0"?>
1
+<skin version="1.1" name="Glow" author="LongTail Video">
2
+
3
+	<settings>
4
+		<setting name="backcolor" value="0x000000" />
5
+		<setting name="frontcolor" value="0xeeeeee" />
6
+		<setting name="lightcolor" value="0xeeeeee" />
7
+		<setting name="screencolor" value="0x000000" />
8
+	</settings>
9
+
10
+	<components>
11
+		<component name="controlbar">
12
+			<settings>
13
+				<setting name="margin" value="0" />
14
+				<setting name="fontsize" value="11" />
15
+				<setting name="fontcolor" value="0xEEEEEE" />
16
+				<setting name="buttoncolor" value="0xEEEEEE" />
17
+			</settings>
18
+
19
+			<layout>
20
+				<group position="left">
21
+					<button name="play" />
22
+					<text name="elapsed" />
23
+				</group>
24
+				<group position="center">
25
+					<slider name="time" />
26
+				</group>
27
+				<group position="right">
28
+					<text name="duration" />
29
+					<button name="blank" />
30
+					<button name="mute" />
31
+					<button name="fullscreen" />
32
+				</group>
33
+			</layout>
34
+
35
+			<elements>
36
+				<element name="background" src="background.png" />
37
+				<element name="capLeft" src="divider.png" />
38
+				<element name="capRight" src="divider.png" />
39
+				<element name="divider" src="divider.png" />
40
+				<element name="blankButton" src="blankButton.png" />
41
+				<element name="fullscreenButton" src="fullscreenButton.png" />
42
+				<element name="fullscreenButtonOver" src="fullscreenButtonOver.png" />
43
+				<element name="muteButton" src="muteButton.png" />
44
+				<element name="muteButtonOver" src="muteButtonOver.png" />
45
+				<element name="pauseButton" src="pauseButton.png" />
46
+				<element name="pauseButtonOver" src="pauseButtonOver.png" />
47
+				<element name="playButton" src="playButton.png" />
48
+				<element name="playButtonOver" src="playButtonOver.png" />
49
+				<element name="timeSliderBuffer" src="timeSliderBuffer.png" />
50
+				<element name="timeSliderCapLeft" src="timeSliderCapLeft.png" />
51
+				<element name="timeSliderCapRight" src="timeSliderCapRight.png" />
52
+				<element name="timeSliderProgress" src="timeSliderProgress.png" />
53
+				<element name="timeSliderRail" src="timeSliderRail.png" />
54
+				<element name="normalscreenButton" src="normalscreenButton.png" />
55
+				<element name="normalscreenButtonOver" src="normalscreenButtonOver.png" />
56
+				<element name="unmuteButton" src="unmuteButton.png" />
57
+				<element name="unmuteButtonOver" src="unmuteButtonOver.png" />
58
+				<element name="volumeSliderRail" src="divider.png" />
59
+				<element name="volumeSliderProgress" src="divider.png" />
60
+			</elements>
61
+		</component>
62
+		
63
+		<component name="display">
64
+			<settings>
65
+				<setting name="bufferinterval" value="250" />
66
+				<setting name="bufferrotation" value="90" />
67
+			</settings>
68
+			<elements>
69
+				<element name="background" src="background.png" />
70
+				<element name="playIcon" src="playIcon.png" />
71
+				<element name="muteIcon" src="muteIcon.png" />
72
+				<element name="errorIcon" src="bufferIcon.png" />
73
+				<element name="bufferIcon" src="bufferIcon.png" />
74
+			</elements>
75
+		</component>
76
+		
77
+		<component name="dock">
78
+			<settings>
79
+				<setting name="fontcolor" value="0xFFFFFF" />
80
+			</settings>
81
+			<elements>
82
+				<element name="button" src="button.png" />
83
+			</elements>
84
+		</component>
85
+
86
+		<component name="playlist">
87
+			<settings>
88
+				<setting name="fontcolor" value="0xEEEEEE" />
89
+				<setting name="overcolor" value="0xFFFFFF" />
90
+				<setting name="activecolor" value="0xFFFFFF" />
91
+				<setting name="backgroundcolor" value="0x333333" />
92
+			</settings>
93
+			<elements>
94
+				<element name="item" src="item.png" />
95
+				<element name="itemOver" src="itemOver.png" />
96
+				<element name="sliderCapBottom" src="sliderCapBottom.png" />
97
+				<element name="sliderCapTop" src="sliderCapTop.png" />
98
+				<element name="sliderRail" src="sliderRail.png" />
99
+				<element name="sliderThumb" src="sliderThumb.png" />
100
+			</elements>
101
+		</component>
102
+
103
+		<component name="sharing">
104
+			<elements>
105
+				<element name="embedIcon" src="embedIcon.png" />
106
+				<element name="embedScreen" src="embedScreen.png" />
107
+				<element name="shareIcon" src="shareIcon.png" />
108
+				<element name="shareScreen" src="shareScreen.png" />
109
+			</elements>
110
+		</component>
111
+
112
+	</components>
113
+
114
+</skin>
0 115
\ No newline at end of file
1 116
new file mode 100644
2 117
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/item.png differ
3 118
new file mode 100644
4 119
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png differ
5 120
new file mode 100644
6 121
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png differ
7 122
new file mode 100644
8 123
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png differ
9 124
new file mode 100644
10 125
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png differ
11 126
new file mode 100644
12 127
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png differ
13 128
new file mode 100644
14 129
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png differ
15 130
new file mode 100644
16 131
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png differ
17 132
new file mode 100644
18 133
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png differ
19 134
new file mode 100644
20 135
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png differ
21 136
new file mode 100644
22 137
Binary files /dev/null and b/.themes/classic/source/assets/jwplayer/player.swf differ
23 138
new file mode 100644
... ...
@@ -0,0 +1,28 @@
0
+---
1
+layout: nil
2
+---
3
+<?xml version="1.0" encoding="utf-8"?>
4
+<feed xmlns="http://www.w3.org/2005/Atom">
5
+
6
+  <title>{{ site.blog_title }}</title>
7
+  <link href="{{ site.url }}/atom.xml" rel="self"/>
8
+  <link href="{{ site.url }}/"/>
9
+  <updated>{{ site.time | date_to_xmlschema }}</updated>
10
+  <id>{{ site.url }}/</id>
11
+  <author>
12
+    <name>{{ site.author }}</name>
13
+    {% if site.email %}
14
+      <email>{{ site.email }}</email>
15
+    {% endif %}
16
+  </author>
17
+
18
+  {% for post in site.posts %}
19
+  <entry>
20
+    <title>{{ post.title }}</title>
21
+    <link href="{{ site.url }}{{ post.url }}"/>
22
+    <updated>{{ post.date | date_to_xmlschema }}</updated>
23
+    <id>{{ site.url }}{{ post.id }}</id>
24
+    <content type="html">{{ post.content | full_urls: site.url | xml_escape }}</content>
25
+  </entry>
26
+  {% endfor %}
27
+</feed>
0 28
new file mode 100644
1 29
Binary files /dev/null and b/.themes/classic/source/images/bird_32_gray.png differ
2 30
new file mode 100644
3 31
Binary files /dev/null and b/.themes/classic/source/images/bird_32_gray_fail.png differ
4 32
new file mode 100644
5 33
Binary files /dev/null and b/.themes/classic/source/images/code_bg.png differ
6 34
new file mode 100644
7 35
Binary files /dev/null and b/.themes/classic/source/images/dotted-border.png differ
8 36
new file mode 100644
9 37
Binary files /dev/null and b/.themes/classic/source/images/email.png differ
10 38
new file mode 100644
11 39
Binary files /dev/null and b/.themes/classic/source/images/favicon.png differ
12 40
new file mode 100644
13 41
Binary files /dev/null and b/.themes/classic/source/images/line-tile.png differ
14 42
new file mode 100644
15 43
Binary files /dev/null and b/.themes/classic/source/images/noise.png differ
16 44
new file mode 100644
17 45
Binary files /dev/null and b/.themes/classic/source/images/rss.png differ
18 46
new file mode 100644
19 47
Binary files /dev/null and b/.themes/classic/source/images/search.png differ
20 48
new file mode 100644
... ...
@@ -0,0 +1,31 @@
0
+---
1
+layout: default
2
+blog_index: true
3
+---
4
+{% assign index = true %}
5
+{% for post in paginator.posts %}
6
+{% assign content = post.content %}
7
+  <article>
8
+    {% include article.html %}
9
+  </article>
10
+{% endfor %}
11
+<nav role="pagination">
12
+  {% if paginator.next_page %}
13
+    <a href="/page{{paginator.next_page}}/">&larr; Older</a>
14
+  {% endif %}
15
+  <a href="/archive.html">Blog Archive</a>
16
+  {% if paginator.previous_page %}
17
+    <a href="/page{{paginator.previous_page}}/">Newer &rarr;</a>
18
+  {% endif %}
19
+</nav>
20
+{% if site.disqus_short_name %}
21
+<script type="text/javascript">
22
+    var disqus_shortname = '{{ site.disqus_short_name }}';
23
+    (function () {
24
+      var s = document.createElement('script'); s.async = true;
25
+      s.type = 'text/javascript';
26
+      s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
27
+      (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
28
+    }());
29
+</script>
30
+{% endif %}
0 31
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('!5(O){5 2j(o,42){F(u k Y 42){k!=\'28\'&&k!=\'4T\'&&(o[k]=42[k])}7 o}5 2P(s,r){u R;B(X.4E&&N s==\'1p\'||s.4R||s.E&&\'3g\'Y s||s==1O){R=X.4E(s,r);R.H=s}1h{R=5F(s.E)?s:[s]}7 2j(R,2P)}5 X(s,r){7 2P(s,r)}2j(X,{4T:\'0.2.0\',X:5(o,4Z){2j(4Z?2P:X,o)}});2j(2P,{6E:5(D,1Z){F(u i=0,l=8.E;i<l;++i){i Y 8&&D.11(1Z||8[i],8[i],i,8)}7 8}});u 3d=O.$;X.28=5(){O.$=3d;7 8};(N 1v!==\'1w\')&&1v.1y&&(1v.1y=X);O[\'X\']=O[\'$\']=X}(8);!5(O){u 2a=1,3q={},2t={},5y=/6x|6r/,2O=/[^\\.]*(?=\\..*)\\.|.*/,2C=/\\..*/,3z=\'2X\',2h=\'2h\',59=\'6a\',3A=\'3A\',I=O.1f||{},V=I.2H||{},2f=V[3z],39=2f?3z:2h,5g=5(57,5t){u G=5t.18;1d(G!=1e){B(G==57){7 19}G=G.18}},3F=5(22,L){7(22.2a=L||22.2a||2a++)},2l=5(A){u L=3F(A);7(3q[L]=3q[L]||{})},4F=2f?5(A,C,D,S){A[S?3z:59](C,D,1i)}:5(A,C,D,S,1J){1J&&S&&(A[\'3b\'+1J]=A[\'3b\'+1J]||0);A[S?2h:3A](\'3L\'+C,D)},5f=5(A,D,17){7 5(1m){1m=2w(1m||((8.6F||8.1f||8).7h||O).1m);7 D.1V(A,[1m].31(17))}},4z=5(A,D,C,1z,17){7 5(1m){B(1z?1z.11(8,1m):2f?19:1m&&1m.78==\'3b\'+C||!1m){D.1V(A,[1m].31(17))}}},4h=5(A,2x,D,17){u C=2x.1g(2C,\'\'),J=2l(A),1L=J[C]||(J[C]={}),L=3F(D,2x.1g(2O,\'\'));B(1L[L]){7 A}u 1J=36[C];B(1J){D=1J.1z?4z(A,D,C,1J.1z):D;C=1J.2S||C}u 15=34[C];D=15?5f(A,D,17):4z(A,D,C,1i,17);15=2f||15;B(C==\'2J\'){u 5b=D;D=5(){3t(A,C,D)&&5b()}}A[39]&&4F(A,15?C:\'54\',D,19,!15&&C);1L[L]=D;D.2a=L;7 C==\'2J\'?A:(2t[3F(A)]=A)},3t=5(A,2x,3C){u L,2q,3G,i,J=2l(A),C=2x.1g(2C,\'\');B(!J||!J[C]){7 A}2q=2x.1g(2O,\'\');3G=2q?2q.2b(\'.\'):[3C.2a];F(i=3G.E;i--;){L=3G[i];3C=J[C][L];2k J[C][L];B(A[39]){C=36[C]?36[C].2S:C;u 15=2f||34[C];4F(A,15?C:\'54\',3C,1i,!15&&C)}}7 A},4V=5(H,D,$){7 5(e){u 1R=N H==\'1p\'?$(H,8):H;F(u M=e.M;M&&M!=8;M=M.18){F(u i=1R.E;i--;){B(1R[i]==M){7 D.1V(M,3p)}}}}},S=5(A,J,D,5a,$){B(N J==\'68\'&&!D){F(u C Y J){J.1T(C)&&S(A,C,J[C])}}1h{u 3v=N D==\'1p\',2d=(3v?D:J).2b(\' \');D=3v?4V(J,5a,$):D;F(u i=2d.E;i--;){4h(A,2d[i],D,5l.2g.3u.11(3p,3v?4:3))}}7 A},1o=5(A,1u,D){u k,C,J,2s=N(1u)==\'1p\',2q=2s&&1u.1g(2O,\'\'),2u=3t,2G=2l(A);B(2s&&/\\s/.12(1u)){1u=1u.2b(\' \');u i=1u.E-1;1d(1o(A,1u[i])&&i--){}7 A}J=2s?1u.1g(2C,\'\'):1u;B(!2G||(2s&&!2G[J])){7 A}B(N D==\'5\'){2u(A,J,D)}1h B(2q){2u(A,1u)}1h{2u=J?2u:1o;C=2s&&J;J=J?(D||2G[J]||J):2G;F(k Y J){J.1T(k)&&2u(A,C||k,J[k])}}7 A},1P=5(A,C,17){u 38,k,i,2d=C.2b(\' \');F(i=2d.E;i--;){C=2d[i].1g(2C,\'\');u 15=34[C],24=2d[i].1g(2O,\'\'),1L=2l(A)[C];B(24){24=24.2b(\'.\');F(k=24.E;k--;){1L[24[k]]&&1L[24[k]].1V(A,17)}}1h B(!17&&A[39]){4S(15,C,A)}1h{F(k Y 1L){1L.1T(k)&&1L[k].1V(A,17)}}}7 A},4S=2f?5(15,C,A){38=1f.76(15?"6X":"6W");38[15?\'6Y\':\'6Z\'](C,19,19,O,1);A.70(38)}:5(15,C,A){15?A.6U(\'3L\'+C,1f.6P()):A[\'3b\'+C]++},2F=5(A,32,C){u J=2l(32),22,k;22=C?J[C]:J;F(k Y 22){22.1T(k)&&(C?S:2F)(A,C||32,C?22[k]:k)}7 A},2w=5(e){u T={};B(!e){7 T}u C=e.C,M=e.M||e.7d;T.2U=2w.2U(e);T.2R=2w.2R(e);T.M=M&&M.1j==3?M.18:M;B(~C.4A(\'7c\')){T.5u=e.5s||e.5u}1h B((/3R|7e|7f/i).12(C)){T.7g=e.5s==3||e.7a==2;T.75={x:0,y:0};B(e.5r||e.5x){T.37=e.5r;T.35=e.5x}1h B(e.37||e.35){T.37=e.37+1f.3M.2y+1f.2H.2y;T.35=e.35+1f.3M.2z+1f.2H.2z}5y.12(C)&&(T.4v=e.4v||e[(C==\'3i\'?\'32\':\'6u\')+\'6t\'])}F(u k Y e){B(!(k Y T)){T[k]=e[k]}}7 T};2w.2U=5(e){7 5(){B(e.2U){e.2U()}1h{e.6w=1i}}};2w.2R=5(e){7 5(){B(e.2R){e.2R()}1h{e.6n=19}}};u 34={3R:1,5z:1,5D:1,5p:1,6M:1,3O:1,5i:1,3i:1,4f:1,6z:1,6K:1,6L:1,5B:1,5w:1,5v:1,6G:1,6A:1,6C:1,6D:1,6I:1,6B:1,6H:1,6p:1,5C:1,5n:1,5o:1,6o:1,2r:1,4N:1,5q:1,2J:1,6m:1,4I:1,6q:1,6b:1,72:1,5A:1,7o:1,2N:1};5 4x(1m){u 1F=1m.4v;B(!1F){7 1F==1e}7(1F!=8&&1F.7X!=\'7i\'&&!/1f/.12(8.80())&&!5g(8,1F))}u 36={3V:{2S:\'3i\',1z:4x},48:{2S:\'4f\',1z:4x},3O:{2S:/7W/.12(4O.55)?\'5i\':\'3O\'}};u 1Y={S:S,1o:1o,2F:2F,1P:1P};u 1X=5(6){u L=1o(6).2a;B(L){2k 2t[L];2k 3q[L]}};B(O[2h]){S(O,\'2J\',5(){F(u k Y 2t){2t.1T(k)&&1X(2t[k])}O.5j&&5j()})}u 5k=O.1Y;1Y.28=5(){O.1Y=5k;7 8};(N 1v!==\'1w\'&&1v.1y)?(1v.1y=1Y):(O[\'1Y\']=1Y)}(8);!5($){u b=1Y.28(),2v=5(1B,C,83){u 5m=C?[C]:[];7 5(){F(u 17,i=0,l=8.E;i<l;i++){17=[8[i]].31(5m,5l.2g.3u.11(3p,0));17.E==4&&17.13($);!3p.E&&1B==\'S\'&&C&&(1B=\'1P\');b[1B].1V(8,17)}7 8}};u S=2v(\'S\'),1o=2v(\'1o\'),1P=2v(\'1P\');u 3X={3L:S,4h:S,8e:S,8f:S,8g:S,8b:1o,8c:1o,3t:1o,85:1o,84:1P,87:1P,8a:2v(\'2F\'),89:5(5e,5d){F(u i=0,l=8.E;i<l;i++){b.S.11(8,8[i],\'3V\',5e);b.S.11(8,8[i],\'48\',5d)}7 8}};u 46=[\'5n\',\'5o\',\'3R\',\'5z\',\'5A\',\'5C\',\'7v\',\'7q\',\'5B\',\'5w\',\'5v\',\'5q\',\'5p\',\'3V\',\'48\',\'4f\',\'3i\',\'5D\',\'4I\',\'2N\',\'2r\',\'4N\',\'2J\'];F(u i=46.E;i--;){u 3Z=46[i];3X[3Z]=2v(\'S\',3Z)}$.X(3X,19)}(X);!5(O){u I=O.1f,W=I.2H,2n=1e,7I=\'3o\',5J=/^52|1l|53$/,6e=/2r|3s|7H|56|51|4Y|7J/i,5Z={2r:\'7K\',56:\'51\',4Y:\'7G\'},5S=/^52|53$/,2M=/7B/i.12(4O.55),2Q=[],3K=0,5H=/^-?[\\d\\.]+$/,2V=\'2V\',2Y=\'2Y\',1S=\'1S\',4X=/(^\\s*|\\s*$)/g,5I={7D:1,4b:1,7C:1,1Q:1};5 2B(c){7 1a 1E("(^|\\\\s+)"+c+"(\\\\s+|$)")}5 K(Q,D,1Z){F(u i=0,l=Q.E;i<l;i++){D.11(1Z||Q[i],Q[i],i,Q)}7 Q}u 2c=7z.2g.2c?5(s){7 s.2c()}:5(s){7 s.1g(4X,\'\')};5 2K(s){7 s.1g(/-(.)/g,5(m,5E){7 5E.7A()})}5 4k(G){7 G&&G.4R&&G.1j==1}5 6c(Q,D,1Z){F(u i=0,j=Q.E;i<j;++i){B(D.11(1Z,Q[i],i,Q)){7 19}}7 1i}u 5Q=I.40&&I.40.4P?5(6,14){u 1l=1e;B(14==\'3n\'){14=\'5G\'}u 44=I.40.4P(6,\'\');44&&(1l=44[2K(14)]);7 6.1t[14]||1l}:(2M&&W.49)?5(6,14){14=2K(14);14=14==\'3n\'?\'5L\':14;B(14==\'1Q\'){u P=4c;4H{P=6.4U[\'7p.7w.88\'].1Q}3S(82){4H{P=6.4U(\'5M\').1Q}3S(7T){}}7 P/4c}u 1l=6.49?6.49[14]:1e;7 6.1t[14]||1l}:5(6,14){7 6.1t[2K(14)]};5 2T(M,1r,D){u i=0,21=1r||8,r=[];K(2L(2n?2n(M):M),5(t){K(21,5(6){u n=6.66(19);D(t,n);r[i]=n;i++})},8);K(r,5(e,i){21[i]=e});21.E=i;7 21}5 5K(6,x,y){u $6=U(6),1t=$6.1M(\'6k\'),2W=$6.2W(),3l=\'7Q\',43=1t==3l,2e=[3a($6.1M(\'1H\'),10),3a($6.1M(\'1G\'),10)];B(1t==\'7Z\'){$6.1M(\'6k\',3l);1t=3l}69(2e[0])&&(2e[0]=43?0:6.3I);69(2e[1])&&(2e[1]=43?0:6.3J);x!==1e&&(6.1t.1H=x-2W.1H+2e[0]+\'2V\');y!==1e&&(6.1t.1G=y-2W.1G+2e[1]+\'2V\')}5 3f(1k){8.E=0;8.7m=1k;B(1k){1k=N 1k!==\'1p\'&&!1k.1j&&N 1k.E!==\'1w\'?1k:[1k];8.E=1k.E;F(u i=0;i<1k.E;i++){8[i]=1k[i]}}}3f.2g={K:5(D,1Z){7 K(8,D,1Z)},3s:5(D,41){u m=[],n,i;F(i=0;i<8.E;i++){n=D.11(8,8[i]);41?(41(n)&&m.13(n)):m.13(n)}7 m},3c:5(){7 U(8[0])},5N:5(){7 U(8[8.E-1])},W:5(h,2I){u 1B=2I?W.6h==1e?\'7L\':\'6h\':\'4j\',m;5 45(6,1n){1d(6.1C){6.3r(6.1C)}K(2L(h,1n),5(G){6.2m(G)})}7 N h!==\'1w\'?8.K(5(6){(m=6.3T.1c(6e))?45(6,m[0]):(6[1B]=h)}):8[0]?8[0][1B]:\'\'},2I:5(2I){7 8.W(2I,1)},7r:5(c){7 8.K(5(6){8.3j(6,c)||(6.1q=2c(6.1q+\' \'+c))},8)},7E:5(c){7 8.K(5(6){8.3j(6,c)&&(6.1q=2c(6.1q.1g(2B(c),\' \')))},8)},3j:5(6,c){7 N c==\'1w\'?6c(8,5(i){7 2B(6).12(i.1q)}):2B(c).12(6.1q)},7F:5(c,1z){B(N 1z!==\'1w\'&&!1z){7 8}7 8.K(5(6){8.3j(6,c)?(6.1q=2c(6.1q.1g(2B(c),\' \'))):(6.1q=2c(6.1q+\' \'+c))},8)},7M:5(C){7 8.K(5(6){6.1t.5O=C||\'\'})},7y:5(1k){7 8.K(5(6){6.1t.5O=\'7x\'})},45:5(G){7 8.K(5(6){K(2L(G),5(i){6.2m(i)})})},7n:5(G){7 8.K(5(6){u 3c=6.1C;K(2L(G),5(i){6.1K(i,3c)})})},4q:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.2m(6)})},4m:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.1K(6,t.1C)})},4p:5(){7 8.1F(\'25\')},4u:5(){7 8.1F(\'67\')},1F:5(1B){7 8.3s(5(6){6=6[1B];1d(6&&6.1j!==1){6=6[1B]}7 6||0},5(6){7 6})},7l:5(G){7 8.K(5(6){K(U.20(G),5(i){6.18.1K(i,6)})})},7j:5(G){7 8.K(5(6){K(U.20(G),5(i){6.18.1K(i,6.25)})})},1K:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.18.1K(6,t)})},4r:5(M,1r){7 2T.11(8,M,1r,5(t,6){u 4e=t.25;B(4e){t.18.1K(6,4e)}1h{t.18.2m(6)}})},1M:5(o,v){B(v===1w&&N o==\'1p\'){7 5Q(8[0],o)}u 1b=o;B(N o==\'1p\'){1b={};1b[o]=v}B(2M&&1b.1Q){1b.7k=\'5M(1Q=\'+(1b.1Q*4c)+\')\';1b.4b=o.4b||1;2k 1b.1Q}B(v=1b[\'3n\']){2M?(1b.5L=v):(1b.5G=v);2k 1b[\'3n\']}u D=5(6,p,v){F(u k Y 1b){B(1b.1T(k)){v=1b[k];(p=2K(k))&&5H.12(v)&&!(p Y 5I)&&(v+=2V);6.1t[p]=v}}};7 8.K(D)},2W:5(x,y){B(x||y){7 8.K(5(6){5K(6,x,y)})}u 6=8[0];u 1N=6.7u;u 1I=6.7t;u 1G=6.3J;u 1H=6.3I;1d(6=6.7O){1G=1G+6.3J;1H=1H+6.3I}7{1G:1G,1H:1H,1I:1I,1N:1N}},3y:5(k,v){u 6=8[0];7 N v==\'1w\'?5J.12(k)?5S.12(k)&&N 6[k]==\'1p\'?19:6[k]:6[1S](k):8.K(5(6){k==\'1l\'?(6.1l=v):6[2Y](k,v)})},P:5(s){7(N s==\'1p\')?8.3y(\'1l\',s):8[0].1l},7s:5(k){7 8.K(5(6){6.7N(k)})},26:5(k,v){u 6=8[0];B(N v===\'1w\'){6[1S](\'26-G-L\')||6[2Y](\'26-G-L\',++3K);u L=6[1S](\'26-G-L\');2Q[L]||(2Q[L]={});7 2Q[L][k]}1h{7 8.K(5(6){6[1S](\'26-G-L\')||6[2Y](\'26-G-L\',++3K);u L=6[1S](\'26-G-L\');u o={};o[k]=v;2Q[L]=o})}},1o:5(){7 8.K(5(6){6.18&&6.18.3r(6)})},8d:5(){7 8.K(5(6){1d(6.1C){6.3r(6.1C)}})},86:5(){7 8.3s(5(6){7 6.18.3r(6)})},2z:5(y){7 2N.11(8,1e,y,\'y\')},2y:5(x){7 2N.11(8,x,1e,\'x\')}};5 2L(G,1n){7 N G==\'1p\'?U.20(G,1n):4k(G)?[G]:G}5 2N(x,y,C){u 6=8[0];B(x==1e&&y==1e){7(3P(6)?5U():{x:6.2y,y:6.2z})[C]}B(3P(6)){1O.7U(x,y)}1h{x!=1e&&(6.2y=x);y!=1e&&(6.2z=y)}7 8}5 3P(A){7 A===1O||(/^(?:3M|W)$/i).12(A.3T)}5 5U(){7{x:1O.7S||W.2y,y:1O.7V||W.2z}}5 U(R,1r){7 1a 3f(R,1r)}U.4C=5(q){2n=q;2k U.4C};U.2j=5(o,M){F(u k Y o){o.1T(k)&&((M||3f.2g)[k]=o[k])}};U.20=5(G,1n){7 N G==\'1p\'?5(){u t=1n?5Z[1n.6f()]:1e;u 6=I.3e(t||\'4L\'),R=[];B(1n){u 5Y=G.1c(1a 1E("<"+t+">.+?<\\\\/"+t+">","g"));K(5Y,5(m){m=m.1g(/<(.+)>(.+?)<\\/\\1>/,\'$2\');u 4l=I.3e(t);4l.2m(I.7Y(m));6.2m(4l)})}1h{6.4j=G}u 4Q=6.4y;6=6.1C;R.13(6);1d(6=6.25){(6.1j==1)&&R.13(6)}7 R}():4k(G)?[G.66(19)]:[]};U.I=5(){u w=W.6s,h=W.6v,4s=8.63();7{1N:65.62(w,4s.1N),1I:65.62(h,4s.1I)}};U.1C=5(6){F(u c=6.4y,i=0,j=(c&&c.E)||0,e;i<j;i++){B(c[i].1j===1){e=c[j=i]}}7 e};U.63=5(){u h=21.77,w=21.6N;2M&&(h=W.74)&&(w=W.7b);7{1N:w,1I:h}};U.33=\'3k\'Y W?5(Z,A){7(Z.3k(A)&16)==16}:\'3m\'Y W?5(Z,A){7 Z!==A&&Z.3m(A)}:5(Z,A){1d(A=A.18){B(A===Z){7 19}}7 1i};u 3d=O.U;U.28=5(){O.U=3d;7 8};O[\'U\']=U}(8);!5($){u b=U;b.4C($);$.X(b);$.X(b(),19);$.X({20:5(G){7 $(b.20(G))}});$.2i=5(2i){7 $([1f.47(2i)])};5 4A(Q,P){F(u i=0;i<Q.E;i++){B(Q[i]===P){7 i}}7-1}5 1U(Q){u a=[],i,j;3h:F(i=0;i<Q.E;i++){F(j=0;j<a.E;j++){B(a[j]==Q[i]){3Y 3h}}a[a.E]=Q[i]}7 a}$.X({5R:5(H,4o){u 29=$(H),j,k,p,r=[];F(j=0,k=8.E;j<k;j++){p=8[j];1d(p=p.18){B(4A(29,p)!==-1){r.13(p);B(4o)5T}}}7 $(1U(r))},4o:5(H){7 8.5R(H,19)},3c:5(){7 $(8[0])},5N:5(){7 $(8[8.E-1])},4p:5(){7 $(b(8).4p())},4u:5(){7 $(b(8).4u())},4q:5(t){7 b(8.H).4q(t,8)},4m:5(t){7 b(8.H).4m(t,8)},4r:5(t){7 b(8.H).4r(t,8)},1K:5(t){7 b(8.H).1K(t,8)},6V:5(){u i,l,p,r=[];F(i=0,l=8.E;i<l;i++){p=8[i];1d(p=p.67){p.1j==1&&r.13(p)}p=8[i];1d(p=p.25){p.1j==1&&r.13(p)}}7 $(r)},71:5(){u 6,r=[];F(i=0,l=8.E;i<l;i++){B(!(6=b.1C(8[i]))){3Y}r.13(6);1d(6=6.25){6.1j==1&&r.13(6)}}7 $(1U(r))},1I:5(v){7 v?8.1M(\'1I\',v):3a(8.1M(\'1I\'),10)},1N:5(v){7 v?8.1M(\'1N\',v):3a(8.1M(\'1N\'),10)}},19)}(X||$);!5(){u 1y={},1v={1y:1y};!5(I){u 2D=0,2E=[],3E,f=1i,3D=I.3e(\'a\'),4w=\'6b\',2X=\'2X\',3B=\'3B\';/^6S|c/.12(I.6d)&&(2D=1);5 4D(){2D=1;F(u i=0,l=2E.E;i<l;i++){2E[i]()}}I[2X]&&I[2X](4w,5 D(){I.6a(4w,D,f);4D()},f);3D.3N&&I.2h(3B,(3E=5 3E(){B(/^c/.12(I.6d)){I.3A(3B,3E);4D()}}));u 2p=3D.3N?5(D){21!=1G?!2D?2E.13(D):D():!5(){4H{3D.3N(\'1H\')}3S(e){7 79(5(){2p(D)},50)}D()}()}:5(D){2D?D():2E.13(D)};(N 1v!==\'1w\')&&1v.1y?(1v.1y={2p:2p}):(1O.2p=2p)}(1f);$.X(1v.1y)}.11($);!5(O,I){u c,i,j,k,l,m,o,p,r,v,6,G,3W,4g,3x,3g,1W,4B,2i=/#([\\w\\-]+)/,6j=/\\.[\\w\\-]+/g,4a=/^#([\\w\\-]+$)/,4M=/^\\.([\\w\\-]+)$/,5P=/^([\\w\\-]+)$/,5c=/^([\\w]+)?\\.([\\w\\-]+)$/,W=I.2H,61=/\\s(?![\\s\\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^\'"]*\\])/,5X=/([.*+?\\^=!:${}()|\\[\\]\\/\\\\])/g,4W=/^([a-6J-9]+)?(?:([\\.\\#]+[\\w\\-\\.#]+)?)/,3y=/\\[([\\w\\-]+)(?:([\\|\\^\\$\\*\\~]?\\=)[\'"]?([ \\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^]+)["\']?)?\\]/,6g=1a 1E(4W.6l+\'(\'+3y.6l+\')?\');5 1R(Q){r=[];F(i=0,3W=Q.E;i<3W;i++){r[i]=Q[i]}7 r}u 2o=5(){8.c={}};2o.2g={g:5(k){7 8.c[k]||1w},s:5(k,v){8.c[k]=v;7 v}};u 30=1a 2o(),4i=1a 2o(),1x=1a 2o(),3Q=1a 2o();5 q(2n){7 2n.1c(6g)}5 3H(6y,1n,2Z,4t,4n,60,1l){u m,c,k;B(1n&&8.3T.6f()!==1n){7 1i}B(2Z&&(m=2Z.1c(2i))&&m[1]!==8.2i){7 1i}B(2Z&&(3x=2Z.1c(6j))){F(i=3x.E;i--;){c=3x[i].3u(1);B(!(30.g(c)||30.s(c,1a 1E(\'(^|\\\\s+)\'+c+\'(\\\\s+|$)\'))).12(8.1q)){7 1i}}}B(4t&&!1l){o=8.6T;F(k Y o){B(6O.2g.1T.11(o,k)&&(o[k].73||k)==4n){7 8}}}B(4t&&!5W(60,8.1S(4n)||\'\',1l)){7 1i}7 8}5 64(1s){u r=[],4B=1s.81(),4G=q(4B),1n=4G[1]||\'*\',i,l,R,V=1s.E&&(m=1s[0].1c(4a))?I.47(m[1]):I;B(!V){7 r}R=V.3o(1n);F(i=0,l=R.E;i<l;i++){6=R[i];B(3g=3H.1V(6,4G)){r.13(3g)}}7 r}5 1X(s){7 4i.g(s)||4i.s(s,s.1g(5X,\'\\\\$1\'))}5 5W(5V,23,P){7P(5V){2A\'=\':7 23==P;2A\'^=\':7 23.1c(1x.g(\'^=\'+P)||1x.s(\'^=\'+P,1a 1E(\'^\'+1X(P))));2A\'$=\':7 23.1c(1x.g(\'$=\'+P)||1x.s(\'$=\'+P,1a 1E(1X(P)+\'$\')));2A\'*=\':7 23.1c(1x.g(P)||1x.s(P,1a 1E(1X(P))));2A\'~=\':7 23.1c(1x.g(\'~=\'+P)||1x.s(\'~=\'+P,1a 1E(\'(?:^|\\\\s+)\'+1X(P)+\'(?:\\\\s+|$)\')));2A\'|=\':7 23.1c(1x.g(\'|=\'+P)||1x.s(\'|=\'+P,1a 1E(\'^\'+1X(P)+\'(-|$)\')))}7 1i}5 5h(H){u r=[],27=[],i,l,1s=3Q.g(H)||3Q.s(H,H.2b(61));1s=1s.3u(0);B(!1s.E){7 r}r=64(1s);B(!1s.E){7 r}F(j=0,l=r.E,k=0;j<l;j++){G=r[j];p=G;F(i=1s.E;i--;){z:1d(p!==W&&(p=p.18)){B(4g=3H.1V(p,q(1s[i]))){5T z}}}4g&&(27[k++]=G)}7 27}5 6i(H,1A,D){u V=(N 1A==\'1p\')?D(1A)[0]:(1A||I);B(H===1O||4d(H)){7!1A||(H!==1O&&4d(V)&&33(H,V))?[H]:[]}B(H&&N H===\'68\'&&5F(H.E)){7 1R(H)}B(m=H.1c(4a)){7(6=I.47(m[1]))?[6]:[]}B(m=H.1c(5P)){7 1R(V.3o(m[1]))}7 1i}5 4d(6){7(6&&6.1j&&(6.1j==1||6.1j==9))}5 1U(Q){u a=[],i,j;3h:F(i=0;i<Q.E;i++){F(j=0;j<a.E;j++){B(a[j]==Q[i]){3Y 3h}}a[a.E]=Q[i]}7 a}5 1D(H,1A){u V=(N 1A==\'1p\')?1D(1A)[0]:(1A||I);B(!V||!H){7[]}B(m=6i(H,1A,1D)){7 m}7 2r(H,V)}u 33=\'3k\'Y W?5(A,Z){7(Z.3k(A)&16)==16}:\'3m\'Y W?5(A,Z){Z=Z==I||Z==1O?W:Z;7 Z!==A&&Z.3m(A)}:5(A,Z){1d(A=A.18){B(A===Z){7 1}}7 0},2r=(I.7R&&I.4K)?5(H,V){B(I.4J&&(m=H.1c(4M))){7 1R((V).4J(m[1]))}7 1R((V).4K(H))}:5(H,V){u T=[],29,3w=[],i;B(m=H.1c(5c)){1W=V.3o(m[1]||\'*\');r=30.g(m[2])||30.s(m[2],1a 1E(\'(^|\\\\s+)\'+m[2]+\'(\\\\s+|$)\'));F(i=0,l=1W.E,j=0;i<l;i++){r.12(1W[i].1q)&&(T[j++]=1W[i])}7 T}F(i=0,1W=H.2b(\',\'),l=1W.E;i<l;i++){3w[i]=5h(1W[i])}F(i=0,l=3w.E;i<l&&(29=3w[i]);i++){u 27=29;B(V!==I){27=[];F(j=0,m=29.E;j<m&&(A=29[j]);j++){33(A,V)&&27.13(A)}}T=T.31(27)}7 1U(T)};1D.1U=1U;u 58=O.1D;1D.28=5(){O.1D=58;7 8};O[\'1D\']=1D}(8,1f);!5(I){u q=1D.28();5 20(G,V){u 6=(V||I).3e(\'4L\'),R=[];6.4j=G;u 4Q=6.4y;6=6.1C;R.13(6);1d(6=6.25){(6.1j==1)&&R.13(6)}7 R};$.4E=5(s,r){7/^\\s*</.12(s)?20(s,r):q(s,r)};$.X({6Q:5(s){u r=[],i,l,j,k,R;F(i=0,l=8.E;i<l;i++){R=q(s,8[i]);F(j=0,k=R.E;j<k;j++){r.13(R[j])}}7 $(q.1U(r))},6R:5(s){u 3U=$(s);F(u i=8.E,j=0,l=8.E+3U.E;i<l;i++,j++){8[i]=3U[j]}7 8}},19)}(1f);',62,513,'|||||function|el|return|this||||||||||||||||||||||var||||||element|if|type|fn|length|for|node|selector|doc|events|each|uid|target|typeof|context|val|ar|els|add|result|bonzo|root|html|ender|in|container||call|test|push|property|isNative||args|parentNode|true|new|iter|match|while|null|document|replace|else|false|nodeType|elements|value|event|tag|remove|string|className|host|tokens|style|orgEvents|module|undefined|attrCache|exports|condition|_root|method|firstChild|qwery|RegExp|related|top|left|height|custom|insertBefore|handlers|css|width|window|fire|opacity|array|getAttribute|hasOwnProperty|uniq|apply|items|clean|bean|scope|create|self|obj|actual|isNamespace|nextSibling|data|ret|noConflict|collection|__uid|split|trim|types|delta|W3C_MODEL|prototype|attachEvent|id|aug|delete|retrieveEvents|appendChild|query|cache|domReady|names|select|isString|collected|rm|integrate|fixEvent|orgType|scrollLeft|scrollTop|case|classReg|stripName|loaded|fns|clone|attached|documentElement|text|unload|camelize|normalize|ie|scroll|namespace|boosh|uidList|stopPropagation|base|insert|preventDefault|px|offset|addEventListener|setAttribute|idsAndClasses|classCache|concat|from|isAncestor|nativeEvents|clientY|customEvents|clientX|evt|eventSupport|parseInt|_on|first|old|createElement|Bonzo|item|label|mouseover|hasClass|compareDocumentPosition|rel|contains|float|getElementsByTagName|arguments|registry|removeChild|map|removeListener|slice|isDel|collections|classes|attr|addEvent|detachEvent|onreadystatechange|handler|testEl|ol|retrieveUid|uids|interpret|offsetLeft|offsetTop|uuids|on|body|doScroll|mousewheel|isBody|tokenCache|click|catch|tagName|plus|mouseenter|len|methods|continue|shortcut|defaultView|reject|o2|isRel|computed|append|shortcuts|getElementById|mouseleave|currentStyle|idOnly|zoom|100|isNode|sibling|mouseout|found|addListener|cleanCache|innerHTML|is|bah|prependTo|attribute|closest|next|appendTo|insertAfter|vp|wholeAttribute|previous|relatedTarget|domContentLoaded|check|childNodes|customHandler|indexOf|token|setQueryEngine|flush|_select|listener|intr|try|resize|getElementsByClassName|querySelectorAll|div|classOnly|submit|navigator|getComputedStyle|nodes|nodeName|fireListener|_VERSION|filters|del|simple|trimReplace|tr|chain||tbody|checked|selected|propertychange|userAgent|table|parent|oldQwery|removeEvent|delfn|org|tagAndOrClass|leave|enter|nativeHandler|isDescendant|_qwery|DOMMouseScroll|CollectGarbage|oldBean|Array|_args|blur|change|mousedown|load|pageX|which|child|keyCode|keyup|keypress|pageY|overOut|dblclick|error|keydown|focus|mouseup|m1|isFinite|cssFloat|digit|unitless|specialAttributes|xy|styleFloat|alpha|last|display|tagOnly|getStyle|parents|stateAttributes|break|getWindowScroll|qualify|checkAttr|specialChars|bitches|tagMap|qualifier|tokenizr|max|viewport|loopAll|Math|cloneNode|previousSibling|object|isNaN|removeEventListener|DOMContentLoaded|some|readyState|specialTags|toLowerCase|chunker|textContent|boilerPlate|clas|position|source|beforeunload|cancelBubble|reset|gestureend|move|out|scrollWidth|Element|to|scrollHeight|returnValue|over|whole|mousemove|touchstart|gesturestart|touchmove|touchend|forEach|ownerDocument|orientationchange|gesturechange|touchcancel|z0|selectstart|selectend|contextmenu|innerWidth|Object|createEventObject|find|and|loade|attributes|fireEvent|siblings|UIEvents|HTMLEvents|initEvent|initUIEvent|dispatchEvent|children|readystatechange|name|clientHeight|pos|createEvent|innerHeight|propertyName|setTimeout|button|clientWidth|key|srcElement|mouse|menu|rightClick|parentWindow|xul|after|filter|before|original|prepend|abort|DXImageTransform|focusout|addClass|removeAttr|offsetHeight|offsetWidth|focusin|Microsoft|none|hide|String|toUpperCase|msie|zIndex|lineHeight|removeClass|toggleClass|td|fieldset|byTag|colgroup|option|innerText|show|removeAttribute|offsetParent|switch|relative|querySelector|pageXOffset|e2|scrollTo|pageYOffset|Firefox|prefix|createDocumentFragment|static|toString|pop|e1|method2|emit|undelegate|detach|trigger|Alpha|hover|cloneEvents|unbind|unlisten|empty|bind|listen|delegate'.split('|'),0,{}))
1
+
0 2
new file mode 100644
... ...
@@ -0,0 +1,1497 @@
0
+/*!
1
+  * Ender: open module JavaScript framework
2
+  * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
3
+  * https://ender.no.de
4
+  * License MIT
5
+  * Build: ender -b jeesh
6
+  */
7
+!function (context) {
8
+
9
+  function aug(o, o2) {
10
+    for (var k in o2) {
11
+      k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
12
+    }
13
+    return o;
14
+  }
15
+
16
+  function boosh(s, r) {
17
+    var els;
18
+    if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) { //string || node || nodelist || window
19
+      els = ender._select(s, r);
20
+      els.selector = s;
21
+    } else {
22
+      els = isFinite(s.length) ? s : [s];
23
+    }
24
+    return aug(els, boosh);
25
+  }
26
+
27
+  function ender(s, r) {
28
+    return boosh(s, r);
29
+  }
30
+
31
+  aug(ender, {
32
+    _VERSION: '0.2.0',
33
+    ender: function (o, chain) {
34
+      aug(chain ? boosh : ender, o);
35
+    }
36
+  });
37
+
38
+  aug(boosh, {
39
+    forEach: function (fn, scope) {
40
+      // opt out of native forEach so we can intentionally call our own scope
41
+      // defaulting to the current item
42
+      for (var i = 0, l = this.length; i < l; ++i) {
43
+        i in this && fn.call(scope || this[i], this[i], i, this);
44
+      }
45
+      // return self for chaining
46
+      return this;
47
+    }
48
+  });
49
+
50
+  var old = context.$;
51
+  ender.noConflict = function () {
52
+    context.$ = old;
53
+    return this;
54
+  };
55
+
56
+  (typeof module !== 'undefined') && module.exports && (module.exports = ender);
57
+  // use subscript notation as extern for Closure compilation
58
+  context['ender'] = context['$'] = ender;
59
+
60
+}(this);
61
+/*!
62
+  * bean.js - copyright Jacob Thornton 2011
63
+  * https://github.com/fat/bean
64
+  * MIT License
65
+  * special thanks to:
66
+  * dean edwards: http://dean.edwards.name/
67
+  * dperini: https://github.com/dperini/nwevents
68
+  * the entire mootools team: github.com/mootools/mootools-core
69
+  */
70
+!function (context) {
71
+  var __uid = 1, registry = {}, collected = {},
72
+      overOut = /over|out/,
73
+      namespace = /[^\.]*(?=\..*)\.|.*/,
74
+      stripName = /\..*/,
75
+      addEvent = 'addEventListener',
76
+      attachEvent = 'attachEvent',
77
+      removeEvent = 'removeEventListener',
78
+      detachEvent = 'detachEvent',
79
+      doc = context.document || {},
80
+      root = doc.documentElement || {},
81
+      W3C_MODEL = root[addEvent],
82
+      eventSupport = W3C_MODEL ? addEvent : attachEvent,
83
+
84
+  isDescendant = function (parent, child) {
85
+    var node = child.parentNode;
86
+    while (node != null) {
87
+      if (node == parent) {
88
+        return true;
89
+      }
90
+      node = node.parentNode;
91
+    }
92
+  },
93
+
94
+  retrieveUid = function (obj, uid) {
95
+    return (obj.__uid = uid || obj.__uid || __uid++);
96
+  },
97
+
98
+  retrieveEvents = function (element) {
99
+    var uid = retrieveUid(element);
100
+    return (registry[uid] = registry[uid] || {});
101
+  },
102
+
103
+  listener = W3C_MODEL ? function (element, type, fn, add) {
104
+    element[add ? addEvent : removeEvent](type, fn, false);
105
+  } : function (element, type, fn, add, custom) {
106
+    custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
107
+    element[add ? attachEvent : detachEvent]('on' + type, fn);
108
+  },
109
+
110
+  nativeHandler = function (element, fn, args) {
111
+    return function (event) {
112
+      event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
113
+      return fn.apply(element, [event].concat(args));
114
+    };
115
+  },
116
+
117
+  customHandler = function (element, fn, type, condition, args) {
118
+    return function (event) {
119
+      if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
120
+        fn.apply(element, [event].concat(args));
121
+      }
122
+    };
123
+  },
124
+
125
+  addListener = function (element, orgType, fn, args) {
126
+    var type = orgType.replace(stripName, ''),
127
+        events = retrieveEvents(element),
128
+        handlers = events[type] || (events[type] = {}),
129
+        uid = retrieveUid(fn, orgType.replace(namespace, ''));
130
+    if (handlers[uid]) {
131
+      return element;
132
+    }
133
+    var custom = customEvents[type];
134
+    if (custom) {
135
+      fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
136
+      type = custom.base || type;
137
+    }
138
+    var isNative = nativeEvents[type];
139
+    fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
140
+    isNative = W3C_MODEL || isNative;
141
+    if (type == 'unload') {
142
+      var org = fn;
143
+      fn = function () {
144
+        removeListener(element, type, fn) && org();
145
+      };
146
+    }
147
+    element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
148
+    handlers[uid] = fn;
149
+    fn.__uid = uid;
150
+    return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
151
+  },
152
+
153
+  removeListener = function (element, orgType, handler) {
154
+    var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
155
+    if (!events || !events[type]) {
156
+      return element;
157
+    }
158
+    names = orgType.replace(namespace, '');
159
+    uids = names ? names.split('.') : [handler.__uid];
160
+    for (i = uids.length; i--;) {
161
+      uid = uids[i];
162
+      handler = events[type][uid];
163
+      delete events[type][uid];
164
+      if (element[eventSupport]) {
165
+        type = customEvents[type] ? customEvents[type].base : type;
166
+        var isNative = W3C_MODEL || nativeEvents[type];
167
+        listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
168
+      }
169
+    }
170
+    return element;
171
+  },
172
+
173
+  del = function (selector, fn, $) {
174
+    return function (e) {
175
+      var array = typeof selector == 'string' ? $(selector, this) : selector;
176
+      for (var target = e.target; target && target != this; target = target.parentNode) {
177
+        for (var i = array.length; i--;) {
178
+          if (array[i] == target) {
179
+            return fn.apply(target, arguments);
180
+          }
181
+        }
182
+      }
183
+    };
184
+  },
185
+
186
+  add = function (element, events, fn, delfn, $) {
187
+    if (typeof events == 'object' && !fn) {
188
+      for (var type in events) {
189
+        events.hasOwnProperty(type) && add(element, type, events[type]);
190
+      }
191
+    } else {
192
+      var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
193
+      fn = isDel ? del(events, delfn, $) : fn;
194
+      for (var i = types.length; i--;) {
195
+        addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
196
+      }
197
+    }
198
+    return element;
199
+  },
200
+
201
+  remove = function (element, orgEvents, fn) {
202
+    var k, type, events,
203
+        isString = typeof(orgEvents) == 'string',
204
+        names = isString && orgEvents.replace(namespace, ''),
205
+        rm = removeListener,
206
+        attached = retrieveEvents(element);
207
+    if (isString && /\s/.test(orgEvents)) {
208
+      orgEvents = orgEvents.split(' ');
209
+      var i = orgEvents.length - 1;
210
+      while (remove(element, orgEvents[i]) && i--) {}
211
+      return element;
212
+    }
213
+    events = isString ? orgEvents.replace(stripName, '') : orgEvents;
214
+    if (!attached || (isString && !attached[events])) {
215
+      return element;
216
+    }
217
+    if (typeof fn == 'function') {
218
+      rm(element, events, fn);
219
+    } else if (names) {
220
+      rm(element, orgEvents);
221
+    } else {
222
+      rm = events ? rm : remove;
223
+      type = isString && events;
224
+      events = events ? (fn || attached[events] || events) : attached;
225
+      for (k in events) {
226
+        events.hasOwnProperty(k) && rm(element, type || k, events[k]);
227
+      }
228
+    }
229
+    return element;
230
+  },
231
+
232
+  fire = function (element, type, args) {
233
+    var evt, k, i, types = type.split(' ');
234
+    for (i = types.length; i--;) {
235
+      type = types[i].replace(stripName, '');
236
+      var isNative = nativeEvents[type],
237
+          isNamespace = types[i].replace(namespace, ''),
238
+          handlers = retrieveEvents(element)[type];
239
+      if (isNamespace) {
240
+        isNamespace = isNamespace.split('.');
241
+        for (k = isNamespace.length; k--;) {
242
+          handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
243
+        }
244
+      } else if (!args && element[eventSupport]) {
245
+        fireListener(isNative, type, element);
246
+      } else {
247
+        for (k in handlers) {
248
+          handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
249
+        }
250
+      }
251
+    }
252
+    return element;
253
+  },
254
+
255
+  fireListener = W3C_MODEL ? function (isNative, type, element) {
256
+    evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
257
+    evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
258
+    element.dispatchEvent(evt);
259
+  } : function (isNative, type, element) {
260
+    isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
261
+  },
262
+
263
+  clone = function (element, from, type) {
264
+    var events = retrieveEvents(from), obj, k;
265
+    obj = type ? events[type] : events;
266
+    for (k in obj) {
267
+      obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
268
+    }
269
+    return element;
270
+  },
271
+
272
+  fixEvent = function (e) {
273
+    var result = {};
274
+    if (!e) {
275
+      return result;
276
+    }
277
+    var type = e.type, target = e.target || e.srcElement;
278
+    result.preventDefault = fixEvent.preventDefault(e);
279
+    result.stopPropagation = fixEvent.stopPropagation(e);
280
+    result.target = target && target.nodeType == 3 ? target.parentNode : target;
281
+    if (~type.indexOf('key')) {
282
+      result.keyCode = e.which || e.keyCode;
283
+    } else if ((/click|mouse|menu/i).test(type)) {
284
+      result.rightClick = e.which == 3 || e.button == 2;
285
+      result.pos = { x: 0, y: 0 };
286
+      if (e.pageX || e.pageY) {
287
+        result.clientX = e.pageX;
288
+        result.clientY = e.pageY;
289
+      } else if (e.clientX || e.clientY) {
290
+        result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
291
+        result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
292
+      }
293
+      overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
294
+    }
295
+    for (var k in e) {
296
+      if (!(k in result)) {
297
+        result[k] = e[k];
298
+      }
299
+    }
300
+    return result;
301
+  };
302
+
303
+  fixEvent.preventDefault = function (e) {
304
+    return function () {
305
+      if (e.preventDefault) {
306
+        e.preventDefault();
307
+      }
308
+      else {
309
+        e.returnValue = false;
310
+      }
311
+    };
312
+  };
313
+
314
+  fixEvent.stopPropagation = function (e) {
315
+    return function () {
316
+      if (e.stopPropagation) {
317
+        e.stopPropagation();
318
+      } else {
319
+        e.cancelBubble = true;
320
+      }
321
+    };
322
+  };
323
+
324
+  var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons
325
+    mousewheel: 1, DOMMouseScroll: 1, //mouse wheel
326
+    mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement
327
+    keydown: 1, keypress: 1, keyup: 1, //keyboard
328
+    orientationchange: 1, // mobile
329
+    touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch
330
+    gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture
331
+    focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements
332
+    load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
333
+    error: 1, abort: 1, scroll: 1 }; //misc
334
+
335
+  function check(event) {
336
+    var related = event.relatedTarget;
337
+    if (!related) {
338
+      return related == null;
339
+    }
340
+    return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related));
341
+  }
342
+
343
+  var customEvents = {
344
+    mouseenter: { base: 'mouseover', condition: check },
345
+    mouseleave: { base: 'mouseout', condition: check },
346
+    mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
347
+  };
348
+
349
+  var bean = { add: add, remove: remove, clone: clone, fire: fire };
350
+
351
+  var clean = function (el) {
352
+    var uid = remove(el).__uid;
353
+    if (uid) {
354
+      delete collected[uid];
355
+      delete registry[uid];
356
+    }
357
+  };
358
+
359
+  if (context[attachEvent]) {
360
+    add(context, 'unload', function () {
361
+      for (var k in collected) {
362
+        collected.hasOwnProperty(k) && clean(collected[k]);
363
+      }
364
+      context.CollectGarbage && CollectGarbage();
365
+    });
366
+  }
367
+
368
+  var oldBean = context.bean;
369
+  bean.noConflict = function () {
370
+    context.bean = oldBean;
371
+    return this;
372
+  };
373
+
374
+  (typeof module !== 'undefined' && module.exports) ?
375
+    (module.exports = bean) :
376
+    (context['bean'] = bean);
377
+
378
+}(this);!function ($) {
379
+  var b = bean.noConflict(),
380
+      integrate = function (method, type, method2) {
381
+        var _args = type ? [type] : [];
382
+        return function () {
383
+          for (var args, i = 0, l = this.length; i < l; i++) {
384
+            args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0));
385
+            args.length == 4 && args.push($);
386
+            !arguments.length && method == 'add' && type && (method = 'fire');
387
+            b[method].apply(this, args);
388
+          }
389
+          return this;
390
+        };
391
+      };
392
+
393
+  var add = integrate('add'),
394
+      remove = integrate('remove'),
395
+      fire = integrate('fire');
396
+
397
+  var methods = {
398
+
399
+    on: add,
400
+    addListener: add,
401
+    bind: add,
402
+    listen: add,
403
+    delegate: add,
404
+
405
+    unbind: remove,
406
+    unlisten: remove,
407
+    removeListener: remove,
408
+    undelegate: remove,
409
+
410
+    emit: fire,
411
+    trigger: fire,
412
+
413
+    cloneEvents: integrate('clone'),
414
+
415
+    hover: function (enter, leave) {
416
+      for (var i = 0, l = this.length; i < l; i++) {
417
+        b.add.call(this, this[i], 'mouseenter', enter);
418
+        b.add.call(this, this[i], 'mouseleave', leave);
419
+      }
420
+      return this;
421
+    }
422
+  };
423
+
424
+  var shortcuts = [
425
+    'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin',
426
+    'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown',
427
+    'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup',
428
+    'resize', 'scroll', 'select', 'submit', 'unload'
429
+  ];
430
+
431
+  for (var i = shortcuts.length; i--;) {
432
+    var shortcut = shortcuts[i];
433
+    methods[shortcut] = integrate('add', shortcut);
434
+  }
435
+
436
+  $.ender(methods, true);
437
+}(ender);
438
+/*!
439
+  * bonzo.js - copyright @dedfat 2011
440
+  * https://github.com/ded/bonzo
441
+  * Follow our software http://twitter.com/dedfat
442
+  * MIT License
443
+  */
444
+!function (context) {
445
+
446
+  var doc = context.document,
447
+      html = doc.documentElement,
448
+      query = null,
449
+      byTag = 'getElementsByTagName',
450
+      specialAttributes = /^checked|value|selected$/,
451
+      specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i,
452
+      tagMap = { select: 'option', table: 'tbody', tr: 'td' },
453
+      stateAttributes = /^checked|selected$/,
454
+      ie = /msie/i.test(navigator.userAgent),
455
+      uidList = [],
456
+      uuids = 0,
457
+      digit = /^-?[\d\.]+$/,
458
+      px = 'px',
459
+      // commonly used methods
460
+      setAttribute = 'setAttribute',
461
+      getAttribute = 'getAttribute',
462
+      trimReplace = /(^\s*|\s*$)/g,
463
+      unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 };
464
+
465
+  function classReg(c) {
466
+    return new RegExp("(^|\\s+)" + c + "(\\s+|$)");
467
+  }
468
+
469
+  function each(ar, fn, scope) {
470
+    for (var i = 0, l = ar.length; i < l; i++) {
471
+      fn.call(scope || ar[i], ar[i], i, ar);
472
+    }
473
+    return ar;
474
+  }
475
+
476
+  var trim = String.prototype.trim ?
477
+    function (s) {
478
+      return s.trim();
479
+    } :
480
+    function (s) {
481
+      return s.replace(trimReplace, '');
482
+    };
483
+
484
+  function camelize(s) {
485
+    return s.replace(/-(.)/g, function (m, m1) {
486
+      return m1.toUpperCase();
487
+    });
488
+  }
489
+
490
+  function is(node) {
491
+    return node && node.nodeName && node.nodeType == 1;
492
+  }
493
+
494
+  function some(ar, fn, scope) {
495
+    for (var i = 0, j = ar.length; i < j; ++i) {
496
+      if (fn.call(scope, ar[i], i, ar)) {
497
+        return true;
498
+      }
499
+    }
500
+    return false;
501
+  }
502
+
503
+  var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
504
+    function (el, property) {
505
+      var value = null;
506
+      if (property == 'float') {
507
+        property = 'cssFloat';
508
+      }
509
+      var computed = doc.defaultView.getComputedStyle(el, '');
510
+      computed && (value = computed[camelize(property)]);
511
+      return el.style[property] || value;
512
+
513
+    } : (ie && html.currentStyle) ?
514
+
515
+    function (el, property) {
516
+      property = camelize(property);
517
+      property = property == 'float' ? 'styleFloat' : property;
518
+
519
+      if (property == 'opacity') {
520
+        var val = 100;
521
+        try {
522
+          val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
523
+        } catch (e1) {
524
+          try {
525
+            val = el.filters('alpha').opacity;
526
+          } catch (e2) {}
527
+        }
528
+        return val / 100;
529
+      }
530
+      var value = el.currentStyle ? el.currentStyle[property] : null;
531
+      return el.style[property] || value;
532
+    } :
533
+
534
+    function (el, property) {
535
+      return el.style[camelize(property)];
536
+    };
537
+
538
+  function insert(target, host, fn) {
539
+    var i = 0, self = host || this, r = [];
540
+    each(normalize(query ? query(target) : target), function (t) {
541
+      each(self, function (el) {
542
+        var n = el.cloneNode(true);
543
+        fn(t, n);
544
+        r[i] = n;
545
+        i++;
546
+      });
547
+    }, this);
548
+    each(r, function (e, i) {
549
+      self[i] = e;
550
+    });
551
+    self.length = i;
552
+    return self;
553
+  }
554
+
555
+  function xy(el, x, y) {
556
+    var $el = bonzo(el),
557
+        style = $el.css('position'),
558
+        offset = $el.offset(),
559
+        rel = 'relative',
560
+        isRel = style == rel,
561
+        delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)];
562
+
563
+    if (style == 'static') {
564
+      $el.css('position', rel);
565
+      style = rel;
566
+    }
567
+
568
+    isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft);
569
+    isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop);
570
+
571
+    x !== null && (el.style.left = x - offset.left + delta[0] + 'px');
572
+    y !== null && (el.style.top = y - offset.top + delta[1] + 'px');
573
+
574
+  }
575
+
576
+  function Bonzo(elements) {
577
+    this.length = 0;
578
+    this.original = elements;
579
+    if (elements) {
580
+      elements = typeof elements !== 'string' &&
581
+        !elements.nodeType &&
582
+        typeof elements.length !== 'undefined' ?
583
+          elements :
584
+          [elements];
585
+      this.length = elements.length;
586
+      for (var i = 0; i < elements.length; i++) {
587
+        this[i] = elements[i];
588
+      }
589
+    }
590
+  }
591
+
592
+  Bonzo.prototype = {
593
+
594
+    each: function (fn, scope) {
595
+      return each(this, fn, scope);
596
+    },
597
+
598
+    map: function (fn, reject) {
599
+      var m = [], n, i;
600
+      for (i = 0; i < this.length; i++) {
601
+        n = fn.call(this, this[i]);
602
+        reject ? (reject(n) && m.push(n)) : m.push(n);
603
+      }
604
+      return m;
605
+    },
606
+
607
+    first: function () {
608
+      return bonzo(this[0]);
609
+    },
610
+
611
+    last: function () {
612
+      return bonzo(this[this.length - 1]);
613
+    },
614
+
615
+    html: function (h, text) {
616
+      var method = text ?
617
+        html.textContent == null ?
618
+          'innerText' :
619
+          'textContent' :
620
+        'innerHTML', m;
621
+      function append(el, tag) {
622
+        while (el.firstChild) {
623
+          el.removeChild(el.firstChild);
624
+        }
625
+        each(normalize(h, tag), function (node) {
626
+          el.appendChild(node);
627
+        });
628
+      }
629
+      return typeof h !== 'undefined' ?
630
+          this.each(function (el) {
631
+            (m = el.tagName.match(specialTags)) ?
632
+              append(el, m[0]) :
633
+              (el[method] = h);
634
+          }) :
635
+        this[0] ? this[0][method] : '';
636
+    },
637
+
638
+    text: function (text) {
639
+      return this.html(text, 1);
640
+    },
641
+
642
+    addClass: function (c) {
643
+      return this.each(function (el) {
644
+        this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c));
645
+      }, this);
646
+    },
647
+
648
+    removeClass: function (c) {
649
+      return this.each(function (el) {
650
+        this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' ')));
651
+      }, this);
652
+    },
653
+
654
+    hasClass: function (el, c) {
655
+      return typeof c == 'undefined' ?
656
+        some(this, function (i) {
657
+          return classReg(el).test(i.className);
658
+        }) :
659
+        classReg(c).test(el.className);
660
+    },
661
+
662
+    toggleClass: function (c, condition) {
663
+      if (typeof condition !== 'undefined' && !condition) {
664
+        return this;
665
+      }
666
+      return this.each(function (el) {
667
+        this.hasClass(el, c) ?
668
+          (el.className = trim(el.className.replace(classReg(c), ' '))) :
669
+          (el.className = trim(el.className + ' ' + c));
670
+      }, this);
671
+    },
672
+
673
+    show: function (type) {
674
+      return this.each(function (el) {
675
+        el.style.display = type || '';
676
+      });
677
+    },
678
+
679
+    hide: function (elements) {
680
+      return this.each(function (el) {
681
+        el.style.display = 'none';
682
+      });
683
+    },
684
+
685
+    append: function (node) {
686
+      return this.each(function (el) {
687
+        each(normalize(node), function (i) {
688
+          el.appendChild(i);
689
+        });
690
+      });
691
+    },
692
+
693
+    prepend: function (node) {
694
+      return this.each(function (el) {
695
+        var first = el.firstChild;
696
+        each(normalize(node), function (i) {
697
+          el.insertBefore(i, first);
698
+        });
699
+      });
700
+    },
701
+
702
+    appendTo: function (target, host) {
703
+      return insert.call(this, target, host, function (t, el) {
704
+        t.appendChild(el);
705
+      });
706
+    },
707
+
708
+    prependTo: function (target, host) {
709
+      return insert.call(this, target, host, function (t, el) {
710
+        t.insertBefore(el, t.firstChild);
711
+      });
712
+    },
713
+
714
+    next: function () {
715
+      return this.related('nextSibling');
716
+    },
717
+
718
+    previous: function () {
719
+      return this.related('previousSibling');
720
+    },
721
+
722
+    related: function (method) {
723
+      return this.map(
724
+        function (el) {
725
+          el = el[method];
726
+          while (el && el.nodeType !== 1) {
727
+            el = el[method];
728
+          }
729
+          return el || 0;
730
+        },
731
+        function (el) {
732
+          return el;
733
+        }
734
+      );
735
+    },
736
+
737
+    before: function (node) {
738
+      return this.each(function (el) {
739
+        each(bonzo.create(node), function (i) {
740
+          el.parentNode.insertBefore(i, el);
741
+        });
742
+      });
743
+    },
744
+
745
+    after: function (node) {
746
+      return this.each(function (el) {
747
+        each(bonzo.create(node), function (i) {
748
+          el.parentNode.insertBefore(i, el.nextSibling);
749
+        });
750
+      });
751
+    },
752
+
753
+    insertBefore: function (target, host) {
754
+      return insert.call(this, target, host, function (t, el) {
755
+        t.parentNode.insertBefore(el, t);
756
+      });
757
+    },
758
+
759
+    insertAfter: function (target, host) {
760
+      return insert.call(this, target, host, function (t, el) {
761
+        var sibling = t.nextSibling;
762
+        if (sibling) {
763
+          t.parentNode.insertBefore(el, sibling);
764
+        }
765
+        else {
766
+          t.parentNode.appendChild(el);
767
+        }
768
+      });
769
+    },
770
+
771
+    css: function (o, v) {
772
+      // is this a request for just getting a style?
773
+      if (v === undefined && typeof o == 'string') {
774
+        return getStyle(this[0], o);
775
+      }
776
+      var iter = o;
777
+      if (typeof o == 'string') {
778
+        iter = {};
779
+        iter[o] = v;
780
+      }
781
+
782
+      if (ie && iter.opacity) {
783
+        // oh this 'ol gamut
784
+        iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')';
785
+        // give it layout
786
+        iter.zoom = o.zoom || 1;
787
+        delete iter.opacity;
788
+      }
789
+
790
+      if (v = iter['float']) {
791
+        // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat
792
+        ie ? (iter.styleFloat = v) : (iter.cssFloat = v);
793
+        delete iter['float'];
794
+      }
795
+
796
+      var fn = function (el, p, v) {
797
+        for (var k in iter) {
798
+          if (iter.hasOwnProperty(k)) {
799
+            v = iter[k];
800
+            // change "5" to "5px" - unless you're line-height, which is allowed
801
+            (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px);
802
+            el.style[p] = v;
803
+          }
804
+        }
805
+      };
806
+      return this.each(fn);
807
+    },
808
+
809
+    offset: function (x, y) {
810
+      if (x || y) {
811
+        return this.each(function (el) {
812
+          xy(el, x, y);
813
+        });
814
+      }
815
+      var el = this[0];
816
+      var width = el.offsetWidth;
817
+      var height = el.offsetHeight;
818
+      var top = el.offsetTop;
819
+      var left = el.offsetLeft;
820
+      while (el = el.offsetParent) {
821
+        top = top + el.offsetTop;
822
+        left = left + el.offsetLeft;
823
+      }
824
+
825
+      return {
826
+        top: top,
827
+        left: left,
828
+        height: height,
829
+        width: width
830
+      };
831
+    },
832
+
833
+    attr: function (k, v) {
834
+      var el = this[0];
835
+      return typeof v == 'undefined' ?
836
+        specialAttributes.test(k) ?
837
+          stateAttributes.test(k) && typeof el[k] == 'string' ?
838
+            true : el[k] : el[getAttribute](k) :
839
+        this.each(function (el) {
840
+          k == 'value' ? (el.value = v) : el[setAttribute](k, v);
841
+        });
842
+    },
843
+
844
+    val: function (s) {
845
+      return (typeof s == 'string') ? this.attr('value', s) : this[0].value;
846
+    },
847
+
848
+    removeAttr: function (k) {
849
+      return this.each(function (el) {
850
+        el.removeAttribute(k);
851
+      });
852
+    },
853
+
854
+    data: function (k, v) {
855
+      var el = this[0];
856
+      if (typeof v === 'undefined') {
857
+        el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
858
+        var uid = el[getAttribute]('data-node-uid');
859
+        uidList[uid] || (uidList[uid] = {});
860
+        return uidList[uid][k];
861
+      } else {
862
+        return this.each(function (el) {
863
+          el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
864
+          var uid = el[getAttribute]('data-node-uid');
865
+          var o = {};
866
+          o[k] = v;
867
+          uidList[uid] = o;
868
+        });
869
+      }
870
+    },
871
+
872
+    remove: function () {
873
+      return this.each(function (el) {
874
+        el.parentNode && el.parentNode.removeChild(el);
875
+      });
876
+    },
877
+
878
+    empty: function () {
879
+      return this.each(function (el) {
880
+        while (el.firstChild) {
881
+          el.removeChild(el.firstChild);
882
+        }
883
+      });
884
+    },
885
+
886
+    detach: function () {
887
+      return this.map(function (el) {
888
+        return el.parentNode.removeChild(el);
889
+      });
890
+    },
891
+
892
+    scrollTop: function (y) {
893
+      return scroll.call(this, null, y, 'y');
894
+    },
895
+
896
+    scrollLeft: function (x) {
897
+      return scroll.call(this, x, null, 'x');
898
+    }
899
+  };
900
+
901
+  function normalize(node, tag) {
902
+    return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node;
903
+  }
904
+
905
+  function scroll(x, y, type) {
906
+    var el = this[0];
907
+    if (x == null && y == null) {
908
+      return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type];
909
+    }
910
+    if (isBody(el)) {
911
+      window.scrollTo(x, y);
912
+    } else {
913
+      x != null && (el.scrollLeft = x);
914
+      y != null && (el.scrollTop = y);
915
+    }
916
+    return this;
917
+  }
918
+
919
+  function isBody(element) {
920
+    return element === window || (/^(?:body|html)$/i).test(element.tagName);
921
+  }
922
+
923
+  function getWindowScroll() {
924
+    return { x: window.pageXOffset || html.scrollLeft, y: window.pageYOffset || html.scrollTop };
925
+  }
926
+
927
+  function bonzo(els, host) {
928
+    return new Bonzo(els, host);
929
+  }
930
+
931
+  bonzo.setQueryEngine = function (q) {
932
+    query = q;
933
+    delete bonzo.setQueryEngine;
934
+  };
935
+
936
+  bonzo.aug = function (o, target) {
937
+    for (var k in o) {
938
+      o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]);
939
+    }
940
+  };
941
+
942
+  bonzo.create = function (node, tag) {
943
+    return typeof node == 'string' ?
944
+      function () {
945
+        var t = tag ? tagMap[tag.toLowerCase()] : null;
946
+        var el = doc.createElement(t || 'div'), els = [];
947
+        if (tag) {
948
+          var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g"));
949
+          each(bitches, function (m) {
950
+            m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2');
951
+            var bah = doc.createElement(t);
952
+            bah.appendChild(doc.createDocumentFragment(m));
953
+            el.appendChild(bah);
954
+          });
955
+        } else {
956
+          el.innerHTML = node;
957
+        }
958
+        var nodes = el.childNodes;
959
+        el = el.firstChild;
960
+        els.push(el);
961
+        while (el = el.nextSibling) {
962
+          (el.nodeType == 1) && els.push(el);
963
+        }
964
+        return els;
965
+
966
+      }() : is(node) ? [node.cloneNode(true)] : [];
967
+  };
968
+
969
+  bonzo.doc = function () {
970
+    var w = html.scrollWidth,
971
+        h = html.scrollHeight,
972
+        vp = this.viewport();
973
+    return {
974
+      width: Math.max(w, vp.width),
975
+      height: Math.max(h, vp.height)
976
+    };
977
+  };
978
+
979
+  bonzo.firstChild = function (el) {
980
+    for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
981
+      if (c[i].nodeType === 1) {
982
+        e = c[j = i];
983
+      }
984
+    }
985
+    return e;
986
+  };
987
+
988
+  bonzo.viewport = function () {
989
+    var h = self.innerHeight,
990
+        w = self.innerWidth;
991
+    ie && (h = html.clientHeight) && (w = html.clientWidth);
992
+    return {
993
+      width: w,
994
+      height: h
995
+    };
996
+  };
997
+
998
+  bonzo.isAncestor = 'compareDocumentPosition' in html ?
999
+    function (container, element) {
1000
+      return (container.compareDocumentPosition(element) & 16) == 16;
1001
+    } : 'contains' in html ?
1002
+    function (container, element) {
1003
+      return container !== element && container.contains(element);
1004
+    } :
1005
+    function (container, element) {
1006
+      while (element = element.parentNode) {
1007
+        if (element === container) {
1008
+          return true;
1009
+        }
1010
+      }
1011
+      return false;
1012
+    };
1013
+
1014
+  var old = context.bonzo;
1015
+  bonzo.noConflict = function () {
1016
+    context.bonzo = old;
1017
+    return this;
1018
+  };
1019
+  context['bonzo'] = bonzo;
1020
+
1021
+}(this);!function ($) {
1022
+
1023
+  var b = bonzo;
1024
+  b.setQueryEngine($);
1025
+  $.ender(b);
1026
+  $.ender(b(), true);
1027
+  $.ender({
1028
+    create: function (node) {
1029
+      return $(b.create(node));
1030
+    }
1031
+  });
1032
+
1033
+  $.id = function (id) {
1034
+    return $([document.getElementById(id)]);
1035
+  };
1036
+
1037
+  function indexOf(ar, val) {
1038
+    for (var i = 0; i < ar.length; i++) {
1039
+      if (ar[i] === val) {
1040
+        return i;
1041
+      }
1042
+    }
1043
+    return -1;
1044
+  }
1045
+
1046
+  function uniq(ar) {
1047
+    var a = [], i, j;
1048
+    label:
1049
+    for (i = 0; i < ar.length; i++) {
1050
+      for (j = 0; j < a.length; j++) {
1051
+        if (a[j] == ar[i]) {
1052
+          continue label;
1053
+        }
1054
+      }
1055
+      a[a.length] = ar[i];
1056
+    }
1057
+    return a;
1058
+  }
1059
+
1060
+  $.ender({
1061
+    parents: function (selector, closest) {
1062
+      var collection = $(selector), j, k, p, r = [];
1063
+      for (j = 0, k = this.length; j < k; j++) {
1064
+        p = this[j];
1065
+        while (p = p.parentNode) {
1066
+          if (indexOf(collection, p) !== -1) {
1067
+            r.push(p);
1068
+            if (closest) break;
1069
+          }
1070
+        }
1071
+      }
1072
+      return $(uniq(r));
1073
+    },
1074
+
1075
+    closest: function (selector) {
1076
+      return this.parents(selector, true);
1077
+    },
1078
+
1079
+    first: function () {
1080
+      return $(this[0]);
1081
+    },
1082
+
1083
+    last: function () {
1084
+      return $(this[this.length - 1]);
1085
+    },
1086
+
1087
+    next: function () {
1088
+      return $(b(this).next());
1089
+    },
1090
+
1091
+    previous: function () {
1092
+      return $(b(this).previous());
1093
+    },
1094
+
1095
+    appendTo: function (t) {
1096
+      return b(this.selector).appendTo(t, this);
1097
+    },
1098
+
1099
+    prependTo: function (t) {
1100
+      return b(this.selector).prependTo(t, this);
1101
+    },
1102
+
1103
+    insertAfter: function (t) {
1104
+      return b(this.selector).insertAfter(t, this);
1105
+    },
1106
+
1107
+    insertBefore: function (t) {
1108
+      return b(this.selector).insertBefore(t, this);
1109
+    },
1110
+
1111
+    siblings: function () {
1112
+      var i, l, p, r = [];
1113
+      for (i = 0, l = this.length; i < l; i++) {
1114
+        p = this[i];
1115
+        while (p = p.previousSibling) {
1116
+          p.nodeType == 1 && r.push(p);
1117
+        }
1118
+        p = this[i];
1119
+        while (p = p.nextSibling) {
1120
+          p.nodeType == 1 && r.push(p);
1121
+        }
1122
+      }
1123
+      return $(r);
1124
+    },
1125
+
1126
+    children: function () {
1127
+      var el, r = [];
1128
+      for (i = 0, l = this.length; i < l; i++) {
1129
+        if (!(el = b.firstChild(this[i]))) {
1130
+          continue;
1131
+        }
1132
+        r.push(el);
1133
+        while (el = el.nextSibling) {
1134
+          el.nodeType == 1 && r.push(el);
1135
+        }
1136
+      }
1137
+      return $(uniq(r));
1138
+    },
1139
+
1140
+    height: function (v) {
1141
+      return v ? this.css('height', v) : parseInt(this.css('height'), 10);
1142
+    },
1143
+
1144
+    width: function (v) {
1145
+      return v ? this.css('width', v) : parseInt(this.css('width'), 10);
1146
+    }
1147
+  }, true);
1148
+
1149
+}(ender || $);
1150
+
1151
+!function () { var exports = {}, module = { exports: exports }; !function (doc) {
1152
+  var loaded = 0, fns = [], ol, f = false,
1153
+      testEl = doc.createElement('a'),
1154
+      domContentLoaded = 'DOMContentLoaded',
1155
+      addEventListener = 'addEventListener',
1156
+      onreadystatechange = 'onreadystatechange';
1157
+
1158
+  /^loade|c/.test(doc.readyState) && (loaded = 1);
1159
+
1160
+  function flush() {
1161
+    loaded = 1;
1162
+    for (var i = 0, l = fns.length; i < l; i++) {
1163
+      fns[i]();
1164
+    }
1165
+  }
1166
+  doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() {
1167
+    doc.removeEventListener(domContentLoaded, fn, f);
1168
+    flush();
1169
+  }, f);
1170
+
1171
+
1172
+  testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() {
1173
+    if (/^c/.test(doc.readyState)) {
1174
+      doc.detachEvent(onreadystatechange, ol);
1175
+      flush();
1176
+    }
1177
+  }));
1178
+
1179
+  var domReady = testEl.doScroll ?
1180
+    function (fn) {
1181
+      self != top ?
1182
+        !loaded ?
1183
+          fns.push(fn) :
1184
+          fn() :
1185
+        !function () {
1186
+          try {
1187
+            testEl.doScroll('left');
1188
+          } catch (e) {
1189
+            return setTimeout(function() {
1190
+              domReady(fn);
1191
+            }, 50);
1192
+          }
1193
+          fn();
1194
+        }();
1195
+    } :
1196
+    function (fn) {
1197
+      loaded ? fn() : fns.push(fn);
1198
+    };
1199
+
1200
+    (typeof module !== 'undefined') && module.exports ?
1201
+      (module.exports = {domReady: domReady}) :
1202
+      (window.domReady = domReady);
1203
+
1204
+}(document); $.ender(module.exports); }.call($);
1205
+/*!
1206
+  * qwery.js - copyright @dedfat
1207
+  * https://github.com/ded/qwery
1208
+  * Follow our software http://twitter.com/dedfat
1209
+  * MIT License
1210
+  */
1211
+
1212
+!function (context, doc) {
1213
+
1214
+  var c, i, j, k, l, m, o, p, r, v,
1215
+      el, node, len, found, classes, item, items, token,
1216
+      id = /#([\w\-]+)/,
1217
+      clas = /\.[\w\-]+/g,
1218
+      idOnly = /^#([\w\-]+$)/,
1219
+      classOnly = /^\.([\w\-]+)$/,
1220
+      tagOnly = /^([\w\-]+)$/,
1221
+      tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
1222
+      html = doc.documentElement,
1223
+      tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
1224
+      specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
1225
+      simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
1226
+      attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
1227
+      chunker = new RegExp(simple.source + '(' + attr.source + ')?');
1228
+
1229
+  function array(ar) {
1230
+    r = [];
1231
+    for (i = 0, len = ar.length; i < len; i++) {
1232
+      r[i] = ar[i];
1233
+    }
1234
+    return r;
1235
+  }
1236
+
1237
+  var cache = function () {
1238
+    this.c = {};
1239
+  };
1240
+  cache.prototype = {
1241
+    g: function (k) {
1242
+      return this.c[k] || undefined;
1243
+    },
1244
+    s: function (k, v) {
1245
+      this.c[k] = v;
1246
+      return v;
1247
+    }
1248
+  };
1249
+
1250
+  var classCache = new cache(),
1251
+      cleanCache = new cache(),
1252
+      attrCache = new cache(),
1253
+      tokenCache = new cache();
1254
+
1255
+  function q(query) {
1256
+    return query.match(chunker);
1257
+  }
1258
+
1259
+  function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) {
1260
+    var m, c, k;
1261
+    if (tag && this.tagName.toLowerCase() !== tag) {
1262
+      return false;
1263
+    }
1264
+    if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) {
1265
+      return false;
1266
+    }
1267
+    if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
1268
+      for (i = classes.length; i--;) {
1269
+        c = classes[i].slice(1);
1270
+        if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) {
1271
+          return false;
1272
+        }
1273
+      }
1274
+    }
1275
+    if (wholeAttribute && !value) {
1276
+      o = this.attributes;
1277
+      for (k in o) {
1278
+        if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
1279
+          return this;
1280
+        }
1281
+      }
1282
+    }
1283
+    if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) {
1284
+      return false;
1285
+    }
1286
+    return this;
1287
+  }
1288
+
1289
+  function loopAll(tokens) {
1290
+    var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els,
1291
+        root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc;
1292
+    if (!root) {
1293
+      return r;
1294
+    }
1295
+    els = root.getElementsByTagName(tag);
1296
+    for (i = 0, l = els.length; i < l; i++) {
1297
+      el = els[i];
1298
+      if (item = interpret.apply(el, intr)) {
1299
+        r.push(item);
1300
+      }
1301
+    }
1302
+    return r;
1303
+  }
1304
+
1305
+  function clean(s) {
1306
+    return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'));
1307
+  }
1308
+
1309
+  function checkAttr(qualify, actual, val) {
1310
+    switch (qualify) {
1311
+    case '=':
1312
+      return actual == val;
1313
+    case '^=':
1314
+      return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val))));
1315
+    case '$=':
1316
+      return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$')));
1317
+    case '*=':
1318
+      return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val))));
1319
+    case '~=':
1320
+      return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)')));
1321
+    case '|=':
1322
+      return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)')));
1323
+    }
1324
+    return false;
1325
+  }
1326
+
1327
+  function _qwery(selector) {
1328
+    var r = [], ret = [], i, l,
1329
+        tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr));
1330
+    tokens = tokens.slice(0);
1331
+    if (!tokens.length) {
1332
+      return r;
1333
+    }
1334
+    r = loopAll(tokens);
1335
+    if (!tokens.length) {
1336
+      return r;
1337
+    }
1338
+    // loop through all descendent tokens
1339
+    for (j = 0, l = r.length, k = 0; j < l; j++) {
1340
+      node = r[j];
1341
+      p = node;
1342
+      // loop through each token
1343
+      for (i = tokens.length; i--;) {
1344
+        z: // loop through parent nodes
1345
+        while (p !== html && (p = p.parentNode)) {
1346
+          if (found = interpret.apply(p, q(tokens[i]))) {
1347
+            break z;
1348
+          }
1349
+        }
1350
+      }
1351
+      found && (ret[k++] = node);
1352
+    }
1353
+    return ret;
1354
+  }
1355
+
1356
+  function boilerPlate(selector, _root, fn) {
1357
+    var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
1358
+    if (selector === window || isNode(selector)) {
1359
+      return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
1360
+    }
1361
+    if (selector && typeof selector === 'object' && isFinite(selector.length)) {
1362
+      return array(selector);
1363
+    }
1364
+    if (m = selector.match(idOnly)) {
1365
+      return (el = doc.getElementById(m[1])) ? [el] : [];
1366
+    }
1367
+    if (m = selector.match(tagOnly)) {
1368
+      return array(root.getElementsByTagName(m[1]));
1369
+    }
1370
+    return false;
1371
+  }
1372
+
1373
+  function isNode(el) {
1374
+    return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
1375
+  }
1376
+
1377
+  function uniq(ar) {
1378
+    var a = [], i, j;
1379
+    label:
1380
+    for (i = 0; i < ar.length; i++) {
1381
+      for (j = 0; j < a.length; j++) {
1382
+        if (a[j] == ar[i]) {
1383
+          continue label;
1384
+        }
1385
+      }
1386
+      a[a.length] = ar[i];
1387
+    }
1388
+    return a;
1389
+  }
1390
+
1391
+  function qwery(selector, _root) {
1392
+    var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
1393
+    if (!root || !selector) {
1394
+      return [];
1395
+    }
1396
+    if (m = boilerPlate(selector, _root, qwery)) {
1397
+      return m;
1398
+    }
1399
+    return select(selector, root);
1400
+  }
1401
+
1402
+  var isAncestor = 'compareDocumentPosition' in html ?
1403
+    function (element, container) {
1404
+      return (container.compareDocumentPosition(element) & 16) == 16;
1405
+    } : 'contains' in html ?
1406
+    function (element, container) {
1407
+      container = container == doc || container == window ? html : container;
1408
+      return container !== element && container.contains(element);
1409
+    } :
1410
+    function (element, container) {
1411
+      while (element = element.parentNode) {
1412
+        if (element === container) {
1413
+          return 1;
1414
+        }
1415
+      }
1416
+      return 0;
1417
+    },
1418
+
1419
+  select = (doc.querySelector && doc.querySelectorAll) ?
1420
+    function (selector, root) {
1421
+      if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
1422
+        return array((root).getElementsByClassName(m[1]));
1423
+      }
1424
+      return array((root).querySelectorAll(selector));
1425
+    } :
1426
+    function (selector, root) {
1427
+      var result = [], collection, collections = [], i;
1428
+      if (m = selector.match(tagAndOrClass)) {
1429
+        items = root.getElementsByTagName(m[1] || '*');
1430
+        r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)'));
1431
+        for (i = 0, l = items.length, j = 0; i < l; i++) {
1432
+          r.test(items[i].className) && (result[j++] = items[i]);
1433
+        }
1434
+        return result;
1435
+      }
1436
+      for (i = 0, items = selector.split(','), l = items.length; i < l; i++) {
1437
+        collections[i] = _qwery(items[i]);
1438
+      }
1439
+      for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) {
1440
+        var ret = collection;
1441
+        if (root !== doc) {
1442
+          ret = [];
1443
+          for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) {
1444
+            // make sure element is a descendent of root
1445
+            isAncestor(element, root) && ret.push(element);
1446
+          }
1447
+        }
1448
+        result = result.concat(ret);
1449
+      }
1450
+      return uniq(result);
1451
+    };
1452
+
1453
+  qwery.uniq = uniq;
1454
+  var oldQwery = context.qwery;
1455
+  qwery.noConflict = function () {
1456
+    context.qwery = oldQwery;
1457
+    return this;
1458
+  };
1459
+  context['qwery'] = qwery;
1460
+
1461
+}(this, document);!function (doc) {
1462
+  var q = qwery.noConflict();
1463
+  function create(node, root) {
1464
+    var el = (root || doc).createElement('div'), els = [];
1465
+    el.innerHTML = node;
1466
+    var nodes = el.childNodes;
1467
+    el = el.firstChild;
1468
+    els.push(el);
1469
+    while (el = el.nextSibling) {
1470
+      (el.nodeType == 1) && els.push(el);
1471
+    }
1472
+    return els;
1473
+  };
1474
+  $._select = function (s, r) {
1475
+    return /^\s*</.test(s) ? create(s, r) : q(s, r);
1476
+  };
1477
+  $.ender({
1478
+    find: function (s) {
1479
+      var r = [], i, l, j, k, els;
1480
+      for (i = 0, l = this.length; i < l; i++) {
1481
+        els = q(s, this[i]);
1482
+        for (j = 0, k = els.length; j < k; j++) {
1483
+          r.push(els[j]);
1484
+        }
1485
+      }
1486
+      return $(q.uniq(r));
1487
+    }
1488
+    , and: function (s) {
1489
+      var plus = $(s);
1490
+      for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
1491
+        this[i] = plus[j];
1492
+      }
1493
+      return this;
1494
+    }
1495
+  }, true);
1496
+}(document);
0 1497
new file mode 100644
... ...
@@ -0,0 +1,85 @@
0
+// jXHR.js (JSON-P XHR)
1
+// v0.1 (c) Kyle Simpson
2
+// MIT License
3
+
4
+(function(global){
5
+	var SETTIMEOUT = global.setTimeout, // for better compression
6
+		doc = global.document,
7
+		callback_counter = 0;
8
+
9
+	global.jXHR = function() {
10
+		var script_url,
11
+			script_loaded,
12
+			jsonp_callback,
13
+			scriptElem,
14
+			publicAPI = null;
15
+
16
+		function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
17
+
18
+		function reset() {
19
+			script_loaded = false;
20
+			script_url = "";
21
+			removeScript();
22
+			scriptElem = null;
23
+			fireReadyStateChange(0);
24
+		}
25
+
26
+		function ThrowError(msg) {
27
+			try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); }
28
+		}
29
+
30
+		function handleScriptLoad() {
31
+			if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
32
+			this.onload = this.onreadystatechange = null; // prevent memory leak
33
+			script_loaded = true;
34
+			if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"].");
35
+			removeScript();
36
+		}
37
+
38
+		function fireReadyStateChange(rs,args) {
39
+			args = args || [];
40
+			publicAPI.readyState = rs;
41
+			if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
42
+		}
43
+
44
+		publicAPI = {
45
+			onerror:null,
46
+			onreadystatechange:null,
47
+			readyState:0,
48
+			open:function(method,url){
49
+				reset();
50
+				internal_callback = "cb"+(callback_counter++);
51
+				(function(icb){
52
+					global.jXHR[icb] = function() {
53
+						try { fireReadyStateChange.call(publicAPI,4,arguments); }
54
+						catch(err) {
55
+							publicAPI.readyState = -1;
56
+							ThrowError("Script failed to run ["+script_url+"].");
57
+						}
58
+						global.jXHR[icb] = null;
59
+					};
60
+				})(internal_callback);
61
+				script_url = url.replace(/=\?/,"=jXHR."+internal_callback);
62
+				fireReadyStateChange(1);
63
+			},
64
+			send:function(){
65
+				SETTIMEOUT(function(){
66
+					scriptElem = doc.createElement("script");
67
+					scriptElem.setAttribute("type","text/javascript");
68
+					scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
69
+					scriptElem.setAttribute("src",script_url);
70
+					doc.getElementsByTagName("head")[0].appendChild(scriptElem);
71
+				},0);
72
+				fireReadyStateChange(2);
73
+			},
74
+			setRequestHeader:function(){}, // noop
75
+			getResponseHeader:function(){return "";}, // basically noop
76
+			getAllResponseHeaders:function(){return [];} // ditto
77
+		};
78
+
79
+		reset();
80
+
81
+		return publicAPI;
82
+	};
83
+})(window);
84
+
0 85
new file mode 100644
... ...
@@ -0,0 +1,298 @@
0
+/*!	SWFObject v2.2 <http://code.google.com/p/swfobject/>
1
+	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
2
+*/
3
+
4
+var swfobject = function() {
5
+
6
+	var UNDEF = "undefined",
7
+		OBJECT = "object",
8
+		SHOCKWAVE_FLASH = "Shockwave Flash",
9
+		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
10
+		FLASH_MIME_TYPE = "application/x-shockwave-flash",
11
+		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
12
+
13
+		win = window,
14
+		doc = document,
15
+		nav = navigator,
16
+
17
+		plugin = false,
18
+		regObjArr = [],
19
+		objIdArr = [],
20
+		storedAltContent,
21
+		storedAltContentId,
22
+		storedCallbackFn,
23
+		storedCallbackObj,
24
+		autoHideShow = true,
25
+
26
+	/* Centralized function for browser feature detection
27
+		- User agent string detection is only used when no good alternative is possible
28
+		- Is executed directly for optimal performance
29
+	*/
30
+	ua = function() {
31
+		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
32
+			u = nav.userAgent.toLowerCase(),
33
+			p = nav.platform.toLowerCase(),
34
+			windows = p ? /win/.test(p) : /win/.test(u),
35
+			mac = p ? /mac/.test(p) : /mac/.test(u),
36
+			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
37
+			ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
38
+			playerVersion = [0,0,0],
39
+			d = null;
40
+		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
41
+			d = nav.plugins[SHOCKWAVE_FLASH].description;
42
+			if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
43
+				plugin = true;
44
+				ie = false; // cascaded feature detection for Internet Explorer
45
+				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
46
+				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
47
+				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
48
+				playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
49
+			}
50
+		}
51
+		else if (typeof win.ActiveXObject != UNDEF) {
52
+			try {
53
+				var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
54
+				if (a) { // a will return null when ActiveX is disabled
55
+					d = a.GetVariable("$version");
56
+					if (d) {
57
+						ie = true; // cascaded feature detection for Internet Explorer
58
+						d = d.split(" ")[1].split(",");
59
+						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
60
+					}
61
+				}
62
+			}
63
+			catch(e) {}
64
+		}
65
+		return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
66
+	}()
67
+
68
+
69
+	/* Main function
70
+		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
71
+	*/
72
+	function main() {
73
+		if (plugin) { testPlayerVersion(); }
74
+		else { matchVersions(); }
75
+	}
76
+
77
+	/* Detect the Flash Player version for non-Internet Explorer browsers
78
+		- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
79
+		  a. Both release and build numbers can be detected
80
+		  b. Avoid wrong descriptions by corrupt installers provided by Adobe
81
+		  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
82
+		- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
83
+	*/
84
+	function testPlayerVersion() {
85
+		var b = doc.getElementsByTagName("body")[0];
86
+		var o = createElement(OBJECT);
87
+		o.setAttribute("type", FLASH_MIME_TYPE);
88
+		var t = b.appendChild(o);
89
+		if (t) {
90
+			var counter = 0;
91
+			(function(){
92
+				if (typeof t.GetVariable != UNDEF) {
93
+					var d = t.GetVariable("$version");
94
+					if (d) {
95
+						d = d.split(" ")[1].split(",");
96
+						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
97
+					}
98
+				}
99
+				else if (counter < 10) {
100
+					counter++;
101
+					setTimeout(arguments.callee, 10);
102
+					return;
103
+				}
104
+				b.removeChild(o);
105
+				t = null;
106
+				matchVersions();
107
+			})();
108
+		}
109
+		else {
110
+			matchVersions();
111
+		}
112
+	}
113
+
114
+
115
+	/* Cross-browser dynamic SWF creation
116
+	*/
117
+	function createSWF(attObj, parObj, id) {
118
+		var r, el = getElementById(id);
119
+		if (ua.wk && ua.wk < 312) { return r; }
120
+		if (el) {
121
+			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
122
+				attObj.id = id;
123
+			}
124
+			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
125
+				var att = "";
126
+				for (var i in attObj) {
127
+					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
128
+						if (i.toLowerCase() == "data") {
129
+							parObj.movie = attObj[i];
130
+						}
131
+						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
132
+							att += ' class="' + attObj[i] + '"';
133
+						}
134
+						else if (i.toLowerCase() != "classid") {
135
+							att += ' ' + i + '="' + attObj[i] + '"';
136
+						}
137
+					}
138
+				}
139
+				var par = "";
140
+				for (var j in parObj) {
141
+					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
142
+						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
143
+					}
144
+				}
145
+				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
146
+				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
147
+				r = getElementById(attObj.id);
148
+			}
149
+			else { // well-behaving browsers
150
+				var o = createElement(OBJECT);
151
+				o.setAttribute("type", FLASH_MIME_TYPE);
152
+				for (var m in attObj) {
153
+					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
154
+						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
155
+							o.setAttribute("class", attObj[m]);
156
+						}
157
+						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
158
+							o.setAttribute(m, attObj[m]);
159
+						}
160
+					}
161
+				}
162
+				for (var n in parObj) {
163
+					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
164
+						createObjParam(o, n, parObj[n]);
165
+					}
166
+				}
167
+				el.parentNode.replaceChild(o, el);
168
+				r = o;
169
+			}
170
+		}
171
+		return r;
172
+	}
173
+
174
+	function createObjParam(el, pName, pValue) {
175
+		var p = createElement("param");
176
+		p.setAttribute("name", pName);
177
+		p.setAttribute("value", pValue);
178
+		el.appendChild(p);
179
+	}
180
+
181
+	/* Cross-browser SWF removal
182
+		- Especially needed to safely and completely remove a SWF in Internet Explorer
183
+	*/
184
+	/* Functions to optimize JavaScript compression
185
+	*/
186
+	function getElementById(id) {
187
+		var el = null;
188
+		try {
189
+			el = doc.getElementById(id);
190
+		}
191
+		catch (e) {}
192
+		return el;
193
+	}
194
+
195
+	function createElement(el) {
196
+		return doc.createElement(el);
197
+	}
198
+
199
+	/* Flash Player and SWF content version matching
200
+	*/
201
+	function hasPlayerVersion(rv) {
202
+		var pv = ua.pv, v = rv.split(".");
203
+		v[0] = parseInt(v[0], 10);
204
+		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
205
+		v[2] = parseInt(v[2], 10) || 0;
206
+		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
207
+	}
208
+
209
+
210
+	/* Filter to avoid XSS attacks
211
+	*/
212
+	function urlEncodeIfNecessary(s) {
213
+		var regex = /[\\\"<>\.;]/;
214
+		var hasBadChars = regex.exec(s) != null;
215
+		return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
216
+	}
217
+
218
+	return {
219
+		/* Public API
220
+			- Reference: http://code.google.com/p/swfobject/wiki/documentation
221
+		*/
222
+
223
+		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, flashvarsObj, parObj, attObj, callbackFn) {
224
+			var callbackObj = {success:false, id:replaceElemIdStr};
225
+			if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
226
+              widthStr += ""; // auto-convert to string
227
+              heightStr += "";
228
+              var att = {};
229
+              if (attObj && typeof attObj === OBJECT) {
230
+                for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
231
+                  att[i] = attObj[i];
232
+                }
233
+              }
234
+              att.data = swfUrlStr;
235
+              att.width = widthStr;
236
+              att.height = heightStr;
237
+              var par = {};
238
+              if (parObj && typeof parObj === OBJECT) {
239
+                for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
240
+                  par[j] = parObj[j];
241
+                }
242
+              }
243
+              if (flashvarsObj && typeof flashvarsObj === OBJECT) {
244
+                for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
245
+                  if (typeof par.flashvars != UNDEF) {
246
+                    par.flashvars += "&" + k + "=" + flashvarsObj[k];
247
+                  }
248
+                  else {
249
+                    par.flashvars = k + "=" + flashvarsObj[k];
250
+                  }
251
+                }
252
+              }
253
+              if (hasPlayerVersion(swfVersionStr)) { // create SWF
254
+                var obj = createSWF(att, par, replaceElemIdStr);
255
+                callbackObj.success = true;
256
+                callbackObj.ref = obj;
257
+              }
258
+              if (callbackFn) { callbackFn(callbackObj); }
259
+			}
260
+			else if (callbackFn) { callbackFn(callbackObj);	}
261
+		},
262
+
263
+		ua: ua,
264
+
265
+		getFlashPlayerVersion: function() {
266
+			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
267
+		},
268
+
269
+		hasFlashPlayerVersion: hasPlayerVersion,
270
+
271
+		createSWF: function(attObj, parObj, replaceElemIdStr) {
272
+			if (ua.w3) {
273
+				return createSWF(attObj, parObj, replaceElemIdStr);
274
+			}
275
+			else {
276
+				return undefined;
277
+			}
278
+		},
279
+
280
+		getQueryParamValue: function(param) {
281
+			var q = doc.location.search || doc.location.hash;
282
+			if (q) {
283
+				if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
284
+				if (param == null) {
285
+					return urlEncodeIfNecessary(q);
286
+				}
287
+				var pairs = q.split("&");
288
+				for (var i = 0; i < pairs.length; i++) {
289
+					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
290
+						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
291
+					}
292
+				}
293
+			}
294
+			return "";
295
+		}
296
+	};
297
+}();
0 298
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+/* Modernizr 2.0.4 (Custom Build) | MIT & BSD
1
+ * Contains: video | iepp | respond | mq | cssclasses | teststyles | testprop | testallprops | prefixes | domprefixes | load
2
+ * Build URL: http://j.mp/m1H1Y1
3
+ */
4
+;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+o.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(n.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.4",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),o="Webkit Moz O ms Khtml".split(" "),p={},q={},r={},s=[],t=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},u=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;t("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)},p.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c};for(var E in p)x(p,E)&&(v=E.toLowerCase(),e[v]=p[E](),s.push((e[v]?"":"no-")+v));y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=n,e._domPrefixes=o,e.mq=u,e.testProp=function(a){return C([a])},e.testAllProps=D,e.testStyles=t,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+s.join(" "):"");return e}(this,this.document),function(a,b){function u(){r(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=b;if(!b){var c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=j.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,g,i;for(;d<c;d++)e=b[d],f=e.href,g=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!h[f]&&(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(f)||f.replace(RegExp.$1,"").split("/")[0]===a.location.host?l.push({href:f,media:g}):h[f]=!0);n()},n=function(){if(l.length){var a=l.shift();s(a.href,function(b){o(b,a.href,a.media),h[a.href]=!0,n()})}},o=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]+\{[^\}\{]+\})+/gi),g=d&&d.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,f.push(h(a))):(l=d[j].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],e.push({media:m.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:f.length-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}r()},p,q,r=function(a){var b="clientWidth",h=d[b],l=c.compatMode==="CSS1Compat"&&h||c.body[b]||h,m={},n=c.createDocumentFragment(),o=k[k.length-1],s=(new Date).getTime();if(a&&p&&s-p<i)clearTimeout(q),q=setTimeout(r,i);else{p=s;for(var t in e){var u=e[t];if(!u.minw&&!u.maxw||(!u.minw||u.minw&&l>=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css",!a.e&&(w||r)?function a(b){m(function(){if(!d)try{b.sheet.cssRules.length?(d=1,j()):a(b)}catch(c){c.code==1e3||c.message=="security"||c.message=="denied"?(d=1,m(function(){j()},0)):a(b)}},0)}(c):(c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload()),m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return typeof a=="object"},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
0 5
new file mode 100644
... ...
@@ -0,0 +1,143 @@
0
+function getNav(){
1
+  var mobileNav = $('body > nav fieldset[role=site-search]').after('<fieldset role="mobile-nav"></fieldset>').next().append('<select></select>');
2
+  mobileNav.children('select').append('<option value="">Navigate&hellip;</option>');
3
+  $($('body > nav ul[role=main-nav] a')).each(function(link) {
4
+    mobileNav.children('select').append('<option value="'+link.href+'">&bull; '+link.text+'</option>')
5
+  });
6
+  mobileNav.children('select').bind('change', function(event){
7
+    if (event.target.value) window.location.href = event.target.value;
8
+  });
9
+}
10
+function addSidebarToggler() {
11
+  $('#articles').before('<a href="#" class="toggle-sidebar">&raquo;</a>').previous().bind('click', function(e){
12
+    e.preventDefault();
13
+    if($('body').hasClass('collapse-sidebar')){
14
+      $('body').removeClass('collapse-sidebar');
15
+      e.target.innerHTML = '&raquo;';
16
+    } else {
17
+      $('body').addClass('collapse-sidebar');
18
+      e.target.innerHTML = '&laquo;';
19
+    }
20
+  });
21
+}
22
+function testFeatures() {
23
+  var features = ['maskImage'];
24
+  $(features).map(function(feature){
25
+    if (Modernizr.testAllProps(feature)) {
26
+      $('html').addClass(feature);
27
+    } else {
28
+      $('html').addClass('no-'+feature);
29
+    }
30
+  });
31
+  if ("placeholder" in document.createElement("input")) {
32
+    $('html').addClass('placeholder');
33
+  } else {
34
+    $('html').addClass('no-placeholder');
35
+  }
36
+}
37
+
38
+function addCodeLineNumbers(){
39
+  if (navigator.appName == 'Microsoft Internet Explorer') { return }
40
+  $('div.highlight pre code').each(function(el){ addDivLines(el); });
41
+  $('div.highlight, div.gist-highlight').each(function(code){
42
+    var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">';
43
+    var lineNumbers = '<pre class="line-numbers">';
44
+    var tableMiddle = '</pre></td><td class="code" width="100%">';
45
+    var tableEnd = '</td></tr></tbody></table>';
46
+    var count = $('div.line', code).length;
47
+    for (i=1;i<=count; i++){
48
+      lineNumbers += '<span class="line">'+i+'</span>\n';
49
+    }
50
+    table = tableStart + lineNumbers + tableMiddle + '<pre>'+$('pre', code).html()+'</pre>' + tableEnd;
51
+    $(code).html(table);
52
+  });
53
+}
54
+function addDivLines(el){
55
+  var content = $(el).html();
56
+  var lines = content.replace(/\s*$/g, '').split(/\n/);
57
+  var count = lines.length;
58
+  $(lines).each(function(line, index){
59
+    if(line == '') line = ' ';
60
+    lines[index] = '<div class="line">' + line + '</div>';
61
+  });
62
+  $(el).html(lines.join(''));
63
+}
64
+
65
+function flashVideoFallback(){
66
+  var flashplayerlocation = "/assets/jwplayer/player.swf",
67
+  flashplayerskin = "/assets/jwplayer/glow/glow.xml";
68
+  $('video').each(function(video){
69
+    video = $(video);
70
+    if(!Modernizr.video.h264 && swfobject.getFlashPlayerVersion() || window.location.hash.indexOf("flash-test") != -1){
71
+      video.children('source[src$=mp4]').first().map(function(source){;
72
+        var src = $(source).attr('src'),
73
+        id = 'video_'+Math.round(1 + Math.random()*(100000)),
74
+        width = video.attr('width'),
75
+        height = parseInt(video.attr('height')) + 30;
76
+        video.after('<div class="flash-video"><div><div id='+id+'>');
77
+        swfobject.embedSWF(flashplayerlocation, id, width, height + 30, "9.0.0",
78
+          { file : src, image : video.attr('poster'), skin : flashplayerskin } ,
79
+          { movie : src, wmode : "opaque", allowfullscreen : "true" });
80
+      });
81
+      video.remove();
82
+    }
83
+  });
84
+}
85
+
86
+function wrapFlashVideos(){
87
+  $('object').each(function(object){
88
+    object = $(object);
89
+    if(object.children('param[name=movie]')){
90
+      var wrapper = object.before('<div class="flash-video"><div>').previous();
91
+      $(wrapper).children().append(object);
92
+    }
93
+  });
94
+  $('iframe[src*=vimeo],iframe[src*=youtube]').each(function(iframe){
95
+    iframe = $(iframe);
96
+    var wrapper = iframe.before('<div class="flash-video"><div>').previous();
97
+    $(wrapper).children().append(iframe);
98
+  });
99
+}
100
+
101
+$.domReady(function(){
102
+  testFeatures();
103
+  wrapFlashVideos();
104
+  flashVideoFallback();
105
+  addCodeLineNumbers();
106
+  getNav();
107
+  addSidebarToggler();
108
+});
109
+
110
+// iOS scaling bug fix
111
+// Rewritten version
112
+// By @mathias, @cheeaun and @jdalton
113
+// Source url: https://gist.github.com/901295
114
+(function(doc) {
115
+  var addEvent = 'addEventListener',
116
+  type = 'gesturestart',
117
+  qsa = 'querySelectorAll',
118
+  scales = [1, 1],
119
+  meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
120
+  function fix() {
121
+    meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
122
+    doc.removeEventListener(type, fix, true);
123
+  }
124
+  if ((meta = meta[meta.length - 1]) && addEvent in doc) {
125
+    fix();
126
+    scales = [.25, 1.6];
127
+    doc[addEvent](type, fix, true);
128
+  }
129
+}(document));
130
+
131
+/*!	SWFObject v2.2 modified by Brandon Mathis to contain only what is necessary to dynamically embed flash objects
132
+  * Uncompressed source in javascripts/libs/swfobject-dynamic.js
133
+  * <http://code.google.com/p/swfobject/>
134
+	released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
135
+*/
136
+var swfobject=function(){function s(a,b,d){var q,k=n(d);if(g.wk&&g.wk<312)return q;if(k){if(typeof a.id==l)a.id=d;if(g.ie&&g.win){var e="",c;for(c in a)if(a[c]!=Object.prototype[c])c.toLowerCase()=="data"?b.movie=a[c]:c.toLowerCase()=="styleclass"?e+=' class="'+a[c]+'"':c.toLowerCase()!="classid"&&(e+=" "+c+'="'+a[c]+'"');c="";for(var f in b)b[f]!=Object.prototype[f]&&(c+='<param name="'+f+'" value="'+b[f]+'" />');k.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+e+">"+c+
137
+"</object>";q=n(a.id)}else{f=i.createElement(o);f.setAttribute("type",m);for(var h in a)a[h]!=Object.prototype[h]&&(h.toLowerCase()=="styleclass"?f.setAttribute("class",a[h]):h.toLowerCase()!="classid"&&f.setAttribute(h,a[h]));for(e in b)b[e]!=Object.prototype[e]&&e.toLowerCase()!="movie"&&(a=f,c=e,h=b[e],d=i.createElement("param"),d.setAttribute("name",c),d.setAttribute("value",h),a.appendChild(d));k.parentNode.replaceChild(f,k);q=f}}return q}function n(a){var b=null;try{b=i.getElementById(a)}catch(d){}return b}
138
+function t(a){var b=g.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function u(a){return/[\\\"<>\.;]/.exec(a)!=null&&typeof encodeURIComponent!=l?encodeURIComponent(a):a}var l="undefined",o="object",m="application/x-shockwave-flash",v=window,i=document,j=navigator,g=function(){var a=typeof i.getElementById!=l&&typeof i.getElementsByTagName!=l&&typeof i.createElement!=l,
139
+b=j.userAgent.toLowerCase(),d=j.platform.toLowerCase(),g=d?/win/.test(d):/win/.test(b),d=d?/mac/.test(d):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,k=!+"\u000b1",e=[0,0,0],c=null;if(typeof j.plugins!=l&&typeof j.plugins["Shockwave Flash"]==o){if((c=j.plugins["Shockwave Flash"].description)&&!(typeof j.mimeTypes!=l&&j.mimeTypes[m]&&!j.mimeTypes[m].enabledPlugin))k=!1,c=c.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(c.replace(/^(.*)\..*$/,"$1"),
140
+10),e[1]=parseInt(c.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(c)?parseInt(c.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof v.ActiveXObject!=l)try{var f=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(f&&(c=f.GetVariable("$version")))k=!0,c=c.split(" ")[1].split(","),e=[parseInt(c[0],10),parseInt(c[1],10),parseInt(c[2],10)]}catch(h){}return{w3:a,pv:e,wk:b,ie:k,win:g,mac:d}}();return{embedSWF:function(a,b,d,i,k,e,c,f,h){var j={success:!1,id:b};if(g.w3&&!(g.wk&&g.wk<312)&&
141
+a&&b&&d&&i&&k){d+="";i+="";var p={};if(f&&typeof f===o)for(var m in f)p[m]=f[m];p.data=a;p.width=d;p.height=i;a={};if(c&&typeof c===o)for(var n in c)a[n]=c[n];if(e&&typeof e===o)for(var r in e)typeof a.flashvars!=l?a.flashvars+="&"+r+"="+e[r]:a.flashvars=r+"="+e[r];if(t(k))b=s(p,a,b),j.success=!0,j.ref=b}h&&h(j)},ua:g,getFlashPlayerVersion:function(){return{major:g.pv[0],minor:g.pv[1],release:g.pv[2]}},hasFlashPlayerVersion:t,createSWF:function(a,b,d){if(g.w3)return s(a,b,d)},getQueryParamValue:function(a){var b=
142
+i.location.search||i.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(a==null)return u(b);for(var b=b.split("&"),d=0;d<b.length;d++)if(b[d].substring(0,b[d].indexOf("="))==a)return u(b[d].substring(b[d].indexOf("=")+1))}return""}}}();
0 143
new file mode 100644
... ...
@@ -0,0 +1,56 @@
0
+function pinboardNS_fetch_script(url) {
1
+  //document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>');
2
+  (function(){
3
+    var pinboardLinkroll = document.createElement('script');
4
+    pinboardLinkroll.type = 'text/javascript';
5
+    pinboardLinkroll.async = true;
6
+    pinboardLinkroll.src = url;
7
+    document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll);
8
+  })();
9
+}
10
+
11
+function pinboardNS_show_bmarks(r) {
12
+  var lr = new Pinboard_Linkroll();
13
+  lr.set_items(r);
14
+  lr.show_bmarks();
15
+}
16
+
17
+function Pinboard_Linkroll() {
18
+  var items;
19
+
20
+  this.set_items = function(i) {
21
+    this.items = i;
22
+  }
23
+  this.show_bmarks = function() {
24
+    var lines = [];
25
+    for (var i = 0; i < this.items.length; i++) {
26
+      var item = this.items[i];
27
+      var str = this.format_item(item);
28
+      lines.push(str);
29
+    }
30
+    document.getElementById(linkroll).innerHTML = lines.join("\n");
31
+  }
32
+  this.cook = function(v) {
33
+    return v.replace('<', '&lt;').replace('>', '&gt>');
34
+  }
35
+
36
+  this.format_item = function(it) {
37
+    var str = "<li class=\"pin-item\">";
38
+    if (!it.d) { return; }
39
+    str += "<p><a class=\"pin-title\" href=\"" + this.cook(it.u) + "\">" + this.cook(it.d) + "</a>";
40
+    if (it.n) {
41
+      str += "<span class=\"pin-description\">" + this.cook(it.n) + "</span>\n";
42
+    }
43
+    if (it.t.length > 0) {
44
+      for (var i = 0; i < it.t.length; i++) {
45
+        var tag = it.t[i];
46
+        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> ";
47
+      }
48
+    }
49
+    str += "</p></li>\n";
50
+    return str;
51
+  }
52
+}
53
+Pinboard_Linkroll.prototype = new Pinboard_Linkroll();
54
+pinboardNS_fetch_script("http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count);
55
+
0 56
new file mode 100644
... ...
@@ -0,0 +1,80 @@
0
+// JSON-P Twitter fetcher for Octopress
1
+// (c) Brandon Mathis // MIT Lisence
2
+function getTwitterFeed(user, count, replies) {
3
+  feed = new jXHR();
4
+  feed.onerror = function (msg,url) {
5
+    $('#tweets li.loading').addClass('error').text("Twitter's busted");
6
+  }
7
+  feed.onreadystatechange = function(data){
8
+    if (feed.readyState === 4) {
9
+      var tweets = new Array();
10
+      for (i in data){
11
+        if(tweets.length < count){
12
+          if(replies || data[i].in_reply_to_user_id == null){
13
+            tweets.push(data[i]);
14
+          }
15
+        }
16
+      }
17
+      showTwitterFeed(tweets, user);
18
+    }
19
+  };
20
+  feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+(parseInt(count)+60)+"&callback=?");
21
+  feed.send();
22
+}
23
+
24
+function showTwitterFeed(tweets, twitter_user){
25
+  var timeline = document.getElementById('tweets');
26
+  timeline.innerHTML='';
27
+  for (t in tweets){
28
+    timeline.innerHTML+='<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>'))+'</p>'+'</li>';
29
+  }
30
+}
31
+function linkifyTweet(text){
32
+  return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>')
33
+    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
34
+    .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
35
+}
36
+
37
+
38
+
39
+// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License | http://mulletxhr.com/
40
+// uncompressed version available in source/javascripts/libs/jXHR.js
41
+(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
42
+
43
+
44
+/* Sky Slavin, Ludopoli. MIT license.  * based on JavaScript Pretty Date * Copyright (c) 2008 John Resig (jquery.com) * Licensed under the MIT license.  */
45
+
46
+function prettyDate(time) {
47
+  if (navigator.appName == 'Microsoft Internet Explorer') {
48
+    return "<span>&infin;</span>"; // because IE date parsing isn't fun.
49
+  };
50
+
51
+  var say = {};
52
+  say.just_now = " now",
53
+  say.minute_ago = "1m",
54
+  say.minutes_ago = "m",
55
+  say.hour_ago = "1h",
56
+  say.hours_ago = "h",
57
+  say.yesterday = "1d",
58
+  say.days_ago = "d",
59
+  say.weeks_ago = "w"
60
+
61
+  var current_date = new Date();
62
+  current_date_time = current_date.getTime();
63
+  current_date_full = current_date_time + (1 * 60000);
64
+  var date = new Date(time);
65
+  var diff = ((current_date_full - date.getTime()) / 1000);
66
+  var day_diff = Math.floor(diff / 86400);
67
+
68
+  if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) return;
69
+
70
+  return day_diff == 0 && (
71
+    diff < 60 && say.just_now ||
72
+    diff < 120 && say.minute_ago ||
73
+    diff < 3600 && Math.floor(diff / 60) + say.minutes_ago ||
74
+    diff < 7200 && say.hour_ago ||
75
+    diff < 86400 && Math.floor(diff / 3600) + say.hours_ago) ||
76
+    day_diff == 1 && say.yesterday ||
77
+    day_diff < 7 && day_diff + say.days_ago ||
78
+    day_diff < 31 && Math.ceil(day_diff / 7) + say.weeks_ago;
79
+}
... ...
@@ -3,8 +3,12 @@ require "bundler/setup"
3 3
 
4 4
 ## -- Rsync Deploy config -- ##
5 5
 # Be sure your public key is listed in your server's ~/.ssh/authorized_keys file
6
-ssh_user      = "mathisweb@imathis.com"
7
-document_root = "~/dev.octopress.org/"
6
+ssh_user       = "user@domain.com"
7
+document_root  = "~/website.com/"
8
+deploy_default = "rsync"
9
+
10
+# This will be configured for you when you run config_deploy
11
+deploy_branch  = "gh-pages"
8 12
 
9 13
 ## -- Misc Configs, you probably have no reason to changes these -- ##
10 14
 
... ...
@@ -13,6 +17,7 @@ source_dir  = "source"    # source file directory
13 13
 deploy_dir  = "_deploy"    # deploy directory (for Github pages deployment)
14 14
 stash_dir   = "_stash"    # directory to stash posts for speedy generation
15 15
 posts_dir   = "_posts"    # directory for blog files
16
+themes_dir  = ".themes"    # directory for blog files
16 17
 post_format = "markdown"  # file format for new posts when using the post rake task
17 18
 
18 19
 
... ...
@@ -21,9 +26,9 @@ task :install, :theme do |t, args|
21 21
   # copy theme into working Jekyll directories
22 22
   theme = args.theme || 'classic'
23 23
   puts "## Copying "+theme+" theme into ./#{source_dir} ./sass and ./_plugins "
24
-  system "mkdir -p #{source_dir}; cp -R themes/"+theme+"/source/ #{source_dir}/"
25
-  system "mkdir -p sass; cp -R themes/"+theme+"/sass/ sass/"
26
-  system "mkdir -p _plugins; cp -R themes/"+theme+"/_plugins/ _plugins/"
24
+  system "mkdir -p #{source_dir}; cp -R #{themes_dir}/"+theme+"/source/ #{source_dir}/"
25
+  system "mkdir -p sass; cp -R #{themes_dir}/"+theme+"/sass/ sass/"
26
+  system "mkdir -p _plugins; cp -R #{themes_dir}/"+theme+"/_plugins/ _plugins/"
27 27
   system "mkdir -p #{source_dir}/#{posts_dir}";
28 28
 end
29 29
 
... ...
@@ -87,8 +92,12 @@ end
87 87
 # Deploying  #
88 88
 ##############
89 89
 
90
+desc "Default deploy task"
91
+task :deploy => "#{deploy_default}" do
92
+end
93
+
90 94
 desc "Deploy website via rsync"
91
-task :sync do
95
+task :rsync do
92 96
   puts "## Deploying website via Rsync"
93 97
   ok_failed system("rsync -avz --delete #{public_dir}/ #{ssh_user}:#{document_root}")
94 98
 end
... ...
@@ -106,13 +115,13 @@ task :push do
106 106
     message = "Site updated at #{Time.now.utc}"
107 107
     system "git commit -m '#{message}'"
108 108
     puts "\n## Pushing generated #{deploy_dir} website"
109
-    system "git push"
109
+    system "git push origin #{deploy_branch}"
110 110
     puts "\n## Github Pages deploy complete"
111 111
   end
112 112
 end
113 113
 
114 114
 desc "setup _deploy folder and deploy branch"
115
-task :init_deploy, :branch do |t, args|
115
+task :config_deploy, :branch do |t, args|
116 116
   puts "!! Please provide a deploy branch, eg. rake init_deploy[gh-pages] !!" unless args.branch
117 117
   puts "## Creating a clean #{args.branch} branch in ./#{deploy_dir} for Github pages deployment"
118 118
   cd "#{deploy_dir}" do
... ...
@@ -121,8 +130,13 @@ task :init_deploy, :branch do |t, args|
121 121
     system "git clean -fdx"
122 122
     system "echo 'My Octopress Page is coming soon &hellip;' > index.html"
123 123
     system "git add ."
124
-    system "git commit -m 'My Octopress site is coming soon'"
125
-    system "git push origin #{args.branch}"
124
+    system "git commit -m 'Octopress init'"
125
+    rakefile = IO.read(__FILE__)
126
+    rakefile.sub!(/deploy_branch(\s*)=(\s*)(["'])[\w-]*["']/, "deploy_branch\\1=\\2\\3#{args.branch}\\3")
127
+    rakefile.sub!(/deploy_default(\s*)=(\s*)(["'])[\w-]*["']/, "deploy_default\\1=\\2\\3push\\3")
128
+    File.open(__FILE__, 'w') do |f|
129
+      f.write rakefile
130
+    end
126 131
   end
127 132
 end
128 133
 
... ...
@@ -139,4 +153,3 @@ task :list do
139 139
   puts "Tasks: #{(Rake::Task.tasks - [Rake::Task[:list]]).to_sentence}"
140 140
   puts "(type rake -T for more detail)\n\n"
141 141
 end
142
-
143 142
deleted file mode 100644
... ...
@@ -1,73 +0,0 @@
1
-#
2
-# Author: Brandon Mathis
3
-# Based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb
4
-#
5
-# Outputs a string with a given attribution as a quote
6
-#
7
-#   {% blockquote Bobby Willis http://google.com/blah the search for bobby's mom %}
8
-#   Wheeee!
9
-#   {% endblockquote %}
10
-#   ...
11
-#   <blockquote>
12
-#     <p>Wheeee!</p>
13
-#     <footer>
14
-#     <strong>Bobby Willis</strong><cite><a href="http://google.com/blah">The Search For Bobby's Mom</a>
15
-#   </blockquote>
16
-#
17
-require './_plugins/titlecase.rb'
18
-module Jekyll
19
-
20
-  class Blockquote < Liquid::Block
21
-    FullCiteWithTitle = /([\w\s]+)(https?:\/\/)(\S+\s)([\w\s]+)/i
22
-    FullCite = /([\w\s]+)(https?:\/\/)(\S+)/i
23
-    Author =  /([\w\s]+)/
24
-
25
-    def initialize(tag_name, markup, tokens)
26
-      @by = nil
27
-      @source = nil
28
-      @title = nil
29
-      if markup =~ FullCiteWithTitle
30
-        @by = $1
31
-        @source = $2 + $3
32
-        @title = $4.titlecase
33
-      elsif markup =~ FullCite
34
-        @by = $1
35
-        @source = $2 + $3
36
-      elsif markup =~ Author
37
-        @by = $1
38
-      end
39
-      super
40
-    end
41
-
42
-    def render(context)
43
-      output = paragraphize(super.map(&:strip).join)
44
-      author = "<strong>#{@by.strip}</strong>"
45
-      if @source
46
-        url = @source.match(/https?:\/\/(.+)/)[1].split('/')
47
-        parts = []
48
-        url.each do |part|
49
-          if (parts + [part]).join('/').length < 32
50
-            parts << part
51
-          end
52
-        end
53
-        source = parts.join('/')
54
-        source << '/&hellip;' unless source == @source
55
-      end
56
-      cite = "<cite><a href='#{@source}'>#{(@title || source)}</a></cite>"
57
-      reply = if @by.nil?
58
-        output
59
-      elsif !@source.nil?
60
-        "#{output}<footer>#{author + cite}</footer>"
61
-      else
62
-        "#{output}<footer>#{author}</footer>"
63
-      end
64
-      "<blockquote>#{reply}</blockquote>"
65
-    end
66
-
67
-    def paragraphize(input)
68
-      "<p>#{input.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>"
69
-    end
70
-  end
71
-end
72
-
73
-Liquid::Template.register_tag('blockquote', Jekyll::Blockquote)
74 1
deleted file mode 100644
... ...
@@ -1,161 +0,0 @@
1
-# Jekyll category page generator.
2
-# http://recursive-design.com/projects/jekyll-plugins/
3
-#
4
-# Version: 0.1.4 (201101061053)
5
-#
6
-# Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
7
-# Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
8
-#
9
-# A generator that creates category pages for jekyll sites.
10
-#
11
-# To use it, simply drop this script into the _plugins directory of your Jekyll site. You should
12
-# also create a file called 'category_index.html' in the _layouts directory of your jekyll site
13
-# with the following contents (note: you should remove the leading '# ' characters):
14
-#
15
-# ================================== COPY BELOW THIS LINE ==================================
16
-# ---
17
-# layout: default
18
-# ---
19
-#
20
-# <h1 class="category">{{ page.title }}</h1>
21
-# <ul class="posts">
22
-# {% for post in site.categories[page.category] %}
23
-#     <div>{{ post.date | date_to_html_string }}</div>
24
-#     <h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
25
-#     <div class="categories">Filed under {{ post.categories | category_links }}</div>
26
-# {% endfor %}
27
-# </ul>
28
-# ================================== COPY ABOVE THIS LINE ==================================
29
-#
30
-# You can alter the _layout_ setting if you wish to use an alternate layout, and obviously you
31
-# can change the HTML above as you see fit.
32
-#
33
-# When you compile your jekyll site, this plugin will loop through the list of categories in your
34
-# site, and use the layout above to generate a page for each one with a list of links to the
35
-# individual posts.
36
-#
37
-# Included filters :
38
-# - category_links:      Outputs the list of categories as comma-separated <a> links.
39
-# - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling.
40
-#
41
-# Available _config.yml settings :
42
-# - category_dir:          The subfolder to build category pages in (default is 'categories').
43
-# - category_title_prefix: The string used before the category name in the page title (default is
44
-#                          'Category: ').
45
-module Jekyll
46
-
47
-
48
-  # The CategoryIndex class creates a single category page for the specified category.
49
-  class CategoryIndex < Page
50
-
51
-    # Initializes a new CategoryIndex.
52
-    #
53
-    #  +base+         is the String path to the <source>.
54
-    #  +category_dir+ is the String path between <source> and the category folder.
55
-    #  +category+     is the category currently being processed.
56
-    def initialize(site, base, category_dir, category)
57
-      @site = site
58
-      @base = base
59
-      @dir  = category_dir
60
-      @name = 'index.html'
61
-      self.process(@name)
62
-      # Read the YAML data from the layout page.
63
-      self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
64
-      self.data['category']    = category
65
-      # Set the title for this page.
66
-      title_prefix             = site.config['category_title_prefix'] || 'Category: '
67
-      self.data['title']       = "#{title_prefix}#{category}"
68
-      # Set the meta-description for this page.
69
-      meta_description_prefix  = site.config['category_meta_description_prefix'] || 'Category: '
70
-      self.data['description'] = "#{meta_description_prefix}#{category}"
71
-    end
72
-
73
-  end
74
-
75
-
76
-  # The Site class is a built-in Jekyll class with access to global site config information.
77
-  class Site
78
-
79
-    # Creates an instance of CategoryIndex for each category page, renders it, and
80
-    # writes the output to a file.
81
-    #
82
-    #  +category_dir+ is the String path to the category folder.
83
-    #  +category+     is the category currently being processed.
84
-    def write_category_index(category_dir, category)
85
-      index = CategoryIndex.new(self, self.source, category_dir, category)
86
-      index.render(self.layouts, site_payload)
87
-      index.write(self.dest)
88
-      # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
89
-      self.pages << index
90
-    end
91
-
92
-    # Loops through the list of category pages and processes each one.
93
-    def write_category_indexes
94
-      if self.layouts.key? 'category_index'
95
-        dir = self.config['category_dir'] || 'categories'
96
-        self.categories.keys.each do |category|
97
-          self.write_category_index(File.join(dir, category.gsub(/_|\W/, '-')), category)
98
-        end
99
-
100
-      # Throw an exception if the layout couldn't be found.
101
-      else
102
-        throw "No 'category_index' layout found."
103
-      end
104
-    end
105
-
106
-  end
107
-
108
-
109
-  # Jekyll hook - the generate method is called by jekyll, and generates all of the category pages.
110
-  class GenerateCategories < Generator
111
-    safe true
112
-    priority :low
113
-
114
-    def generate(site)
115
-      site.write_category_indexes
116
-    end
117
-
118
-  end
119
-
120
-
121
-  # Adds some extra filters used during the category creation process.
122
-  module Filters
123
-
124
-    # Outputs a list of categories as comma-separated <a> links. This is used
125
-    # to output the category list for each post on a category page.
126
-    #
127
-    #  +categories+ is the list of categories to format.
128
-    #
129
-    # Returns string
130
-    #
131
-    def category_links(categories)
132
-      categories = categories.sort!.map do |item|
133
-        "<a class='category' href='/#{@context.registers[:site].config['category_dir']}/#{item.gsub(/_|\W/, '-')}'/>#{item}</a>"
134
-      end
135
-
136
-      case categories.length
137
-      when 0
138
-        ""
139
-      when 1
140
-        categories[0].to_s
141
-      else
142
-        "#{categories[0...-1].join(', ')}, #{categories[-1]}"
143
-      end
144
-    end
145
-
146
-    # Outputs the post.date as formatted html, with hooks for CSS styling.
147
-    #
148
-    #  +date+ is the date object to format as HTML.
149
-    #
150
-    # Returns string
151
-    def date_to_html_string(date)
152
-      result = '<span class="month">' + date.strftime('%b').upcase + '</span> '
153
-      result += date.strftime('<span class="day">%d</span> ')
154
-      result += date.strftime('<span class="year">%Y</span> ')
155
-      result
156
-    end
157
-
158
-  end
159
-
160
-end
161
-
162 1
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-system "compass compile --css-dir source/stylesheets"
2 1
deleted file mode 100644
... ...
@@ -1,75 +0,0 @@
1
-#custom filters for Octopress
2
-
3
-module OctopressFilters
4
-  # Used on the blog index to split posts on the <!--more--> marker
5
-  def exerpt(input)
6
-    if input.index(/<!--\s*more\s*-->/i)
7
-      input.split(/<!--\s*more\s*-->/i)[0]
8
-    else
9
-      input
10
-    end
11
-  end
12
-
13
-  # Summary is used on the Archive pages to return the first block of content from a post.
14
-  def summary(input)
15
-    if input.index(/\n\n/)
16
-      input.split(/\n\n/)[0]
17
-    else
18
-      input
19
-    end
20
-  end
21
-
22
-  # Replaces relative urls with full urls
23
-  def full_urls(input, url='')
24
-    input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]+)/ do
25
-      $1+url+$3
26
-    end
27
-  end
28
-
29
-  # Returns a url without the http:// for use in as a search modifier eg. 'search terms site:website.com'
30
-  def search_url(input)
31
-    input.gsub /(https?:\/\/)(\S+)/ do
32
-      $2
33
-    end
34
-  end
35
-
36
-  # replaces primes with smartquotes using RubyPants
37
-  def smart_quotes(input)
38
-    require 'rubypants'
39
-    RubyPants.new(input).to_html
40
-  end
41
-
42
-  # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
43
-  def titlecase(input)
44
-    input.titlecase
45
-  end
46
-
47
-  # Returns a datetime if the input is a string
48
-  def datetime(date)
49
-    if date.class == String
50
-      date = Time.parse(date)
51
-    end
52
-    date
53
-  end
54
-
55
-  # Returns an ordidinal date eg July 22 2007 -> July 22nd 2007
56
-  def ordinalize(date)
57
-    date = datetime(date)
58
-    "#{date.strftime('%b')} #{ordinal(date.strftime('%e').to_i)}, #{date.strftime('%Y')}"
59
-  end
60
-
61
-  # Returns an ordinal number. 13 -> 13th, 21 -> 21st etc.
62
-  def ordinal(number)
63
-    if (11..13).include?(number.to_i % 100)
64
-      "#{number}<span>th</span>"
65
-    else
66
-      case number.to_i % 10
67
-      when 1; "#{number}<span>st</span>"
68
-      when 2; "#{number}<span>nd</span>"
69
-      when 3; "#{number}<span>rd</span>"
70
-      else    "#{number}<span>th</span>"
71
-      end
72
-    end
73
-  end
74
-end
75
-Liquid::Template.register_filter OctopressFilters
76 1
deleted file mode 100644
... ...
@@ -1,94 +0,0 @@
1
-# A Liquid tag for Jekyll sites that allows embedding Gists and showing code for non-JavaScript enabled browsers and readers.
2
-# by: Brandon Tilly
3
-# Source URL: https://gist.github.com/1027674
4
-# Post http://brandontilley.com/2011/01/31/gist-tag-for-jekyll.html
5
-#
6
-# Example usage: {% gist 1027674 gist_tag.rb %} //embeds a gist for this plugin
7
-
8
-require 'cgi'
9
-require 'digest/md5'
10
-require 'net/https'
11
-require 'uri'
12
-
13
-module Jekyll
14
-  class GistTag < Liquid::Tag
15
-    def initialize(tag_name, text, token)
16
-      super
17
-      @text           = text
18
-      @cache_disabled = false
19
-      @cache_folder   = File.expand_path "../_gist_cache", File.dirname(__FILE__)
20
-      FileUtils.mkdir_p @cache_folder
21
-    end
22
-
23
-    def render(context)
24
-      if parts = @text.match(/([\d]*) (.*)/)
25
-        gist, file = parts[1].strip, parts[2].strip
26
-        script_url = script_url_for gist, file
27
-        code       = get_cached_gist(gist, file) || get_gist_from_web(gist, file)
28
-        html_output_for script_url, code
29
-      else
30
-        ""
31
-      end
32
-    end
33
-
34
-    def html_output_for(script_url, code)
35
-      code = CGI.escapeHTML code
36
-      <<-HTML
37
-<script src='#{script_url}'></script>
38
-<noscript><pre><code>#{code}</code></pre></noscript>
39
-      HTML
40
-    end
41
-
42
-    def script_url_for(gist_id, filename)
43
-      "https://gist.github.com/#{gist_id}.js?file=#{filename}"
44
-    end
45
-
46
-    def get_gist_url_for(gist, file)
47
-      "https://raw.github.com/gist/#{gist}/#{file}"
48
-    end
49
-
50
-    def cache(gist, file, data)
51
-      cache_file = get_cache_file_for gist, file
52
-      File.open(cache_file, "w") do |io|
53
-        io.write data
54
-      end
55
-    end
56
-
57
-    def get_cached_gist(gist, file)
58
-      return nil if @cache_disabled
59
-      cache_file = get_cache_file_for gist, file
60
-      File.read cache_file if File.exist? cache_file
61
-    end
62
-
63
-    def get_cache_file_for(gist, file)
64
-      bad_chars = /[^a-zA-Z0-9\-_.]/
65
-      gist      = gist.gsub bad_chars, ''
66
-      file      = file.gsub bad_chars, ''
67
-      md5       = Digest::MD5.hexdigest "#{gist}-#{file}"
68
-      File.join @cache_folder, "#{gist}-#{file}-#{md5}.cache"
69
-    end
70
-
71
-    def get_gist_from_web(gist, file)
72
-      gist_url          = get_gist_url_for gist, file
73
-      raw_uri           = URI.parse gist_url
74
-      https             = Net::HTTP.new raw_uri.host, raw_uri.port
75
-      https.use_ssl     = true
76
-      https.verify_mode = OpenSSL::SSL::VERIFY_NONE
77
-      request           = Net::HTTP::Get.new raw_uri.request_uri
78
-      data              = https.request request
79
-      data              = data.body
80
-      cache gist, file, data unless @cache_disabled
81
-      data
82
-    end
83
-  end
84
-
85
-  class GistTagNoCache < GistTag
86
-    def initialize(tag_name, text, token)
87
-      super
88
-      @cache_disabled = true
89
-    end
90
-  end
91
-end
92
-
93
-Liquid::Template.register_tag('gist', Jekyll::GistTag)
94
-Liquid::Template.register_tag('gistnocache', Jekyll::GistTagNoCache)
95 1
deleted file mode 100644
... ...
@@ -1,24 +0,0 @@
1
-module Jekyll
2
-  require 'haml'
3
-  class HamlConverter < Converter
4
-    safe true
5
-    priority :low
6
-
7
-    def matches(ext)
8
-      ext =~ /haml/i
9
-    end
10
-
11
-    def output_ext(ext)
12
-      ".html"
13
-    end
14
-
15
-    def convert(content)
16
-      begin
17
-        engine = Haml::Engine.new(content)
18
-        engine.render
19
-      rescue StandardError => e
20
-          puts "!!! HAML Error: " + e.message
21
-      end
22
-    end
23
-  end
24
-end
25 1
deleted file mode 100644
... ...
@@ -1,40 +0,0 @@
1
-require 'pathname'
2
-
3
-module Jekyll
4
-
5
-  class IncludeCodeTag < Liquid::Tag
6
-    def initialize(tag_name, file, tokens)
7
-      super
8
-      @file = file.strip
9
-    end
10
-
11
-    def render(context)
12
-      code_dir = (context.registers[:site].config['code_dir'] || 'downloads/code')
13
-      code_path = (Pathname.new(context.registers[:site].source) + code_dir).expand_path
14
-      file = code_path + @file
15
-
16
-      if File.symlink?(code_path)
17
-        return "Code directory '#{code_path}' cannot be a symlink"
18
-      end
19
-
20
-      unless file.file?
21
-        return "File #{file} could not be found"
22
-      end
23
-
24
-      Dir.chdir(code_path) do
25
-        code = file.read
26
-        file_type = file.extname
27
-        url = "#{context.registers[:site].config['url']}/#{code_dir}/#{@file}"
28
-        source = "<figure><figcaption><span>#{file.basename}</span><a href='#{url}'>download</a></figcaption>\n"
29
-        source += "{% highlight #{file_type} %}\n" + code + "\n{% endhighlight %}</figure>"
30
-        partial = Liquid::Template.parse(source)
31
-        context.stack do
32
-          partial.render(context)
33
-        end
34
-      end
35
-    end
36
-  end
37
-
38
-end
39
-
40
-Liquid::Template.register_tag('include_code', Jekyll::IncludeCodeTag)
41 1
deleted file mode 100644
... ...
@@ -1,31 +0,0 @@
1
-require 'pathname'
2
-
3
-module Jekyll
4
-
5
-  class IncludePartialTag < Liquid::Tag
6
-    def initialize(tag_name, file, tokens)
7
-      super
8
-      @file = file.strip
9
-    end
10
-
11
-    def render(context)
12
-      file_dir = (context.registers[:site].source || 'source')
13
-      file_path = Pathname.new(file_dir).expand_path
14
-      file = file_path + @file
15
-
16
-      unless file.file?
17
-        return "File #{file} could not be found"
18
-      end
19
-
20
-      Dir.chdir(file_path) do
21
-        partial = Liquid::Template.parse(file.read)
22
-        context.stack do
23
-          partial.render(context)
24
-        end
25
-      end
26
-    end
27
-  end
28
-end
29
-
30
-Liquid::Template.register_tag('include_partial', Jekyll::IncludePartialTag)
31
-
32 1
deleted file mode 100644
... ...
@@ -1,42 +0,0 @@
1
-#
2
-# Author: Brandon Mathis
3
-# Based on the sematic pullquote technique by Maykel Loomans at http://miekd.com/articles/pull-quotes-with-html5-and-css/
4
-#
5
-# Outputs a span with a data-pullquote attribute set from the marked pullquote. Example:
6
-#
7
-#   {% pullquote %}
8
-#     When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful.
9
-#     It is important to note, {" pullquotes are merely visual in presentation and should not appear twice in the text. "} That is why it is prefered
10
-#     to use a CSS only technique for styling pullquotes.
11
-#   {% endpullquote %}
12
-#   ...will output...
13
-#   <p>
14
-#     <span data-pullquote="pullquotes are merely visual in presentation and should not appear twice in the text.">
15
-#       When writing longform posts, I find it helpful to include pullquotes, which help those scanning a post discern whether or not a post is helpful.
16
-#       It is important to note, pullquotes are merely visual in presentation and should not appear twice in the text. This is why a CSS only approach #       for styling pullquotes is prefered.
17
-#     </span>
18
-#   </p>
19
-#
20
-
21
-module Jekyll
22
-
23
-  class PullquoteTag < Liquid::Block
24
-    PullQuoteMarkup = /\{(.+)\}/i
25
-
26
-    def initialize(tag_name, markup, tokens)
27
-      super
28
-    end
29
-
30
-    def render(context)
31
-      output = super
32
-      if output.join =~ /\{"\s*(.+)\s*"\}/
33
-        @quote = $1
34
-        "<span class='has-pullquote' data-pullquote='#{@quote}'>#{output.join.gsub(/\{"\s*|\s*"\}/, '')}</span>"
35
-      else
36
-        return "Surround your pullquote like this {! text to be quoted !}"
37
-      end
38
-    end
39
-  end
40
-end
41
-
42
-Liquid::Template.register_tag('pullquote', Jekyll::PullquoteTag)
43 1
deleted file mode 100644
... ...
@@ -1,30 +0,0 @@
1
-#
2
-# Author: Raimonds Simanovskis, http://blog.rayapps.com/
3
-# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb
4
-#
5
-
6
-require 'fileutils'
7
-require 'digest/md5'
8
-
9
-PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__)
10
-FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
11
-
12
-Jekyll::HighlightBlock.class_eval do
13
-  def render_pygments(context, code)
14
-    if defined?(PYGMENTS_CACHE_DIR)
15
-      path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html")
16
-      if File.exist?(path)
17
-        highlighted_code = File.read(path)
18
-      else
19
-        highlighted_code = Albino.new(code, @lang).to_s(@options)
20
-        File.open(path, 'w') {|f| f.print(highlighted_code) }
21
-      end
22
-    else
23
-      highlighted_code = Albino.new(code, @lang).to_s(@options)
24
-    end
25
-    output = add_code_tags(highlighted_code, @lang)
26
-    output = context["pygments_prefix"] + output if context["pygments_prefix"]
27
-    output = output + context["pygments_suffix"] if context["pygments_suffix"]
28
-    output
29
-  end
30
-end
31 1
deleted file mode 100644
... ...
@@ -1,308 +0,0 @@
1
-# Sitemap.xml Generator is a Jekyll plugin that generates a sitemap.xml file by
2
-# traversing all of the available posts and pages.
3
-# 
4
-# How To Use:
5
-#   1) Copy source file into your _plugins folder within your Jekyll project.
6
-#   2) Change modify the url variable in _config.yml to reflect your domain name.
7
-#   3) Run Jekyll: jekyll --server to re-generate your site.
8
-#
9
-# Variables:
10
-#   * Change SITEMAP_FILE_NAME if you want your sitemap to be called something
11
-#     other than sitemap.xml.
12
-#   * Change the PAGES_INCLUDE_POSTS list to include any pages that are looping
13
-#     through your posts (e.g. "index.html", "archive.html", etc.). This will
14
-#     ensure that right after you make a new post, the last modified date will
15
-#     be updated to reflect the new post.
16
-#   * A sitemap.xml should be included in your _site folder.
17
-#   * If there are any files you don't want included in the sitemap, add them
18
-#     to the EXCLUDED_FILES list. The name should match the name of the source
19
-#     file.
20
-#   * If you want to include the optional changefreq and priority attributes,
21
-#     simply include custom variables in the YAML Front Matter of that file.
22
-#     The names of these custom variables are defined below in the
23
-#     CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME and PRIORITY_CUSTOM_VARIABLE_NAME
24
-#     constants.
25
-#
26
-# Notes:
27
-#   * The last modified date is determined by the latest from the following:
28
-#     system modified date of the page or post, system modified date of
29
-#     included layout, system modified date of included layout within that
30
-#     layout, ...
31
-# 
32
-# Author: Michael Levin
33
-# Site: http://www.kinnetica.com
34
-# Distributed Under A Creative Commons License
35
-#   - http://creativecommons.org/licenses/by/3.0/
36
-# 
37
-# Modified for Octopress by John W. Long
38
-#
39
-require 'rexml/document'
40
-
41
-module Jekyll
42
-
43
-  # Change SITEMAP_FILE_NAME if you would like your sitemap file
44
-  # to be called something else
45
-  SITEMAP_FILE_NAME = "sitemap.xml"
46
-
47
-  # Any files to exclude from being included in the sitemap.xml
48
-  EXCLUDED_FILES = ["atom.xml"]
49
-
50
-  # Any files that include posts, so that when a new post is added, the last
51
-  # modified date of these pages should take that into account
52
-  PAGES_INCLUDE_POSTS = ["index.html"]
53
-
54
-  # Custom variable names for changefreq and priority elements
55
-  # These names are used within the YAML Front Matter of pages or posts
56
-  # for which you want to include these properties
57
-  CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME = "change_frequency"
58
-  PRIORITY_CUSTOM_VARIABLE_NAME = "priority"
59
-
60
-  class Post
61
-    attr_accessor :name
62
-
63
-    def full_path_to_source
64
-      File.join(@base, @name)
65
-    end
66
-
67
-    def location_on_server
68
-      "#{site.config['url']}#{url}"
69
-    end
70
-  end
71
-
72
-  class Page
73
-    attr_accessor :name
74
-
75
-    def full_path_to_source
76
-      File.join(@base, @dir, @name)
77
-    end
78
-
79
-    def location_on_server
80
-      location = "#{site.config['url']}#{@dir}#{url}"
81
-      location.gsub(/index.html$/, "")
82
-    end
83
-  end
84
-
85
-  class Layout
86
-    def full_path_to_source
87
-      File.join(@base, @name)
88
-    end
89
-  end
90
-
91
-  # Recover from strange exception when starting server without --auto
92
-  class SitemapFile < StaticFile
93
-    def write(dest)
94
-      begin
95
-        super(dest)
96
-      rescue
97
-      end
98
-
99
-      true
100
-    end
101
-  end
102
-
103
-  class SitemapGenerator < Generator
104
-
105
-    # Valid values allowed by sitemap.xml spec for change frequencies
106
-    VALID_CHANGE_FREQUENCY_VALUES = ["always", "hourly", "daily", "weekly",
107
-      "monthly", "yearly", "never"]
108
-
109
-    # Goes through pages and posts and generates sitemap.xml file
110
-    #
111
-    # Returns nothing
112
-    def generate(site)
113
-      sitemap = REXML::Document.new << REXML::XMLDecl.new("1.0", "UTF-8")
114
-
115
-      urlset = REXML::Element.new "urlset"
116
-      urlset.add_attribute("xmlns",
117
-        "http://www.sitemaps.org/schemas/sitemap/0.9")
118
-
119
-      @last_modified_post_date = fill_posts(site, urlset)
120
-      fill_pages(site, urlset)
121
-
122
-      sitemap.add_element(urlset)
123
-
124
-      # File I/O: create sitemap.xml file and write out pretty-printed XML
125
-      file = File.new(File.join(site.dest, SITEMAP_FILE_NAME), "w")
126
-      formatter = REXML::Formatters::Pretty.new(4)
127
-      formatter.compact = true
128
-      formatter.write(sitemap, file)
129
-      file.close
130
-
131
-      # Keep the sitemap.xml file from being cleaned by Jekyll
132
-      site.static_files << Jekyll::SitemapFile.new(site, site.dest, "/", SITEMAP_FILE_NAME)
133
-    end
134
-
135
-    # Create url elements for all the posts and find the date of the latest one
136
-    #
137
-    # Returns last_modified_date of latest post
138
-    def fill_posts(site, urlset)
139
-      last_modified_date = nil
140
-      site.posts.each do |post|
141
-        if !excluded?(post.name)
142
-          url = fill_url(site, post)
143
-          urlset.add_element(url)
144
-        end
145
-
146
-        path = post.full_path_to_source
147
-        date = File.mtime(path)
148
-        last_modified_date = date if last_modified_date == nil or date > last_modified_date
149
-      end
150
-
151
-      last_modified_date
152
-    end
153
-
154
-    # Create url elements for all the normal pages and find the date of the
155
-    # index to use with the pagination pages
156
-    #
157
-    # Returns last_modified_date of index page
158
-    def fill_pages(site, urlset)
159
-      site.pages.each do |page|
160
-        if !excluded?(page.name)
161
-          path = page.full_path_to_source
162
-          if File.exists?(path)
163
-            url = fill_url(site, page)
164
-            urlset.add_element(url)
165
-          end
166
-        end
167
-      end
168
-    end
169
-
170
-    # Fill data of each URL element: location, last modified,
171
-    # change frequency (optional), and priority.
172
-    #
173
-    # Returns url REXML::Element
174
-    def fill_url(site, page_or_post)
175
-      url = REXML::Element.new "url"
176
-
177
-      loc = fill_location(page_or_post)
178
-      url.add_element(loc)
179
-
180
-      lastmod = fill_last_modified(site, page_or_post)
181
-      url.add_element(lastmod) if lastmod
182
-
183
-      if (page_or_post.data[CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME])
184
-        change_frequency =
185
-          page_or_post.data[CHANGE_FREQUENCY_CUSTOM_VARIABLE_NAME].downcase
186
-
187
-        if (valid_change_frequency?(change_frequency))
188
-          changefreq = REXML::Element.new "changefreq"
189
-          changefreq.text = change_frequency
190
-          url.add_element(changefreq)
191
-        else
192
-          puts "ERROR: Invalid Change Frequency In #{page_or_post.name}"
193
-        end
194
-      end
195
-
196
-      if (page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME])
197
-        priority_value = page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME]
198
-        if valid_priority?(priority_value)
199
-          priority = REXML::Element.new "priority"
200
-          priority.text = page_or_post.data[PRIORITY_CUSTOM_VARIABLE_NAME]
201
-          url.add_element(priority)
202
-        else
203
-          puts "ERROR: Invalid Priority In #{page_or_post.name}"
204
-        end
205
-      end
206
-
207
-      url
208
-    end
209
-
210
-    # Get URL location of page or post
211
-    #
212
-    # Returns the location of the page or post
213
-    def fill_location(page_or_post)
214
-      loc = REXML::Element.new "loc"
215
-      loc.text = page_or_post.location_on_server
216
-
217
-      loc
218
-    end
219
-
220
-    # Fill lastmod XML element with the last modified date for the page or post.
221
-    #
222
-    # Returns lastmod REXML::Element or nil
223
-    def fill_last_modified(site, page_or_post)
224
-      path = page_or_post.full_path_to_source
225
-
226
-      lastmod = REXML::Element.new "lastmod"
227
-      date = File.mtime(path)
228
-      latest_date = find_latest_date(date, site, page_or_post)
229
-
230
-      if @last_modified_post_date == nil
231
-        # This is a post
232
-        lastmod.text = latest_date.iso8601
233
-      else
234
-        # This is a page
235
-        if posts_included?(page_or_post.name)
236
-          # We want to take into account the last post date
237
-          final_date = greater_date(latest_date, @last_modified_post_date)
238
-          lastmod.text = final_date.iso8601
239
-        else
240
-          lastmod.text = latest_date.iso8601
241
-        end
242
-      end
243
-      lastmod
244
-    end
245
-
246
-    # Go through the page/post and any implemented layouts and get the latest
247
-    # modified date
248
-    #
249
-    # Returns formatted output of latest date of page/post and any used layouts
250
-    def find_latest_date(latest_date, site, page_or_post)
251
-      layouts = site.layouts
252
-      layout = layouts[page_or_post.data["layout"]]
253
-      while layout
254
-        path = layout.full_path_to_source
255
-        date = File.mtime(path)
256
-
257
-        latest_date = date if (date > latest_date)
258
-
259
-        layout = layouts[layout.data["layout"]]
260
-      end
261
-
262
-      latest_date
263
-    end
264
-
265
-    # Which of the two dates is later
266
-    #
267
-    # Returns latest of two dates
268
-    def greater_date(date1, date2)
269
-      if (date1 >= date2)
270
-        date1
271
-      else
272
-        date2
273
-      end
274
-    end
275
-
276
-    # Is the page or post listed as something we want to exclude?
277
-    #
278
-    # Returns boolean
279
-    def excluded?(name)
280
-      EXCLUDED_FILES.include? name
281
-    end
282
-
283
-    def posts_included?(name)
284
-      PAGES_INCLUDE_POSTS.include? name
285
-    end
286
-
287
-    # Is the change frequency value provided valid according to the spec
288
-    #
289
-    # Returns boolean
290
-    def valid_change_frequency?(change_frequency)
291
-      VALID_CHANGE_FREQUENCY_VALUES.include? change_frequency
292
-    end
293
-
294
-    # Is the priority value provided valid according to the spec
295
-    #
296
-    # Returns boolean
297
-    def valid_priority?(priority)
298
-      begin
299
-        priority_val = Float(priority)
300
-        return true if priority_val >= 0.0 and priority_val <= 1.0
301
-      rescue ArgumentError
302
-      end
303
-
304
-      false
305
-    end
306
-  end
307
-end
308
-
309 1
deleted file mode 100644
... ...
@@ -1,36 +0,0 @@
1
-class String
2
-  def titlecase
3
-    small_words = %w(a an and as at but by en for if in of on or the to v v. via vs vs.)
4
-
5
-    x = split(" ").map do |word|
6
-      # note: word could contain non-word characters!
7
-      # downcase all small_words, capitalize the rest
8
-      small_words.include?(word.gsub(/\W/, "").downcase) ? word.downcase! : word.smart_capitalize!
9
-      word
10
-    end
11
-    # capitalize first and last words
12
-    x.first.to_s.smart_capitalize!
13
-    x.last.to_s.smart_capitalize!
14
-    # small words after colons are capitalized
15
-    x.join(" ").gsub(/:\s?(\W*#{small_words.join("|")}\W*)\s/) { ": #{$1.smart_capitalize} " }
16
-  end
17
-
18
-  def titlecase!
19
-    replace(titlecase)
20
-  end
21
-
22
-  def smart_capitalize
23
-    # ignore any leading crazy characters and capitalize the first real character
24
-    if self =~ /^['"\(\[']*([a-z])/
25
-      i = index($1)
26
-      x = self[i,self.length]
27
-      # word with capitals and periods mid-word are left alone
28
-      self[i,1] = self[i,1].upcase unless x =~ /[A-Z]/ or x =~ /\.\w+/
29
-    end
30
-    self
31
-  end
32
-
33
-  def smart_capitalize!
34
-    replace(smart_capitalize)
35
-  end
36
-end
37 1
deleted file mode 100644
... ...
@@ -1,5 +0,0 @@
1
-@import "base/utilities";
2
-@import "base/solarized";
3
-@import "base/theme";
4
-@import "base/layout";
5
-@import "base/typography";
6 1
deleted file mode 100644
... ...
@@ -1,7 +0,0 @@
1
-@import "partials/header";
2
-@import "partials/navigation";
3
-@import "partials/blog";
4
-@import "partials/syntax";
5
-@import "partials/archive";
6
-@import "partials/sidebar";
7
-@import "partials/footer";
8 1
deleted file mode 100644
... ...
@@ -1,134 +0,0 @@
1
-$max-width: 1200px !default;
2
-
3
-// Padding used for layout margins
4
-$pad-min: 18px !default;
5
-$pad-narrow: 25px !default;
6
-$pad-medium: 35px !default;
7
-$pad-wide: 55px !default;
8
-
9
-// Sidebar widths used in media queries
10
-$sidebar-width-medium: 240px !default;
11
-$sidebar-pad-medium: 15px !default;
12
-$sidebar-pad-wide: 20px !default;
13
-$sidebar-width-wide: 300px !default;
14
-
15
-.group { @include pie-clearfix; }
16
-
17
-body {
18
-  -webkit-text-size-adjust: none;
19
-  max-width: $max-width;
20
-  position: relative;
21
-  margin: 0 auto;
22
-  > header, > nav, > footer, #articles > article, #articles > nav {
23
-    @extend .group;
24
-    padding-left: $pad-min;
25
-    padding-right: $pad-min;
26
-    @media only screen and (min-width: 480px) {
27
-      padding-left: $pad-narrow;
28
-      padding-right: $pad-narrow;
29
-    }
30
-    @media only screen and (min-width: 768px) {
31
-      padding-left: $pad-medium;
32
-      padding-right: $pad-medium;
33
-    }
34
-    @media only screen and (min-width: 992px) {
35
-      padding-left: $pad-wide;
36
-      padding-right: $pad-wide;
37
-    }
38
-  }
39
-  > header {
40
-    font-size: 1em;
41
-    padding-top: 1.5em;
42
-    padding-bottom: 1.5em;
43
-  }
44
-}
45
-
46
-.toggle-sidebar { display: none; }
47
-#articles { width: 100%;
48
-  + aside {
49
-    float: none;
50
-    padding: 0 $pad-min 1px;
51
-    background-color: $sidebar-bg;
52
-    border-top: 1px solid $sidebar-border;
53
-  }
54
-}
55
-
56
-@media only screen and (min-width: 550px) {
57
-  body > header { font-size: 1em; }
58
-}
59
-@media only screen and (min-width: 768px) {
60
-  body { -webkit-text-size-adjust: auto; }
61
-  body > header { font-size: 1.2em; }
62
-  body > nav {
63
-    + div {
64
-      @extend .group;
65
-      padding: 0;
66
-      margin: 0 auto;
67
-      > div {
68
-        @extend .group;
69
-        margin-right: $sidebar-width-medium;
70
-      }
71
-    }
72
-  }
73
-  #articles {
74
-    padding-top: $pad-medium/2;
75
-    padding-bottom: $pad-medium/2;
76
-    float: left;
77
-    + aside {
78
-      width: $sidebar-width-medium - $sidebar-pad-medium*2;
79
-      padding: 0 $sidebar-pad-medium $sidebar-pad-medium;
80
-      background: none;
81
-      float: left;
82
-      margin: 0 -100% 0 0;
83
-    }
84
-  }
85
-  body > div > div { position: relative; }
86
-
87
-  .collapse-sidebar {
88
-    > div > div { margin-right: 10px; }
89
-    #articles + aside {
90
-      display: none;
91
-    }
92
-    .toggle-sidebar {
93
-      right: -1px;
94
-      background-color: $sidebar-bg;
95
-      border-right-width: 0;
96
-      text-indent: 2px;
97
-      border-left: 1px solid $sidebar-border;
98
-      @include border-bottom-right-radius(0);
99
-      @include border-bottom-left-radius(.3em);
100
-      @include link-colors(#aaa, #888);
101
-    }
102
-  }
103
-
104
-  .toggle-sidebar {
105
-    outline: none;
106
-    position: absolute; right: -21px; top: 0;
107
-    width: 20px;
108
-    font-size: 1.2em;
109
-    line-height: 1.1em;
110
-    padding-bottom: .1em;
111
-    text-indent: -1px;
112
-    text-decoration: none;
113
-    @include link-colors(#ccc, #999);
114
-    @include border-bottom-right-radius(.3em);
115
-    text-align: center;
116
-    background: $main-bg;
117
-    border-bottom: 1px solid $sidebar-border;
118
-    border-right: 1px solid $sidebar-border;
119
-    display: inline-block;
120
-  }
121
-}
122
-
123
-@media only screen and (min-width: 992px) {
124
-  body > header { font-size: 1.3em; }
125
-  body > nav + div > div { margin-right: $sidebar-width-wide; }
126
-  #articles {
127
-    padding-top: $pad-wide/2;
128
-    padding-bottom: $pad-wide/2;
129
-    + aside {
130
-      width: $sidebar-width-wide - $sidebar-pad-wide*2;
131
-      padding: 1.2em $sidebar-pad-wide $sidebar-pad-wide;
132
-    }
133
-  }
134
-}
135 1
deleted file mode 100644
... ...
@@ -1,16 +0,0 @@
1
-$base03:    #002b36; //darkest blue
2
-$base02:    #073642; //dark blue
3
-$base01:    #586e75; //darkest gray
4
-$base00:    #657b83; //dark gray
5
-$base0:     #839496; //medium gray
6
-$base1:     #93a1a1; //medium light gray
7
-$base2:     #eee8d5; //cream
8
-$base3:     #fdf6e3; //white
9
-$yellow:    #b58900;
10
-$orange:    #cb4b16;
11
-$red:       #dc322f;
12
-$magenta:   #d33682;
13
-$violet:    #6c71c4;
14
-$blue:      #268bd2;
15
-$cyan:      #2aa198;
16
-$green:     #859900;
17 1
deleted file mode 100644
... ...
@@ -1,76 +0,0 @@
1
-$img-border: inline-image('dotted-border.png');
2
-
3
-// Main Link Colors
4
-$link-color: lighten(#165b94, 3) !default;
5
-$link-color-hover: adjust-hue($link-color, -200) !default;
6
-$link-color-visited: darken(adjust_hue($link_color, 70), 10) !default;
7
-$link-color-active: darken($link-color-hover, 15) !default;
8
-
9
-// Main Section Colors
10
-$page-bg: #252525 !default;
11
-$article-border: #eeeeee !default;
12
-$main-bg: #f5f5f5 !default;
13
-
14
-$header-bg: #333 !default;
15
-$header-border: lighten($header-bg, 15) !default;
16
-$title-color: #f2f2f2 !default;
17
-$subtitle-color: #aaa !default;
18
-
19
-$text-color: #222 !default;
20
-$text-color-light: #aaa !default;
21
-$type-border: #ddd !default;
22
-
23
-
24
-/* Navigation */
25
-$nav-bg: #ccc !default;
26
-$nav-color: darken($nav-bg, 38) !default;
27
-$nav-color-hover: darken($nav-color, 25) !default;
28
-$nav-placeholder: desaturate(darken($nav-bg, 10), 15) !default;
29
-$nav-border: darken($nav-bg, 10) !default;
30
-$nav-border-top: lighten($nav-bg, 15) !default;
31
-$nav-border-bottom: darken($nav-bg, 25) !default;
32
-$nav-border-left: darken($nav-bg, 11) !default;
33
-$nav-border-right: lighten($nav-bg, 7) !default;
34
-
35
-/* Sidebar colors */
36
-$sidebar-bg: #eee !default;
37
-$sidebar-link-color: $link-color !default;
38
-$sidebar-link-color-hover: $link-color-hover !default;
39
-$sidebar-color: change-color(mix($text-color, $sidebar-bg, 80), $hue: hue($sidebar-bg), $saturation: saturation($sidebar-bg)/2) !default;
40
-$sidebar-border: desaturate(darken($sidebar-bg, 7), 10) !default;
41
-$sidebar-border: darken($sidebar-bg, 7) !default;
42
-$sidebar-link-color-subdued: lighten($sidebar-color, 20) !default;
43
-$sidebar-link-color-subdued-hover: $sidebar-link-color-hover !default;
44
-$twitter-status-link: lighten($sidebar-link-color-subdued, 15) !default;
45
-
46
-$footer-color: #888 !default;
47
-$footer-bg: #ccc !default;
48
-$footer-color: darken($footer-bg, 38) !default;
49
-$footer-color-hover: darken($footer-color, 10) !default;
50
-$footer-border-top: lighten($footer-bg, 15) !default;
51
-$footer-border-bottom: darken($footer-bg, 15) !default;
52
-$footer-link-color: darken($footer-bg, 38) !default;
53
-$footer-link-color-hover: darken($footer-color, 25) !default;
54
-$page-border-bottom: darken($footer-bg, 5) !default;
55
-
56
-
57
-/* Core theme application */
58
-
59
-article a, #articles + aside a {
60
-  @include link-colors($link-color, $hover: $link-color-hover, $focus: $link-color-hover, $visited: $link-color-visited, $active: $link-color-active);
61
-}
62
-a { @include transition(color, .5s); }
63
-
64
-html {
65
-  background: $page-bg image-url('line-tile.png') top left;
66
-}
67
-body {
68
-  > div {
69
-    background: $sidebar-bg image-url('noise.png') top left;
70
-    border-bottom: 1px solid $page-border-bottom;
71
-    > div {
72
-      background: $main-bg image-url('noise.png') top left;
73
-      border-right: 1px solid $sidebar-border;
74
-    }
75
-  }
76
-}
77 1
deleted file mode 100644
... ...
@@ -1,130 +0,0 @@
1
-$blockquote: $type-border !default;
2
-$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace;
3
-
4
-// Fonts
5
-.heading {
6
-  font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif;
7
-}
8
-.sans { font-family: "PT Sans", "Helvetica Neue", Arial, sans-serif; }
9
-.serif { font-family: "PT Serif", Georgia, Times, "Times New Roman", serif; }
10
-.mono { font-family: $mono; }
11
-
12
-body > header h1 {
13
-  font-size: 2.6em;
14
-  @extend .heading;
15
-  font-weight: normal;
16
-  line-height: 1.2em;
17
-  margin-bottom: 0.6667em;
18
-}
19
-
20
-body {
21
-  line-height: 1.5em;
22
-  color: $text-color;
23
-  @extend .serif;
24
-}
25
-
26
-#{headings()}{
27
-  @extend .heading;
28
-  text-rendering: optimizelegibility;
29
-  margin-bottom: 1em;
30
-  font-weight: bold;
31
-}
32
-h1 {
33
-  font-size: 3.2em;
34
-  line-height: 1.2em;
35
-  @media only screen and (max-width: 768px) { font-size: 2.2em; }
36
-}
37
-
38
-
39
-h2, section h1 {
40
-  font-size: 1.5em;
41
-}
42
-h3, section h2, section section h1 {
43
-  font-size: 1.3em;
44
-}
45
-h4, section h3, section section h2, section section section h1 {
46
-  font-size: 1em;
47
-}
48
-h5, section h4, section section h3 {
49
-  font-size: .9em;
50
-}
51
-h6, section h5, section section h4, section section section h3 {
52
-  font-size: .8em;
53
-}
54
-p, blockquote, ul, ol { margin-bottom: 1.5em; }
55
-
56
-ul{ list-style-type: circle; }
57
-
58
-ol{ list-style-type: decimal; ol { list-style-type: lower-alpha; } }
59
-ul ul, ol ol { margin-left: 1.75em; }
60
-
61
-strong { font-weight: bold; }
62
-
63
-em { font-style: italic; }
64
-
65
-sup, sub { font-size: 0.8em; position: relative;  display: inline-block; }
66
-sup { top: -.5em; }
67
-sub { bottom: -.5em; }
68
-
69
-q { font-style: italic;
70
-  &:before { content: "\201C"; }
71
-  &:after { content: "\201D"; }
72
-}
73
-
74
-em, dfn { font-style: italic; }
75
-
76
-strong, dfn { font-weight: bold; }
77
-
78
-del, s { text-decoration: line-through; }
79
-
80
-abbr, acronym { border-bottom: 1px dotted; cursor: help; }
81
-
82
-pre, code, tt { @extend .mono-font; }
83
-
84
-sub, sup { line-height: 0; }
85
-
86
-hr { margin-bottom: 0.2em; }
87
-
88
-small { font-size: .8em; }
89
-
90
-big { font-size: 1.2em; }
91
-
92
-blockquote {
93
-  $bq-margin: 1.2em;
94
-  font-style: italic;
95
-  position: relative;
96
-  font-size: 1.2em;
97
-  line-height: 1.5em;
98
-  padding-left: 1em;
99
-  border-left: 4px solid rgba($text-color-light, .5);
100
-  cite {
101
-    font-style: italic;
102
-    a { color: $text-color-light !important; word-wrap: break-word; }
103
-    &:before { content: '–'; padding:{right: .3em; left: .3em;} color: $text-color-light; }
104
-  }
105
-  @media only screen and (min-width: 992px) {
106
-    padding-left: 1.5em;
107
-    border-left-width: 4px;
108
-  }
109
-}
110
-
111
-.has-pullquote:before {
112
-  /* Reset metrics. */
113
-  padding: 0;
114
-  border: none;
115
-
116
-  /* Content */
117
-  content: attr(data-pullquote);
118
-
119
-  /* Pull out to the right, modular scale based margins. */
120
-  float: right;
121
-  width: 45%;
122
-  margin: .5em 0 1em 1.5em;
123
-
124
-  /* Baseline correction */
125
-  position: relative;
126
-  top: 7px;
127
-  font-size: 1.4em;
128
-  line-height: 1.45em;
129
-}
130
-
131 1
deleted file mode 100644
... ...
@@ -1,21 +0,0 @@
1
-@mixin mask-image($img, $repeat: no-repeat){
2
-  @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms);
3
-  @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms);
4
-  width: image-width($img);
5
-  height: image-height($img);
6
-}
7
-
8
-@mixin selection($bg, $color: inherit, $text-shadow: none){
9
-  * {
10
-    &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
11
-    &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
12
-    &::selection { background: $bg; color: $color; text-shadow: $text-shadow; }
13
-  }
14
-}
15
-
16
-@function text-color($color, $dark: dark, $light: light){
17
-  $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000;
18
-  $text-color: if($text-color >= 150, $dark, $light);
19
-  @return $text-color;
20
-}
21
-
22 1
deleted file mode 100644
... ...
@@ -1,20 +0,0 @@
1
-// Here you can easily change your sites's color scheme.
2
-// To give it a try, uncomment some of the lines below rebuild your blog, and see how it works.
3
-
4
-//$header-bg: #263347;
5
-//$subtitle-color: lighten($header-bg, 58);
6
-//$nav-bg: desaturate(lighten(#8fc17a, 18), 5);
7
-//$sidebar-bg: desaturate(#eceff5, 8);
8
-//$sidebar-link-color: saturate(#526f9a, 10);
9
-//$sidebar-link-color-hover: darken(#7ab662, 9);
10
-
11
-
12
-//To use the light Solarized highlighting theme uncomment this block
13
-//$base03: $base3;
14
-//$base02: $base2;
15
-//$base01: $base1;
16
-//$base00: $base0;
17
-//$base0: $base00;
18
-//$base1: $base01;
19
-//$base2: $base02;
20
-//$base3: $base03;
21 1
deleted file mode 100644
... ...
@@ -1,16 +0,0 @@
1
-// Here you can easily change your sites's layout.
2
-// To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works.
3
-
4
-//$max-width: 1350px;
5
-
6
-// Padding used for layout margins
7
-//$pad-min: 18px;
8
-//$pad-narrow: 25px;
9
-//$pad-medium: 35px;
10
-//$pad-wide: 55px;
11
-
12
-// Sidebar widths used in media queries
13
-//$sidebar-width-medium: 240px;
14
-//$sidebar-pad-medium: 15px;
15
-//$sidebar-pad-wide: 20px;
16
-//$sidebar-width-wide: 300px;
17 1
deleted file mode 100644
... ...
@@ -1,2 +0,0 @@
1
-// This File is imported last, and will override other styles in the cascade
2
-// Add styles here to make changes without digging in too much
3 1
deleted file mode 100644
... ...
@@ -1,72 +0,0 @@
1
-#articles .blog-archives {
2
-  article {
3
-    padding: 1em 0 1em;
4
-    position: relative;
5
-    background: $img-border bottom left repeat-x;
6
-    &:last-child {
7
-      background: none;
8
-    }
9
-  }
10
-  h2 {
11
-    background: none;
12
-    display: none;
13
-  }
14
-  h1, h2 { color: $text-color; margin-bottom: .3em; }
15
-  h1 {
16
-    font-size: 1.5em;
17
-    a {
18
-      @include hover-link;
19
-      color: inherit;
20
-      &:hover { color: $link-color-hover; }
21
-      font-weight: normal;
22
-      display: inline-block;
23
-    }
24
-  }
25
-  a.category, time {
26
-    @extend .sans;
27
-    color: $text-color-light;
28
-  }
29
-  color: $text-color-light;
30
-  .entry-content { display: none; }
31
-  time {
32
-    font-size: .9em;
33
-    line-height: 1em;
34
-    .month, .day { display: inline-block; }
35
-    .month { text-transform: uppercase; }
36
-  }
37
-  p { margin-bottom: 1em; }
38
-  &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }}
39
-  a:hover { color: $link-color-hover; }
40
-  @media only screen and (min-width: 550px) {
41
-    article { margin-left: 5em; }
42
-    h2 {
43
-      background: none;
44
-      display: inline-block;
45
-      float: left;
46
-      padding-top: .75em;
47
-      &:first-child { padding-top: .75em; }
48
-    }
49
-    time {
50
-      position: absolute;
51
-      text-align: right;
52
-      left: 0em;
53
-      top: 1.8em;
54
-    }
55
-    .year { display: none; }
56
-    article {
57
-      padding:{left: 4.5em; bottom: .7em;}
58
-    }
59
-  a.category {
60
-    //text-align: right;
61
-    line-height: 1.1em;
62
-    //float: right;
63
-    }
64
-  }
65
-}
66
-#articles .blog-archives.category {
67
-  article {
68
-    margin-left: 0;
69
-    padding-left: 6.8em;
70
-  }
71
-  .year { display: inline; }
72
-}
73 1
deleted file mode 100644
... ...
@@ -1,131 +0,0 @@
1
-#articles {
2
-  overflow: hidden;
3
-  ul, ol { margin-left: 1.4em; }
4
-  @media only screen and (min-width: 768px) {
5
-    ul, ol { margin-left: 0; }
6
-  }
7
-  > article {
8
-    padding-bottom: 1em;
9
-    &:last-child { margin-bottom: 0;  }
10
-    h2 {
11
-      padding-top: 0.8em;
12
-      background: $img-border top left repeat-x;
13
-      &:first-child { background: none; padding-top: 0; }
14
-    }
15
-    .byline + time:before, time +time:before, .comments:before, .byline ~ .categories:before {
16
-      @extend .separator;
17
-    }
18
-  }
19
-  header {
20
-    position: relative;
21
-    padding-top: 2em;
22
-    padding-bottom: 1em;
23
-    margin-bottom: 1em;
24
-    background: $img-border bottom left repeat-x;
25
-    h1 {
26
-      margin: 0;
27
-      a { text-decoration: none;
28
-        &:hover { text-decoration: underline; } }
29
-    }
30
-    p {
31
-      font-size: .9em;
32
-      color: $text-color-light;
33
-      margin: 0;
34
-      @extend .sans;
35
-      &.meta {
36
-        text-transform: uppercase;
37
-      }
38
-    }
39
-    @media only screen and (min-width: 768px) {
40
-      margin-bottom: 1.5em;
41
-      padding-bottom: 1em;
42
-      background: $img-border bottom left repeat-x;
43
-      p.meta { position: absolute; top: 0; }
44
-    }
45
-  }
46
-  h1.feature {
47
-    padding-top: .5em;
48
-    margin-bottom: 1em;
49
-    padding-bottom: 1em;
50
-    background: $img-border bottom left repeat-x;
51
-    font-size: 2.0em; font-style: italic;
52
-    line-height: 1.3em;
53
-  }
54
-  .entry-content {
55
-    img, video { max-width: 100%; height: auto; }
56
-    video {
57
-      width: 100%; display: block; margin-bottom: 1.5em;
58
-      padding: .8em; background: #fff; border: 1px solid #eee;
59
-      @include box-sizing(border-box);
60
-    }
61
-  }
62
-  .flash-video {
63
-    max-width: 100%;
64
-    margin-bottom: 1.5em;
65
-    @include box-sizing(border-box);
66
-    padding: .8em; background: #fff; border: 1px solid #eee;
67
-    > div {
68
-      position: relative;
69
-      display: block;
70
-      padding-bottom: 56.25%;
71
-      padding-top: 1px;
72
-      height: 0;
73
-      overflow: hidden;
74
-      iframe, object, embed {
75
-        position: absolute;
76
-        top: 0;
77
-        left: 0;
78
-        width: 100%;
79
-        height: 100%;
80
-      }
81
-    }
82
-  }
83
-  iframe.twitter-share-button {
84
-    position: relative;
85
-    top: .3em;
86
-    padding-left: .5em;
87
-  }
88
-  > article > footer {
89
-    margin-top: 2em;
90
-    padding-top: 1em;
91
-    margin-bottom: 1.5em;
92
-    background: $img-border top left repeat-x;
93
-    @extend .sans;
94
-  }
95
-
96
-}
97
-article + article {
98
-  background: $img-border top left repeat-x;
99
-}
100
-#articles.blog-index {
101
-  article header { background: none; padding-bottom: 0; }
102
-  article h1 {
103
-    font-size: 2.2em;
104
-    a { color: inherit; &:hover { color: $link-color-hover; } }
105
-  }
106
-  a[rel=full-article] {
107
-    background: darken($main-bg, 5);
108
-    display: inline-block;
109
-    padding: .4em .8em;
110
-    margin-right: .5em;
111
-    text-decoration: none;
112
-    color: mix($text-color, $text-color-light);
113
-    @extend .serif;
114
-    @include transition(background-color, .5s);
115
-    &:hover {
116
-      background: $link-color-hover;
117
-      text-shadow: none;
118
-      color: $main-bg;
119
-    }
120
-  }
121
-  footer {
122
-    @extend .sans;
123
-    margin-top: 1em;
124
-  }
125
-}
126
-
127
-.separator {
128
-  content: "\2022 ";
129
-  padding: 0 .4em 0 .2em;
130
-  display: inline-block;
131
-}
132 1
deleted file mode 100644
... ...
@@ -1,19 +0,0 @@
1
-body > footer {
2
-  @extend .sans;
3
-  font-size: .8em;
4
-  color: $footer-color;
5
-  text-shadow: lighten($footer-bg, 5) 0 1px;
6
-  background-color: $footer-bg;
7
-  @include background(image-url('noise.png'), linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)));
8
-  border-top: 1px solid $footer-border-top;
9
-  position: relative;
10
-  padding-top: 1em;
11
-  padding-bottom: 1em;
12
-  margin-bottom: 3em;
13
-  @include border-bottom-radius(.4em);
14
-  z-index: 1;
15
-  a {
16
-    @include link-colors($footer-link-color, $footer-link-color-hover);
17
-  }
18
-  p:last-child { margin-bottom: 0; }
19
-}
20 1
deleted file mode 100644
... ...
@@ -1,18 +0,0 @@
1
-body > header {
2
-  background: $header-bg;
3
-  h1 {
4
-    display: inline-block;
5
-    margin: 0;
6
-    a, a:visited {
7
-      color: $title_color;
8
-      text-decoration: none;
9
-    }
10
-  }
11
-  h2 {
12
-    margin: .2em 0 0;
13
-    @extend .sans;
14
-    font-size: 1em;
15
-    color: $subtitle-color;
16
-    font-weight: normal;
17
-  }
18
-}
19 1
deleted file mode 100644
... ...
@@ -1,137 +0,0 @@
1
-body > nav {
2
-  position: relative;
3
-  background-color: $nav-bg;
4
-  @include background(image-url('noise.png'), linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)));
5
-  border: {
6
-    top: 1px solid $nav-border-top;
7
-    bottom: 1px solid $nav-border-bottom; }
8
-  padding-top: .35em;
9
-  padding-bottom: .35em;
10
-  form {
11
-    @include background-clip(padding-box);
12
-    margin: 0; padding: 0;
13
-    .search {
14
-      padding: .3em .5em 0;
15
-      font-size: .85em;
16
-      @extend .sans;
17
-      line-height: 1.1em;
18
-      width: 95%;
19
-      @include border-radius(.5em);
20
-      @include background-clip(padding-box);
21
-      @include box-shadow(lighten($nav-bg, 2) 0 1px);
22
-      background-color: lighten($nav-bg, 15);
23
-      border: 1px solid $nav-border;
24
-      color: #888;
25
-      &:focus {
26
-        color: #444;
27
-        border-color: #80b1df;
28
-        @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset);
29
-        background-color: #fff;
30
-        outline: none;
31
-      }
32
-    }
33
-  }
34
-  fieldset[role=site-search]{ float: right; width: 48%; }
35
-  fieldset[role=mobile-nav]{ float: left; width: 48%;
36
-    select{ width: 100%; font-size: .8em; border: 1px solid #888;}
37
-  }
38
-  ul { display: none; }
39
-  @media only screen and (min-width: 550px) {
40
-    font-size: .9em;
41
-    ul {
42
-      @include horizontal-list(0);
43
-      float: left;
44
-      display: block;
45
-      padding-top: .15em;
46
-    }
47
-    ul[role=subscription] {
48
-      margin-left: .8em;
49
-      float: right;
50
-      li:last-child a { padding-right: 0; }
51
-    }
52
-    ul li {
53
-      margin: 0;
54
-    }
55
-    a {
56
-      @include link-colors($nav-color, $nav-color-hover, $visited: $nav-color);
57
-      @extend .sans;
58
-      text-shadow: lighten($nav-bg, 12) 0 1px;
59
-      float: left;
60
-      text-decoration: none;
61
-      font-size: 1.1em;
62
-      padding: .1em 0;
63
-      line-height: 1.5em;
64
-    }
65
-    li + li {
66
-      border-left: 1px solid $nav-border-left;
67
-      margin-left: .8em;
68
-      a {
69
-        padding-left: .8em;
70
-        border-left: 1px solid $nav-border-right;
71
-      }
72
-    }
73
-    form {
74
-      float: right;
75
-      text-align: left;
76
-      padding-left: .8em;
77
-      width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 20px;
78
-      .search {
79
-        width: 93%;
80
-        font-size: .95em;
81
-        line-height: 1.2em;
82
-      }
83
-    }
84
-    ul[data-subscription$=email] + form {
85
-      width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 58px;
86
-      .search { width: 91%; }
87
-    }
88
-    fieldset[role=mobile-nav] { display: none; }
89
-    fieldset[role=site-search]{ width: 100%; }
90
-  }
91
-
92
-  @media only screen and (min-width: 992px) {
93
-    form {
94
-      width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 10px;
95
-    }
96
-    ul[data-subscription$=email] + form {
97
-      width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 58px;
98
-    }
99
-  }
100
-}
101
-.no-placeholder {
102
-  body > nav .search {
103
-    background: lighten($nav-bg, 15) image-url('search.png') .3em .25em no-repeat;
104
-    text-indent: 1.3em;
105
-  }
106
-}
107
-@mixin mask-subscription-nav($feed: 'rss.png'){
108
-  position: relative; top: 0px;
109
-  text-indent: -999999em;
110
-  background-color: $nav-border-right;
111
-  border: 0;
112
-  padding: 0;
113
-  &,&:after { @include mask-image($feed); }
114
-  &:after {
115
-    content: "";
116
-    position: absolute; top: -1px; left: 0;
117
-    background-color: lighten($nav-color, 25);
118
-  }
119
-  &:hover:after { background-color: lighten($nav-color, 20); }
120
-}
121
-.maskImage {
122
-  body > nav {
123
-    @media only screen and (min-width: 550px) {
124
-      ul[data-subscription$=email] + form {
125
-        width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 32px;
126
-      }
127
-    }
128
-    @media only screen and (min-width: 992px) {
129
-      ul[data-subscription$=email] + form {
130
-        width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 32px;
131
-      }
132
-    }
133
-  }
134
-  ul[role=subscription] { position: relative; top: .2em; li, a { border: 0; padding: 0; }}
135
-  a[rel=subscribe-rss]{ @include mask-subscription-nav('rss.png'); }
136
-  a[rel=subscribe-email]{ @include mask-subscription-nav('email.png'); }
137
-}
138 1
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-@import "sidebar/base";
2
-@import "sidebar/twitter";
3
-@import "sidebar/pinboard";
4
-@import "sidebar/delicious";
5 1
deleted file mode 100644
... ...
@@ -1,208 +0,0 @@
1
-$pre-bg: image-url('noise.png') top left;
2
-.highlight, html .gist .gist-file .gist-syntax .gist-highlight {
3
-  .line-numbers {
4
-    text-align: right;
5
-    font-size: .8em;
6
-    line-height: 1.45em;
7
-    background: $base02 $pre-bg !important;
8
-    border-right: 1px solid darken($base03, 2) !important;
9
-    @include box-shadow(lighten($base02, 2) -1px 0 inset);
10
-    text-shadow: darken($base02, 10) 0 -1px;
11
-    span { color: $base01 !important; }
12
-    padding: .8em !important;
13
-    @include border-radius(0);
14
-  }
15
-}
16
-html .gist .gist-file {
17
-  margin-bottom: 1.5em;
18
-  position: relative;
19
-  border: none;
20
-  padding-top: image-height("code_bg.png") !important;
21
-  .gist-syntax {
22
-    border-bottom: 1px solid darken($base03, 2) !important;
23
-    .gist-highlight{
24
-      background: $base03 !important;
25
-      pre {
26
-        @extend .pre-code;
27
-      }
28
-    }
29
-  }
30
-  .gist-meta {
31
-   padding: .6em 0.8em;
32
-   border: 1px solid lighten($base02, 2) !important;
33
-   color: $base01;
34
-   font-size: .7em !important;
35
-   background: $base02 $pre-bg;
36
-   @extend .sans;
37
-   line-height: 1.5em;
38
-    a {
39
-      color: mix($base1, $base01) !important;
40
-      @include hover-link;
41
-      &:hover { color: $base1 !important; }
42
-    }
43
-    a[href*='#file'] {
44
-      position: absolute; top: 0; left:0; right:-10px;
45
-      color: #474747 !important;
46
-      @extend .code-title;
47
-      &:hover { color: $link-color !important; }
48
-    }
49
-    a[href*=raw]{
50
-      @extend .download-source;
51
-      top: .4em;
52
-    }
53
-  }
54
-}
55
-pre {
56
-  background: $base03 $pre-bg;
57
-  @include border-radius(.4em);
58
-  @extend .mono;
59
-  border: 1px solid $base02;
60
-  line-height: 1.45em;
61
-  font-size: .8em;
62
-  margin-bottom: 1.5em;
63
-  padding: .8em 1em;
64
-  color: $base1;
65
-  overflow: auto;
66
-}
67
-h3.filename {
68
-  @extend .code-title;
69
-  + pre { @include border-top-radius(0px); }
70
-}
71
-
72
-p code {
73
-  @extend .mono;
74
-  display: inline-block;
75
-  white-space: no-wrap;
76
-  background: #fff;
77
-  font-size: .9em;
78
-  line-height: 1.5em;
79
-  color: #555;
80
-  border: 1px solid #ddd;
81
-  @include border-radius(.4em);
82
-  padding: 0 .3em;
83
-  margin: -1px 0;
84
-}
85
-
86
-.pre-code {
87
-  @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
88
-  overflow: scroll;
89
-  overflow-y: hidden;
90
-  display: block;
91
-  padding: .8em !important;
92
-  overflow-x: auto;
93
-  line-height: 1.45em;
94
-  background: $base03 $pre-bg !important;
95
-  color: $base1 !important;
96
-  span { color: $base1 !important; }
97
-  span { font-style: normal !important; font-weight: normal !important; }
98
-
99
-  .c      { color: $base01 !important; font-style: italic !important; }                     /* Comment */
100
-  .cm     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Multiline */
101
-  .cp     { color: $base01 !important; font-style: italic !important;  }                     /* Comment.Preproc */
102
-  .c1     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Single */
103
-  .cs     { color: $base01 !important; font-weight: bold !important; font-style: italic !important; }   /* Comment.Special */
104
-  .err    { color: $red !important; background: none !important; }                                            /* Error */
105
-  .k      { color: $orange !important; }                       /* Keyword */
106
-  .o      { color: $base1 !important; font-weight: bold !important; }                       /* Operator */
107
-  .p      { color: $base1 !important; }                                             /* Operator */
108
-  .ow     { color: $cyan !important; font-weight: bold !important; }                       /* Operator.Word */
109
-  .gd     { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: inline-block; }               /* Generic.Deleted */
110
-  .gd .x  { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: inline-block; }               /* Generic.Deleted.Specific */
111
-  .ge     { color: $base1 !important; font-style: italic !important; }                      /* Generic.Emph */
112
-  //.gr     { color: #aa0000 }                                          /* Generic.Error */
113
-  .gh     { color: $base01 !important; }                                          /* Generic.Heading */
114
-  .gi     { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: inline-block; }               /* Generic.Inserted */
115
-  .gi .x  { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: inline-block; }               /* Generic.Inserted.Specific */
116
-  //.go     { color: #888888 }                                          /* Generic.Output */
117
-  //.gp     { color: #555555 }                                          /* Generic.Prompt */
118
-  .gs     { color: $base1 !important; font-weight: bold !important; }                                       /* Generic.Strong */
119
-  .gu     { color: $violet !important; }                                          /* Generic.Subheading */
120
-  //.gt     { color: #aa0000 }                                          /* Generic.Traceback */
121
-  .kc     { color: $green !important; font-weight: bold !important; }                       /* Keyword.Constant */
122
-  .kd     { color: $blue !important; }                       /* Keyword.Declaration */
123
-  .kp     { color: $orange !important; font-weight: bold !important; }                       /* Keyword.Pseudo */
124
-  .kr     { color: $magenta !important; font-weight: bold !important; }                       /* Keyword.Reserved */
125
-  .kt     { color: $cyan !important; }                       /* Keyword.Type */
126
-  .n      { color: $blue !important; }
127
-  .na     { color: $blue !important; }                                          /* Name.Attribute */
128
-  .nb     { color: $green !important; }                                          /* Name.Builtin */
129
-  //.nc     { color: #445588; font-weight: bold }                       /* Name.Class */
130
-  .no     { color: $yellow !important; }                                          /* Name.Constant */
131
-  //.ni     { color: #800080 }                                          /* Name.Entity */
132
-  .ne     { color: $blue !important; font-weight: bold !important; }                       /* Name.Exception */
133
-  .nf     { color: $blue !important; font-weight: bold !important; }                       /* Name.Function */
134
-  .nn     { color: $yellow !important; }                                          /* Name.Namespace */
135
-  .nt     { color: $blue !important; font-weight: bold !important; }                                          /* Name.Tag */
136
-  .nx     { color: $yellow !Important; }
137
-  //.bp     { color: #999999 }                                          /* Name.Builtin.Pseudo */
138
-  //.vc     { color: #008080 }                                          /* Name.Variable.Class */
139
-  .vg     { color: $blue !important; }                                          /* Name.Variable.Global */
140
-  .vi     { color: $blue !important; }                                          /* Name.Variable.Instance */
141
-  .nv     { color: $blue !important; }                                          /* Name.Variable */
142
-  //.w      { color: #bbbbbb }                                          /* Text.Whitespace */
143
-  .mf     { color: $cyan !important; }                                          /* Literal.Number.Float */
144
-  .m      { color: $cyan !important; }                                          /* Literal.Number */
145
-  .mh     { color: $cyan !important; }                                          /* Literal.Number.Hex */
146
-  .mi     { color: $cyan !important; }                                          /* Literal.Number.Integer */
147
-  //.mo     { color: #009999 }                                          /* Literal.Number.Oct */
148
-  .s      { color: $cyan !important; }                                             /* Literal.String */
149
-  //.sb     { color: #d14 }                                             /* Literal.String.Backtick */
150
-  //.sc     { color: #d14 }                                             /* Literal.String.Char */
151
-  .sd     { color: $cyan !important; }                                             /* Literal.String.Doc */
152
-  .s2     { color: $cyan !important; }                                             /* Literal.String.Double */
153
-  .se     { color: $red !important; }                                             /* Literal.String.Escape */
154
-  //.sh     { color: #d14 }                                             /* Literal.String.Heredoc */
155
-  .si     { color: $blue !important; }                                             /* Literal.String.Interpol */
156
-  //.sx     { color: #d14 }                                             /* Literal.String.Other */
157
-  .sr     { color: $cyan !important; }                                          /* Literal.String.Regex */
158
-  .s1     { color: $cyan !important; }                                             /* Literal.String.Single */
159
-  //.ss     { color: #990073 }                                          /* Literal.String.Symbol */
160
-  //.il     { color: #009999 }                                          /* Literal.Number.Integer.Long */
161
-  div { .gd, .gd .x, .gi, .gi .x { display: block; }}
162
-}
163
-
164
-.highlight, .gist-highlight {
165
-  pre { background: none; @include border-radius(none); border: none; padding: 0; margin-bottom: 0; }
166
-  margin-bottom: 1.5em;
167
-  background: $base03;
168
-  overflow-y: hidden;
169
-  overflow-x: auto;
170
-}
171
-.highlight code { @extend .pre-code; background: #000;}
172
-figure {
173
-  margin-bottom: 1.5em;
174
-  figcaption {
175
-    position: relative;
176
-    @extend .code-title;
177
-    a { @extend .download-source; }
178
-  }
179
-  .highlight { margin-bottom: 0; border-bottom: 1px solid darken($base03, 2) !important; }
180
-}
181
-.code-title {
182
-  text-align: center;
183
-  font-size: 13px;
184
-  line-height: 2em;
185
-  text-shadow: #cbcccc 0 1px 0;
186
-  color: #474747;
187
-  font-weight: normal;
188
-  margin-bottom: 0;
189
-  @include border-top-radius(5px);
190
-  font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;
191
-  background: #aaaaaa image-url("code_bg.png") top repeat-x;
192
-  border: 1px solid #565656;
193
-  border-top-color: #cbcbcb;
194
-  border-left-color: #a5a5a5;
195
-  border-right-color: #a5a5a5;
196
-  border-bottom: 0;
197
-}
198
-
199
-.download-source {
200
-  position: absolute; right: .8em;
201
-  @include hover-link;
202
-  color: #666 !important;
203
-  z-index: 1;
204
-  font-size: 13px;
205
-  text-shadow: #cbcccc 0 1px 0;
206
-  padding-left: 3em;
207
-}
208
-
209 1
deleted file mode 100644
... ...
@@ -1,56 +0,0 @@
1
-.side-shadow-border {
2
-  @include box-shadow(lighten($sidebar-bg, 5) 0 1px);
3
-}
4
-#articles + aside {
5
-  color: $sidebar-color;
6
-  padding-top: 1.2em;
7
-  text-shadow: lighten($sidebar-bg, 8) 0 1px;
8
-  section {
9
-    @extend .sans;
10
-    font-size: .8em;
11
-    line-height: 1.4em;
12
-    margin-bottom: 1.5em;
13
-    h1 {
14
-      margin: 1.5em 0 0;
15
-      padding-bottom: .2em;
16
-      border-bottom: 1px solid $sidebar-border;
17
-      @extend .side-shadow-border;
18
-      + p {
19
-        padding-top: .4em;
20
-      }
21
-    }
22
-  }
23
-  ul {
24
-    margin-bottom: 0.5em;
25
-  }
26
-  li {
27
-    list-style: none;
28
-    padding: .5em 0;
29
-    margin: 0;
30
-    border-bottom: 1px solid $sidebar-border;
31
-    @extend .side-shadow-border;
32
-    p:last-child {
33
-      margin-bottom: 0;
34
-    }
35
-  }
36
-  a {
37
-    color: inherit;
38
-    @include transition(color, .5s);
39
-  }
40
-  &:hover a, &:hover #tweets a { color: $sidebar-link-color;
41
-    &:hover { color: $sidebar-link-color-hover; }
42
-  }
43
-  #recent_posts {
44
-    time {
45
-      text-transform: uppercase;
46
-      font-size: .9em;
47
-      color: #666;
48
-    }
49
-  }
50
-}
51
-.aside-alt-link {
52
-  color: $sidebar-link-color-subdued;
53
-  &:hover {
54
-    color: $sidebar-link-color-subdued-hover;
55
-  }
56
-}
57 1
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-.delicious-posts {
2
-  a.delicious-link { margin-bottom: .5em; display: block; }
3
-  p { font-size: 1em; }
4
-}
5 1
deleted file mode 100644
... ...
@@ -1,12 +0,0 @@
1
-#pinboard_linkroll {
2
-  .pin-title, .pin-description {
3
-    display: block;
4
-    margin-bottom: .5em;
5
-  }
6
-  .pin-tag {
7
-    @include hover-link;
8
-    @extend .aside-alt-link;
9
-    &:after { content: ','; }
10
-    &:last-child:after { content: ''; }
11
-  }
12
-}
13 1
deleted file mode 100644
... ...
@@ -1,33 +0,0 @@
1
-#tweets {
2
-  .loading {
3
-    background: inline-image('bird_32_gray.png') no-repeat center .5em;
4
-    color: darken($sidebar-bg, 18);
5
-    text-shadow: $main-bg 0 1px;
6
-    text-align: center;
7
-    padding: 2.5em 0 .5em;
8
-    &.error {
9
-      background: inline-image('bird_32_gray_fail.png') no-repeat center .5em;
10
-    }
11
-  }
12
-  a { color: $sidebar-link-color-subdued; @include hover-link; }
13
-  p {
14
-    position: relative;
15
-    padding-right: 1em;
16
-  }
17
-  a[href*=status]{
18
-    color: $twitter-status-link;
19
-    float: right;
20
-    padding: 0 0 .1em 1em;
21
-    position: relative; right: -1.3em;
22
-    text-shadow: #fff 0 1px;
23
-    font-size: .7em;
24
-    span { font-size: 1.5em; }
25
-    &:hover {
26
-      color: $sidebar-link-color-subdued-hover;
27
-      text-decoration: none;
28
-    }
29
-  }
30
-  a[href*='twitter.com/search']{
31
-    @extend .aside-alt-link;
32
-  }
33
-}
34 1
deleted file mode 100644
... ...
@@ -1,9 +0,0 @@
1
-@import "compass";
2
-@include global-reset;
3
-@include reset-html5;
4
-
5
-@import "custom/colors";
6
-@import "custom/layout";
7
-@import "base";
8
-@import "partials";
9
-@import "custom/styles";
10 1
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-{% capture category %}{{ post.categories | size }}{% endcapture %}
2
-<h1><a href="{{ post.url }}">{{post.title}}</a></h1>
3
-<time datetime="{{ post.date | datetime }}" pubdate>{{ post.date | date: "<span class='month'>%b</span> <span class='day'>%d</span> <span class='year'>%Y</span>"}}</time>
4
-{% if category != '0' %}
5
-<footer>
6
-  <span class="categories">posted in {{ post.categories | category_links }}</span>
7
-</footer>
8
-{% endif %}
9 1
deleted file mode 100644
... ...
@@ -1,25 +0,0 @@
1
-{% unless page.no_header %}
2
-  <header>
3
-    {% if index %}
4
-      <h1 class="entry-title"><a href="{{ post.url }}">{{ post.title | titlecase }}</a></h1>
5
-    {% else %}
6
-      <h1 class="entry-title">{{ page.title | titlecase }}</h1>
7
-    {% endif %}
8
-    {% unless page.no_meta or !index %}<p class="meta">{% include post_date.html %}</p>{% endunless %}
9
-  </header>
10
-{% endunless %}
11
-{% if index %}
12
-  <div class="entry-content">{{ content | exerpt | smart_quotes }}</div>
13
-  <p><a rel="full-article" href="{{ post.url }}">Read on &rarr;</a></p>
14
-  <footer>
15
-    <p class="meta">
16
-      {% include post_author.html %}
17
-      {% include post_date.html %}
18
-      {% include post_categories.html %}
19
-      <span class="comments"><a rel="comments" href="{{ post.url }}#disqus_thread">Comments</a></span>
20
-      {% include sharing.html %}
21
-    </p>
22
-  </footer>
23
-{% else %}
24
-<div class="entry-content">{{ content | smart_quotes }}</div>
25
-{% endif %}
26 1
deleted file mode 100644
... ...
@@ -1,7 +0,0 @@
1
-{% if site.delicious_user %}
2
-<section>
3
-  <h1>On Delicious</h1>
4
-  <script type="text/javascript" src="http://feeds.delicious.com/v2/js/{{ site.delicious_user }}?title=&count={{ site.delicious_count }}&sort=date&extended"></script>
5
-  <p><a href="http://delicious.com/{{ site.delicious_user }}">My Delicious Bookmarks &raquo;</a></p>
6
-</section>
7
-{% endif %}
8 1
deleted file mode 100644
... ...
@@ -1,19 +0,0 @@
1
-{% if site.pinboard_user %}
2
-<section>
3
-  <h1>My Pinboard</h1>
4
-  <ul id="pinboard_linkroll">Fetching linkroll...</ul>
5
-  <p><a href="http://pinboard.in/u:{{ site.pinboard_user }}">My Pinboard Bookmarks &raquo;</a></p>
6
-</section>
7
-<script type="text/javascript">
8
-  var linkroll = 'pinboard_linkroll'; //id target for pinboard list
9
-  var pinboard_user = "{{ site.pinboard_user }}"; //id target for pinboard list
10
-  var pinboard_count = {{ site.pinboard_count }}; //id target for pinboard list
11
-  (function(){
12
-    var pinboardInit = document.createElement('script');
13
-    pinboardInit.type = 'text/javascript';
14
-    pinboardInit.async = true;
15
-    pinboardInit.src = '/javascripts/pinboard.js';
16
-    document.getElementsByTagName('head')[0].appendChild(pinboardInit);
17
-  })();
18
-</script>
19
-{% endif %}
20 1
deleted file mode 100644
... ...
@@ -1,12 +0,0 @@
1
-{% if page.single and site.recent_posts %}
2
-<section>
3
-  <h1>Recent Posts</h1>
4
-  <ul id="recent_posts">
5
-    {% for post in site.posts limit: site.recent_posts %}
6
-      <li class="post">
7
-        <a href="{{ post.url }}">{{ post.title }}</a>
8
-      </li>
9
-    {% endfor %}
10
-  </ul>
11
-</section>
12
-{% endif %}
13 1
deleted file mode 100644
... ...
@@ -1,19 +0,0 @@
1
-{% if site.twitter_user %}
2
-<section>
3
-  <h1>Latest Tweets</h1>
4
-  <ul id="tweets">
5
-    <li class="loading">Status updating...</li>
6
-  </ul>
7
-  <script type="text/javascript">
8
-    $.domReady(function(){
9
-      getTwitterFeed("{{site.twitter_user}}", {{site.twitter_tweet_count}}, {{site.twitter_show_replies}});
10
-    });
11
-  </script>
12
-  <script src="/javascripts/twitter.js" type="text/javascript"> </script>
13
-  {% if site.twitter_follow_button %}
14
-    <a href="http://twitter.com/{{ site.twitter_user }}" class="twitter-follow-button" data-width="208px" data-show-count="{{ site.twitter_show_follower_count }}">Follow @{{ site.twitter_user }}</a>
15
-  {% else %}
16
-    <p>Follow <a href="http://twitter.com/{{site.twitter_user}}">@{{ site.twitter_user }}</a></p>
17
-  {% endif %}
18
-</section>
19
-{% endif %}
20 1
deleted file mode 100644
... ...
@@ -1,13 +0,0 @@
1
-<div id="disqus_thread"></div>
2
-<script type="text/javascript">
3
-  var disqus_shortname = '{{ site.disqus_short_name }}';
4
-  var disqus_identifier = '{{ site.url }}{{ page.url }}';
5
-  var disqus_url = '{{ site.url }}{{ page.url }}';
6
-  //var disqus_developer = 1;
7
-  (function() {
8
-    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
9
-    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
10
-    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
11
-  })();
12
-</script>
13
-<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
14 1
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-<p>
2
-  Copyright &copy; {{ site.time | date: "%Y" }} - {{ site.author }} -
3
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
4
-</p>
5 1
deleted file mode 100644
... ...
@@ -1,13 +0,0 @@
1
-{% if site.google_analytics_tracking_id %}
2
-  <script type="text/javascript">
3
-    var _gaq = _gaq || [];
4
-    _gaq.push(['_setAccount', '{{ site.google_analytics_tracking_id }}']);
5
-    _gaq.push(['_trackPageview']);
6
-
7
-    (function() {
8
-      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
9
-      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
10
-      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
11
-    })();
12
-  </script>
13
-{% endif %}
14 1
deleted file mode 100644
... ...
@@ -1,35 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
4
-<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
5
-<head>
6
-  <meta charset="utf-8">
7
-  {% if page.title %}
8
-    <title>{{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
9
-  {% else %}
10
-    <title>{{site.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
11
-  {% endif %}
12
-  <meta name="author" content="{{site.author}}">
13
-  {% if page.description %}
14
-    <meta name="description" content="{{page.description}}"/>
15
-  {% endif %}
16
-
17
-  <!-- http://t.co/dKP3o1e -->
18
-  <meta name="HandheldFriendly" content="True">
19
-  <meta name="MobileOptimized" content="320">
20
-  <meta name="viewport" content="width=device-width, initial-scale=1">
21
-
22
-  {% if page.keywords %}
23
-    <meta name="keywords" content="{{page.keywords}}"/>
24
-  {% endif %}
25
-
26
-  <link href="/images/favicon.png" rel="shortcut icon" />
27
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
28
-  <script src="/javascripts/modernizr-2.0.js"></script>
29
-  <script src="http://s3.amazonaws.com/ender-js/jeesh.min.js"></script>
30
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
31
-  <link href='http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
32
-  <link href='http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic' rel='stylesheet' type='text/css'>
33
-  {% include google_analytics.html %}
34
-  <link href="/atom.xml" rel="alternate" title="{{site.title}}" type="application/atom+xml"/>
35
-</head>
36 1
deleted file mode 100644
... ...
@@ -1,6 +0,0 @@
1
-<hgroup>
2
-  <h1><a href="/">{{ site.title }}</a></h1>
3
-  {% if site.subtitle %}
4
-    <h2>{{ site.subtitle }}</h2>
5
-  {% endif %}
6
-</hgroup>
7 1
deleted file mode 100644
... ...
@@ -1,16 +0,0 @@
1
-<ul role="subscription" data-subscription="rss{% if site.subscribe_email %} email{% endif %}">
2
-  <li><a href="{{ site.subscribe_rss }}" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
3
-  {% if site.subscribe_email %}
4
-    <li><a href="{{ site.subscribe_email }}" rel="subscribe-email" title="subscribe via email">Email</a></li>
5
-  {% endif %}
6
-</ul>
7
-<form action="{{ site.simple_search }}" method="get">
8
-  <fieldset role="site-search">
9
-    <input type="hidden" name="q" value="site:{{ site.url | search_url }}" />
10
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
11
-  </fieldset>
12
-</form>
13
-<ul role="main-nav">
14
-  <li><a href="/">Blog</a></li>
15
-  <li><a href="/archives.html">Archives</a></li>
16
-</ul>
17 1
deleted file mode 100644
... ...
@@ -1,6 +0,0 @@
1
-{% if post.author %}
2
-  {% assign author = post.author %}
3
-{% else %}
4
-  {% assign author = site.author %}
5
-{% endif %}
6
-{% if author %}<span class="byline author vcard">Posted by <span class="fn">{{ author }}</span></span>{% endif %}
7 1
deleted file mode 100644
... ...
@@ -1,10 +0,0 @@
1
-{% capture category %}{% if post %}{{ post.categories | category_links | size }}{% else %}{{ page.categories | category_links | size }}{% endif %}{% endcapture %}
2
-{% unless category == '0' %}
3
-<span class="categories"> in
4
-  {% if post %}
5
-    {{ post.categories | category_links }}
6
-  {% else %}
7
-    {{ page.categories | category_links }}
8
-  {% endif %}
9
-</span>
10
-{% endunless %}
11 1
deleted file mode 100644
... ...
@@ -1,10 +0,0 @@
1
-{% capture date %}{{ page.date }}{{ post.date }}{% endcapture %}
2
-{% capture has_date %}{{ date | size }}{% endcapture %}
3
-{% capture updated %}{{ page.updated }}{{ post.updated }}{% endcapture %}
4
-{% capture was_updated %}{{ updated | size }}{% endcapture %}
5
-{% if has_date != '0' %}
6
-<time datetime="{{ date | datetime }}" pubdate {% if updated %} updated {% endif %}>{{ date | ordinalize }}</time>
7
-{% endif %}
8
-{% if was_updated != '0' %}
9
-<time class="updated" datetime="{{ updated | datetime }}"></time>
10
-{% endif %}
11 1
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-<a href="http://twitter.com/share" class="twitter-share-button" data-url="{{ site.url }}{{ page.url }}" data-via="{{ site.twitter_user }}" data-counturl="{{ site.url }}{{ page.url }}" >Tweet</a>
2 1
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-<section>
2
-  <h1>About Me</h1>
3
-  <p>Hi, I'm Octopress!</p>
4
-</section>
5
-{% include asides/recent_posts.html %}
6
-{% include asides/twitter.html %}
7
-{% include asides/delicious.html %}
8
-{% include asides/pinboard.html %}
9 1
deleted file mode 100644
... ...
@@ -1,12 +0,0 @@
1
-layout: post
2
-no_meta: true
3
-
4
-<div class="blog-archives category">
5
-{% for post in site.categories[page.category] %}
6
-<article>
7
-  {% include archive_post.html %}
8
-</article>
9
-{% endfor %}
10
-</div>
11 1
deleted file mode 100644
... ...
@@ -1,26 +0,0 @@
1
-{% include head.html %}
2
-<body {% if page.body_id %} id="{{ page.body_id }}" {% endif %} {% if page.sidebar == 'none' %} class="no-sidebar" {% endif %}>
3
-  <header>{% include header.html %}</header>
4
-  <nav>{% include navigation.html %}</nav>
5
-  <div>
6
-    <div>
7
-      <div id="articles" {% if page.blog_index %} class="blog-index" {% endif %}>{{ content }}</div>
8
-      {% unless page.sidebar == 'none' %}
9
-        <aside>{% include sidebar.html %}</aside>
10
-      {% endunless %}
11
-    </div>
12
-  </div>
13
-  <footer>{% include footer.html %}</footer>
14
-  {% if site.twitter_follow_button or site.twitter_tweet_button %}
15
-    <script type="text/javascript">
16
-      (function(){
17
-        var twitterWidgets = document.createElement('script');
18
-        twitterWidgets.type = 'text/javascript';
19
-        twitterWidgets.async = true;
20
-        twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
21
-        document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
22
-      })();
23
-    </script>
24
-  {% endif %}
25
-</body>
26
-</html>
27 1
deleted file mode 100644
... ...
@@ -1,5 +0,0 @@
1
-layout: post
2
-
3
-<!-- if you want a page layout -->
4 1
deleted file mode 100644
... ...
@@ -1,24 +0,0 @@
1
-layout: default
2
-single: true
3
-
4
-<article class="hentry">
5
-  {% include article.html %}
6
-  {% unless page.no_meta %}
7
-  <footer>
8
-    <p class="meta">
9
-      {% include post_author.html %}
10
-      {% include post_date.html %}
11
-      {% include post_categories.html %}
12
-      {% include sharing.html %}
13
-    </p>
14
-  </footer>
15
-  {% endunless %}
16
-  {% if site.disqus_short_name %}
17
-  <section>
18
-    <h1>Comments</h1>
19
-    <div id="disqus_thread">{% include disqus_thread.html %}</div>
20
-  </section>
21
-  {% endif %}
22
-</article>
23 1
deleted file mode 100644
... ...
@@ -1,17 +0,0 @@
1
-layout: post
2
-title: Blog Archive
3
-no_meta: true
4
-<div class="blog-archives">
5
-{% for post in site.posts reverse %}
6
-{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
7
-{% unless year == this_year %}
8
-  {% assign year = this_year %}
9
-  <h2>{{ year }}</h2>
10
-{% endunless %}
11
-<article>
12
-  {% include archive_post.html %}
13
-</article>
14
-{% endfor %}
15
-</div>
16 1
deleted file mode 100644
17 2
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/background.png and /dev/null differ
18 3
deleted file mode 100644
19 4
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png and /dev/null differ
20 5
deleted file mode 100644
21 6
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/divider.png and /dev/null differ
22 7
deleted file mode 100644
23 8
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png and /dev/null differ
24 9
deleted file mode 100644
25 10
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png and /dev/null differ
26 11
deleted file mode 100644
27 12
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png and /dev/null differ
28 13
deleted file mode 100644
29 14
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png and /dev/null differ
30 15
deleted file mode 100644
31 16
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png and /dev/null differ
32 17
deleted file mode 100644
33 18
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png and /dev/null differ
34 19
deleted file mode 100644
35 20
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png and /dev/null differ
36 21
deleted file mode 100644
37 22
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png and /dev/null differ
38 23
deleted file mode 100644
39 24
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png and /dev/null differ
40 25
deleted file mode 100644
41 26
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png and /dev/null differ
42 27
deleted file mode 100644
43 28
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png and /dev/null differ
44 29
deleted file mode 100644
45 30
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png and /dev/null differ
46 31
deleted file mode 100644
47 32
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png and /dev/null differ
48 33
deleted file mode 100644
49 34
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png and /dev/null differ
50 35
deleted file mode 100644
51 36
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png and /dev/null differ
52 37
deleted file mode 100644
53 38
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png and /dev/null differ
54 39
deleted file mode 100644
55 40
Binary files a/themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png and /dev/null differ
56 41
deleted file mode 100644
57 42
Binary files a/themes/classic/source/assets/jwplayer/glow/display/background.png and /dev/null differ
58 43
deleted file mode 100644
59 44
Binary files a/themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png and /dev/null differ
60 45
deleted file mode 100644
61 46
Binary files a/themes/classic/source/assets/jwplayer/glow/display/muteIcon.png and /dev/null differ
62 47
deleted file mode 100644
63 48
Binary files a/themes/classic/source/assets/jwplayer/glow/display/playIcon.png and /dev/null differ
64 49
deleted file mode 100644
65 50
Binary files a/themes/classic/source/assets/jwplayer/glow/dock/button.png and /dev/null differ
66 51
deleted file mode 100644
... ...
@@ -1,115 +0,0 @@
1
-<?xml version="1.0"?>
2
-<skin version="1.1" name="Glow" author="LongTail Video">
3
-
4
-	<settings>
5
-		<setting name="backcolor" value="0x000000" />
6
-		<setting name="frontcolor" value="0xeeeeee" />
7
-		<setting name="lightcolor" value="0xeeeeee" />
8
-		<setting name="screencolor" value="0x000000" />
9
-	</settings>
10
-
11
-	<components>
12
-		<component name="controlbar">
13
-			<settings>
14
-				<setting name="margin" value="0" />
15
-				<setting name="fontsize" value="11" />
16
-				<setting name="fontcolor" value="0xEEEEEE" />
17
-				<setting name="buttoncolor" value="0xEEEEEE" />
18
-			</settings>
19
-
20
-			<layout>
21
-				<group position="left">
22
-					<button name="play" />
23
-					<text name="elapsed" />
24
-				</group>
25
-				<group position="center">
26
-					<slider name="time" />
27
-				</group>
28
-				<group position="right">
29
-					<text name="duration" />
30
-					<button name="blank" />
31
-					<button name="mute" />
32
-					<button name="fullscreen" />
33
-				</group>
34
-			</layout>
35
-
36
-			<elements>
37
-				<element name="background" src="background.png" />
38
-				<element name="capLeft" src="divider.png" />
39
-				<element name="capRight" src="divider.png" />
40
-				<element name="divider" src="divider.png" />
41
-				<element name="blankButton" src="blankButton.png" />
42
-				<element name="fullscreenButton" src="fullscreenButton.png" />
43
-				<element name="fullscreenButtonOver" src="fullscreenButtonOver.png" />
44
-				<element name="muteButton" src="muteButton.png" />
45
-				<element name="muteButtonOver" src="muteButtonOver.png" />
46
-				<element name="pauseButton" src="pauseButton.png" />
47
-				<element name="pauseButtonOver" src="pauseButtonOver.png" />
48
-				<element name="playButton" src="playButton.png" />
49
-				<element name="playButtonOver" src="playButtonOver.png" />
50
-				<element name="timeSliderBuffer" src="timeSliderBuffer.png" />
51
-				<element name="timeSliderCapLeft" src="timeSliderCapLeft.png" />
52
-				<element name="timeSliderCapRight" src="timeSliderCapRight.png" />
53
-				<element name="timeSliderProgress" src="timeSliderProgress.png" />
54
-				<element name="timeSliderRail" src="timeSliderRail.png" />
55
-				<element name="normalscreenButton" src="normalscreenButton.png" />
56
-				<element name="normalscreenButtonOver" src="normalscreenButtonOver.png" />
57
-				<element name="unmuteButton" src="unmuteButton.png" />
58
-				<element name="unmuteButtonOver" src="unmuteButtonOver.png" />
59
-				<element name="volumeSliderRail" src="divider.png" />
60
-				<element name="volumeSliderProgress" src="divider.png" />
61
-			</elements>
62
-		</component>
63
-		
64
-		<component name="display">
65
-			<settings>
66
-				<setting name="bufferinterval" value="250" />
67
-				<setting name="bufferrotation" value="90" />
68
-			</settings>
69
-			<elements>
70
-				<element name="background" src="background.png" />
71
-				<element name="playIcon" src="playIcon.png" />
72
-				<element name="muteIcon" src="muteIcon.png" />
73
-				<element name="errorIcon" src="bufferIcon.png" />
74
-				<element name="bufferIcon" src="bufferIcon.png" />
75
-			</elements>
76
-		</component>
77
-		
78
-		<component name="dock">
79
-			<settings>
80
-				<setting name="fontcolor" value="0xFFFFFF" />
81
-			</settings>
82
-			<elements>
83
-				<element name="button" src="button.png" />
84
-			</elements>
85
-		</component>
86
-
87
-		<component name="playlist">
88
-			<settings>
89
-				<setting name="fontcolor" value="0xEEEEEE" />
90
-				<setting name="overcolor" value="0xFFFFFF" />
91
-				<setting name="activecolor" value="0xFFFFFF" />
92
-				<setting name="backgroundcolor" value="0x333333" />
93
-			</settings>
94
-			<elements>
95
-				<element name="item" src="item.png" />
96
-				<element name="itemOver" src="itemOver.png" />
97
-				<element name="sliderCapBottom" src="sliderCapBottom.png" />
98
-				<element name="sliderCapTop" src="sliderCapTop.png" />
99
-				<element name="sliderRail" src="sliderRail.png" />
100
-				<element name="sliderThumb" src="sliderThumb.png" />
101
-			</elements>
102
-		</component>
103
-
104
-		<component name="sharing">
105
-			<elements>
106
-				<element name="embedIcon" src="embedIcon.png" />
107
-				<element name="embedScreen" src="embedScreen.png" />
108
-				<element name="shareIcon" src="shareIcon.png" />
109
-				<element name="shareScreen" src="shareScreen.png" />
110
-			</elements>
111
-		</component>
112
-
113
-	</components>
114
-
115
-</skin>
116 1
\ No newline at end of file
117 2
deleted file mode 100644
118 3
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/item.png and /dev/null differ
119 4
deleted file mode 100644
120 5
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png and /dev/null differ
121 6
deleted file mode 100644
122 7
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png and /dev/null differ
123 8
deleted file mode 100644
124 9
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png and /dev/null differ
125 10
deleted file mode 100644
126 11
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png and /dev/null differ
127 12
deleted file mode 100644
128 13
Binary files a/themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png and /dev/null differ
129 14
deleted file mode 100644
130 15
Binary files a/themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png and /dev/null differ
131 16
deleted file mode 100644
132 17
Binary files a/themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png and /dev/null differ
133 18
deleted file mode 100644
134 19
Binary files a/themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png and /dev/null differ
135 20
deleted file mode 100644
136 21
Binary files a/themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png and /dev/null differ
137 22
deleted file mode 100644
138 23
Binary files a/themes/classic/source/assets/jwplayer/player.swf and /dev/null differ
139 24
deleted file mode 100644
... ...
@@ -1,28 +0,0 @@
1
-layout: nil
2
-<?xml version="1.0" encoding="utf-8"?>
3
-<feed xmlns="http://www.w3.org/2005/Atom">
4
-
5
-  <title>{{ site.blog_title }}</title>
6
-  <link href="{{ site.url }}/atom.xml" rel="self"/>
7
-  <link href="{{ site.url }}/"/>
8
-  <updated>{{ site.time | date_to_xmlschema }}</updated>
9
-  <id>{{ site.url }}/</id>
10
-  <author>
11
-    <name>{{ site.author }}</name>
12
-    {% if site.email %}
13
-      <email>{{ site.email }}</email>
14
-    {% endif %}
15
-  </author>
16
-
17
-  {% for post in site.posts %}
18
-  <entry>
19
-    <title>{{ post.title }}</title>
20
-    <link href="{{ site.url }}{{ post.url }}"/>
21
-    <updated>{{ post.date | date_to_xmlschema }}</updated>
22
-    <id>{{ site.url }}{{ post.id }}</id>
23
-    <content type="html">{{ post.content | full_urls: site.url | xml_escape }}</content>
24
-  </entry>
25
-  {% endfor %}
26
-</feed>
27 1
deleted file mode 100644
28 2
Binary files a/themes/classic/source/images/bird_32_gray.png and /dev/null differ
29 3
deleted file mode 100644
30 4
Binary files a/themes/classic/source/images/bird_32_gray_fail.png and /dev/null differ
31 5
deleted file mode 100644
32 6
Binary files a/themes/classic/source/images/code_bg.png and /dev/null differ
33 7
deleted file mode 100644
34 8
Binary files a/themes/classic/source/images/dotted-border.png and /dev/null differ
35 9
deleted file mode 100644
36 10
Binary files a/themes/classic/source/images/email.png and /dev/null differ
37 11
deleted file mode 100644
38 12
Binary files a/themes/classic/source/images/favicon.png and /dev/null differ
39 13
deleted file mode 100644
40 14
Binary files a/themes/classic/source/images/line-tile.png and /dev/null differ
41 15
deleted file mode 100644
42 16
Binary files a/themes/classic/source/images/noise.png and /dev/null differ
43 17
deleted file mode 100644
44 18
Binary files a/themes/classic/source/images/rss.png and /dev/null differ
45 19
deleted file mode 100644
46 20
Binary files a/themes/classic/source/images/search.png and /dev/null differ
47 21
deleted file mode 100644
... ...
@@ -1,31 +0,0 @@
1
-layout: default
2
-blog_index: true
3
-{% assign index = true %}
4
-{% for post in paginator.posts %}
5
-{% assign content = post.content %}
6
-  <article>
7
-    {% include article.html %}
8
-  </article>
9
-{% endfor %}
10
-<nav role="pagination">
11
-  {% if paginator.next_page %}
12
-    <a href="/page{{paginator.next_page}}/">&larr; Older</a>
13
-  {% endif %}
14
-  <a href="/archive.html">Blog Archive</a>
15
-  {% if paginator.previous_page %}
16
-    <a href="/page{{paginator.previous_page}}/">Newer &rarr;</a>
17
-  {% endif %}
18
-</nav>
19
-{% if site.disqus_short_name %}
20
-<script type="text/javascript">
21
-    var disqus_shortname = '{{ site.disqus_short_name }}';
22
-    (function () {
23
-      var s = document.createElement('script'); s.async = true;
24
-      s.type = 'text/javascript';
25
-      s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
26
-      (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
27
-    }());
28
-</script>
29
-{% endif %}
30 1
deleted file mode 100644
... ...
@@ -1,2 +0,0 @@
1
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('!5(O){5 2j(o,42){F(u k Y 42){k!=\'28\'&&k!=\'4T\'&&(o[k]=42[k])}7 o}5 2P(s,r){u R;B(X.4E&&N s==\'1p\'||s.4R||s.E&&\'3g\'Y s||s==1O){R=X.4E(s,r);R.H=s}1h{R=5F(s.E)?s:[s]}7 2j(R,2P)}5 X(s,r){7 2P(s,r)}2j(X,{4T:\'0.2.0\',X:5(o,4Z){2j(4Z?2P:X,o)}});2j(2P,{6E:5(D,1Z){F(u i=0,l=8.E;i<l;++i){i Y 8&&D.11(1Z||8[i],8[i],i,8)}7 8}});u 3d=O.$;X.28=5(){O.$=3d;7 8};(N 1v!==\'1w\')&&1v.1y&&(1v.1y=X);O[\'X\']=O[\'$\']=X}(8);!5(O){u 2a=1,3q={},2t={},5y=/6x|6r/,2O=/[^\\.]*(?=\\..*)\\.|.*/,2C=/\\..*/,3z=\'2X\',2h=\'2h\',59=\'6a\',3A=\'3A\',I=O.1f||{},V=I.2H||{},2f=V[3z],39=2f?3z:2h,5g=5(57,5t){u G=5t.18;1d(G!=1e){B(G==57){7 19}G=G.18}},3F=5(22,L){7(22.2a=L||22.2a||2a++)},2l=5(A){u L=3F(A);7(3q[L]=3q[L]||{})},4F=2f?5(A,C,D,S){A[S?3z:59](C,D,1i)}:5(A,C,D,S,1J){1J&&S&&(A[\'3b\'+1J]=A[\'3b\'+1J]||0);A[S?2h:3A](\'3L\'+C,D)},5f=5(A,D,17){7 5(1m){1m=2w(1m||((8.6F||8.1f||8).7h||O).1m);7 D.1V(A,[1m].31(17))}},4z=5(A,D,C,1z,17){7 5(1m){B(1z?1z.11(8,1m):2f?19:1m&&1m.78==\'3b\'+C||!1m){D.1V(A,[1m].31(17))}}},4h=5(A,2x,D,17){u C=2x.1g(2C,\'\'),J=2l(A),1L=J[C]||(J[C]={}),L=3F(D,2x.1g(2O,\'\'));B(1L[L]){7 A}u 1J=36[C];B(1J){D=1J.1z?4z(A,D,C,1J.1z):D;C=1J.2S||C}u 15=34[C];D=15?5f(A,D,17):4z(A,D,C,1i,17);15=2f||15;B(C==\'2J\'){u 5b=D;D=5(){3t(A,C,D)&&5b()}}A[39]&&4F(A,15?C:\'54\',D,19,!15&&C);1L[L]=D;D.2a=L;7 C==\'2J\'?A:(2t[3F(A)]=A)},3t=5(A,2x,3C){u L,2q,3G,i,J=2l(A),C=2x.1g(2C,\'\');B(!J||!J[C]){7 A}2q=2x.1g(2O,\'\');3G=2q?2q.2b(\'.\'):[3C.2a];F(i=3G.E;i--;){L=3G[i];3C=J[C][L];2k J[C][L];B(A[39]){C=36[C]?36[C].2S:C;u 15=2f||34[C];4F(A,15?C:\'54\',3C,1i,!15&&C)}}7 A},4V=5(H,D,$){7 5(e){u 1R=N H==\'1p\'?$(H,8):H;F(u M=e.M;M&&M!=8;M=M.18){F(u i=1R.E;i--;){B(1R[i]==M){7 D.1V(M,3p)}}}}},S=5(A,J,D,5a,$){B(N J==\'68\'&&!D){F(u C Y J){J.1T(C)&&S(A,C,J[C])}}1h{u 3v=N D==\'1p\',2d=(3v?D:J).2b(\' \');D=3v?4V(J,5a,$):D;F(u i=2d.E;i--;){4h(A,2d[i],D,5l.2g.3u.11(3p,3v?4:3))}}7 A},1o=5(A,1u,D){u k,C,J,2s=N(1u)==\'1p\',2q=2s&&1u.1g(2O,\'\'),2u=3t,2G=2l(A);B(2s&&/\\s/.12(1u)){1u=1u.2b(\' \');u i=1u.E-1;1d(1o(A,1u[i])&&i--){}7 A}J=2s?1u.1g(2C,\'\'):1u;B(!2G||(2s&&!2G[J])){7 A}B(N D==\'5\'){2u(A,J,D)}1h B(2q){2u(A,1u)}1h{2u=J?2u:1o;C=2s&&J;J=J?(D||2G[J]||J):2G;F(k Y J){J.1T(k)&&2u(A,C||k,J[k])}}7 A},1P=5(A,C,17){u 38,k,i,2d=C.2b(\' \');F(i=2d.E;i--;){C=2d[i].1g(2C,\'\');u 15=34[C],24=2d[i].1g(2O,\'\'),1L=2l(A)[C];B(24){24=24.2b(\'.\');F(k=24.E;k--;){1L[24[k]]&&1L[24[k]].1V(A,17)}}1h B(!17&&A[39]){4S(15,C,A)}1h{F(k Y 1L){1L.1T(k)&&1L[k].1V(A,17)}}}7 A},4S=2f?5(15,C,A){38=1f.76(15?"6X":"6W");38[15?\'6Y\':\'6Z\'](C,19,19,O,1);A.70(38)}:5(15,C,A){15?A.6U(\'3L\'+C,1f.6P()):A[\'3b\'+C]++},2F=5(A,32,C){u J=2l(32),22,k;22=C?J[C]:J;F(k Y 22){22.1T(k)&&(C?S:2F)(A,C||32,C?22[k]:k)}7 A},2w=5(e){u T={};B(!e){7 T}u C=e.C,M=e.M||e.7d;T.2U=2w.2U(e);T.2R=2w.2R(e);T.M=M&&M.1j==3?M.18:M;B(~C.4A(\'7c\')){T.5u=e.5s||e.5u}1h B((/3R|7e|7f/i).12(C)){T.7g=e.5s==3||e.7a==2;T.75={x:0,y:0};B(e.5r||e.5x){T.37=e.5r;T.35=e.5x}1h B(e.37||e.35){T.37=e.37+1f.3M.2y+1f.2H.2y;T.35=e.35+1f.3M.2z+1f.2H.2z}5y.12(C)&&(T.4v=e.4v||e[(C==\'3i\'?\'32\':\'6u\')+\'6t\'])}F(u k Y e){B(!(k Y T)){T[k]=e[k]}}7 T};2w.2U=5(e){7 5(){B(e.2U){e.2U()}1h{e.6w=1i}}};2w.2R=5(e){7 5(){B(e.2R){e.2R()}1h{e.6n=19}}};u 34={3R:1,5z:1,5D:1,5p:1,6M:1,3O:1,5i:1,3i:1,4f:1,6z:1,6K:1,6L:1,5B:1,5w:1,5v:1,6G:1,6A:1,6C:1,6D:1,6I:1,6B:1,6H:1,6p:1,5C:1,5n:1,5o:1,6o:1,2r:1,4N:1,5q:1,2J:1,6m:1,4I:1,6q:1,6b:1,72:1,5A:1,7o:1,2N:1};5 4x(1m){u 1F=1m.4v;B(!1F){7 1F==1e}7(1F!=8&&1F.7X!=\'7i\'&&!/1f/.12(8.80())&&!5g(8,1F))}u 36={3V:{2S:\'3i\',1z:4x},48:{2S:\'4f\',1z:4x},3O:{2S:/7W/.12(4O.55)?\'5i\':\'3O\'}};u 1Y={S:S,1o:1o,2F:2F,1P:1P};u 1X=5(6){u L=1o(6).2a;B(L){2k 2t[L];2k 3q[L]}};B(O[2h]){S(O,\'2J\',5(){F(u k Y 2t){2t.1T(k)&&1X(2t[k])}O.5j&&5j()})}u 5k=O.1Y;1Y.28=5(){O.1Y=5k;7 8};(N 1v!==\'1w\'&&1v.1y)?(1v.1y=1Y):(O[\'1Y\']=1Y)}(8);!5($){u b=1Y.28(),2v=5(1B,C,83){u 5m=C?[C]:[];7 5(){F(u 17,i=0,l=8.E;i<l;i++){17=[8[i]].31(5m,5l.2g.3u.11(3p,0));17.E==4&&17.13($);!3p.E&&1B==\'S\'&&C&&(1B=\'1P\');b[1B].1V(8,17)}7 8}};u S=2v(\'S\'),1o=2v(\'1o\'),1P=2v(\'1P\');u 3X={3L:S,4h:S,8e:S,8f:S,8g:S,8b:1o,8c:1o,3t:1o,85:1o,84:1P,87:1P,8a:2v(\'2F\'),89:5(5e,5d){F(u i=0,l=8.E;i<l;i++){b.S.11(8,8[i],\'3V\',5e);b.S.11(8,8[i],\'48\',5d)}7 8}};u 46=[\'5n\',\'5o\',\'3R\',\'5z\',\'5A\',\'5C\',\'7v\',\'7q\',\'5B\',\'5w\',\'5v\',\'5q\',\'5p\',\'3V\',\'48\',\'4f\',\'3i\',\'5D\',\'4I\',\'2N\',\'2r\',\'4N\',\'2J\'];F(u i=46.E;i--;){u 3Z=46[i];3X[3Z]=2v(\'S\',3Z)}$.X(3X,19)}(X);!5(O){u I=O.1f,W=I.2H,2n=1e,7I=\'3o\',5J=/^52|1l|53$/,6e=/2r|3s|7H|56|51|4Y|7J/i,5Z={2r:\'7K\',56:\'51\',4Y:\'7G\'},5S=/^52|53$/,2M=/7B/i.12(4O.55),2Q=[],3K=0,5H=/^-?[\\d\\.]+$/,2V=\'2V\',2Y=\'2Y\',1S=\'1S\',4X=/(^\\s*|\\s*$)/g,5I={7D:1,4b:1,7C:1,1Q:1};5 2B(c){7 1a 1E("(^|\\\\s+)"+c+"(\\\\s+|$)")}5 K(Q,D,1Z){F(u i=0,l=Q.E;i<l;i++){D.11(1Z||Q[i],Q[i],i,Q)}7 Q}u 2c=7z.2g.2c?5(s){7 s.2c()}:5(s){7 s.1g(4X,\'\')};5 2K(s){7 s.1g(/-(.)/g,5(m,5E){7 5E.7A()})}5 4k(G){7 G&&G.4R&&G.1j==1}5 6c(Q,D,1Z){F(u i=0,j=Q.E;i<j;++i){B(D.11(1Z,Q[i],i,Q)){7 19}}7 1i}u 5Q=I.40&&I.40.4P?5(6,14){u 1l=1e;B(14==\'3n\'){14=\'5G\'}u 44=I.40.4P(6,\'\');44&&(1l=44[2K(14)]);7 6.1t[14]||1l}:(2M&&W.49)?5(6,14){14=2K(14);14=14==\'3n\'?\'5L\':14;B(14==\'1Q\'){u P=4c;4H{P=6.4U[\'7p.7w.88\'].1Q}3S(82){4H{P=6.4U(\'5M\').1Q}3S(7T){}}7 P/4c}u 1l=6.49?6.49[14]:1e;7 6.1t[14]||1l}:5(6,14){7 6.1t[2K(14)]};5 2T(M,1r,D){u i=0,21=1r||8,r=[];K(2L(2n?2n(M):M),5(t){K(21,5(6){u n=6.66(19);D(t,n);r[i]=n;i++})},8);K(r,5(e,i){21[i]=e});21.E=i;7 21}5 5K(6,x,y){u $6=U(6),1t=$6.1M(\'6k\'),2W=$6.2W(),3l=\'7Q\',43=1t==3l,2e=[3a($6.1M(\'1H\'),10),3a($6.1M(\'1G\'),10)];B(1t==\'7Z\'){$6.1M(\'6k\',3l);1t=3l}69(2e[0])&&(2e[0]=43?0:6.3I);69(2e[1])&&(2e[1]=43?0:6.3J);x!==1e&&(6.1t.1H=x-2W.1H+2e[0]+\'2V\');y!==1e&&(6.1t.1G=y-2W.1G+2e[1]+\'2V\')}5 3f(1k){8.E=0;8.7m=1k;B(1k){1k=N 1k!==\'1p\'&&!1k.1j&&N 1k.E!==\'1w\'?1k:[1k];8.E=1k.E;F(u i=0;i<1k.E;i++){8[i]=1k[i]}}}3f.2g={K:5(D,1Z){7 K(8,D,1Z)},3s:5(D,41){u m=[],n,i;F(i=0;i<8.E;i++){n=D.11(8,8[i]);41?(41(n)&&m.13(n)):m.13(n)}7 m},3c:5(){7 U(8[0])},5N:5(){7 U(8[8.E-1])},W:5(h,2I){u 1B=2I?W.6h==1e?\'7L\':\'6h\':\'4j\',m;5 45(6,1n){1d(6.1C){6.3r(6.1C)}K(2L(h,1n),5(G){6.2m(G)})}7 N h!==\'1w\'?8.K(5(6){(m=6.3T.1c(6e))?45(6,m[0]):(6[1B]=h)}):8[0]?8[0][1B]:\'\'},2I:5(2I){7 8.W(2I,1)},7r:5(c){7 8.K(5(6){8.3j(6,c)||(6.1q=2c(6.1q+\' \'+c))},8)},7E:5(c){7 8.K(5(6){8.3j(6,c)&&(6.1q=2c(6.1q.1g(2B(c),\' \')))},8)},3j:5(6,c){7 N c==\'1w\'?6c(8,5(i){7 2B(6).12(i.1q)}):2B(c).12(6.1q)},7F:5(c,1z){B(N 1z!==\'1w\'&&!1z){7 8}7 8.K(5(6){8.3j(6,c)?(6.1q=2c(6.1q.1g(2B(c),\' \'))):(6.1q=2c(6.1q+\' \'+c))},8)},7M:5(C){7 8.K(5(6){6.1t.5O=C||\'\'})},7y:5(1k){7 8.K(5(6){6.1t.5O=\'7x\'})},45:5(G){7 8.K(5(6){K(2L(G),5(i){6.2m(i)})})},7n:5(G){7 8.K(5(6){u 3c=6.1C;K(2L(G),5(i){6.1K(i,3c)})})},4q:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.2m(6)})},4m:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.1K(6,t.1C)})},4p:5(){7 8.1F(\'25\')},4u:5(){7 8.1F(\'67\')},1F:5(1B){7 8.3s(5(6){6=6[1B];1d(6&&6.1j!==1){6=6[1B]}7 6||0},5(6){7 6})},7l:5(G){7 8.K(5(6){K(U.20(G),5(i){6.18.1K(i,6)})})},7j:5(G){7 8.K(5(6){K(U.20(G),5(i){6.18.1K(i,6.25)})})},1K:5(M,1r){7 2T.11(8,M,1r,5(t,6){t.18.1K(6,t)})},4r:5(M,1r){7 2T.11(8,M,1r,5(t,6){u 4e=t.25;B(4e){t.18.1K(6,4e)}1h{t.18.2m(6)}})},1M:5(o,v){B(v===1w&&N o==\'1p\'){7 5Q(8[0],o)}u 1b=o;B(N o==\'1p\'){1b={};1b[o]=v}B(2M&&1b.1Q){1b.7k=\'5M(1Q=\'+(1b.1Q*4c)+\')\';1b.4b=o.4b||1;2k 1b.1Q}B(v=1b[\'3n\']){2M?(1b.5L=v):(1b.5G=v);2k 1b[\'3n\']}u D=5(6,p,v){F(u k Y 1b){B(1b.1T(k)){v=1b[k];(p=2K(k))&&5H.12(v)&&!(p Y 5I)&&(v+=2V);6.1t[p]=v}}};7 8.K(D)},2W:5(x,y){B(x||y){7 8.K(5(6){5K(6,x,y)})}u 6=8[0];u 1N=6.7u;u 1I=6.7t;u 1G=6.3J;u 1H=6.3I;1d(6=6.7O){1G=1G+6.3J;1H=1H+6.3I}7{1G:1G,1H:1H,1I:1I,1N:1N}},3y:5(k,v){u 6=8[0];7 N v==\'1w\'?5J.12(k)?5S.12(k)&&N 6[k]==\'1p\'?19:6[k]:6[1S](k):8.K(5(6){k==\'1l\'?(6.1l=v):6[2Y](k,v)})},P:5(s){7(N s==\'1p\')?8.3y(\'1l\',s):8[0].1l},7s:5(k){7 8.K(5(6){6.7N(k)})},26:5(k,v){u 6=8[0];B(N v===\'1w\'){6[1S](\'26-G-L\')||6[2Y](\'26-G-L\',++3K);u L=6[1S](\'26-G-L\');2Q[L]||(2Q[L]={});7 2Q[L][k]}1h{7 8.K(5(6){6[1S](\'26-G-L\')||6[2Y](\'26-G-L\',++3K);u L=6[1S](\'26-G-L\');u o={};o[k]=v;2Q[L]=o})}},1o:5(){7 8.K(5(6){6.18&&6.18.3r(6)})},8d:5(){7 8.K(5(6){1d(6.1C){6.3r(6.1C)}})},86:5(){7 8.3s(5(6){7 6.18.3r(6)})},2z:5(y){7 2N.11(8,1e,y,\'y\')},2y:5(x){7 2N.11(8,x,1e,\'x\')}};5 2L(G,1n){7 N G==\'1p\'?U.20(G,1n):4k(G)?[G]:G}5 2N(x,y,C){u 6=8[0];B(x==1e&&y==1e){7(3P(6)?5U():{x:6.2y,y:6.2z})[C]}B(3P(6)){1O.7U(x,y)}1h{x!=1e&&(6.2y=x);y!=1e&&(6.2z=y)}7 8}5 3P(A){7 A===1O||(/^(?:3M|W)$/i).12(A.3T)}5 5U(){7{x:1O.7S||W.2y,y:1O.7V||W.2z}}5 U(R,1r){7 1a 3f(R,1r)}U.4C=5(q){2n=q;2k U.4C};U.2j=5(o,M){F(u k Y o){o.1T(k)&&((M||3f.2g)[k]=o[k])}};U.20=5(G,1n){7 N G==\'1p\'?5(){u t=1n?5Z[1n.6f()]:1e;u 6=I.3e(t||\'4L\'),R=[];B(1n){u 5Y=G.1c(1a 1E("<"+t+">.+?<\\\\/"+t+">","g"));K(5Y,5(m){m=m.1g(/<(.+)>(.+?)<\\/\\1>/,\'$2\');u 4l=I.3e(t);4l.2m(I.7Y(m));6.2m(4l)})}1h{6.4j=G}u 4Q=6.4y;6=6.1C;R.13(6);1d(6=6.25){(6.1j==1)&&R.13(6)}7 R}():4k(G)?[G.66(19)]:[]};U.I=5(){u w=W.6s,h=W.6v,4s=8.63();7{1N:65.62(w,4s.1N),1I:65.62(h,4s.1I)}};U.1C=5(6){F(u c=6.4y,i=0,j=(c&&c.E)||0,e;i<j;i++){B(c[i].1j===1){e=c[j=i]}}7 e};U.63=5(){u h=21.77,w=21.6N;2M&&(h=W.74)&&(w=W.7b);7{1N:w,1I:h}};U.33=\'3k\'Y W?5(Z,A){7(Z.3k(A)&16)==16}:\'3m\'Y W?5(Z,A){7 Z!==A&&Z.3m(A)}:5(Z,A){1d(A=A.18){B(A===Z){7 19}}7 1i};u 3d=O.U;U.28=5(){O.U=3d;7 8};O[\'U\']=U}(8);!5($){u b=U;b.4C($);$.X(b);$.X(b(),19);$.X({20:5(G){7 $(b.20(G))}});$.2i=5(2i){7 $([1f.47(2i)])};5 4A(Q,P){F(u i=0;i<Q.E;i++){B(Q[i]===P){7 i}}7-1}5 1U(Q){u a=[],i,j;3h:F(i=0;i<Q.E;i++){F(j=0;j<a.E;j++){B(a[j]==Q[i]){3Y 3h}}a[a.E]=Q[i]}7 a}$.X({5R:5(H,4o){u 29=$(H),j,k,p,r=[];F(j=0,k=8.E;j<k;j++){p=8[j];1d(p=p.18){B(4A(29,p)!==-1){r.13(p);B(4o)5T}}}7 $(1U(r))},4o:5(H){7 8.5R(H,19)},3c:5(){7 $(8[0])},5N:5(){7 $(8[8.E-1])},4p:5(){7 $(b(8).4p())},4u:5(){7 $(b(8).4u())},4q:5(t){7 b(8.H).4q(t,8)},4m:5(t){7 b(8.H).4m(t,8)},4r:5(t){7 b(8.H).4r(t,8)},1K:5(t){7 b(8.H).1K(t,8)},6V:5(){u i,l,p,r=[];F(i=0,l=8.E;i<l;i++){p=8[i];1d(p=p.67){p.1j==1&&r.13(p)}p=8[i];1d(p=p.25){p.1j==1&&r.13(p)}}7 $(r)},71:5(){u 6,r=[];F(i=0,l=8.E;i<l;i++){B(!(6=b.1C(8[i]))){3Y}r.13(6);1d(6=6.25){6.1j==1&&r.13(6)}}7 $(1U(r))},1I:5(v){7 v?8.1M(\'1I\',v):3a(8.1M(\'1I\'),10)},1N:5(v){7 v?8.1M(\'1N\',v):3a(8.1M(\'1N\'),10)}},19)}(X||$);!5(){u 1y={},1v={1y:1y};!5(I){u 2D=0,2E=[],3E,f=1i,3D=I.3e(\'a\'),4w=\'6b\',2X=\'2X\',3B=\'3B\';/^6S|c/.12(I.6d)&&(2D=1);5 4D(){2D=1;F(u i=0,l=2E.E;i<l;i++){2E[i]()}}I[2X]&&I[2X](4w,5 D(){I.6a(4w,D,f);4D()},f);3D.3N&&I.2h(3B,(3E=5 3E(){B(/^c/.12(I.6d)){I.3A(3B,3E);4D()}}));u 2p=3D.3N?5(D){21!=1G?!2D?2E.13(D):D():!5(){4H{3D.3N(\'1H\')}3S(e){7 79(5(){2p(D)},50)}D()}()}:5(D){2D?D():2E.13(D)};(N 1v!==\'1w\')&&1v.1y?(1v.1y={2p:2p}):(1O.2p=2p)}(1f);$.X(1v.1y)}.11($);!5(O,I){u c,i,j,k,l,m,o,p,r,v,6,G,3W,4g,3x,3g,1W,4B,2i=/#([\\w\\-]+)/,6j=/\\.[\\w\\-]+/g,4a=/^#([\\w\\-]+$)/,4M=/^\\.([\\w\\-]+)$/,5P=/^([\\w\\-]+)$/,5c=/^([\\w]+)?\\.([\\w\\-]+)$/,W=I.2H,61=/\\s(?![\\s\\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^\'"]*\\])/,5X=/([.*+?\\^=!:${}()|\\[\\]\\/\\\\])/g,4W=/^([a-6J-9]+)?(?:([\\.\\#]+[\\w\\-\\.#]+)?)/,3y=/\\[([\\w\\-]+)(?:([\\|\\^\\$\\*\\~]?\\=)[\'"]?([ \\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^]+)["\']?)?\\]/,6g=1a 1E(4W.6l+\'(\'+3y.6l+\')?\');5 1R(Q){r=[];F(i=0,3W=Q.E;i<3W;i++){r[i]=Q[i]}7 r}u 2o=5(){8.c={}};2o.2g={g:5(k){7 8.c[k]||1w},s:5(k,v){8.c[k]=v;7 v}};u 30=1a 2o(),4i=1a 2o(),1x=1a 2o(),3Q=1a 2o();5 q(2n){7 2n.1c(6g)}5 3H(6y,1n,2Z,4t,4n,60,1l){u m,c,k;B(1n&&8.3T.6f()!==1n){7 1i}B(2Z&&(m=2Z.1c(2i))&&m[1]!==8.2i){7 1i}B(2Z&&(3x=2Z.1c(6j))){F(i=3x.E;i--;){c=3x[i].3u(1);B(!(30.g(c)||30.s(c,1a 1E(\'(^|\\\\s+)\'+c+\'(\\\\s+|$)\'))).12(8.1q)){7 1i}}}B(4t&&!1l){o=8.6T;F(k Y o){B(6O.2g.1T.11(o,k)&&(o[k].73||k)==4n){7 8}}}B(4t&&!5W(60,8.1S(4n)||\'\',1l)){7 1i}7 8}5 64(1s){u r=[],4B=1s.81(),4G=q(4B),1n=4G[1]||\'*\',i,l,R,V=1s.E&&(m=1s[0].1c(4a))?I.47(m[1]):I;B(!V){7 r}R=V.3o(1n);F(i=0,l=R.E;i<l;i++){6=R[i];B(3g=3H.1V(6,4G)){r.13(3g)}}7 r}5 1X(s){7 4i.g(s)||4i.s(s,s.1g(5X,\'\\\\$1\'))}5 5W(5V,23,P){7P(5V){2A\'=\':7 23==P;2A\'^=\':7 23.1c(1x.g(\'^=\'+P)||1x.s(\'^=\'+P,1a 1E(\'^\'+1X(P))));2A\'$=\':7 23.1c(1x.g(\'$=\'+P)||1x.s(\'$=\'+P,1a 1E(1X(P)+\'$\')));2A\'*=\':7 23.1c(1x.g(P)||1x.s(P,1a 1E(1X(P))));2A\'~=\':7 23.1c(1x.g(\'~=\'+P)||1x.s(\'~=\'+P,1a 1E(\'(?:^|\\\\s+)\'+1X(P)+\'(?:\\\\s+|$)\')));2A\'|=\':7 23.1c(1x.g(\'|=\'+P)||1x.s(\'|=\'+P,1a 1E(\'^\'+1X(P)+\'(-|$)\')))}7 1i}5 5h(H){u r=[],27=[],i,l,1s=3Q.g(H)||3Q.s(H,H.2b(61));1s=1s.3u(0);B(!1s.E){7 r}r=64(1s);B(!1s.E){7 r}F(j=0,l=r.E,k=0;j<l;j++){G=r[j];p=G;F(i=1s.E;i--;){z:1d(p!==W&&(p=p.18)){B(4g=3H.1V(p,q(1s[i]))){5T z}}}4g&&(27[k++]=G)}7 27}5 6i(H,1A,D){u V=(N 1A==\'1p\')?D(1A)[0]:(1A||I);B(H===1O||4d(H)){7!1A||(H!==1O&&4d(V)&&33(H,V))?[H]:[]}B(H&&N H===\'68\'&&5F(H.E)){7 1R(H)}B(m=H.1c(4a)){7(6=I.47(m[1]))?[6]:[]}B(m=H.1c(5P)){7 1R(V.3o(m[1]))}7 1i}5 4d(6){7(6&&6.1j&&(6.1j==1||6.1j==9))}5 1U(Q){u a=[],i,j;3h:F(i=0;i<Q.E;i++){F(j=0;j<a.E;j++){B(a[j]==Q[i]){3Y 3h}}a[a.E]=Q[i]}7 a}5 1D(H,1A){u V=(N 1A==\'1p\')?1D(1A)[0]:(1A||I);B(!V||!H){7[]}B(m=6i(H,1A,1D)){7 m}7 2r(H,V)}u 33=\'3k\'Y W?5(A,Z){7(Z.3k(A)&16)==16}:\'3m\'Y W?5(A,Z){Z=Z==I||Z==1O?W:Z;7 Z!==A&&Z.3m(A)}:5(A,Z){1d(A=A.18){B(A===Z){7 1}}7 0},2r=(I.7R&&I.4K)?5(H,V){B(I.4J&&(m=H.1c(4M))){7 1R((V).4J(m[1]))}7 1R((V).4K(H))}:5(H,V){u T=[],29,3w=[],i;B(m=H.1c(5c)){1W=V.3o(m[1]||\'*\');r=30.g(m[2])||30.s(m[2],1a 1E(\'(^|\\\\s+)\'+m[2]+\'(\\\\s+|$)\'));F(i=0,l=1W.E,j=0;i<l;i++){r.12(1W[i].1q)&&(T[j++]=1W[i])}7 T}F(i=0,1W=H.2b(\',\'),l=1W.E;i<l;i++){3w[i]=5h(1W[i])}F(i=0,l=3w.E;i<l&&(29=3w[i]);i++){u 27=29;B(V!==I){27=[];F(j=0,m=29.E;j<m&&(A=29[j]);j++){33(A,V)&&27.13(A)}}T=T.31(27)}7 1U(T)};1D.1U=1U;u 58=O.1D;1D.28=5(){O.1D=58;7 8};O[\'1D\']=1D}(8,1f);!5(I){u q=1D.28();5 20(G,V){u 6=(V||I).3e(\'4L\'),R=[];6.4j=G;u 4Q=6.4y;6=6.1C;R.13(6);1d(6=6.25){(6.1j==1)&&R.13(6)}7 R};$.4E=5(s,r){7/^\\s*</.12(s)?20(s,r):q(s,r)};$.X({6Q:5(s){u r=[],i,l,j,k,R;F(i=0,l=8.E;i<l;i++){R=q(s,8[i]);F(j=0,k=R.E;j<k;j++){r.13(R[j])}}7 $(q.1U(r))},6R:5(s){u 3U=$(s);F(u i=8.E,j=0,l=8.E+3U.E;i<l;i++,j++){8[i]=3U[j]}7 8}},19)}(1f);',62,513,'|||||function|el|return|this||||||||||||||||||||||var||||||element|if|type|fn|length|for|node|selector|doc|events|each|uid|target|typeof|context|val|ar|els|add|result|bonzo|root|html|ender|in|container||call|test|push|property|isNative||args|parentNode|true|new|iter|match|while|null|document|replace|else|false|nodeType|elements|value|event|tag|remove|string|className|host|tokens|style|orgEvents|module|undefined|attrCache|exports|condition|_root|method|firstChild|qwery|RegExp|related|top|left|height|custom|insertBefore|handlers|css|width|window|fire|opacity|array|getAttribute|hasOwnProperty|uniq|apply|items|clean|bean|scope|create|self|obj|actual|isNamespace|nextSibling|data|ret|noConflict|collection|__uid|split|trim|types|delta|W3C_MODEL|prototype|attachEvent|id|aug|delete|retrieveEvents|appendChild|query|cache|domReady|names|select|isString|collected|rm|integrate|fixEvent|orgType|scrollLeft|scrollTop|case|classReg|stripName|loaded|fns|clone|attached|documentElement|text|unload|camelize|normalize|ie|scroll|namespace|boosh|uidList|stopPropagation|base|insert|preventDefault|px|offset|addEventListener|setAttribute|idsAndClasses|classCache|concat|from|isAncestor|nativeEvents|clientY|customEvents|clientX|evt|eventSupport|parseInt|_on|first|old|createElement|Bonzo|item|label|mouseover|hasClass|compareDocumentPosition|rel|contains|float|getElementsByTagName|arguments|registry|removeChild|map|removeListener|slice|isDel|collections|classes|attr|addEvent|detachEvent|onreadystatechange|handler|testEl|ol|retrieveUid|uids|interpret|offsetLeft|offsetTop|uuids|on|body|doScroll|mousewheel|isBody|tokenCache|click|catch|tagName|plus|mouseenter|len|methods|continue|shortcut|defaultView|reject|o2|isRel|computed|append|shortcuts|getElementById|mouseleave|currentStyle|idOnly|zoom|100|isNode|sibling|mouseout|found|addListener|cleanCache|innerHTML|is|bah|prependTo|attribute|closest|next|appendTo|insertAfter|vp|wholeAttribute|previous|relatedTarget|domContentLoaded|check|childNodes|customHandler|indexOf|token|setQueryEngine|flush|_select|listener|intr|try|resize|getElementsByClassName|querySelectorAll|div|classOnly|submit|navigator|getComputedStyle|nodes|nodeName|fireListener|_VERSION|filters|del|simple|trimReplace|tr|chain||tbody|checked|selected|propertychange|userAgent|table|parent|oldQwery|removeEvent|delfn|org|tagAndOrClass|leave|enter|nativeHandler|isDescendant|_qwery|DOMMouseScroll|CollectGarbage|oldBean|Array|_args|blur|change|mousedown|load|pageX|which|child|keyCode|keyup|keypress|pageY|overOut|dblclick|error|keydown|focus|mouseup|m1|isFinite|cssFloat|digit|unitless|specialAttributes|xy|styleFloat|alpha|last|display|tagOnly|getStyle|parents|stateAttributes|break|getWindowScroll|qualify|checkAttr|specialChars|bitches|tagMap|qualifier|tokenizr|max|viewport|loopAll|Math|cloneNode|previousSibling|object|isNaN|removeEventListener|DOMContentLoaded|some|readyState|specialTags|toLowerCase|chunker|textContent|boilerPlate|clas|position|source|beforeunload|cancelBubble|reset|gestureend|move|out|scrollWidth|Element|to|scrollHeight|returnValue|over|whole|mousemove|touchstart|gesturestart|touchmove|touchend|forEach|ownerDocument|orientationchange|gesturechange|touchcancel|z0|selectstart|selectend|contextmenu|innerWidth|Object|createEventObject|find|and|loade|attributes|fireEvent|siblings|UIEvents|HTMLEvents|initEvent|initUIEvent|dispatchEvent|children|readystatechange|name|clientHeight|pos|createEvent|innerHeight|propertyName|setTimeout|button|clientWidth|key|srcElement|mouse|menu|rightClick|parentWindow|xul|after|filter|before|original|prepend|abort|DXImageTransform|focusout|addClass|removeAttr|offsetHeight|offsetWidth|focusin|Microsoft|none|hide|String|toUpperCase|msie|zIndex|lineHeight|removeClass|toggleClass|td|fieldset|byTag|colgroup|option|innerText|show|removeAttribute|offsetParent|switch|relative|querySelector|pageXOffset|e2|scrollTo|pageYOffset|Firefox|prefix|createDocumentFragment|static|toString|pop|e1|method2|emit|undelegate|detach|trigger|Alpha|hover|cloneEvents|unbind|unlisten|empty|bind|listen|delegate'.split('|'),0,{}))
2
-
3 1
deleted file mode 100644
... ...
@@ -1,1497 +0,0 @@
1
-/*!
2
-  * Ender: open module JavaScript framework
3
-  * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
4
-  * https://ender.no.de
5
-  * License MIT
6
-  * Build: ender -b jeesh
7
-  */
8
-!function (context) {
9
-
10
-  function aug(o, o2) {
11
-    for (var k in o2) {
12
-      k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
13
-    }
14
-    return o;
15
-  }
16
-
17
-  function boosh(s, r) {
18
-    var els;
19
-    if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) { //string || node || nodelist || window
20
-      els = ender._select(s, r);
21
-      els.selector = s;
22
-    } else {
23
-      els = isFinite(s.length) ? s : [s];
24
-    }
25
-    return aug(els, boosh);
26
-  }
27
-
28
-  function ender(s, r) {
29
-    return boosh(s, r);
30
-  }
31
-
32
-  aug(ender, {
33
-    _VERSION: '0.2.0',
34
-    ender: function (o, chain) {
35
-      aug(chain ? boosh : ender, o);
36
-    }
37
-  });
38
-
39
-  aug(boosh, {
40
-    forEach: function (fn, scope) {
41
-      // opt out of native forEach so we can intentionally call our own scope
42
-      // defaulting to the current item
43
-      for (var i = 0, l = this.length; i < l; ++i) {
44
-        i in this && fn.call(scope || this[i], this[i], i, this);
45
-      }
46
-      // return self for chaining
47
-      return this;
48
-    }
49
-  });
50
-
51
-  var old = context.$;
52
-  ender.noConflict = function () {
53
-    context.$ = old;
54
-    return this;
55
-  };
56
-
57
-  (typeof module !== 'undefined') && module.exports && (module.exports = ender);
58
-  // use subscript notation as extern for Closure compilation
59
-  context['ender'] = context['$'] = ender;
60
-
61
-}(this);
62
-/*!
63
-  * bean.js - copyright Jacob Thornton 2011
64
-  * https://github.com/fat/bean
65
-  * MIT License
66
-  * special thanks to:
67
-  * dean edwards: http://dean.edwards.name/
68
-  * dperini: https://github.com/dperini/nwevents
69
-  * the entire mootools team: github.com/mootools/mootools-core
70
-  */
71
-!function (context) {
72
-  var __uid = 1, registry = {}, collected = {},
73
-      overOut = /over|out/,
74
-      namespace = /[^\.]*(?=\..*)\.|.*/,
75
-      stripName = /\..*/,
76
-      addEvent = 'addEventListener',
77
-      attachEvent = 'attachEvent',
78
-      removeEvent = 'removeEventListener',
79
-      detachEvent = 'detachEvent',
80
-      doc = context.document || {},
81
-      root = doc.documentElement || {},
82
-      W3C_MODEL = root[addEvent],
83
-      eventSupport = W3C_MODEL ? addEvent : attachEvent,
84
-
85
-  isDescendant = function (parent, child) {
86
-    var node = child.parentNode;
87
-    while (node != null) {
88
-      if (node == parent) {
89
-        return true;
90
-      }
91
-      node = node.parentNode;
92
-    }
93
-  },
94
-
95
-  retrieveUid = function (obj, uid) {
96
-    return (obj.__uid = uid || obj.__uid || __uid++);
97
-  },
98
-
99
-  retrieveEvents = function (element) {
100
-    var uid = retrieveUid(element);
101
-    return (registry[uid] = registry[uid] || {});
102
-  },
103
-
104
-  listener = W3C_MODEL ? function (element, type, fn, add) {
105
-    element[add ? addEvent : removeEvent](type, fn, false);
106
-  } : function (element, type, fn, add, custom) {
107
-    custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
108
-    element[add ? attachEvent : detachEvent]('on' + type, fn);
109
-  },
110
-
111
-  nativeHandler = function (element, fn, args) {
112
-    return function (event) {
113
-      event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
114
-      return fn.apply(element, [event].concat(args));
115
-    };
116
-  },
117
-
118
-  customHandler = function (element, fn, type, condition, args) {
119
-    return function (event) {
120
-      if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
121
-        fn.apply(element, [event].concat(args));
122
-      }
123
-    };
124
-  },
125
-
126
-  addListener = function (element, orgType, fn, args) {
127
-    var type = orgType.replace(stripName, ''),
128
-        events = retrieveEvents(element),
129
-        handlers = events[type] || (events[type] = {}),
130
-        uid = retrieveUid(fn, orgType.replace(namespace, ''));
131
-    if (handlers[uid]) {
132
-      return element;
133
-    }
134
-    var custom = customEvents[type];
135
-    if (custom) {
136
-      fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
137
-      type = custom.base || type;
138
-    }
139
-    var isNative = nativeEvents[type];
140
-    fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
141
-    isNative = W3C_MODEL || isNative;
142
-    if (type == 'unload') {
143
-      var org = fn;
144
-      fn = function () {
145
-        removeListener(element, type, fn) && org();
146
-      };
147
-    }
148
-    element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
149
-    handlers[uid] = fn;
150
-    fn.__uid = uid;
151
-    return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
152
-  },
153
-
154
-  removeListener = function (element, orgType, handler) {
155
-    var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
156
-    if (!events || !events[type]) {
157
-      return element;
158
-    }
159
-    names = orgType.replace(namespace, '');
160
-    uids = names ? names.split('.') : [handler.__uid];
161
-    for (i = uids.length; i--;) {
162
-      uid = uids[i];
163
-      handler = events[type][uid];
164
-      delete events[type][uid];
165
-      if (element[eventSupport]) {
166
-        type = customEvents[type] ? customEvents[type].base : type;
167
-        var isNative = W3C_MODEL || nativeEvents[type];
168
-        listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
169
-      }
170
-    }
171
-    return element;
172
-  },
173
-
174
-  del = function (selector, fn, $) {
175
-    return function (e) {
176
-      var array = typeof selector == 'string' ? $(selector, this) : selector;
177
-      for (var target = e.target; target && target != this; target = target.parentNode) {
178
-        for (var i = array.length; i--;) {
179
-          if (array[i] == target) {
180
-            return fn.apply(target, arguments);
181
-          }
182
-        }
183
-      }
184
-    };
185
-  },
186
-
187
-  add = function (element, events, fn, delfn, $) {
188
-    if (typeof events == 'object' && !fn) {
189
-      for (var type in events) {
190
-        events.hasOwnProperty(type) && add(element, type, events[type]);
191
-      }
192
-    } else {
193
-      var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
194
-      fn = isDel ? del(events, delfn, $) : fn;
195
-      for (var i = types.length; i--;) {
196
-        addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
197
-      }
198
-    }
199
-    return element;
200
-  },
201
-
202
-  remove = function (element, orgEvents, fn) {
203
-    var k, type, events,
204
-        isString = typeof(orgEvents) == 'string',
205
-        names = isString && orgEvents.replace(namespace, ''),
206
-        rm = removeListener,
207
-        attached = retrieveEvents(element);
208
-    if (isString && /\s/.test(orgEvents)) {
209
-      orgEvents = orgEvents.split(' ');
210
-      var i = orgEvents.length - 1;
211
-      while (remove(element, orgEvents[i]) && i--) {}
212
-      return element;
213
-    }
214
-    events = isString ? orgEvents.replace(stripName, '') : orgEvents;
215
-    if (!attached || (isString && !attached[events])) {
216
-      return element;
217
-    }
218
-    if (typeof fn == 'function') {
219
-      rm(element, events, fn);
220
-    } else if (names) {
221
-      rm(element, orgEvents);
222
-    } else {
223
-      rm = events ? rm : remove;
224
-      type = isString && events;
225
-      events = events ? (fn || attached[events] || events) : attached;
226
-      for (k in events) {
227
-        events.hasOwnProperty(k) && rm(element, type || k, events[k]);
228
-      }
229
-    }
230
-    return element;
231
-  },
232
-
233
-  fire = function (element, type, args) {
234
-    var evt, k, i, types = type.split(' ');
235
-    for (i = types.length; i--;) {
236
-      type = types[i].replace(stripName, '');
237
-      var isNative = nativeEvents[type],
238
-          isNamespace = types[i].replace(namespace, ''),
239
-          handlers = retrieveEvents(element)[type];
240
-      if (isNamespace) {
241
-        isNamespace = isNamespace.split('.');
242
-        for (k = isNamespace.length; k--;) {
243
-          handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
244
-        }
245
-      } else if (!args && element[eventSupport]) {
246
-        fireListener(isNative, type, element);
247
-      } else {
248
-        for (k in handlers) {
249
-          handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
250
-        }
251
-      }
252
-    }
253
-    return element;
254
-  },
255
-
256
-  fireListener = W3C_MODEL ? function (isNative, type, element) {
257
-    evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
258
-    evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
259
-    element.dispatchEvent(evt);
260
-  } : function (isNative, type, element) {
261
-    isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
262
-  },
263
-
264
-  clone = function (element, from, type) {
265
-    var events = retrieveEvents(from), obj, k;
266
-    obj = type ? events[type] : events;
267
-    for (k in obj) {
268
-      obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
269
-    }
270
-    return element;
271
-  },
272
-
273
-  fixEvent = function (e) {
274
-    var result = {};
275
-    if (!e) {
276
-      return result;
277
-    }
278
-    var type = e.type, target = e.target || e.srcElement;
279
-    result.preventDefault = fixEvent.preventDefault(e);
280
-    result.stopPropagation = fixEvent.stopPropagation(e);
281
-    result.target = target && target.nodeType == 3 ? target.parentNode : target;
282
-    if (~type.indexOf('key')) {
283
-      result.keyCode = e.which || e.keyCode;
284
-    } else if ((/click|mouse|menu/i).test(type)) {
285
-      result.rightClick = e.which == 3 || e.button == 2;
286
-      result.pos = { x: 0, y: 0 };
287
-      if (e.pageX || e.pageY) {
288
-        result.clientX = e.pageX;
289
-        result.clientY = e.pageY;
290
-      } else if (e.clientX || e.clientY) {
291
-        result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
292
-        result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
293
-      }
294
-      overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
295
-    }
296
-    for (var k in e) {
297
-      if (!(k in result)) {
298
-        result[k] = e[k];
299
-      }
300
-    }
301
-    return result;
302
-  };
303
-
304
-  fixEvent.preventDefault = function (e) {
305
-    return function () {
306
-      if (e.preventDefault) {
307
-        e.preventDefault();
308
-      }
309
-      else {
310
-        e.returnValue = false;
311
-      }
312
-    };
313
-  };
314
-
315
-  fixEvent.stopPropagation = function (e) {
316
-    return function () {
317
-      if (e.stopPropagation) {
318
-        e.stopPropagation();
319
-      } else {
320
-        e.cancelBubble = true;
321
-      }
322
-    };
323
-  };
324
-
325
-  var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons
326
-    mousewheel: 1, DOMMouseScroll: 1, //mouse wheel
327
-    mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement
328
-    keydown: 1, keypress: 1, keyup: 1, //keyboard
329
-    orientationchange: 1, // mobile
330
-    touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch
331
-    gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture
332
-    focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements
333
-    load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
334
-    error: 1, abort: 1, scroll: 1 }; //misc
335
-
336
-  function check(event) {
337
-    var related = event.relatedTarget;
338
-    if (!related) {
339
-      return related == null;
340
-    }
341
-    return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related));
342
-  }
343
-
344
-  var customEvents = {
345
-    mouseenter: { base: 'mouseover', condition: check },
346
-    mouseleave: { base: 'mouseout', condition: check },
347
-    mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
348
-  };
349
-
350
-  var bean = { add: add, remove: remove, clone: clone, fire: fire };
351
-
352
-  var clean = function (el) {
353
-    var uid = remove(el).__uid;
354
-    if (uid) {
355
-      delete collected[uid];
356
-      delete registry[uid];
357
-    }
358
-  };
359
-
360
-  if (context[attachEvent]) {
361
-    add(context, 'unload', function () {
362
-      for (var k in collected) {
363
-        collected.hasOwnProperty(k) && clean(collected[k]);
364
-      }
365
-      context.CollectGarbage && CollectGarbage();
366
-    });
367
-  }
368
-
369
-  var oldBean = context.bean;
370
-  bean.noConflict = function () {
371
-    context.bean = oldBean;
372
-    return this;
373
-  };
374
-
375
-  (typeof module !== 'undefined' && module.exports) ?
376
-    (module.exports = bean) :
377
-    (context['bean'] = bean);
378
-
379
-}(this);!function ($) {
380
-  var b = bean.noConflict(),
381
-      integrate = function (method, type, method2) {
382
-        var _args = type ? [type] : [];
383
-        return function () {
384
-          for (var args, i = 0, l = this.length; i < l; i++) {
385
-            args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0));
386
-            args.length == 4 && args.push($);
387
-            !arguments.length && method == 'add' && type && (method = 'fire');
388
-            b[method].apply(this, args);
389
-          }
390
-          return this;
391
-        };
392
-      };
393
-
394
-  var add = integrate('add'),
395
-      remove = integrate('remove'),
396
-      fire = integrate('fire');
397
-
398
-  var methods = {
399
-
400
-    on: add,
401
-    addListener: add,
402
-    bind: add,
403
-    listen: add,
404
-    delegate: add,
405
-
406
-    unbind: remove,
407
-    unlisten: remove,
408
-    removeListener: remove,
409
-    undelegate: remove,
410
-
411
-    emit: fire,
412
-    trigger: fire,
413
-
414
-    cloneEvents: integrate('clone'),
415
-
416
-    hover: function (enter, leave) {
417
-      for (var i = 0, l = this.length; i < l; i++) {
418
-        b.add.call(this, this[i], 'mouseenter', enter);
419
-        b.add.call(this, this[i], 'mouseleave', leave);
420
-      }
421
-      return this;
422
-    }
423
-  };
424
-
425
-  var shortcuts = [
426
-    'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin',
427
-    'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown',
428
-    'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup',
429
-    'resize', 'scroll', 'select', 'submit', 'unload'
430
-  ];
431
-
432
-  for (var i = shortcuts.length; i--;) {
433
-    var shortcut = shortcuts[i];
434
-    methods[shortcut] = integrate('add', shortcut);
435
-  }
436
-
437
-  $.ender(methods, true);
438
-}(ender);
439
-/*!
440
-  * bonzo.js - copyright @dedfat 2011
441
-  * https://github.com/ded/bonzo
442
-  * Follow our software http://twitter.com/dedfat
443
-  * MIT License
444
-  */
445
-!function (context) {
446
-
447
-  var doc = context.document,
448
-      html = doc.documentElement,
449
-      query = null,
450
-      byTag = 'getElementsByTagName',
451
-      specialAttributes = /^checked|value|selected$/,
452
-      specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i,
453
-      tagMap = { select: 'option', table: 'tbody', tr: 'td' },
454
-      stateAttributes = /^checked|selected$/,
455
-      ie = /msie/i.test(navigator.userAgent),
456
-      uidList = [],
457
-      uuids = 0,
458
-      digit = /^-?[\d\.]+$/,
459
-      px = 'px',
460
-      // commonly used methods
461
-      setAttribute = 'setAttribute',
462
-      getAttribute = 'getAttribute',
463
-      trimReplace = /(^\s*|\s*$)/g,
464
-      unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 };
465
-
466
-  function classReg(c) {
467
-    return new RegExp("(^|\\s+)" + c + "(\\s+|$)");
468
-  }
469
-
470
-  function each(ar, fn, scope) {
471
-    for (var i = 0, l = ar.length; i < l; i++) {
472
-      fn.call(scope || ar[i], ar[i], i, ar);
473
-    }
474
-    return ar;
475
-  }
476
-
477
-  var trim = String.prototype.trim ?
478
-    function (s) {
479
-      return s.trim();
480
-    } :
481
-    function (s) {
482
-      return s.replace(trimReplace, '');
483
-    };
484
-
485
-  function camelize(s) {
486
-    return s.replace(/-(.)/g, function (m, m1) {
487
-      return m1.toUpperCase();
488
-    });
489
-  }
490
-
491
-  function is(node) {
492
-    return node && node.nodeName && node.nodeType == 1;
493
-  }
494
-
495
-  function some(ar, fn, scope) {
496
-    for (var i = 0, j = ar.length; i < j; ++i) {
497
-      if (fn.call(scope, ar[i], i, ar)) {
498
-        return true;
499
-      }
500
-    }
501
-    return false;
502
-  }
503
-
504
-  var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
505
-    function (el, property) {
506
-      var value = null;
507
-      if (property == 'float') {
508
-        property = 'cssFloat';
509
-      }
510
-      var computed = doc.defaultView.getComputedStyle(el, '');
511
-      computed && (value = computed[camelize(property)]);
512
-      return el.style[property] || value;
513
-
514
-    } : (ie && html.currentStyle) ?
515
-
516
-    function (el, property) {
517
-      property = camelize(property);
518
-      property = property == 'float' ? 'styleFloat' : property;
519
-
520
-      if (property == 'opacity') {
521
-        var val = 100;
522
-        try {
523
-          val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
524
-        } catch (e1) {
525
-          try {
526
-            val = el.filters('alpha').opacity;
527
-          } catch (e2) {}
528
-        }
529
-        return val / 100;
530
-      }
531
-      var value = el.currentStyle ? el.currentStyle[property] : null;
532
-      return el.style[property] || value;
533
-    } :
534
-
535
-    function (el, property) {
536
-      return el.style[camelize(property)];
537
-    };
538
-
539
-  function insert(target, host, fn) {
540
-    var i = 0, self = host || this, r = [];
541
-    each(normalize(query ? query(target) : target), function (t) {
542
-      each(self, function (el) {
543
-        var n = el.cloneNode(true);
544
-        fn(t, n);
545
-        r[i] = n;
546
-        i++;
547
-      });
548
-    }, this);
549
-    each(r, function (e, i) {
550
-      self[i] = e;
551
-    });
552
-    self.length = i;
553
-    return self;
554
-  }
555
-
556
-  function xy(el, x, y) {
557
-    var $el = bonzo(el),
558
-        style = $el.css('position'),
559
-        offset = $el.offset(),
560
-        rel = 'relative',
561
-        isRel = style == rel,
562
-        delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)];
563
-
564
-    if (style == 'static') {
565
-      $el.css('position', rel);
566
-      style = rel;
567
-    }
568
-
569
-    isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft);
570
-    isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop);
571
-
572
-    x !== null && (el.style.left = x - offset.left + delta[0] + 'px');
573
-    y !== null && (el.style.top = y - offset.top + delta[1] + 'px');
574
-
575
-  }
576
-
577
-  function Bonzo(elements) {
578
-    this.length = 0;
579
-    this.original = elements;
580
-    if (elements) {
581
-      elements = typeof elements !== 'string' &&
582
-        !elements.nodeType &&
583
-        typeof elements.length !== 'undefined' ?
584
-          elements :
585
-          [elements];
586
-      this.length = elements.length;
587
-      for (var i = 0; i < elements.length; i++) {
588
-        this[i] = elements[i];
589
-      }
590
-    }
591
-  }
592
-
593
-  Bonzo.prototype = {
594
-
595
-    each: function (fn, scope) {
596
-      return each(this, fn, scope);
597
-    },
598
-
599
-    map: function (fn, reject) {
600
-      var m = [], n, i;
601
-      for (i = 0; i < this.length; i++) {
602
-        n = fn.call(this, this[i]);
603
-        reject ? (reject(n) && m.push(n)) : m.push(n);
604
-      }
605
-      return m;
606
-    },
607
-
608
-    first: function () {
609
-      return bonzo(this[0]);
610
-    },
611
-
612
-    last: function () {
613
-      return bonzo(this[this.length - 1]);
614
-    },
615
-
616
-    html: function (h, text) {
617
-      var method = text ?
618
-        html.textContent == null ?
619
-          'innerText' :
620
-          'textContent' :
621
-        'innerHTML', m;
622
-      function append(el, tag) {
623
-        while (el.firstChild) {
624
-          el.removeChild(el.firstChild);
625
-        }
626
-        each(normalize(h, tag), function (node) {
627
-          el.appendChild(node);
628
-        });
629
-      }
630
-      return typeof h !== 'undefined' ?
631
-          this.each(function (el) {
632
-            (m = el.tagName.match(specialTags)) ?
633
-              append(el, m[0]) :
634
-              (el[method] = h);
635
-          }) :
636
-        this[0] ? this[0][method] : '';
637
-    },
638
-
639
-    text: function (text) {
640
-      return this.html(text, 1);
641
-    },
642
-
643
-    addClass: function (c) {
644
-      return this.each(function (el) {
645
-        this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c));
646
-      }, this);
647
-    },
648
-
649
-    removeClass: function (c) {
650
-      return this.each(function (el) {
651
-        this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' ')));
652
-      }, this);
653
-    },
654
-
655
-    hasClass: function (el, c) {
656
-      return typeof c == 'undefined' ?
657
-        some(this, function (i) {
658
-          return classReg(el).test(i.className);
659
-        }) :
660
-        classReg(c).test(el.className);
661
-    },
662
-
663
-    toggleClass: function (c, condition) {
664
-      if (typeof condition !== 'undefined' && !condition) {
665
-        return this;
666
-      }
667
-      return this.each(function (el) {
668
-        this.hasClass(el, c) ?
669
-          (el.className = trim(el.className.replace(classReg(c), ' '))) :
670
-          (el.className = trim(el.className + ' ' + c));
671
-      }, this);
672
-    },
673
-
674
-    show: function (type) {
675
-      return this.each(function (el) {
676
-        el.style.display = type || '';
677
-      });
678
-    },
679
-
680
-    hide: function (elements) {
681
-      return this.each(function (el) {
682
-        el.style.display = 'none';
683
-      });
684
-    },
685
-
686
-    append: function (node) {
687
-      return this.each(function (el) {
688
-        each(normalize(node), function (i) {
689
-          el.appendChild(i);
690
-        });
691
-      });
692
-    },
693
-
694
-    prepend: function (node) {
695
-      return this.each(function (el) {
696
-        var first = el.firstChild;
697
-        each(normalize(node), function (i) {
698
-          el.insertBefore(i, first);
699
-        });
700
-      });
701
-    },
702
-
703
-    appendTo: function (target, host) {
704
-      return insert.call(this, target, host, function (t, el) {
705
-        t.appendChild(el);
706
-      });
707
-    },
708
-
709
-    prependTo: function (target, host) {
710
-      return insert.call(this, target, host, function (t, el) {
711
-        t.insertBefore(el, t.firstChild);
712
-      });
713
-    },
714
-
715
-    next: function () {
716
-      return this.related('nextSibling');
717
-    },
718
-
719
-    previous: function () {
720
-      return this.related('previousSibling');
721
-    },
722
-
723
-    related: function (method) {
724
-      return this.map(
725
-        function (el) {
726
-          el = el[method];
727
-          while (el && el.nodeType !== 1) {
728
-            el = el[method];
729
-          }
730
-          return el || 0;
731
-        },
732
-        function (el) {
733
-          return el;
734
-        }
735
-      );
736
-    },
737
-
738
-    before: function (node) {
739
-      return this.each(function (el) {
740
-        each(bonzo.create(node), function (i) {
741
-          el.parentNode.insertBefore(i, el);
742
-        });
743
-      });
744
-    },
745
-
746
-    after: function (node) {
747
-      return this.each(function (el) {
748
-        each(bonzo.create(node), function (i) {
749
-          el.parentNode.insertBefore(i, el.nextSibling);
750
-        });
751
-      });
752
-    },
753
-
754
-    insertBefore: function (target, host) {
755
-      return insert.call(this, target, host, function (t, el) {
756
-        t.parentNode.insertBefore(el, t);
757
-      });
758
-    },
759
-
760
-    insertAfter: function (target, host) {
761
-      return insert.call(this, target, host, function (t, el) {
762
-        var sibling = t.nextSibling;
763
-        if (sibling) {
764
-          t.parentNode.insertBefore(el, sibling);
765
-        }
766
-        else {
767
-          t.parentNode.appendChild(el);
768
-        }
769
-      });
770
-    },
771
-
772
-    css: function (o, v) {
773
-      // is this a request for just getting a style?
774
-      if (v === undefined && typeof o == 'string') {
775
-        return getStyle(this[0], o);
776
-      }
777
-      var iter = o;
778
-      if (typeof o == 'string') {
779
-        iter = {};
780
-        iter[o] = v;
781
-      }
782
-
783
-      if (ie && iter.opacity) {
784
-        // oh this 'ol gamut
785
-        iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')';
786
-        // give it layout
787
-        iter.zoom = o.zoom || 1;
788
-        delete iter.opacity;
789
-      }
790
-
791
-      if (v = iter['float']) {
792
-        // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat
793
-        ie ? (iter.styleFloat = v) : (iter.cssFloat = v);
794
-        delete iter['float'];
795
-      }
796
-
797
-      var fn = function (el, p, v) {
798
-        for (var k in iter) {
799
-          if (iter.hasOwnProperty(k)) {
800
-            v = iter[k];
801
-            // change "5" to "5px" - unless you're line-height, which is allowed
802
-            (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px);
803
-            el.style[p] = v;
804
-          }
805
-        }
806
-      };
807
-      return this.each(fn);
808
-    },
809
-
810
-    offset: function (x, y) {
811
-      if (x || y) {
812
-        return this.each(function (el) {
813
-          xy(el, x, y);
814
-        });
815
-      }
816
-      var el = this[0];
817
-      var width = el.offsetWidth;
818
-      var height = el.offsetHeight;
819
-      var top = el.offsetTop;
820
-      var left = el.offsetLeft;
821
-      while (el = el.offsetParent) {
822
-        top = top + el.offsetTop;
823
-        left = left + el.offsetLeft;
824
-      }
825
-
826
-      return {
827
-        top: top,
828
-        left: left,
829
-        height: height,
830
-        width: width
831
-      };
832
-    },
833
-
834
-    attr: function (k, v) {
835
-      var el = this[0];
836
-      return typeof v == 'undefined' ?
837
-        specialAttributes.test(k) ?
838
-          stateAttributes.test(k) && typeof el[k] == 'string' ?
839
-            true : el[k] : el[getAttribute](k) :
840
-        this.each(function (el) {
841
-          k == 'value' ? (el.value = v) : el[setAttribute](k, v);
842
-        });
843
-    },
844
-
845
-    val: function (s) {
846
-      return (typeof s == 'string') ? this.attr('value', s) : this[0].value;
847
-    },
848
-
849
-    removeAttr: function (k) {
850
-      return this.each(function (el) {
851
-        el.removeAttribute(k);
852
-      });
853
-    },
854
-
855
-    data: function (k, v) {
856
-      var el = this[0];
857
-      if (typeof v === 'undefined') {
858
-        el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
859
-        var uid = el[getAttribute]('data-node-uid');
860
-        uidList[uid] || (uidList[uid] = {});
861
-        return uidList[uid][k];
862
-      } else {
863
-        return this.each(function (el) {
864
-          el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
865
-          var uid = el[getAttribute]('data-node-uid');
866
-          var o = {};
867
-          o[k] = v;
868
-          uidList[uid] = o;
869
-        });
870
-      }
871
-    },
872
-
873
-    remove: function () {
874
-      return this.each(function (el) {
875
-        el.parentNode && el.parentNode.removeChild(el);
876
-      });
877
-    },
878
-
879
-    empty: function () {
880
-      return this.each(function (el) {
881
-        while (el.firstChild) {
882
-          el.removeChild(el.firstChild);
883
-        }
884
-      });
885
-    },
886
-
887
-    detach: function () {
888
-      return this.map(function (el) {
889
-        return el.parentNode.removeChild(el);
890
-      });
891
-    },
892
-
893
-    scrollTop: function (y) {
894
-      return scroll.call(this, null, y, 'y');
895
-    },
896
-
897
-    scrollLeft: function (x) {
898
-      return scroll.call(this, x, null, 'x');
899
-    }
900
-  };
901
-
902
-  function normalize(node, tag) {
903
-    return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node;
904
-  }
905
-
906
-  function scroll(x, y, type) {
907
-    var el = this[0];
908
-    if (x == null && y == null) {
909
-      return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type];
910
-    }
911
-    if (isBody(el)) {
912
-      window.scrollTo(x, y);
913
-    } else {
914
-      x != null && (el.scrollLeft = x);
915
-      y != null && (el.scrollTop = y);
916
-    }
917
-    return this;
918
-  }
919
-
920
-  function isBody(element) {
921
-    return element === window || (/^(?:body|html)$/i).test(element.tagName);
922
-  }
923
-
924
-  function getWindowScroll() {
925
-    return { x: window.pageXOffset || html.scrollLeft, y: window.pageYOffset || html.scrollTop };
926
-  }
927
-
928
-  function bonzo(els, host) {
929
-    return new Bonzo(els, host);
930
-  }
931
-
932
-  bonzo.setQueryEngine = function (q) {
933
-    query = q;
934
-    delete bonzo.setQueryEngine;
935
-  };
936
-
937
-  bonzo.aug = function (o, target) {
938
-    for (var k in o) {
939
-      o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]);
940
-    }
941
-  };
942
-
943
-  bonzo.create = function (node, tag) {
944
-    return typeof node == 'string' ?
945
-      function () {
946
-        var t = tag ? tagMap[tag.toLowerCase()] : null;
947
-        var el = doc.createElement(t || 'div'), els = [];
948
-        if (tag) {
949
-          var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g"));
950
-          each(bitches, function (m) {
951
-            m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2');
952
-            var bah = doc.createElement(t);
953
-            bah.appendChild(doc.createDocumentFragment(m));
954
-            el.appendChild(bah);
955
-          });
956
-        } else {
957
-          el.innerHTML = node;
958
-        }
959
-        var nodes = el.childNodes;
960
-        el = el.firstChild;
961
-        els.push(el);
962
-        while (el = el.nextSibling) {
963
-          (el.nodeType == 1) && els.push(el);
964
-        }
965
-        return els;
966
-
967
-      }() : is(node) ? [node.cloneNode(true)] : [];
968
-  };
969
-
970
-  bonzo.doc = function () {
971
-    var w = html.scrollWidth,
972
-        h = html.scrollHeight,
973
-        vp = this.viewport();
974
-    return {
975
-      width: Math.max(w, vp.width),
976
-      height: Math.max(h, vp.height)
977
-    };
978
-  };
979
-
980
-  bonzo.firstChild = function (el) {
981
-    for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
982
-      if (c[i].nodeType === 1) {
983
-        e = c[j = i];
984
-      }
985
-    }
986
-    return e;
987
-  };
988
-
989
-  bonzo.viewport = function () {
990
-    var h = self.innerHeight,
991
-        w = self.innerWidth;
992
-    ie && (h = html.clientHeight) && (w = html.clientWidth);
993
-    return {
994
-      width: w,
995
-      height: h
996
-    };
997
-  };
998
-
999
-  bonzo.isAncestor = 'compareDocumentPosition' in html ?
1000
-    function (container, element) {
1001
-      return (container.compareDocumentPosition(element) & 16) == 16;
1002
-    } : 'contains' in html ?
1003
-    function (container, element) {
1004
-      return container !== element && container.contains(element);
1005
-    } :
1006
-    function (container, element) {
1007
-      while (element = element.parentNode) {
1008
-        if (element === container) {
1009
-          return true;
1010
-        }
1011
-      }
1012
-      return false;
1013
-    };
1014
-
1015
-  var old = context.bonzo;
1016
-  bonzo.noConflict = function () {
1017
-    context.bonzo = old;
1018
-    return this;
1019
-  };
1020
-  context['bonzo'] = bonzo;
1021
-
1022
-}(this);!function ($) {
1023
-
1024
-  var b = bonzo;
1025
-  b.setQueryEngine($);
1026
-  $.ender(b);
1027
-  $.ender(b(), true);
1028
-  $.ender({
1029
-    create: function (node) {
1030
-      return $(b.create(node));
1031
-    }
1032
-  });
1033
-
1034
-  $.id = function (id) {
1035
-    return $([document.getElementById(id)]);
1036
-  };
1037
-
1038
-  function indexOf(ar, val) {
1039
-    for (var i = 0; i < ar.length; i++) {
1040
-      if (ar[i] === val) {
1041
-        return i;
1042
-      }
1043
-    }
1044
-    return -1;
1045
-  }
1046
-
1047
-  function uniq(ar) {
1048
-    var a = [], i, j;
1049
-    label:
1050
-    for (i = 0; i < ar.length; i++) {
1051
-      for (j = 0; j < a.length; j++) {
1052
-        if (a[j] == ar[i]) {
1053
-          continue label;
1054
-        }
1055
-      }
1056
-      a[a.length] = ar[i];
1057
-    }
1058
-    return a;
1059
-  }
1060
-
1061
-  $.ender({
1062
-    parents: function (selector, closest) {
1063
-      var collection = $(selector), j, k, p, r = [];
1064
-      for (j = 0, k = this.length; j < k; j++) {
1065
-        p = this[j];
1066
-        while (p = p.parentNode) {
1067
-          if (indexOf(collection, p) !== -1) {
1068
-            r.push(p);
1069
-            if (closest) break;
1070
-          }
1071
-        }
1072
-      }
1073
-      return $(uniq(r));
1074
-    },
1075
-
1076
-    closest: function (selector) {
1077
-      return this.parents(selector, true);
1078
-    },
1079
-
1080
-    first: function () {
1081
-      return $(this[0]);
1082
-    },
1083
-
1084
-    last: function () {
1085
-      return $(this[this.length - 1]);
1086
-    },
1087
-
1088
-    next: function () {
1089
-      return $(b(this).next());
1090
-    },
1091
-
1092
-    previous: function () {
1093
-      return $(b(this).previous());
1094
-    },
1095
-
1096
-    appendTo: function (t) {
1097
-      return b(this.selector).appendTo(t, this);
1098
-    },
1099
-
1100
-    prependTo: function (t) {
1101
-      return b(this.selector).prependTo(t, this);
1102
-    },
1103
-
1104
-    insertAfter: function (t) {
1105
-      return b(this.selector).insertAfter(t, this);
1106
-    },
1107
-
1108
-    insertBefore: function (t) {
1109
-      return b(this.selector).insertBefore(t, this);
1110
-    },
1111
-
1112
-    siblings: function () {
1113
-      var i, l, p, r = [];
1114
-      for (i = 0, l = this.length; i < l; i++) {
1115
-        p = this[i];
1116
-        while (p = p.previousSibling) {
1117
-          p.nodeType == 1 && r.push(p);
1118
-        }
1119
-        p = this[i];
1120
-        while (p = p.nextSibling) {
1121
-          p.nodeType == 1 && r.push(p);
1122
-        }
1123
-      }
1124
-      return $(r);
1125
-    },
1126
-
1127
-    children: function () {
1128
-      var el, r = [];
1129
-      for (i = 0, l = this.length; i < l; i++) {
1130
-        if (!(el = b.firstChild(this[i]))) {
1131
-          continue;
1132
-        }
1133
-        r.push(el);
1134
-        while (el = el.nextSibling) {
1135
-          el.nodeType == 1 && r.push(el);
1136
-        }
1137
-      }
1138
-      return $(uniq(r));
1139
-    },
1140
-
1141
-    height: function (v) {
1142
-      return v ? this.css('height', v) : parseInt(this.css('height'), 10);
1143
-    },
1144
-
1145
-    width: function (v) {
1146
-      return v ? this.css('width', v) : parseInt(this.css('width'), 10);
1147
-    }
1148
-  }, true);
1149
-
1150
-}(ender || $);
1151
-
1152
-!function () { var exports = {}, module = { exports: exports }; !function (doc) {
1153
-  var loaded = 0, fns = [], ol, f = false,
1154
-      testEl = doc.createElement('a'),
1155
-      domContentLoaded = 'DOMContentLoaded',
1156
-      addEventListener = 'addEventListener',
1157
-      onreadystatechange = 'onreadystatechange';
1158
-
1159
-  /^loade|c/.test(doc.readyState) && (loaded = 1);
1160
-
1161
-  function flush() {
1162
-    loaded = 1;
1163
-    for (var i = 0, l = fns.length; i < l; i++) {
1164
-      fns[i]();
1165
-    }
1166
-  }
1167
-  doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() {
1168
-    doc.removeEventListener(domContentLoaded, fn, f);
1169
-    flush();
1170
-  }, f);
1171
-
1172
-
1173
-  testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() {
1174
-    if (/^c/.test(doc.readyState)) {
1175
-      doc.detachEvent(onreadystatechange, ol);
1176
-      flush();
1177
-    }
1178
-  }));
1179
-
1180
-  var domReady = testEl.doScroll ?
1181
-    function (fn) {
1182
-      self != top ?
1183
-        !loaded ?
1184
-          fns.push(fn) :
1185
-          fn() :
1186
-        !function () {
1187
-          try {
1188
-            testEl.doScroll('left');
1189
-          } catch (e) {
1190
-            return setTimeout(function() {
1191
-              domReady(fn);
1192
-            }, 50);
1193
-          }
1194
-          fn();
1195
-        }();
1196
-    } :
1197
-    function (fn) {
1198
-      loaded ? fn() : fns.push(fn);
1199
-    };
1200
-
1201
-    (typeof module !== 'undefined') && module.exports ?
1202
-      (module.exports = {domReady: domReady}) :
1203
-      (window.domReady = domReady);
1204
-
1205
-}(document); $.ender(module.exports); }.call($);
1206
-/*!
1207
-  * qwery.js - copyright @dedfat
1208
-  * https://github.com/ded/qwery
1209
-  * Follow our software http://twitter.com/dedfat
1210
-  * MIT License
1211
-  */
1212
-
1213
-!function (context, doc) {
1214
-
1215
-  var c, i, j, k, l, m, o, p, r, v,
1216
-      el, node, len, found, classes, item, items, token,
1217
-      id = /#([\w\-]+)/,
1218
-      clas = /\.[\w\-]+/g,
1219
-      idOnly = /^#([\w\-]+$)/,
1220
-      classOnly = /^\.([\w\-]+)$/,
1221
-      tagOnly = /^([\w\-]+)$/,
1222
-      tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
1223
-      html = doc.documentElement,
1224
-      tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
1225
-      specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
1226
-      simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
1227
-      attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
1228
-      chunker = new RegExp(simple.source + '(' + attr.source + ')?');
1229
-
1230
-  function array(ar) {
1231
-    r = [];
1232
-    for (i = 0, len = ar.length; i < len; i++) {
1233
-      r[i] = ar[i];
1234
-    }
1235
-    return r;
1236
-  }
1237
-
1238
-  var cache = function () {
1239
-    this.c = {};
1240
-  };
1241
-  cache.prototype = {
1242
-    g: function (k) {
1243
-      return this.c[k] || undefined;
1244
-    },
1245
-    s: function (k, v) {
1246
-      this.c[k] = v;
1247
-      return v;
1248
-    }
1249
-  };
1250
-
1251
-  var classCache = new cache(),
1252
-      cleanCache = new cache(),
1253
-      attrCache = new cache(),
1254
-      tokenCache = new cache();
1255
-
1256
-  function q(query) {
1257
-    return query.match(chunker);
1258
-  }
1259
-
1260
-  function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) {
1261
-    var m, c, k;
1262
-    if (tag && this.tagName.toLowerCase() !== tag) {
1263
-      return false;
1264
-    }
1265
-    if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) {
1266
-      return false;
1267
-    }
1268
-    if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
1269
-      for (i = classes.length; i--;) {
1270
-        c = classes[i].slice(1);
1271
-        if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) {
1272
-          return false;
1273
-        }
1274
-      }
1275
-    }
1276
-    if (wholeAttribute && !value) {
1277
-      o = this.attributes;
1278
-      for (k in o) {
1279
-        if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
1280
-          return this;
1281
-        }
1282
-      }
1283
-    }
1284
-    if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) {
1285
-      return false;
1286
-    }
1287
-    return this;
1288
-  }
1289
-
1290
-  function loopAll(tokens) {
1291
-    var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els,
1292
-        root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc;
1293
-    if (!root) {
1294
-      return r;
1295
-    }
1296
-    els = root.getElementsByTagName(tag);
1297
-    for (i = 0, l = els.length; i < l; i++) {
1298
-      el = els[i];
1299
-      if (item = interpret.apply(el, intr)) {
1300
-        r.push(item);
1301
-      }
1302
-    }
1303
-    return r;
1304
-  }
1305
-
1306
-  function clean(s) {
1307
-    return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'));
1308
-  }
1309
-
1310
-  function checkAttr(qualify, actual, val) {
1311
-    switch (qualify) {
1312
-    case '=':
1313
-      return actual == val;
1314
-    case '^=':
1315
-      return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val))));
1316
-    case '$=':
1317
-      return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$')));
1318
-    case '*=':
1319
-      return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val))));
1320
-    case '~=':
1321
-      return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)')));
1322
-    case '|=':
1323
-      return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)')));
1324
-    }
1325
-    return false;
1326
-  }
1327
-
1328
-  function _qwery(selector) {
1329
-    var r = [], ret = [], i, l,
1330
-        tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr));
1331
-    tokens = tokens.slice(0);
1332
-    if (!tokens.length) {
1333
-      return r;
1334
-    }
1335
-    r = loopAll(tokens);
1336
-    if (!tokens.length) {
1337
-      return r;
1338
-    }
1339
-    // loop through all descendent tokens
1340
-    for (j = 0, l = r.length, k = 0; j < l; j++) {
1341
-      node = r[j];
1342
-      p = node;
1343
-      // loop through each token
1344
-      for (i = tokens.length; i--;) {
1345
-        z: // loop through parent nodes
1346
-        while (p !== html && (p = p.parentNode)) {
1347
-          if (found = interpret.apply(p, q(tokens[i]))) {
1348
-            break z;
1349
-          }
1350
-        }
1351
-      }
1352
-      found && (ret[k++] = node);
1353
-    }
1354
-    return ret;
1355
-  }
1356
-
1357
-  function boilerPlate(selector, _root, fn) {
1358
-    var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
1359
-    if (selector === window || isNode(selector)) {
1360
-      return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
1361
-    }
1362
-    if (selector && typeof selector === 'object' && isFinite(selector.length)) {
1363
-      return array(selector);
1364
-    }
1365
-    if (m = selector.match(idOnly)) {
1366
-      return (el = doc.getElementById(m[1])) ? [el] : [];
1367
-    }
1368
-    if (m = selector.match(tagOnly)) {
1369
-      return array(root.getElementsByTagName(m[1]));
1370
-    }
1371
-    return false;
1372
-  }
1373
-
1374
-  function isNode(el) {
1375
-    return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
1376
-  }
1377
-
1378
-  function uniq(ar) {
1379
-    var a = [], i, j;
1380
-    label:
1381
-    for (i = 0; i < ar.length; i++) {
1382
-      for (j = 0; j < a.length; j++) {
1383
-        if (a[j] == ar[i]) {
1384
-          continue label;
1385
-        }
1386
-      }
1387
-      a[a.length] = ar[i];
1388
-    }
1389
-    return a;
1390
-  }
1391
-
1392
-  function qwery(selector, _root) {
1393
-    var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
1394
-    if (!root || !selector) {
1395
-      return [];
1396
-    }
1397
-    if (m = boilerPlate(selector, _root, qwery)) {
1398
-      return m;
1399
-    }
1400
-    return select(selector, root);
1401
-  }
1402
-
1403
-  var isAncestor = 'compareDocumentPosition' in html ?
1404
-    function (element, container) {
1405
-      return (container.compareDocumentPosition(element) & 16) == 16;
1406
-    } : 'contains' in html ?
1407
-    function (element, container) {
1408
-      container = container == doc || container == window ? html : container;
1409
-      return container !== element && container.contains(element);
1410
-    } :
1411
-    function (element, container) {
1412
-      while (element = element.parentNode) {
1413
-        if (element === container) {
1414
-          return 1;
1415
-        }
1416
-      }
1417
-      return 0;
1418
-    },
1419
-
1420
-  select = (doc.querySelector && doc.querySelectorAll) ?
1421
-    function (selector, root) {
1422
-      if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
1423
-        return array((root).getElementsByClassName(m[1]));
1424
-      }
1425
-      return array((root).querySelectorAll(selector));
1426
-    } :
1427
-    function (selector, root) {
1428
-      var result = [], collection, collections = [], i;
1429
-      if (m = selector.match(tagAndOrClass)) {
1430
-        items = root.getElementsByTagName(m[1] || '*');
1431
-        r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)'));
1432
-        for (i = 0, l = items.length, j = 0; i < l; i++) {
1433
-          r.test(items[i].className) && (result[j++] = items[i]);
1434
-        }
1435
-        return result;
1436
-      }
1437
-      for (i = 0, items = selector.split(','), l = items.length; i < l; i++) {
1438
-        collections[i] = _qwery(items[i]);
1439
-      }
1440
-      for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) {
1441
-        var ret = collection;
1442
-        if (root !== doc) {
1443
-          ret = [];
1444
-          for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) {
1445
-            // make sure element is a descendent of root
1446
-            isAncestor(element, root) && ret.push(element);
1447
-          }
1448
-        }
1449
-        result = result.concat(ret);
1450
-      }
1451
-      return uniq(result);
1452
-    };
1453
-
1454
-  qwery.uniq = uniq;
1455
-  var oldQwery = context.qwery;
1456
-  qwery.noConflict = function () {
1457
-    context.qwery = oldQwery;
1458
-    return this;
1459
-  };
1460
-  context['qwery'] = qwery;
1461
-
1462
-}(this, document);!function (doc) {
1463
-  var q = qwery.noConflict();
1464
-  function create(node, root) {
1465
-    var el = (root || doc).createElement('div'), els = [];
1466
-    el.innerHTML = node;
1467
-    var nodes = el.childNodes;
1468
-    el = el.firstChild;
1469
-    els.push(el);
1470
-    while (el = el.nextSibling) {
1471
-      (el.nodeType == 1) && els.push(el);
1472
-    }
1473
-    return els;
1474
-  };
1475
-  $._select = function (s, r) {
1476
-    return /^\s*</.test(s) ? create(s, r) : q(s, r);
1477
-  };
1478
-  $.ender({
1479
-    find: function (s) {
1480
-      var r = [], i, l, j, k, els;
1481
-      for (i = 0, l = this.length; i < l; i++) {
1482
-        els = q(s, this[i]);
1483
-        for (j = 0, k = els.length; j < k; j++) {
1484
-          r.push(els[j]);
1485
-        }
1486
-      }
1487
-      return $(q.uniq(r));
1488
-    }
1489
-    , and: function (s) {
1490
-      var plus = $(s);
1491
-      for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
1492
-        this[i] = plus[j];
1493
-      }
1494
-      return this;
1495
-    }
1496
-  }, true);
1497
-}(document);
1498 1
deleted file mode 100644
... ...
@@ -1,85 +0,0 @@
1
-// jXHR.js (JSON-P XHR)
2
-// v0.1 (c) Kyle Simpson
3
-// MIT License
4
-
5
-(function(global){
6
-	var SETTIMEOUT = global.setTimeout, // for better compression
7
-		doc = global.document,
8
-		callback_counter = 0;
9
-
10
-	global.jXHR = function() {
11
-		var script_url,
12
-			script_loaded,
13
-			jsonp_callback,
14
-			scriptElem,
15
-			publicAPI = null;
16
-
17
-		function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
18
-
19
-		function reset() {
20
-			script_loaded = false;
21
-			script_url = "";
22
-			removeScript();
23
-			scriptElem = null;
24
-			fireReadyStateChange(0);
25
-		}
26
-
27
-		function ThrowError(msg) {
28
-			try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); }
29
-		}
30
-
31
-		function handleScriptLoad() {
32
-			if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
33
-			this.onload = this.onreadystatechange = null; // prevent memory leak
34
-			script_loaded = true;
35
-			if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"].");
36
-			removeScript();
37
-		}
38
-
39
-		function fireReadyStateChange(rs,args) {
40
-			args = args || [];
41
-			publicAPI.readyState = rs;
42
-			if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
43
-		}
44
-
45
-		publicAPI = {
46
-			onerror:null,
47
-			onreadystatechange:null,
48
-			readyState:0,
49
-			open:function(method,url){
50
-				reset();
51
-				internal_callback = "cb"+(callback_counter++);
52
-				(function(icb){
53
-					global.jXHR[icb] = function() {
54
-						try { fireReadyStateChange.call(publicAPI,4,arguments); }
55
-						catch(err) {
56
-							publicAPI.readyState = -1;
57
-							ThrowError("Script failed to run ["+script_url+"].");
58
-						}
59
-						global.jXHR[icb] = null;
60
-					};
61
-				})(internal_callback);
62
-				script_url = url.replace(/=\?/,"=jXHR."+internal_callback);
63
-				fireReadyStateChange(1);
64
-			},
65
-			send:function(){
66
-				SETTIMEOUT(function(){
67
-					scriptElem = doc.createElement("script");
68
-					scriptElem.setAttribute("type","text/javascript");
69
-					scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
70
-					scriptElem.setAttribute("src",script_url);
71
-					doc.getElementsByTagName("head")[0].appendChild(scriptElem);
72
-				},0);
73
-				fireReadyStateChange(2);
74
-			},
75
-			setRequestHeader:function(){}, // noop
76
-			getResponseHeader:function(){return "";}, // basically noop
77
-			getAllResponseHeaders:function(){return [];} // ditto
78
-		};
79
-
80
-		reset();
81
-
82
-		return publicAPI;
83
-	};
84
-})(window);
85
-
86 1
deleted file mode 100644
... ...
@@ -1,298 +0,0 @@
1
-/*!	SWFObject v2.2 <http://code.google.com/p/swfobject/>
2
-	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
3
-*/
4
-
5
-var swfobject = function() {
6
-
7
-	var UNDEF = "undefined",
8
-		OBJECT = "object",
9
-		SHOCKWAVE_FLASH = "Shockwave Flash",
10
-		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
11
-		FLASH_MIME_TYPE = "application/x-shockwave-flash",
12
-		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
13
-
14
-		win = window,
15
-		doc = document,
16
-		nav = navigator,
17
-
18
-		plugin = false,
19
-		regObjArr = [],
20
-		objIdArr = [],
21
-		storedAltContent,
22
-		storedAltContentId,
23
-		storedCallbackFn,
24
-		storedCallbackObj,
25
-		autoHideShow = true,
26
-
27
-	/* Centralized function for browser feature detection
28
-		- User agent string detection is only used when no good alternative is possible
29
-		- Is executed directly for optimal performance
30
-	*/
31
-	ua = function() {
32
-		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
33
-			u = nav.userAgent.toLowerCase(),
34
-			p = nav.platform.toLowerCase(),
35
-			windows = p ? /win/.test(p) : /win/.test(u),
36
-			mac = p ? /mac/.test(p) : /mac/.test(u),
37
-			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
38
-			ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
39
-			playerVersion = [0,0,0],
40
-			d = null;
41
-		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
42
-			d = nav.plugins[SHOCKWAVE_FLASH].description;
43
-			if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
44
-				plugin = true;
45
-				ie = false; // cascaded feature detection for Internet Explorer
46
-				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
47
-				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
48
-				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
49
-				playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
50
-			}
51
-		}
52
-		else if (typeof win.ActiveXObject != UNDEF) {
53
-			try {
54
-				var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
55
-				if (a) { // a will return null when ActiveX is disabled
56
-					d = a.GetVariable("$version");
57
-					if (d) {
58
-						ie = true; // cascaded feature detection for Internet Explorer
59
-						d = d.split(" ")[1].split(",");
60
-						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
61
-					}
62
-				}
63
-			}
64
-			catch(e) {}
65
-		}
66
-		return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
67
-	}()
68
-
69
-
70
-	/* Main function
71
-		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
72
-	*/
73
-	function main() {
74
-		if (plugin) { testPlayerVersion(); }
75
-		else { matchVersions(); }
76
-	}
77
-
78
-	/* Detect the Flash Player version for non-Internet Explorer browsers
79
-		- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
80
-		  a. Both release and build numbers can be detected
81
-		  b. Avoid wrong descriptions by corrupt installers provided by Adobe
82
-		  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
83
-		- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
84
-	*/
85
-	function testPlayerVersion() {
86
-		var b = doc.getElementsByTagName("body")[0];
87
-		var o = createElement(OBJECT);
88
-		o.setAttribute("type", FLASH_MIME_TYPE);
89
-		var t = b.appendChild(o);
90
-		if (t) {
91
-			var counter = 0;
92
-			(function(){
93
-				if (typeof t.GetVariable != UNDEF) {
94
-					var d = t.GetVariable("$version");
95
-					if (d) {
96
-						d = d.split(" ")[1].split(",");
97
-						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
98
-					}
99
-				}
100
-				else if (counter < 10) {
101
-					counter++;
102
-					setTimeout(arguments.callee, 10);
103
-					return;
104
-				}
105
-				b.removeChild(o);
106
-				t = null;
107
-				matchVersions();
108
-			})();
109
-		}
110
-		else {
111
-			matchVersions();
112
-		}
113
-	}
114
-
115
-
116
-	/* Cross-browser dynamic SWF creation
117
-	*/
118
-	function createSWF(attObj, parObj, id) {
119
-		var r, el = getElementById(id);
120
-		if (ua.wk && ua.wk < 312) { return r; }
121
-		if (el) {
122
-			if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
123
-				attObj.id = id;
124
-			}
125
-			if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
126
-				var att = "";
127
-				for (var i in attObj) {
128
-					if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
129
-						if (i.toLowerCase() == "data") {
130
-							parObj.movie = attObj[i];
131
-						}
132
-						else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
133
-							att += ' class="' + attObj[i] + '"';
134
-						}
135
-						else if (i.toLowerCase() != "classid") {
136
-							att += ' ' + i + '="' + attObj[i] + '"';
137
-						}
138
-					}
139
-				}
140
-				var par = "";
141
-				for (var j in parObj) {
142
-					if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
143
-						par += '<param name="' + j + '" value="' + parObj[j] + '" />';
144
-					}
145
-				}
146
-				el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
147
-				objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
148
-				r = getElementById(attObj.id);
149
-			}
150
-			else { // well-behaving browsers
151
-				var o = createElement(OBJECT);
152
-				o.setAttribute("type", FLASH_MIME_TYPE);
153
-				for (var m in attObj) {
154
-					if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
155
-						if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
156
-							o.setAttribute("class", attObj[m]);
157
-						}
158
-						else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
159
-							o.setAttribute(m, attObj[m]);
160
-						}
161
-					}
162
-				}
163
-				for (var n in parObj) {
164
-					if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
165
-						createObjParam(o, n, parObj[n]);
166
-					}
167
-				}
168
-				el.parentNode.replaceChild(o, el);
169
-				r = o;
170
-			}
171
-		}
172
-		return r;
173
-	}
174
-
175
-	function createObjParam(el, pName, pValue) {
176
-		var p = createElement("param");
177
-		p.setAttribute("name", pName);
178
-		p.setAttribute("value", pValue);
179
-		el.appendChild(p);
180
-	}
181
-
182
-	/* Cross-browser SWF removal
183
-		- Especially needed to safely and completely remove a SWF in Internet Explorer
184
-	*/
185
-	/* Functions to optimize JavaScript compression
186
-	*/
187
-	function getElementById(id) {
188
-		var el = null;
189
-		try {
190
-			el = doc.getElementById(id);
191
-		}
192
-		catch (e) {}
193
-		return el;
194
-	}
195
-
196
-	function createElement(el) {
197
-		return doc.createElement(el);
198
-	}
199
-
200
-	/* Flash Player and SWF content version matching
201
-	*/
202
-	function hasPlayerVersion(rv) {
203
-		var pv = ua.pv, v = rv.split(".");
204
-		v[0] = parseInt(v[0], 10);
205
-		v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
206
-		v[2] = parseInt(v[2], 10) || 0;
207
-		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
208
-	}
209
-
210
-
211
-	/* Filter to avoid XSS attacks
212
-	*/
213
-	function urlEncodeIfNecessary(s) {
214
-		var regex = /[\\\"<>\.;]/;
215
-		var hasBadChars = regex.exec(s) != null;
216
-		return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
217
-	}
218
-
219
-	return {
220
-		/* Public API
221
-			- Reference: http://code.google.com/p/swfobject/wiki/documentation
222
-		*/
223
-
224
-		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, flashvarsObj, parObj, attObj, callbackFn) {
225
-			var callbackObj = {success:false, id:replaceElemIdStr};
226
-			if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
227
-              widthStr += ""; // auto-convert to string
228
-              heightStr += "";
229
-              var att = {};
230
-              if (attObj && typeof attObj === OBJECT) {
231
-                for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
232
-                  att[i] = attObj[i];
233
-                }
234
-              }
235
-              att.data = swfUrlStr;
236
-              att.width = widthStr;
237
-              att.height = heightStr;
238
-              var par = {};
239
-              if (parObj && typeof parObj === OBJECT) {
240
-                for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
241
-                  par[j] = parObj[j];
242
-                }
243
-              }
244
-              if (flashvarsObj && typeof flashvarsObj === OBJECT) {
245
-                for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
246
-                  if (typeof par.flashvars != UNDEF) {
247
-                    par.flashvars += "&" + k + "=" + flashvarsObj[k];
248
-                  }
249
-                  else {
250
-                    par.flashvars = k + "=" + flashvarsObj[k];
251
-                  }
252
-                }
253
-              }
254
-              if (hasPlayerVersion(swfVersionStr)) { // create SWF
255
-                var obj = createSWF(att, par, replaceElemIdStr);
256
-                callbackObj.success = true;
257
-                callbackObj.ref = obj;
258
-              }
259
-              if (callbackFn) { callbackFn(callbackObj); }
260
-			}
261
-			else if (callbackFn) { callbackFn(callbackObj);	}
262
-		},
263
-
264
-		ua: ua,
265
-
266
-		getFlashPlayerVersion: function() {
267
-			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
268
-		},
269
-
270
-		hasFlashPlayerVersion: hasPlayerVersion,
271
-
272
-		createSWF: function(attObj, parObj, replaceElemIdStr) {
273
-			if (ua.w3) {
274
-				return createSWF(attObj, parObj, replaceElemIdStr);
275
-			}
276
-			else {
277
-				return undefined;
278
-			}
279
-		},
280
-
281
-		getQueryParamValue: function(param) {
282
-			var q = doc.location.search || doc.location.hash;
283
-			if (q) {
284
-				if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
285
-				if (param == null) {
286
-					return urlEncodeIfNecessary(q);
287
-				}
288
-				var pairs = q.split("&");
289
-				for (var i = 0; i < pairs.length; i++) {
290
-					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
291
-						return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
292
-					}
293
-				}
294
-			}
295
-			return "";
296
-		}
297
-	};
298
-}();
299 1
deleted file mode 100644
... ...
@@ -1,5 +0,0 @@
1
-/* Modernizr 2.0.4 (Custom Build) | MIT & BSD
2
- * Contains: video | iepp | respond | mq | cssclasses | teststyles | testprop | testallprops | prefixes | domprefixes | load
3
- * Build URL: http://j.mp/m1H1Y1
4
- */
5
-;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+o.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(n.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.4",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),o="Webkit Moz O ms Khtml".split(" "),p={},q={},r={},s=[],t=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},u=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;t("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)},p.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c};for(var E in p)x(p,E)&&(v=E.toLowerCase(),e[v]=p[E](),s.push((e[v]?"":"no-")+v));y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=n,e._domPrefixes=o,e.mq=u,e.testProp=function(a){return C([a])},e.testAllProps=D,e.testStyles=t,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+s.join(" "):"");return e}(this,this.document),function(a,b){function u(){r(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=b;if(!b){var c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=j.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,g,i;for(;d<c;d++)e=b[d],f=e.href,g=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!h[f]&&(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(f)||f.replace(RegExp.$1,"").split("/")[0]===a.location.host?l.push({href:f,media:g}):h[f]=!0);n()},n=function(){if(l.length){var a=l.shift();s(a.href,function(b){o(b,a.href,a.media),h[a.href]=!0,n()})}},o=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]+\{[^\}\{]+\})+/gi),g=d&&d.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,f.push(h(a))):(l=d[j].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],e.push({media:m.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:f.length-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}r()},p,q,r=function(a){var b="clientWidth",h=d[b],l=c.compatMode==="CSS1Compat"&&h||c.body[b]||h,m={},n=c.createDocumentFragment(),o=k[k.length-1],s=(new Date).getTime();if(a&&p&&s-p<i)clearTimeout(q),q=setTimeout(r,i);else{p=s;for(var t in e){var u=e[t];if(!u.minw&&!u.maxw||(!u.minw||u.minw&&l>=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css",!a.e&&(w||r)?function a(b){m(function(){if(!d)try{b.sheet.cssRules.length?(d=1,j()):a(b)}catch(c){c.code==1e3||c.message=="security"||c.message=="denied"?(d=1,m(function(){j()},0)):a(b)}},0)}(c):(c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload()),m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return typeof a=="object"},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
6 1
deleted file mode 100644
... ...
@@ -1,143 +0,0 @@
1
-function getNav(){
2
-  var mobileNav = $('body > nav fieldset[role=site-search]').after('<fieldset role="mobile-nav"></fieldset>').next().append('<select></select>');
3
-  mobileNav.children('select').append('<option value="">Navigate&hellip;</option>');
4
-  $($('body > nav ul[role=main-nav] a')).each(function(link) {
5
-    mobileNav.children('select').append('<option value="'+link.href+'">&bull; '+link.text+'</option>')
6
-  });
7
-  mobileNav.children('select').bind('change', function(event){
8
-    if (event.target.value) window.location.href = event.target.value;
9
-  });
10
-}
11
-function addSidebarToggler() {
12
-  $('#articles').before('<a href="#" class="toggle-sidebar">&raquo;</a>').previous().bind('click', function(e){
13
-    e.preventDefault();
14
-    if($('body').hasClass('collapse-sidebar')){
15
-      $('body').removeClass('collapse-sidebar');
16
-      e.target.innerHTML = '&raquo;';
17
-    } else {
18
-      $('body').addClass('collapse-sidebar');
19
-      e.target.innerHTML = '&laquo;';
20
-    }
21
-  });
22
-}
23
-function testFeatures() {
24
-  var features = ['maskImage'];
25
-  $(features).map(function(feature){
26
-    if (Modernizr.testAllProps(feature)) {
27
-      $('html').addClass(feature);
28
-    } else {
29
-      $('html').addClass('no-'+feature);
30
-    }
31
-  });
32
-  if ("placeholder" in document.createElement("input")) {
33
-    $('html').addClass('placeholder');
34
-  } else {
35
-    $('html').addClass('no-placeholder');
36
-  }
37
-}
38
-
39
-function addCodeLineNumbers(){
40
-  if (navigator.appName == 'Microsoft Internet Explorer') { return }
41
-  $('div.highlight pre code').each(function(el){ addDivLines(el); });
42
-  $('div.highlight, div.gist-highlight').each(function(code){
43
-    var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">';
44
-    var lineNumbers = '<pre class="line-numbers">';
45
-    var tableMiddle = '</pre></td><td class="code" width="100%">';
46
-    var tableEnd = '</td></tr></tbody></table>';
47
-    var count = $('div.line', code).length;
48
-    for (i=1;i<=count; i++){
49
-      lineNumbers += '<span class="line">'+i+'</span>\n';
50
-    }
51
-    table = tableStart + lineNumbers + tableMiddle + '<pre>'+$('pre', code).html()+'</pre>' + tableEnd;
52
-    $(code).html(table);
53
-  });
54
-}
55
-function addDivLines(el){
56
-  var content = $(el).html();
57
-  var lines = content.replace(/\s*$/g, '').split(/\n/);
58
-  var count = lines.length;
59
-  $(lines).each(function(line, index){
60
-    if(line == '') line = ' ';
61
-    lines[index] = '<div class="line">' + line + '</div>';
62
-  });
63
-  $(el).html(lines.join(''));
64
-}
65
-
66
-function flashVideoFallback(){
67
-  var flashplayerlocation = "/assets/jwplayer/player.swf",
68
-  flashplayerskin = "/assets/jwplayer/glow/glow.xml";
69
-  $('video').each(function(video){
70
-    video = $(video);
71
-    if(!Modernizr.video.h264 && swfobject.getFlashPlayerVersion() || window.location.hash.indexOf("flash-test") != -1){
72
-      video.children('source[src$=mp4]').first().map(function(source){;
73
-        var src = $(source).attr('src'),
74
-        id = 'video_'+Math.round(1 + Math.random()*(100000)),
75
-        width = video.attr('width'),
76
-        height = parseInt(video.attr('height')) + 30;
77
-        video.after('<div class="flash-video"><div><div id='+id+'>');
78
-        swfobject.embedSWF(flashplayerlocation, id, width, height + 30, "9.0.0",
79
-          { file : src, image : video.attr('poster'), skin : flashplayerskin } ,
80
-          { movie : src, wmode : "opaque", allowfullscreen : "true" });
81
-      });
82
-      video.remove();
83
-    }
84
-  });
85
-}
86
-
87
-function wrapFlashVideos(){
88
-  $('object').each(function(object){
89
-    object = $(object);
90
-    if(object.children('param[name=movie]')){
91
-      var wrapper = object.before('<div class="flash-video"><div>').previous();
92
-      $(wrapper).children().append(object);
93
-    }
94
-  });
95
-  $('iframe[src*=vimeo],iframe[src*=youtube]').each(function(iframe){
96
-    iframe = $(iframe);
97
-    var wrapper = iframe.before('<div class="flash-video"><div>').previous();
98
-    $(wrapper).children().append(iframe);
99
-  });
100
-}
101
-
102
-$.domReady(function(){
103
-  testFeatures();
104
-  wrapFlashVideos();
105
-  flashVideoFallback();
106
-  addCodeLineNumbers();
107
-  getNav();
108
-  addSidebarToggler();
109
-});
110
-
111
-// iOS scaling bug fix
112
-// Rewritten version
113
-// By @mathias, @cheeaun and @jdalton
114
-// Source url: https://gist.github.com/901295
115
-(function(doc) {
116
-  var addEvent = 'addEventListener',
117
-  type = 'gesturestart',
118
-  qsa = 'querySelectorAll',
119
-  scales = [1, 1],
120
-  meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
121
-  function fix() {
122
-    meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
123
-    doc.removeEventListener(type, fix, true);
124
-  }
125
-  if ((meta = meta[meta.length - 1]) && addEvent in doc) {
126
-    fix();
127
-    scales = [.25, 1.6];
128
-    doc[addEvent](type, fix, true);
129
-  }
130
-}(document));
131
-
132
-/*!	SWFObject v2.2 modified by Brandon Mathis to contain only what is necessary to dynamically embed flash objects
133
-  * Uncompressed source in javascripts/libs/swfobject-dynamic.js
134
-  * <http://code.google.com/p/swfobject/>
135
-	released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
136
-*/
137
-var swfobject=function(){function s(a,b,d){var q,k=n(d);if(g.wk&&g.wk<312)return q;if(k){if(typeof a.id==l)a.id=d;if(g.ie&&g.win){var e="",c;for(c in a)if(a[c]!=Object.prototype[c])c.toLowerCase()=="data"?b.movie=a[c]:c.toLowerCase()=="styleclass"?e+=' class="'+a[c]+'"':c.toLowerCase()!="classid"&&(e+=" "+c+'="'+a[c]+'"');c="";for(var f in b)b[f]!=Object.prototype[f]&&(c+='<param name="'+f+'" value="'+b[f]+'" />');k.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+e+">"+c+
138
-"</object>";q=n(a.id)}else{f=i.createElement(o);f.setAttribute("type",m);for(var h in a)a[h]!=Object.prototype[h]&&(h.toLowerCase()=="styleclass"?f.setAttribute("class",a[h]):h.toLowerCase()!="classid"&&f.setAttribute(h,a[h]));for(e in b)b[e]!=Object.prototype[e]&&e.toLowerCase()!="movie"&&(a=f,c=e,h=b[e],d=i.createElement("param"),d.setAttribute("name",c),d.setAttribute("value",h),a.appendChild(d));k.parentNode.replaceChild(f,k);q=f}}return q}function n(a){var b=null;try{b=i.getElementById(a)}catch(d){}return b}
139
-function t(a){var b=g.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function u(a){return/[\\\"<>\.;]/.exec(a)!=null&&typeof encodeURIComponent!=l?encodeURIComponent(a):a}var l="undefined",o="object",m="application/x-shockwave-flash",v=window,i=document,j=navigator,g=function(){var a=typeof i.getElementById!=l&&typeof i.getElementsByTagName!=l&&typeof i.createElement!=l,
140
-b=j.userAgent.toLowerCase(),d=j.platform.toLowerCase(),g=d?/win/.test(d):/win/.test(b),d=d?/mac/.test(d):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,k=!+"\u000b1",e=[0,0,0],c=null;if(typeof j.plugins!=l&&typeof j.plugins["Shockwave Flash"]==o){if((c=j.plugins["Shockwave Flash"].description)&&!(typeof j.mimeTypes!=l&&j.mimeTypes[m]&&!j.mimeTypes[m].enabledPlugin))k=!1,c=c.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(c.replace(/^(.*)\..*$/,"$1"),
141
-10),e[1]=parseInt(c.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(c)?parseInt(c.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof v.ActiveXObject!=l)try{var f=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(f&&(c=f.GetVariable("$version")))k=!0,c=c.split(" ")[1].split(","),e=[parseInt(c[0],10),parseInt(c[1],10),parseInt(c[2],10)]}catch(h){}return{w3:a,pv:e,wk:b,ie:k,win:g,mac:d}}();return{embedSWF:function(a,b,d,i,k,e,c,f,h){var j={success:!1,id:b};if(g.w3&&!(g.wk&&g.wk<312)&&
142
-a&&b&&d&&i&&k){d+="";i+="";var p={};if(f&&typeof f===o)for(var m in f)p[m]=f[m];p.data=a;p.width=d;p.height=i;a={};if(c&&typeof c===o)for(var n in c)a[n]=c[n];if(e&&typeof e===o)for(var r in e)typeof a.flashvars!=l?a.flashvars+="&"+r+"="+e[r]:a.flashvars=r+"="+e[r];if(t(k))b=s(p,a,b),j.success=!0,j.ref=b}h&&h(j)},ua:g,getFlashPlayerVersion:function(){return{major:g.pv[0],minor:g.pv[1],release:g.pv[2]}},hasFlashPlayerVersion:t,createSWF:function(a,b,d){if(g.w3)return s(a,b,d)},getQueryParamValue:function(a){var b=
143
-i.location.search||i.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(a==null)return u(b);for(var b=b.split("&"),d=0;d<b.length;d++)if(b[d].substring(0,b[d].indexOf("="))==a)return u(b[d].substring(b[d].indexOf("=")+1))}return""}}}();
144 1
deleted file mode 100644
... ...
@@ -1,56 +0,0 @@
1
-function pinboardNS_fetch_script(url) {
2
-  //document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>');
3
-  (function(){
4
-    var pinboardLinkroll = document.createElement('script');
5
-    pinboardLinkroll.type = 'text/javascript';
6
-    pinboardLinkroll.async = true;
7
-    pinboardLinkroll.src = url;
8
-    document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll);
9
-  })();
10
-}
11
-
12
-function pinboardNS_show_bmarks(r) {
13
-  var lr = new Pinboard_Linkroll();
14
-  lr.set_items(r);
15
-  lr.show_bmarks();
16
-}
17
-
18
-function Pinboard_Linkroll() {
19
-  var items;
20
-
21
-  this.set_items = function(i) {
22
-    this.items = i;
23
-  }
24
-  this.show_bmarks = function() {
25
-    var lines = [];
26
-    for (var i = 0; i < this.items.length; i++) {
27
-      var item = this.items[i];
28
-      var str = this.format_item(item);
29
-      lines.push(str);
30
-    }
31
-    document.getElementById(linkroll).innerHTML = lines.join("\n");
32
-  }
33
-  this.cook = function(v) {
34
-    return v.replace('<', '&lt;').replace('>', '&gt>');
35
-  }
36
-
37
-  this.format_item = function(it) {
38
-    var str = "<li class=\"pin-item\">";
39
-    if (!it.d) { return; }
40
-    str += "<p><a class=\"pin-title\" href=\"" + this.cook(it.u) + "\">" + this.cook(it.d) + "</a>";
41
-    if (it.n) {
42
-      str += "<span class=\"pin-description\">" + this.cook(it.n) + "</span>\n";
43
-    }
44
-    if (it.t.length > 0) {
45
-      for (var i = 0; i < it.t.length; i++) {
46
-        var tag = it.t[i];
47
-        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> ";
48
-      }
49
-    }
50
-    str += "</p></li>\n";
51
-    return str;
52
-  }
53
-}
54
-Pinboard_Linkroll.prototype = new Pinboard_Linkroll();
55
-pinboardNS_fetch_script("http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count);
56
-
57 1
deleted file mode 100644
... ...
@@ -1,80 +0,0 @@
1
-// JSON-P Twitter fetcher for Octopress
2
-// (c) Brandon Mathis // MIT Lisence
3
-function getTwitterFeed(user, count, replies) {
4
-  feed = new jXHR();
5
-  feed.onerror = function (msg,url) {
6
-    $('#tweets li.loading').addClass('error').text("Twitter's busted");
7
-  }
8
-  feed.onreadystatechange = function(data){
9
-    if (feed.readyState === 4) {
10
-      var tweets = new Array();
11
-      for (i in data){
12
-        if(tweets.length < count){
13
-          if(replies || data[i].in_reply_to_user_id == null){
14
-            tweets.push(data[i]);
15
-          }
16
-        }
17
-      }
18
-      showTwitterFeed(tweets, user);
19
-    }
20
-  };
21
-  feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+(parseInt(count)+60)+"&callback=?");
22
-  feed.send();
23
-}
24
-
25
-function showTwitterFeed(tweets, twitter_user){
26
-  var timeline = document.getElementById('tweets');
27
-  timeline.innerHTML='';
28
-  for (t in tweets){
29
-    timeline.innerHTML+='<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>'))+'</p>'+'</li>';
30
-  }
31
-}
32
-function linkifyTweet(text){
33
-  return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>')
34
-    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
35
-    .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
36
-}
37
-
38
-
39
-
40
-// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License | http://mulletxhr.com/
41
-// uncompressed version available in source/javascripts/libs/jXHR.js
42
-(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
43
-
44
-
45
-/* Sky Slavin, Ludopoli. MIT license.  * based on JavaScript Pretty Date * Copyright (c) 2008 John Resig (jquery.com) * Licensed under the MIT license.  */
46
-
47
-function prettyDate(time) {
48
-  if (navigator.appName == 'Microsoft Internet Explorer') {
49
-    return "<span>&infin;</span>"; // because IE date parsing isn't fun.
50
-  };
51
-
52
-  var say = {};
53
-  say.just_now = " now",
54
-  say.minute_ago = "1m",
55
-  say.minutes_ago = "m",
56
-  say.hour_ago = "1h",
57
-  say.hours_ago = "h",
58
-  say.yesterday = "1d",
59
-  say.days_ago = "d",
60
-  say.weeks_ago = "w"
61
-
62
-  var current_date = new Date();
63
-  current_date_time = current_date.getTime();
64
-  current_date_full = current_date_time + (1 * 60000);
65
-  var date = new Date(time);
66
-  var diff = ((current_date_full - date.getTime()) / 1000);
67
-  var day_diff = Math.floor(diff / 86400);
68
-
69
-  if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) return;
70
-
71
-  return day_diff == 0 && (
72
-    diff < 60 && say.just_now ||
73
-    diff < 120 && say.minute_ago ||
74
-    diff < 3600 && Math.floor(diff / 60) + say.minutes_ago ||
75
-    diff < 7200 && say.hour_ago ||
76
-    diff < 86400 && Math.floor(diff / 3600) + say.hours_ago) ||
77
-    day_diff == 1 && say.yesterday ||
78
-    day_diff < 7 && day_diff + say.days_ago ||
79
-    day_diff < 31 && Math.ceil(day_diff / 7) + say.weeks_ago;
80
-}