From 8698a276f937cb1cd6f67f7f213e2ea438500d7e Mon Sep 17 00:00:00 2001 From: Brandon Mathis Date: Mon, 30 May 2011 00:30:16 -0400 Subject: [PATCH] Cleaned out public from repository, updated gitignore, added syntax highlighting tests, improved syntax highlighting and styling of pre blocks. Overriding dynamic gist styling. Added a plugin for pygments caching which should speed things up terrifically. added ender.js as a lightweight way of scripting the DOM, events, etc. Some general typography and semantic html improvements. --- .gitignore | 8 +- Gemfile | 3 +- Gemfile.lock | 23 +- Guardfile | 3 +- Rakefile | 5 +- _config.yml | 10 +- _plugins/blockquote.rb | 109 ++ _plugins/category.rb | 65 + _plugins/custom_filters.rb | 7 +- _plugins/iterator.rb | 49 + _plugins/pygments_cache_patch.rb | 30 + public/2009/11/13/hello-world/index.html | 160 -- public/2011/03/14/test-post/index.html | 149 -- .../2011/04/07/test-of-typography/index.html | 199 --- public/about/index.html | 154 -- public/atom.xml | 103 -- public/fonts/adellebasic_bold-webfont.eot | Bin 13694 -> 0 bytes public/fonts/adellebasic_bold-webfont.svg | 139 -- public/fonts/adellebasic_bold-webfont.ttf | Bin 24072 -> 0 bytes public/fonts/adellebasic_bold-webfont.woff | Bin 15604 -> 0 bytes public/images/code_bg.png | Bin 239 -> 0 bytes public/images/rss.png | Bin 504 -> 0 bytes public/images/search.png | Bin 333 -> 0 bytes public/index.html | 207 --- .../libs/DOMAssistantCompressed-2.8.js | 4 - .../libs/ios-viewport-scaling-bug-fix.js | 20 - public/javascripts/libs/modernizr-1.7.min.js | 2 - public/javascripts/libs/respond.js | 8 - public/javascripts/libs/selectivizr-min.js | 5 - public/javascripts/octopress.js | 0 public/javascripts/pinboard.js | 52 - public/javascripts/twitter.js | 70 - public/sitemap.xml | 35 - public/stylesheets/screen.css | 1 - sass/themes/classic/_partials.scss | 5 +- sass/themes/classic/core/_layout.scss | 2 +- sass/themes/classic/core/_theme.scss | 67 +- sass/themes/classic/core/_typography.scss | 11 +- sass/themes/classic/partials/_pinboard.scss | 15 + sass/themes/classic/partials/_shared.scss | 12 - sass/themes/classic/partials/_sidebar.scss | 36 +- sass/themes/classic/partials/_syntax.scss | 432 ++--- sass/themes/classic/partials/_twitter.scss | 60 +- source/_includes/article.html | 35 +- source/_includes/footer.html | 6 +- source/_includes/head.html | 23 +- source/_includes/sidebar.html | 4 +- source/_layouts/archive_monthly.html | 19 + source/_layouts/archive_yearly.html | 25 + source/_layouts/default.html | 15 +- source/_layouts/page.html | 3 + source/_layouts/post.html | 1 + source/_posts/2009-11-13-hello-world.markdown | 6 +- source/about.haml | 1 + source/archive.html | 24 + source/index.html | 1 - .../libs/DOMAssistantCompressed-2.8.js | 4 - source/javascripts/libs/ender.js | 1497 ++++++++++++++++ source/javascripts/libs/ender.min.js | 8 + .../libs/ie/DOMAssistantComplete-2.8.js | 1529 +++++++++++++++++ source/javascripts/libs/ie/respond.js | 292 ++++ .../javascripts/libs/ie/selectivizr-1.0.1.js | 5 + .../libs/ios-viewport-scaling-bug-fix.js | 28 +- source/javascripts/libs/jXHR.js | 85 + source/javascripts/libs/json2.js | 481 ++++++ source/javascripts/libs/modernizr-1.7.js | 964 +++++++++++ source/javascripts/libs/modernizr-1.7.min.js | 2 - source/javascripts/libs/respond.js | 8 - source/javascripts/libs/selectivizr-min.js | 5 - source/javascripts/pinboard.js | 8 +- source/javascripts/syntax-helper.js | 30 + source/javascripts/twitter.js | 14 +- source/test/syntax.html | 397 +++++ source/test/syntax.markdown | 228 --- 74 files changed, 6017 insertions(+), 1991 deletions(-) create mode 100644 _plugins/blockquote.rb create mode 100644 _plugins/category.rb create mode 100644 _plugins/iterator.rb create mode 100644 _plugins/pygments_cache_patch.rb delete mode 100644 public/2009/11/13/hello-world/index.html delete mode 100644 public/2011/03/14/test-post/index.html delete mode 100644 public/2011/04/07/test-of-typography/index.html delete mode 100644 public/about/index.html delete mode 100644 public/atom.xml delete mode 100644 public/fonts/adellebasic_bold-webfont.eot delete mode 100644 public/fonts/adellebasic_bold-webfont.svg delete mode 100644 public/fonts/adellebasic_bold-webfont.ttf delete mode 100644 public/fonts/adellebasic_bold-webfont.woff delete mode 100644 public/images/code_bg.png delete mode 100644 public/images/rss.png delete mode 100644 public/images/search.png delete mode 100644 public/index.html delete mode 100644 public/javascripts/libs/DOMAssistantCompressed-2.8.js delete mode 100644 public/javascripts/libs/ios-viewport-scaling-bug-fix.js delete mode 100644 public/javascripts/libs/modernizr-1.7.min.js delete mode 100644 public/javascripts/libs/respond.js delete mode 100644 public/javascripts/libs/selectivizr-min.js delete mode 100644 public/javascripts/octopress.js delete mode 100644 public/javascripts/pinboard.js delete mode 100644 public/javascripts/twitter.js delete mode 100644 public/sitemap.xml delete mode 100644 public/stylesheets/screen.css create mode 100644 sass/themes/classic/partials/_pinboard.scss delete mode 100644 sass/themes/classic/partials/_shared.scss create mode 100644 source/_layouts/archive_monthly.html create mode 100644 source/_layouts/archive_yearly.html create mode 100644 source/archive.html delete mode 100644 source/javascripts/libs/DOMAssistantCompressed-2.8.js create mode 100644 source/javascripts/libs/ender.js create mode 100644 source/javascripts/libs/ender.min.js create mode 100644 source/javascripts/libs/ie/DOMAssistantComplete-2.8.js create mode 100644 source/javascripts/libs/ie/respond.js create mode 100644 source/javascripts/libs/ie/selectivizr-1.0.1.js create mode 100644 source/javascripts/libs/jXHR.js create mode 100644 source/javascripts/libs/json2.js create mode 100644 source/javascripts/libs/modernizr-1.7.js delete mode 100644 source/javascripts/libs/modernizr-1.7.min.js delete mode 100644 source/javascripts/libs/respond.js delete mode 100755 source/javascripts/libs/selectivizr-min.js create mode 100644 source/javascripts/syntax-helper.js create mode 100644 source/test/syntax.html delete mode 100644 source/test/syntax.markdown diff --git a/.gitignore b/.gitignore index 8642c40..234b790 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,11 @@ site .bundle .DS_Store .sass-cache -test source/_stash source/stylesheets +source/javascripts/libs/node_modules +source/javascripts/libs/syntax-highlighter vendor/ruby -vendor/ruby -vendor/ruby +_cache +.gist_cache +public diff --git a/Gemfile b/Gemfile index f904d26..b7473d1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source :rubygems +source "http://rubygems.org" gem 'rake' gem 'jekyll' @@ -8,6 +8,5 @@ gem 'haml', '>= 3.1' gem 'compass', '>= 0.11' gem 'rubypants' gem 'rb-fsevent' -gem 'guard-shell' gem 'guard-livereload' gem 'serve' diff --git a/Gemfile.lock b/Gemfile.lock index e88c863..e8ce6a8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,7 +3,7 @@ GEM specs: RedCloth (4.2.7) activesupport (3.0.7) - addressable (2.2.5) + addressable (2.2.6) chunky_png (1.2.0) classifier (1.3.3) fast-stemmer (>= 1.0.0) @@ -24,10 +24,8 @@ GEM em-websocket (~> 0.2.0) guard (>= 0.2.2) json (~> 1.5.1) - guard-shell (0.1.1) - guard (>= 0.2.0) haml (3.1.1) - i18n (0.4.2) + i18n (0.6.0) jekyll (0.10.0) classifier (>= 1.3.1) directory_watcher (>= 1.1.1) @@ -37,19 +35,21 @@ GEM liquid (2.2.2) maruku (0.6.0) syntax (>= 1.0.0) - rack (1.2.2) - rake (0.8.7) + rack (1.3.0) + rake (0.9.0) rb-fsevent (0.4.0) rdiscount (1.6.8) rubypants (0.2.0) sass (3.1.1) - serve (1.0.0) - activesupport (~> 3.0.1) - i18n (~> 0.4.1) - rack (~> 1.2.1) - tzinfo (~> 0.3.23) + serve (1.1.0) + activesupport (~> 3.0.7) + i18n (~> 0.6.0) + rack (~> 1.3.0) + tilt (~> 1.3.1) + tzinfo (~> 0.3.27) syntax (1.0.0) thor (0.14.6) + tilt (1.3.2) tzinfo (0.3.27) PLATFORMS @@ -59,7 +59,6 @@ DEPENDENCIES RedCloth compass (>= 0.11) guard-livereload - guard-shell haml (>= 3.1) jekyll rake diff --git a/Guardfile b/Guardfile index 9fe2858..ea16c62 100644 --- a/Guardfile +++ b/Guardfile @@ -1,4 +1,3 @@ guard 'livereload', :api_version => '1.6' do - watch(/public\/stylesheets\/(.*)\.css/); - watch(/public\/(.*)\.(js|html|png|jpg|gif|jpeg|ttf|otf|woff|svg)/i); + watch(/public\/\S[css|js|html|png|jpg|gif]/) end diff --git a/Rakefile b/Rakefile index 6834e4a..caec0ce 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,5 @@ require "rubygems" -require "bundler" -Bundler.setup +require "bundler/setup" port = "4000" # preview project port eg. http://localhost:4000 site = "public" # compiled site directory @@ -104,7 +103,7 @@ end desc "Watch the site and regenerate when it changes" task :watch do - system "trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; sleep 0.5; compass watch & compassPid=$!; guard & guardPid=$!; wait" + system "trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; compass watch & compassPid=$!; guard & guardPid=$!; wait" end desc "generate and deploy website via rsync" diff --git a/_config.yml b/_config.yml index 0ee0141..81c3eb8 100644 --- a/_config.yml +++ b/_config.yml @@ -1,8 +1,7 @@ source: source destination: public markdown: rdiscount -pygments: false -permalink: pretty +pygments: true url: http://yoursite.com title: My Octopress Blog @@ -10,7 +9,7 @@ author: Your Name email: you@domain.com #Add your email (optional) for the atom feed simple_search: http://google.com/search -recent_posts: 10 +recent_posts: 20 twitter_user: imathis tweet_count: 3 @@ -19,9 +18,8 @@ show_replies: false delicious_user: delicious_count: 3 -pinboard_user: designenthusiast +pinboard_user: imathis pinboard_count: 3 -disqus_short_name: imathis - +#disqus_short_name: designenthusiast google_analytics_tracking_id: diff --git a/_plugins/blockquote.rb b/_plugins/blockquote.rb new file mode 100644 index 0000000..7a88517 --- /dev/null +++ b/_plugins/blockquote.rb @@ -0,0 +1,109 @@ +# +# Author: Josediaz Gonzalez - https://github.com/josegonzalez +# Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb +# Modified by Brandon Mathis +# +require './_plugins/titlecase.rb' +module Jekyll + + # Outputs a string with a given attribution as a quote + # + # {% blockquote John Paul Jones %} + # Monkeys! + # {% endblockquote %} + # ... + #
+ # Monkeys! + #
+ # John Paul Jones + #
+ # + class Blockquote < Liquid::Block + FullCiteWithTitle = /([\w\s]+)(https?:\/\/)(\S+\s)([\w\s]+)/i + FullCite = /([\w\s]+)(https?:\/\/)(\S+)/i + Author = /([\w\s]+)/ + + def initialize(tag_name, markup, tokens) + @by = nil + @source = nil + @title = nil + if markup =~ FullCiteWithTitle + @by = $1 + @source = $2 + $3 + @title = $4.titlecase + elsif markup =~ FullCite + @by = $1 + @source = $2 + $3 + elsif markup =~ Author + @by = $1 + end + super + end + + def render(context) + output = super + if @by.nil? + '

' + output.join + '

' + elsif !@title.nil? + '

' + output.join + '

' + '

' + @by + '' + '' + @title + '

' + elsif !@source.nil? + '

' + output.join + '

' + '

' + @by + '' + 'source

' + else + '

' + output.join + '

' + '

' + @by + '

' + end + end + end + + # Outputs a string with a given attribution as a pullquote + # + # {% blockquote John Paul Jones %} + # Monkeys! + # {% endblockquote %} + # ... + #
+ # Monkeys! + #
+ # John Paul Jones + #
+ # + class Pullquote < Liquid::Block + FullCiteWithTitle = /([\w\s]+)(http:\/\/|https:\/\/)(\S+)([\w\s]+)/i + FullCite = /([\w\s]+)(http:\/\/|https:\/\/)(\S+)/i + Author = /([\w\s]+)/ + + def initialize(tag_name, markup, tokens) + @by = nil + @source = nil + @title = nil + if markup =~ FullCiteWithTitle + @by = $1 + @source = $2 + $3 + @title = $4 + elsif markup =~ FullCite + @by = $1 + @source = $2 + $3 + elsif markup =~ Author + @by = $1 + end + super + end + + def render(context) + output = super + if @by.nil? + '

' + output.join + '

' + elsif @title + '

' + output.join + '

' + '

' + @by + '' + ' ' + @title + '

' + elsif @source + '

' + output.join + '

' + '

' + @by + '' + ' source

' + elsif @by + '

' + output.join + '

' + '

' + @by + '

' + end + end + end +end + +Liquid::Template.register_tag('blockquote', Jekyll::Blockquote) +Liquid::Template.register_tag('pullquote', Jekyll::Pullquote) + + diff --git a/_plugins/category.rb b/_plugins/category.rb new file mode 100644 index 0000000..b9accde --- /dev/null +++ b/_plugins/category.rb @@ -0,0 +1,65 @@ +module Jekyll + + class CategoryIndex < Page + def initialize(site, base, dir, category) + @site = site + @base = base + @dir = dir + @name = 'index.html' + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'category_index.html') + self.data['category'] = category + + category_title_prefix = site.config['category_title_prefix'] || 'Category: ' + self.data['title'] = "#{category_title_prefix}#{category}" + end + end + + class CategoryList < Page + def initialize(site, base, dir, categories) + @site = site + @base = base + @dir = dir + @name = 'index.html' + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'category_list.html') + self.data['categories'] = categories + end + end + + class CategoryGenerator < Generator + safe true + + def generate(site) + if site.layouts.key? 'category_index' + dir = site.config['category_dir'] || 'categories' + site.categories.keys.each do |category| + write_category_index(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category) + end + end + + if site.layouts.key? 'category_list' + dir = site.config['category_dir'] || 'categories' + write_category_list(site, dir, site.categories.keys.sort) + end + end + + def write_category_index(site, dir, category) + index = CategoryIndex.new(site, site.source, dir, category) + index.render(site.layouts, site.site_payload) + index.write(site.dest) + site.static_files << index + end + + def write_category_list(site, dir, categories) + index = CategoryList.new(site, site.source, dir, categories) + index.render(site.layouts, site.site_payload) + index.write(site.dest) + site.static_files << index + end + end + +end + diff --git a/_plugins/custom_filters.rb b/_plugins/custom_filters.rb index 84f1caa..1ee39fa 100644 --- a/_plugins/custom_filters.rb +++ b/_plugins/custom_filters.rb @@ -50,6 +50,11 @@ module OctopressFilters end end end + #YearlyPost = Struct.new('YearlyPost', :year, :posts) + def yearly_posts(site) + #site.posts.reverse.group_by { |p| p.date.strftime("%Y") }.map { |k,v| YearlyPost.new(k,v) } + site + end end - Liquid::Template.register_filter OctopressFilters + diff --git a/_plugins/iterator.rb b/_plugins/iterator.rb new file mode 100644 index 0000000..da0b5f0 --- /dev/null +++ b/_plugins/iterator.rb @@ -0,0 +1,49 @@ +## +## Author: Jose Gonzalez - https://github.com/josegonzalez +## Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/iterator.rb +## + +#module Jekyll + #class Site + #alias_method :orig_site_payload, :site_payload + + ## Constuct an array of hashes that will allow the user, using Liquid, to + ## iterate through the keys of _kv_hash_ and be able to iterate through the + ## elements under each key. + ## + ## Example: + ## categories = { 'Ruby' => [, ] } + ## make_iterable(categories, :index => 'name', :items => 'posts') + ## Will allow the user to iterate through all categories and then iterate + ## though each post in the current category like so: + ## {% for category in site.categories %} + ## h1. {{ category.name }} + ##
    + ## {% for post in category.posts %} + ##
  • {{ post.title }}
  • + ## {% endfor %} + ##
+ ## {% endfor %} + ## + ## Returns [ { => , => kv_hash[]}, ... ] + + #def make_iterable(kv_hash, options) + #options = {:index => 'name', :items => 'items'}.merge(options) + #result = [] + #kv_hash.sort.each do |key, value| + #result << { options[:index] => key, options[:items] => value } + #end + #result + #end + + #def site_payload + #payload = orig_site_payload + #payload['site']['iterable'].merge!({ + #'categories' => make_iterable(self.categories, :index => 'name', :items => 'posts'), + #'tags' => make_iterable(self.tags, :index => 'name', :items => 'posts') + #}) + #payload + #end + + #end +#end diff --git a/_plugins/pygments_cache_patch.rb b/_plugins/pygments_cache_patch.rb new file mode 100644 index 0000000..36c78d2 --- /dev/null +++ b/_plugins/pygments_cache_patch.rb @@ -0,0 +1,30 @@ +# +# Author: Raimonds Simanovskis, http://blog.rayapps.com/ +# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb +# + +require 'fileutils' +require 'digest/md5' + +PYGMENTS_CACHE_DIR = File.expand_path('../../_cache', __FILE__) +FileUtils.mkdir_p(PYGMENTS_CACHE_DIR) + +Jekyll::HighlightBlock.class_eval do + def render_pygments(context, code) + if defined?(PYGMENTS_CACHE_DIR) + path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html") + if File.exist?(path) + highlighted_code = File.read(path) + else + highlighted_code = Albino.new(code, @lang).to_s(@options) + File.open(path, 'w') {|f| f.print(highlighted_code) } + end + else + highlighted_code = Albino.new(code, @lang).to_s(@options) + end + output = add_code_tags(highlighted_code, @lang) + output = context["pygments_prefix"] + output if context["pygments_prefix"] + output = output + context["pygments_suffix"] if context["pygments_suffix"] + output + end +end diff --git a/public/2009/11/13/hello-world/index.html b/public/2009/11/13/hello-world/index.html deleted file mode 100644 index b67552e..0000000 --- a/public/2009/11/13/hello-world/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - Hello World! I'm Octopress! - My Octopress Blog - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-

Hello World! I'm Octopress!

-

- - - - - - - - - -

-
- -

Octopress is a blogging framework designed for hackers, based on Jekyll the blog aware static site generator powering Github pages. -If you don’t know what Jekyll is, Jack Moffitt wrote a good summary:

- -

Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control.

- -

Jack Moffitt Blogging with Git Emacs and Jekyll

- -

There’s no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work.

- -

Read the wiki to learn more

-
- - - -
- - -
- -
-
- - - -
-
-

- Copyright © 2011 - Your Name - - Powered by Octopress -

- - - - -
- - - diff --git a/public/2011/03/14/test-post/index.html b/public/2011/03/14/test-post/index.html deleted file mode 100644 index b7aadb0..0000000 --- a/public/2011/03/14/test-post/index.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - Test Post - My Octopress Blog - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-

Test Post

-

- - - - - - - -

-
- -

This is a test!

-
- - - -
- - -
- -
-
- - - -
-
-

- Copyright © 2011 - Your Name - - Powered by Octopress -

- - - - -
- - - diff --git a/public/2011/04/07/test-of-typography/index.html b/public/2011/04/07/test-of-typography/index.html deleted file mode 100644 index 3aa1d70..0000000 --- a/public/2011/04/07/test-of-typography/index.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - Test of Typography - My Octopress Blog - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-

Test of Typography

-

- - - - - - - -

-
- -

In the past I’ve always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten professionally printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.

- -

Why Have Business Cards?

- -

I’m rarely asked for my business card except when I attend conferences, of which I attend one or two each year. As a freelance contractor, I leave work by walking twenty-five feet from my office to the couch. Many of the -people I work for I’ve never met in-person.

- -

When someone gives me their business card, I read it, pocket it, and eventually throw it out — sometimes before I remember to copy the information to my address book (sorry, just being honest). The reality is, with the ubiquity of the internet and with frictionless social networks like Twitter, I can connect with people immediately. So why have business cards?

- - - - -

Inspiration Demands Action

- -

In one of our campfire chats Nathaniel Talbott showed off his business cards which he printed through Moo. They were half the size of regular business cards featuring the company logo on the front, and the url on the back. The unique size of the card intrigued me, and days later I couldn’t stop thinking about designing a set of mini-cards for myself.

- -

cards in a box Moo’s MiniCard’s are very unique. You can print 100 cards, each with a totally different back. With a typical printing service this would be prohibitively expensive, but with Moo the rules are different. This freedom encourages us to go beyond nicely styled contact information and branding. Some clever uses involve offering unique invite codes for a web application, or sharing a photography portfolio with Moo’s Flickr import feature.

- -

I realized that I could print several design iterations and decide later which worked best. Without the pressure to choose a single design, I felt the freedom to create.

- -

The Freedom to Fail

- -

card concepts I could be cheeky and print up half of my cards with my logo on one side and only my Twitter name on the other. For less than $20 for 100 cards, I wasn’t even concerned about possibly screwing up a whole batch. So that’s what I did. I designed cards that were good enough and I printed them. If the cards did’t turn out how I wanted them to, I could improve and print again.

- -

handout cards The process was fun and simple, and as soon as I finished, I wanted to do it again. When my cards arrived, I was absolutely delighted by the print quality and the care put into their presentation. Smartly Moo even included some beautiful promotional cards to hand out when people inevitably ask about mine.

- -

A Second Iteration

- -

After holding the finished product, I began to see how my design could be improved. I learned that Gill Sans is harder to read at a small size in a high contrast print, so I switched to Futura. I showed my cards to some far-sighted friends and adjusted my font size accordingly. I discarded a background gradient (which I should have known wouldn’t translate well to print) in favor of a solid color. Sidenote: On screen, gradients emulate the subtleties of a natural light source, but on a real object it doesn’t make sense and generally looks bad.

- -

I changed my approach choosing a single design with multiple color variations. In the promotional cards Moo sent me, I learned that they do a fantastic job with bright colors and I wanted to use that boldness in my design. I was inspired by what Seth Godin said:

- -

Every interaction is both precious and an opportunity to delight.

- -

MiniCard Holder I pictured sliding a card out of my MiniCard Holder and revealing another brightly-colored card beneath. As I hand someone a card they’ll see the flash of color and realize that their card was special, and different from my other cards. That’s what I want my clients and future clients to feel.

- -

The Final Design

- -

all card designs

- -

The MiniCard’s unique constraints inspired me with a fresh challenge and their pricing model encouraged me to experiment. Instead of treating business cards like a necessary design task, I saw them as a opportunity to release quickly, fail cheaply, and improve. Now when I give someone a business card, it’s something valuable to me, and I hope they’re delighted.

- -

Update: I thought I’d share some other great uses of Moo’s MiniCards. There’s a fantastic Flikr pool, but here are some of my favorites. Enjoy:

- - - -
- - - -
- - -
- -
-
- - - -
-
-

- Copyright © 2011 - Your Name - - Powered by Octopress -

- - - - -
- - - diff --git a/public/about/index.html b/public/about/index.html deleted file mode 100644 index 9e1cd8c..0000000 --- a/public/about/index.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - About Me - My Octopress Blog - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-

About Me

-

- - - - - - - -

-
- -
-

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum.

- -

Ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.

- -

Dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent.

-
- - - -
- - -
- -
-
- - - -
-
-

- Copyright © 2011 - Your Name - - Powered by Octopress -

