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 << '/…' 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 | 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 | 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 | 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 | 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 | 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 | 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 →</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 »</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 »</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 | 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 | 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 | 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 | 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 | 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> |
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 |
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> |
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}}/">← 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 →</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=["­","<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…</option>'); |
|
3 |
+ $($('body > nav ul[role=main-nav] a')).each(function(link) { |
|
4 |
+ mobileNav.children('select').append('<option value="'+link.href+'">• '+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">»</a>').previous().bind('click', function(e){ |
|
12 |
+ e.preventDefault(); |
|
13 |
+ if($('body').hasClass('collapse-sidebar')){ |
|
14 |
+ $('body').removeClass('collapse-sidebar'); |
|
15 |
+ e.target.innerHTML = '»'; |
|
16 |
+ } else { |
|
17 |
+ $('body').addClass('collapse-sidebar'); |
|
18 |
+ e.target.innerHTML = '«'; |
|
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('<', '<').replace('>', '>>'); |
|
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>∞</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 …' > 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 << '/…' 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 |
- |
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 |
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; |
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 |
-} |
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 |
-} |
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 |
-} |
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 →</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 »</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 »</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> |
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> |
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> |
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,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> |
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> |
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 |
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> |
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}}/">← 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 →</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=["­","<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…</option>'); |
|
4 |
- $($('body > nav ul[role=main-nav] a')).each(function(link) { |
|
5 |
- mobileNav.children('select').append('<option value="'+link.href+'">• '+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">»</a>').previous().bind('click', function(e){ |
|
13 |
- e.preventDefault(); |
|
14 |
- if($('body').hasClass('collapse-sidebar')){ |
|
15 |
- $('body').removeClass('collapse-sidebar'); |
|
16 |
- e.target.innerHTML = '»'; |
|
17 |
- } else { |
|
18 |
- $('body').addClass('collapse-sidebar'); |
|
19 |
- e.target.innerHTML = '«'; |
|
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('<', '<').replace('>', '>>'); |
|
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>∞</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 |
-} |