- - - - -
- - - diff --git a/public/atom.xml b/public/atom.xml deleted file mode 100644 index 816a630..0000000 --- a/public/atom.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - 2011-05-15T18:13:17-04:00 - http://yoursite.com/ - - Your Name - - you@domain.com - - - - - - Test of Typography - - 2011-04-07T19:17:00-04:00 - http://yoursite.com/2011/04/07/test-of-typography - <p>In the past I've always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten <em>professionally</em> printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.</p> - -<h2>Why Have Business Cards?</h2> - -<p>I'm rarely asked for my business card except when I attend conferences, of which I attend one or two each year. As a freelance contractor, I leave work by walking twenty-five feet from my office to the couch. Many of the -people I work for I've never met in-person.</p> - -<p>When someone gives me their business card, I read it, pocket it, and eventually throw it out &mdash; sometimes before I remember to copy the information to my address book (sorry, just being honest). The reality is, with the ubiquity of the internet and with frictionless social networks like Twitter, I can connect with people immediately. So why have business cards?</p> - -<!-- more --> - - -<h3>Inspiration Demands Action</h3> - -<p>In one of our campfire chats <a href="http://twitter.com/NTalbott">Nathaniel Talbott</a> showed off his business cards which he printed through <a href="http://moo.com">Moo</a>. They were half the size of regular business cards featuring the company logo on the front, and the url on the back. The unique size of the card intrigued me, and days later I couldn't stop thinking about designing a set of mini-cards for myself.</p> - -<p><img src="http://yoursite.com/content/blog/2010/cards/box.jpg" alt="cards in a box" width="300px" class="right"/> Moo's <a href="http://moo.com/products/minicards.php">MiniCard's</a> are very unique. You can print 100 cards, each with a totally different back. With a typical printing service this would be prohibitively expensive, but with Moo the rules are different. This freedom encourages us to go beyond nicely styled contact information and branding. Some clever uses involve offering unique invite codes for a web application, or sharing a photography portfolio with Moo's Flickr import feature.</p> - -<p>I realized that I could print several design iterations and decide later which worked best. Without the pressure to choose a single design, I felt the freedom to create.</p> - -<h3>The Freedom to Fail</h3> - -<p><img src="http://yoursite.com/content/blog/2010/cards/concepts.jpg" alt="card concepts" width="270px" class="left"/> I could be cheeky and print up half of my cards with my logo on one side and only my Twitter name on the other. For less than $20 for 100 cards, I wasn't even concerned about possibly screwing up a whole batch. So that's what I did. I designed cards that were good enough and I printed them. If the cards did't turn out how I wanted them to, I could improve and print again.</p> - -<p><img src="http://yoursite.com/content/blog/2010/cards/handout.jpg" alt="handout cards" width="220px" class="right"/> The process was fun and simple, and as soon as I finished, I wanted to do it again. When my cards arrived, I was absolutely delighted by the print quality and the care put into their presentation. Smartly Moo even included some beautiful promotional cards to hand out when people inevitably ask about mine.</p> - -<h3>A Second Iteration</h3> - -<p>After holding the finished product, I began to see how my design could be improved. I learned that Gill Sans is harder to read at a small size in a high contrast print, so I switched to Futura. I showed my cards to some far-sighted friends and adjusted my font size accordingly. I discarded a background gradient (which I should have known wouldn't translate well to print) in favor of a solid color. <strong>Sidenote:</strong> On screen, gradients emulate the subtleties of a natural light source, but on a real object it doesn't make sense and generally looks bad.</p> - -<p>I changed my approach choosing a single design with multiple color variations. In the promotional cards Moo sent me, I learned that they do a fantastic job with bright colors and I wanted to use that boldness in my design. I was inspired by what <a href="http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html">Seth Godin said</a>:</p> - -<blockquote><p>Every interaction is both precious and an opportunity to delight.</p></blockquote> - -<p><img src="http://yoursite.com/content/blog/2010/cards/holder.jpg" alt="MiniCard Holder" width="220px" class="right"/> I pictured sliding a card out of my <a href="http://moo.com/products/accessories/holders/moo_minicard_holders">MiniCard Holder</a> and revealing another brightly-colored card beneath. As I hand someone a card they'll see the flash of color and realize that their card was special, and different from my other cards. That's what I want my clients and future clients to feel.</p> - -<h3>The Final Design</h3> - -<p><img src="http://yoursite.com/content/blog/2010/cards/all.jpg" alt="all card designs" width="640px"/></p> - -<p>The MiniCard's unique constraints inspired me with a fresh challenge and their pricing model encouraged me to experiment. Instead of treating business cards like a necessary design task, I saw them as a opportunity to release quickly, fail cheaply, and improve. Now when I give someone a business card, it's something valuable to me, and I hope they're delighted.</p> - -<p><strong>Update:</strong> I thought I'd share some other great uses of Moo's MiniCards. There's a fantastic <a href="http://www.flickr.com/groups/moo/pool/">Flikr pool</a>, but here are some of my favorites. Enjoy:</p> - -<ul> -<li><a href="http://www.flickr.com/photos/lushlampwork/4131018201/in/pool-moo">Product</a> <a href="http://www.flickr.com/photos/lushlampwork/4297224179/in/pool-moo">tags</a></li> -<li><a href="http://www.flickr.com/photos/thisiswoly/4206576342/in/pool-moo">Photography</a> or <a href="http://www.flickr.com/photos/lesleybarnes/4276368956/in/pool-moo">art</a> <a href="http://www.flickr.com/photos/playinprogress/4158223112/in/pool-moo">portfolios</a></li> -<li><a href="http://www.flickr.com/photos/polkadotcreations/4167249758/in/pool-moo">Gift</a> <a href="http://www.flickr.com/photos/22338102@N04/4278114745/in/pool-moo">tags</a></li> -<li><a href="http://www.flickr.com/photos/bcome/4177034036/in/pool-moo">An advent calendar</a></li> -</ul> - - - - - - Test Post - - 2011-03-14T00:00:00-04:00 - http://yoursite.com/2011/03/14/test-post - <p>This is a test!</p> - - - - - Hello World! I'm Octopress! - - 2009-11-13T00:00:00-05:00 - http://yoursite.com/2009/11/13/hello-world - <p><strong>Octopress is a blogging framework designed for hackers</strong>, based on <a href="http://github.com/mojombo/jekyll">Jekyll</a> the blog aware static site generator powering <a href="http://pages.github.com/">Github pages</a>. -If you don't know what Jekyll is, <a href="http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/">Jack Moffitt</a> wrote a good summary:</p> - -<blockquote><p>Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control.</p></blockquote> - -<p><cite><strong>Jack Moffitt</strong> <a href="http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/">Blogging with Git Emacs and Jekyll</a></cite></p> - -<p>There's no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work.</p> - -<p><a href="http://wiki.github.com/imathis/octopress/">Read the wiki to learn more</a></p> - - - - diff --git a/public/fonts/adellebasic_bold-webfont.eot b/public/fonts/adellebasic_bold-webfont.eot deleted file mode 100644 index 5bace32feb1193922a356a5a2c67031776ff5534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13694 zcmZ{~RZtvUur)d}3~qxv4DRj;?(Xgm!9BRk;O_1c+%34fTX0B_5P}Cy?sv|uzyAAj zdp)e`?p3S$p`Uv1AYK5Vk_P|){Rc4Me;5hwe+hgA=mP=%t0}2P0{|h4{}umFgaZIj z0ANsg=B;?*|J43369dEnRsd^&i^g2e_a2si-e}E+R6V6|NjX%fS(+I>az$>%{^)IXTfs_m zy8pWC7nEb`*DWbh`bWmFq#zc?zbTSpnrh7MQq%kq)uXG@)5WAReuI@zSpYA3rv&>` z-Pw*lW>5ru4T~RxzIdOCYK(BkHplFS%9Uo^nyjO{(}d$wB5C`u1nD`{5f^EWnTht@y|y!Dbhc8 z#3{|#EOHDTP~FqBj23<()ck$SyuwvHeFb9ApVGQSh2z9HW^dvYI}LzGPY87aRR|CS zv|ld6gf=_}=U=bYlgRbn^y%fg81v;lB?)ZWu1OpbcPmjlyxy=Dl*xaUfc0CbMr1I2 z5UoVTA|}%u!a(xk5V=uKV2t(mDF;G|;0-jRdX)-FtI-va+*l8!bXgxEPAZB>gu7>L zY@7(&;_gL$v-7fI%|sHLy`w3(9na(2xBv|L?9o+LS69Z@l^$cbM@%{-vQ(%S6|9x6CSjGG0?!p&yrOW9dcF(E5T#rkC%xbsL_m45e6k3bFE)SFUG~| zko`qrKDsff=u*LdmPg2-Y4#qs5`B<^8O7$n^Hbs~Zq1=!R0K?3b817XFT44EQ+r^q-cM_dJ1}Rw`>&nz(iS^@ z!-%h<9z$AQ^5I2V$gq=Ae4RYF69=e=Cp~+4kXi^uPUq*z>P%j|=xlq`XSk_sUcZB!p|qD;Q2&Iby@0X~WbuHB~#ym_Vq zUKj}DkmOO%`z+)#T%kZldjeu=)>`U6B9iiW3V)T=BchC}ldcUAxz{6h@u`aOWw+#B zsuz>d=!6*#weUwV-z^;hHI%ma+~|Odx2)eM0`4aDyhR|-31fJ4@)NGC)0WcOpO)R! zO!6?QF+1gI+VP~QqMn;mNe!z)%%JCuhVZNVq}p#M20>@SHFjW-Gt1B-M^x!WxZq#h9eJ2 z|7&_j&c=Ar{-S5aj?NgVm;F49Ic&=-q?=vXxa*_M2S1cZyTM8=0dqx^JH&k&JSz*t zEhRxH){lpNS)rX|1uEy~3;r36RfzH_4VEj2*X1=pnH6ur2@VD&vj! zssh$J&PhY-_$+&oZeWtp0zWF5Id6t#{n$CJoG|sbQe34vSg-hD`1Qc?V4#=|Oh1Yo zmbj+F4AqmuQXd=j`9Of6`0wxh0x4(dKCm18k7E zr^uFgb9Lth)ZW;wpEfxs{s-pL*6a>|8Zm z^o||iY{h;0*;E4V5Zz%x0RqSBGwVa1{HI_F7Ti0rH!VfkeLi$AI;PgeTXqjy71 z836m>3fezO$_eUFe@W`r1Wl5UAv$s|nYpXCgk*%}ma}R_T5Ynng~AdAexkFnoED?F zqfKE9Qd^L_F&NIl9NH z+Sphk8?!Ckc7pgTS>~^zHlMe7kow({YG;j321W>)iOc=OxtYR%{QGOAXa+1;;yEllU@*nhM-H2$n@HO3tO^LrVu ztXcp|wpCZhZaj6Ci%gv?m+`O_YS6DtQH-sl;7CKM(AK8x6=r4@sFsL&15yf}Y^r04 z25D<$VVL%}i1+g+heTv)YCmLjx_&Y|_*c}6=Tuw=ebP70K&Z3~U5c1(z5W?_C9(P> zESb78^Gv)w_DS5bI@0Fxay(z5+|TGEX5eHC4mT95q^*LbfY=MpR^N!We<_NXvtx_= zKEgrSk+>-$)-3!8E zp50Qw1LBB_Dg}1DhV4-q%xX!=J#Gx?G-0{$@h4@7VJ?bUx4fLt-q;$j32+tcFjOlI zOVG%smG!|TK>sALXv7DGwm`ACTW6Wbg}xU{$TkZC^HG2yg-L!&YzTe6nG^$M?*J%4Z;nhp?uC%wpE%PavJ$w$!0yBI4Jk( zTN8^1xw;2__TlN!An1VZfNs|fe@wEwcRa!qP6j+aPrkN}OA@4kx^svTmo$mDys5UL zpzII}Z$$q2viA<&$>${M?qLG?m%CLlI4+^{LN}HmpINL1H`Oijc?czo*o0!wTBt^)i_D<3v+<}&ZvAVV zd7mzr^wx>TY#SL!_NeKKN_ytP8pWM=<8U8q!GJZJ;K{{!0dB&6{6~yn-vt28+S?!^ zA}iGhjzx{y>%nP`KXhqM-XKnTRHotsW;cqa?d6c?#UR3?lXRET$J4eELvN?ku7&Lg zNa3Efs=|vW^hXaL2E8Y{t`n9j&ZuJ1XPUqU86AA1CbyMm4f^zk^)VOJHsgoj&CG~> zS)&392btlnrb)pa`lYljGp=YLo(I2<_A@nIigkS_a!qUL4Hf~)o=TEVp{}{7pSp%hkD$c{K{eZ z0z&RW3`kT0CKQ<11=VoaJrtq2rDOpKCDivQo8#-c6K2b)MXs;`+s?Ch>E|V@8=nXH!?ZhWZ|v&Y^p^UI#+Tp+D0vB zd7e)HVt$RDBEYEj8IB4QEq+WsQdvO>m@&)w5F&aS?T^QLSuIxWkva^=LHA+I{Kp;m z{!8;)R|&v&LY&h#J!olFl6o26$bkSM&Z3;|1VOP+9-HGs3X3FsEvRjLTa~&vgZ^O#cza?YH2VQk_!lYPoG=`e(rFyrWNQw z&!ZJ~P(sFKMF!?L(K%8Niy~&SQ`>a*LJ5fbl|yez^y))|{0^hEY>+}p)RbybaLPuT zS>CEh2FWaF{oIwaZMZlsMBmVXjIw;RL;wI{^fRK&NuXP&ApP+fp1K(_Lj04NIXE>% zv~Fprk|bHXy?yHBpq8mLA!l#I5#R6?G4!$!yKytFpf7aV5V zdR!Zw0-f`R(S^+RaARoJ)%PJ2@`kE7r%bS*tdPw_ol`$)Mz#{&W{Vtw>&bVvB$i#+MmDfiaSw{gZgTj^m zC31R%AObB8>Jw|PF{d}QeEN!}DviVw<~yCeL$$(!^f!v}tXleZdXHJm#MR!u--wZ$ zK8L>_^zF7ks!VDO!tQIN0+c8yFHO6|L(~hN+R3N*Bx=8@PmBWGR7~6Yb+E~&lIUQb zmNFnFK?@faU!gy*?j0;_v66QCVF!kez!B49>M2upz$R>9fL(1yV_goT`6mjL{4#n0 z(}3CDF|+<|#a(l>9EOUY8IH7rO65Y#&G+fn2;PT9POkZE@!2-S;Y6k(HU5VyrM4zd z*djac4LowwD=MXT=eMy4baKMTk3uNZP;h=bRj6ZIG19rUIZKYPEh{!#LV3_ib!eZ0 zUIr1w1QiW|PZRn(9jOKH;ryuLL-w#`Cb(4KfvV8El=AZzRQFhMGR z)9|7r7IuGI>QfEoB4fd&n`PE7tZ-El=Gr(y+)}s**_q|Ma~VBrxr=^Wn#_sUS?{SZ zE(bkwsKDNm4JhqChN@lJc5}z=)eCCQZe$q|;Gj`CSialRF_P5iYhx0rrAreJFieSY^KlIsexNl z3g65UnPh%|C&a&fuEv!f*04xR9w*7&Mxar`vLO!aY{qA@@Cy$^wO#zmaMWucXBb8m zq=zt*SusC%k!yyD^kdXbjXQN8Wp`Nn84<*Ym``&NwU;;D1c)Jp?+(*Xsa@k%R(Psx z*dp9MQIiw2_-N&-Y-uO4q9=0~B~P*d`8{2sS_M-`DYSL83Y8b51qIe-S;XmIoXV}v zo+``&Y-_H*pBZ1z7<9{h@iJ@m$^sTpSMEYs&^fY#R8WQlcedCU$pX%3>Ta-({>$o1~94qvB4H#7`#?)#v#%=CIn7ZGN#5e)NL( zPWAQX5SDJaF9HX%8^HA<^7Tn&3>9m^4bRwVke6}jj?Ea{!B;)AGs3~b#e(U_*dSH6 zuE@Y6{(V7ObDD)g#GkBXNOTn$xu#L)o(vl0E3nW<%cANZ)n|Y-lJ-P^sTbx!~f09v^VHK8& z2w;8E6FC;;fIDMJ7EchG^EVypOmY#mr|-L)o4<7ta4)b1GX3TX<}8^C#m|Saidac) z7<7QDul50PpE_r}7LW*T>7?@G*sf}oH@kTT;C=}GzD3PFZy7!!^?N!T7%}Y|a(xp5 z_!4o(GMCV<9Y2BE4%#&*j(Gm`z0-2twu%pNG+9gVF-Nd0*O?m4F3&tmO8A5jiF2I- zX{{cBa7NbiY6!y*Qb%*UliLveluoRZ2jUL&_NvZW0^f|ENI<;Adj-62i;gy6Vzn|& zrY~L8Z@n7N?YN%_Y56i{mS&QLQVA6Q)u<~_Sbe`$l>$zLb-_U2zeu|(42sIV$H8`vHG}ZqY#j3aIfe5k5A|>vUR8De%3w(Vg`hG2~qhVp^pa zSDd~iVQsqQ%9*M-e#@VS@jv(^`5PV~*n6coQ=oaM6uG9l5E%QV=yniv*! zj-xvWa~Gm&950nh{yaAfN=R|P1@{M6XPpOi*A@emt7Pp*OnHQ50ELdBi|kmkgT7_fj`K=D z_*F=Rze*=ErYxpS&*E&=5&YB*#SXXz=5_ zyoAsxL2hD{NV#Idyx+qFrxS9a5)3Id*S@2yIT7@{6DXEQ!x+oo{7{95iE8_-avY0~)9znx#Q!66ve66YpZKjnYLiYZ);RrJ0lrmRqk%^ED6{V=nMZ-6S3~9CVZGIeO3lvp6yAJfW{NT#d$b093 zs88LYbN?)kqc%`euqX?S2F4xXzQ=1z&$9G6lw@u`H!MhOosIpgGIo?E1FJxt3@;N` zzgsGqJ;casO~$8EbrZ=XQyoxKe>0%bmfXNW+d1nya*}rI^ZTCOJ)MqElFR5^%`J(u zWkxlL6{Vbf90D{#(cnU_*?DKt|A1b(mZ#epg>xKlPD7xN9+S|@A)LpMbOmGMr;_)) zr{w-)dQd?B#Q>d}v6#AqtCKN|%uS{rCjDpH%Nwqlh*zg2+rP$3b~RG>qn)qa zjyak6j_*mgS!Hem$L9Rp59IUP{+UD4qd790WMIzHtR4-DIR71ikAGu%Qj`4pm>cI1CyHW*RFg>x!eI|ZUNIQWJ9)EUAP2z*))bEb-8Q#=q+NQ1 z&X`FFSpEp1vzN7+%u@%&SwmfsdtxljaA$?rv>%0^>eeZy|L(WdFaX(OLuQtro-S2i_$aw#BpGDPRw*cU-N(23_HI}5Z(cLi4Ip2)!+iMdg{{F!HJ z98nRE(2h{8wVIPjs_*+d#TWzedmMSjuqLePonvwW4X`Yia;G98A$vNFl^^`5%9`&g z_j1$blT^Wm(JWCzWJ1=!If2M+VUEGn&r9JHPh=d@29IJoc>@8XAq+|uhDdyboBk7q zBogi1gp=lJ)IS2@OYPVs(PH&4*>_jt!l6X?{^TYB2g#mZ^pX^EX^F0M`fN3#$0GDN zZbCAV;~4&u$9KThtNsv_yS!!E(}9x;DxbzoNbS=sO^rlKBNbIO@vP+0#XY1W29G4V z-BFw<=iDf8(wL&EDZxGA8%`FkNpL72h8(0Ko*wx=@7}1&@Mv10w@8;6AaRd6(6+sf z#42)8UL&53K8gm~(SuV)v6BCGi%)5@3l;YtM}=6Os*m(jh|Zrhb7_=m?Ed;U!RJ)2 z6t<@57qWFpd;d%y$k;`3kkG?#?jHL-q@yzVXsRd;4>o7z4G>$B==>myqa8$D`^gW< z@R#i{HBxBLYSxEQ#uTxIRB4_D%30;(jXRlp5*mShC~gqznQfE`&DY4|x0065SKa-VcU5 za`^y-Ie%8AFJWnk7p!N74F+#??YyX88JNRk#NpSgqdqR6;qOE8kTZW!9e4r>7gG-5 z7TM`eti&w@mIj;hp*3;>^vL|2p-J-G1e~-KAH_^Y&c$_oSZ=&2fNH;xKldU0>G5&# zhpHj`J-GqlF_-=IX5HGdN*7$xk}-blPE7IhFzodvx~(V1yvGP zJm=#THnqC6xH>?)D_Om?IKQ3qj~xy8j|zEH%A-9T=+v1Mp}(RWRj zED)Qe@!E5)n;qVTsfX^5YOU^|4KRe{jc6i7nM&vE=z9J5o0+J%1+;fY6Z{Zv>F1Uy zz=~mtRtgZ490?PNC2zHce08>P4D!0u_!vAdaQhhbv@#u^Ei1F>*94-9W>G0Gs*6Za z->+^?IzC=&WtcU<4doULc~)L`P5=y+d{hB-E!I zF5d5X5rzC1u5){(s?n(E2G{Bds}%X*evqdf_?cc3ETH8eps21Q`dyAII1Qas#O`{1 z8wo+1VQz}tWRMaQLHdAi+K3M`71ao!!@S1Q`{OVUK@6NT58_yxj#kn*DpnHET1Bw? zCpBTgfXOdtz_c|aaL@XMkr0~qnLJirGoV>WF7+L#`P4u+p?F3^61y?gN00Fsx|vDL{i)X_ z$0uDM*U9EI`JiRVYOgM@O<#d)~JP2Npyu}Opu?T{m* zn)jW5N?6{!ScHsGu2F(d5C<2*bwedWWCO?XO#@fJv%tbA1j+hcu+ac&s|tUEaQ?jt zpWJ`XI0gisETgu&nzN&LWU@Q`X@Z*?Xot)mSq$fLkQBe0DtLm1NAw|>&eOkbmnhrD zrvx>APLhpq`euo6@HXMJ1EbL2hQKPaUvHV{8=3bI@=O4Bui5dxp#YVd3e;ax%7;jU zibK%U@t-D>3PxC!UFE8H-@chu&tb6;@EhVH0IT4~!xAfrx$TdUzrSsAyXn6BQ|V$& zddfR)z_P&8T|1VPb3e$@2KYVpK5f&zy>DW?z;N zAlSOGt}!^QMbJTcjHx7ZPM#V&VY|;&qnVID8&4y~{Jqa8fU)G@_)T|Ucs{fW|18t9 zNJ`y965AMg5J`$mGhzyWTcZPFk@K6x4~^1iuLY8b3jTN6L4i1JG?A0Ic8p4`YE+%? zi?R8@VNHBa7ct}Dr&>CB314KV%=x;oSZ-QRPY44znKy_tm6|nuJAaj#i$oZ_h%X#5 z_p+&OU|NU&m7C_CUhqXu!V)ZT19w=DH1RW$$^?;d{eh6Pc_uN2nKXi)2Dd2}_N4~j zrd$fFK{JG)zPz^?MEvi_Q$w+|qzZ<>8)FI8;bG{DDD&X*Q#SD8F2>$7T^%bniQj@IWnrzqtm!r%uZX{l)s7{#A$_PAqG7;8}lpESfH zX+S8~^L4-t@MNx#!XAPMJRC|EX*uQbSy=6KyY%pV^)!>`x9sW`scd7rU9!I~@?wS& z;^DOraLI3|+WGrp@t<-`GD7lry+UN_p@ZJnPL`^$d|3K#xpWD5G=2_?p|urptN?jb zn}el}3`C5gH}m}Jo@`QQ458Pn8JJs4mfSrkNDU50cbI!hUlkvX&Ym($oS&}K2Qj3G z|Kq^VUWmk7LMW^Dj<>v{`||DJT+@#bvV{Gnwn9)F=WMk{d`p;-h6^U4{LZCk!j^S* ze)7&8jS*>aAnM!U=MD}U4l;*aNy#A%reY7=t<&kKYH6OFz1k@wNjO~=^nCw752+*T z4;-^M+F$?jNCtjW^H$~!**$zZ{_*Z-*l6I2sK0cGLx(hDO5RNN$Vr0o&bXx@xf3RW zyBFMh+GsDvNAEYd90IlJ8Hn`OTzaW57ljP;ueVX_0j9oVRkjWbrkCztOLWtJ!RX>A zAMn$$apO%9n|{#@6|ji_uley9aLm?_VO^vLP^SeoQ#rxC~e<^&mZHoxUwDBmnr z8g|zeA*e{DFtb>sD4>TueG9g0!knA6sqXGg@Lc0nQdh-^%DP2txOh(hA+s+K+-ZT zsD-SpOHBV{*!}et^#M8EYNOkcH~Y^1N69q`^QaDkhLg*wLlmqTa4 zS@+BXoASllJ<3|_TCkHn3-|j(XwCOHeQ|qpVp8H^cq#b~RU>|cIyNJ%uDo%Kbu|Hz zN${l^Uz8Gaw}?c|Ly5ihgW$<83vZ4rm))U?i%4YU#1aHa%$pK1`IWMFdf33 z*QkKPnwK0B#X&U_TkkQphju6PYf%E|KK&GZV9DxH%i~~h2y8q1 zs#FGx)uKr|i##e$pF9H_NMHo>-G|vmnyp4h3MAF14d-tWeN1p7#*Kk2KzHUYb8+2o zcORp3kXCTCv+=3V=o6X9l5H^Hs#DM`aut8Bh^y;|lcNSQfJsYR9p%ZVrqgoo)roGz zr-AG{x_q&@wo1AX0!i(%+PzefJBUT5 zP%2$mvVujL9L*60G$SMUPz+B3@3Bx|t1L4{ORBhlf^v}kg-RUIs~TeR1&rV#gqV=X z&5S*s+Wv)(ML1bK(!z)CaoZr(`Prq(^OZ&1Wk=<{k@rVQiwMhnh-%=@!*JKqFY*=~ zE{2*#2BQLacqS&Wuupn%j0dA-?o6~70zoucx|RZXs_C*GwHQz+;TSP7P)uS8qIcO@ zww@0`IJ`2BZ$Wu__bhJpEQgn>q|Bhw)Q-0SnH8$uZW^6tz!BC51zlr1Qz@k*MZuG$ zP+>f^F}PIN_qKPPD3yc#r%>x&SSlchfRB$Jo;h4|g*uzY!S&g-CiHdIp$BWMJNA}TTpmRvFg zitGXO*OsbKY84!-(Y^TGL|%Z&BKmcU_v07rWES>IAtP<~amkw}>bP%93eQxq_7 z=47Odv`i?2A3zA<9lcfQR&+U}bL=nn!DexDyn)Y+1bI+%Td_t6=>^=MTmLNIKwc=fX&*KNvJbFBmo1a6kSsZY5Y?l99i*!FB?LS;q{UZsz)n(~Qw1>@(cui|+ z)%XAa5ZIyRlD)I7oJ18!fNxvr`U$7m;frP+oOCG4jlcID@J@pX)+!wiNcb7HMPwQ; zN>SY@$?EEisq0YTnzCLvwyE#J`t6P3uZ)5|sV4aPN03W^E~`x|HVQdi5A#ud^x_XS z8Ipv1#GQB41F>Z&+OIP>t6~G=j0k6%@mPOpAd?ush@szoG~IuDQxl$0c0UD-a>C9u zia6*un7y*h<9?KSM;Gxg-bOGa6`@oQR={W~j!rt3?Ner7~s(Y!oUTD(MAVLEJLEnnhNg{1i6zx9M zTiLW5Xea7)D+xz-wN46rK;7=oM%B&)bPF;R^%zweL8uW zn*yaPqb>1w4#~qIW#=zoKmC2cHU~Hdy*w2}1mQCoy;XvDO z51+?FjpBPPB6|$r_Sf`MaADLe?P%G(d0RTt0DDC{%a2`{r#tr#pDv8s&*|~?Zw$C} zNBX|epKU6O0jxO&o)haRTfkz-MGloRELMNXT;j(8>?fK$sjJ;s?qst8+F5%A`>8@$ zwtS+1v_mRQ?%I{m={RaAD8*GoZp~v!UTq|VIoc_D<{Oc+#v>J#O%Ik~>U7QN!dNiB zbjYqOw5ox$U%>YsE4eon#Xlh{Ecy9qAyuL;t8+(OAq6%rHN3Gn_uu!s+aJCoPTmDK4f+m~1x_`_FuKl2BS#?}-(A$A zhby;TdqVNkTDx3AsJ>EAnQulI$t@M0$j?%yQHme~3&ljDy8on1CdZ*@Kv zv4jzk4Q3yE*`gM8a%R}$bdkBcN&m8tU|}0E&o8-5YWscU7lzE5hfd9#&kU)}JQ+>M zc7oeg{XAJ*7V8Ccuh^X}K`^%n12n5+qEnmV^Cf^NskVwA0kIg6-5`v}^ zVMTl`CscNIhaOkZs&U&axC8^7UEI7hsVRo$Q4|Y#wnW;6$^uLynwpdiZ=gCw-{E8z z`Q{Oh)ZCj834)D)E)ux6qP?p`q_8aDzPZ%8R%)<9s0)@~>wMy_Gp_#XFg)N_DKP-{AjVh~@f)X%=*Suy!EypYzam(P@PIj8G^xUtxj?~!fyMoVKE8T8mI%~w`h%cGa zC80iTp--%fjE08sX2d#jdK(4VI0JS-?AK)MYl{e37`C)J@hk}17QQs=wb?WBHMfUY zmb+*Cs1>cXdPbo+R$z&Nr|2};JZVFBg4)#o0zdUnR#(vCI;X;$zcI^f7D`~#44r{s zT5F{(tX63|-|CtkeyZYuHk=QDVRh1f%n&C39jRN;961gwhh_{X9uZGzvxml;GRSd6 zPR+xT3KxIq(PAbEkBSNic8eDtd1pmNHUrq1!w{VDupB_A3#PDc(<}yCaSB$HpAfE9 zN!N>@lJgv+>F(JWOqh>59aYI8s$CGO4TxBY5mMuJowlFg%n3H_55rOuix!t)PM2a@ zkckcHf)2?NtI}!zjX4s`7s#;saAKs!NuR$qByJ`WQQ4={fpP(h;{WTyJ%=)ZZcaIl zIa~bc0R059xBz+jya2DfZ(ckKiApg?hS18wVlN>Tb#s%h$|{a3AuC(I?aXyY=>Ea%p~eTUFJTGUROy(~St86Gw`5ISdxSYwP&s@0vrGM`Fp z&W7FZX@n$|w}Hx=T-sEoiKMRJ1H$fZ0`s-0xki8jJQ2h~#0eQAv&T1?^eZbEw+PA! z#H_8bP)|%~!2qb-Juk1}*Sid+@kj`}-3=#;M8BBR;LcgE!W29t(8EeXJNv-?#xJgJ qZ17BoknviqI8ZixG6gDzk<%y#_7KV&p(?4LI2n^3y+H5T1N=WPSQ>o* diff --git a/public/fonts/adellebasic_bold-webfont.svg b/public/fonts/adellebasic_bold-webfont.svg deleted file mode 100644 index c259c24..0000000 --- a/public/fonts/adellebasic_bold-webfont.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Copyright c 2009 by TypeTogether All rights reserved -Designer : Veronika Burian Jos Scaglione -Foundry : TypeTogether -Foundry URL : wwwtypetogethercom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/fonts/adellebasic_bold-webfont.ttf b/public/fonts/adellebasic_bold-webfont.ttf deleted file mode 100644 index 7e70d0dee6f9a1319e75d25eea1251fed0b527fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24072 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 a{->@tgJ=eByWR|;8H@}zXKKM3_P+sZpC^?7 diff --git a/public/fonts/adellebasic_bold-webfont.woff b/public/fonts/adellebasic_bold-webfont.woff deleted file mode 100644 index 07ae59a2acadf65b8833ed6569e76d3096dd7171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15604 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 ML2daB;pO@M56S|o4gdfE diff --git a/public/images/code_bg.png b/public/images/code_bg.png deleted file mode 100644 index a57bab56a1b0cd439a7f6cf3f8740a91b256372b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmV p6S*ttK@UmXdS2jvWQ_4W{|5z_G!U*Lc~SrX002ovPDHLkV1kzGU}^vW diff --git a/public/images/rss.png b/public/images/rss.png deleted file mode 100644 index f458e57dfed81da9e863801654d36d3533e79fb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmV>OuMmgVQ<4-Ll$ z;*uoEWpXD1MWE3l3dCtF*)0MIBG?Zl8bZ*4DoR1r^hpj!RJ}q}*x0I91>FlKM0m^) z3&bP8-@*Zvq`e3&WiN=`7!uj!TAYDGHxYRxS>}<>l*{KL za?4TLlB;=R=`5^~UktS=P1s^$D~K`&3FSP<>cgJ4ys|{!V7+rAx2tgQIiQK}l7tQ$ z_wCAo_0M!?yJMXOEQQl5e9OusCHD6 zNqaJ>#*?=P?1below<^u!yG>naWXN+e9#U;0{X2o6F diff --git a/public/images/search.png b/public/images/search.png deleted file mode 100644 index 1220ff4e26124994e7167a420646bde118eb9f84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZyyP) z0_X}HNZgKqBEQKQFOFd0;stDAXHBf+K(cEgih}?%3vdOybApQH{76Zp zy@{6R_`G8CRmphKc*+svAQg8b@T_1Gf^?T6m}x#h!FCd<#eI~@UmH>0hsm7iVoj0z z+ - - - - - - - - - Octopress - My Octopress Blog - - - - - - - - - - - - - - - - - - - -
- -
-
-
- - -
-
-

Test of Typography

-

- - - - - - - -

-
- -

In the past I’ve always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten professionally printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.

- -

Why Have Business Cards?

- -

I’m rarely asked for my business card except when I attend conferences, of which I attend one or two each year. As a freelance contractor, I leave work by walking twenty-five feet from my office to the couch. Many of the -people I work for I’ve never met in-person.

- -

When someone gives me their business card, I read it, pocket it, and eventually throw it out — sometimes before I remember to copy the information to my address book (sorry, just being honest). The reality is, with the ubiquity of the internet and with frictionless social networks like Twitter, I can connect with people immediately. So why have business cards?

- -

Continue reading »

- - -
- - - -
-
-

Test Post

-

- - - - - - - -

-
- -

This is a test!

-
- - -
- - - -
-
-

Hello World! I'm Octopress!

-

- - - - - - - - - -

-
- -

Octopress is a blogging framework designed for hackers, based on Jekyll the blog aware static site generator powering Github pages. -If you don’t know what Jekyll is, Jack Moffitt wrote a good summary:

- -

Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control.

- -

Jack Moffitt Blogging with Git Emacs and Jekyll

- -

There’s no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work.

- -

Read the wiki to learn more

-
- - -
- - -
- - - -
-
-

- Copyright © 2011 - Your Name - - Powered by Octopress -

- - - - -
- - - diff --git a/public/javascripts/libs/DOMAssistantCompressed-2.8.js b/public/javascripts/libs/DOMAssistantCompressed-2.8.js deleted file mode 100644 index ff9ef9e..0000000 --- a/public/javascripts/libs/DOMAssistantCompressed-2.8.js +++ /dev/null @@ -1,4 +0,0 @@ -// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8 -var DOMAssistant=function(){var j=function(){},o=window,g=o.$,k=o.$$,d=/*@cc_on!@*/false,i=d&&parseFloat(navigator.appVersion)<6,h,c={},q={},a=true,n=Array.prototype.slice,p={accesskey:"accessKey","class":"className",colspan:"colSpan","for":"htmlFor",maxlength:"maxLength",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",cellspacing:"cellSpacing",cellpadding:"cellPadding"},m={rules:/\s*,\s*/g,selector:/^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/,selectorSplit:/(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g,id:/^#([-\w\u00C0-\uFFFF=$]+)$/,tag:/^\w+/,relation:/^[+>~]$/,pseudo:/^:(\w[-\w]*)(\((.+)\))?$/,pseudos:/:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g,attribs:/\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g,classes:/\.([-\w\u00C0-\uFFFF]+)/g,quoted:/^["'](.*)["']$/,nth:/^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/,special:/(:check|:enabl|\bselect)ed\b/},f=function(t,u,r){var s=t.tagName;while((t=t[u+"Sibling"])&&(t.nodeType!==1||(r?t.tagName!==s:t.tagName==="!"))){}return t},b=function(r){return typeof r!=="undefined"},l=function(r){return(l=r[0].compareDocumentPosition?function(s){return s.sort(function(u,t){return 3-(u.compareDocumentPosition(t)&6)})}:d?function(s){return s.sort(function(u,t){return u.sourceIndex-t.sourceIndex})}:function(s){return s.sort(function(w,u){var v=document.createRange(),t=document.createRange();v.setStart(w,0);v.setEnd(w,0);t.setStart(u,0);t.setEnd(u,0);return v.compareBoundaryPoints(Range.START_TO_END,t)})})(r)};var e=function(s,r){s.push.apply(s,n.apply(r));return s};if(d){e=function(t,s){if(s.slice){return t.concat(s)}var r=0,u;while((u=s[r++])){t[t.length]=u}return t}}return{isIE:d,camel:p,def:b,allMethods:[],publicMethods:["prev","next","hasChild","cssSelect","elmsByClass","elmsByAttribute","elmsByTag"],harmonize:function(){o.$=g;o.$$=k;return this},initCore:function(){this.applyMethod.call(o,"$",this.$);this.applyMethod.call(o,"$$",this.$$);o.DOMAssistant=this;if(d){j=Array}j.prototype=[];(function(r){r.each=function(v,u){for(var t=0,s=this.length;t=u)?(w-u)%u:w}else{if(t[8]){u=t[10]?parseInt(t[10],10):1;w=s=parseInt(t[11],10);while(w>u){w-=u}r=(s>=u)?(s-u)%u:s}}}}return{start:w,add:u,max:s,modVal:r}},cssByDOM:function(v){var aU,I,D,N,av,x,ah,A,K,w,aq,aN,y,aI,at,aB=new j(),aR=aB.indexOf,ap=[],aG=[],aK=v.replace(m.rules,",").split(","),aF={};function aQ(s){s=s||ap;for(var r=s.length;r--;){s[r].added=null;s[r].removeAttribute("added")}}function C(){for(var r=aU.length;r--;){aU[r].childElms=null}}function am(t,r){for(var u=0,aX;(aX=t[u]);u++){var aW=false;for(var s=0,aV;(aV=r[s]);s++){if(aV===aX){aW=true;r.splice(s,1);break}}if(aW){t.splice(u--,1)}}return t}function E(s,r){return(d||m.special.test(r))?s[p[r.toLowerCase()]||r]:s.getAttribute(r,2)}function P(r,s){r=r?r.replace(m.quoted,"$1").replace(/(\.|\[|\])/g,"\\$1"):null;return{"^":"^"+r,"$":r+"$","*":r,"|":"^"+r+"(\\-\\w+)*$","~":"\\b"+r+"\\b"}[s]||(r!==null?"^"+r+"$":r)}function W(r){return(r||this).tagName!=="!"}function S(r,s){return i?(r==="*"?s.all:s.all.tags(r)):s.getElementsByTagName(r)}function aL(r,s){r=r||"*";s=s||document;return(s===document||s.lastModified)?c[r]||(c[r]=S(r,document)):S(r,s)}function ar(aX,bf,u){aU=[];var aV=bf.split("-"),a0=[],a5=0,be=/\-of\-type$/.test(bf),a4,aZ={first:function(bg){return !f(bg,"previous",be)},last:function(bg){return !f(bg,"next",be)},empty:function(bg){return !bg.firstChild},enabled:function(bg){return !bg.disabled&&bg.type!=="hidden"},disabled:function(bg){return bg.disabled},checked:function(bg){return bg.checked},contains:function(bg){return(bg.innerText||bg.textContent||"").indexOf(u.replace(m.quoted,"$1"))>-1},other:function(bg){return E(bg,bf)===u}};function t(bg){while((A=aX[a5++])){if(W(A)&&aZ[bg](A)){a0[a0.length]=A}}return a0}var bb=aV[0]||null;if(bb&&aZ[bb]){return t(bb)}switch(bb){case"only":var a1,aW;while((A=aX[a5++])){K=A.parentNode;var a6=A.nodeName;if(K!==a1||a6!==aW){if(aZ.first(A)&&aZ.last(A)){a0[a0.length]=A}a1=K;aW=a6}}break;case"nth":if(u==="n"){a0=aX}else{var bd=(aV[1]==="last")?["lastChild","previousSibling"]:["firstChild","nextSibling"];aI=DOMAssistant.getSequence(u);if(aI){while((A=aX[a5++])){K=A.parentNode;K.childElms=K.childElms||{};var a7=A.nodeName;if(!K.childElms[a7]){var ba=0;aN=aI.start;y=K[bd[0]];while(y&&(aI.max<0||aN<=aI.max)){var bc=y.nodeName;if((be&&bc===a7)||(!be&&y.nodeType===1&&bc!=="!")){if(++ba===aN){if(bc===a7){a0[a0.length]=y}aN+=aI.add}}y=y[bd[1]]}if(at){h++}K.childElms[a7]=true;aU[aU.length]=K}}C()}}break;case"target":var s=document.location.hash.slice(1);if(s){while((A=aX[a5++])){if(E(A,"name")===s||E(A,"id")===s){a0[a0.length]=A;break}}}break;case"not":if((a4=m.pseudo.exec(u))){a0=am(aX,ar(aX,a4[1]?a4[1].toLowerCase():null,a4[3]||null))}else{for(var a8 in m){if(m[a8].lastIndex){m[a8].lastIndex=0}}u=u.replace(m.id,"[id=$1]");var a3=m.tag.exec(u);var aY=m.classes.exec(u);var a2=m.attribs.exec(u);var r=new RegExp(a2?P(a2[4],a2[2]):"(^|\\s)"+(a3?a3[0]:aY?aY[1]:"")+"(\\s|$)","i");while((w=aX[a5++])){aq=null;if(a3&&!r.test(w.nodeName)||aY&&!r.test(w.className)){aq=w}else{if(a2){var a9=E(w,a2[1]);if(!b(a9)||a9===false||typeof a9==="string"&&!r.test(a9)){aq=w}}}if(aq&&!aq.added){aq.added=true;a0[a0.length]=aq}}}break;default:return t("other")}return a0}function Z(aV,t){var r=0,u=aV,aW;while((aW=t[r++])){if(!u.length||u.indexOf(aW)<0){aV.push(aW)}}return aV}h=-1;for(var ak=0,aJ=[];(I=aK[ak]);ak++){if(!(D=I.match(m.selectorSplit))||ak&&aR.call(aK.slice(0,ak),I)>-1){continue}ap=[this];for(var ai=0,G;(G=D[ai]);ai++){aG=[];if((N=m.relation.exec(G))){var an=null,aS=D[ai+1];if((av=m.tag.exec(aS))){av=av[0];x=new RegExp("(^|\\s)"+av+"(\\s|$)","i")}else{if(m.id.test(aS)){an=DOMAssistant.$(aS)||null}}for(var ag=0,M;(M=ap[ag]);ag++){switch(N[0]){case">":var aD=an||aL(av,M);for(var ae=0,ay;(ay=aD[ae]);ae++){if(ay.parentNode===M){aG[aG.length]=ay}}break;case"+":if((M=f(M,"next"))){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){aG[aG.length]=M}}break;case"~":while((M=M.nextSibling)&&!M.added){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){M.added=true;aG[aG.length]=M}}break}}ap=aG;aQ();G=D[++ai];if(/^\w+$/.test(G)||m.id.test(G)){continue}ap.skipTag=true}var au=m.selector.exec(G);aF={tag:au[1]?au[1]:"*",id:au[2],allClasses:au[3],allAttr:au[5],allPseudos:au[10]};at=(aF.tag==="*");if(aF.id){var O=0,al=document.getElementById(aF.id.slice(1));if(al){while(ap[O]&&!DOMAssistant.hasChild.call(ap[O],al)){O++}aG=(O=0||aR.call(aJ,"*")>=0))?Z:e)(aB,ap);aJ.push(aF.tag);if(d&&at){aB=aB.filter(W)}}return((aB.length>1&&aK.length>1)||h>0)?l(aB):aB},cssByXpath:function(s){var t={xhtml:"http://www.w3.org/1999/xhtml"},u=(document.documentElement.namespaceURI===t.xhtml)?"xhtml:":"",r=function v(w){return t[w]||null};DOMAssistant.cssByXpath=function(N){var R,T,J,z,A,E,B=new j(),C=N.replace(m.rules,",").split(",");function M(W){var X=W?"[":"",V=W?"]":"";return function(Y,ac,ab,aa,Z){Z=(Z||"").replace(m.quoted,"$1");if(ac===Z&&ac==="readonly"){aa=null}return X+({"^":"starts-with(@"+ac+', "'+Z+'")',"$":"substring(@"+ac+", (string-length(@"+ac+") - "+(Z.length-1)+"), "+Z.length+') = "'+Z+'"',"*":'contains(concat(" ", @'+ac+', " "), "'+Z+'")',"|":"@"+ac+'="'+Z+'" or starts-with(@'+ac+', "'+Z+'-")',"~":'contains(concat(" ", @'+ac+', " "), " '+Z+' ")'}[ab]||("@"+ac+(aa?'="'+Z+'"':"")))+V}}function P(W,Y,X){W=/\-child$/.test(Y)?"*":W;var aa=Y.split("-"),V=((aa[1]==="last")?"(count(following-sibling::":"(count(preceding-sibling::")+W+") + 1)",Z,ab;switch(aa[0]){case"nth":return(X!=="n"&&(E=DOMAssistant.getSequence(X)))?((E.start===E.max)?V+" = "+E.start:V+" mod "+E.add+" = "+E.modVal+((E.start>1)?" and "+V+" >= "+E.start:"")+((E.max>0)?" and "+V+" <= "+E.max:"")):"";case"not":return"not("+((Z=m.pseudo.exec(X))?P(W,Z[1]?Z[1].toLowerCase():null,Z[3]||null):X.replace(m.id,"[id=$1]").replace(m.tag,"self::$0").replace(m.classes,'contains(concat(" ", @class, " "), " $1 ")').replace(m.attribs,M()))+")";case"first":return"not(preceding-sibling::"+W+")";case"last":return"not(following-sibling::"+W+")";case"only":return"not(preceding-sibling::"+W+" or following-sibling::"+W+")";case"empty":return"not(child::*) and not(text())";case"contains":return'contains(., "'+X.replace(m.quoted,"$1")+'")';case"enabled":return'not(@disabled) and not(@type="hidden")';case"disabled":return"@disabled";case"target":return'@name="'+(ab=document.location.hash.slice(1))+'" or @id="'+ab+'"';default:return"@"+Y+'="'+X+'"'}}for(var O=0;(R=C[O]);O++){if(!(T=R.match(m.selectorSplit))||O&&B.indexOf.call(C.slice(0,O),R)>-1){continue}J=J?J+" | .":".";for(var L=0,Q=T.length;L":"/","+":"/following-sibling::*[1]/self::","~":"/following-sibling::"}[A.tagRelation]||""):((L>0&&m.relation.test(T[L-1]))?A.tag:("//"+A.tag)))+(A.id||"").replace(m.id,'[@id = "$1"]')+(A.allClasses||"").replace(m.classes,'[contains(concat(" ", @class, " "), " $1 ")]')+(A.allAttr||"").replace(m.attribs,M(true));if(A.allPseudos){var D=A.allPseudos.match(m.pseudos);for(var K=0,x=D.length;K0&&ajaxObj.params)?("&"+ajaxObj.params):"")}return DOMAssistant.AJAX.makeCall.call(this,ajaxObj)},get:function(url,callback,addToContent){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"GET",callback,addToContent))},post:function(url,callback){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"POST",callback))},load:function(url,addToContent){this.get(url,DOMAssistant.AJAX.replaceWithAJAXContent,addToContent)},makeCall:function(ajaxObj){var XMLHttp=DOMAssistant.AJAX.initRequest();if(XMLHttp){globalXMLHttp=XMLHttp;(function(elm){var url=ajaxObj.url,method=ajaxObj.method||"GET",callback=ajaxObj.callback,params=ajaxObj.params,headers=ajaxObj.headers,responseType=ajaxObj.responseType||"text",addToContent=ajaxObj.addToContent,timeout=ajaxObj.timeout||null,ex=ajaxObj.exception,timeoutId=null,done=false;XMLHttp.open(method,url,true);XMLHttp.setRequestHeader("AJAX","true");XMLHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");if(method==="POST"){XMLHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");XMLHttp.setRequestHeader("Content-length",params?params.length:0);if(XMLHttp.overrideMimeType){XMLHttp.setRequestHeader("Connection","close")}}if(responseType==="json"){XMLHttp.setRequestHeader("Accept","application/json, text/javascript, */*")}for(var i in headers){if(typeof i==="string"){XMLHttp.setRequestHeader(i,headers[i])}}if(typeof callback==="function"){XMLHttp.onreadystatechange=function(){try{if(XMLHttp.readyState===4&&!done){window.clearTimeout(timeoutId);done=true;status=XMLHttp.status;statusText=XMLHttp.statusText;readyState=4;if((status||location.protocol!=="file:")&&(status<200||status>=300)){throw new Error(statusText)}var response=/xml/i.test(responseType)?XMLHttp.responseXML:XMLHttp.responseText;if(/json/i.test(responseType)&&!!response){response=(typeof JSON==="object"&&typeof JSON.parse==="function")?JSON.parse(response):eval("("+response+")")}globalXMLHttp=null;XMLHttp.onreadystatechange=function(){};requestPool.push(XMLHttp);callback.call(elm,response,addToContent)}}catch(e){globalXMLHttp=XMLHttp=null;if(typeof ex==="function"){ex.call(elm,e);ex=null}}}}XMLHttp.send(params);if(timeout){timeoutId=window.setTimeout(function(){if(!done){XMLHttp.abort();done=true;if(typeof ex==="function"){readyState=0;status=408;statusText="Request timeout";globalXMLHttp=XMLHttp=null;ex.call(elm,new Error(statusText));ex=null}}},timeout)}})(this)}return this},replaceWithAJAXContent:function(content,add){if(add){this.innerHTML+=content}else{DOMAssistant.cleanUp(this);this.innerHTML=content}},getReadyState:function(){return(globalXMLHttp&&DOMAssistant.def(globalXMLHttp.readyState))?globalXMLHttp.readyState:readyState},getStatus:function(){return status},getStatusText:function(){return statusText}}}();DOMAssistant.attach(DOMAssistant.AJAX);DOMAssistant.CSS=function(){var a=DOMAssistant.def,b={display:true};return{addClass:function(d){if(!this.hasClass(d)){var c=this.className;this.className=c+(c.length?" ":"")+d}return this},removeClass:function(c){return this.replaceClass(c)},replaceClass:function(d,e){var c=new RegExp(("(^|\\s)"+d+"(\\s|$)"),"i");this.className=this.className.replace(c,function(f,h,g){return e?(h+e+g):" "}).replace(/^\s+|\s+$/g,"");return this},hasClass:function(c){return(" "+this.className+" ").indexOf(" "+c+" ")>-1},setStyle:function(f,g){var e=this.style;if("filters" in this&&(typeof f==="string"?/opacity/i.test(f):a(f.opacity))){e.zoom=1;e.filter=(e.filter||"").replace(/alpha\([^)]*\)/,"")+"alpha(opacity="+(a(f.opacity)?f.opacity:g)*100+")"}if(a(e.cssText)){var c=e.cssText;if(typeof f==="object"){for(var d in f){if(typeof d==="string"){if(b[d]){e[d]=f[d]}c+=";"+d+":"+f[d]}}}else{if(b[f]){e[f]=g}c+=";"+f+":"+g}e.cssText=c}return this},getStyle:function(c){var e="",d;c=c.toLowerCase();if(document.defaultView&&document.defaultView.getComputedStyle){e=document.defaultView.getComputedStyle(this,"").getPropertyValue(c)}else{if(this.currentStyle){if("filters" in this&&c==="opacity"){e=(d=this.style.filter||this.currentStyle.filter)&&d.indexOf("opacity=")>=0?parseFloat(d.match(/opacity=([^)]*)/)[1])/100:1}else{c=c.replace(/^float$/,"styleFloat").replace(/\-(\w)/g,function(f,g){return g.toUpperCase()});e=this.currentStyle[c]}if(e==="auto"&&/^(width|height)$/.test(c)&&this.currentStyle.display!=="none"){e=this["offset"+c.charAt(0).toUpperCase()+c.substr(1)]+"px"}}}return e}}}();DOMAssistant.attach(DOMAssistant.CSS);DOMAssistant.Content=function(){var a=DOMAssistant.$$;return{init:function(){DOMAssistant.setCache(false)},create:function(d,c,b,e){var f=a(document.createElement(d));if(c){f=f.setAttributes(c)}if(DOMAssistant.def(e)){f.addContent(e)}if(b){this.appendChild(f)}return f},setAttributes:function(b){if(DOMAssistant.isIE){var c=function(g,e,f){var d=e.toLowerCase();switch(d){case"name":case"type":case"multiple":return a(document.createElement(g.outerHTML.replace(new RegExp(d+"(=[a-zA-Z]+)?")," ").replace(">"," "+d+"="+f+">")));case"style":g.style.cssText=f;return g;default:g[DOMAssistant.camel[d]||e]=f;return g}};DOMAssistant.Content.setAttributes=function(d){var h=this;var g=this.parentNode;for(var f in d){if(typeof d[f]==="string"||typeof d[f]==="number"){var e=c(h,f,d[f]);if(g&&/(name|type)/i.test(f)){if(h.innerHTML){e.innerHTML=h.innerHTML}g.replaceChild(e,h)}h=e}}return h}}else{DOMAssistant.Content.setAttributes=function(d){for(var e in d){if(/class/i.test(e)){this.className=d[e]}else{this.setAttribute(e,d[e])}}return this}}return DOMAssistant.Content.setAttributes.call(this,b)},addContent:function(f){var d=typeof f;if(d==="string"||d==="number"){if(!this.firstChild){this.innerHTML=f}else{var c=document.createElement("div");c.innerHTML=f;for(var b=c.childNodes.length-1,e=null;b>=0;b--){e=this.insertBefore(c.childNodes[b],e)}}}else{if(d==="object"||(d==="function"&&!!f.nodeName)){this.appendChild(f)}}return this},replaceContent:function(b){DOMAssistant.cleanUp(this);return this.addContent(b)},replace:function(g,b){var f=typeof g;if(f==="string"||f==="number"){var e=this.parentNode;var d=DOMAssistant.Content.create.call(e,"div",null,false,g);for(var c=d.childNodes.length;c--;){e.insertBefore(d.childNodes[c],this.nextSibling)}g=this.nextSibling;e.removeChild(this)}else{if(f==="object"||(f==="function"&&!!g.nodeName)){this.parentNode.replaceChild(g,this)}}return b?g:this},remove:function(){DOMAssistant.cleanUp(this);if(this.hasData()){if(this.removeEvent){this.removeEvent()}this.unstore()}this.parentNode.removeChild(this);return null}}}();DOMAssistant.attach(DOMAssistant.Content);DOMAssistant.Events=function(){var i,g="_events",c=!!document.addEventListener,a={focus:true,blur:true},b=DOMAssistant.isIE?{focus:"activate",blur:"deactivate",mouseenter:"mouseover",mouseleave:"mouseout"}:{mouseenter:"mouseover",mouseleave:"mouseout"},f={special:/^submit|reset|change|select$/i,mouseenterleave:/^mouse(enter|leave)$/i,dom:/^DOM/,on:/^on/i},e=function(j){return DOMAssistant.isIE&&f.special.test(j)},d=function(j){return b[j]||j},h=function(n,k,m){n=n||window.event||{};if(n.event){return n}var l={event:n,type:k||n.type,bubbles:n.bubbles||true,cancelable:n.cancelable||false,target:m||n.target||n.srcElement,clientX:n.clientX||0,clientY:n.clientY||0,altKey:n.altKey||false,ctrlKey:n.ctrlKey||false,shiftKey:n.shiftKey||false,button:n.button||null,timeStamp:+new Date(),preventDefault:function(){if(n.preventDefault){n.preventDefault()}this.returnValue=n.returnValue=false},stopPropagation:function(){if(n.stopPropagation){n.stopPropagation()}this.cancelBubble=n.cancelBubble=true}};if(l.target&&3===l.target.nodeType){l.target=l.target.parentNode}l.currentTarget=l.target;l.relatedTarget=n.relatedTarget||(n.fromElement===l.target?n.toElement:n.fromElement)||null;var o=document.documentElement,j=document.body;l.pageX=DOMAssistant.def(n.pageX)?n.pageX:(l.clientX+(o.scrollLeft||j.scrollLeft)-(o.clientLeft||0));l.pageY=DOMAssistant.def(n.pageY)?n.pageY:(l.clientY+(o.scrollTop||j.scrollTop)-(o.clientTop||0));if("number"===typeof n.which){l.keyCode=n.keyCode;l.charCode=l.which=n.which}else{if(n.keyCode){l.keyCode=l.charCode=n.keyCode}}return l};return{publicMethods:["triggerEvent","addEvent","removeEvent","relayEvent","unrelayEvent","preventDefault","cancelBubble"],init:function(){DOMAssistant.preventDefault=this.preventDefault;DOMAssistant.cancelBubble=this.cancelBubble;i=this.handleEvent},triggerEvent:function(r,o,q){var m=d(r),s=this.retrieve(g),j=q||h(q,m,o||this);j.currentTarget=this;if(s&&s[m]){for(var n=0,l=s[m].length;n<\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/ -if(document.addEventListener){document.addEventListener("DOMContentLoaded",e,false)}if(/KHTML|WebKit|iCab/i.test(navigator.userAgent)){a=setInterval(function(){if(/loaded|complete/i.test(document.readyState)){e();clearInterval(a)}},10)}window.onload=e;return{DOMReady:function(){for(var j=0,h=arguments.length,k;j";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c=F.minw)&&(!F.maxw||F.maxw&&D<=F.maxw)){if(!z[F.media]){z[F.media]=[]}z[F.media].push(k[F.rules])}}for(var y in p){if(p[y]&&p[y].parentNode===f){f.removeChild(p[y])}}for(var y in z){var G=u.createElement("style"),A=z[y].join("\n");G.type="text/css";G.media=y;if(G.styleSheet){G.styleSheet.cssText=A}else{G.appendChild(u.createTextNode(A))}C.appendChild(G);p.push(G)}f.insertBefore(C,B.nextSibling)},n=function(v,x){var w=c();if(!w){return}w.open("GET",v,true);w.onreadystatechange=function(){if(w.readyState!=4||w.status!=200&&w.status!=304){return}x(w.responseText)};if(w.readyState==4){return}w.send()},c=(function(){var v=false,w=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new XMLHttpRequest()}],y=w.length;while(y--){try{v=w[y]()}catch(x){continue}break}return function(){return v}})();a();respond.update=a;function s(){j(true)}if(e.addEventListener){e.addEventListener("resize",s,false)}else{if(e.attachEvent){e.attachEvent("onresize",s)}}})(this,(function(f){if(f.matchMedia){return true}var e,i=document,c=i.documentElement,g=c.firstElementChild||c.firstChild,h=!i.body,d=i.body||i.createElement("body"),b=i.createElement("div"),a="only all";b.id="mq-test-1";b.style.cssText="position:absolute;top:-99em";d.appendChild(b);b.innerHTML='_';if(h){c.insertBefore(d,g)}b.removeChild(b.firstChild);e=b.offsetWidth==9;if(h){c.removeChild(d)}else{d.removeChild(b)}return e})(this)); - diff --git a/public/javascripts/libs/selectivizr-min.js b/public/javascripts/libs/selectivizr-min.js deleted file mode 100644 index 5adda2f..0000000 --- a/public/javascripts/libs/selectivizr-min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms of the MIT license. - * selectivizr.com - */ -(function(j){function A(a){return a.replace(B,h).replace(C,function(a,d,b){for(var a=b.split(","),b=0,e=a.length;b0){var a=l,f,e=s.substring(0,e).replace(H,i);if(e==i||e.charAt(e.length-1)==o)e+="*";try{f=t(e)}catch(k){}if(f){e=0;for(c=f.length;e-1&&(a=a.substring(0,l));if(a.charAt(0)==":")switch(a.slice(1)){case "root":c=function(a){return b?a!=p:a==p};break;case "target":if(m==8){c=function(a){function c(){var d=location.hash,e=d.slice(1);return b?d==i||a.id!=e:d!=i&&a.id==e}k(j,"hashchange",function(){g(a,d,c())});return c()};break}return!1;case "checked":c=function(a){J.test(a.type)&&k(a,"propertychange",function(){event.propertyName=="checked"&&g(a,d,a.checked!==b)});return a.checked!==b};break;case "disabled":b=!b;case "enabled":c=function(c){if(K.test(c.tagName))return k(c,"propertychange",function(){event.propertyName=="$disabled"&&g(c,d,c.a===b)}),q.push(c),c.a=c.disabled,c.disabled===b;return a==":enabled"?b:!b};break;case "focus":e="focus",f="blur";case "hover":e||(e="mouseenter",f="mouseleave");c=function(a){k(a,b?f:e,function(){g(a,d,!0)});k(a,b?e:f,function(){g(a,d,!1)});return b};break;default:if(!L.test(a))return!1}return{className:d,b:c}}function w(a){return M+"-"+(m==6&&N?O++:a.replace(P,function(a){return a.charCodeAt(0)}))}function D(a){return a.replace(x,h).replace(Q,o)}function g(a,c,d){var b=a.className,c=u(b,c,d);if(c!=b)a.className=c,a.parentNode.className+=i}function u(a,c,d){var b=RegExp("(^|\\s)"+c+"(\\s|$)"),e=b.test(a);return d?e?a:a+o+c:e?a.replace(b,h).replace(x,h):a}function k(a,c,d){a.attachEvent("on"+c,d)}function r(a,c){if(/^https?:\/\//i.test(a))return c.substring(0,c.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return c.substring(0,c.indexOf("/",8))+a;var d=c.split(/[?#]/)[0];a.charAt(0)!="?"&&d.charAt(d.length-1)!="/"&&(d=d.substring(0,d.lastIndexOf("/")+1));return d+a}function y(a){if(a)return n.open("GET",a,!1),n.send(),(n.status==200?n.responseText:i).replace(R,i).replace(S,function(c,d,b,e,f){return y(r(b||f,a))}).replace(T,function(c,d,b){d=d||i;return" url("+d+r(b,a)+d+") "});return i}function U(){var a,c;a=f.getElementsByTagName("BASE");for(var d=a.length>0?a[0].href:f.location.href,b=0;b0&&setInterval(function(){for(var a=0,c=q.length;a8||!n)){var z={NW:"*.Dom.select",MooTools:"$$",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",Sizzle:"*",jQuery:"*",dojo:"*.query"},t,q=[],O=0,N=!0,M="slvzr",R=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,S=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,T=/\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g,L=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,B=/:(:first-(?:line|letter))/g,C=/(^|})\s*([^\{]*?[\[:][^{]+)/g,G=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,H=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,P=/[^\w-]/g,K=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,J=/^(checkbox|radio)$/,v=m>6?/[\$\^*]=(['"])\1/:null,E=/([(\[+~])\s+/g,F=/\s+([)\]+~])/g,Q=/\s+/g,x=/^\s*((?:[\S\s]*\S)?)\s*$/,i="",o=" ",h="$1";(function(a,c){function d(){try{p.doScroll("left")}catch(a){setTimeout(d,50);return}b("poll")}function b(d){if(!(d.type=="readystatechange"&&f.readyState!="complete")&&((d.type=="load"?a:f).detachEvent("on"+d.type,b,!1),!e&&(e=!0)))c.call(a,d.type||d)}var e=!1,g=!0;if(f.readyState=="complete")c.call(a,i);else{if(f.createEventObject&&p.doScroll){try{g=!a.frameElement}catch(h){}g&&d()}k(f,"readystatechange",b);k(a,"load",b)}})(j,function(){for(var a in z){var c,d,b=j;if(j[a]){for(c=z[a].replace("*",a).split(".");(d=c.shift())&&(b=b[d]););if(typeof b=="function"){t=b;U();break}}}})}}})(this); \ No newline at end of file diff --git a/public/javascripts/octopress.js b/public/javascripts/octopress.js deleted file mode 100644 index e69de29..0000000 diff --git a/public/javascripts/pinboard.js b/public/javascripts/pinboard.js deleted file mode 100644 index 9a69e0a..0000000 --- a/public/javascripts/pinboard.js +++ /dev/null @@ -1,52 +0,0 @@ -var count = pinboard_count; -var linkroll = 'pinboard_linkroll'; -function pinboardNS_fetch_script(url) { - document.writeln(''); -} - -function pinboardNS_show_bmarks(r) { - var lr = new Pinboard_Linkroll(); - lr.set_items(r); - lr.show_bmarks(); -} - -var json_URL = "http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count=" + count; -pinboardNS_fetch_script(json_URL); - -function Pinboard_Linkroll() { - var items; - - this.set_items = function(i) { - this.items = i; - } - this.show_bmarks = function() { - var lines = []; - for (var i = 0; i < this.items.length; i++) { - var item = this.items[i]; - var str = this.format_item(item); - lines.push(str); - } - document.getElementById(linkroll).innerHTML = lines.join("\n"); - } - this.cook = function(v) { - return v.replace('<', '<').replace('>', '>>'); - } - - this.format_item = function(it) { - var str = "
  • "; - if (!it.d) { return; } - str += "

    " + this.cook(it.d) + ""; - if (it.n) { - str += "" + this.cook(it.n) + "\n"; - } - if (it.t.length > 0) { - for (var i = 0; i < it.t.length; i++) { - var tag = it.t[i]; - str += " " + this.cook(tag) + " "; - } - } - str += "

  • \n"; - return str; - } -} -Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); diff --git a/public/javascripts/twitter.js b/public/javascripts/twitter.js deleted file mode 100644 index d50efe1..0000000 --- a/public/javascripts/twitter.js +++ /dev/null @@ -1,70 +0,0 @@ -/* http://www.JSON.org/json2.js 2009-09-29 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See http://www.JSON.org/js.html */ -if(!this.JSON){this.JSON={}}(function(){function l(c){return c<10?'0'+c:c}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(c){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+l(this.getUTCMonth()+1)+'-'+l(this.getUTCDate())+'T'+l(this.getUTCHours())+':'+l(this.getUTCMinutes())+':'+l(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(c){return this.valueOf()}}var o=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,h,m,r={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},j;function q(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(c){var f=r[c];return typeof f==='string'?f:'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function n(c,f){var a,e,d,i,k=h,g,b=f[c];if(b&&typeof b==='object'&&typeof b.toJSON==='function'){b=b.toJSON(c)}if(typeof j==='function'){b=j.call(f,c,b)}switch(typeof b){case'string':return q(b);case'number':return isFinite(b)?String(b):'null';case'boolean':case'null':return String(b);case'object':if(!b){return'null'}h+=m;g=[];if(Object.prototype.toString.apply(b)==='[object Array]'){i=b.length;for(a=0;a'+linkifyTweet(tweets[t].text)+''+prettyDate(tweets[t].created_at)+'

    '+''; - } -} -function linkifyTweet(text){ - return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '$1') - .replace(/(^|\W)@(\w+)/g, '$1@$2') - .replace(/(^|\W)#(\w+)/g, '$1#$2'); -} - -function prettyDate(date_str){ - var time_formats = [ - [60, 'just now', 1], // 60 - [120, '1 min', '1 minute from now'], // 60*2 - [3600, 'mins', 60], // 60*60, 60 - [7200, '1 hour', '1 hour from now'], // 60*60*2 - [86400, 'hours', 3600], // 60*60*24, 60*60 - [172800, '1 day', 'tomorrow'], // 60*60*24*2 - [2903040000, 'days', 86400], // 60*60*24*7, 60*60*24 - ]; - var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, ''); - if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4); - var seconds = (new Date - new Date(time)) / 1000; - var token = 'ago', list_choice = 1; - if (seconds < 0) { - seconds = Math.abs(seconds); - token = 'from now'; - list_choice = 2; - } - var i = 0, format; - while (format = time_formats[i++]) - if (seconds < format[0]) { - if (typeof format[2] == 'string') - return format[list_choice]; - else - return Math.floor(seconds / format[2]) + ' ' + format[1]; - } - return time; -}; diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 1e1dba0..0000000 --- a/public/sitemap.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - http://yoursite.com/about.haml - 2011-05-14 - - - http://yoursite.com/atom.xml - 2011-05-12 - - - http://yoursite.com/ - 2011-05-12 - - - http://yoursite.com/test/syntax.html - 2010-04-10 - - - http://yoursite.com/test/typography.haml - 2011-05-14 - - - http://yoursite.com/2011/04/07/test-of-typography - 2011-04-07 - - - http://yoursite.com/2011/03/14/test-post - 2011-03-14 - - - http://yoursite.com/2009/11/13/hello-world - 2009-11-13 - - \ No newline at end of file diff --git a/public/stylesheets/screen.css b/public/stylesheets/screen.css deleted file mode 100644 index db978ac..0000000 --- a/public/stylesheets/screen.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}a{color:#165c95}a:hover,a:focus{color:#03345c}a:visited{color:#471069}.group,.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div,body > nav + div,body > nav + div > div,body > nav{*zoom:1}.group:after,.inner-wrap:after,.core-layout > div:after,body > header > div:after,body > nav > div:after,body > footer > div:after,body > nav + div:after,body > nav + div > div:after,body > nav:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}body > header,body > nav,body > footer{min-width:320px}@media only screen and (min-width: 320px){body > header > div,body > nav > div,body > footer > div{padding-left:.5em;padding-right:.5em}body > header{font-size:.7em;padding:.5em 0}#articles{font-size:.9em;line-height:1.5em}#articles > article{padding:.5em}#articles + aside{display:none}body > nav > div > div{width:180px}body > nav > div > div .search{width:110px}}@media only screen and (min-width: 768px){.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div{padding:0 15px;position:relative;margin:0 auto;max-width:1440px}body > nav + div{padding:0;max-width:1470px;margin:0 auto}body > nav + div > div{margin-right:240px}body > nav > div > div{width:210px}body > nav > div > div .search{width:140px}#articles{float:left;width:100%;padding-top:25px;padding-bottom:25px}#articles > *{padding-right:15px;padding-left:15px}#articles > article{margin-bottom:1.5em;padding-bottom:1.5em;padding-right:15px;padding-left:15px}#articles + aside{display:block;float:left;width:210px;margin:0 -100% 0 0;padding:15px}body > header,body #articles{font-size:.95em}}@media only screen and (min-width: 992px){.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div{padding:0 40px;position:relative;margin:0 auto;max-width:1440px}body > nav + div{padding:0;max-width:1520px;margin:0 auto}body > nav + div > div{margin-right:320px}body > nav > div > div{width:250px}body > nav > div > div .search{width:180px}#articles{float:left;width:100%;padding-top:25px;padding-bottom:25px}#articles > *{padding-right:40px;padding-left:40px}#articles > article{margin-bottom:1.5em;padding-bottom:1.5em;padding-right:40px;padding-left:40px}#articles + aside{display:block;float:left;width:260px;margin:0 -100% 0 0;padding:30px}body > header,body #articles{font-size:1.05em}}@font-face{font-family:"Adelle";src:url('/fonts/adellebasic_bold-webfont.eot');src:url('/fonts/adellebasic_bold-webfont.eot?iefix') format('eot'), url('/fonts/adellebasic_bold-webfont.woff') format('woff'), url('/fonts/adellebasic_bold-webfont.ttf') format('truetype'), url('/fonts/adellebasic_bold-webfont.svg#webfontKykxqSyz') format('svg')}.heading-font,body > header h1,h1,h2,h3,h4,h5,h6{font-family:Adelle, "Helvetica Neue", Helvetica, Arial, sans}.sans-font,#articles + aside section{font-family:"Helvetica Neue", Helvetica, Arial, sans}body > header h1{font-size:3em;line-height:1.2em;margin-bottom:0.6667em}body{font-size:1em;line-height:1.5em;color:black;font-family:Georgia, Times, serif}article:last-child{border-bottom:none}article h2{padding-top:0.8em;border-top:3px double #dddddd}article .byline + time:before,article .byline + time + time:before{content:"\2022 ";padding:0 .3em 0 .2em;display:inline-block;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}article time span{font-size:.7em;line-height:0;position:relative;top:-0.4em}article header p{padding:0 0 1.5em;font-size:.8em;color:#555555;font-family:Palatino, Times, "Times New Roman";margin-top:-1.4em}h1,h2,h3,h4,h5,h6{font-weight:normal;line-height:1em;text-rendering:optimizelegibility}h1{font-size:2.6em;margin-bottom:0.6667em}h2,section h1{font-size:1.8em;margin-bottom:0.6667em}h3,section h2,section section h1{font-size:1.6em;margin-bottom:0.875em}h4,section h3,section section h2,section section section h1{font-size:1.3em;margin-bottom:0.875em}h5,section h4,section section h3{font-size:1.1em;margin-bottom:0.75em}h6,section h5,section section h4,section section section h3{font-size:1em;margin-bottom:0.5em}p,blockquote,ul,ol{margin-bottom:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}ol ol{list-style-type:lower-alpha}ul ul,ol ol{margin-left:1.75em}li{margin-bottom:.5em}strong{font-weight:bold}em{font-style:italic}sup,sub{font-size:0.8em;position:relative;display:inline-block}sup{top:-0.5em}sub{bottom:-0.5em}q{font-style:italic}q:before{content:"\201C"}q:after{content:"\201D"}em,dfn{font-style:italic}strong,dfn{font-weight:bold}del,s{text-decoration:line-through}abbr,acronym{border-bottom:1px dotted;cursor:help}sub,sup{line-height:0}hr{margin-bottom:0.2em}small{font-size:.8em}big{font-size:1.2em}blockquote{font-style:italic;position:relative;margin-left:2em}blockquote > p:first-child:before{content:"\201C";position:absolute;top:0.1em;left:-0.7em;font-size:3em;color:#dddddd}blockquote > p:last-child:after{content:"\201D";position:relative;top:0.3em;line-height:0;font-size:2em;color:#dddddd}blockquote + p > cite{margin-left:2em;text-align:right}blockquote + p > cite:before{content:'– ';color:#555555}blockquote + p > cite a{font-style:italic}body > header{background-color:#323232;border-bottom:1px solid #181818}body > header h1{display:inline-block;margin:0}body > header h1 a,body > header h1 a:visited{font-weight:normal;color:#dddddd;text-decoration:none}body > nav{position:relative;z-index:1;background-color:#e8e8e8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fcfcfc), color-stop(30%, #f4f4f4), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:-moz-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:-o-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);border-top:1px solid white;border-bottom:1px solid #aaaaaa}body > nav > div > div{float:right;position:relative;padding:.45em 0 0 0}body > nav > div > div a{float:right;text-indent:-119988px;overflow:hidden;text-align:left;background-image:url('/images/rss.png?1305289158');background-repeat:no-repeat;background-position:50% 50%;width:24px;height:24px}body > nav > div > div form{margin:0;padding:0;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}body > nav > div > div form input[type='text']{margin:0;-moz-border-radius:1em;-webkit-border-radius:1em;-o-border-radius:1em;-ms-border-radius:1em;-khtml-border-radius:1em;border-radius:1em;float:left;border:1px solid #ccc;color:#888;background:url('/images/search.png?1305288930') no-repeat 0.5em 0.4em #f6f6f6;padding:.4em .8em .1em 1.8em;line-height:1.35em;font-size:.85em}body > nav > div > div form input[type='text']:focus{color:#444;border-color:#80b1df;-moz-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-webkit-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-o-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;background-color:#fff;outline:none}body > nav ul{position:relative;margin:0;padding:0;border:0;overflow:hidden;*zoom:1;margin:0 auto;padding:.5em 0}body > nav ul li{list-style-image:none;list-style-type:none;margin-left:0px;white-space:nowrap;display:inline;float:left;padding-left:4px;padding-right:4px}body > nav ul li:first-child,body > nav ul li.first{padding-left:0}body > nav ul li:last-child{padding-right:0}body > nav ul li.last{padding-right:0}body > nav ul li{padding:0 1em;margin:0;border-left:1px solid #cccccc;border-right:1px solid white}body > nav ul li:first-child{border-left:none;padding-left:0}body > nav ul li:last-child{border-right:0}body > nav ul li a{display:inline-block;color:#555555;line-height:150%;text-decoration:none}body > nav ul li a:hover{color:black}body{background-color:#f2f2f2}body > div > div{background-color:white;border-right:1px solid #d5d5d5}#articles + aside section{font-size:.8em;line-height:1.5em;margin-bottom:1.5em}#articles + aside ul{margin-bottom:0.5em}#articles + aside li{list-style:none;padding:.5em 0;margin:0;border-bottom:1px solid #ddd}#articles + aside li p:last-child{margin-bottom:0}article .title{text-decoration:none}article .title:hover{text-decoration:underline}article .entry{border-bottom:1px solid #eeeeee}article .entry:first-child{padding-top:0}article .meta{border-bottom:1px dashed #dddddd;text-transform:uppercase;color:#777777;padding:8px 0 5px;margin-bottom:1.5em;font-size:75%;letter-spacing:1px}article .footer{padding-top:15px}footer{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #252525), color-stop(100%, #323232));background:-webkit-linear-gradient(#252525,#323232);background:-moz-linear-gradient(#252525,#323232);background:-o-linear-gradient(#252525,#323232);background:linear-gradient(#252525,#323232);padding:15px 0;position:relative;z-index:2}footer a{color:#dddddd}footer a:hover{color:white} diff --git a/sass/themes/classic/_partials.scss b/sass/themes/classic/_partials.scss index e1e7249..4ca98c0 100644 --- a/sass/themes/classic/_partials.scss +++ b/sass/themes/classic/_partials.scss @@ -1,8 +1,5 @@ //@import "partials/shared"; -//@import "partials/syntax"; //@import "partials/search"; -//@import "partials/sidebar"; -//@import "partials/twitter"; /* layout partials */ @import "partials/header"; @@ -11,3 +8,5 @@ @import "partials/sidebar"; @import "partials/blog"; @import "partials/footer"; + +@import "partials/syntax"; diff --git a/sass/themes/classic/core/_layout.scss b/sass/themes/classic/core/_layout.scss index b245fd1..3c9bbc4 100644 --- a/sass/themes/classic/core/_layout.scss +++ b/sass/themes/classic/core/_layout.scss @@ -67,7 +67,7 @@ body { float: left; width: $sidebar-width - $sidebar-pad*2; margin: 0 -100% 0 0; - padding: $sidebar-pad; + padding: 0 $sidebar-pad $sidebar-pad; } } } diff --git a/sass/themes/classic/core/_theme.scss b/sass/themes/classic/core/_theme.scss index a69b11d..b9e67a2 100644 --- a/sass/themes/classic/core/_theme.scss +++ b/sass/themes/classic/core/_theme.scss @@ -1,45 +1,44 @@ // Link Colors -$link_color: lighten(#165b94, 0.3); +$link-color: lighten(#165b94, 3); +$link-color-hover: darken(#165b94, 5); // Main Section Colors -$body_color: #333333; -$light_text: #999999; -$body_bg: #323232; +$body-color: #333333; +$light-text: #999999; +$body-bg: #323232; -$header_bg: #323232; -$header_border: #181818; -$title_color: #dddddd; +$header-bg: #323232; +$header-border: #181818; +$title-color: #dddddd; -$nav_color: #555555; -$nav_color_hover: black; -$nav_bg: #e8e8e8; -$nav_border_top: white; -$nav_border_bottom: #aaaaaa; -$nav_border_left: #cccccc; -$nav_border_right: white; +$nav-color: #555555; +$nav-color_hover: black; +$nav-bg: #e8e8e8; +$nav-border_top: white; +$nav-border_bottom: #aaaaaa; +$nav-border_left: #cccccc; +$nav-border_right: white; -$sidebar_bg: #f2f2f2; -$sidebar_border: #d5d5d5; +$sidebar-bg: #f2f2f2; +$sidebar-border: #d5d5d5; // Blog -$article_border: #eeeeee; -$main_bg: #fff; +$article-border: #eeeeee; +$main-bg: #fff; -$footer_color: #999999; -$footer_bg: #444444; +$footer-color: #999999; +$footer-bg: #444444; // Form Colors -$fieldset_bg: #ececec; -$fieldset_border: #c3c3c3; - -$textinput_color: #333333; -$textinput_bg: #f4f4f4; -$textinput_bg_focus: #fefeee; - -$textinput_border_top: #aaaaaa; -$textinput_border_bottom: #c6c6c6; -$textinput_border_left: #c3c3c3; -$textinput_border_right: #c3c3c3; -$textinput_border_focus: #989898; - -$twitter_topic: #888888; +$fieldset-bg: #ececec; +$fieldset-border: #c3c3c3; + +$textinput-color: #333333; +$textinput-bg: #f4f4f4; +$textinput-bg-focus: #fefeee; + +$textinput-border-top: #aaaaaa; +$textinput-border-bottom: #c6c6c6; +$textinput-border-left: #c3c3c3; +$textinput-border-right: #c3c3c3; +$textinput-border-focus: #989898; diff --git a/sass/themes/classic/core/_typography.scss b/sass/themes/classic/core/_typography.scss index 5916c82..61693c7 100644 --- a/sass/themes/classic/core/_typography.scss +++ b/sass/themes/classic/core/_typography.scss @@ -2,16 +2,17 @@ $type-border: #ddd; $type-color-light: #555; $type-color: #000; $blockquote: $type-border !default; //darken($type-border, 20) !default; - +$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; // Fonts @include font-face("Adelle", font-files("adellebasic_bold-webfont.woff", woff, "adellebasic_bold-webfont.ttf", truetype, "adellebasic_bold-webfont.svg#webfontKykxqSyz", svg), $eot: "adellebasic_bold-webfont.eot" ); -.heading-font { font-family: Adelle, "Helvetica Neue", Helvetica, Arial, sans; } -.sans-font { font-family: "Helvetica Neue", Helvetica, Arial, sans; } +.heading { font-family: Adelle, "Helvetica Neue", Arial, sans-serif; } +.sans { font-family: "Helvetica Neue", Arial, sans-serif; } +.mono { font-family: $mono; } body > header h1 { font-size: 3em; - @extend .heading-font; + @extend .heading; line-height: 1.2em; margin-bottom: 0.6667em; } @@ -54,7 +55,7 @@ article { } #{headings()}{ - @extend .heading-font; font-weight: normal; + @extend .heading; font-weight: normal; line-height: 1em; text-rendering: optimizelegibility; } diff --git a/sass/themes/classic/partials/_pinboard.scss b/sass/themes/classic/partials/_pinboard.scss new file mode 100644 index 0000000..60fd1ee --- /dev/null +++ b/sass/themes/classic/partials/_pinboard.scss @@ -0,0 +1,15 @@ +#pinboard_linkroll { + .pin-title, .pin-description { + display: block; + margin-bottom: .5em; + } + .pin-tag { + @extend .aside-alt-link; + &:after { + content: ','; + } + &:last-child:after { + content: ''; + } + } +} diff --git a/sass/themes/classic/partials/_shared.scss b/sass/themes/classic/partials/_shared.scss deleted file mode 100644 index a97b605..0000000 --- a/sass/themes/classic/partials/_shared.scss +++ /dev/null @@ -1,12 +0,0 @@ -#collapser { - display: block; - cursor: pointer; - background: #f8f8f8; - color: #888888; - padding: 5px 10px; - font-size: 10px; - line-height: 150%; - cursor: pointer; - position: absolute; - top: 0; - right: 0; } diff --git a/sass/themes/classic/partials/_sidebar.scss b/sass/themes/classic/partials/_sidebar.scss index faab415..ecad7a7 100644 --- a/sass/themes/classic/partials/_sidebar.scss +++ b/sass/themes/classic/partials/_sidebar.scss @@ -1,9 +1,21 @@ +.side-shadow-border { + @include box-shadow(#fff 0 1px); +} #articles + aside { section { - @extend .sans-font; + @extend .sans; font-size: .8em; line-height: 1.5em; margin-bottom: 1.5em; + h1 { + margin: 1.5em 0 0; + padding-bottom: .2em; + border-bottom: 1px solid #ddd; + @extend .side-shadow-border; + + p { + padding-top: .4em; + } + } } ul { margin-bottom: 0.5em; @@ -13,8 +25,30 @@ padding: .5em 0; margin: 0; border-bottom: 1px solid #ddd; + @extend .side-shadow-border; p:last-child { margin-bottom: 0; } } + a { + color: inherit; + @include transition(color, .5s); + } + &:hover a, &:hover #tweets a { color: $link-color; } + @import "twitter"; + @import "pinboard"; + #recent_posts { + time { + text-transform: uppercase; + font-size: .9em; + color: #666; + } + } +} +.aside-alt-link { + color: #999; + text-decoration: none; + &:hover { + color: #555; + } } diff --git a/sass/themes/classic/partials/_syntax.scss b/sass/themes/classic/partials/_syntax.scss index b06a5a1..5797c28 100644 --- a/sass/themes/classic/partials/_syntax.scss +++ b/sass/themes/classic/partials/_syntax.scss @@ -1,279 +1,167 @@ -.code_window { - @include border-top-radius(5px); - @include border-bottom-radius(2px); - background: #aaaaaa image-url("code_bg.png") top repeat-x; - position: relative; - margin: 0.3em 0 1.3em; - padding: 0 3px 3px; - font-size: 14px; - border: 1px solid #898989; - border-top-color: #cbcbcb; - border-left-color: #a5a5a5; - border-right-color: #a5a5a5; - em { - text-align: center; - text-shadow: #cccccc 1px 1px 1px; - display: block; - padding: 1px 0; - color: #333333; - font-style: normal; } - .highlight { - margin: 0; } } +$base03: #002b36; //darkest blue +$base02: #073642; //dark blue +$base01: #586e75; //darkest gray +$base00: #657b83; //dark gray +$base0: #839496; //medium gray +$base1: #93a1a1; //medium light gray +$base2: #eee8d5; //cream +$base3: #fdf6e3; //white +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; -pre { - color: #cccccc; - font-size: 13px; - background: #222222; - line-height: 1.5em; - border: #aaaaaa 1px solid; - overflow-x: auto; - overflow-y: hidden; - padding: 25px 20px; - .lineno { - color: #888888; - background: #e3e3e3; - display: inline-block; - padding: 0 0 0 10px; - &:first-child { - padding-top: 15px; - display: inline-block; } } } +// If you prefer light colors, uncomment the following block to change themes +//$base03: $base3; +//$base02: $base2; +//$base01: $base1; +//$base00: $base0; +//$base0: $base00; +//$base1: $base01; +//$base2: $base02; +//$base3: $base03; -.highlight { - position: relative; - .pre_expander { - font-size: 10px; +.gutter { + .line-numbers { text-align: right; - padding: 4px 8px; - line-height: 150%; - position: absolute; - cursor: pointer; - top: 2px; - right: 2px; - @include border-bottom-left-radius; - display: block; - color: #777777; - background: #333333; - &:hover { - background: #444444; - color: #cccccc; } } } + background: $base02 !important; + border-right: 1px solid darken($base03, 2); + @include box-shadow(lighten($base02, 2) -1px 0 inset); + text-shadow: darken($base02, 10) 0 -1px; + span { color: $base01 !important; } + } +} +html .gist .gist-file { + margin-bottom: 1.5em; + border: none; + .gist-syntax { + border-bottom: 1px solid #515151 !important; + .gist-highlight{ + background: $base03 !important; + pre { + @extend .pre; + overflow-y: hidden; + overflow-x: auto; + } + } + } + .gist-meta { + @include background(linear-gradient(#b0b0b0, #a7a7a7)); + padding: 0.5em; + background-color: #bababa !important; + border: 1px solid #9c9c9c; + border-top: 1px solid #d0d0d0; + border-bottom: 1px solid #777777; + font-size: .7em !important; + font-family: "Helvetica Neue", Arial, sans-serif !important; + color: #464646 !important; + line-height: 1.4em; + } +} +pre { @extend .pre; } -// based on: http://github.com/mojombo/tpw/raw/master/css/syntax.css -.editor { - background: rgb(0, 22, 41); - line-height: 1.25; } +.pre { + @extend .mono; + font-size: .8em; + line-height: 1.45em; + padding: 1em 1.2em !important; + background: $base03 !important; + color: $base1 !important; + span { color: $base1 !important; } + span { font-style: normal !important; font-weight: normal !important; } -pre.console { - background-color: black; - color: lighten(green, 25); - letter-spacing: 1px; - padding: 0.5em; - .prompt { - color: lighten(navy, 50); - &:before { - color: white; - content: "["; } - &:after { - color: white; - content: "]"; } } - .stdin { - font-weight: bold; - color: lighten(green, 75); } } + .c { color: $base01 !important; font-style: italic !important; } /* Comment */ + .cm { color: $base01 !important; font-style: italic !important; } /* Comment.Multiline */ + .cp { color: $base01 !important; font-style: italic !important; } /* Comment.Preproc */ + .c1 { color: $base01 !important; font-style: italic !important; } /* Comment.Single */ + .cs { color: $base01 !important; font-weight: bold !important; font-style: italic !important; } /* Comment.Special */ + .err { color: $red !important; background: none !important; } /* Error */ + .k { color: $orange !important; } /* Keyword */ + .o { color: $base1 !important; font-weight: bold !important; } /* Operator */ + .p { color: $base1 !important; } /* Operator */ + .ow { color: $cyan !important; font-weight: bold !important; } /* Operator.Word */ + .gd { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: block; } /* Generic.Deleted */ + .gd .x { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: block; } /* Generic.Deleted.Specific */ + .ge { color: $base1 !important; font-style: italic !important; } /* Generic.Emph */ + //.gr { color: #aa0000 } /* Generic.Error */ + .gh { color: $base01 !important; } /* Generic.Heading */ + .gi { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: block; } /* Generic.Inserted */ + .gi .x { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: block; } /* Generic.Inserted.Specific */ + //.go { color: #888888 } /* Generic.Output */ + //.gp { color: #555555 } /* Generic.Prompt */ + .gs { color: $base1 !important; font-weight: bold !important; } /* Generic.Strong */ + .gu { color: $violet !important; } /* Generic.Subheading */ + //.gt { color: #aa0000 } /* Generic.Traceback */ + .kc { color: $green !important; font-weight: bold !important; } /* Keyword.Constant */ + .kd { color: $blue !important; } /* Keyword.Declaration */ + .kp { color: $orange !important; font-weight: bold !important; } /* Keyword.Pseudo */ + .kr { color: $magenta !important; font-weight: bold !important; } /* Keyword.Reserved */ + .kt { color: $cyan !important; } /* Keyword.Type */ + .n { color: $blue !important; } + .na { color: $blue !important; } /* Name.Attribute */ + .nb { color: $green !important; } /* Name.Builtin */ + //.nc { color: #445588; font-weight: bold } /* Name.Class */ + .no { color: $yellow !important; } /* Name.Constant */ + //.ni { color: #800080 } /* Name.Entity */ + .ne { color: $blue !important; font-weight: bold !important; } /* Name.Exception */ + .nf { color: $blue !important; font-weight: bold !important; } /* Name.Function */ + .nn { color: $yellow !important; } /* Name.Namespace */ + .nt { color: $blue !important; font-weight: bold !important; } /* Name.Tag */ + .nx { color: $yellow !Important; } + //.bp { color: #999999 } /* Name.Builtin.Pseudo */ + //.vc { color: #008080 } /* Name.Variable.Class */ + .vg { color: $blue !important; } /* Name.Variable.Global */ + .vi { color: $blue !important; } /* Name.Variable.Instance */ + .nv { color: $blue !important; } /* Name.Variable */ + //.w { color: #bbbbbb } /* Text.Whitespace */ + .mf { color: $cyan !important; } /* Literal.Number.Float */ + .m { color: $cyan !important; } /* Literal.Number */ + .mh { color: $cyan !important; } /* Literal.Number.Hex */ + .mi { color: $cyan !important; } /* Literal.Number.Integer */ + //.mo { color: #009999 } /* Literal.Number.Oct */ + .s { color: $cyan !important; } /* Literal.String */ + //.sb { color: #d14 } /* Literal.String.Backtick */ + //.sc { color: #d14 } /* Literal.String.Char */ + .sd { color: $cyan !important; } /* Literal.String.Doc */ + .s2 { color: $cyan !important; } /* Literal.String.Double */ + .se { color: $red !important; } /* Literal.String.Escape */ + //.sh { color: #d14 } /* Literal.String.Heredoc */ + .si { color: $blue !important; } /* Literal.String.Interpol */ + //.sx { color: #d14 } /* Literal.String.Other */ + .sr { color: $cyan !important; } /* Literal.String.Regex */ + .s1 { color: $cyan !important; } /* Literal.String.Single */ + //.ss { color: #990073 } /* Literal.String.Symbol */ + //.il { color: #009999 } /* Literal.Number.Integer.Long */ +} .highlight { - padding: 0 0 0.1em; - color: white; - // Comment - .c { - color: #999988; - font-style: italic; } - // Error - .err { - color: #a61717; - background-color: #e3d2d2; } - // Name - .n { - color: white; } - // Keyword - .k { - color: rgb(255, 157, 0); } - // Paren - .p { - color: darken(#ff9d00, 33); } - // Operator - .o { - color: rgb(255, 157, 0); } - // Comment.Multiline - .cm { - color: #999988; - font-style: italic; } - // Comment.Preproc - .cp { - color: #999999; } - // Comment.Single - .c1 { - color: #999988; - font-style: italic; } - // Comment.Special - .cs { - color: #999999; - font-style: italic; } - // Generic.Deleted - .gd { - color: black; - background-color: #ffdddd; } - // Generic.Deleted.Specific - .gd .x { - color: black; - background-color: #ffaaaa; } - // Generic.Emph - .ge { - font-style: italic; } - // Generic.Error - .gr { - color: #aa0000; } - // Generic.Heading - .gh { - color: #999999; } - // Generic.Inserted - .gi { - color: black; - background-color: #ddffdd; } - // Generic.Inserted.Specific - .gi .x { - color: black; - background-color: #aaffaa; } - // Generic.Output - .go { - color: #888888; } - // Generic.Prompt - .gp { - color: #555555; } - // Generic.Strong - .gs { - color: white; } - // Generic.Subheading - .gu { - color: #aaaaaa; } - // Generic.Traceback - .gt { - color: #aa0000; } - // Keyword.Constant - .kc { - color: white; } - // Keyword.Declaration - .kd { - color: white; } - // Keyword.Pseudo - .kp { - color: white; } - // Keyword.Reserved - .kr { - color: white; } - // Keyword.Type - .kt { - color: #445588; } - // Literal.Number - .m { - color: rgb(255, 98, 140); } - // Literal.String - .s { - color: #dd1144; } - // Name.Attribute - .na { - color: teal; } - // Name.Builtin - .nb { - color: darken(rgb(128, 255, 187), 20); } - // Name.Class - .nc { - color: darken(rgb(128, 255, 187), 20); } - // Name.Constant - .no { - color: rgb(128, 255, 187); } - // Name.Entity - .ni { - color: purple; } - // Name.Exception - .ne { - color: rgb(255, 221, 0); } - // Name.Function - .nf { - color: rgb(255, 221, 0); } - // Name.Namespace - .nn { - color: #555555; } - // Name.Tag - .nt { - color: white; } - // Name.Variable - .nv { - color: teal; } - // Operator.Word - .ow { - color: white; } - // Text.Whitespace - .w { - color: #bbbbbb; } - // Literal.Number - .nl { - color: rgb(255, 98, 140); } - // Literal.Number.Float - .mf { - color: rgb(255, 98, 140); } - // Literal.Number.Hex - .mh { - color: rgb(255, 98, 140); } - // Literal.Number.Integer - .mi { - color: rgb(255, 98, 140); } - // Literal.Number.Oct - .mo { - color: rgb(255, 98, 140); } - // Literal.String.Backtick - .sb { - color: rgb(58, 217, 0); } - // Literal.String.Char - .sc { - color: rgb(58, 217, 0); } - // Literal.String.Doc - .sd { - color: rgb(58, 217, 0); } - // Literal.String.Double - .s2 { - color: rgb(58, 217, 0); } - // Literal.String.Escape - .se { - color: rgb(58, 217, 0); } - // Literal.String.Heredoc - .sh { - color: rgb(58, 217, 0); } - // Literal.String.Interpol - .si { - color: rgb(158, 255, 128); } - // Literal.String.Other - .sx { - color: rgb(58, 217, 0); } - // Literal.String.Regex - .sr { - color: #009926; } - // Literal.String.Single - .s1 { - color: rgb(58, 217, 0); } - // Literal.String.Symbol - .ss { - color: rgb(255, 98, 140); } - // Name.Builtin.Pseudo - .bp { - color: #999999; } - // Name.Variable.Class - .vc { - color: teal; } - // Name.Variable.Global - .vg { - color: teal; } - // Name.Variable.Instance - .vi { - color: teal; } - // Literal.Number.Integer.Long - .il { - color: rgb(255, 98, 140); } } + margin-bottom: 1.5em; + overflow-y: hidden; + .gutter pre { + padding-left: .8em !important; + padding-right: .8em !important; + } +} + +h3.filename { + font-size: 13px; + line-height: 2em; + text-align: center; + text-shadow: #cbcccc 0 1px 0; + color: #474747; + font-style: normal; + margin-bottom: 0; + + @include border-top-radius(5px); + font-family: "Helvetica Neue",Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif; + background: #aaaaaa image-url("code_bg.png") top repeat-x; + border: 1px solid #565656; + border-top-color: #cbcbcb; + border-left-color: #a5a5a5; + border-right-color: #a5a5a5; + border-bottom: 0; +} diff --git a/sass/themes/classic/partials/_twitter.scss b/sass/themes/classic/partials/_twitter.scss index 5d8b7d9..eabe347 100644 --- a/sass/themes/classic/partials/_twitter.scss +++ b/sass/themes/classic/partials/_twitter.scss @@ -1,15 +1,49 @@ -#twitter { +#tweets { + a { + color: #666; + text-decoration: none; + &:hover { text-decoration: underline; } + } + li:hover a[href*='status']{ + color: #666; + } p { - padding-bottom: 10px; - a.topic { - color: $twitter_topic; } } - .meta { - color: $light_text; - font-size: 80%; - display: block; - padding: 8px 0 0; - a { - color: inherit; + position: relative; + padding-right: 1.4em; + } + a[href*='status']{ + color: #ccc; + position: absolute; + top: 0; + right: -.5em; + text-decoration: none; + padding: 0 .5em .1em; + text-shadow: #fff 0 1px; + span:last-child { + display: none; + font-size: .7em; + } + span:first-child { + font-size: 1.1em; + } + &:hover { + span:first-child{ display: none; } + span:last-child{ display: inline-block; } + background: #e5e5e5; + @include box-shadow($sidebar-bg -2px 2px 8px 8px); + @include border-radius(1em); text-decoration: none; - &:hover { - text-decoration: underline; } } } } + line-height: 1.2em; + span:last-child { + color: #444; + //text-shadow: #eee 0 1px; + } + } + } + a[href*='twitter.com/search']{ + @extend .aside-alt-link; + &:hover { + text-decoration: underline; + } + } +} diff --git a/source/_includes/article.html b/source/_includes/article.html index 92f0672..3481cf2 100644 --- a/source/_includes/article.html +++ b/source/_includes/article.html @@ -1,18 +1,27 @@
    -

    {{ page.title }}

    -

    - {% if site.author or site.author == page.author %} - - {% elsif page.author %} - + {% if index %} +

    {{ page.title }}

    + {% else %} +

    {{ page.title }}

    + {% endif %} + {% unless page.nometa %} + {% if page.author %} + {% assign author = page.author %} + {% else %} + {% assign author = site.author %} {% endif %} - {% if page.date %} - - {% endif %} - {% if page.updated %} - - {% endif %} -

    +

    + {% if author %} + + {% endif %} + {% if page.date %} + + {% endif %} + {% if page.updated %} + + {% endif %} +

    + {% endunless %}
    {% if index %}
    {{ content | exerpt(content, page.url, 'Continue reading »') | smart_quotes }}
    diff --git a/source/_includes/footer.html b/source/_includes/footer.html index de560ed..5b40083 100644 --- a/source/_includes/footer.html +++ b/source/_includes/footer.html @@ -3,9 +3,9 @@ Powered by Octopress

    {% if site.pinboard_user %} + - {% endif %} diff --git a/source/_includes/head.html b/source/_includes/head.html index 1d3329b..b311ca6 100644 --- a/source/_includes/head.html +++ b/source/_includes/head.html @@ -1,7 +1,16 @@ + + + + + + - - {{page.title}} - {{site.title}} + {% if page.title %} + {{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %} + {% else %} + {{site.title}}{% if site.author %} - {{ site.author }}{% endif %} + {% endif %} {% if page.description %} @@ -10,7 +19,7 @@ - + {% if page.keywords %} @@ -18,8 +27,12 @@ - - + + + + + + {% if site.google_analytics_tracking_id %} {% include google_analytics.html %} {% endif %} diff --git a/source/_includes/sidebar.html b/source/_includes/sidebar.html index c5e3bd0..0389046 100644 --- a/source/_includes/sidebar.html +++ b/source/_includes/sidebar.html @@ -2,14 +2,13 @@

    About Me

    Hi, I'm Octopress!

    -{% if site.recent_posts %} +{% if page.single and site.recent_posts %}

    Recent Posts

      {% for post in site.posts limit: site.recent_posts %}
    • {{ post.title }} -
    • {% endfor %}
    @@ -24,3 +23,4 @@ {% if site.pinboard_user %}
    {% include pinboard.html %}
    {% endif %} + diff --git a/source/_layouts/archive_monthly.html b/source/_layouts/archive_monthly.html new file mode 100644 index 0000000..85ada6d --- /dev/null +++ b/source/_layouts/archive_monthly.html @@ -0,0 +1,19 @@ +--- +layout: default +--- +
    +
    +

    {{ page.month | date_to_month }} {{ page.year }}

    +

    Posts from {{ page.month | date_to_month }}, {{ page.year }}

    +
      + {% for d in (1..31) reversed %} + {% if page.collated_posts[page.year][page.month][d] %} + {% for p in page.collated_posts[page.year][page.month][d] reversed %} +
    • {{ p.title }}
    • + {% endfor %} + {% endif %} + {% endfor %} +
    +
    +
    + diff --git a/source/_layouts/archive_yearly.html b/source/_layouts/archive_yearly.html new file mode 100644 index 0000000..dabebeb --- /dev/null +++ b/source/_layouts/archive_yearly.html @@ -0,0 +1,25 @@ +--- +layout: default +--- +
    +
    +

    {{ page.year }}

    +

    Posts from the year {{ page.year }}

    + {% for m in (1..12) reversed %} + {% if page.collated_posts[page.year][m] %} +

    {{ m | date_to_month }}

    + {% for d in (1..31) reversed %} + {% if page.collated_posts[page.year][m][d] %} + {% for p in page.collated_posts[page.year][m][d] reversed %} +
    + {{ p.date | date: "%d" }} + {{ p.title }} +
    + {% endfor %} + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} +
    +
    + diff --git a/source/_layouts/default.html b/source/_layouts/default.html index f69043b..06fdbd7 100644 --- a/source/_layouts/default.html +++ b/source/_layouts/default.html @@ -1,9 +1,6 @@ - - - - - - +--- +permalink: /blog/:year/:month/:day/:title +--- {% include head.html %}
    {% include header.html %}
    @@ -18,9 +15,9 @@
    {% include footer.html %}
    diff --git a/source/_layouts/page.html b/source/_layouts/page.html index 3b56834..88d6e13 100644 --- a/source/_layouts/page.html +++ b/source/_layouts/page.html @@ -1,5 +1,8 @@ --- layout: default +no_title_link: true +permalink: pretty +single: true ---
    diff --git a/source/_layouts/post.html b/source/_layouts/post.html index 3b56834..d2c87ce 100644 --- a/source/_layouts/post.html +++ b/source/_layouts/post.html @@ -1,5 +1,6 @@ --- layout: default +single: true ---
    diff --git a/source/_posts/2009-11-13-hello-world.markdown b/source/_posts/2009-11-13-hello-world.markdown index 011368d..af71985 100644 --- a/source/_posts/2009-11-13-hello-world.markdown +++ b/source/_posts/2009-11-13-hello-world.markdown @@ -7,9 +7,9 @@ updated: March 10th, 2010 **Octopress is a blogging framework designed for hackers**, based on [Jekyll](http://github.com/mojombo/jekyll) the blog aware static site generator powering [Github pages](http://pages.github.com/). If you don't know what Jekyll is, [Jack Moffitt](http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/) wrote a good summary: -> Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control. - -**Jack Moffitt** [Blogging with Git Emacs and Jekyll](http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/) +{% blockquote Jack Moffitt http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/ Blogging with Git Emacs and Jekyll %} + Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control. +{% endblockquote %} There's no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work. diff --git a/source/about.haml b/source/about.haml index b0e9fd6..bbd5a9c 100644 --- a/source/about.haml +++ b/source/about.haml @@ -2,6 +2,7 @@ layout: default title: About Me layout: page +description: this is about me date: May 14 2011 --- / use the :mardown filter if you want to write pages with Markdown diff --git a/source/archive.html b/source/archive.html new file mode 100644 index 0000000..98518aa --- /dev/null +++ b/source/archive.html @@ -0,0 +1,24 @@ +--- +layout: page +title: Blog Archive +nometa: true +--- +{% for post in site.posts reverse %} + {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} + {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %} + {% unless year == this_year %} + {% unless forloop.first %}{% endunless %} + {% assign year = this_year %} +

    {{ year }}

    +
      + {% endunless %} + {% unless month == this_month %} + {% assign month = this_month %} +
    • {{ month }}

    • + {% endunless %} +
    • + + {{post.title}} +
    • + {% if forloop.last %}
    {% endif %} +{% endfor %} diff --git a/source/index.html b/source/index.html index 03b6b9c..09eb8d1 100644 --- a/source/index.html +++ b/source/index.html @@ -1,6 +1,5 @@ --- layout: default -title: Octopress --- {% for page in site.posts limit:3 %} {% assign content = page.content %} diff --git a/source/javascripts/libs/DOMAssistantCompressed-2.8.js b/source/javascripts/libs/DOMAssistantCompressed-2.8.js deleted file mode 100644 index ff9ef9e..0000000 --- a/source/javascripts/libs/DOMAssistantCompressed-2.8.js +++ /dev/null @@ -1,4 +0,0 @@ -// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8 -var DOMAssistant=function(){var j=function(){},o=window,g=o.$,k=o.$$,d=/*@cc_on!@*/false,i=d&&parseFloat(navigator.appVersion)<6,h,c={},q={},a=true,n=Array.prototype.slice,p={accesskey:"accessKey","class":"className",colspan:"colSpan","for":"htmlFor",maxlength:"maxLength",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",cellspacing:"cellSpacing",cellpadding:"cellPadding"},m={rules:/\s*,\s*/g,selector:/^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/,selectorSplit:/(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g,id:/^#([-\w\u00C0-\uFFFF=$]+)$/,tag:/^\w+/,relation:/^[+>~]$/,pseudo:/^:(\w[-\w]*)(\((.+)\))?$/,pseudos:/:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g,attribs:/\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g,classes:/\.([-\w\u00C0-\uFFFF]+)/g,quoted:/^["'](.*)["']$/,nth:/^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/,special:/(:check|:enabl|\bselect)ed\b/},f=function(t,u,r){var s=t.tagName;while((t=t[u+"Sibling"])&&(t.nodeType!==1||(r?t.tagName!==s:t.tagName==="!"))){}return t},b=function(r){return typeof r!=="undefined"},l=function(r){return(l=r[0].compareDocumentPosition?function(s){return s.sort(function(u,t){return 3-(u.compareDocumentPosition(t)&6)})}:d?function(s){return s.sort(function(u,t){return u.sourceIndex-t.sourceIndex})}:function(s){return s.sort(function(w,u){var v=document.createRange(),t=document.createRange();v.setStart(w,0);v.setEnd(w,0);t.setStart(u,0);t.setEnd(u,0);return v.compareBoundaryPoints(Range.START_TO_END,t)})})(r)};var e=function(s,r){s.push.apply(s,n.apply(r));return s};if(d){e=function(t,s){if(s.slice){return t.concat(s)}var r=0,u;while((u=s[r++])){t[t.length]=u}return t}}return{isIE:d,camel:p,def:b,allMethods:[],publicMethods:["prev","next","hasChild","cssSelect","elmsByClass","elmsByAttribute","elmsByTag"],harmonize:function(){o.$=g;o.$$=k;return this},initCore:function(){this.applyMethod.call(o,"$",this.$);this.applyMethod.call(o,"$$",this.$$);o.DOMAssistant=this;if(d){j=Array}j.prototype=[];(function(r){r.each=function(v,u){for(var t=0,s=this.length;t=u)?(w-u)%u:w}else{if(t[8]){u=t[10]?parseInt(t[10],10):1;w=s=parseInt(t[11],10);while(w>u){w-=u}r=(s>=u)?(s-u)%u:s}}}}return{start:w,add:u,max:s,modVal:r}},cssByDOM:function(v){var aU,I,D,N,av,x,ah,A,K,w,aq,aN,y,aI,at,aB=new j(),aR=aB.indexOf,ap=[],aG=[],aK=v.replace(m.rules,",").split(","),aF={};function aQ(s){s=s||ap;for(var r=s.length;r--;){s[r].added=null;s[r].removeAttribute("added")}}function C(){for(var r=aU.length;r--;){aU[r].childElms=null}}function am(t,r){for(var u=0,aX;(aX=t[u]);u++){var aW=false;for(var s=0,aV;(aV=r[s]);s++){if(aV===aX){aW=true;r.splice(s,1);break}}if(aW){t.splice(u--,1)}}return t}function E(s,r){return(d||m.special.test(r))?s[p[r.toLowerCase()]||r]:s.getAttribute(r,2)}function P(r,s){r=r?r.replace(m.quoted,"$1").replace(/(\.|\[|\])/g,"\\$1"):null;return{"^":"^"+r,"$":r+"$","*":r,"|":"^"+r+"(\\-\\w+)*$","~":"\\b"+r+"\\b"}[s]||(r!==null?"^"+r+"$":r)}function W(r){return(r||this).tagName!=="!"}function S(r,s){return i?(r==="*"?s.all:s.all.tags(r)):s.getElementsByTagName(r)}function aL(r,s){r=r||"*";s=s||document;return(s===document||s.lastModified)?c[r]||(c[r]=S(r,document)):S(r,s)}function ar(aX,bf,u){aU=[];var aV=bf.split("-"),a0=[],a5=0,be=/\-of\-type$/.test(bf),a4,aZ={first:function(bg){return !f(bg,"previous",be)},last:function(bg){return !f(bg,"next",be)},empty:function(bg){return !bg.firstChild},enabled:function(bg){return !bg.disabled&&bg.type!=="hidden"},disabled:function(bg){return bg.disabled},checked:function(bg){return bg.checked},contains:function(bg){return(bg.innerText||bg.textContent||"").indexOf(u.replace(m.quoted,"$1"))>-1},other:function(bg){return E(bg,bf)===u}};function t(bg){while((A=aX[a5++])){if(W(A)&&aZ[bg](A)){a0[a0.length]=A}}return a0}var bb=aV[0]||null;if(bb&&aZ[bb]){return t(bb)}switch(bb){case"only":var a1,aW;while((A=aX[a5++])){K=A.parentNode;var a6=A.nodeName;if(K!==a1||a6!==aW){if(aZ.first(A)&&aZ.last(A)){a0[a0.length]=A}a1=K;aW=a6}}break;case"nth":if(u==="n"){a0=aX}else{var bd=(aV[1]==="last")?["lastChild","previousSibling"]:["firstChild","nextSibling"];aI=DOMAssistant.getSequence(u);if(aI){while((A=aX[a5++])){K=A.parentNode;K.childElms=K.childElms||{};var a7=A.nodeName;if(!K.childElms[a7]){var ba=0;aN=aI.start;y=K[bd[0]];while(y&&(aI.max<0||aN<=aI.max)){var bc=y.nodeName;if((be&&bc===a7)||(!be&&y.nodeType===1&&bc!=="!")){if(++ba===aN){if(bc===a7){a0[a0.length]=y}aN+=aI.add}}y=y[bd[1]]}if(at){h++}K.childElms[a7]=true;aU[aU.length]=K}}C()}}break;case"target":var s=document.location.hash.slice(1);if(s){while((A=aX[a5++])){if(E(A,"name")===s||E(A,"id")===s){a0[a0.length]=A;break}}}break;case"not":if((a4=m.pseudo.exec(u))){a0=am(aX,ar(aX,a4[1]?a4[1].toLowerCase():null,a4[3]||null))}else{for(var a8 in m){if(m[a8].lastIndex){m[a8].lastIndex=0}}u=u.replace(m.id,"[id=$1]");var a3=m.tag.exec(u);var aY=m.classes.exec(u);var a2=m.attribs.exec(u);var r=new RegExp(a2?P(a2[4],a2[2]):"(^|\\s)"+(a3?a3[0]:aY?aY[1]:"")+"(\\s|$)","i");while((w=aX[a5++])){aq=null;if(a3&&!r.test(w.nodeName)||aY&&!r.test(w.className)){aq=w}else{if(a2){var a9=E(w,a2[1]);if(!b(a9)||a9===false||typeof a9==="string"&&!r.test(a9)){aq=w}}}if(aq&&!aq.added){aq.added=true;a0[a0.length]=aq}}}break;default:return t("other")}return a0}function Z(aV,t){var r=0,u=aV,aW;while((aW=t[r++])){if(!u.length||u.indexOf(aW)<0){aV.push(aW)}}return aV}h=-1;for(var ak=0,aJ=[];(I=aK[ak]);ak++){if(!(D=I.match(m.selectorSplit))||ak&&aR.call(aK.slice(0,ak),I)>-1){continue}ap=[this];for(var ai=0,G;(G=D[ai]);ai++){aG=[];if((N=m.relation.exec(G))){var an=null,aS=D[ai+1];if((av=m.tag.exec(aS))){av=av[0];x=new RegExp("(^|\\s)"+av+"(\\s|$)","i")}else{if(m.id.test(aS)){an=DOMAssistant.$(aS)||null}}for(var ag=0,M;(M=ap[ag]);ag++){switch(N[0]){case">":var aD=an||aL(av,M);for(var ae=0,ay;(ay=aD[ae]);ae++){if(ay.parentNode===M){aG[aG.length]=ay}}break;case"+":if((M=f(M,"next"))){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){aG[aG.length]=M}}break;case"~":while((M=M.nextSibling)&&!M.added){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){M.added=true;aG[aG.length]=M}}break}}ap=aG;aQ();G=D[++ai];if(/^\w+$/.test(G)||m.id.test(G)){continue}ap.skipTag=true}var au=m.selector.exec(G);aF={tag:au[1]?au[1]:"*",id:au[2],allClasses:au[3],allAttr:au[5],allPseudos:au[10]};at=(aF.tag==="*");if(aF.id){var O=0,al=document.getElementById(aF.id.slice(1));if(al){while(ap[O]&&!DOMAssistant.hasChild.call(ap[O],al)){O++}aG=(O=0||aR.call(aJ,"*")>=0))?Z:e)(aB,ap);aJ.push(aF.tag);if(d&&at){aB=aB.filter(W)}}return((aB.length>1&&aK.length>1)||h>0)?l(aB):aB},cssByXpath:function(s){var t={xhtml:"http://www.w3.org/1999/xhtml"},u=(document.documentElement.namespaceURI===t.xhtml)?"xhtml:":"",r=function v(w){return t[w]||null};DOMAssistant.cssByXpath=function(N){var R,T,J,z,A,E,B=new j(),C=N.replace(m.rules,",").split(",");function M(W){var X=W?"[":"",V=W?"]":"";return function(Y,ac,ab,aa,Z){Z=(Z||"").replace(m.quoted,"$1");if(ac===Z&&ac==="readonly"){aa=null}return X+({"^":"starts-with(@"+ac+', "'+Z+'")',"$":"substring(@"+ac+", (string-length(@"+ac+") - "+(Z.length-1)+"), "+Z.length+') = "'+Z+'"',"*":'contains(concat(" ", @'+ac+', " "), "'+Z+'")',"|":"@"+ac+'="'+Z+'" or starts-with(@'+ac+', "'+Z+'-")',"~":'contains(concat(" ", @'+ac+', " "), " '+Z+' ")'}[ab]||("@"+ac+(aa?'="'+Z+'"':"")))+V}}function P(W,Y,X){W=/\-child$/.test(Y)?"*":W;var aa=Y.split("-"),V=((aa[1]==="last")?"(count(following-sibling::":"(count(preceding-sibling::")+W+") + 1)",Z,ab;switch(aa[0]){case"nth":return(X!=="n"&&(E=DOMAssistant.getSequence(X)))?((E.start===E.max)?V+" = "+E.start:V+" mod "+E.add+" = "+E.modVal+((E.start>1)?" and "+V+" >= "+E.start:"")+((E.max>0)?" and "+V+" <= "+E.max:"")):"";case"not":return"not("+((Z=m.pseudo.exec(X))?P(W,Z[1]?Z[1].toLowerCase():null,Z[3]||null):X.replace(m.id,"[id=$1]").replace(m.tag,"self::$0").replace(m.classes,'contains(concat(" ", @class, " "), " $1 ")').replace(m.attribs,M()))+")";case"first":return"not(preceding-sibling::"+W+")";case"last":return"not(following-sibling::"+W+")";case"only":return"not(preceding-sibling::"+W+" or following-sibling::"+W+")";case"empty":return"not(child::*) and not(text())";case"contains":return'contains(., "'+X.replace(m.quoted,"$1")+'")';case"enabled":return'not(@disabled) and not(@type="hidden")';case"disabled":return"@disabled";case"target":return'@name="'+(ab=document.location.hash.slice(1))+'" or @id="'+ab+'"';default:return"@"+Y+'="'+X+'"'}}for(var O=0;(R=C[O]);O++){if(!(T=R.match(m.selectorSplit))||O&&B.indexOf.call(C.slice(0,O),R)>-1){continue}J=J?J+" | .":".";for(var L=0,Q=T.length;L":"/","+":"/following-sibling::*[1]/self::","~":"/following-sibling::"}[A.tagRelation]||""):((L>0&&m.relation.test(T[L-1]))?A.tag:("//"+A.tag)))+(A.id||"").replace(m.id,'[@id = "$1"]')+(A.allClasses||"").replace(m.classes,'[contains(concat(" ", @class, " "), " $1 ")]')+(A.allAttr||"").replace(m.attribs,M(true));if(A.allPseudos){var D=A.allPseudos.match(m.pseudos);for(var K=0,x=D.length;K0&&ajaxObj.params)?("&"+ajaxObj.params):"")}return DOMAssistant.AJAX.makeCall.call(this,ajaxObj)},get:function(url,callback,addToContent){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"GET",callback,addToContent))},post:function(url,callback){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"POST",callback))},load:function(url,addToContent){this.get(url,DOMAssistant.AJAX.replaceWithAJAXContent,addToContent)},makeCall:function(ajaxObj){var XMLHttp=DOMAssistant.AJAX.initRequest();if(XMLHttp){globalXMLHttp=XMLHttp;(function(elm){var url=ajaxObj.url,method=ajaxObj.method||"GET",callback=ajaxObj.callback,params=ajaxObj.params,headers=ajaxObj.headers,responseType=ajaxObj.responseType||"text",addToContent=ajaxObj.addToContent,timeout=ajaxObj.timeout||null,ex=ajaxObj.exception,timeoutId=null,done=false;XMLHttp.open(method,url,true);XMLHttp.setRequestHeader("AJAX","true");XMLHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");if(method==="POST"){XMLHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");XMLHttp.setRequestHeader("Content-length",params?params.length:0);if(XMLHttp.overrideMimeType){XMLHttp.setRequestHeader("Connection","close")}}if(responseType==="json"){XMLHttp.setRequestHeader("Accept","application/json, text/javascript, */*")}for(var i in headers){if(typeof i==="string"){XMLHttp.setRequestHeader(i,headers[i])}}if(typeof callback==="function"){XMLHttp.onreadystatechange=function(){try{if(XMLHttp.readyState===4&&!done){window.clearTimeout(timeoutId);done=true;status=XMLHttp.status;statusText=XMLHttp.statusText;readyState=4;if((status||location.protocol!=="file:")&&(status<200||status>=300)){throw new Error(statusText)}var response=/xml/i.test(responseType)?XMLHttp.responseXML:XMLHttp.responseText;if(/json/i.test(responseType)&&!!response){response=(typeof JSON==="object"&&typeof JSON.parse==="function")?JSON.parse(response):eval("("+response+")")}globalXMLHttp=null;XMLHttp.onreadystatechange=function(){};requestPool.push(XMLHttp);callback.call(elm,response,addToContent)}}catch(e){globalXMLHttp=XMLHttp=null;if(typeof ex==="function"){ex.call(elm,e);ex=null}}}}XMLHttp.send(params);if(timeout){timeoutId=window.setTimeout(function(){if(!done){XMLHttp.abort();done=true;if(typeof ex==="function"){readyState=0;status=408;statusText="Request timeout";globalXMLHttp=XMLHttp=null;ex.call(elm,new Error(statusText));ex=null}}},timeout)}})(this)}return this},replaceWithAJAXContent:function(content,add){if(add){this.innerHTML+=content}else{DOMAssistant.cleanUp(this);this.innerHTML=content}},getReadyState:function(){return(globalXMLHttp&&DOMAssistant.def(globalXMLHttp.readyState))?globalXMLHttp.readyState:readyState},getStatus:function(){return status},getStatusText:function(){return statusText}}}();DOMAssistant.attach(DOMAssistant.AJAX);DOMAssistant.CSS=function(){var a=DOMAssistant.def,b={display:true};return{addClass:function(d){if(!this.hasClass(d)){var c=this.className;this.className=c+(c.length?" ":"")+d}return this},removeClass:function(c){return this.replaceClass(c)},replaceClass:function(d,e){var c=new RegExp(("(^|\\s)"+d+"(\\s|$)"),"i");this.className=this.className.replace(c,function(f,h,g){return e?(h+e+g):" "}).replace(/^\s+|\s+$/g,"");return this},hasClass:function(c){return(" "+this.className+" ").indexOf(" "+c+" ")>-1},setStyle:function(f,g){var e=this.style;if("filters" in this&&(typeof f==="string"?/opacity/i.test(f):a(f.opacity))){e.zoom=1;e.filter=(e.filter||"").replace(/alpha\([^)]*\)/,"")+"alpha(opacity="+(a(f.opacity)?f.opacity:g)*100+")"}if(a(e.cssText)){var c=e.cssText;if(typeof f==="object"){for(var d in f){if(typeof d==="string"){if(b[d]){e[d]=f[d]}c+=";"+d+":"+f[d]}}}else{if(b[f]){e[f]=g}c+=";"+f+":"+g}e.cssText=c}return this},getStyle:function(c){var e="",d;c=c.toLowerCase();if(document.defaultView&&document.defaultView.getComputedStyle){e=document.defaultView.getComputedStyle(this,"").getPropertyValue(c)}else{if(this.currentStyle){if("filters" in this&&c==="opacity"){e=(d=this.style.filter||this.currentStyle.filter)&&d.indexOf("opacity=")>=0?parseFloat(d.match(/opacity=([^)]*)/)[1])/100:1}else{c=c.replace(/^float$/,"styleFloat").replace(/\-(\w)/g,function(f,g){return g.toUpperCase()});e=this.currentStyle[c]}if(e==="auto"&&/^(width|height)$/.test(c)&&this.currentStyle.display!=="none"){e=this["offset"+c.charAt(0).toUpperCase()+c.substr(1)]+"px"}}}return e}}}();DOMAssistant.attach(DOMAssistant.CSS);DOMAssistant.Content=function(){var a=DOMAssistant.$$;return{init:function(){DOMAssistant.setCache(false)},create:function(d,c,b,e){var f=a(document.createElement(d));if(c){f=f.setAttributes(c)}if(DOMAssistant.def(e)){f.addContent(e)}if(b){this.appendChild(f)}return f},setAttributes:function(b){if(DOMAssistant.isIE){var c=function(g,e,f){var d=e.toLowerCase();switch(d){case"name":case"type":case"multiple":return a(document.createElement(g.outerHTML.replace(new RegExp(d+"(=[a-zA-Z]+)?")," ").replace(">"," "+d+"="+f+">")));case"style":g.style.cssText=f;return g;default:g[DOMAssistant.camel[d]||e]=f;return g}};DOMAssistant.Content.setAttributes=function(d){var h=this;var g=this.parentNode;for(var f in d){if(typeof d[f]==="string"||typeof d[f]==="number"){var e=c(h,f,d[f]);if(g&&/(name|type)/i.test(f)){if(h.innerHTML){e.innerHTML=h.innerHTML}g.replaceChild(e,h)}h=e}}return h}}else{DOMAssistant.Content.setAttributes=function(d){for(var e in d){if(/class/i.test(e)){this.className=d[e]}else{this.setAttribute(e,d[e])}}return this}}return DOMAssistant.Content.setAttributes.call(this,b)},addContent:function(f){var d=typeof f;if(d==="string"||d==="number"){if(!this.firstChild){this.innerHTML=f}else{var c=document.createElement("div");c.innerHTML=f;for(var b=c.childNodes.length-1,e=null;b>=0;b--){e=this.insertBefore(c.childNodes[b],e)}}}else{if(d==="object"||(d==="function"&&!!f.nodeName)){this.appendChild(f)}}return this},replaceContent:function(b){DOMAssistant.cleanUp(this);return this.addContent(b)},replace:function(g,b){var f=typeof g;if(f==="string"||f==="number"){var e=this.parentNode;var d=DOMAssistant.Content.create.call(e,"div",null,false,g);for(var c=d.childNodes.length;c--;){e.insertBefore(d.childNodes[c],this.nextSibling)}g=this.nextSibling;e.removeChild(this)}else{if(f==="object"||(f==="function"&&!!g.nodeName)){this.parentNode.replaceChild(g,this)}}return b?g:this},remove:function(){DOMAssistant.cleanUp(this);if(this.hasData()){if(this.removeEvent){this.removeEvent()}this.unstore()}this.parentNode.removeChild(this);return null}}}();DOMAssistant.attach(DOMAssistant.Content);DOMAssistant.Events=function(){var i,g="_events",c=!!document.addEventListener,a={focus:true,blur:true},b=DOMAssistant.isIE?{focus:"activate",blur:"deactivate",mouseenter:"mouseover",mouseleave:"mouseout"}:{mouseenter:"mouseover",mouseleave:"mouseout"},f={special:/^submit|reset|change|select$/i,mouseenterleave:/^mouse(enter|leave)$/i,dom:/^DOM/,on:/^on/i},e=function(j){return DOMAssistant.isIE&&f.special.test(j)},d=function(j){return b[j]||j},h=function(n,k,m){n=n||window.event||{};if(n.event){return n}var l={event:n,type:k||n.type,bubbles:n.bubbles||true,cancelable:n.cancelable||false,target:m||n.target||n.srcElement,clientX:n.clientX||0,clientY:n.clientY||0,altKey:n.altKey||false,ctrlKey:n.ctrlKey||false,shiftKey:n.shiftKey||false,button:n.button||null,timeStamp:+new Date(),preventDefault:function(){if(n.preventDefault){n.preventDefault()}this.returnValue=n.returnValue=false},stopPropagation:function(){if(n.stopPropagation){n.stopPropagation()}this.cancelBubble=n.cancelBubble=true}};if(l.target&&3===l.target.nodeType){l.target=l.target.parentNode}l.currentTarget=l.target;l.relatedTarget=n.relatedTarget||(n.fromElement===l.target?n.toElement:n.fromElement)||null;var o=document.documentElement,j=document.body;l.pageX=DOMAssistant.def(n.pageX)?n.pageX:(l.clientX+(o.scrollLeft||j.scrollLeft)-(o.clientLeft||0));l.pageY=DOMAssistant.def(n.pageY)?n.pageY:(l.clientY+(o.scrollTop||j.scrollTop)-(o.clientTop||0));if("number"===typeof n.which){l.keyCode=n.keyCode;l.charCode=l.which=n.which}else{if(n.keyCode){l.keyCode=l.charCode=n.keyCode}}return l};return{publicMethods:["triggerEvent","addEvent","removeEvent","relayEvent","unrelayEvent","preventDefault","cancelBubble"],init:function(){DOMAssistant.preventDefault=this.preventDefault;DOMAssistant.cancelBubble=this.cancelBubble;i=this.handleEvent},triggerEvent:function(r,o,q){var m=d(r),s=this.retrieve(g),j=q||h(q,m,o||this);j.currentTarget=this;if(s&&s[m]){for(var n=0,l=s[m].length;n<\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/ -if(document.addEventListener){document.addEventListener("DOMContentLoaded",e,false)}if(/KHTML|WebKit|iCab/i.test(navigator.userAgent)){a=setInterval(function(){if(/loaded|complete/i.test(document.readyState)){e();clearInterval(a)}},10)}window.onload=e;return{DOMReady:function(){for(var j=0,h=arguments.length,k;j.+?<\\/" + t + ">", "g")); + each(bitches, function (m) { + m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2'); + var bah = doc.createElement(t); + bah.appendChild(doc.createDocumentFragment(m)); + el.appendChild(bah); + }); + } else { + el.innerHTML = node; + } + var nodes = el.childNodes; + el = el.firstChild; + els.push(el); + while (el = el.nextSibling) { + (el.nodeType == 1) && els.push(el); + } + return els; + + }() : is(node) ? [node.cloneNode(true)] : []; + }; + + bonzo.doc = function () { + var w = html.scrollWidth, + h = html.scrollHeight, + vp = this.viewport(); + return { + width: Math.max(w, vp.width), + height: Math.max(h, vp.height) + }; + }; + + bonzo.firstChild = function (el) { + for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) { + if (c[i].nodeType === 1) { + e = c[j = i]; + } + } + return e; + }; + + bonzo.viewport = function () { + var h = self.innerHeight, + w = self.innerWidth; + ie && (h = html.clientHeight) && (w = html.clientWidth); + return { + width: w, + height: h + }; + }; + + bonzo.isAncestor = 'compareDocumentPosition' in html ? + function (container, element) { + return (container.compareDocumentPosition(element) & 16) == 16; + } : 'contains' in html ? + function (container, element) { + return container !== element && container.contains(element); + } : + function (container, element) { + while (element = element.parentNode) { + if (element === container) { + return true; + } + } + return false; + }; + + var old = context.bonzo; + bonzo.noConflict = function () { + context.bonzo = old; + return this; + }; + context['bonzo'] = bonzo; + +}(this);!function ($) { + + var b = bonzo; + b.setQueryEngine($); + $.ender(b); + $.ender(b(), true); + $.ender({ + create: function (node) { + return $(b.create(node)); + } + }); + + $.id = function (id) { + return $([document.getElementById(id)]); + }; + + function indexOf(ar, val) { + for (var i = 0; i < ar.length; i++) { + if (ar[i] === val) { + return i; + } + } + return -1; + } + + function uniq(ar) { + var a = [], i, j; + label: + for (i = 0; i < ar.length; i++) { + for (j = 0; j < a.length; j++) { + if (a[j] == ar[i]) { + continue label; + } + } + a[a.length] = ar[i]; + } + return a; + } + + $.ender({ + parents: function (selector, closest) { + var collection = $(selector), j, k, p, r = []; + for (j = 0, k = this.length; j < k; j++) { + p = this[j]; + while (p = p.parentNode) { + if (indexOf(collection, p) !== -1) { + r.push(p); + if (closest) break; + } + } + } + return $(uniq(r)); + }, + + closest: function (selector) { + return this.parents(selector, true); + }, + + first: function () { + return $(this[0]); + }, + + last: function () { + return $(this[this.length - 1]); + }, + + next: function () { + return $(b(this).next()); + }, + + previous: function () { + return $(b(this).previous()); + }, + + appendTo: function (t) { + return b(this.selector).appendTo(t, this); + }, + + prependTo: function (t) { + return b(this.selector).prependTo(t, this); + }, + + insertAfter: function (t) { + return b(this.selector).insertAfter(t, this); + }, + + insertBefore: function (t) { + return b(this.selector).insertBefore(t, this); + }, + + siblings: function () { + var i, l, p, r = []; + for (i = 0, l = this.length; i < l; i++) { + p = this[i]; + while (p = p.previousSibling) { + p.nodeType == 1 && r.push(p); + } + p = this[i]; + while (p = p.nextSibling) { + p.nodeType == 1 && r.push(p); + } + } + return $(r); + }, + + children: function () { + var el, r = []; + for (i = 0, l = this.length; i < l; i++) { + if (!(el = b.firstChild(this[i]))) { + continue; + } + r.push(el); + while (el = el.nextSibling) { + el.nodeType == 1 && r.push(el); + } + } + return $(uniq(r)); + }, + + height: function (v) { + return v ? this.css('height', v) : parseInt(this.css('height'), 10); + }, + + width: function (v) { + return v ? this.css('width', v) : parseInt(this.css('width'), 10); + } + }, true); + +}(ender || $); + +!function () { var exports = {}, module = { exports: exports }; !function (doc) { + var loaded = 0, fns = [], ol, f = false, + testEl = doc.createElement('a'), + domContentLoaded = 'DOMContentLoaded', + addEventListener = 'addEventListener', + onreadystatechange = 'onreadystatechange'; + + /^loade|c/.test(doc.readyState) && (loaded = 1); + + function flush() { + loaded = 1; + for (var i = 0, l = fns.length; i < l; i++) { + fns[i](); + } + } + doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() { + doc.removeEventListener(domContentLoaded, fn, f); + flush(); + }, f); + + + testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() { + if (/^c/.test(doc.readyState)) { + doc.detachEvent(onreadystatechange, ol); + flush(); + } + })); + + var domReady = testEl.doScroll ? + function (fn) { + self != top ? + !loaded ? + fns.push(fn) : + fn() : + !function () { + try { + testEl.doScroll('left'); + } catch (e) { + return setTimeout(function() { + domReady(fn); + }, 50); + } + fn(); + }(); + } : + function (fn) { + loaded ? fn() : fns.push(fn); + }; + + (typeof module !== 'undefined') && module.exports ? + (module.exports = {domReady: domReady}) : + (window.domReady = domReady); + +}(document); $.ender(module.exports); }.call($); +/*! + * qwery.js - copyright @dedfat + * https://github.com/ded/qwery + * Follow our software http://twitter.com/dedfat + * MIT License + */ + +!function (context, doc) { + + var c, i, j, k, l, m, o, p, r, v, + el, node, len, found, classes, item, items, token, + id = /#([\w\-]+)/, + clas = /\.[\w\-]+/g, + idOnly = /^#([\w\-]+$)/, + classOnly = /^\.([\w\-]+)$/, + tagOnly = /^([\w\-]+)$/, + tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/, + html = doc.documentElement, + tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/, + specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g, + simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/, + attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/, + chunker = new RegExp(simple.source + '(' + attr.source + ')?'); + + function array(ar) { + r = []; + for (i = 0, len = ar.length; i < len; i++) { + r[i] = ar[i]; + } + return r; + } + + var cache = function () { + this.c = {}; + }; + cache.prototype = { + g: function (k) { + return this.c[k] || undefined; + }, + s: function (k, v) { + this.c[k] = v; + return v; + } + }; + + var classCache = new cache(), + cleanCache = new cache(), + attrCache = new cache(), + tokenCache = new cache(); + + function q(query) { + return query.match(chunker); + } + + function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) { + var m, c, k; + if (tag && this.tagName.toLowerCase() !== tag) { + return false; + } + if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) { + return false; + } + if (idsAndClasses && (classes = idsAndClasses.match(clas))) { + for (i = classes.length; i--;) { + c = classes[i].slice(1); + if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) { + return false; + } + } + } + if (wholeAttribute && !value) { + o = this.attributes; + for (k in o) { + if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) { + return this; + } + } + } + if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) { + return false; + } + return this; + } + + function loopAll(tokens) { + var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els, + root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc; + if (!root) { + return r; + } + els = root.getElementsByTagName(tag); + for (i = 0, l = els.length; i < l; i++) { + el = els[i]; + if (item = interpret.apply(el, intr)) { + r.push(item); + } + } + return r; + } + + function clean(s) { + return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1')); + } + + function checkAttr(qualify, actual, val) { + switch (qualify) { + case '=': + return actual == val; + case '^=': + return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val)))); + case '$=': + return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$'))); + case '*=': + return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val)))); + case '~=': + return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)'))); + case '|=': + return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)'))); + } + return false; + } + + function _qwery(selector) { + var r = [], ret = [], i, l, + tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)); + tokens = tokens.slice(0); + if (!tokens.length) { + return r; + } + r = loopAll(tokens); + if (!tokens.length) { + return r; + } + // loop through all descendent tokens + for (j = 0, l = r.length, k = 0; j < l; j++) { + node = r[j]; + p = node; + // loop through each token + for (i = tokens.length; i--;) { + z: // loop through parent nodes + while (p !== html && (p = p.parentNode)) { + if (found = interpret.apply(p, q(tokens[i]))) { + break z; + } + } + } + found && (ret[k++] = node); + } + return ret; + } + + function boilerPlate(selector, _root, fn) { + var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc); + if (selector === window || isNode(selector)) { + return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : []; + } + if (selector && typeof selector === 'object' && isFinite(selector.length)) { + return array(selector); + } + if (m = selector.match(idOnly)) { + return (el = doc.getElementById(m[1])) ? [el] : []; + } + if (m = selector.match(tagOnly)) { + return array(root.getElementsByTagName(m[1])); + } + return false; + } + + function isNode(el) { + return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9)); + } + + function uniq(ar) { + var a = [], i, j; + label: + for (i = 0; i < ar.length; i++) { + for (j = 0; j < a.length; j++) { + if (a[j] == ar[i]) { + continue label; + } + } + a[a.length] = ar[i]; + } + return a; + } + + function qwery(selector, _root) { + var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc); + if (!root || !selector) { + return []; + } + if (m = boilerPlate(selector, _root, qwery)) { + return m; + } + return select(selector, root); + } + + var isAncestor = 'compareDocumentPosition' in html ? + function (element, container) { + return (container.compareDocumentPosition(element) & 16) == 16; + } : 'contains' in html ? + function (element, container) { + container = container == doc || container == window ? html : container; + return container !== element && container.contains(element); + } : + function (element, container) { + while (element = element.parentNode) { + if (element === container) { + return 1; + } + } + return 0; + }, + + select = (doc.querySelector && doc.querySelectorAll) ? + function (selector, root) { + if (doc.getElementsByClassName && (m = selector.match(classOnly))) { + return array((root).getElementsByClassName(m[1])); + } + return array((root).querySelectorAll(selector)); + } : + function (selector, root) { + var result = [], collection, collections = [], i; + if (m = selector.match(tagAndOrClass)) { + items = root.getElementsByTagName(m[1] || '*'); + r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)')); + for (i = 0, l = items.length, j = 0; i < l; i++) { + r.test(items[i].className) && (result[j++] = items[i]); + } + return result; + } + for (i = 0, items = selector.split(','), l = items.length; i < l; i++) { + collections[i] = _qwery(items[i]); + } + for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) { + var ret = collection; + if (root !== doc) { + ret = []; + for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) { + // make sure element is a descendent of root + isAncestor(element, root) && ret.push(element); + } + } + result = result.concat(ret); + } + return uniq(result); + }; + + qwery.uniq = uniq; + var oldQwery = context.qwery; + qwery.noConflict = function () { + context.qwery = oldQwery; + return this; + }; + context['qwery'] = qwery; + +}(this, document);!function (doc) { + var q = qwery.noConflict(); + function create(node, root) { + var el = (root || doc).createElement('div'), els = []; + el.innerHTML = node; + var nodes = el.childNodes; + el = el.firstChild; + els.push(el); + while (el = el.nextSibling) { + (el.nodeType == 1) && els.push(el); + } + return els; + }; + $._select = function (s, r) { + return /^\s*.+?<\\/"+d+">","g"));t(g,function(a){a=a.replace(/<(.+)>(.+?)<\/\1>/,"$2");var c=b.createElement(d);c.appendChild(b.createDocumentFragment(a)),e.appendChild(c)})}else e.innerHTML=a;var i=e.childNodes;e=e.firstChild,f.push(e);while(e=e.nextSibling)e.nodeType==1&&f.push(e);return f}():w(a)?[a.cloneNode(!0)]:[]},G.doc=function(){var a=c.scrollWidth,b=c.scrollHeight,d=this.viewport();return{width:Math.max(a,d.width),height:Math.max(b,d.height)}},G.firstChild=function(a){for(var b=a.childNodes,c=0,d=b&&b.length||0,e;c\{\}\$\*\^'"]*\])/,C=/([.*+?\^=!:${}()|\[\]\/\\])/g,D=/^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,E=/\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,F=new RegExp(D.source+"("+E.source+")?"),H=function(){this.c={}};H.prototype={g:function(a){return this.c[a]||undefined},s:function(a,b){this.c[a]=b;return b}};var I=new H,J=new H,K=new H,L=new H,W="compareDocumentPosition"in A?function(a,b){return(b.compareDocumentPosition(a)&16)==16}:"contains"in A?function(a,c){c=c==b||c==window?A:c;return c!==a&&c.contains(a)}:function(a,b){while(a=a.parentNode)if(a===b)return 1;return 0},X=b.querySelector&&b.querySelectorAll?function(a,c){if(b.getElementsByClassName&&(h=a.match(x)))return G(c.getElementsByClassName(h[1]));return G(c.querySelectorAll(a))}:function(a,c){var d=[],f,i=[],j;if(h=a.match(z)){s=c.getElementsByTagName(h[1]||"*"),k=I.g(h[2])||I.s(h[2],new RegExp("(^|\\s+)"+h[2]+"(\\s+|$)"));for(j=0,g=s.length,e=0;j~])?/, + selectorSplit: /(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g, + id: /^#([-\w\u00C0-\uFFFF=$]+)$/, + tag: /^\w+/, + relation: /^[+>~]$/, + pseudo: /^:(\w[-\w]*)(\((.+)\))?$/, + pseudos: /:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g, + attribs: /\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g, + classes: /\.([-\w\u00C0-\uFFFF]+)/g, + quoted: /^["'](.*)["']$/, + nth: /^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/, + special: /(:check|:enabl|\bselect)ed\b/ + }, + navigate = function (node, direction, checkTagName) { + var oldName = node.tagName; + while ((node = node[direction + "Sibling"]) && (node.nodeType !== 1 || (checkTagName? node.tagName !== oldName : node.tagName === "!"))) {} + return node; + }, + def = function (obj) { + return typeof obj !== "undefined"; + }, + sortDocumentOrder = function (elmArray) { + return (sortDocumentOrder = elmArray[0].compareDocumentPosition? function (elmArray) { return elmArray.sort( function (a, b) { return 3 - (a.compareDocumentPosition(b) & 6); } ); } : + isIE? function (elmArray) { return elmArray.sort( function (a, b) { return a.sourceIndex - b.sourceIndex; } ); } : + function (elmArray) { return elmArray.sort( function (a, b) { + var range1 = document.createRange(), range2 = document.createRange(); + range1.setStart(a, 0); + range1.setEnd(a, 0); + range2.setStart(b, 0); + range2.setEnd(b, 0); + return range1.compareBoundaryPoints(Range.START_TO_END, range2); + } ); })(elmArray); + }; + var pushAll = function (set1, set2) { + set1.push.apply(set1, slice.apply(set2)); + return set1; + }; + if (isIE) { + pushAll = function (set1, set2) { + if (set2.slice) { + return set1.concat(set2); + } + var i=0, item; + while ((item = set2[i++])) { + set1[set1.length] = item; + } + return set1; + }; + } + return { + isIE : isIE, + camel : camel, + def : def, + allMethods : [], + publicMethods : [ + "prev", + "next", + "hasChild", + "cssSelect", + "elmsByClass", + "elmsByAttribute", + "elmsByTag" + ], + + harmonize : function () { + w.$ = _$; + w.$$ = _$$; + return this; + }, + + initCore : function () { + this.applyMethod.call(w, "$", this.$); + this.applyMethod.call(w, "$$", this.$$); + w.DOMAssistant = this; + if (isIE) { + HTMLArray = Array; + } + HTMLArray.prototype = []; + (function (H) { + H.each = function (fn, context) { + for (var i=0, il=this.length; i= add)? (start - add) % add : start; + } + else if (pseudoVal[8]) { // -an+b + add = pseudoVal[10]? parseInt(pseudoVal[10], 10) : 1; + start = max = parseInt(pseudoVal[11], 10); + while (start > add) { + start -= add; + } + modVal = (max >= add)? (max - add) % add : max; + } + return { start: start, add: add, max: max, modVal: modVal }; + }, + + cssByDOM : function (cssRule) { + var prevParents, currentRule, cssSelectors, childOrSiblingRef, nextTag, nextRegExp, current, previous, prevParent, notElm, addElm, iteratorNext, childElm, sequence, anyTag, + elm = new HTMLArray(), index = elm.indexOf, prevElm = [], matchingElms = [], cssRules = cssRule.replace(regex.rules, ",").split(","), splitRule = {}; + function clearAdded (elm) { + elm = elm || prevElm; + for (var n=elm.length; n--;) { + elm[n].added = null; + elm[n].removeAttribute("added"); + } + } + function clearChildElms () { + for (var n=prevParents.length; n--;) { + prevParents[n].childElms = null; + } + } + function subtractArray (arr1, arr2) { + for (var i=0, src1; (src1=arr1[i]); i++) { + var found = false; + for (var j=0, src2; (src2=arr2[j]); j++) { + if (src2 === src1) { + found = true; + arr2.splice(j, 1); + break; + } + } + if (found) { + arr1.splice(i--, 1); + } + } + return arr1; + } + function getAttr (elm, attr) { + return (isIE || regex.special.test(attr))? elm[camel[attr.toLowerCase()] || attr] : elm.getAttribute(attr, 2); + } + function attrToRegExp (attrVal, substrOperator) { + attrVal = attrVal? attrVal.replace(regex.quoted, "$1").replace(/(\.|\[|\])/g, "\\$1") : null; + return { + "^": "^" + attrVal, + "$": attrVal + "$", + "*": attrVal, + "|": "^" + attrVal + "(\\-\\w+)*$", + "~": "\\b" + attrVal + "\\b" + }[substrOperator] || (attrVal !== null? "^" + attrVal + "$" : attrVal); + } + function notComment(el) { + return (el || this).tagName !== "!"; + } + function getTags (tag, context) { + return isIE5? (tag === "*"? context.all : context.all.tags(tag)) : context.getElementsByTagName(tag); + } + function getElementsByTagName (tag, parent) { + tag = tag || "*"; + parent = parent || document; + return (parent === document || parent.lastModified)? tagCache[tag] || (tagCache[tag] = getTags(tag, document)) : getTags(tag, parent); + } + function getElementsByPseudo (previousMatch, pseudoClass, pseudoValue) { + prevParents = []; + var pseudo = pseudoClass.split("-"), matchingElms = [], idx = 0, checkNodeName = /\-of\-type$/.test(pseudoClass), recur, + match = { + first: function(el) { return !navigate(el, "previous", checkNodeName); }, + last: function(el) { return !navigate(el, "next", checkNodeName); }, + empty: function(el) { return !el.firstChild; }, + enabled: function(el) { return !el.disabled && el.type !== "hidden"; }, + disabled: function(el) { return el.disabled; }, + checked: function(el) { return el.checked; }, + contains: function(el) { return (el.innerText || el.textContent || "").indexOf(pseudoValue.replace(regex.quoted, "$1")) > -1; }, + other: function(el) { return getAttr(el, pseudoClass) === pseudoValue; } + }; + function basicMatch(key) { + while ((previous=previousMatch[idx++])) { + if (notComment(previous) && match[key](previous)) { + matchingElms[matchingElms.length] = previous; + } + } + return matchingElms; + } + var word = pseudo[0] || null; + if (word && match[word]) { + return basicMatch(word); + } + switch (word) { + case "only": + var kParent, kTag; + while ((previous=previousMatch[idx++])) { + prevParent = previous.parentNode; + var q = previous.nodeName; + if (prevParent !== kParent || q !== kTag) { + if (match.first(previous) && match.last(previous)) { + matchingElms[matchingElms.length] = previous; + } + kParent = prevParent; + kTag = q; + } + } + break; + case "nth": + if (pseudoValue === "n") { + matchingElms = previousMatch; + } + else { + var direction = (pseudo[1] === "last")? ["lastChild", "previousSibling"] : ["firstChild", "nextSibling"]; + sequence = DOMAssistant.getSequence(pseudoValue); + if (sequence) { + while ((previous=previousMatch[idx++])) { + prevParent = previous.parentNode; + prevParent.childElms = prevParent.childElms || {}; + var p = previous.nodeName; + if (!prevParent.childElms[p]) { + var childCount = 0; + iteratorNext = sequence.start; + childElm = prevParent[direction[0]]; + while (childElm && (sequence.max < 0 || iteratorNext <= sequence.max)) { + var c = childElm.nodeName; + if ((checkNodeName && c === p) || (!checkNodeName && childElm.nodeType === 1 && c !== "!")) { + if (++childCount === iteratorNext) { + if (c === p) { matchingElms[matchingElms.length] = childElm; } + iteratorNext += sequence.add; + } + } + childElm = childElm[direction[1]]; + } + if (anyTag) { sort++; } + prevParent.childElms[p] = true; + prevParents[prevParents.length] = prevParent; + } + } + clearChildElms(); + } + } + break; + case "target": + var hash = document.location.hash.slice(1); + if (hash) { + while ((previous=previousMatch[idx++])) { + if (getAttr(previous, "name") === hash || getAttr(previous, "id") === hash) { + matchingElms[matchingElms.length] = previous; + break; + } + } + } + break; + case "not": + if ((recur = regex.pseudo.exec(pseudoValue))) { + matchingElms = subtractArray(previousMatch, getElementsByPseudo(previousMatch, recur[1]? recur[1].toLowerCase() : null, recur[3] || null)); + } + else { + for (var re in regex) { + if (regex[re].lastIndex) { + regex[re].lastIndex = 0; + } + } + pseudoValue = pseudoValue.replace(regex.id, "[id=$1]"); + var notTag = regex.tag.exec(pseudoValue); + var notClass = regex.classes.exec(pseudoValue); + var notAttr = regex.attribs.exec(pseudoValue); + var notRegExp = new RegExp(notAttr? attrToRegExp(notAttr[4], notAttr[2]) : "(^|\\s)" + (notTag? notTag[0] : notClass? notClass[1] : "") + "(\\s|$)", "i"); + while ((notElm=previousMatch[idx++])) { + addElm = null; + if (notTag && !notRegExp.test(notElm.nodeName) || notClass && !notRegExp.test(notElm.className)) { + addElm = notElm; + } + else if (notAttr) { + var att = getAttr(notElm, notAttr[1]); + if (!def(att) || att === false || typeof att === "string" && !notRegExp.test(att)) { + addElm = notElm; + } + } + if (addElm && !addElm.added) { + addElm.added = true; + matchingElms[matchingElms.length] = addElm; + } + } + } + break; + default: return basicMatch("other"); + } + return matchingElms; + } + function pushUnique(set1, set2) { + var i=0, s=set1, item; + while ((item = set2[i++])) { + if (!s.length || s.indexOf(item) < 0) { + set1.push(item); + } + } + return set1; + } + sort = -1; + for (var a=0, tagBin=[]; (currentRule=cssRules[a]); a++) { + if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || a && index.call(cssRules.slice(0, a), currentRule) > -1) { continue; } + prevElm = [this]; + for (var i=0, rule; (rule=cssSelectors[i]); i++) { + matchingElms = []; + if ((childOrSiblingRef = regex.relation.exec(rule))) { + var idElm = null, nextWord = cssSelectors[i+1]; + if ((nextTag = regex.tag.exec(nextWord))) { + nextTag = nextTag[0]; + nextRegExp = new RegExp("(^|\\s)" + nextTag + "(\\s|$)", "i"); + } + else if (regex.id.test(nextWord)) { + idElm = DOMAssistant.$(nextWord) || null; + } + for (var j=0, prevRef; (prevRef=prevElm[j]); j++) { + switch (childOrSiblingRef[0]) { + case ">": + var children = idElm || getElementsByTagName(nextTag, prevRef); + for (var k=0, child; (child=children[k]); k++) { + if (child.parentNode === prevRef) { + matchingElms[matchingElms.length] = child; + } + } + break; + case "+": + if ((prevRef = navigate(prevRef, "next"))) { + if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { + matchingElms[matchingElms.length] = prevRef; + } + } + break; + case "~": + while ((prevRef = prevRef.nextSibling) && !prevRef.added) { + if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { + prevRef.added = true; + matchingElms[matchingElms.length] = prevRef; + } + } + break; + } + } + prevElm = matchingElms; + clearAdded(); + rule = cssSelectors[++i]; + if (/^\w+$/.test(rule) || regex.id.test(rule)) { + continue; + } + prevElm.skipTag = true; + } + var cssSelector = regex.selector.exec(rule); + splitRule = { + tag : cssSelector[1]? cssSelector[1] : "*", + id : cssSelector[2], + allClasses : cssSelector[3], + allAttr : cssSelector[5], + allPseudos : cssSelector[10] + }; + anyTag = (splitRule.tag === "*"); + if (splitRule.id) { + var u = 0, DOMElm = document.getElementById(splitRule.id.slice(1)); + if (DOMElm) { + while (prevElm[u] && !DOMAssistant.hasChild.call(prevElm[u], DOMElm)) { u++; } + matchingElms = (u < prevElm.length && (anyTag || splitRule.tag === DOMElm.tagName.toLowerCase()))? [DOMElm] : []; + } + prevElm = matchingElms; + } + else if (splitRule.tag && !prevElm.skipTag) { + if (i===0 && !matchingElms.length && prevElm.length === 1) { + prevElm = matchingElms = pushAll([], getElementsByTagName(splitRule.tag, prevElm[0])); + } + else { + for (var l=0, ll=prevElm.length, tagCollectionMatches, tagMatch; l= 0 || index.call(tagBin, "*") >= 0))? pushUnique : pushAll)(elm, prevElm); + tagBin.push(splitRule.tag); + if (isIE && anyTag) { elm = elm.filter(notComment); } + } + return ((elm.length > 1 && cssRules.length > 1) || sort > 0)? sortDocumentOrder(elm) : elm; + }, + + cssByXpath : function (cssRule) { + var ns = { xhtml: "http://www.w3.org/1999/xhtml" }, + prefix = (document.documentElement.namespaceURI === ns.xhtml)? "xhtml:" : "", + nsResolver = function lookupNamespaceURI (prefix) { + return ns[prefix] || null; + }; + DOMAssistant.cssByXpath = function (cssRule) { + var currentRule, cssSelectors, xPathExpression, cssSelector, splitRule, sequence, + elm = new HTMLArray(), cssRules = cssRule.replace(regex.rules, ",").split(","); + function attrToXPath (wrap) { + var pre = wrap? "[" : "", post = wrap? "]" : ""; + return function (match, p1, p2, p3, p4) { + p4 = (p4 || "").replace(regex.quoted, "$1"); + if (p1 === p4 && p1 === "readonly") { p3 = null; } + return pre + ({ + "^": "starts-with(@" + p1 + ", \"" + p4 + "\")", + "$": "substring(@" + p1 + ", (string-length(@" + p1 + ") - " + (p4.length - 1) + "), " + p4.length + ") = \"" + p4 + "\"", + "*": "contains(concat(\" \", @" + p1 + ", \" \"), \"" + p4 + "\")", + "|": "@" + p1 + "=\"" + p4 + "\" or starts-with(@" + p1 + ", \"" + p4 + "-\")", + "~": "contains(concat(\" \", @" + p1 + ", \" \"), \" " + p4 + " \")" + }[p2] || ("@" + p1 + (p3? "=\"" + p4 + "\"" : ""))) + post; + }; + } + function pseudoToXPath (tag, pseudoClass, pseudoValue) { + tag = /\-child$/.test(pseudoClass)? "*" : tag; + var pseudo = pseudoClass.split("-"), position = ((pseudo[1] === "last")? "(count(following-sibling::" : "(count(preceding-sibling::") + tag + ") + 1)", recur, hash; + switch (pseudo[0]) { + case "nth": return (pseudoValue !== "n" && (sequence = DOMAssistant.getSequence(pseudoValue)))? ((sequence.start === sequence.max)? position + " = " + sequence.start : position + " mod " + sequence.add + " = " + sequence.modVal + ((sequence.start > 1)? " and " + position + " >= " + sequence.start : "") + ((sequence.max > 0)? " and " + position + " <= " + sequence.max: "")) : ""; + case "not": return "not(" + ((recur = regex.pseudo.exec(pseudoValue))? pseudoToXPath(tag, recur[1]? recur[1].toLowerCase() : null, recur[3] || null) : pseudoValue.replace(regex.id, "[id=$1]").replace(regex.tag, "self::$0").replace(regex.classes, "contains(concat(\" \", @class, \" \"), \" $1 \")").replace(regex.attribs, attrToXPath())) + ")"; + case "first": return "not(preceding-sibling::" + tag + ")"; + case "last": return "not(following-sibling::" + tag + ")"; + case "only": return "not(preceding-sibling::" + tag + " or following-sibling::" + tag + ")"; + case "empty": return "not(child::*) and not(text())"; + case "contains": return "contains(., \"" + pseudoValue.replace(regex.quoted, "$1") + "\")"; + case "enabled": return "not(@disabled) and not(@type=\"hidden\")"; + case "disabled": return "@disabled"; + case "target": return "@name=\"" + (hash = document.location.hash.slice(1)) + "\" or @id=\"" + hash + "\""; + default: return "@" + pseudoClass + "=\"" + pseudoValue + "\""; + } + } + for (var i=0; (currentRule=cssRules[i]); i++) { + if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || i && elm.indexOf.call(cssRules.slice(0, i), currentRule) > -1) { continue; } + xPathExpression = xPathExpression? xPathExpression + " | ." : "."; + for (var j=0, jl=cssSelectors.length; j": "/", "+": "/following-sibling::*[1]/self::", "~": "/following-sibling::" }[splitRule.tagRelation] || "") : ((j > 0 && regex.relation.test(cssSelectors[j-1]))? splitRule.tag : ("//" + splitRule.tag))) + + (splitRule.id || "").replace(regex.id, "[@id = \"$1\"]") + + (splitRule.allClasses || "").replace(regex.classes, "[contains(concat(\" \", @class, \" \"), \" $1 \")]") + + (splitRule.allAttr || "").replace(regex.attribs, attrToXPath(true)); + if (splitRule.allPseudos) { + var allPseudos = splitRule.allPseudos.match(regex.pseudos); + for (var k=0, kl=allPseudos.length; k 0 && ajaxObj.params)? ("&" + ajaxObj.params) : ""); + } + return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); + }, + + get : function (url, callback, addToContent) { + return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "GET", callback, addToContent)); + }, + + post : function (url, callback) { + return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "POST", callback)); + }, + + load : function (url, addToContent) { + this.get(url, DOMAssistant.AJAX.replaceWithAJAXContent, addToContent); + }, + + makeCall : function (ajaxObj) { + var XMLHttp = DOMAssistant.AJAX.initRequest(); + if (XMLHttp) { + globalXMLHttp = XMLHttp; + (function (elm) { + var url = ajaxObj.url, + method = ajaxObj.method || "GET", + callback = ajaxObj.callback, + params = ajaxObj.params, + headers = ajaxObj.headers, + responseType = ajaxObj.responseType || "text", + addToContent = ajaxObj.addToContent, + timeout = ajaxObj.timeout || null, + ex = ajaxObj.exception, + timeoutId = null, + done = false; + XMLHttp.open(method, url, true); + XMLHttp.setRequestHeader("AJAX", "true"); + XMLHttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + if (method === "POST") { + XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + XMLHttp.setRequestHeader("Content-length", params? params.length : 0); + if (XMLHttp.overrideMimeType) { + XMLHttp.setRequestHeader("Connection", "close"); + } + } + if (responseType === "json") { + XMLHttp.setRequestHeader("Accept", "application/json, text/javascript, */*"); + } + for (var i in headers) { + if (typeof i === "string") { + XMLHttp.setRequestHeader(i, headers[i]); + } + } + if (typeof callback === "function") { + XMLHttp.onreadystatechange = function () { + try { + if (XMLHttp.readyState === 4 && !done) { + window.clearTimeout(timeoutId); + done = true; + status = XMLHttp.status; + statusText = XMLHttp.statusText; + readyState = 4; + if ((status || location.protocol !== "file:") && (status < 200 || status >= 300)) { + throw new Error(statusText); + } + var response = /xml/i.test(responseType)? XMLHttp.responseXML : XMLHttp.responseText; + if (/json/i.test(responseType) && !!response) { + response = (typeof JSON === "object" && typeof JSON.parse === "function")? JSON.parse(response) : eval("(" + response + ")"); + } + globalXMLHttp = null; + XMLHttp.onreadystatechange = function () {}; + requestPool.push(XMLHttp); + callback.call(elm, response, addToContent); + } + } + catch (e) { + globalXMLHttp = XMLHttp = null; + if (typeof ex === "function") { + ex.call(elm, e); + ex = null; + } + } + }; + } + XMLHttp.send(params); + if (timeout) { + timeoutId = window.setTimeout( function () { + if (!done) { + XMLHttp.abort(); + done = true; + if (typeof ex === "function") { + readyState = 0; + status = 408; + statusText = "Request timeout"; + globalXMLHttp = XMLHttp = null; + ex.call(elm, new Error(statusText)); + ex = null; + } + } + }, timeout); + } + })(this); + } + return this; + }, + + replaceWithAJAXContent : function (content, add) { + if (add) { + this.innerHTML += content; + } + else { + DOMAssistant.cleanUp(this); + this.innerHTML = content; + } + }, + + getReadyState : function () { + return (globalXMLHttp && DOMAssistant.def(globalXMLHttp.readyState))? globalXMLHttp.readyState : readyState; + }, + + getStatus : function () { + return status; + }, + + getStatusText : function () { + return statusText; + } + }; +}(); +DOMAssistant.attach(DOMAssistant.AJAX); +DOMAssistant.CSS = function () { + var def = DOMAssistant.def, + direct = { display: true }; + return { + addClass : function (className) { + if (!this.hasClass(className)) { + var currentClass = this.className; + this.className = currentClass + (currentClass.length? " " : "") + className; + } + return this; + }, + + removeClass : function (className) { + return this.replaceClass(className); + }, + + replaceClass : function (className, newClass) { + var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i"); + this.className = this.className.replace(classToRemove, function (match, p1, p2) { + return newClass? (p1 + newClass + p2) : " "; + }).replace(/^\s+|\s+$/g, ""); + return this; + }, + + hasClass : function (className) { + return (" " + this.className + " ").indexOf(" " + className + " ") > -1; + }, + + setStyle : function (style, value) { + var css = this.style; + if ("filters" in this && (typeof style === "string"? /opacity/i.test(style) : def(style.opacity))) { + css.zoom = 1; + css.filter = (css.filter || "").replace(/alpha\([^)]*\)/, "") + "alpha(opacity=" + (def(style.opacity)? style.opacity : value) * 100 + ")"; + } + if (def(css.cssText)) { + var styleToSet = css.cssText; + if (typeof style === "object") { + for (var i in style) { + if (typeof i === "string") { + if (direct[i]) { css[i] = style[i]; } + styleToSet += ";" + i + ":" + style[i]; + } + } + } + else { + if (direct[style]) { css[style] = value; } + styleToSet += ";" + style + ":" + value; + } + css.cssText = styleToSet; + } + return this; + }, + + getStyle : function (cssRule) { + var val = "", f; + cssRule = cssRule.toLowerCase(); + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(this, "").getPropertyValue(cssRule); + } + else if (this.currentStyle) { + if ("filters" in this && cssRule === "opacity") { + val = (f = this.style.filter || this.currentStyle.filter) && f.indexOf("opacity=") >= 0? parseFloat(f.match(/opacity=([^)]*)/)[1]) / 100 : 1; + } + else { + cssRule = cssRule.replace(/^float$/, "styleFloat").replace(/\-(\w)/g, function (match, p1) { + return p1.toUpperCase(); + }); + val = this.currentStyle[cssRule]; + } + if (val === "auto" && /^(width|height)$/.test(cssRule) && this.currentStyle.display !== "none") { + val = this["offset" + cssRule.charAt(0).toUpperCase() + cssRule.substr(1)] + "px"; + } + } + return val; + } + }; +}(); +DOMAssistant.attach(DOMAssistant.CSS); +DOMAssistant.Content = function () { + var D$ = DOMAssistant.$$; + return { + init : function () { + DOMAssistant.setCache(false); + }, + + create : function (name, attr, append, content) { + var elm = D$(document.createElement(name)); + if (attr) { + elm = elm.setAttributes(attr); + } + if (DOMAssistant.def(content)) { + elm.addContent(content); + } + if (append) { + this.appendChild(elm); + } + return elm; + }, + + setAttributes : function (attr) { + if (DOMAssistant.isIE) { + var setAttr = function (elm, att, val) { + var attLower = att.toLowerCase(); + switch (attLower) { + case "name": + case "type": + case "multiple": + return D$(document.createElement(elm.outerHTML.replace(new RegExp(attLower + "(=[a-zA-Z]+)?"), " ").replace(">", " " + attLower + "=" + val + ">"))); + case "style": + elm.style.cssText = val; + return elm; + default: + elm[DOMAssistant.camel[attLower] || att] = val; + return elm; + } + }; + DOMAssistant.Content.setAttributes = function (attr) { + var elem = this; + var parent = this.parentNode; + for (var i in attr) { + if (typeof attr[i] === "string" || typeof attr[i] === "number") { + var newElem = setAttr(elem, i, attr[i]); + if (parent && /(name|type)/i.test(i)) { + if (elem.innerHTML) { + newElem.innerHTML = elem.innerHTML; + } + parent.replaceChild(newElem, elem); + } + elem = newElem; + } + } + return elem; + }; + } + else { + DOMAssistant.Content.setAttributes = function (attr) { + for (var i in attr) { + if (/class/i.test(i)) { + this.className = attr[i]; + } + else { + this.setAttribute(i, attr[i]); + } + } + return this; + }; + } + return DOMAssistant.Content.setAttributes.call(this, attr); + }, + + addContent : function (content) { + var type = typeof content; + if (type === "string" || type === "number") { + if (!this.firstChild) { + this.innerHTML = content; + } + else { + var tmp = document.createElement("div"); + tmp.innerHTML = content; + for (var i=tmp.childNodes.length-1, last=null; i>=0; i--) { + last = this.insertBefore(tmp.childNodes[i], last); + } + } + } + else if (type === "object" || (type === "function" && !!content.nodeName)) { + this.appendChild(content); + } + return this; + }, + + replaceContent : function (content) { + DOMAssistant.cleanUp(this); + return this.addContent(content); + }, + + replace : function (content, returnNew) { + var type = typeof content; + if (type === "string" || type === "number") { + var parent = this.parentNode; + var tmp = DOMAssistant.Content.create.call(parent, "div", null, false, content); + for (var i=tmp.childNodes.length; i--;) { + parent.insertBefore(tmp.childNodes[i], this.nextSibling); + } + content = this.nextSibling; + parent.removeChild(this); + } + else if (type === "object" || (type === "function" && !!content.nodeName)) { + this.parentNode.replaceChild(content, this); + } + return returnNew? content : this; + }, + + remove : function () { + DOMAssistant.cleanUp(this); + if (this.hasData()) { + if (this.removeEvent) { this.removeEvent(); } + this.unstore(); + } + this.parentNode.removeChild(this); + return null; + } + }; +}(); +DOMAssistant.attach(DOMAssistant.Content); +DOMAssistant.Events = function () { + var handler, + key = "_events", + w3cMode = !!document.addEventListener, + useCapture = { focus: true, blur: true }, + translate = DOMAssistant.isIE? { focus: "activate", blur: "deactivate", mouseenter: "mouseover", mouseleave: "mouseout" } : { mouseenter: "mouseover", mouseleave: "mouseout" }, + regex = { + special: /^submit|reset|change|select$/i, + mouseenterleave: /^mouse(enter|leave)$/i, + dom: /^DOM/, + on: /^on/i + }, + special = function (e) { + return DOMAssistant.isIE && regex.special.test(e); + }, + fix = function (e) { + return translate[e] || e; + }, + createEvent = function (e, type, target) { + e = e || window.event || {}; + if (e.event) { return e; } + var event = { + event: e, + type: type || e.type, + bubbles: e.bubbles || true, + cancelable: e.cancelable || false, + target: target || e.target || e.srcElement, + clientX: e.clientX || 0, + clientY: e.clientY || 0, + altKey: e.altKey || false, + ctrlKey: e.ctrlKey || false, + shiftKey: e.shiftKey || false, + button: e.button || null, + timeStamp: +new Date(), + preventDefault: function() { + if (e.preventDefault) { e.preventDefault(); } + this.returnValue = e.returnValue = false; + }, + stopPropagation: function() { + if (e.stopPropagation) { e.stopPropagation(); } + this.cancelBubble = e.cancelBubble = true; + } + }; + if (event.target && 3 === event.target.nodeType) { // Safari textnode bug + event.target = event.target.parentNode; + } + event.currentTarget = event.target; + event.relatedTarget = e.relatedTarget || (e.fromElement === event.target? e.toElement : e.fromElement) || null; + var de = document.documentElement, b = document.body; + event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0)); + event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); + if ("number" === typeof e.which) { + event.keyCode = e.keyCode; + event.charCode = event.which = e.which; + } + else if (e.keyCode) { + event.keyCode = event.charCode = e.keyCode; + } + return event; + }; + + return { + publicMethods : [ + "triggerEvent", + "addEvent", + "removeEvent", + "relayEvent", + "unrelayEvent", + "preventDefault", + "cancelBubble" + ], + + init : function () { + DOMAssistant.preventDefault = this.preventDefault; + DOMAssistant.cancelBubble = this.cancelBubble; + handler = this.handleEvent; + }, + + triggerEvent : function (evt, target, e) { + var fevt = fix(evt), + events = this.retrieve(key), + event = e || createEvent(e, fevt, target || this); + event.currentTarget = this; + if (events && events[fevt]) { + for (var i=0, iL=events[fevt].length; i<\/script>"); + document.getElementById("ieScriptLoad").onreadystatechange = function() { + if (this.readyState === "complete") { + DOMHasLoaded(); + } + }; + @end @*/ + /* Mozilla, Chrome, Opera */ + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", DOMHasLoaded, false); + } + /* Safari, iCab, Konqueror */ + if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) { + DOMLoadTimer = setInterval(function () { + if (/loaded|complete/i.test(document.readyState)) { + DOMHasLoaded(); + clearInterval(DOMLoadTimer); + } + }, 10); + } + /* Other web browsers */ + window.onload = DOMHasLoaded; + + return { + DOMReady : function () { + for (var i=0, il=arguments.length, funcRef; i= thisstyle.minw ) && + (!thisstyle.maxw || thisstyle.maxw && currWidth <= thisstyle.maxw ) ){ + if( !styleBlocks[ thisstyle.media ] ){ + styleBlocks[ thisstyle.media ] = []; + } + styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); + } + } + + //remove any existing respond style element(s) + for( var i in appendedEls ){ + if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){ + head.removeChild( appendedEls[ i ] ); + } + } + + //inject active styles, grouped by media type + for( var i in styleBlocks ){ + var ss = doc.createElement( "style" ), + css = styleBlocks[ i ].join( "\n" ); + + ss.type = "text/css"; + ss.media = i; + + if ( ss.styleSheet ){ + ss.styleSheet.cssText = css; + } + else { + ss.appendChild( doc.createTextNode( css ) ); + } + dFrag.appendChild( ss ); + appendedEls.push( ss ); + } + + //append to DOM at once + head.insertBefore( dFrag, lastLink.nextSibling ); + }, + //tweaked Ajax functions from Quirksmode + ajax = function( url, callback ) { + var req = xmlHttp(); + if (!req){ + return; + } + req.open( "GET", url, true ); + req.onreadystatechange = function () { + if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){ + return; + } + callback( req.responseText ); + } + if ( req.readyState == 4 ){ + return; + } + req.send(); + }, + //define ajax obj + xmlHttp = (function() { + var xmlhttpmethod = false, + attempts = [ + function(){ return new ActiveXObject("Microsoft.XMLHTTP") }, + function(){ return new XMLHttpRequest() } + ], + al = attempts.length; + + while( al-- ){ + try { + xmlhttpmethod = attempts[ al ](); + } + catch(e) { + continue; + } + break; + } + return function(){ + return xmlhttpmethod; + }; + })(); + + //translate CSS + ripCSS(); + + //expose update for re-running respond later on + respond.update = ripCSS; + + //adjust on resize + function callMedia(){ + applyMedia( true ); + } + if( win.addEventListener ){ + win.addEventListener( "resize", callMedia, false ); + } + else if( win.attachEvent ){ + win.attachEvent( "onresize", callMedia ); + } +})( + this, + (function( win ){ + + //for speed, flag browsers with window.matchMedia support and IE 9 as supported + if( win.matchMedia ){ return true; } + + var bool, + doc = document, + docElem = doc.documentElement, + refNode = docElem.firstElementChild || docElem.firstChild, + // fakeBody required for + fakeUsed = !doc.body, + fakeBody = doc.body || doc.createElement( "body" ), + div = doc.createElement( "div" ), + q = "only all"; + + div.id = "mq-test-1"; + div.style.cssText = "position:absolute;top:-99em"; + fakeBody.appendChild( div ); + + div.innerHTML = '_'; + if( fakeUsed ){ + docElem.insertBefore( fakeBody, refNode ); + } + div.removeChild( div.firstChild ); + bool = div.offsetWidth == 9; + if( fakeUsed ){ + docElem.removeChild( fakeBody ); + } + else{ + fakeBody.removeChild( div ); + } + return bool; + })( this ) +); + diff --git a/source/javascripts/libs/ie/selectivizr-1.0.1.js b/source/javascripts/libs/ie/selectivizr-1.0.1.js new file mode 100644 index 0000000..0846b91 --- /dev/null +++ b/source/javascripts/libs/ie/selectivizr-1.0.1.js @@ -0,0 +1,5 @@ +/*! + * selectivizr v1.0.1 - (c) Keith Clark, freely distributable under the terms of the MIT license. + * selectivizr.com + */ +var k=true,p=false;(function(A){function N(a){return a.replace(O,q).replace(P,function(b,e,c){b=c.split(",");c=0;for(var g=b.length;c0){d=f;var x;i=h.substring(0,i).replace(U,o);if(i==o||i.charAt(i.length-1)==w)i+="*";try{x=y(i)}catch(ha){}if(x){i=0;for(m=x.length;i-1)a=a.substring(0,f);if(a.charAt(0)==":")switch(a.slice(1)){case "root":b=function(d){return c?d!=H:d==H};break;case "target":if(s==8){b=function(d){function l(){var m=location.hash,j=m.slice(1);return c?m==""||d.id!=j:m!=""&&d.id==j}t(A,"hashchange",function(){u(d,e,l())});return l()};break}return p;case "checked":b=function(d){X.test(d.type)&&t(d,"propertychange",function(){event.propertyName=="checked"&&u(d,e,d.checked!==c)});return d.checked!==c};break;case "disabled":c=!c;case "enabled":b=function(d){if(Y.test(d.tagName)){t(d,"propertychange",function(){event.propertyName=="$disabled"&&u(d,e,d.a===c)});z.push(d);d.a=d.disabled;return d.disabled===c}return a==":enabled"?c:!c};break;case "focus":g="focus";h="blur";case "hover":if(!g){g="mouseenter";h="mouseleave"}b=function(d){t(d,c?h:g,function(){u(d,e,k)});t(d,c?g:h,function(){u(d,e,p)});return c};break;default:if(!Z.test(a))return p}return{className:e,b:b}}function G(a){return I+"-"+(s==6&&$?aa++:a.replace(ba,function(b){return b.charCodeAt(0)}))}function Q(a){return a.replace(J,q).replace(ca,w)}function u(a,b,e){var c=a.className;b=E(c,b,e);if(b!=c){a.className=b;a.parentNode.className+=o}}function E(a,b,e){var c=RegExp("(^|\\s)"+b+"(\\s|$)"),g=c.test(a);return e?g?a:a+w+b:g?a.replace(c,q).replace(J,q):a}function t(a,b,e){a.attachEvent("on"+b,e)}function D(a,b){if(/^https?:\/\//i.test(a))return b.substring(0,b.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return b.substring(0,b.indexOf("/",8))+a;var e=b.split("?")[0];if(a.charAt(0)!="?"&&e.charAt(e.length-1)!="/")e=e.substring(0,e.lastIndexOf("/")+1);return e+a}function K(a){if(a){v.open("GET",a,p);v.send();return(v.status==200?v.responseText:o).replace(da,o).replace(ea,function(b,e,c,g,h){return K(D(c||h,a))}).replace(fa,function(b,e,c){e=e||"";return" url("+e+D(c,a)+e+") "})}return o}function ga(){var a,b;a=n.getElementsByTagName("BASE");for(var e=a.length>0?a[0].href:n.location.href,c=0;c0&&setInterval(function(){for(var g=0,h=z.length;g8||!v)){var L={NW:"*.Dom.select",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",MooTools:"$$",Sizzle:"*",jQuery:"*",dojo:"*.query"},y,z=[],aa=0,$=k,I="slvzr",M=I+"DOMReady",da=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,ea=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,fa=/\burl\(\s*(["']?)([^"')]+)\1\s*\)/g,Z=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,O=/:(:first-(?:line|letter))/g,P=/(^|})\s*([^\{]*?[\[:][^{]+)/g,T=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,U=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,ba=/[^\w-]/g,Y=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,X=/^(checkbox|radio)$/,F=s>6?/[\$\^*]=(['"])\1/:null,R=/([(\[+~])\s+/g,S=/\s+([)\]+~])/g,ca=/\s+/g,J=/^\s*((?:[\S\s]*\S)?)\s*$/,o="",w=" ",q="$1";n.write(" +

    abc

    +

    def

    +

    Testing page

    + +{% endhighlight %} + +

    syntax_test.js

    +{% highlight js %} + +/** +sample javascript from xui +*/ + +var undefined, + xui, + window = this, + string = new String('string'), + document = window.document, + simpleExpr = /^#?([\w-]+)$/, + idExpr = /^#/, + tagExpr = /<([\w:]+)/, + slice = function (e) { return [].slice.call(e, 0); }; + try { var a = slice(document.documentElement.childNodes)[0].nodeType; } + catch(e){ slice = function (e) { var ret=[]; for (var i=0; e[i]; i++) + ret.push(e[i]); return ret; }; } + +window.x$ = window.xui = xui = function(q, context) { + return new xui.fn.find(q, context); +}; + + +{% endhighlight %} + +

    syntax_test.rb

    +{% highlight ruby %} + +include Enumerable + +def initialize(rbconfig) +@rbconfig = rbconfig +@no_harm = false +end + +def load_savefile +begin + File.foreach(savefile()) do |line| + k, v = *line.split(/=/, 2) + self[k] = v.strip + end +rescue Errno::ENOENT + setup_rb_error $!.message + "\n#{File.basename($0)} config first" +end +end + +if c['rubylibdir'] + # V > 1.6.3 + libruby = "#{c['prefix']}/lib/ruby" + siterubyverarch = c['sitearchdir'] +end +parameterize = lambda {|path| + path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix') +} + +if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } + makeprog = arg.sub(/'/, '').split(/=/, 2)[1] +else + makeprog = 'make' +end + +def setup_rb_error(msg) + raise SetupError, msg +end + +if $0 == __FILE__ + begin + ToplevelInstaller.invoke + rescue SetupError + raise if $DEBUG + $stderr.puts $!.message + $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." + exit 1 + end +end +{% endhighlight %} + +

    syntax_test.php

    +{% highlight php %} + + +hasPermission("ManageCountries")) { ?> + + + + +
    +{% endhighlight %} + + +

    syntax_test.hs

    +{% highlight hs %} +{-# LANGUAGE OverloadedStrings #-} +module Main where + +--import Prelude hiding (id) +--import Control.Category (id) +import Control.Arrow ((>>>), (***), arr) +import Control.Monad (forM_) +-- import Data.Monoid (mempty, mconcat) + +-- import System.FilePath + +import Hakyll + + +main :: IO () +main = hakyll $ do + + route "css/*" $ setExtension "css" + compile "css/*" $ byExtension (error "Not a (S)CSS file") + [ (".css", compressCssCompiler) + , (".scss", sass) + ] + + route "js/**" idRoute + compile "js/**" copyFileCompiler + + route "img/*" idRoute + compile "img/*" copyFileCompiler + + compile "templates/*" templateCompiler + + forM_ ["test.md", "index.md"] $ \page -> do + route page $ setExtension "html" + compile page $ pageCompiler + >>> applyTemplateCompiler "templates/default.html" + >>> relativizeUrlsCompiler + +sass :: Compiler Resource String +sass = getResourceString >>> unixFilter "sass" ["-s", "--scss"] + >>> arr compressCss + +{% endhighlight %} + +

    syntax_test.sh

    +{% highlight sh %} +#!/bin/bash + +cd $ROOT_DIR +DOT_FILES="lastpass weechat ssh Xauthority" +for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done + +# TODO: refactor with suffix variables (or common cron values) + +case "$PLATFORM" in + linux) + #conform_link "$CONF_DIR/shell/zshenv" ".zshenv" + crontab -l > $ROOT_DIR/tmp/crontab-conflict-arch + cd $ROOT_DIR/$CONF_DIR/cron + if [[ "$(diff ~/tmp/crontab-conflict-arch crontab-current-arch)" == "" + ]]; + then # no difference with current backup + logger "$LOG_PREFIX: crontab live settings match stored "\ + "settings; no restore required" + rm ~/tmp/crontab-conflict-arch + else # current crontab settings in file do not match live settings + crontab $ROOT_DIR/$CONF_DIR/cron/crontab-current-arch + logger "$LOG_PREFIX: crontab stored settings conflict with "\ + "live settings; stored settings restored. "\ + "Previous settings recorded in ~/tmp/crontab-conflict-arch." + fi + ;; + +{% endhighlight %} + +

    syntax_test.py

    +{% highlight py %} +# test python (sample from offlineimap) + +class ExitNotifyThread(Thread): + """This class is designed to alert a "monitor" to the fact that a thread has + exited and to provide for the ability for it to find out why.""" + def run(self): + global exitthreads, profiledir + self.threadid = thread.get_ident() + try: + if not profiledir: # normal case + Thread.run(self) + else: + try: + import cProfile as profile + except ImportError: + import profile + prof = profile.Profile() + try: + prof = prof.runctx("Thread.run(self)", globals(), locals()) + except SystemExit: + pass + prof.dump_stats( \ + profiledir + "/" + str(self.threadid) + "_" + \ + self.getName() + ".prof") + except: + self.setExitCause('EXCEPTION') + if sys: + self.setExitException(sys.exc_info()[1]) + tb = traceback.format_exc() + self.setExitStackTrace(tb) + else: + self.setExitCause('NORMAL') + if not hasattr(self, 'exitmessage'): + self.setExitMessage(None) + + if exitthreads: + exitthreads.put(self, True) + + def setExitCause(self, cause): + self.exitcause = cause + def getExitCause(self): + """Returns the cause of the exit, one of: + 'EXCEPTION' -- the thread aborted because of an exception + 'NORMAL' -- normal termination.""" + return self.exitcause + def setExitException(self, exc): + self.exitexception = exc + def getExitException(self): + """If getExitCause() is 'EXCEPTION', holds the value from + sys.exc_info()[1] for this exception.""" + return self.exitexception + def setExitStackTrace(self, st): + self.exitstacktrace = st + def getExitStackTrace(self): + """If getExitCause() is 'EXCEPTION', returns a string representing + the stack trace for this exception.""" + return self.exitstacktrace + def setExitMessage(self, msg): + """Sets the exit message to be fetched by a subsequent call to + getExitMessage. This message may be any object or type except + None.""" + self.exitmessage = msg + def getExitMessage(self): + """For any exit cause, returns the message previously set by + a call to setExitMessage(), or None if there was no such message + set.""" + return self.exitmessage + +{% endhighlight %} + +

    syntax_test.pl

    +{% highlight perl %} +#!perl -w + +# Time-stamp: <2002/04/06, 13:12:13 (EST), maverick, csvformat.pl> +# Two pass CSV file to table formatter + +$delim = $#ARGV >= 1 ? $ARGV[1] : ','; +print STDERR "Split pattern: $delim\n"; + +# first pass +open F, "<$ARGV[0]" or die; +while() +{ + chomp; + $i = 0; + map { $max[$_->[1]] = $_->[0] if $_->[0] > ($max[$_->[1]] || 0) } + (map {[length $_, $i++]} split($delim)); +} +close F; + +print STDERR 'Field width: ', join(', ', @max), "\n"; +print STDERR join(' ', map {'-' x $_} @max); + +# second pass +open F, "<$ARGV[0]" or die; +while() + { + chomp; + $i = 0; + map { printf("%-$max[$_->[1]]s ", $_->[0]) } + (map {[$_, $i++]} split($delim)); + print "\n"; +} +close F; + +{% endhighlight %} + +

    syntax_test.java

    +{% highlight java %} +import java.util.Map; +import java.util.TreeSet; + +public class GetEnv { + /** + * let's test generics + * @param args the command line arguments + */ + public static void main(String[] args) { + // get a map of environment variables + Map env = System.getenv(); + // build a sorted set out of the keys and iterate + for(String k: new TreeSet(env.keySet())) { + System.out.printf("%s = %s\n", k, env.get(k)); + } + } } +{% endhighlight %} + +

    syntax_test.c

    +{% highlight c %} +#define UNICODE +#include + +int main(int argc, char **argv) { + int speed = 0, speed1 = 0, speed2 = 0; // 1-20 + printf("Set Mouse Speed by Maverick\n"); + + SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); + printf("Current speed: %2d\n", speed); + + if (argc == 1) return 0; + if (argc >= 2) sscanf(argv[1], "%d", &speed1); + if (argc >= 3) sscanf(argv[2], "%d", &speed2); + + if (argc == 2) // set speed to first value + speed = speed1; + else if (speed == speed1 || speed == speed2) // alternate + speed = speed1 + speed2 - speed; + else + speed = speed1; // start with first value + + SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0); + SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); + printf("New speed: %2d\n", speed); + return 0; +} + +{% endhighlight %} + diff --git a/source/test/syntax.markdown b/source/test/syntax.markdown deleted file mode 100644 index ec5bab5..0000000 --- a/source/test/syntax.markdown +++ /dev/null @@ -1,228 +0,0 @@ ---- -layout: default -title: Syntax Highlighting Debug ---- -
    -Ruby -{% highlight ruby %} -def rebuild_site(relative) - puts ">>> Change Detected to: #{relative} <<<" - IO.popen('rake generate') do |io| - print(io.readpartial(512)) until io.eof? - end - puts '>>> Update Complete <<<' -end -{% endhighlight %} -
    - -So that's a small example. What about a big one? - -
    -Ruby -{% highlight ruby %} -require 'active_support/core_ext/array' -require 'active_support/core_ext/hash/except' -require 'active_support/core_ext/object/metaclass' - -module ActiveRecord - module NamedScope - extend ActiveSupport::Concern - - # All subclasses of ActiveRecord::Base have one named scope: - # * scoped - which allows for the creation of anonymous \scopes, on the fly: Shirt.scoped(:conditions => {:color => 'red'}).scoped(:include => :washing_instructions) - # - # These anonymous \scopes tend to be useful when procedurally generating complex queries, where passing - # intermediate values (scopes) around as first-class objects is convenient. - # - # You can define a scope that applies to all finders using ActiveRecord::Base.default_scope. - included do - named_scope :scoped, lambda { |scope| scope } - end - - module ClassMethods - def scopes - read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {}) - end - - # Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query, - # such as :conditions => {:color => :red}, :select => 'shirts.*', :include => :washing_instructions. - # - # class Shirt < ActiveRecord::Base - # named_scope :red, :conditions => {:color => 'red'} - # named_scope :dry_clean_only, :joins => :washing_instructions, :conditions => ['washing_instructions.dry_clean_only = ?', true] - # end - # - # The above calls to named_scope define class methods Shirt.red and Shirt.dry_clean_only. Shirt.red, - # in effect, represents the query Shirt.find(:all, :conditions => {:color => 'red'}). - # - # Unlike Shirt.find(...), however, the object returned by Shirt.red is not an Array; it resembles the association object - # constructed by a has_many declaration. For instance, you can invoke Shirt.red.find(:first), Shirt.red.count, - # Shirt.red.find(:all, :conditions => {:size => 'small'}). Also, just - # as with the association objects, named \scopes act like an Array, implementing Enumerable; Shirt.red.each(&block), - # Shirt.red.first, and Shirt.red.inject(memo, &block) all behave as if Shirt.red really was an Array. - # - # These named \scopes are composable. For instance, Shirt.red.dry_clean_only will produce all shirts that are both red and dry clean only. - # Nested finds and calculations also work with these compositions: Shirt.red.dry_clean_only.count returns the number of garments - # for which these criteria obtain. Similarly with Shirt.red.dry_clean_only.average(:thread_count). - # - # All \scopes are available as class methods on the ActiveRecord::Base descendant upon which the \scopes were defined. But they are also available to - # has_many associations. If, - # - # class Person < ActiveRecord::Base - # has_many :shirts - # end - # - # then elton.shirts.red.dry_clean_only will return all of Elton's red, dry clean - # only shirts. - # - # Named \scopes can also be procedural: - # - # class Shirt < ActiveRecord::Base - # named_scope :colored, lambda { |color| - # { :conditions => { :color => color } } - # } - # end - # - # In this example, Shirt.colored('puce') finds all puce shirts. - # - # Named \scopes can also have extensions, just as with has_many declarations: - # - # class Shirt < ActiveRecord::Base - # named_scope :red, :conditions => {:color => 'red'} do - # def dom_id - # 'red_shirts' - # end - # end - # end - # - # - # For testing complex named \scopes, you can examine the scoping options using the - # proxy_options method on the proxy itself. - # - # class Shirt < ActiveRecord::Base - # named_scope :colored, lambda { |color| - # { :conditions => { :color => color } } - # } - # end - # - # expected_options = { :conditions => { :colored => 'red' } } - # assert_equal expected_options, Shirt.colored('red').proxy_options - def named_scope(name, options = {}, &block) - name = name.to_sym - scopes[name] = lambda do |parent_scope, *args| - Scope.new(parent_scope, case options - when Hash - options - when Proc - options.call(*args) - end, &block) - end - metaclass.instance_eval do - define_method name do |*args| - scopes[name].call(self, *args) - end - end - end - end - - class Scope - attr_reader :proxy_scope, :proxy_options, :current_scoped_methods_when_defined - NON_DELEGATE_METHODS = %w(nil? send object_id class extend find size count sum average maximum minimum paginate first last empty? any? many? respond_to?).to_set - [].methods.each do |m| - unless m =~ /^__/ || NON_DELEGATE_METHODS.include?(m.to_s) - delegate m, :to => :proxy_found - end - end - - delegate :scopes, :with_scope, :scoped_methods, :to => :proxy_scope - - def initialize(proxy_scope, options, &block) - options ||= {} - [options[:extend]].flatten.each { |extension| extend extension } if options[:extend] - extend Module.new(&block) if block_given? - unless Scope === proxy_scope - @current_scoped_methods_when_defined = proxy_scope.send(:current_scoped_methods) - end - @proxy_scope, @proxy_options = proxy_scope, options.except(:extend) - end - - def reload - load_found; self - end - - def first(*args) - if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash)) - proxy_found.first(*args) - else - find(:first, *args) - end - end - - def last(*args) - if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash)) - proxy_found.last(*args) - else - find(:last, *args) - end - end - - def size - @found ? @found.length : count - end - - def empty? - @found ? @found.empty? : count.zero? - end - - def respond_to?(method, include_private = false) - super || @proxy_scope.respond_to?(method, include_private) - end - - def any? - if block_given? - proxy_found.any? { |*block_args| yield(*block_args) } - else - !empty? - end - end - - # Returns true if the named scope has more than 1 matching record. - def many? - if block_given? - proxy_found.many? { |*block_args| yield(*block_args) } - else - size > 1 - end - end - - protected - def proxy_found - @found || load_found - end - - private - def method_missing(method, *args, &block) - if scopes.include?(method) - scopes[method].call(self, *args) - else - with_scope({:find => proxy_options, :create => proxy_options[:conditions].is_a?(Hash) ? proxy_options[:conditions] : {}}, :reverse_merge) do - method = :new if method == :build - if current_scoped_methods_when_defined && !scoped_methods.include?(current_scoped_methods_when_defined) - with_scope current_scoped_methods_when_defined do - proxy_scope.send(method, *args, &block) - end - else - proxy_scope.send(method, *args, &block) - end - end - end - end - - def load_found - @found = find(:all) - end - end - end -end -{% endhighlight %} -
    \ No newline at end of file