Browse code

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.

Brandon Mathis authored on 30/05/2011 at 04:30:16
Showing 74 changed files
... ...
@@ -2,9 +2,11 @@ site
2 2
 .bundle
3 3
 .DS_Store
4 4
 .sass-cache
5
-test
6 5
 source/_stash
7 6
 source/stylesheets
7
+source/javascripts/libs/node_modules
8
+source/javascripts/libs/syntax-highlighter
8 9
 vendor/ruby
9
-vendor/ruby
10
-vendor/ruby
10
+_cache
11
+.gist_cache
12
+public
... ...
@@ -1,4 +1,4 @@
1
-source :rubygems
1
+source "http://rubygems.org"
2 2
 
3 3
 gem 'rake'
4 4
 gem 'jekyll'
... ...
@@ -8,6 +8,5 @@ gem 'haml', '>= 3.1'
8 8
 gem 'compass', '>= 0.11'
9 9
 gem 'rubypants'
10 10
 gem 'rb-fsevent'
11
-gem 'guard-shell'
12 11
 gem 'guard-livereload'
13 12
 gem 'serve'
... ...
@@ -3,7 +3,7 @@ GEM
3 3
   specs:
4 4
     RedCloth (4.2.7)
5 5
     activesupport (3.0.7)
6
-    addressable (2.2.5)
6
+    addressable (2.2.6)
7 7
     chunky_png (1.2.0)
8 8
     classifier (1.3.3)
9 9
       fast-stemmer (>= 1.0.0)
... ...
@@ -24,10 +24,8 @@ GEM
24 24
       em-websocket (~> 0.2.0)
25 25
       guard (>= 0.2.2)
26 26
       json (~> 1.5.1)
27
-    guard-shell (0.1.1)
28
-      guard (>= 0.2.0)
29 27
     haml (3.1.1)
30
-    i18n (0.4.2)
28
+    i18n (0.6.0)
31 29
     jekyll (0.10.0)
32 30
       classifier (>= 1.3.1)
33 31
       directory_watcher (>= 1.1.1)
... ...
@@ -37,19 +35,21 @@ GEM
37 37
     liquid (2.2.2)
38 38
     maruku (0.6.0)
39 39
       syntax (>= 1.0.0)
40
-    rack (1.2.2)
41
-    rake (0.8.7)
40
+    rack (1.3.0)
41
+    rake (0.9.0)
42 42
     rb-fsevent (0.4.0)
43 43
     rdiscount (1.6.8)
44 44
     rubypants (0.2.0)
45 45
     sass (3.1.1)
46
-    serve (1.0.0)
47
-      activesupport (~> 3.0.1)
48
-      i18n (~> 0.4.1)
49
-      rack (~> 1.2.1)
50
-      tzinfo (~> 0.3.23)
46
+    serve (1.1.0)
47
+      activesupport (~> 3.0.7)
48
+      i18n (~> 0.6.0)
49
+      rack (~> 1.3.0)
50
+      tilt (~> 1.3.1)
51
+      tzinfo (~> 0.3.27)
51 52
     syntax (1.0.0)
52 53
     thor (0.14.6)
54
+    tilt (1.3.2)
53 55
     tzinfo (0.3.27)
54 56
 
55 57
 PLATFORMS
... ...
@@ -59,7 +59,6 @@ DEPENDENCIES
59 59
   RedCloth
60 60
   compass (>= 0.11)
61 61
   guard-livereload
62
-  guard-shell
63 62
   haml (>= 3.1)
64 63
   jekyll
65 64
   rake
... ...
@@ -1,4 +1,3 @@
1 1
 guard 'livereload', :api_version => '1.6' do
2
-  watch(/public\/stylesheets\/(.*)\.css/);
3
-  watch(/public\/(.*)\.(js|html|png|jpg|gif|jpeg|ttf|otf|woff|svg)/i);
2
+  watch(/public\/\S[css|js|html|png|jpg|gif]/)
4 3
 end
... ...
@@ -1,6 +1,5 @@
1 1
 require "rubygems"
2
-require "bundler"
3
-Bundler.setup
2
+require "bundler/setup"
4 3
 
5 4
 port        = "4000"      # preview project port eg. http://localhost:4000
6 5
 site        = "public"    # compiled site directory
... ...
@@ -104,7 +103,7 @@ end
104 104
 
105 105
 desc "Watch the site and regenerate when it changes"
106 106
 task :watch do
107
-  system "trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; sleep 0.5; compass watch & compassPid=$!; guard & guardPid=$!; wait"
107
+  system "trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; compass watch & compassPid=$!; guard & guardPid=$!; wait"
108 108
 end
109 109
 
110 110
 desc "generate and deploy website via rsync"
... ...
@@ -1,8 +1,7 @@
1 1
 source: source
2 2
 destination: public
3 3
 markdown: rdiscount
4
-pygments: false
5
-permalink: pretty
4
+pygments: true
6 5
 
7 6
 url: http://yoursite.com
8 7
 title: My Octopress Blog
... ...
@@ -10,7 +9,7 @@ author: Your Name
10 10
 email: you@domain.com #Add your email (optional) for the atom feed
11 11
 simple_search: http://google.com/search
12 12
 
13
-recent_posts: 10
13
+recent_posts: 20
14 14
 
15 15
 twitter_user: imathis
16 16
 tweet_count: 3
... ...
@@ -19,9 +18,8 @@ show_replies: false
19 19
 delicious_user:
20 20
 delicious_count: 3
21 21
 
22
-pinboard_user: designenthusiast
22
+pinboard_user: imathis
23 23
 pinboard_count: 3
24 24
 
25
-disqus_short_name: imathis
26
-
25
+#disqus_short_name: designenthusiast
27 26
 google_analytics_tracking_id:
28 27
new file mode 100644
... ...
@@ -0,0 +1,109 @@
0
+#
1
+# Author: Josediaz Gonzalez - https://github.com/josegonzalez
2
+# Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb
3
+# Modified by Brandon Mathis
4
+#
5
+require './_plugins/titlecase.rb'
6
+module Jekyll
7
+
8
+  # Outputs a string with a given attribution as a quote
9
+  #
10
+  #   {% blockquote John Paul Jones %}
11
+  #     Monkeys!
12
+  #   {% endblockquote %}
13
+  #   ...
14
+  #   <blockquote>
15
+  #     Monkeys!
16
+  #     <br />
17
+  #     John Paul Jones
18
+  #   </blockquote>
19
+  #
20
+  class Blockquote < Liquid::Block
21
+    FullCiteWithTitle = /([\w\s]+)(https?:\/\/)(\S+\s)([\w\s]+)/i
22
+    FullCite = /([\w\s]+)(https?:\/\/)(\S+)/i
23
+    Author =  /([\w\s]+)/
24
+
25
+    def initialize(tag_name, markup, tokens)
26
+      @by = nil
27
+      @source = nil
28
+      @title = nil
29
+      if markup =~ FullCiteWithTitle
30
+        @by = $1
31
+        @source = $2 + $3
32
+        @title = $4.titlecase
33
+      elsif markup =~ FullCite
34
+        @by = $1
35
+        @source = $2 + $3
36
+      elsif markup =~ Author
37
+        @by = $1
38
+      end
39
+      super
40
+    end
41
+
42
+    def render(context)
43
+      output = super
44
+      if @by.nil?
45
+        '<blockquote><p>' + output.join + '</p></blockquote>'
46
+      elsif !@title.nil?
47
+        '<blockquote><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong>' + '<a class="source" href="' + @source + '">' + @title + '</a></cite></p>'
48
+      elsif !@source.nil?
49
+        '<blockquote><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong>' + '<a class="source" href="' + @source + '">source</a></cite></p>'
50
+      else
51
+        '<blockquote><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong></cite></p>'
52
+      end
53
+    end
54
+  end
55
+
56
+  # Outputs a string with a given attribution as a pullquote
57
+  #
58
+  #   {% blockquote John Paul Jones %}
59
+  #     Monkeys!
60
+  #   {% endblockquote %}
61
+  #   ...
62
+  #   <blockquote class="pullquote">
63
+  #     Monkeys!
64
+  #     <br />
65
+  #     John Paul Jones
66
+  #   </blockquote>
67
+  #
68
+  class Pullquote < Liquid::Block
69
+    FullCiteWithTitle = /([\w\s]+)(http:\/\/|https:\/\/)(\S+)([\w\s]+)/i
70
+    FullCite = /([\w\s]+)(http:\/\/|https:\/\/)(\S+)/i
71
+    Author =  /([\w\s]+)/
72
+
73
+    def initialize(tag_name, markup, tokens)
74
+      @by = nil
75
+      @source = nil
76
+      @title = nil
77
+      if markup =~ FullCiteWithTitle
78
+        @by = $1
79
+        @source = $2 + $3
80
+        @title = $4
81
+      elsif markup =~ FullCite
82
+        @by = $1
83
+        @source = $2 + $3
84
+      elsif markup =~ Author
85
+        @by = $1
86
+      end
87
+      super
88
+    end
89
+
90
+    def render(context)
91
+      output = super
92
+      if @by.nil?
93
+        '<blockquote class="pullquote"><p>' + output.join + '</p></blockquote>'
94
+      elsif @title
95
+        '<blockquote class="pullquote"><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong>' + ' <a class="source" href="' + @source + '">' + @title + '</a></cite></p>'
96
+      elsif @source
97
+        '<blockquote class="pullquote"><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong>' + ' <a class="source" href="' + @source + '">source</a></cite></p>'
98
+      elsif @by
99
+        '<blockquote class="pullquote"><p>' + output.join + '</p></blockquote>' + '<p><cite><strong>' + @by + '</strong></cite></p>'
100
+      end
101
+    end
102
+  end
103
+end
104
+
105
+Liquid::Template.register_tag('blockquote', Jekyll::Blockquote)
106
+Liquid::Template.register_tag('pullquote', Jekyll::Pullquote)
107
+
108
+
0 109
new file mode 100644
... ...
@@ -0,0 +1,65 @@
0
+module Jekyll
1
+
2
+  class CategoryIndex < Page
3
+    def initialize(site, base, dir, category)
4
+      @site = site
5
+      @base = base
6
+      @dir = dir
7
+      @name = 'index.html'
8
+
9
+      self.process(@name)
10
+      self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
11
+      self.data['category'] = category
12
+
13
+      category_title_prefix = site.config['category_title_prefix'] || 'Category: '
14
+      self.data['title'] = "#{category_title_prefix}#{category}"
15
+    end
16
+  end
17
+
18
+  class CategoryList < Page
19
+    def initialize(site,  base, dir, categories)
20
+      @site = site
21
+      @base = base
22
+      @dir = dir
23
+      @name = 'index.html'
24
+
25
+      self.process(@name)
26
+      self.read_yaml(File.join(base, '_layouts'), 'category_list.html')
27
+      self.data['categories'] = categories
28
+    end
29
+  end
30
+
31
+  class CategoryGenerator < Generator
32
+    safe true
33
+
34
+    def generate(site)
35
+      if site.layouts.key? 'category_index'
36
+        dir = site.config['category_dir'] || 'categories'
37
+        site.categories.keys.each do |category|
38
+          write_category_index(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category)
39
+        end
40
+      end
41
+
42
+      if site.layouts.key? 'category_list'
43
+        dir = site.config['category_dir'] || 'categories'
44
+        write_category_list(site, dir, site.categories.keys.sort)
45
+      end
46
+    end
47
+
48
+    def write_category_index(site, dir, category)
49
+      index = CategoryIndex.new(site, site.source, dir, category)
50
+      index.render(site.layouts, site.site_payload)
51
+      index.write(site.dest)
52
+      site.static_files << index
53
+    end
54
+
55
+    def write_category_list(site, dir, categories)
56
+      index = CategoryList.new(site, site.source, dir, categories)
57
+      index.render(site.layouts, site.site_payload)
58
+      index.write(site.dest)
59
+      site.static_files << index
60
+    end
61
+  end
62
+
63
+end
64
+
... ...
@@ -50,6 +50,11 @@ module OctopressFilters
50 50
       end
51 51
     end
52 52
   end
53
+  #YearlyPost = Struct.new('YearlyPost', :year, :posts)
54
+  def yearly_posts(site)
55
+    #site.posts.reverse.group_by { |p| p.date.strftime("%Y") }.map { |k,v| YearlyPost.new(k,v) }
56
+    site
57
+  end
53 58
 end
54
-
55 59
 Liquid::Template.register_filter OctopressFilters
60
+
56 61
new file mode 100644
... ...
@@ -0,0 +1,49 @@
0
+##
1
+## Author: Jose Gonzalez - https://github.com/josegonzalez
2
+## Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/iterator.rb
3
+##
4
+
5
+#module Jekyll
6
+  #class Site
7
+    #alias_method :orig_site_payload, :site_payload
8
+
9
+    ## Constuct an array of hashes that will allow the user, using Liquid, to
10
+    ## iterate through the keys of _kv_hash_ and be able to iterate through the
11
+    ## elements under each key.
12
+    ##
13
+    ## Example:
14
+    ##   categories = { 'Ruby' => [<Post>, <Post>] }
15
+    ##   make_iterable(categories, :index => 'name', :items => 'posts')
16
+    ## Will allow the user to iterate through all categories and then iterate
17
+    ## though each post in the current category like so:
18
+    ##   {% for category in site.categories %}
19
+    ##     h1. {{ category.name }}
20
+    ##     <ul>
21
+    ##       {% for post in category.posts %}
22
+    ##         <li>{{ post.title }}</li>
23
+    ##       {% endfor %}
24
+    ##       </ul>
25
+    ##   {% endfor %}
26
+    ##
27
+    ## Returns [ {<index> => <kv_hash_key>, <items> => kv_hash[<kv_hash_key>]}, ... ]
28
+
29
+    #def make_iterable(kv_hash, options)
30
+      #options = {:index => 'name', :items => 'items'}.merge(options)
31
+      #result = []
32
+      #kv_hash.sort.each do |key, value|
33
+        #result << { options[:index] => key, options[:items] => value }
34
+      #end
35
+      #result
36
+    #end
37
+
38
+    #def site_payload
39
+      #payload = orig_site_payload
40
+      #payload['site']['iterable'].merge!({
41
+        #'categories'  => make_iterable(self.categories, :index => 'name', :items => 'posts'),
42
+        #'tags'        => make_iterable(self.tags, :index => 'name', :items => 'posts')
43
+      #})
44
+      #payload
45
+    #end
46
+
47
+  #end
48
+#end
0 49
new file mode 100644
... ...
@@ -0,0 +1,30 @@
0
+#
1
+# Author: Raimonds Simanovskis, http://blog.rayapps.com/
2
+# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb
3
+#
4
+
5
+require 'fileutils'
6
+require 'digest/md5'
7
+
8
+PYGMENTS_CACHE_DIR = File.expand_path('../../_cache', __FILE__)
9
+FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
10
+
11
+Jekyll::HighlightBlock.class_eval do
12
+  def render_pygments(context, code)
13
+    if defined?(PYGMENTS_CACHE_DIR)
14
+      path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html")
15
+      if File.exist?(path)
16
+        highlighted_code = File.read(path)
17
+      else
18
+        highlighted_code = Albino.new(code, @lang).to_s(@options)
19
+        File.open(path, 'w') {|f| f.print(highlighted_code) }
20
+      end
21
+    else
22
+      highlighted_code = Albino.new(code, @lang).to_s(@options)
23
+    end
24
+    output = add_code_tags(highlighted_code, @lang)
25
+    output = context["pygments_prefix"] + output if context["pygments_prefix"]
26
+    output = output + context["pygments_suffix"] if context["pygments_suffix"]
27
+    output
28
+  end
29
+end
0 30
deleted file mode 100644
... ...
@@ -1,160 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
7
-<head>
8
-  <meta charset="utf-8">
9
-
10
-  <title>Hello World! I'm Octopress! - My Octopress Blog</title>
11
-  <meta name="author" content="Your Name">
12
-  
13
-
14
-  <!-- http://t.co/dKP3o1e -->
15
-  <meta name="HandheldFriendly" content="True">
16
-  <meta name="MobileOptimized" content="320">
17
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
-
19
-  
20
-
21
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
22
-  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
25
-  
26
-  <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
27
-</head>
28
-
29
-<body  >
30
-  <header><div><h1><a href="/">My Octopress Blog</a></h1>
31
-</div></header>
32
-  <nav><div><div>
33
-  <a href="/atom.xml">Subscribe</a>
34
-  <form action="http://google.com/search" method="get">
35
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
-    <input type="hidden" name="q" value="site:yoursite.com" />
37
-  </form>
38
-</div>
39
-<ul>
40
-  <li><a href="/">Blog</a></li>
41
-  <li><a href="/about/">About</a></li>
42
-</ul>
43
-</div></nav>
44
-  <div>
45
-    <div>
46
-      <div id="articles"><article>
47
-  <header>
48
-  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
49
-  <p>
50
-    
51
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
-    
53
-    
54
-      <time datetime="2009-11-13 00:00:00 -0500" pubdate>November 13<span>th</span>, 2009</time>
55
-    
56
-    
57
-      <time class="updated" datetime="2010-03-10 00:00:00 -0500" pubdate>Updated March 10<span>th</span>, 2010</time>
58
-    
59
-  </p>
60
-</header>
61
-
62
-<div class="entry"><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>.
63
-If you don&#8217;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>
64
-
65
-<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>
66
-
67
-<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>
68
-
69
-<p>There&#8217;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>
70
-
71
-<p><a href="http://wiki.github.com/imathis/octopress/">Read the wiki to learn more</a></p>
72
-</div>
73
-
74
-
75
-  
76
-    <div id="disqus_thread"><script type="text/javascript">
77
-  var disqus_url = "http://yoursite.com/2009/11/13/hello-world/";
78
-</script>
79
-<noscript>
80
-  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
81
-</noscript>
82
-<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
83
-</div>
84
-  
85
-</article>
86
-</div>
87
-      
88
-        <aside><section>
89
-  <h1>About Me</h1>
90
-  <p>Hi, I'm Octopress!</p>
91
-</section>
92
-
93
-<section>
94
-  <h1>Recent Posts</h1>
95
-  <ul id="recent_posts">
96
-    
97
-      <li class="post">
98
-        <a href="/2011/04/07/test-of-typography/">Test of Typography</a>
99
-        <time>April 07, 2011</time>
100
-      </li>
101
-    
102
-      <li class="post">
103
-        <a href="/2011/03/14/test-post/">Test Post</a>
104
-        <time>March 14, 2011</time>
105
-      </li>
106
-    
107
-      <li class="post">
108
-        <a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a>
109
-        <time>November 13, 2009</time>
110
-      </li>
111
-    
112
-  </ul>
113
-  </section>
114
-
115
-
116
-  <section><h1>Latest Tweets</h1>
117
-<ul id="tweets">
118
-  Status updating...
119
-</ul>
120
-<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
121
-
122
-  <script>
123
-    var twitter_user = "imathis";
124
-    var show_replies = false;
125
-    var tweet_count = 3;
126
-  </script>
127
-  <script src="/javascripts/twitter.js" type="text/javascript"></script>
128
-
129
-</section>
130
-
131
-
132
-
133
-  <section><h1>My Pinboard</h1>
134
-<ul id="pinboard_linkroll">Fetching linkroll...</ul>
135
-<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
136
-</section>
137
-
138
-</aside>
139
-      
140
-    </div>
141
-  </div>
142
-  <footer><div><p>
143
-  Copyright &copy; 2011 - Your Name -
144
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
145
-</p>
146
-
147
-  <script language="javascript">
148
-    var pinboard_user = "designenthusiast";
149
-    var pinboard_count = "3";
150
-  </script>
151
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
152
-
153
-</div></footer>
154
-  <!--[if (lt IE 9) & (!IEMobile)]>
155
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
156
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
157
-  <script src="javascripts/libs/respond.min.js"></script>
158
-  <![endif]-->
159
-</body>
160
-</html>
161 1
deleted file mode 100644
... ...
@@ -1,149 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
7
-<head>
8
-  <meta charset="utf-8">
9
-
10
-  <title>Test Post - My Octopress Blog</title>
11
-  <meta name="author" content="Your Name">
12
-  
13
-
14
-  <!-- http://t.co/dKP3o1e -->
15
-  <meta name="HandheldFriendly" content="True">
16
-  <meta name="MobileOptimized" content="320">
17
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
-
19
-  
20
-
21
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
22
-  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
25
-  
26
-  <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
27
-</head>
28
-
29
-<body  >
30
-  <header><div><h1><a href="/">My Octopress Blog</a></h1>
31
-</div></header>
32
-  <nav><div><div>
33
-  <a href="/atom.xml">Subscribe</a>
34
-  <form action="http://google.com/search" method="get">
35
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
-    <input type="hidden" name="q" value="site:yoursite.com" />
37
-  </form>
38
-</div>
39
-<ul>
40
-  <li><a href="/">Blog</a></li>
41
-  <li><a href="/about/">About</a></li>
42
-</ul>
43
-</div></nav>
44
-  <div>
45
-    <div>
46
-      <div id="articles"><article>
47
-  <header>
48
-  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
49
-  <p>
50
-    
51
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
-    
53
-    
54
-      <time datetime="2011-03-14 00:00:00 -0400" pubdate>March 14<span>th</span>, 2011</time>
55
-    
56
-    
57
-  </p>
58
-</header>
59
-
60
-<div class="entry"><p>This is a test!</p>
61
-</div>
62
-
63
-
64
-  
65
-    <div id="disqus_thread"><script type="text/javascript">
66
-  var disqus_url = "http://yoursite.com/2011/03/14/test-post/";
67
-</script>
68
-<noscript>
69
-  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
70
-</noscript>
71
-<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
72
-</div>
73
-  
74
-</article>
75
-</div>
76
-      
77
-        <aside><section>
78
-  <h1>About Me</h1>
79
-  <p>Hi, I'm Octopress!</p>
80
-</section>
81
-
82
-<section>
83
-  <h1>Recent Posts</h1>
84
-  <ul id="recent_posts">
85
-    
86
-      <li class="post">
87
-        <a href="/2011/04/07/test-of-typography/">Test of Typography</a>
88
-        <time>April 07, 2011</time>
89
-      </li>
90
-    
91
-      <li class="post">
92
-        <a href="/2011/03/14/test-post/">Test Post</a>
93
-        <time>March 14, 2011</time>
94
-      </li>
95
-    
96
-      <li class="post">
97
-        <a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a>
98
-        <time>November 13, 2009</time>
99
-      </li>
100
-    
101
-  </ul>
102
-  </section>
103
-
104
-
105
-  <section><h1>Latest Tweets</h1>
106
-<ul id="tweets">
107
-  Status updating...
108
-</ul>
109
-<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
110
-
111
-  <script>
112
-    var twitter_user = "imathis";
113
-    var show_replies = false;
114
-    var tweet_count = 3;
115
-  </script>
116
-  <script src="/javascripts/twitter.js" type="text/javascript"></script>
117
-
118
-</section>
119
-
120
-
121
-
122
-  <section><h1>My Pinboard</h1>
123
-<ul id="pinboard_linkroll">Fetching linkroll...</ul>
124
-<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
125
-</section>
126
-
127
-</aside>
128
-      
129
-    </div>
130
-  </div>
131
-  <footer><div><p>
132
-  Copyright &copy; 2011 - Your Name -
133
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
134
-</p>
135
-
136
-  <script language="javascript">
137
-    var pinboard_user = "designenthusiast";
138
-    var pinboard_count = "3";
139
-  </script>
140
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
141
-
142
-</div></footer>
143
-  <!--[if (lt IE 9) & (!IEMobile)]>
144
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
145
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
146
-  <script src="javascripts/libs/respond.min.js"></script>
147
-  <![endif]-->
148
-</body>
149
-</html>
150 1
deleted file mode 100644
... ...
@@ -1,199 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
7
-<head>
8
-  <meta charset="utf-8">
9
-
10
-  <title>Test of Typography - My Octopress Blog</title>
11
-  <meta name="author" content="Your Name">
12
-  
13
-
14
-  <!-- http://t.co/dKP3o1e -->
15
-  <meta name="HandheldFriendly" content="True">
16
-  <meta name="MobileOptimized" content="320">
17
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
-
19
-  
20
-
21
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
22
-  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
25
-  
26
-  <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
27
-</head>
28
-
29
-<body  >
30
-  <header><div><h1><a href="/">My Octopress Blog</a></h1>
31
-</div></header>
32
-  <nav><div><div>
33
-  <a href="/atom.xml">Subscribe</a>
34
-  <form action="http://google.com/search" method="get">
35
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
-    <input type="hidden" name="q" value="site:yoursite.com" />
37
-  </form>
38
-</div>
39
-<ul>
40
-  <li><a href="/">Blog</a></li>
41
-  <li><a href="/about/">About</a></li>
42
-</ul>
43
-</div></nav>
44
-  <div>
45
-    <div>
46
-      <div id="articles"><article>
47
-  <header>
48
-  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
49
-  <p>
50
-    
51
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
-    
53
-    
54
-      <time datetime="2011-04-07 19:17:00 -0400" pubdate>April 7<span>th</span>, 2011</time>
55
-    
56
-    
57
-  </p>
58
-</header>
59
-
60
-<div class="entry"><p>In the past I&#8217;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>
61
-
62
-<h2>Why Have Business Cards?</h2>
63
-
64
-<p>I&#8217;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
65
-people I work for I&#8217;ve never met in-person.</p>
66
-
67
-<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>
68
-
69
-<!-- more -->
70
-
71
-
72
-<h3>Inspiration Demands Action</h3>
73
-
74
-<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&#8217;t stop thinking about designing a set of mini-cards for myself.</p>
75
-
76
-<p><img src="/content/blog/2010/cards/box.jpg" alt="cards in a box" width="300px" class="right"/> Moo&#8217;s <a href="http://moo.com/products/minicards.php">MiniCard&#8217;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&#8217;s Flickr import feature.</p>
77
-
78
-<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>
79
-
80
-<h3>The Freedom to Fail</h3>
81
-
82
-<p><img src="/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&#8217;t even concerned about possibly screwing up a whole batch. So that&#8217;s what I did. I designed cards that were good enough and I printed them. If the cards did&#8217;t turn out how I wanted them to, I could improve and print again.</p>
83
-
84
-<p><img src="/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>
85
-
86
-<h3>A Second Iteration</h3>
87
-
88
-<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&#8217;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&#8217;t make sense and generally looks bad.</p>
89
-
90
-<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>
91
-
92
-<blockquote><p>Every interaction is both precious and an opportunity to delight.</p></blockquote>
93
-
94
-<p><img src="/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&#8217;ll see the flash of color and realize that their card was special, and different from my other cards. That&#8217;s what I want my clients and future clients to feel.</p>
95
-
96
-<h3>The Final Design</h3>
97
-
98
-<p><img src="/content/blog/2010/cards/all.jpg" alt="all card designs" width="640px"/></p>
99
-
100
-<p>The MiniCard&#8217;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&#8217;s something valuable to me, and I hope they&#8217;re delighted.</p>
101
-
102
-<p><strong>Update:</strong> I thought I&#8217;d share some other great uses of Moo&#8217;s MiniCards. There&#8217;s a fantastic <a href="http://www.flickr.com/groups/moo/pool/">Flikr pool</a>, but here are some of my favorites. Enjoy:</p>
103
-
104
-<ul>
105
-<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>
106
-<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>
107
-<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>
108
-<li><a href="http://www.flickr.com/photos/bcome/4177034036/in/pool-moo">An advent calendar</a></li>
109
-</ul>
110
-
111
-</div>
112
-
113
-
114
-  
115
-    <div id="disqus_thread"><script type="text/javascript">
116
-  var disqus_url = "http://yoursite.com/2011/04/07/test-of-typography/";
117
-</script>
118
-<noscript>
119
-  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
120
-</noscript>
121
-<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
122
-</div>
123
-  
124
-</article>
125
-</div>
126
-      
127
-        <aside><section>
128
-  <h1>About Me</h1>
129
-  <p>Hi, I'm Octopress!</p>
130
-</section>
131
-
132
-<section>
133
-  <h1>Recent Posts</h1>
134
-  <ul id="recent_posts">
135
-    
136
-      <li class="post">
137
-        <a href="/2011/04/07/test-of-typography/">Test of Typography</a>
138
-        <time>April 07, 2011</time>
139
-      </li>
140
-    
141
-      <li class="post">
142
-        <a href="/2011/03/14/test-post/">Test Post</a>
143
-        <time>March 14, 2011</time>
144
-      </li>
145
-    
146
-      <li class="post">
147
-        <a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a>
148
-        <time>November 13, 2009</time>
149
-      </li>
150
-    
151
-  </ul>
152
-  </section>
153
-
154
-
155
-  <section><h1>Latest Tweets</h1>
156
-<ul id="tweets">
157
-  Status updating...
158
-</ul>
159
-<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
160
-
161
-  <script>
162
-    var twitter_user = "imathis";
163
-    var show_replies = false;
164
-    var tweet_count = 3;
165
-  </script>
166
-  <script src="/javascripts/twitter.js" type="text/javascript"></script>
167
-
168
-</section>
169
-
170
-
171
-
172
-  <section><h1>My Pinboard</h1>
173
-<ul id="pinboard_linkroll">Fetching linkroll...</ul>
174
-<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
175
-</section>
176
-
177
-</aside>
178
-      
179
-    </div>
180
-  </div>
181
-  <footer><div><p>
182
-  Copyright &copy; 2011 - Your Name -
183
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
184
-</p>
185
-
186
-  <script language="javascript">
187
-    var pinboard_user = "designenthusiast";
188
-    var pinboard_count = "3";
189
-  </script>
190
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
191
-
192
-</div></footer>
193
-  <!--[if (lt IE 9) & (!IEMobile)]>
194
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
195
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
196
-  <script src="javascripts/libs/respond.min.js"></script>
197
-  <![endif]-->
198
-</body>
199
-</html>
200 1
deleted file mode 100644
... ...
@@ -1,154 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
7
-<head>
8
-  <meta charset="utf-8">
9
-
10
-  <title>About Me - My Octopress Blog</title>
11
-  <meta name="author" content="Your Name">
12
-  
13
-
14
-  <!-- http://t.co/dKP3o1e -->
15
-  <meta name="HandheldFriendly" content="True">
16
-  <meta name="MobileOptimized" content="320">
17
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
-
19
-  
20
-
21
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
22
-  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
25
-  
26
-  <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
27
-</head>
28
-
29
-<body  >
30
-  <header><div><h1><a href="/">My Octopress Blog</a></h1>
31
-</div></header>
32
-  <nav><div><div>
33
-  <a href="/atom.xml">Subscribe</a>
34
-  <form action="http://google.com/search" method="get">
35
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
-    <input type="hidden" name="q" value="site:yoursite.com" />
37
-  </form>
38
-</div>
39
-<ul>
40
-  <li><a href="/">Blog</a></li>
41
-  <li><a href="/about/">About</a></li>
42
-</ul>
43
-</div></nav>
44
-  <div>
45
-    <div>
46
-      <div id="articles"><article>
47
-  <header>
48
-  <h1><a href="/about/">About Me</a></h1>
49
-  <p>
50
-    
51
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
-    
53
-    
54
-      <time datetime="2011-05-14 00:00:00 -0400" pubdate>May 14<span>th</span>, 2011</time>
55
-    
56
-    
57
-  </p>
58
-</header>
59
-
60
-<div class="entry"><!-- use the :mardown filter if you want to write pages with Markdown -->
61
-<p>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.</p>
62
-
63
-<p>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.</p>
64
-
65
-<p>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.</p>
66
-</div>
67
-
68
-
69
-  
70
-    <div id="disqus_thread"><script type="text/javascript">
71
-  var disqus_url = "http://yoursite.com/about/";
72
-</script>
73
-<noscript>
74
-  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
75
-</noscript>
76
-<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
77
-</div>
78
-  
79
-</article>
80
-</div>
81
-      
82
-        <aside><section>
83
-  <h1>About Me</h1>
84
-  <p>Hi, I'm Octopress!</p>
85
-</section>
86
-
87
-<section>
88
-  <h1>Recent Posts</h1>
89
-  <ul id="recent_posts">
90
-    
91
-      <li class="post">
92
-        <a href="/2011/04/07/test-of-typography/">Test of Typography</a>
93
-        <time>April 07, 2011</time>
94
-      </li>
95
-    
96
-      <li class="post">
97
-        <a href="/2011/03/14/test-post/">Test Post</a>
98
-        <time>March 14, 2011</time>
99
-      </li>
100
-    
101
-      <li class="post">
102
-        <a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a>
103
-        <time>November 13, 2009</time>
104
-      </li>
105
-    
106
-  </ul>
107
-  </section>
108
-
109
-
110
-  <section><h1>Latest Tweets</h1>
111
-<ul id="tweets">
112
-  Status updating...
113
-</ul>
114
-<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
115
-
116
-  <script>
117
-    var twitter_user = "imathis";
118
-    var show_replies = false;
119
-    var tweet_count = 3;
120
-  </script>
121
-  <script src="/javascripts/twitter.js" type="text/javascript"></script>
122
-
123
-</section>
124
-
125
-
126
-
127
-  <section><h1>My Pinboard</h1>
128
-<ul id="pinboard_linkroll">Fetching linkroll...</ul>
129
-<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
130
-</section>
131
-
132
-</aside>
133
-      
134
-    </div>
135
-  </div>
136
-  <footer><div><p>
137
-  Copyright &copy; 2011 - Your Name -
138
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
139
-</p>
140
-
141
-  <script language="javascript">
142
-    var pinboard_user = "designenthusiast";
143
-    var pinboard_count = "3";
144
-  </script>
145
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
146
-
147
-</div></footer>
148
-  <!--[if (lt IE 9) & (!IEMobile)]>
149
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
150
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
151
-  <script src="javascripts/libs/respond.min.js"></script>
152
-  <![endif]-->
153
-</body>
154
-</html>
155 1
deleted file mode 100644
... ...
@@ -1,103 +0,0 @@
1
-<?xml version="1.0" encoding="utf-8"?>
2
-<feed xmlns="http://www.w3.org/2005/Atom">
3
-
4
-  <title></title>
5
-  <link href="http://yoursite.com/atom.xml" rel="self"/>
6
-  <link href="http://yoursite.com/"/>
7
-  <updated>2011-05-15T18:13:17-04:00</updated>
8
-  <id>http://yoursite.com/</id>
9
-  <author>
10
-    <name>Your Name</name>
11
-    
12
-      <email>you@domain.com</email>
13
-    
14
-  </author>
15
-
16
-  
17
-  <entry>
18
-    <title>Test of Typography</title>
19
-    <link href="http://yoursite.com/2011/04/07/test-of-typography/"/>
20
-    <updated>2011-04-07T19:17:00-04:00</updated>
21
-    <id>http://yoursite.com/2011/04/07/test-of-typography</id>
22
-    <content type="html">&lt;p&gt;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 &lt;em&gt;professionally&lt;/em&gt; 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.&lt;/p&gt;
23
-
24
-&lt;h2&gt;Why Have Business Cards?&lt;/h2&gt;
25
-
26
-&lt;p&gt;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
27
-people I work for I've never met in-person.&lt;/p&gt;
28
-
29
-&lt;p&gt;When someone gives me their business card, I read it, pocket it, and eventually throw it out &amp;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?&lt;/p&gt;
30
-
31
-&lt;!-- more --&gt;
32
-
33
-
34
-&lt;h3&gt;Inspiration Demands Action&lt;/h3&gt;
35
-
36
-&lt;p&gt;In one of our campfire chats &lt;a href=&quot;http://twitter.com/NTalbott&quot;&gt;Nathaniel Talbott&lt;/a&gt; showed off his business cards which he printed through &lt;a href=&quot;http://moo.com&quot;&gt;Moo&lt;/a&gt;. 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.&lt;/p&gt;
37
-
38
-&lt;p&gt;&lt;img src=&quot;http://yoursite.com/content/blog/2010/cards/box.jpg&quot; alt=&quot;cards in a box&quot; width=&quot;300px&quot; class=&quot;right&quot;/&gt; Moo's &lt;a href=&quot;http://moo.com/products/minicards.php&quot;&gt;MiniCard's&lt;/a&gt; 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.&lt;/p&gt;
39
-
40
-&lt;p&gt;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.&lt;/p&gt;
41
-
42
-&lt;h3&gt;The Freedom to Fail&lt;/h3&gt;
43
-
44
-&lt;p&gt;&lt;img src=&quot;http://yoursite.com/content/blog/2010/cards/concepts.jpg&quot; alt=&quot;card concepts&quot; width=&quot;270px&quot; class=&quot;left&quot;/&gt; 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.&lt;/p&gt;
45
-
46
-&lt;p&gt;&lt;img src=&quot;http://yoursite.com/content/blog/2010/cards/handout.jpg&quot; alt=&quot;handout cards&quot; width=&quot;220px&quot; class=&quot;right&quot;/&gt; 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.&lt;/p&gt;
47
-
48
-&lt;h3&gt;A Second Iteration&lt;/h3&gt;
49
-
50
-&lt;p&gt;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. &lt;strong&gt;Sidenote:&lt;/strong&gt; 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.&lt;/p&gt;
51
-
52
-&lt;p&gt;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 &lt;a href=&quot;http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html&quot;&gt;Seth Godin said&lt;/a&gt;:&lt;/p&gt;
53
-
54
-&lt;blockquote&gt;&lt;p&gt;Every interaction is both precious and an opportunity to delight.&lt;/p&gt;&lt;/blockquote&gt;
55
-
56
-&lt;p&gt;&lt;img src=&quot;http://yoursite.com/content/blog/2010/cards/holder.jpg&quot; alt=&quot;MiniCard Holder&quot; width=&quot;220px&quot; class=&quot;right&quot;/&gt; I pictured sliding a card out of my &lt;a href=&quot;http://moo.com/products/accessories/holders/moo_minicard_holders&quot;&gt;MiniCard Holder&lt;/a&gt; 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.&lt;/p&gt;
57
-
58
-&lt;h3&gt;The Final Design&lt;/h3&gt;
59
-
60
-&lt;p&gt;&lt;img src=&quot;http://yoursite.com/content/blog/2010/cards/all.jpg&quot; alt=&quot;all card designs&quot; width=&quot;640px&quot;/&gt;&lt;/p&gt;
61
-
62
-&lt;p&gt;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.&lt;/p&gt;
63
-
64
-&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I thought I'd share some other great uses of Moo's MiniCards. There's a fantastic &lt;a href=&quot;http://www.flickr.com/groups/moo/pool/&quot;&gt;Flikr pool&lt;/a&gt;, but here are some of my favorites. Enjoy:&lt;/p&gt;
65
-
66
-&lt;ul&gt;
67
-&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/lushlampwork/4131018201/in/pool-moo&quot;&gt;Product&lt;/a&gt; &lt;a href=&quot;http://www.flickr.com/photos/lushlampwork/4297224179/in/pool-moo&quot;&gt;tags&lt;/a&gt;&lt;/li&gt;
68
-&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/thisiswoly/4206576342/in/pool-moo&quot;&gt;Photography&lt;/a&gt; or &lt;a href=&quot;http://www.flickr.com/photos/lesleybarnes/4276368956/in/pool-moo&quot;&gt;art&lt;/a&gt; &lt;a href=&quot;http://www.flickr.com/photos/playinprogress/4158223112/in/pool-moo&quot;&gt;portfolios&lt;/a&gt;&lt;/li&gt;
69
-&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/polkadotcreations/4167249758/in/pool-moo&quot;&gt;Gift&lt;/a&gt; &lt;a href=&quot;http://www.flickr.com/photos/22338102@N04/4278114745/in/pool-moo&quot;&gt;tags&lt;/a&gt;&lt;/li&gt;
70
-&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/bcome/4177034036/in/pool-moo&quot;&gt;An advent calendar&lt;/a&gt;&lt;/li&gt;
71
-&lt;/ul&gt;
72
-
73
-</content>
74
-  </entry>
75
-  
76
-  <entry>
77
-    <title>Test Post</title>
78
-    <link href="http://yoursite.com/2011/03/14/test-post/"/>
79
-    <updated>2011-03-14T00:00:00-04:00</updated>
80
-    <id>http://yoursite.com/2011/03/14/test-post</id>
81
-    <content type="html">&lt;p&gt;This is a test!&lt;/p&gt;
82
-</content>
83
-  </entry>
84
-  
85
-  <entry>
86
-    <title>Hello World! I'm Octopress!</title>
87
-    <link href="http://yoursite.com/2009/11/13/hello-world/"/>
88
-    <updated>2009-11-13T00:00:00-05:00</updated>
89
-    <id>http://yoursite.com/2009/11/13/hello-world</id>
90
-    <content type="html">&lt;p&gt;&lt;strong&gt;Octopress is a blogging framework designed for hackers&lt;/strong&gt;, based on &lt;a href=&quot;http://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt; the blog aware static site generator powering &lt;a href=&quot;http://pages.github.com/&quot;&gt;Github pages&lt;/a&gt;.
91
-If you don't know what Jekyll is, &lt;a href=&quot;http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/&quot;&gt;Jack Moffitt&lt;/a&gt; wrote a good summary:&lt;/p&gt;
92
-
93
-&lt;blockquote&gt;&lt;p&gt;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.&lt;/p&gt;&lt;/blockquote&gt;
94
-
95
-&lt;p&gt;&lt;cite&gt;&lt;strong&gt;Jack Moffitt&lt;/strong&gt; &lt;a href=&quot;http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/&quot;&gt;Blogging with Git Emacs and Jekyll&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
96
-
97
-&lt;p&gt;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.&lt;/p&gt;
98
-
99
-&lt;p&gt;&lt;a href=&quot;http://wiki.github.com/imathis/octopress/&quot;&gt;Read the wiki to learn more&lt;/a&gt;&lt;/p&gt;
100
-</content>
101
-  </entry>
102
-  
103
-</feed>
104 1
deleted file mode 100644
105 2
Binary files a/public/fonts/adellebasic_bold-webfont.eot and /dev/null differ
106 3
deleted file mode 100644
... ...
@@ -1,139 +0,0 @@
1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata>
5
-This is a custom SVG webfont generated by Font Squirrel.
6
-Copyright   : Copyright c 2009 by TypeTogether All rights reserved
7
-Designer    : Veronika Burian Jos Scaglione
8
-Foundry     : TypeTogether
9
-Foundry URL : wwwtypetogethercom
10
-</metadata>
11
-<defs>
12
-<font id="webfontKykxqSyz" horiz-adv-x="1167" >
13
-<font-face units-per-em="2048" ascent="1546" descent="-502" />
14
-<missing-glyph horiz-adv-x="413" />
15
-<glyph unicode=" "  horiz-adv-x="413" />
16
-<glyph unicode="&#x09;" horiz-adv-x="413" />
17
-<glyph unicode="&#xa0;" horiz-adv-x="413" />
18
-<glyph unicode="!" horiz-adv-x="569" d="M414 401h-258l-37 719v363h330v-363zM461 135q0 -160 -176 -160t-176 160t176 160t176 -160z" />
19
-<glyph unicode="&#x22;" horiz-adv-x="825" d="M358 915h-276v531h276v-531zM743 915h-276v531h276v-531z" />
20
-<glyph unicode="#" horiz-adv-x="1243" d="M831 0h-210l34 248h-176l-37 -248h-213l37 248h-205l45 207h193l35 231h-205l43 209h193l32 217h213l-32 -217h176l32 217h213l-32 -217h207l-41 -209h-197l-35 -231h207l-41 -207h-199zM688 455l35 231h-176l-37 -231h178z" />
21
-<glyph unicode="$" horiz-adv-x="1083" d="M999 399q0 -158 -85 -254t-234 -129v-180h-254v166q-227 10 -356 74v327h223l26 -143q4 -23 11.5 -31t27.5 -14q51 -18 152 -18q207 0 207 145q0 72 -65.5 114t-159 66.5t-186.5 58t-158.5 113.5t-65.5 209q0 160 93 256t251 129v160h256v-150q152 -10 293 -59v-350 l-225 22l-25 136q-6 35 -41 45q-41 10 -117 10q-203 0 -202 -137q0 -68 65.5 -109t158.5 -67.5t186 -61.5t158.5 -118t65.5 -210z" />
22
-<glyph unicode="%" horiz-adv-x="1818" d="M410 526q-182 0 -263 99.5t-81 261.5q0 180 90 281.5t270 101.5q342 0 342 -357q0 -180 -91 -283.5t-267 -103.5zM662 -35h-285l772 1307h283zM420 694q61 0 89 51.5t28 159.5q0 100 -27 147.5t-88 47.5q-121 0 -121 -199q0 -207 119 -207zM1395 -25q-182 0 -263 99.5 t-81 261.5q0 180 90 281.5t270 101.5q342 0 342 -357q0 -180 -91 -283.5t-267 -103.5zM1402.5 143q63.5 0 90.5 50.5t27 160.5q0 100 -26 147.5t-89 47.5q-119 0 -119 -199q0 -106 26.5 -156.5t90 -50.5z" />
23
-<glyph unicode="&#x26;" horiz-adv-x="1470" d="M1409 0h-346l-113 131q-166 -156 -413 -156q-211 0 -338 112t-127 310q0 295 295 418q-76 119 -76 238q0 156 109.5 247t285.5 91q104 0 206.5 -28t158.5 -63v-321l-220 8l-24 137q-4 25 -29 33q-27 8 -73 8q-59 0 -90 -30.5t-31 -81.5q0 -86 112 -217l230 -271 q29 88 47 228h352v-158l-94 -19q-18 -4 -25.5 -9t-9.5 -25q-29 -133 -76 -232l129 -147q18 -23 39 -25l121 -18v-160zM784 317l-270 308q-145 -61 -145 -213q0 -82 47 -136.5t145 -54.5q135 0 223 96z" />
24
-<glyph unicode="'" horiz-adv-x="442" d="M358 915h-276v531h276v-531z" />
25
-<glyph unicode="(" horiz-adv-x="729" d="M655 -221l-235 -133q-145 190 -239.5 429.5t-94.5 497.5q0 485 352 951l232 -138q-131 -195 -192.5 -388t-61.5 -425q0 -238 59 -413.5t180 -380.5z" />
26
-<glyph unicode=")" horiz-adv-x="729" d="M297 -354l-231 135q125 190 187 380.5t62 428.5q0 231 -59 412.5t-186 386.5l233 135q147 -188 243.5 -433t96.5 -501q0 -483 -346 -944z" />
27
-<glyph unicode="*" horiz-adv-x="976" d="M342 782l-174 129l88 115l178 115l-213 -8l-137 45l70 204l137 -45l162 -133l-74 199v143h215v-143l-72 -199h-69l-19 -63l53 -41l-59 -201zM809 911l-174 -129l-86 117l-62 201l56 41l-21 63l164 133l137 45l68 -204l-137 -45l-211 8l178 -115z" />
28
-<glyph unicode="+" d="M705 248h-246v295h-273v237h273v287h246v-287h274v-237h-274v-295z" />
29
-<glyph unicode="," horiz-adv-x="516" d="M281 -244l-140 41l56 219q6 18 -11 25l-84 29l45 221q141 -2 214 -33t73 -127q0 -55 -43 -141z" />
30
-<glyph unicode="-" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
31
-<glyph unicode="." horiz-adv-x="555" d="M453 135q0 -160 -174 -160q-176 0 -176.5 160t176.5 160q174 0 174 -160z" />
32
-<glyph unicode="/" horiz-adv-x="929" d="M315 -188h-292l575 1734h291z" />
33
-<glyph unicode="0" horiz-adv-x="1232" d="M606 -25q-291 0 -409.5 160t-118.5 459q0 616 553 616q287 0 405.5 -155.5t118.5 -444.5q0 -305 -128 -470t-421 -165zM618 195q113 0 161 93t48 310q0 213 -45 301t-157 88q-117 0 -167 -92t-50 -305q0 -211 46.5 -303t163.5 -92z" />
34
-<glyph unicode="1" horiz-adv-x="831" d="M791 0h-719v162l176 14q20 2 26.5 9.5t6.5 31.5v715q0 35 -27 43l-178 37l22 168h492v-963q0 -25 5 -32t28 -9l168 -14v-162z" />
35
-<glyph unicode="2" horiz-adv-x="1073" d="M1012 0h-946v190l274 269q129 125 175 173t83 108.5t37 117.5q0 131 -146 131q-88 0 -123.5 -38t-35.5 -144l-279 24q2 379 465 379q430 0 430 -327q0 -90 -45 -178.5t-92 -139.5t-145 -145l-232 -221h301q29 0 33 24l29 162h217v-385z" />
36
-<glyph unicode="3" horiz-adv-x="1062" d="M723 551v-8q270 -41 270 -316q0 -197 -134 -297t-361 -100q-154 0 -285 50t-211 138l164 181q139 -135 307 -136q213 0 213 185q0 176 -205 176q-66 0 -151 -14v204l100 13q227 29 227 221q0 141 -149 141q-88 0 -126 -39t-38 -143l-281 24q0 379 459 379 q229 0 332.5 -85t103.5 -255q0 -123 -66.5 -205.5t-168.5 -113.5z" />
37
-<glyph unicode="4" horiz-adv-x="1140" d="M934 -137h-283v264h-598v211l420 879l268 -123l-387 -727h297v329l283 43v-372h170v-240h-170v-264z" />
38
-<glyph unicode="5" horiz-adv-x="1110" d="M942 922h-543l-28 -281q106 70 260 70q184 0 289.5 -106.5t105.5 -311.5q0 -199 -133 -331t-371 -132q-340 0 -516 188l164 187q139 -139 326 -139q96 0 158.5 56t62.5 161q0 113 -57.5 155.5t-133.5 42.5q-113 0 -196 -88l-203 84l45 703h535q20 0 26 24l27 113l182 12 v-407z" />
39
-<glyph unicode="6" horiz-adv-x="1157" d="M1067 1004l-289 -35q0 92 -31.5 126.5t-113.5 34.5q-217 0 -230 -382q135 80 287 79q184 0 292 -100t108 -295q0 -229 -134.5 -343t-357.5 -114q-145 0 -246.5 50.5t-158 145.5t-81 211t-24.5 267q0 121 25.5 232.5t83 220t171 174t271.5 65.5q428 1 428 -337zM403 543 q2 -74 10.5 -126t28 -105.5t60.5 -82t102 -28.5q172 0 172 217q0 104 -37 147t-129 43q-101 1 -207 -65z" />
40
-<glyph unicode="7" horiz-adv-x="1089" d="M625 -137h-326q53 625 446 1059h-391q-14 0 -18 -5.5t-8 -21.5l-33 -172l-215 -16v473h989v-232q-186 -199 -311 -491.5t-133 -593.5z" />
41
-<glyph unicode="8" horiz-adv-x="1105" d="M823 696q215 -123 215 -325q0 -193 -139 -294.5t-367 -101.5q-223 0 -343.5 90.5t-120.5 264.5q0 111 51 192.5t143 157.5q-152 104 -151 281q0 182 124.5 281t323.5 99q201 0 313.5 -87t112.5 -240q0 -177 -162 -318zM459 575q-135 -125 -135 -229q0 -166 213 -166 q94 0 142 43t48 113q0 27 -6 49.5t-26 42.5l-31 34q-12 13 -47 33l-47 26q-13 7 -57 28.5t-54 25.5zM618 795q106 111 107 204q0 139 -164 140q-76 0 -115.5 -37t-39.5 -96q0 -37 15 -68t49 -56.5t63.5 -42.5t84.5 -44z" />
42
-<glyph unicode="9" d="M109 -18l131 188q131 -111 284 -111q135 0 186.5 90.5t57.5 251.5q-121 -78 -287 -77q-176 0 -287.5 113.5t-111.5 316.5q0 219 129 337.5t356 118.5q518 0 518 -659q0 -719 -546 -719q-123 0 -240.5 40t-189.5 110zM768 623q-4 78 -12 134t-28.5 113.5t-61.5 87 t-101 29.5q-170 0 -170 -217q0 -113 37 -167t127 -54q105 0 209 74z" />
43
-<glyph unicode=":" horiz-adv-x="555" d="M453 135q0 -160 -174 -160q-176 0 -176.5 160t176.5 160q174 0 174 -160zM453 913.5q0 -159.5 -174 -159.5q-176 0 -176.5 159.5t176.5 159.5q174 0 174 -159.5z" />
44
-<glyph unicode=";" horiz-adv-x="522" d="M281 -244l-140 41l56 219q6 18 -11 25l-84 29l45 221q141 -2 214 -33t73 -127q0 -55 -43 -141zM461 913.5q0 -159.5 -174 -159.5q-176 0 -176 159.5t176 159.5q174 0 174 -159.5z" />
45
-<glyph unicode="&#x3c;" d="M940 172l-799 281v286l795 291l70 -231l-598 -201l602 -201z" />
46
-<glyph unicode="=" d="M979 266h-791v240h791v-240zM979 647h-791v240h791v-240z" />
47
-<glyph unicode="&#x3e;" d="M1010 453l-799 -281l-70 225l602 201l-596 201l68 231l795 -291v-286z" />
48
-<glyph unicode="?" horiz-adv-x="1081" d="M600 401h-309v373q70 6 112.5 11.5t106 23.5t99.5 46t63.5 78t27.5 118q0 86 -43 133t-122 47q-78 0 -138 -25q-23 -8 -26 -41l-19 -131l-250 -18v377q236 90 447 90q496 0 495 -422q0 -199 -113.5 -322t-330.5 -149v-189zM621 135q0 -160 -175 -160q-176 0 -176 160 t176 160q175 0 175 -160z" />
49
-<glyph unicode="@" horiz-adv-x="1722" d="M1219 -143l49 -168q-164 -72 -416 -72q-340 0 -537.5 187.5t-197.5 539.5q0 369 220 594t574 225q322 0 515.5 -171t193.5 -480q0 -272 -108.5 -404.5t-294.5 -132.5q-184 0 -236 142q-145 -141 -250 -142q-109 0 -171 75t-62 214q0 229 121.5 389t328.5 160 q145 0 285 -65l-47 -302q-27 -147 -27 -217q0 -80 76 -79q51 0 89 35.5t56.5 93t26.5 111.5t8 106q0 231 -125 357t-385 126q-283 0 -432 -184.5t-149 -450.5q0 -268 144 -409.5t409 -141.5q168 1 342 64zM963 262l59 377q-35 25 -90 25q-92 0 -159.5 -103.5t-67.5 -263.5 q0 -143 82 -143.5t176 108.5z" />
50
-<glyph unicode="A" horiz-adv-x="1554" d="M1548 0h-647v160l168 18l-74 213h-508l-71 -213l162 -18v-160h-572v160l90 22q41 10 51 39l449 1262h362l447 -1266q8 -25 49 -35l94 -22v-160zM934 612l-182 557h-13l-188 -557h383z" />
51
-<glyph unicode="B" horiz-adv-x="1376" d="M750 0h-672v160l129 14q20 2 26.5 10.5t6.5 30.5v1049q0 25 -6.5 32t-26.5 9l-129 14v164h690q449 0 449 -363q0 -135 -72 -222t-178 -122v-6q342 -39 342 -362q0 -408 -559 -408zM555 221h141q141 0 213 47t72 172q0 215 -254 215h-172v-434zM555 860h82q129 0 203.5 45 t74.5 164q0 115 -62 153t-185 38h-113v-400z" />
52
-<glyph unicode="C" horiz-adv-x="1386" d="M1294 469v-381q-184 -113 -512 -113q-719 0 -719 773q0 342 197 551.5t565 209.5q287 0 465 -116v-402l-225 19l-33 200q-6 29 -33 37q-78 25 -182 25q-199 0 -312.5 -134t-113.5 -390q0 -266 108.5 -402.5t303.5 -136.5q119 0 205 27q18 4 25 12t11 31l31 190h219z" />
53
-<glyph unicode="D" horiz-adv-x="1540" d="M707 0h-629v164l129 14q20 2 26.5 9.5t6.5 31.5v1047q0 23 -6.5 31t-26.5 10l-129 14v162h663q375 0 555.5 -187.5t180.5 -531.5q0 -354 -192.5 -559t-577.5 -205zM557 221h117q481 0 481 524q0 279 -110.5 398t-358.5 119h-129v-1041z" />
54
-<glyph unicode="E" horiz-adv-x="1284" d="M1212 0h-1134v160l129 14q20 2 26.5 10.5t6.5 30.5v1051q0 25 -6.5 32t-26.5 9l-129 14v162h1089v-414l-225 10l-29 156q-6 27 -34 27h-322v-404h479v-227h-479v-412h367q29 0 32 23l33 180h223v-422z" />
55
-<glyph unicode="F" horiz-adv-x="1234" d="M891 0h-813v160l129 14q20 2 26.5 10.5t6.5 30.5v1051q0 25 -6.5 32t-26.5 9l-129 14v162h1081v-414l-225 10l-29 156q-6 27 -35 27h-313v-402h471v-227h-471v-414q0 -25 5 -32t28 -9l301 -16v-162z" />
56
-<glyph unicode="G" horiz-adv-x="1478" d="M1460 551l-84 -8q-33 -2 -33 -29v-440q-207 -98 -530 -99q-205 0 -353.5 57.5t-233.5 164t-125 241.5t-40 307q0 342 197 553t571 211q119 0 247 -30.5t216 -87.5v-387l-227 16l-31 184q-8 35 -33 41q-94 27 -188 27q-197 0 -309.5 -140.5t-112.5 -381.5 q0 -258 109.5 -398.5t326.5 -140.5q88 0 170 14q33 6 33 37v268h-227l28 185h629v-164z" />
57
-<glyph unicode="H" horiz-adv-x="1675" d="M1604 0h-648v160l129 14q20 2 26.5 10.5t6.5 30.5v432h-561v-430q0 -25 5 -32t28 -9l137 -16v-160h-649v160l129 14q20 2 26.5 10.5t6.5 30.5v1049q0 25 -6.5 32t-26.5 9l-129 14v164h649v-164l-137 -16q-23 -2 -28 -9.5t-5 -29.5v-387h561v387q0 25 -6 32t-27 9l-129 14 v164h648v-164l-138 -16q-23 -2 -27.5 -9.5t-4.5 -29.5v-1047q0 -25 5 -32t27 -9l138 -16v-160z" />
58
-<glyph unicode="I" horiz-adv-x="827" d="M762 0h-688v160l149 14q20 2 26.5 9t6.5 32v1049q0 25 -6 32t-27 9l-149 14v164h688v-164l-158 -16q-23 -2 -28 -9.5t-5 -29.5v-1047q0 -25 5.5 -32t27.5 -9l158 -16v-160z" />
59
-<glyph unicode="J" horiz-adv-x="1056" d="M526 336v930q0 23 -6 30t-26 9l-185 14v164h705v-164l-137 -16q-23 -2 -28 -8.5t-5 -28.5v-932q0 -182 -92.5 -270.5t-294.5 -88.5q-117 0 -227.5 25t-157.5 55v365l229 -17l21 -147q2 -20 22 -27q37 -12 82 -12q55 0 77.5 26.5t22.5 92.5z" />
60
-<glyph unicode="K" horiz-adv-x="1540" d="M1522 0h-453l-383 592l-129 -154v-219q0 -25 5 -32t28 -9l158 -16v-162h-670v162l129 14q20 2 26.5 9.5t6.5 31.5v1049q0 23 -6.5 31t-26.5 10l-129 14v162h649v-162l-137 -16q-23 -2 -28 -9.5t-5 -29.5v-512l483 549l-127 16v164h537v-164l-86 -14q-41 -6 -64 -35 l-376 -426l411 -629q18 -29 60 -33l127 -20v-162z" />
61
-<glyph unicode="L" horiz-adv-x="1277" d="M1212 0h-1134v162l129 14q20 2 26.5 10.5t6.5 30.5v1049q0 25 -6.5 32t-26.5 9l-129 14v162h682v-162l-170 -16q-23 -2 -28 -9.5t-5 -29.5v-1047h365q29 0 32 23l33 204h225v-446z" />
62
-<glyph unicode="M" horiz-adv-x="1970" d="M1898 0h-673v160l168 14q20 2 26 10.5t6 30.5v778h-8l-293 -698h-333l-289 700h-10v-778q0 -25 5 -32t27 -9l176 -16v-160h-622v160l129 14q20 2 26.5 10.5t6.5 30.5v1051q0 23 -6.5 31t-26.5 10l-129 14v162h549l356 -928h8l375 928h532v-160l-137 -16 q-23 -2 -27.5 -9.5t-4.5 -29.5v-1053q0 -35 32 -39l137 -16v-160z" />
63
-<glyph unicode="N" horiz-adv-x="1693" d="M1466 0h-336l-653 1069v-852q0 -25 5 -32t28 -9l137 -16v-160h-569v160l129 14q20 2 26.5 10.5t6.5 30.5v1053q0 25 -6.5 32t-26.5 9l-129 14v160h508l643 -1071v852q0 25 -6 32t-27 9l-129 14v164h569v-164l-137 -16q-23 -2 -28 -9.5t-5 -29.5v-1264z" />
64
-<glyph unicode="O" horiz-adv-x="1554" d="M768 -25q-356 0 -530.5 206t-174.5 556q0 342 190.5 557t543.5 215q346 0 520 -207.5t174 -537.5q0 -371 -183.5 -580t-539.5 -209zM780 227q385 0 385 518q0 506 -372 506q-184 0 -293 -127t-109 -381q0 -516 389 -516z" />
65
-<glyph unicode="P" horiz-adv-x="1323" d="M881 0h-803v162l129 14q20 2 26.5 10.5t6.5 30.5v1047q0 25 -6.5 32t-26.5 9l-129 14v164h694q264 0 379 -120t115 -316q0 -500 -561 -500h-150v-328q0 -25 5 -32t28 -9l293 -16v-162zM555 766h102q59 0 103.5 9t88.5 35t68.5 81t24.5 137q0 135 -69.5 183.5t-196.5 48.5 h-121v-494z" />
66
-<glyph unicode="Q" horiz-adv-x="1552" d="M1182 -176l59 -180q-143 -76 -291 -76q-324 0 -323 305q0 55 6 111q-291 35 -434.5 235.5t-143.5 517.5q0 342 190.5 557t542.5 215q236 0 395.5 -102t229.5 -266t70 -377q0 -326 -143.5 -528.5t-421.5 -245.5q-4 -25 -5 -70q0 -63 28 -95t93 -32q72 0 148 31zM774 227 q385 0 385 518q0 506 -373 506q-186 0 -294.5 -127t-108.5 -381q0 -516 391 -516z" />
67
-<glyph unicode="R" horiz-adv-x="1406" d="M1403 0h-447l-184 514q-18 53 -44 72.5t-77 19.5h-96v-385q0 -25 5 -32t28 -9l143 -16v-164h-653v164l129 14q20 2 26.5 9.5t6.5 31.5v1047q0 23 -6.5 31t-26.5 10l-129 14v162h698q256 0 366.5 -115t110.5 -295q0 -274 -270 -393q70 -33 119 -164l112 -293 q18 -33 62 -39l127 -20v-164zM555 819h94q131 0 205 49.5t74 186.5q0 115 -64.5 160t-206.5 45h-102v-441z" />
68
-<glyph unicode="S" horiz-adv-x="1214" d="M1090 1028l-232 21l-24 165q-4 31 -25 39q-72 23 -150 23q-113 0 -171 -47t-58 -127q0 -39 18.5 -71t38 -50t70.5 -39.5t74.5 -30t93.5 -28.5q94 -29 149.5 -52.5t125 -72.5t103.5 -128t34 -188q0 -238 -161 -352.5t-415 -114.5q-129 0 -266 27t-203 57v400h230l40 -195 q4 -31 35 -37q90 -23 172 -22q258 0 258 190q0 47 -18 82t-58 59.5t-78 38t-100 31.5q-201 57 -274 101q-178 106 -178 342q0 227 151.5 343.5t397.5 116.5q225 0 420 -82v-399z" />
69
-<glyph unicode="T" horiz-adv-x="1421" d="M1128 0h-819v162l211 14q20 2 26.5 9.5t6.5 31.5v1043h-211q-29 0 -33 -23l-33 -178h-225v424h1319v-424h-223l-33 178q-4 23 -33 23h-211v-1043q0 -23 5.5 -30t27.5 -9l225 -16v-162z" />
70
-<glyph unicode="U" horiz-adv-x="1607" d="M1112 588v678q0 25 -6 32t-27 9l-129 14v162h606v-162l-137 -16q-23 -2 -28 -9.5t-5 -29.5v-736q0 -283 -151.5 -419t-431.5 -136q-303 0 -442.5 137.5t-139.5 426.5v727q0 25 -6 32t-27 9l-127 14v162h648v-162l-138 -16q-23 -2 -27.5 -9.5t-4.5 -29.5v-670 q0 -188 58 -275.5t218 -87.5q164 0 230.5 80t66.5 275z" />
71
-<glyph unicode="V" horiz-adv-x="1505" d="M981 0h-418l-411 1266q-8 25 -50 34l-92 23l21 160h620v-160l-166 -18l308 -1024h16l297 1024l-164 18l21 160h530v-160l-86 -23q-45 -10 -51 -38z" />
72
-<glyph unicode="W" horiz-adv-x="2136" d="M1688 0h-414l-201 750h-12l-189 -750h-401l-309 1264q-6 27 -45 36l-105 23l21 160h626v-160l-172 -20l209 -1002h17l235 907h312l233 -913h16l211 1008l-172 20l21 160h553v-160l-97 -23q-37 -6 -47 -36z" />
73
-<glyph unicode="X" horiz-adv-x="1583" d="M1548 0h-671v160l161 18l-278 375l-277 -375l158 -18v-160h-586v160l119 22q35 8 53 39l389 504l-409 541q-16 27 -49 34l-107 23l21 160h641v-160l-160 -18l266 -373l279 373l-158 18l21 160h540v-160l-100 -23q-29 -8 -51 -38l-383 -496l419 -545q31 -33 52 -39 l110 -22v-160z" />
74
-<glyph unicode="Y" horiz-adv-x="1384" d="M1120 0h-803v162l205 14q20 2 26.5 9.5t6.5 31.5v336l-408 713q-14 23 -49 34l-92 23l21 160h614v-160l-160 -18l248 -484h16l248 484l-157 18l20 160h522v-160l-86 -23q-39 -10 -51 -38l-371 -705v-340q0 -23 5.5 -30t27.5 -9l217 -16v-162z" />
75
-<glyph unicode="Z" horiz-adv-x="1376" d="M1284 0h-1180v199l766 1063h-454q-29 0 -33 -23l-39 -192l-221 -7v443h1124v-207l-755 -1057h499q29 0 33 23l39 219h221v-461z" />
76
-<glyph unicode="[" horiz-adv-x="630" d="M557 -293h-459v1776h459v-156l-127 -22q-33 -4 -33 -41v-1336q0 -39 33 -43l127 -22v-156z" />
77
-<glyph unicode="\" horiz-adv-x="921" d="M897 -188h-283l-573 1734h281z" />
78
-<glyph unicode="]" horiz-adv-x="630" d="M532 1483v-1776h-464v156l133 22q33 4 32 43v1295q0 76 -32 82l-133 22v156h464z" />
79
-<glyph unicode="^" horiz-adv-x="1247" d="M1186 612h-295l-273 492l-266 -492h-291l404 748h313z" />
80
-<glyph unicode="_" horiz-adv-x="1024" d="M1024 -371h-1024v219h1024v-219z" />
81
-<glyph unicode="`" horiz-adv-x="1024" d="M762 1251l-117 -102l-364 299l168 160z" />
82
-<glyph unicode="a" horiz-adv-x="1140" d="M1118 0h-377l-20 111l-10 2q-141 -137 -344 -138q-299 0 -299 304q0 152 94 227.5t289 87.5l235 16v113q0 84 -24.5 123t-112.5 39q-82 0 -116 -25.5t-34 -111.5l-288 24q0 315 440 315q240 0 338 -79.5t98 -290.5v-498q0 -25 5 -32t28 -9l98 -16v-162zM686 270v170 l-139 -10q-90 -6 -127 -32.5t-37 -88.5q0 -113 117 -112q86 -1 186 73z" />
83
-<glyph unicode="b" horiz-adv-x="1247" d="M420 0h-293q31 197 31 299v999q0 35 -27 43l-113 39l23 166h422v-567l8 -2q135 111 309 110q178 0 287 -126.5t109 -397.5q0 -303 -115 -445.5t-316 -142.5q-186 0 -301 129l-10 -2zM465 774v-479q88 -80 188 -80q199 0 199 332q0 131 -46 215t-142 84q-90 0 -199 -72z " />
84
-<glyph unicode="c" horiz-adv-x="1044" d="M901 266l80 -190q-166 -100 -389 -101q-266 0 -401.5 148.5t-135.5 394.5q0 279 152.5 424t408.5 145q113 0 212.5 -25.5t152.5 -60.5v-321l-219 10l-25 135q-4 27 -24 33q-43 14 -105 14q-100 0 -163.5 -77.5t-63.5 -245.5q0 -342 264 -342q119 0 256 59z" />
85
-<glyph unicode="d" horiz-adv-x="1251" d="M1221 0h-381l-21 115l-14 2q-145 -141 -336 -142q-397 0 -397 545q0 289 122.5 428t311.5 139q156 0 289 -98v311q0 33 -27 41l-113 39l23 166h412v-1331q0 -23 5 -30t27 -9l99 -14v-162zM782 305v483q-90 61 -176 62q-109 0 -160 -88t-51 -236q0 -309 187 -309 q98 0 200 88z" />
86
-<glyph unicode="e" horiz-adv-x="1075" d="M930 283l76 -203q-215 -104 -420 -105q-281 0 -406 153t-125 413q0 266 142.5 406t365.5 140q213 0 332 -119.5t119 -375.5q0 -55 -4 -137h-627q16 -242 242 -242q117 0 305 70zM385 649h326q-2 217 -154 217q-156 0 -172 -217z" />
87
-<glyph unicode="f" horiz-adv-x="894" d="M799 0h-744v164l115 12q20 2 26.5 10.5t6.5 32.5v623q0 20 -17 20h-137v205h154v113q0 203 110.5 297t327.5 94q80 0 139.5 -12.5t113.5 -42t84 -90t30 -150.5l-287 -35v13q0 65 -20 89q-22 27 -74 27q-72 0 -93.5 -36t-21.5 -117v-130q0 -20 16 -20h324v-205h-340v-637 q0 -25 7 -32t30 -9l250 -22v-162z" />
88
-<glyph unicode="g" horiz-adv-x="1165" d="M1139 893l-189 -14q76 -96 76 -207q0 -168 -120 -264.5t-316 -96.5q-96 0 -162 19l-68 -109l201 -12q299 -18 391 -51q150 -49 168 -199q4 -25 4 -55q0 -176 -147.5 -272.5t-415.5 -96.5q-512 0 -512 256q0 63 25.5 107.5t87.5 101.5q-90 39 -90 135q0 61 59 125 q47 49 127 123q-80 39 -128 119t-48 188q0 182 120 289.5t349 107.5q111 0 188 -20h400v-174zM756 700q0 90 -49.5 137.5t-137.5 47.5q-90 0 -143 -46t-53 -143q0 -170 190 -170q86 0 139.5 47t53.5 127zM643 -76l-299 21q-53 -66 -53 -109q0 -106 248 -106q281 0 280 118 q0 25 -11 39.5t-42 21.5t-52.5 10t-70.5 5z" />
89
-<glyph unicode="h" horiz-adv-x="1277" d="M1253 0h-444v668q0 174 -108.5 174t-213.5 -76v-549q0 -25 5.5 -32t27.5 -9l98 -14v-162h-565v162l92 14q20 2 26.5 10.5t6.5 30.5v1081q0 35 -26 43l-113 39l22 166h422v-579l11 -2q150 123 327 122q158 0 227.5 -82.5t69.5 -248.5v-539q0 -25 5 -32t28 -9l102 -14v-162 z" />
90
-<glyph unicode="i" horiz-adv-x="647" d="M492 1415q0 -88 -49.5 -136t-137.5 -48t-136 48t-48 136t48 134t136 46q90 0 138.5 -46t48.5 -134zM625 0h-584v162l104 14q20 2 26.5 10.5t6.5 30.5v602q0 35 -26 43l-111 39l22 166h424v-850q0 -25 5.5 -32t27.5 -9l105 -14v-162z" />
91
-<glyph unicode="j" horiz-adv-x="622" d="M174 -57v876q0 35 -27 43l-116 39l24 166h428v-1176q0 -348 -356 -348q-113 0 -206 34t-136 71l88 170q86 -53 178 -54q66 0 94.5 38.5t28.5 140.5zM489 1415q0 -88 -49 -136t-137 -48t-137 48t-49 136q0 86 49 133t137 47q90 0 138 -46t48 -134z" />
92
-<glyph unicode="k" horiz-adv-x="1269" d="M1255 0h-397l-260 522l-111 -121v-184q0 -25 5.5 -32t27.5 -9l123 -14v-162h-600v162l102 14q20 2 26.5 10.5t6.5 30.5v1081q0 35 -26 43l-113 39l22 166h426v-874l375 395h283v-162l-107 -20q-27 -4 -51 -31l-145 -154l262 -489q16 -31 61 -37l90 -14v-160z" />
93
-<glyph unicode="l" horiz-adv-x="647" d="M621 0h-578v162l102 14q20 2 26.5 10.5t6.5 30.5v1081q0 35 -26 43l-113 39l22 166h426v-1329q0 -25 5.5 -32t27.5 -9l101 -14v-162z" />
94
-<glyph unicode="m" horiz-adv-x="1820" d="M1794 0h-444v662q0 51 -5.5 83.5t-33 62.5t-76.5 30q-82 0 -166 -56q6 -49 6 -100v-465q0 -27 5 -34t28 -9l82 -12v-162h-424v672q0 35 -3 58.5t-12.5 51t-33 42t-60.5 14.5q-92 0 -170 -66v-555q0 -25 4.5 -31t28.5 -10l101 -14v-162h-568v162l92 14q20 2 26.5 10.5 t6.5 30.5v602q0 35 -26 43l-111 39l22 166h361l16 -106l11 -3q158 129 327 129q176 0 250 -122q156 123 330 122q162 0 231.5 -82.5t69.5 -263.5v-524q0 -25 5 -33t28 -10l102 -12v-162z" />
95
-<glyph unicode="n" horiz-adv-x="1277" d="M1253 0h-444v662q0 59 -5 91.5t-29.5 60.5t-74.5 28q-53 0 -114.5 -23.5t-98.5 -52.5v-549q0 -25 5.5 -32t27.5 -9l98 -14v-162h-565v164l92 12q20 2 26.5 10.5t6.5 30.5v602q0 35 -26 43l-111 39l25 166h358l16 -106l9 -5q176 131 360 131q164 0 236.5 -87t72.5 -261 v-522q0 -25 5 -32t28 -9l102 -14v-162z" />
96
-<glyph unicode="o" horiz-adv-x="1189" d="M582 -25q-268 0 -397.5 148.5t-129.5 402.5q0 262 139.5 411.5t413.5 149.5q270 0 398.5 -144t128.5 -394q0 -268 -139.5 -421t-413.5 -153zM596 190q215 0 215 349q0 176 -51 251.5t-156 75.5q-225 0 -225 -329q0 -347 217 -347z" />
97
-<glyph unicode="p" horiz-adv-x="1259" d="M719 -434h-668v164l82 12q23 4 30 12t7 31v1034q0 35 -27 43l-108 39l22 166h361l18 -104l10 -5q160 129 349 129q182 0 287.5 -125.5t105.5 -398.5q0 -80 -11.5 -155.5t-41 -156.5t-74.5 -140.5t-122 -97.5t-173 -38q-164 0 -293 105v-293q0 -25 5 -32t28 -9l213 -18 v-162zM477 770v-477q90 -78 193 -78q195 0 194 332q0 297 -174 297q-104 0 -213 -74z" />
98
-<glyph unicode="q" horiz-adv-x="1220" d="M1219 -434h-623v164l176 14q25 2 33 9t8 28v321l-10 4q-154 -131 -324 -131q-190 0 -298.5 130.5t-108.5 406.5q0 293 126 434t312 141q162 0 297 -116l31 96h268q-16 -154 -16 -332v-954q0 -23 5 -30t27 -9l97 -14v-162zM780 301v483q-96 66 -180 66q-104 0 -155.5 -89 t-51.5 -235q0 -309 193 -309q96 0 194 84z" />
99
-<glyph unicode="r" horiz-adv-x="968" d="M723 0h-670v166l92 12q20 2 26.5 10.5t6.5 30.5v600q0 35 -26 43l-111 39l22 166h361l25 -164h12q119 184 289 184q113 0 178 -18v-373l-246 9l-20 108q-4 23 -27 23q-66 0 -148 -72v-543q0 -25 5.5 -32t27.5 -9l203 -16v-164z" />
100
-<glyph unicode="s" horiz-adv-x="997" d="M911 731l-219 14l-20 107q-2 25 -21 29q-53 16 -131 16q-160 0 -160 -104q0 -37 32 -61.5t70 -36t107 -27.5q18 -4 29 -6q74 -16 124 -35t106.5 -54.5t85 -97t28.5 -147.5q0 -178 -127 -265.5t-336 -87.5q-127 0 -250 26t-155 48v297l219 -16l20 -117q2 -27 25 -31 q61 -20 158 -20q170 0 170 106q0 55 -47.5 82t-139.5 43l-77.5 14.5t-75 18.5t-77 27.5t-64.5 40t-56 57.5t-32.5 77t-14.5 101q0 178 130 268t323 90q225 0 376 -59v-297z" />
101
-<glyph unicode="t" horiz-adv-x="892" d="M791 238l55 -181q-168 -82 -334 -82q-180 0 -258 78t-78 252v537q0 20 -16 20h-144v182q135 14 196.5 90t78.5 244h194v-291q0 -20 17 -20h289v-205h-306v-489q0 -94 29 -131t111 -37q78 0 166 33z" />
102
-<glyph unicode="u" horiz-adv-x="1275" d="M1241 0h-381l-16 111l-10 2q-53 -41 -94.5 -65.5t-115 -48.5t-155.5 -24q-158 0 -227.5 89.5t-69.5 271.5v500q0 25 -5 31.5t-28 11.5l-98 20l20 168h420v-678q0 -96 22.5 -134t86.5 -38q109 0 211 94v527q0 25 -5 30.5t-28 10.5l-88 20l22 168h408v-850q0 -23 5 -30 t24 -9l102 -14v-164z" />
103
-<glyph unicode="v" horiz-adv-x="1275" d="M819 0h-358l-326 848q-10 27 -43 35l-86 18l33 166h555v-166l-131 -16l209 -584h14l217 584l-133 16l27 166h473v-166l-74 -12q-41 -10 -51 -35z" />
104
-<glyph unicode="w" horiz-adv-x="1800" d="M1419 0h-323l-160 686h-12l-162 -686h-369l-258 848q-8 27 -43 35l-86 18l33 166h518v-170l-115 -12l164 -576h15l182 731h309l176 -731h12l154 576l-117 12l27 170h430v-166l-74 -14q-39 -6 -49 -41z" />
105
-<glyph unicode="x" horiz-adv-x="1234" d="M1214 0h-581v160l96 18l-156 205l-170 -203l115 -18v-162h-491v160l92 18q27 4 53 35l270 299l-278 332q-25 27 -49 35l-82 22l20 166h545v-166l-100 -16l151 -191l168 191l-112 16l20 166h453v-166l-95 -20q-12 -4 -51 -39l-250 -277l287 -350q33 -33 53 -37l92 -16 v-162z" />
106
-<glyph unicode="y" horiz-adv-x="1267" d="M907 -434h-682v166l160 18q33 2 51 45l88 195l-391 856q-8 27 -43 35l-84 20l33 166h543v-166l-129 -16l227 -541h14l217 541l-133 16l27 166h457v-166l-66 -12q-39 -6 -51 -35l-451 -1102l213 -22v-164z" />
107
-<glyph unicode="z" horiz-adv-x="1058" d="M1001 0h-929v172l549 702h-287q-18 0 -23 -26l-24 -115l-217 -12v346h899v-176l-539 -701h301q18 0 23 27l24 141l223 11v-369z" />
108
-<glyph unicode="{" horiz-adv-x="677" d="M610 -141l-20 -164q-246 4 -343 64.5t-97 220.5q0 53 14 177t14 201q0 84 -33.5 116t-109.5 36v162q76 4 109.5 35.5t33.5 115.5q0 78 -14 203t-14 178q0 160 97 220.5t343 64.5l20 -164q-86 -20 -115.5 -47t-29.5 -100q0 -51 16.5 -170t16.5 -185q0 -178 -129 -233 q129 -55 129 -232q0 -63 -16.5 -182t-16.5 -170q0 -74 29.5 -100.5t115.5 -46.5z" />
109
-<glyph unicode="|" horiz-adv-x="573" d="M426 -293h-281v1839h281v-1839z" />
110
-<glyph unicode="}" horiz-adv-x="677" d="M88 -305l-20 164q86 20 115.5 46.5t29.5 100.5q0 51 -16.5 170t-16.5 182q0 176 129 232q-129 55 -129 233q0 66 16.5 184.5t16.5 170.5q0 74 -29.5 100.5t-115.5 46.5l20 164q246 -4 343 -64.5t97 -220.5q0 -53 -14 -178t-14 -203q0 -84 33.5 -115.5t109.5 -35.5v-162 q-76 -4 -109.5 -36t-33.5 -116q0 -78 14 -201.5t14 -176.5q0 -160 -97 -220.5t-343 -64.5z" />
111
-<glyph unicode="~" horiz-adv-x="1073" d="M868 942l160 -59q-25 -147 -80 -218t-151 -71q-78 0 -237 47t-216 47q-51 0 -83 -20.5t-62 -77.5l-152 74q33 121 101.5 196.5t162.5 75.5q82 0 231.5 -47t213.5 -47q47 0 69.5 21.5t42.5 78.5z" />
112
-<glyph unicode="&#xad;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
113
-<glyph unicode="&#x2000;" horiz-adv-x="802" />
114
-<glyph unicode="&#x2001;" horiz-adv-x="1607" />
115
-<glyph unicode="&#x2002;" horiz-adv-x="802" />
116
-<glyph unicode="&#x2003;" horiz-adv-x="1607" />
117
-<glyph unicode="&#x2004;" horiz-adv-x="534" />
118
-<glyph unicode="&#x2005;" horiz-adv-x="401" />
119
-<glyph unicode="&#x2006;" horiz-adv-x="266" />
120
-<glyph unicode="&#x2007;" horiz-adv-x="266" />
121
-<glyph unicode="&#x2008;" horiz-adv-x="200" />
122
-<glyph unicode="&#x2009;" horiz-adv-x="321" />
123
-<glyph unicode="&#x200a;" horiz-adv-x="88" />
124
-<glyph unicode="&#x2010;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
125
-<glyph unicode="&#x2011;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
126
-<glyph unicode="&#x2012;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
127
-<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M1022 465h-1022v219h1022v-219z" />
128
-<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M2048 465h-2048v219h2048v-219z" />
129
-<glyph unicode="&#x2018;" horiz-adv-x="460" d="M389 1296l-41 -196q-86 2 -137 10t-90 43t-39 96q0 53 39 131l98 207l129 -39l-47 -202q-2 -16 10 -23z" />
130
-<glyph unicode="&#x2019;" horiz-adv-x="460" d="M244 1100l-131 39l47 202q6 18 -10 25l-78 25l41 196q63 0 104 -5t82 -19.5t60.5 -46t19.5 -78.5q0 -57 -37 -131z" />
131
-<glyph unicode="&#x201c;" horiz-adv-x="829" d="M389 1296l-41 -196q-86 2 -137 10t-90 43t-39 96q0 53 39 131l98 207l129 -39l-47 -202q-2 -16 10 -23zM758 1296l-41 -196q-86 2 -137.5 10t-90 43t-38.5 96q0 53 38 131l99 207l129 -39l-47 -202q-2 -16 10 -23z" />
132
-<glyph unicode="&#x201d;" horiz-adv-x="829" d="M244 1100l-131 39l47 202q6 18 -10 25l-78 25l41 196q63 0 104 -5t82 -19.5t60.5 -46t19.5 -78.5q0 -57 -37 -131zM612 1100l-131 39l47 202q6 18 -10 25l-78 25l41 196q63 0 104.5 -5t82.5 -19.5t60.5 -46t19.5 -78.5q0 -57 -37 -131z" />
133
-<glyph unicode="&#x2026;" horiz-adv-x="1443" d="M432 135q0 -160 -174 -160q-176 0 -176 160t176 160q174 0 174 -160zM899 135q0 -160 -174 -160q-176 0 -176 160t176 160q174 0 174 -160zM1362 135q0 -160 -174 -160q-176 0 -176 160t176 160q174 0 174 -160z" />
134
-<glyph unicode="&#x202f;" horiz-adv-x="321" />
135
-<glyph unicode="&#x205f;" horiz-adv-x="401" />
136
-<glyph unicode="&#xe000;" horiz-adv-x="1065" d="M0 1065h1065v-1065h-1065v1065z" />
137
-<glyph horiz-adv-x="1024" />
138
-</font>
139
-</defs></svg> 
140 1
\ No newline at end of file
141 2
deleted file mode 100644
142 3
Binary files a/public/fonts/adellebasic_bold-webfont.ttf and /dev/null differ
143 4
deleted file mode 100644
144 5
Binary files a/public/fonts/adellebasic_bold-webfont.woff and /dev/null differ
145 6
deleted file mode 100644
146 7
Binary files a/public/images/code_bg.png and /dev/null differ
147 8
deleted file mode 100644
148 9
Binary files a/public/images/rss.png and /dev/null differ
149 10
deleted file mode 100644
150 11
Binary files a/public/images/search.png and /dev/null differ
151 12
deleted file mode 100644
... ...
@@ -1,207 +0,0 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
7
-<head>
8
-  <meta charset="utf-8">
9
-
10
-  <title>Octopress - My Octopress Blog</title>
11
-  <meta name="author" content="Your Name">
12
-  
13
-
14
-  <!-- http://t.co/dKP3o1e -->
15
-  <meta name="HandheldFriendly" content="True">
16
-  <meta name="MobileOptimized" content="320">
17
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
-
19
-  
20
-
21
-  <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
22
-  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
25
-  
26
-  <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
27
-</head>
28
-
29
-<body  >
30
-  <header><div><h1><a href="/">My Octopress Blog</a></h1>
31
-</div></header>
32
-  <nav><div><div>
33
-  <a href="/atom.xml">Subscribe</a>
34
-  <form action="http://google.com/search" method="get">
35
-    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
-    <input type="hidden" name="q" value="site:yoursite.com" />
37
-  </form>
38
-</div>
39
-<ul>
40
-  <li><a href="/">Blog</a></li>
41
-  <li><a href="/about/">About</a></li>
42
-</ul>
43
-</div></nav>
44
-  <div>
45
-    <div>
46
-      <div id="articles">
47
-
48
-
49
-  <article>
50
-    <header>
51
-  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
52
-  <p>
53
-    
54
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
55
-    
56
-    
57
-      <time datetime="2011-04-07 19:17:00 -0400" pubdate>April 7<span>th</span>, 2011</time>
58
-    
59
-    
60
-  </p>
61
-</header>
62
-
63
-<div class="entry"><p>In the past I&#8217;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>
64
-
65
-<h2>Why Have Business Cards?</h2>
66
-
67
-<p>I&#8217;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
68
-people I work for I&#8217;ve never met in-person.</p>
69
-
70
-<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>
71
-
72
-<p><a href='/2011/04/07/test-of-typography/'>Continue reading &raquo;</a></p></div>
73
-
74
-
75
-  </article>
76
-
77
-
78
-
79
-  <article>
80
-    <header>
81
-  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
82
-  <p>
83
-    
84
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
85
-    
86
-    
87
-      <time datetime="2011-03-14 00:00:00 -0400" pubdate>March 14<span>th</span>, 2011</time>
88
-    
89
-    
90
-  </p>
91
-</header>
92
-
93
-<div class="entry"><p>This is a test!</p>
94
-</div>
95
-
96
-
97
-  </article>
98
-
99
-
100
-
101
-  <article>
102
-    <header>
103
-  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
104
-  <p>
105
-    
106
-      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
107
-    
108
-    
109
-      <time datetime="2009-11-13 00:00:00 -0500" pubdate>November 13<span>th</span>, 2009</time>
110
-    
111
-    
112
-      <time class="updated" datetime="2010-03-10 00:00:00 -0500" pubdate>Updated March 10<span>th</span>, 2010</time>
113
-    
114
-  </p>
115
-</header>
116
-
117
-<div class="entry"><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>.
118
-If you don&#8217;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>
119
-
120
-<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>
121
-
122
-<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>
123
-
124
-<p>There&#8217;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>
125
-
126
-<p><a href="http://wiki.github.com/imathis/octopress/">Read the wiki to learn more</a></p>
127
-</div>
128
-
129
-
130
-  </article>
131
-
132
-
133
-</div>
134
-      
135
-        <aside><section>
136
-  <h1>About Me</h1>
137
-  <p>Hi, I'm Octopress!</p>
138
-</section>
139
-
140
-<section>
141
-  <h1>Recent Posts</h1>
142
-  <ul id="recent_posts">
143
-    
144
-      <li class="post">
145
-        <a href="/2011/04/07/test-of-typography/">Test of Typography</a>
146
-        <time>April 07, 2011</time>
147
-      </li>
148
-    
149
-      <li class="post">
150
-        <a href="/2011/03/14/test-post/">Test Post</a>
151
-        <time>March 14, 2011</time>
152
-      </li>
153
-    
154
-      <li class="post">
155
-        <a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a>
156
-        <time>November 13, 2009</time>
157
-      </li>
158
-    
159
-  </ul>
160
-  </section>
161
-
162
-
163
-  <section><h1>Latest Tweets</h1>
164
-<ul id="tweets">
165
-  Status updating...
166
-</ul>
167
-<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
168
-
169
-  <script>
170
-    var twitter_user = "imathis";
171
-    var show_replies = false;
172
-    var tweet_count = 3;
173
-  </script>
174
-  <script src="/javascripts/twitter.js" type="text/javascript"></script>
175
-
176
-</section>
177
-
178
-
179
-
180
-  <section><h1>My Pinboard</h1>
181
-<ul id="pinboard_linkroll">Fetching linkroll...</ul>
182
-<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
183
-</section>
184
-
185
-</aside>
186
-      
187
-    </div>
188
-  </div>
189
-  <footer><div><p>
190
-  Copyright &copy; 2011 - Your Name -
191
-  <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
192
-</p>
193
-
194
-  <script language="javascript">
195
-    var pinboard_user = "designenthusiast";
196
-    var pinboard_count = "3";
197
-  </script>
198
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
199
-
200
-</div></footer>
201
-  <!--[if (lt IE 9) & (!IEMobile)]>
202
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
203
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
204
-  <script src="javascripts/libs/respond.min.js"></script>
205
-  <![endif]-->
206
-</body>
207
-</html>
208 1
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8
2
-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<s;t++){if(v.call(u||this[t],this[t],t,this)===false){break}}return this};r.first=function(){return b(this[0])?DOMAssistant.addMethodsToElm(this[0]):null};r.end=function(){return this.previousSet};r.indexOf=r.indexOf||function(u){for(var t=0,s=this.length;t<s;t++){if(t in this&&this[t]===u){return t}}return -1};r.map=function(w,v){var u=[];for(var t=0,s=this.length;t<s;t++){if(t in this){u[t]=w.call(v||this[t],this[t],t,this)}}return u};r.filter=function(w,v){var u=new j();u.previousSet=this;for(var t=0,s=this.length;t<s;t++){if(t in this&&w.call(v||this[t],this[t],t,this)){u.push(this[t])}}return u};r.every=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&!v.call(u||this[t],this[t],t,this)){return false}}return true};r.some=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&v.call(u||this[t],this[t],t,this)){return true}}return false}})(j.prototype);this.attach(this)},addMethods:function(r,s){if(!b(this.allMethods[r])){this.allMethods[r]=s;this.addHTMLArrayPrototype(r,s)}},addMethodsToElm:function(s){for(var r in this.allMethods){if(b(this.allMethods[r])){this.applyMethod.call(s,r,this.allMethods[r])}}return s},applyMethod:function(s,r){if(typeof this[s]!=="function"){this[s]=r}},attach:function(t){var r=t.publicMethods;if(!b(r)){for(var v in t){if(v!=="init"&&b(t[v])){this.addMethods(v,t[v])}}}else{if(r.constructor===Array){for(var s=0,u;(u=r[s]);s++){this.addMethods(u,t[u])}}}if(typeof t.init==="function"){t.init()}},addHTMLArrayPrototype:function(r,s){j.prototype[r]=function(){var v=new j();v.previousSet=this;for(var u=0,t=this.length;u<t;u++){v.push(s.apply(DOMAssistant.$$(this[u]),arguments))}return v}},cleanUp:function(u){var s=u.all||u.getElementsByTagName("*");for(var r=0,t;(t=s[r++]);){if(t.hasData&&t.hasData()){if(t.removeEvent){t.removeEvent()}t.unstore()}}u.innerHTML=""},setCache:function(r){a=r},$:function(){var u=arguments[0];if(arguments.length===1&&(typeof u==="object"||(typeof u==="function"&&!!u.nodeName))){return DOMAssistant.$$(u)}var w=!!u?new j():null;for(var s=0,r,v;(r=arguments[s]);s++){if(typeof r==="string"){r=r.replace(/^[^#\(]*(#)/,"$1");if(m.id.test(r)){if((v=DOMAssistant.$$(r.substr(1),false))){w.push(v)}}else{var t=(document.all||document.getElementsByTagName("*")).length;w=(!document.querySelectorAll&&a&&q.rule&&q.rule===r&&q.doc===t)?q.elms:e(w,DOMAssistant.cssSelection.call(document,r));q={rule:r,elms:w,doc:t}}}}return w},$$:function(x,u){var w=(typeof x==="object"||typeof x==="function"&&!!x.nodeName)?x:document.getElementById(x),v=b(u)?u:true,t=function(z){var y=z.id;return typeof y!=="object"?y:z.attributes.id.nodeValue};if(typeof x==="string"&&w&&t(w)!==x){w=null;for(var r=0,s;(s=document.all[r]);r++){if(t(s)===x){w=s;break}}}if(w&&v&&!w.next){DOMAssistant.addMethodsToElm(w)}return w},prev:function(){return DOMAssistant.$$(f(this,"previous"))},next:function(){return DOMAssistant.$$(f(this,"next"))},hasChild:function(r){return this===document||this!==r&&(this.contains?this.contains(r):!!(this.compareDocumentPosition(r)&16))},getSequence:function(v){var w,u=2,s=-1,r=-1,t=m.nth.exec(v.replace(/^0n\+/,"").replace(/^2n$/,"even").replace(/^2n+1$/,"odd"));if(!t){return null}if(t[2]){w=(t[2]==="odd")?1:2;r=(w===1)?1:0}else{if(t[3]){w=s=parseInt(t[3],10);u=0}else{if(t[4]){u=t[6]?parseInt(t[6],10):1;w=t[7]?parseInt(t[7],10):0;while(w<1){w+=u}r=(w>=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<ap.length&&(at||aF.tag===al.tagName.toLowerCase()))?[al]:[]}ap=aG}else{if(aF.tag&&!ap.skipTag){if(ai===0&&!aG.length&&ap.length===1){ap=aG=e([],aL(aF.tag,ap[0]))}else{for(var ad=0,aO=ap.length,az,aw;ad<aO;ad++){az=aL(aF.tag,ap[ad]);for(var aa=0;(aw=az[aa]);aa++){if(!aw.added){aw.added=true;aG[aG.length]=aw}}}ap=aG;aQ()}}}if(!aG.length){break}ap.skipTag=false;if(aF.allClasses){var Y=0,ab=[],J=aF.allClasses.split(".").slice(1);while((ah=ap[Y++])){var af=true,ax=ah.className;if(ax&&ax.length){ax=ax.split(" ");for(var X=J.length;X--;){if(ax.indexOf(J[X])<0){af=false;break}}if(af){ab[ab.length]=ah}}}ap=aG=ab}if(aF.allAttr){var B,T=0,aC=[],ac=[],aH=aF.allAttr.match(m.attribs);for(var H=/^\[(selected|readonly)(\s*=.+)?\]$/,V=0,z=aH.length,U,aP;V<z;V++){m.attribs.lastIndex=0;U=m.attribs.exec(aH[V].replace(H,"[$1]"));aP=P(U[4],U[2]||null);aC[V]=[(aP?new RegExp(aP):null),U[1]]}while((ah=aG[T++])){for(var R=0,aE=aC.length;R<aE;R++){var aA=aC[R][0],aj=E(ah,aC[R][1]);B=true;if(!aA&&aj===true){continue}if((!aA&&(!aj||typeof aj!=="string"||!aj.length))||(!!aA&&!aA.test(aj))){B=false;break}}if(B){ac[ac.length]=ah}}ap=aG=ac}if(aF.allPseudos){var F=aF.allPseudos.match(m.pseudos);for(var Q=0,ao=F.length;Q<ao;Q++){m.pseudos.lastIndex=0;var aT=m.pseudos.exec(F[Q]);var L=aT[1]?aT[1].toLowerCase():null;var aM=aT[3]||null;aG=ar(aG,L,aM);aQ(aG)}ap=aG}}aB=((aJ.length&&(at||aR.call(aJ,aF.tag)>=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<Q;L++){z=m.selector.exec(T[L]);A={tag:u+(z[1]?z[1]:"*"),id:z[2],allClasses:z[3],allAttr:z[5],allPseudos:z[10],tagRelation:z[20]};J+=(A.tagRelation?({">":"/","+":"/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;K<x;K++){m.pseudos.lastIndex=0;var y=m.pseudos.exec(D[K]),U=y[1]?y[1].toLowerCase():null,w=y[3]||null,G=P(A.tag,U,w);if(G.length){J+="["+G+"]"}}}}}try{var I=document.evaluate(J,this,r,7,null),H,F=0;while((H=I.snapshotItem(F++))){B.push(H)}}catch(S){}return B};return DOMAssistant.cssByXpath.call(this,s)},cssSelection:function(s){if(!s){return null}var r=m.special.test(s);try{if(document.querySelectorAll&&!r){return e(new j(),this.querySelectorAll(s))}}catch(t){}return((document.evaluate&&!r&&!/-of-type/.test(s))?DOMAssistant.cssByXpath:DOMAssistant.cssByDOM).call(this,s)},cssSelect:function(r){return DOMAssistant.cssSelection.call(this,r)},elmsByClass:function(t,r){var s=(r||"")+"."+t;return DOMAssistant.cssSelection.call(this,s)},elmsByAttribute:function(s,t,r,v){var u=(r||"")+"["+s+((t&&t!=="*")?((v||"")+"="+t+"]"):"]");return DOMAssistant.cssSelection.call(this,u)},elmsByTag:function(r){return DOMAssistant.cssSelection.call(this,r)}}}();DOMAssistant.initCore();DOMAssistant.Storage=function(){var c=1,a=[],b="_da"+ +new Date();return{hasData:function(){var d=this[b];return !!d&&!!a[d]},retrieve:function(d){if(!DOMAssistant.def(d)){return this[b]||(this[b]=c++)}if(!this[b]||!a[this[b]]){return}return a[this[b]][d]},store:function(f,g){var e=this[b]||(this[b]=c++);a[e]=a[e]||{};if(typeof f==="object"){for(var d in f){if(typeof d==="string"){a[e][d]=f[d]}}}else{a[e][f]=g}return this},unstore:function(e){var d=this[b]||(this[b]=c++);if(a[d]){if(DOMAssistant.def(e)){delete a[d][e]}else{a[d]=null}}return this}}}();DOMAssistant.attach(DOMAssistant.Storage);DOMAssistant.AJAX=function(){var globalXMLHttp=null,readyState=0,status=-1,statusText="",requestPool=[],createAjaxObj=function(url,method,callback,addToContent){var params=null;if(/POST/i.test(method)){url=url.split("?");params=url[1];url=url[0]}return{url:url,method:method,callback:callback,params:params,headers:{},responseType:"text",addToContent:addToContent||false}};return{publicMethods:["ajax","get","post","load"],initRequest:function(){var XMLHttp=null;if(!!window.XMLHttpRequest&&!DOMAssistant.isIE){XMLHttp=new XMLHttpRequest();DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new XMLHttpRequest()}}else{if(!!window.ActiveXObject){var XMLHttpMS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0;i<XMLHttpMS.length;i++){try{XMLHttp=new window.ActiveXObject(XMLHttpMS[i]);DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new window.ActiveXObject(XMLHttpMS[i])};break}catch(e){XMLHttp=null}}}}return XMLHttp},ajax:function(ajaxObj){if(!ajaxObj.noParse&&ajaxObj.url&&/\?/.test(ajaxObj.url)&&ajaxObj.method&&/POST/i.test(ajaxObj.method)){var url=ajaxObj.url.split("?");ajaxObj.url=url[0];ajaxObj.params=url[1]+((url[1].length>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 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<l;n++){if(s[m][n].call(this,j)===false){j.stopPropagation()}}}else{if(typeof this["on"+m]==="function"){this["on"+m].call(this,j)}}var k=DOMAssistant.$$(this.parentNode);if(!j.cancelBubble&&k&&k.nodeType===1){k.triggerEvent(m,o,j)}return this},addEvent:function(r,l,k,q,n){var j,m=d(r),p=m+this.retrieve(),o="on"+m;if(!(l.attachedElements&&l.attachedElements[p])){var s=this.retrieve(g)||{};if(!s[m]){s[m]=[];j=this[o];this[o]=null}if(typeof this.window==="object"){this.window[o]=i}else{if(!s[m].length){if(c){this.addEventListener(m,i,a[m])}else{this[o]=i}}}if(j){s[m].push(j)}if(m!==r){l.evt=r}l.relay=k;l.proxy=q;l.selector=n;l.attachedElements=l.attachedElements||{};l.attachedElements[p]=true;s[m].push(l);this.store(g,s)}return this},handleEvent:function(r){var q=(r&&f.dom.test(r.type)&&c)?r:h(r),o=d(q.type),p=q.target,l=q.relatedTarget,n=this.retrieve(g)[o].slice(0),t,j,s;if((t=n.length)){for(var m=0;m<t;m++){if(typeof n[m]==="function"){if((s=n[m].evt)&&s!==o){q.type=s;if(l&&f.mouseenterleave.test(s)){if(n[m].relay){var k=n[m].elms||(n[m].elms=this.cssSelect(n[m].selector));if(k.indexOf(p)<0||!DOMAssistant.hasChild.call(l,p)){continue}}else{if(this===l||this.hasChild(l)){continue}}}}j=n[m].call(this,q)}}if(j===false){q.stopPropagation()}return j}},removeEvent:function(w,l,k,s){var q=(w=d(w))+this.retrieve(),x=this.retrieve(g),p="on"+w;if(x&&!w){for(var v in x){if(x[v].length){this.removeEvent(v)}}var r=this.attributes;for(var t,m=r.length;m--;){t=r[m].nodeName.toLowerCase();if(f.on.test(t)&&typeof this[t]==="function"){this[t]=null}}}else{if(x&&x[w]){var o=x[w];for(var u,n=o.length;n--;){u=l||o[n];if(o[n]===u&&k===u.relay&&s===u.proxy){o.splice(n,1);if(!!s&&u.selector){this.cssSelect(u.selector).removeEvent(s)}if(u.attachedElements){u.attachedElements[q]=null}}}if(!x[w].length){if(c){this.removeEventListener(w,i,a[w])}else{this[p]=null}}}else{if(this[p]&&!l&&!k){this[p]=null}}}return this},relayEvent:function(k,j,m,l){if(e(k)){this.relayEvent("focus",j,function(){DOMAssistant.$$(this).removeEvent(k).addEvent(k,function(n){return m.call(this,h(n))})},k).relayEvent("blur",j,function(){DOMAssistant.$$(this).removeEvent(k)},k);return this}return this.addEvent(k,function(s){s=h(s);var r=s.target,n=arguments,o=0,t,p=this.cssSelect(j);while((t=p[o++])){if((t===r||DOMAssistant.hasChild.call(t,r))&&!t.disabled){s.currentTarget=t;var q=m.apply(t,n);if(!q){s.preventDefault()}return q}}},true,l,j)},unrelayEvent:function(j){if(e(j)){return this.removeEvent("focus",null,true,j).removeEvent("blur",null,true,j)}return this.removeEvent(j,null,true)},preventDefault:function(j){if(j.preventDefault){j.preventDefault()}j.returnValue=false},cancelBubble:function(j){if(j.stopPropagation){j.stopPropagation()}j.cancelBubble=true}}}();DOMAssistant.attach(DOMAssistant.Events);DOMAssistant.DOMLoad=function(){var g=false,a=null,f=[],b={},c=null,d=function(){for(var j=0,h=f.length;j<h;j++){try{f[j]()}catch(k){if(c&&typeof c==="function"){c(k)}}}f=[]},e=function(){if(g){return}g=true;d()};
3
-/*@cc_on @if(@_win32||@_win64)document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/
4
-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<h;j++){k=arguments[j];if(!k.DOMReady&&!b[k]){if(typeof k==="string"){b[k]=true;k=new Function(k)}k.DOMReady=true;f.push(k)}}if(g){d()}},setErrorHandling:function(h){c=h}}}();DOMAssistant.DOMReady=DOMAssistant.DOMLoad.DOMReady;
5 1
\ No newline at end of file
6 2
deleted file mode 100644
... ...
@@ -1,20 +0,0 @@
1
-// https://gist.github.com/901295
2
-// By @mathias, @cheeaun and @jdalton
3
-
4
-(function(doc) {
5
-	var addEvent = 'addEventListener',
6
-	    type = 'gesturestart',
7
-	    qsa = 'querySelectorAll',
8
-	    scales = [1, 1],
9
-	    meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
10
-	function fix() {
11
-		meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
12
-		doc.removeEventListener(type, fix, true);
13
-	}
14
-	if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15
-		fix();
16
-		scales = [.25, 1.6];
17
-		doc[addEvent](type, fix, true);
18
-	}
19
-}(document));
20
-
21 1
deleted file mode 100644
... ...
@@ -1,2 +0,0 @@
1
-// Modernizr v1.7  www.modernizr.com
2
-window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";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="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
3 1
\ No newline at end of file
4 2
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-/*
2
- * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
3
- * Copyright 2011, Scott Jehl, scottjehl.com
4
- * Dual licensed under the MIT or GPL Version 2 licenses.
5
- * Usage: Check out the readme file or github.com/scottjehl/respond
6
-*/
7
-(function(e,h){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=h;if(h){return}var u=e.document,r=u.documentElement,i=[],k=[],p=[],o={},g=30,f=u.getElementsByTagName("head")[0]||r,b=f.getElementsByTagName("link"),d=[],a=function(){var B=b,w=B.length;for(var z=0;z<w;z++){var y=B[z],x=y.href,A=y.media,v=y.rel&&y.rel.toLowerCase()==="stylesheet";if(!!x&&v&&!o[x]){if(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(x)||x.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:x,media:A})}else{o[x]=true}}}t()},t=function(){if(d.length){var v=d.shift();n(v.href,function(w){m(w,v.href,v.media);o[v.href]=true;t()})}},m=function(G,v,x){var E=G.match(/@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi),H=E&&E.length||0,v=v.substring(0,v.lastIndexOf("/")),w=function(I){return I.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+v+"$2$3")},y=!H&&x;if(v.length){v+="/"}if(y){H=1}for(var B=0;B<H;B++){var C;if(y){C=x;k.push(w(G))}else{C=E[B].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&w(RegExp.$2))}var z=C.split(","),F=z.length;for(var A=0;A<F;A++){var D=z[A];i.push({media:D.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:k.length-1,minw:D.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:D.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}}j()},l,q,j=function(E){var v="clientWidth",x=r[v],D=u.compatMode==="CSS1Compat"&&x||u.body[v]||x,z={},C=u.createDocumentFragment(),B=b[b.length-1],w=(new Date()).getTime();if(E&&l&&w-l<g){clearTimeout(q);q=setTimeout(j,g);return}else{l=w}for(var y in i){var F=i[y];if(!F.minw&&!F.maxw||(!F.minw||F.minw&&D>=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='_<style media="'+a+'"> #mq-test-1 { width: 9px; }</style>';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));
8
-
9 1
deleted file mode 100644
... ...
@@ -1,5 +0,0 @@
1
-/*!
2
- * selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms of the MIT license.
3
- * selectivizr.com
4
- */
5
-(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;b<e;b++){var s=D(a[b].replace(E,h).replace(F,h))+o,l=[];a[b]=s.replace(G,function(a,b,c,d,e){if(b){if(l.length>0){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<c;e++){for(var d=f[e],h=d.className,j=0,m=a.length;j<m;j++){var g=a[j];if(!RegExp("(^|\\s)"+g.className+"(\\s|$)").test(d.className)&&g.b&&(g.b===!0||g.b(d)===!0))h=u(h,g.className,!0)}d.className=h}}l=[]}return b}else{if(b=c?I(c):!v||v.test(d)?{className:w(d),b:!0}:null)return l.push(b),"."+b.className;return a}})}return d+a.join(",")})}function I(a){var c=!0,d=w(a.slice(1)),b=a.substring(0,5)==":not(",e,f;b&&(a=a.slice(5,-1));var l=a.indexOf("(");l>-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;b<f.styleSheets.length;b++)if(c=f.styleSheets[b],c.href!=i&&(a=r(c.href,d)))c.cssText=A(y(a));q.length>0&&setInterval(function(){for(var a=0,c=q.length;a<c;a++){var b=q[a];if(b.disabled!==b.a)b.disabled?(b.disabled=!1,b.a=!0,b.disabled=!0):b.a=b.disabled}},250)}if(!/*@cc_on!@*/true){var f=document,p=f.documentElement,n=function(){if(j.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),m=/MSIE (\d+)/.exec(navigator.userAgent)[1];if(!(f.compatMode!="CSS1Compat"||m<6||m>8||!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);
6 1
\ No newline at end of file
7 2
deleted file mode 100644
8 3
deleted file mode 100644
... ...
@@ -1,52 +0,0 @@
1
-var count = pinboard_count;
2
-var linkroll = 'pinboard_linkroll';
3
-function pinboardNS_fetch_script(url) {
4
-  document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>');
5
-}
6
-
7
-function pinboardNS_show_bmarks(r) {
8
-  var lr = new Pinboard_Linkroll();
9
-  lr.set_items(r);
10
-  lr.show_bmarks();
11
-}
12
-
13
-var json_URL = "http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count=" + count;
14
-pinboardNS_fetch_script(json_URL);
15
-
16
-function Pinboard_Linkroll() {
17
-  var items;
18
-
19
-  this.set_items = function(i) {
20
-    this.items = i;
21
-  }
22
-  this.show_bmarks = function() {
23
-    var lines = [];
24
-    for (var i = 0; i < this.items.length; i++) {
25
-      var item = this.items[i];
26
-      var str = this.format_item(item);
27
-      lines.push(str);
28
-    }
29
-    document.getElementById(linkroll).innerHTML = lines.join("\n");
30
-  }
31
-  this.cook = function(v) {
32
-    return v.replace('<', '&lt;').replace('>', '&gt>');
33
-  }
34
-
35
-  this.format_item = function(it) {
36
-    var str = "<li class=\"pin-item\">";
37
-    if (!it.d) { return; }
38
-    str += "<p><a class=\"pin-title\" href=\"" + this.cook(it.u) + "\">" + this.cook(it.d) + "</a>";
39
-    if (it.n) {
40
-      str += "<span class=\"pin-description\">" + this.cook(it.n) + "</span>\n";
41
-    }
42
-    if (it.t.length > 0) {
43
-      for (var i = 0; i < it.t.length; i++) {
44
-        var tag = it.t[i];
45
-        str += " <a class=\"pin-tag\" href=\"http://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag) + "</a>  ";
46
-      }
47
-    }
48
-    str += "</p></li>\n";
49
-    return str;
50
-  }
51
-}
52
-Pinboard_Linkroll.prototype = new Pinboard_Linkroll();
53 1
deleted file mode 100644
... ...
@@ -1,70 +0,0 @@
1
-/* 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 */
2
-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<i;a+=1){g[a]=n(a,b)||'null'}d=g.length===0?'[]':h?'[\n'+h+g.join(',\n'+h)+'\n'+k+']':'['+g.join(',')+']';h=k;return d}if(j&&typeof j==='object'){i=j.length;for(a=0;a<i;a+=1){e=j[a];if(typeof e==='string'){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}else{for(e in b){if(Object.hasOwnProperty.call(b,e)){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}d=g.length===0?'{}':h?'{\n'+h+g.join(',\n'+h)+'\n'+k+'}':'{'+g.join(',')+'}';h=k;return d}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(c,f,a){var e;h='';m='';if(typeof a==='number'){for(e=0;e<a;e+=1){m+=' '}}else if(typeof a==='string'){m=a}j=f;if(f&&typeof f!=='function'&&(typeof f!=='object'||typeof f.length!=='number')){throw new Error('JSON.stringify');}return n('',{'':c})}}if(typeof JSON.parse!=='function'){JSON.parse=function(i,k){var g;function b(c,f){var a,e,d=c[f];if(d&&typeof d==='object'){for(a in d){if(Object.hasOwnProperty.call(d,a)){e=b(d,a);if(e!==undefined){d[a]=e}else{delete d[a]}}}}return k.call(c,f,d)}o.lastIndex=0;if(o.test(i)){i=i.replace(o,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(i.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){g=eval('('+i+')');return typeof k==='function'?b({'':g},''):g}throw new SyntaxError('JSON.parse');}}}());
3
-
4
-// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License
5
-(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
6
-
7
-function getTwitterFeed(success, user, count, replies) {
8
-  feed = new jXHR();
9
-  feed.onerror = function (msg,url) { alert(msg); }
10
-  feed.onreadystatechange = function(data){
11
-    if (feed.readyState === 4) {
12
-      var tweets = new Array();
13
-      for (i in data){
14
-        if(tweets.length < count){
15
-          if(replies || data[i].in_reply_to_user_id == null){
16
-            tweets.push(data[i]);
17
-          }
18
-        }
19
-      }
20
-      success(tweets);
21
-    }
22
-  };
23
-  feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+parseInt(count)+25+"&callback=?");
24
-  feed.send();
25
-}
26
-
27
-getTwitterFeed(showTwitterFeed, twitter_user, tweet_count, show_replies);
28
-
29
-function showTwitterFeed(tweets){
30
-  var timeline = document.getElementById('tweets');
31
-  timeline.innerHTML='';
32
-  for (t in tweets){
33
-    timeline.innerHTML+='<li>'+'<p>'+linkifyTweet(tweets[t].text)+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a></p>'+'</li>';
34
-  }
35
-}
36
-function linkifyTweet(text){
37
-  return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
38
-    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
39
-    .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
40
-}
41
-
42
-function prettyDate(date_str){
43
-  var time_formats = [
44
-    [60, 'just now', 1], // 60
45
-    [120, '1 min', '1 minute from now'], // 60*2
46
-    [3600, 'mins', 60], // 60*60, 60
47
-    [7200, '1 hour', '1 hour from now'], // 60*60*2
48
-    [86400, 'hours', 3600], // 60*60*24, 60*60
49
-    [172800, '1 day', 'tomorrow'], // 60*60*24*2
50
-    [2903040000, 'days', 86400], // 60*60*24*7, 60*60*24
51
-  ];
52
-  var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
53
-  if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4);
54
-  var seconds = (new Date - new Date(time)) / 1000;
55
-  var token = 'ago', list_choice = 1;
56
-  if (seconds < 0) {
57
-    seconds = Math.abs(seconds);
58
-    token = 'from now';
59
-    list_choice = 2;
60
-  }
61
-  var i = 0, format;
62
-  while (format = time_formats[i++])
63
-    if (seconds < format[0]) {
64
-      if (typeof format[2] == 'string')
65
-        return format[list_choice];
66
-      else
67
-        return Math.floor(seconds / format[2]) + ' ' + format[1];
68
-    }
69
-    return time;
70
-};
71 1
deleted file mode 100644
... ...
@@ -1,35 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
-  <url>
4
-      <loc>http://yoursite.com/about.haml</loc>
5
-      <lastmod>2011-05-14</lastmod>
6
-  </url>
7
-  <url>
8
-      <loc>http://yoursite.com/atom.xml</loc>
9
-      <lastmod>2011-05-12</lastmod>
10
-  </url>
11
-  <url>
12
-      <loc>http://yoursite.com/</loc>
13
-      <lastmod>2011-05-12</lastmod>
14
-  </url>
15
-  <url>
16
-      <loc>http://yoursite.com/test/syntax.html</loc>
17
-      <lastmod>2010-04-10</lastmod>
18
-  </url>
19
-  <url>
20
-      <loc>http://yoursite.com/test/typography.haml</loc>
21
-      <lastmod>2011-05-14</lastmod>
22
-  </url>
23
-  <url>
24
-      <loc>http://yoursite.com/2011/04/07/test-of-typography</loc>
25
-      <lastmod>2011-04-07</lastmod>
26
-  </url>
27
-  <url>
28
-      <loc>http://yoursite.com/2011/03/14/test-post</loc>
29
-      <lastmod>2011-03-14</lastmod>
30
-  </url>
31
-  <url>
32
-      <loc>http://yoursite.com/2009/11/13/hello-world</loc>
33
-      <lastmod>2009-11-13</lastmod>
34
-  </url>
35
-</urlset>
36 1
\ No newline at end of file
37 2
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-@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}
... ...
@@ -1,8 +1,5 @@
1 1
 //@import "partials/shared";
2
-//@import "partials/syntax";
3 2
 //@import "partials/search";
4
-//@import "partials/sidebar";
5
-//@import "partials/twitter";
6 3
 
7 4
 /* layout partials */
8 5
 @import "partials/header";
... ...
@@ -11,3 +8,5 @@
11 11
 @import "partials/sidebar";
12 12
 @import "partials/blog";
13 13
 @import "partials/footer";
14
+
15
+@import "partials/syntax";
... ...
@@ -67,7 +67,7 @@ body {
67 67
       float: left;
68 68
       width: $sidebar-width - $sidebar-pad*2;
69 69
       margin: 0 -100% 0 0;
70
-      padding: $sidebar-pad;
70
+      padding: 0 $sidebar-pad $sidebar-pad;
71 71
     }
72 72
   }
73 73
 }
... ...
@@ -1,45 +1,44 @@
1 1
 // Link Colors
2
-$link_color: lighten(#165b94, 0.3);
2
+$link-color: lighten(#165b94, 3);
3
+$link-color-hover: darken(#165b94, 5);
3 4
 
4 5
 // Main Section Colors
5
-$body_color: #333333;
6
-$light_text: #999999;
7
-$body_bg: #323232;
6
+$body-color: #333333;
7
+$light-text: #999999;
8
+$body-bg: #323232;
8 9
 
9
-$header_bg: #323232;
10
-$header_border: #181818;
11
-$title_color: #dddddd;
10
+$header-bg: #323232;
11
+$header-border: #181818;
12
+$title-color: #dddddd;
12 13
 
13
-$nav_color: #555555;
14
-$nav_color_hover: black;
15
-$nav_bg: #e8e8e8;
16
-$nav_border_top: white;
17
-$nav_border_bottom: #aaaaaa;
18
-$nav_border_left: #cccccc;
19
-$nav_border_right: white;
14
+$nav-color: #555555;
15
+$nav-color_hover: black;
16
+$nav-bg: #e8e8e8;
17
+$nav-border_top: white;
18
+$nav-border_bottom: #aaaaaa;
19
+$nav-border_left: #cccccc;
20
+$nav-border_right: white;
20 21
 
21
-$sidebar_bg: #f2f2f2;
22
-$sidebar_border: #d5d5d5;
22
+$sidebar-bg: #f2f2f2;
23
+$sidebar-border: #d5d5d5;
23 24
 
24 25
 // Blog
25
-$article_border: #eeeeee;
26
-$main_bg: #fff;
26
+$article-border: #eeeeee;
27
+$main-bg: #fff;
27 28
 
28
-$footer_color: #999999;
29
-$footer_bg: #444444;
29
+$footer-color: #999999;
30
+$footer-bg: #444444;
30 31
 
31 32
 // Form Colors
32
-$fieldset_bg: #ececec;
33
-$fieldset_border: #c3c3c3;
34
-
35
-$textinput_color: #333333;
36
-$textinput_bg: #f4f4f4;
37
-$textinput_bg_focus: #fefeee;
38
-
39
-$textinput_border_top: #aaaaaa;
40
-$textinput_border_bottom: #c6c6c6;
41
-$textinput_border_left: #c3c3c3;
42
-$textinput_border_right: #c3c3c3;
43
-$textinput_border_focus: #989898;
44
-
45
-$twitter_topic: #888888;
33
+$fieldset-bg: #ececec;
34
+$fieldset-border: #c3c3c3;
35
+
36
+$textinput-color: #333333;
37
+$textinput-bg: #f4f4f4;
38
+$textinput-bg-focus: #fefeee;
39
+
40
+$textinput-border-top: #aaaaaa;
41
+$textinput-border-bottom: #c6c6c6;
42
+$textinput-border-left: #c3c3c3;
43
+$textinput-border-right: #c3c3c3;
44
+$textinput-border-focus: #989898;
... ...
@@ -2,16 +2,17 @@ $type-border: #ddd;
2 2
 $type-color-light: #555;
3 3
 $type-color: #000;
4 4
 $blockquote: $type-border !default; //darken($type-border, 20) !default;
5
-
5
+$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace;
6 6
 
7 7
 // Fonts
8 8
 @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" );
9
-.heading-font { font-family: Adelle, "Helvetica Neue", Helvetica, Arial, sans; }
10
-.sans-font { font-family: "Helvetica Neue", Helvetica, Arial, sans; }
9
+.heading { font-family: Adelle, "Helvetica Neue", Arial, sans-serif; }
10
+.sans { font-family: "Helvetica Neue", Arial, sans-serif; }
11
+.mono { font-family: $mono; }
11 12
 
12 13
 body > header h1 {
13 14
   font-size: 3em;
14
-  @extend .heading-font;
15
+  @extend .heading;
15 16
   line-height: 1.2em;
16 17
   margin-bottom: 0.6667em;
17 18
 }
... ...
@@ -54,7 +55,7 @@ article {
54 54
 }
55 55
 
56 56
 #{headings()}{
57
-  @extend .heading-font; font-weight: normal;
57
+  @extend .heading; font-weight: normal;
58 58
   line-height: 1em;
59 59
   text-rendering: optimizelegibility;
60 60
 }
61 61
new file mode 100644
... ...
@@ -0,0 +1,15 @@
0
+#pinboard_linkroll {
1
+  .pin-title, .pin-description {
2
+    display: block;
3
+    margin-bottom: .5em;
4
+  }
5
+  .pin-tag {
6
+    @extend .aside-alt-link;
7
+    &:after {
8
+      content: ',';
9
+    }
10
+    &:last-child:after {
11
+      content: '';
12
+    }
13
+  }
14
+}
0 15
deleted file mode 100644
... ...
@@ -1,12 +0,0 @@
1
-#collapser {
2
-  display: block;
3
-  cursor: pointer;
4
-  background: #f8f8f8;
5
-  color: #888888;
6
-  padding: 5px 10px;
7
-  font-size: 10px;
8
-  line-height: 150%;
9
-  cursor: pointer;
10
-  position: absolute;
11
-  top: 0;
12
-  right: 0; }
... ...
@@ -1,9 +1,21 @@
1
+.side-shadow-border {
2
+  @include box-shadow(#fff 0 1px);
3
+}
1 4
 #articles + aside {
2 5
   section {
3
-    @extend .sans-font;
6
+    @extend .sans;
4 7
     font-size: .8em;
5 8
     line-height: 1.5em;
6 9
     margin-bottom: 1.5em;
10
+    h1 {
11
+      margin: 1.5em 0 0;
12
+      padding-bottom: .2em;
13
+      border-bottom: 1px solid #ddd;
14
+      @extend .side-shadow-border;
15
+      + p {
16
+        padding-top: .4em;
17
+      }
18
+    }
7 19
   }
8 20
   ul {
9 21
     margin-bottom: 0.5em;
... ...
@@ -13,8 +25,30 @@
13 13
     padding: .5em 0;
14 14
     margin: 0;
15 15
     border-bottom: 1px solid #ddd;
16
+    @extend .side-shadow-border;
16 17
     p:last-child {
17 18
       margin-bottom: 0;
18 19
     }
19 20
   }
21
+  a {
22
+    color: inherit;
23
+    @include transition(color, .5s);
24
+  }
25
+  &:hover a, &:hover #tweets a { color: $link-color; }
26
+  @import "twitter";
27
+  @import "pinboard";
28
+  #recent_posts {
29
+    time {
30
+      text-transform: uppercase;
31
+      font-size: .9em;
32
+      color: #666;
33
+    }
34
+  }
35
+}
36
+.aside-alt-link {
37
+  color: #999;
38
+  text-decoration: none;
39
+  &:hover {
40
+    color: #555;
41
+  }
20 42
 }
... ...
@@ -1,279 +1,167 @@
1
-.code_window {
2
-  @include border-top-radius(5px);
3
-  @include border-bottom-radius(2px);
4
-  background: #aaaaaa image-url("code_bg.png") top repeat-x;
5
-  position: relative;
6
-  margin: 0.3em 0 1.3em;
7
-  padding: 0 3px 3px;
8
-  font-size: 14px;
9
-  border: 1px solid #898989;
10
-  border-top-color: #cbcbcb;
11
-  border-left-color: #a5a5a5;
12
-  border-right-color: #a5a5a5;
13
-  em {
14
-    text-align: center;
15
-    text-shadow: #cccccc 1px 1px 1px;
16
-    display: block;
17
-    padding: 1px 0;
18
-    color: #333333;
19
-    font-style: normal; }
20
-  .highlight {
21
-    margin: 0; } }
1
+$base03:    #002b36; //darkest blue
2
+$base02:    #073642; //dark blue
3
+$base01:    #586e75; //darkest gray
4
+$base00:    #657b83; //dark gray
5
+$base0:     #839496; //medium gray
6
+$base1:     #93a1a1; //medium light gray
7
+$base2:     #eee8d5; //cream
8
+$base3:     #fdf6e3; //white
9
+$yellow:    #b58900;
10
+$orange:    #cb4b16;
11
+$red:       #dc322f;
12
+$magenta:   #d33682;
13
+$violet:    #6c71c4;
14
+$blue:      #268bd2;
15
+$cyan:      #2aa198;
16
+$green:     #859900;
22 17
 
23
-pre {
24
-  color: #cccccc;
25
-  font-size: 13px;
26
-  background: #222222;
27
-  line-height: 1.5em;
28
-  border: #aaaaaa 1px solid;
29
-  overflow-x: auto;
30
-  overflow-y: hidden;
31
-  padding: 25px 20px;
32
-  .lineno {
33
-    color: #888888;
34
-    background: #e3e3e3;
35
-    display: inline-block;
36
-    padding: 0 0 0 10px;
37
-    &:first-child {
38
-      padding-top: 15px;
39
-      display: inline-block; } } }
18
+// If you prefer light colors, uncomment the following block to change themes
19
+//$base03: $base3;
20
+//$base02: $base2;
21
+//$base01: $base1;
22
+//$base00: $base0;
23
+//$base0: $base00;
24
+//$base1: $base01;
25
+//$base2: $base02;
26
+//$base3: $base03;
40 27
 
41
-.highlight {
42
-  position: relative;
43
-  .pre_expander {
44
-    font-size: 10px;
28
+.gutter {
29
+  .line-numbers {
45 30
     text-align: right;
46
-    padding: 4px 8px;
47
-    line-height: 150%;
48
-    position: absolute;
49
-    cursor: pointer;
50
-    top: 2px;
51
-    right: 2px;
52
-    @include border-bottom-left-radius;
53
-    display: block;
54
-    color: #777777;
55
-    background: #333333;
56
-    &:hover {
57
-      background: #444444;
58
-      color: #cccccc; } } }
31
+    background: $base02 !important;
32
+    border-right: 1px solid darken($base03, 2);
33
+    @include box-shadow(lighten($base02, 2) -1px 0 inset);
34
+    text-shadow: darken($base02, 10) 0 -1px;
35
+    span { color: $base01 !important; }
36
+  }
37
+}
38
+html .gist .gist-file {
39
+  margin-bottom: 1.5em;
40
+  border: none;
41
+  .gist-syntax {
42
+    border-bottom: 1px solid #515151 !important;
43
+    .gist-highlight{
44
+      background: $base03 !important;
45
+      pre {
46
+        @extend .pre;
47
+        overflow-y: hidden;
48
+        overflow-x: auto;
49
+      }
50
+    }
51
+  }
52
+  .gist-meta {
53
+    @include background(linear-gradient(#b0b0b0, #a7a7a7));
54
+    padding: 0.5em;
55
+    background-color: #bababa !important;
56
+    border: 1px solid #9c9c9c;
57
+    border-top: 1px solid #d0d0d0;
58
+    border-bottom: 1px solid #777777;
59
+    font-size: .7em !important;
60
+    font-family: "Helvetica Neue", Arial, sans-serif !important;
61
+    color: #464646 !important;
62
+    line-height: 1.4em;
63
+  }
64
+}
65
+pre { @extend .pre; }
59 66
 
60
-// based on: http://github.com/mojombo/tpw/raw/master/css/syntax.css
61
-.editor {
62
-  background: rgb(0, 22, 41);
63
-  line-height: 1.25; }
67
+.pre {
68
+  @extend .mono;
69
+  font-size: .8em;
70
+  line-height: 1.45em;
71
+  padding: 1em 1.2em !important;
72
+  background: $base03 !important;
73
+  color: $base1 !important;
74
+  span { color: $base1 !important; }
75
+  span { font-style: normal !important; font-weight: normal !important; }
64 76
 
65
-pre.console {
66
-  background-color: black;
67
-  color: lighten(green, 25);
68
-  letter-spacing: 1px;
69
-  padding: 0.5em;
70
-  .prompt {
71
-    color: lighten(navy, 50);
72
-    &:before {
73
-      color: white;
74
-      content: "["; }
75
-    &:after {
76
-      color: white;
77
-      content: "]"; } }
78
-  .stdin {
79
-    font-weight: bold;
80
-    color: lighten(green, 75); } }
77
+  .c      { color: $base01 !important; font-style: italic !important; }                     /* Comment */
78
+  .cm     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Multiline */
79
+  .cp     { color: $base01 !important; font-style: italic !important;  }                     /* Comment.Preproc */
80
+  .c1     { color: $base01 !important; font-style: italic !important; }                     /* Comment.Single */
81
+  .cs     { color: $base01 !important; font-weight: bold !important; font-style: italic !important; }   /* Comment.Special */
82
+  .err    { color: $red !important; background: none !important; }                                            /* Error */
83
+  .k      { color: $orange !important; }                       /* Keyword */
84
+  .o      { color: $base1 !important; font-weight: bold !important; }                       /* Operator */
85
+  .p      { color: $base1 !important; }                                             /* Operator */
86
+  .ow     { color: $cyan !important; font-weight: bold !important; }                       /* Operator.Word */
87
+  .gd     { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: block; }               /* Generic.Deleted */
88
+  .gd .x  { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: block; }               /* Generic.Deleted.Specific */
89
+  .ge     { color: $base1 !important; font-style: italic !important; }                      /* Generic.Emph */
90
+  //.gr     { color: #aa0000 }                                          /* Generic.Error */
91
+  .gh     { color: $base01 !important; }                                          /* Generic.Heading */
92
+  .gi     { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: block; }               /* Generic.Inserted */
93
+  .gi .x  { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: block; }               /* Generic.Inserted.Specific */
94
+  //.go     { color: #888888 }                                          /* Generic.Output */
95
+  //.gp     { color: #555555 }                                          /* Generic.Prompt */
96
+  .gs     { color: $base1 !important; font-weight: bold !important; }                                       /* Generic.Strong */
97
+  .gu     { color: $violet !important; }                                          /* Generic.Subheading */
98
+  //.gt     { color: #aa0000 }                                          /* Generic.Traceback */
99
+  .kc     { color: $green !important; font-weight: bold !important; }                       /* Keyword.Constant */
100
+  .kd     { color: $blue !important; }                       /* Keyword.Declaration */
101
+  .kp     { color: $orange !important; font-weight: bold !important; }                       /* Keyword.Pseudo */
102
+  .kr     { color: $magenta !important; font-weight: bold !important; }                       /* Keyword.Reserved */
103
+  .kt     { color: $cyan !important; }                       /* Keyword.Type */
104
+  .n      { color: $blue !important; }
105
+  .na     { color: $blue !important; }                                          /* Name.Attribute */
106
+  .nb     { color: $green !important; }                                          /* Name.Builtin */
107
+  //.nc     { color: #445588; font-weight: bold }                       /* Name.Class */
108
+  .no     { color: $yellow !important; }                                          /* Name.Constant */
109
+  //.ni     { color: #800080 }                                          /* Name.Entity */
110
+  .ne     { color: $blue !important; font-weight: bold !important; }                       /* Name.Exception */
111
+  .nf     { color: $blue !important; font-weight: bold !important; }                       /* Name.Function */
112
+  .nn     { color: $yellow !important; }                                          /* Name.Namespace */
113
+  .nt     { color: $blue !important; font-weight: bold !important; }                                          /* Name.Tag */
114
+  .nx     { color: $yellow !Important; }
115
+  //.bp     { color: #999999 }                                          /* Name.Builtin.Pseudo */
116
+  //.vc     { color: #008080 }                                          /* Name.Variable.Class */
117
+  .vg     { color: $blue !important; }                                          /* Name.Variable.Global */
118
+  .vi     { color: $blue !important; }                                          /* Name.Variable.Instance */
119
+  .nv     { color: $blue !important; }                                          /* Name.Variable */
120
+  //.w      { color: #bbbbbb }                                          /* Text.Whitespace */
121
+  .mf     { color: $cyan !important; }                                          /* Literal.Number.Float */
122
+  .m      { color: $cyan !important; }                                          /* Literal.Number */
123
+  .mh     { color: $cyan !important; }                                          /* Literal.Number.Hex */
124
+  .mi     { color: $cyan !important; }                                          /* Literal.Number.Integer */
125
+  //.mo     { color: #009999 }                                          /* Literal.Number.Oct */
126
+  .s      { color: $cyan !important; }                                             /* Literal.String */
127
+  //.sb     { color: #d14 }                                             /* Literal.String.Backtick */
128
+  //.sc     { color: #d14 }                                             /* Literal.String.Char */
129
+  .sd     { color: $cyan !important; }                                             /* Literal.String.Doc */
130
+  .s2     { color: $cyan !important; }                                             /* Literal.String.Double */
131
+  .se     { color: $red !important; }                                             /* Literal.String.Escape */
132
+  //.sh     { color: #d14 }                                             /* Literal.String.Heredoc */
133
+  .si     { color: $blue !important; }                                             /* Literal.String.Interpol */
134
+  //.sx     { color: #d14 }                                             /* Literal.String.Other */
135
+  .sr     { color: $cyan !important; }                                          /* Literal.String.Regex */
136
+  .s1     { color: $cyan !important; }                                             /* Literal.String.Single */
137
+  //.ss     { color: #990073 }                                          /* Literal.String.Symbol */
138
+  //.il     { color: #009999 }                                          /* Literal.Number.Integer.Long */
139
+}
81 140
 
82 141
 .highlight {
83
-  padding: 0 0 0.1em;
84
-  color: white;
85
-  // Comment
86
-  .c {
87
-    color: #999988;
88
-    font-style: italic; }
89
-  // Error
90
-  .err {
91
-    color: #a61717;
92
-    background-color: #e3d2d2; }
93
-  // Name
94
-  .n {
95
-    color: white; }
96
-  // Keyword
97
-  .k {
98
-    color: rgb(255, 157, 0); }
99
-  // Paren
100
-  .p {
101
-    color: darken(#ff9d00, 33); }
102
-  // Operator
103
-  .o {
104
-    color: rgb(255, 157, 0); }
105
-  // Comment.Multiline
106
-  .cm {
107
-    color: #999988;
108
-    font-style: italic; }
109
-  // Comment.Preproc
110
-  .cp {
111
-    color: #999999; }
112
-  // Comment.Single
113
-  .c1 {
114
-    color: #999988;
115
-    font-style: italic; }
116
-  // Comment.Special
117
-  .cs {
118
-    color: #999999;
119
-    font-style: italic; }
120
-  // Generic.Deleted
121
-  .gd {
122
-    color: black;
123
-    background-color: #ffdddd; }
124
-  // Generic.Deleted.Specific
125
-  .gd .x {
126
-    color: black;
127
-    background-color: #ffaaaa; }
128
-  // Generic.Emph
129
-  .ge {
130
-    font-style: italic; }
131
-  // Generic.Error
132
-  .gr {
133
-    color: #aa0000; }
134
-  // Generic.Heading
135
-  .gh {
136
-    color: #999999; }
137
-  // Generic.Inserted
138
-  .gi {
139
-    color: black;
140
-    background-color: #ddffdd; }
141
-  // Generic.Inserted.Specific
142
-  .gi .x {
143
-    color: black;
144
-    background-color: #aaffaa; }
145
-  // Generic.Output
146
-  .go {
147
-    color: #888888; }
148
-  // Generic.Prompt
149
-  .gp {
150
-    color: #555555; }
151
-  // Generic.Strong
152
-  .gs {
153
-    color: white; }
154
-  // Generic.Subheading
155
-  .gu {
156
-    color: #aaaaaa; }
157
-  // Generic.Traceback
158
-  .gt {
159
-    color: #aa0000; }
160
-  // Keyword.Constant
161
-  .kc {
162
-    color: white; }
163
-  // Keyword.Declaration
164
-  .kd {
165
-    color: white; }
166
-  // Keyword.Pseudo
167
-  .kp {
168
-    color: white; }
169
-  // Keyword.Reserved
170
-  .kr {
171
-    color: white; }
172
-  // Keyword.Type
173
-  .kt {
174
-    color: #445588; }
175
-  // Literal.Number
176
-  .m {
177
-    color: rgb(255, 98, 140); }
178
-  // Literal.String
179
-  .s {
180
-    color: #dd1144; }
181
-  // Name.Attribute
182
-  .na {
183
-    color: teal; }
184
-  // Name.Builtin
185
-  .nb {
186
-    color: darken(rgb(128, 255, 187), 20); }
187
-  // Name.Class
188
-  .nc {
189
-    color: darken(rgb(128, 255, 187), 20); }
190
-  // Name.Constant
191
-  .no {
192
-    color: rgb(128, 255, 187); }
193
-  // Name.Entity
194
-  .ni {
195
-    color: purple; }
196
-  // Name.Exception
197
-  .ne {
198
-    color: rgb(255, 221, 0); }
199
-  // Name.Function
200
-  .nf {
201
-    color: rgb(255, 221, 0); }
202
-  // Name.Namespace
203
-  .nn {
204
-    color: #555555; }
205
-  // Name.Tag
206
-  .nt {
207
-    color: white; }
208
-  // Name.Variable
209
-  .nv {
210
-    color: teal; }
211
-  // Operator.Word
212
-  .ow {
213
-    color: white; }
214
-  // Text.Whitespace
215
-  .w {
216
-    color: #bbbbbb; }
217
-  // Literal.Number
218
-  .nl {
219
-    color: rgb(255, 98, 140); }
220
-  // Literal.Number.Float
221
-  .mf {
222
-    color: rgb(255, 98, 140); }
223
-  // Literal.Number.Hex
224
-  .mh {
225
-    color: rgb(255, 98, 140); }
226
-  // Literal.Number.Integer
227
-  .mi {
228
-    color: rgb(255, 98, 140); }
229
-  // Literal.Number.Oct
230
-  .mo {
231
-    color: rgb(255, 98, 140); }
232
-  // Literal.String.Backtick
233
-  .sb {
234
-    color: rgb(58, 217, 0); }
235
-  // Literal.String.Char
236
-  .sc {
237
-    color: rgb(58, 217, 0); }
238
-  // Literal.String.Doc
239
-  .sd {
240
-    color: rgb(58, 217, 0); }
241
-  // Literal.String.Double
242
-  .s2 {
243
-    color: rgb(58, 217, 0); }
244
-  // Literal.String.Escape
245
-  .se {
246
-    color: rgb(58, 217, 0); }
247
-  // Literal.String.Heredoc
248
-  .sh {
249
-    color: rgb(58, 217, 0); }
250
-  // Literal.String.Interpol
251
-  .si {
252
-    color: rgb(158, 255, 128); }
253
-  // Literal.String.Other
254
-  .sx {
255
-    color: rgb(58, 217, 0); }
256
-  // Literal.String.Regex
257
-  .sr {
258
-    color: #009926; }
259
-  // Literal.String.Single
260
-  .s1 {
261
-    color: rgb(58, 217, 0); }
262
-  // Literal.String.Symbol
263
-  .ss {
264
-    color: rgb(255, 98, 140); }
265
-  // Name.Builtin.Pseudo
266
-  .bp {
267
-    color: #999999; }
268
-  // Name.Variable.Class
269
-  .vc {
270
-    color: teal; }
271
-  // Name.Variable.Global
272
-  .vg {
273
-    color: teal; }
274
-  // Name.Variable.Instance
275
-  .vi {
276
-    color: teal; }
277
-  // Literal.Number.Integer.Long
278
-  .il {
279
-    color: rgb(255, 98, 140); } }
142
+  margin-bottom: 1.5em;
143
+  overflow-y: hidden;
144
+  .gutter pre {
145
+    padding-left: .8em !important;
146
+    padding-right: .8em !important;
147
+  }
148
+}
149
+
150
+h3.filename {
151
+  font-size: 13px;
152
+  line-height: 2em;
153
+  text-align: center;
154
+  text-shadow: #cbcccc 0 1px 0;
155
+  color: #474747;
156
+  font-style: normal;
157
+  margin-bottom: 0;
158
+
159
+  @include border-top-radius(5px);
160
+  font-family: "Helvetica Neue",Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;
161
+  background: #aaaaaa image-url("code_bg.png") top repeat-x;
162
+  border: 1px solid #565656;
163
+  border-top-color: #cbcbcb;
164
+  border-left-color: #a5a5a5;
165
+  border-right-color: #a5a5a5;
166
+  border-bottom: 0;
167
+}
... ...
@@ -1,15 +1,49 @@
1
-#twitter {
1
+#tweets {
2
+  a {
3
+    color: #666;
4
+    text-decoration: none;
5
+    &:hover { text-decoration: underline; }
6
+  }
7
+  li:hover a[href*='status']{
8
+    color: #666;
9
+  }
2 10
   p {
3
-    padding-bottom: 10px;
4
-    a.topic {
5
-      color: $twitter_topic; } }
6
-  .meta {
7
-    color: $light_text;
8
-    font-size: 80%;
9
-    display: block;
10
-    padding: 8px 0 0;
11
-    a {
12
-      color: inherit;
11
+    position: relative;
12
+    padding-right: 1.4em;
13
+  }
14
+  a[href*='status']{
15
+    color: #ccc;
16
+    position: absolute;
17
+    top: 0;
18
+    right: -.5em;
19
+    text-decoration: none;
20
+    padding: 0 .5em .1em;
21
+    text-shadow: #fff 0 1px;
22
+    span:last-child {
23
+      display: none;
24
+      font-size: .7em;
25
+    }
26
+    span:first-child {
27
+      font-size: 1.1em;
28
+    }
29
+    &:hover {
30
+      span:first-child{ display: none; }
31
+      span:last-child{ display: inline-block; }
32
+      background: #e5e5e5;
33
+      @include box-shadow($sidebar-bg -2px 2px 8px 8px);
34
+      @include border-radius(1em);
13 35
       text-decoration: none;
14
-      &:hover {
15
-        text-decoration: underline; } } } }
36
+      line-height: 1.2em;
37
+      span:last-child {
38
+        color: #444;
39
+        //text-shadow: #eee 0 1px;
40
+      }
41
+    }
42
+  }
43
+  a[href*='twitter.com/search']{
44
+    @extend .aside-alt-link;
45
+    &:hover {
46
+      text-decoration: underline;
47
+    }
48
+  }
49
+}
... ...
@@ -1,18 +1,27 @@
1 1
 <header>
2
-  <h1><a href="{{ page.url }}">{{ page.title }}</a></h1>
3
-  <p>
4
-    {% if site.author or site.author == page.author %}
5
-      <span class="byline author vcard">By <span class="fn">{{ site.author }}</span></span>
6
-    {% elsif page.author %}
7
-      <span class="byline author vcard">By <span class="fn">{{ page.author }}</span></span>
2
+  {% if index %}
3
+    <h1><a href="{{ page.url }}">{{ page.title }}</a></h1>
4
+  {% else %}
5
+    <h1>{{ page.title }}</h1>
6
+  {% endif %}
7
+  {% unless page.nometa %}
8
+    {% if page.author %}
9
+      {% assign author = page.author %}
10
+    {% else %}
11
+      {% assign author = site.author %}
8 12
     {% endif %}
9
-    {% if page.date %}
10
-      <time datetime="{{ page.date | datetime }}" pubdate>{{ page.date | ordinalize }}</time>
11
-    {% endif %}
12
-    {% if page.updated %}
13
-      <time class="updated" datetime="{{ page.updated | datetime }}" pubdate>Updated {{ page.updated | ordinalize }}</time>
14
-    {% endif %}
15
-  </p>
13
+    <p>
14
+      {% if author %}
15
+        <span class="byline author vcard">By <span class="fn">{{ author }}</span></span>
16
+      {% endif %}
17
+      {% if page.date %}
18
+        <time datetime="{{ page.date | datetime }}" pubdate>{{ page.date | ordinalize }}</time>
19
+      {% endif %}
20
+      {% if page.updated %}
21
+        <time class="updated" datetime="{{ page.updated | datetime }}" pubdate>Updated {{ page.updated | ordinalize }}</time>
22
+      {% endif %}
23
+    </p>
24
+  {% endunless %}
16 25
 </header>
17 26
 {% if index %}
18 27
 <div class="entry">{{ content | exerpt(content, page.url, 'Continue reading &raquo;') | smart_quotes }}</div>
... ...
@@ -3,9 +3,9 @@
3 3
   <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
4 4
 </p>
5 5
 {% if site.pinboard_user %}
6
+  <script language="javascript" src="/javascripts/pinboard.js"></script>
6 7
   <script language="javascript">
7
-    var pinboard_user = "{{ site.pinboard_user }}";
8
-    var pinboard_count = "{{ site.pinboard_count }}";
8
+    var linkroll = 'pinboard_linkroll'; //id target for pinboard list
9
+    pinboardNS_fetch_script("http://feeds.pinboard.in/json/v1/u:{{ site.pinboard_user }}/?cb=pinboardNS_show_bmarks\&count={{ site.pinboard_count }}");
9 10
   </script>
10
-  <script language="javascript" src="/javascripts/pinboard.js"></script>
11 11
 {% endif %}
... ...
@@ -1,7 +1,16 @@
1
+<!DOCTYPE html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
1 7
 <head>
2 8
   <meta charset="utf-8">
3
-
4
-  <title>{{page.title}} - {{site.title}}</title>
9
+  {% if page.title %}
10
+    <title>{{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
11
+  {% else %}
12
+    <title>{{site.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
13
+  {% endif %}
5 14
   <meta name="author" content="{{site.author}}">
6 15
   {% if page.description %}
7 16
     <meta name="description" content="{{page.description}}"/>
... ...
@@ -10,7 +19,7 @@
10 10
   <!-- http://t.co/dKP3o1e -->
11 11
   <meta name="HandheldFriendly" content="True">
12 12
   <meta name="MobileOptimized" content="320">
13
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
13
+  <meta name="viewport" content="width=device-width, initial-scale=1">
14 14
 
15 15
   {% if page.keywords %}
16 16
     <meta name="keywords" content="{{page.keywords}}"/>
... ...
@@ -18,8 +27,12 @@
18 18
 
19 19
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
20 20
   <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
21
-  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
22
-  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
21
+  <script src="/javascripts/libs/modernizr-1.7.js"></script>
22
+  <script src="/javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
23
+  <script src="/javascripts/libs/json2.js"></script>
24
+  <script src="/javascripts/libs/jXHR.js"></script>
25
+  <script src="/javascripts/libs/ender.js"></script>
26
+  <script src="/javascripts/syntax-helper.js"></script>
23 27
   {% if site.google_analytics_tracking_id %}
24 28
     {% include google_analytics.html %}
25 29
   {% endif %}
... ...
@@ -2,14 +2,13 @@
2 2
   <h1>About Me</h1>
3 3
   <p>Hi, I'm Octopress!</p>
4 4
 </section>
5
-{% if site.recent_posts %}
5
+{% if page.single and site.recent_posts %}
6 6
 <section>
7 7
   <h1>Recent Posts</h1>
8 8
   <ul id="recent_posts">
9 9
     {% for post in site.posts limit: site.recent_posts %}
10 10
       <li class="post">
11 11
         <a href="{{ post.url }}">{{ post.title }}</a>
12
-        <time>{{ post.date | date: "%B %d, %Y" }}</time>
13 12
       </li>
14 13
     {% endfor %}
15 14
   </ul>
... ...
@@ -24,3 +23,4 @@
24 24
 {% if site.pinboard_user %}
25 25
   <section>{% include pinboard.html %}</section>
26 26
 {% endif %}
27
+
27 28
new file mode 100644
... ...
@@ -0,0 +1,19 @@
0
+---
1
+layout: default
2
+---
3
+<div id="content">
4
+  <div class="post">
5
+    <h1 class="post-title">{{ page.month | date_to_month }} {{ page.year }}</h1>
6
+    <p class="lead">Posts from {{ page.month | date_to_month }}, {{ page.year }}</p>
7
+    <ul>
8
+      {% for d in (1..31) reversed %}
9
+      {% if page.collated_posts[page.year][page.month][d] %}
10
+      {% for p in page.collated_posts[page.year][page.month][d] reversed %}
11
+      <li><a href='{{ p.url }}'>{{ p.title }}</a></li>
12
+      {% endfor %}
13
+      {% endif %}
14
+      {% endfor %}
15
+    </ul>
16
+  </div>
17
+</div>
18
+
0 19
new file mode 100644
... ...
@@ -0,0 +1,25 @@
0
+---
1
+layout: default
2
+---
3
+<div id="content">
4
+	<div class="post">
5
+		<h1 class="post-title">{{ page.year }}</h1>
6
+		<p class="lead">Posts from the year {{ page.year }}</p>
7
+		{% for m in (1..12) reversed %}
8
+			{% if page.collated_posts[page.year][m] %}
9
+				<h3>{{ m | date_to_month }}</h3>
10
+				{% for d in (1..31) reversed %}
11
+					{% if page.collated_posts[page.year][m][d] %}
12
+						{% for p in page.collated_posts[page.year][m][d] reversed %}
13
+							<div>
14
+								<strong>{{ p.date | date: "%d" }}</strong>
15
+								<a href='{{ p.url }}'>{{ p.title }}</a>
16
+							</div>
17
+						{% endfor %}
18
+					{% endif %}
19
+				{% endfor %}
20
+			{% endif %}
21
+		{% endfor %}
22
+	</div>
23
+</div>
24
+
... ...
@@ -1,9 +1,6 @@
1
-<!DOCTYPE html>
2
-<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
-<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
-<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
-<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
-<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
1
+---
2
+permalink: /blog/:year/:month/:day/:title
3
+---
7 4
 {% include head.html %}
8 5
 <body {% if page.body_id %} id="{{ page.body_id }}" {% endif %} {% if page.no_sidebar %} class="no-sidebar" {% endif %}>
9 6
   <header><div>{% include header.html %}</div></header>
... ...
@@ -18,9 +15,9 @@
18 18
   </div>
19 19
   <footer><div>{% include footer.html %}</div></footer>
20 20
   <!--[if (lt IE 9) & (!IEMobile)]>
21
-  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
22
-  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
23
-  <script src="javascripts/libs/respond.min.js"></script>
21
+  <script src="javascripts/libs/ie/DOMAssistantCompressed-2.8.js"></script>
22
+  <script src="javascripts/libs/ie/selectivizr-1.0.1.js"></script>
23
+  <script src="javascripts/libs/ie/respond.min.js"></script>
24 24
   <![endif]-->
25 25
 </body>
26 26
 </html>
... ...
@@ -1,5 +1,8 @@
1 1
 ---
2 2
 layout: default
3
+no_title_link: true
4
+permalink: pretty
5
+single: true
3 6
 ---
4 7
 
5 8
 <article>
... ...
@@ -1,5 +1,6 @@
1 1
 ---
2 2
 layout: default
3
+single: true
3 4
 ---
4 5
 
5 6
 <article>
... ...
@@ -7,9 +7,9 @@ updated: March 10th, 2010
7 7
 **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/).
8 8
 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:
9 9
 
10
-> 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.
11
-
12
-<cite>**Jack Moffitt** [Blogging with Git Emacs and Jekyll](http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/)</cite>
10
+{% blockquote Jack Moffitt http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/ Blogging with Git Emacs and Jekyll %}
11
+  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.
12
+{% endblockquote %}
13 13
 
14 14
 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.
15 15
 
... ...
@@ -2,6 +2,7 @@
2 2
 layout: default
3 3
 title: About Me
4 4
 layout: page
5
+description: this is about me
5 6
 date: May 14 2011
6 7
 ---
7 8
 / use the :mardown filter if you want to write pages with Markdown
8 9
new file mode 100644
... ...
@@ -0,0 +1,24 @@
0
+---
1
+layout: page
2
+title: Blog Archive
3
+nometa: true
4
+---
5
+{% for post in site.posts reverse %}
6
+  {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
7
+  {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}
8
+  {% unless year == this_year %}
9
+    {% unless forloop.first %}</ul>{% endunless %}
10
+    {% assign year = this_year %}
11
+    <h2>{{ year }}</h2>
12
+    <ul class="blog_archives">
13
+  {% endunless %}
14
+  {% unless month == this_month %}
15
+    {% assign month = this_month %}
16
+    <li><h4>{{ month }}</h4></li>
17
+  {% endunless %}
18
+  <li>
19
+    <time datetime="{{ post.date | datetime }}" pubdate>{{ post.date | date: "%d"}}</time>
20
+    <a href="{{ post.url }}">{{post.title}}</a>
21
+  </li>
22
+  {% if forloop.last %}</ul>{% endif %}
23
+{% endfor %}
... ...
@@ -1,6 +1,5 @@
1 1
 ---
2 2
 layout: default
3
-title: Octopress
4 3
 ---
5 4
 {% for page in site.posts limit:3 %}
6 5
 {% assign content = page.content %}
7 6
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8
2
-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<s;t++){if(v.call(u||this[t],this[t],t,this)===false){break}}return this};r.first=function(){return b(this[0])?DOMAssistant.addMethodsToElm(this[0]):null};r.end=function(){return this.previousSet};r.indexOf=r.indexOf||function(u){for(var t=0,s=this.length;t<s;t++){if(t in this&&this[t]===u){return t}}return -1};r.map=function(w,v){var u=[];for(var t=0,s=this.length;t<s;t++){if(t in this){u[t]=w.call(v||this[t],this[t],t,this)}}return u};r.filter=function(w,v){var u=new j();u.previousSet=this;for(var t=0,s=this.length;t<s;t++){if(t in this&&w.call(v||this[t],this[t],t,this)){u.push(this[t])}}return u};r.every=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&!v.call(u||this[t],this[t],t,this)){return false}}return true};r.some=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&v.call(u||this[t],this[t],t,this)){return true}}return false}})(j.prototype);this.attach(this)},addMethods:function(r,s){if(!b(this.allMethods[r])){this.allMethods[r]=s;this.addHTMLArrayPrototype(r,s)}},addMethodsToElm:function(s){for(var r in this.allMethods){if(b(this.allMethods[r])){this.applyMethod.call(s,r,this.allMethods[r])}}return s},applyMethod:function(s,r){if(typeof this[s]!=="function"){this[s]=r}},attach:function(t){var r=t.publicMethods;if(!b(r)){for(var v in t){if(v!=="init"&&b(t[v])){this.addMethods(v,t[v])}}}else{if(r.constructor===Array){for(var s=0,u;(u=r[s]);s++){this.addMethods(u,t[u])}}}if(typeof t.init==="function"){t.init()}},addHTMLArrayPrototype:function(r,s){j.prototype[r]=function(){var v=new j();v.previousSet=this;for(var u=0,t=this.length;u<t;u++){v.push(s.apply(DOMAssistant.$$(this[u]),arguments))}return v}},cleanUp:function(u){var s=u.all||u.getElementsByTagName("*");for(var r=0,t;(t=s[r++]);){if(t.hasData&&t.hasData()){if(t.removeEvent){t.removeEvent()}t.unstore()}}u.innerHTML=""},setCache:function(r){a=r},$:function(){var u=arguments[0];if(arguments.length===1&&(typeof u==="object"||(typeof u==="function"&&!!u.nodeName))){return DOMAssistant.$$(u)}var w=!!u?new j():null;for(var s=0,r,v;(r=arguments[s]);s++){if(typeof r==="string"){r=r.replace(/^[^#\(]*(#)/,"$1");if(m.id.test(r)){if((v=DOMAssistant.$$(r.substr(1),false))){w.push(v)}}else{var t=(document.all||document.getElementsByTagName("*")).length;w=(!document.querySelectorAll&&a&&q.rule&&q.rule===r&&q.doc===t)?q.elms:e(w,DOMAssistant.cssSelection.call(document,r));q={rule:r,elms:w,doc:t}}}}return w},$$:function(x,u){var w=(typeof x==="object"||typeof x==="function"&&!!x.nodeName)?x:document.getElementById(x),v=b(u)?u:true,t=function(z){var y=z.id;return typeof y!=="object"?y:z.attributes.id.nodeValue};if(typeof x==="string"&&w&&t(w)!==x){w=null;for(var r=0,s;(s=document.all[r]);r++){if(t(s)===x){w=s;break}}}if(w&&v&&!w.next){DOMAssistant.addMethodsToElm(w)}return w},prev:function(){return DOMAssistant.$$(f(this,"previous"))},next:function(){return DOMAssistant.$$(f(this,"next"))},hasChild:function(r){return this===document||this!==r&&(this.contains?this.contains(r):!!(this.compareDocumentPosition(r)&16))},getSequence:function(v){var w,u=2,s=-1,r=-1,t=m.nth.exec(v.replace(/^0n\+/,"").replace(/^2n$/,"even").replace(/^2n+1$/,"odd"));if(!t){return null}if(t[2]){w=(t[2]==="odd")?1:2;r=(w===1)?1:0}else{if(t[3]){w=s=parseInt(t[3],10);u=0}else{if(t[4]){u=t[6]?parseInt(t[6],10):1;w=t[7]?parseInt(t[7],10):0;while(w<1){w+=u}r=(w>=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<ap.length&&(at||aF.tag===al.tagName.toLowerCase()))?[al]:[]}ap=aG}else{if(aF.tag&&!ap.skipTag){if(ai===0&&!aG.length&&ap.length===1){ap=aG=e([],aL(aF.tag,ap[0]))}else{for(var ad=0,aO=ap.length,az,aw;ad<aO;ad++){az=aL(aF.tag,ap[ad]);for(var aa=0;(aw=az[aa]);aa++){if(!aw.added){aw.added=true;aG[aG.length]=aw}}}ap=aG;aQ()}}}if(!aG.length){break}ap.skipTag=false;if(aF.allClasses){var Y=0,ab=[],J=aF.allClasses.split(".").slice(1);while((ah=ap[Y++])){var af=true,ax=ah.className;if(ax&&ax.length){ax=ax.split(" ");for(var X=J.length;X--;){if(ax.indexOf(J[X])<0){af=false;break}}if(af){ab[ab.length]=ah}}}ap=aG=ab}if(aF.allAttr){var B,T=0,aC=[],ac=[],aH=aF.allAttr.match(m.attribs);for(var H=/^\[(selected|readonly)(\s*=.+)?\]$/,V=0,z=aH.length,U,aP;V<z;V++){m.attribs.lastIndex=0;U=m.attribs.exec(aH[V].replace(H,"[$1]"));aP=P(U[4],U[2]||null);aC[V]=[(aP?new RegExp(aP):null),U[1]]}while((ah=aG[T++])){for(var R=0,aE=aC.length;R<aE;R++){var aA=aC[R][0],aj=E(ah,aC[R][1]);B=true;if(!aA&&aj===true){continue}if((!aA&&(!aj||typeof aj!=="string"||!aj.length))||(!!aA&&!aA.test(aj))){B=false;break}}if(B){ac[ac.length]=ah}}ap=aG=ac}if(aF.allPseudos){var F=aF.allPseudos.match(m.pseudos);for(var Q=0,ao=F.length;Q<ao;Q++){m.pseudos.lastIndex=0;var aT=m.pseudos.exec(F[Q]);var L=aT[1]?aT[1].toLowerCase():null;var aM=aT[3]||null;aG=ar(aG,L,aM);aQ(aG)}ap=aG}}aB=((aJ.length&&(at||aR.call(aJ,aF.tag)>=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<Q;L++){z=m.selector.exec(T[L]);A={tag:u+(z[1]?z[1]:"*"),id:z[2],allClasses:z[3],allAttr:z[5],allPseudos:z[10],tagRelation:z[20]};J+=(A.tagRelation?({">":"/","+":"/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;K<x;K++){m.pseudos.lastIndex=0;var y=m.pseudos.exec(D[K]),U=y[1]?y[1].toLowerCase():null,w=y[3]||null,G=P(A.tag,U,w);if(G.length){J+="["+G+"]"}}}}}try{var I=document.evaluate(J,this,r,7,null),H,F=0;while((H=I.snapshotItem(F++))){B.push(H)}}catch(S){}return B};return DOMAssistant.cssByXpath.call(this,s)},cssSelection:function(s){if(!s){return null}var r=m.special.test(s);try{if(document.querySelectorAll&&!r){return e(new j(),this.querySelectorAll(s))}}catch(t){}return((document.evaluate&&!r&&!/-of-type/.test(s))?DOMAssistant.cssByXpath:DOMAssistant.cssByDOM).call(this,s)},cssSelect:function(r){return DOMAssistant.cssSelection.call(this,r)},elmsByClass:function(t,r){var s=(r||"")+"."+t;return DOMAssistant.cssSelection.call(this,s)},elmsByAttribute:function(s,t,r,v){var u=(r||"")+"["+s+((t&&t!=="*")?((v||"")+"="+t+"]"):"]");return DOMAssistant.cssSelection.call(this,u)},elmsByTag:function(r){return DOMAssistant.cssSelection.call(this,r)}}}();DOMAssistant.initCore();DOMAssistant.Storage=function(){var c=1,a=[],b="_da"+ +new Date();return{hasData:function(){var d=this[b];return !!d&&!!a[d]},retrieve:function(d){if(!DOMAssistant.def(d)){return this[b]||(this[b]=c++)}if(!this[b]||!a[this[b]]){return}return a[this[b]][d]},store:function(f,g){var e=this[b]||(this[b]=c++);a[e]=a[e]||{};if(typeof f==="object"){for(var d in f){if(typeof d==="string"){a[e][d]=f[d]}}}else{a[e][f]=g}return this},unstore:function(e){var d=this[b]||(this[b]=c++);if(a[d]){if(DOMAssistant.def(e)){delete a[d][e]}else{a[d]=null}}return this}}}();DOMAssistant.attach(DOMAssistant.Storage);DOMAssistant.AJAX=function(){var globalXMLHttp=null,readyState=0,status=-1,statusText="",requestPool=[],createAjaxObj=function(url,method,callback,addToContent){var params=null;if(/POST/i.test(method)){url=url.split("?");params=url[1];url=url[0]}return{url:url,method:method,callback:callback,params:params,headers:{},responseType:"text",addToContent:addToContent||false}};return{publicMethods:["ajax","get","post","load"],initRequest:function(){var XMLHttp=null;if(!!window.XMLHttpRequest&&!DOMAssistant.isIE){XMLHttp=new XMLHttpRequest();DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new XMLHttpRequest()}}else{if(!!window.ActiveXObject){var XMLHttpMS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0;i<XMLHttpMS.length;i++){try{XMLHttp=new window.ActiveXObject(XMLHttpMS[i]);DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new window.ActiveXObject(XMLHttpMS[i])};break}catch(e){XMLHttp=null}}}}return XMLHttp},ajax:function(ajaxObj){if(!ajaxObj.noParse&&ajaxObj.url&&/\?/.test(ajaxObj.url)&&ajaxObj.method&&/POST/i.test(ajaxObj.method)){var url=ajaxObj.url.split("?");ajaxObj.url=url[0];ajaxObj.params=url[1]+((url[1].length>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 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<l;n++){if(s[m][n].call(this,j)===false){j.stopPropagation()}}}else{if(typeof this["on"+m]==="function"){this["on"+m].call(this,j)}}var k=DOMAssistant.$$(this.parentNode);if(!j.cancelBubble&&k&&k.nodeType===1){k.triggerEvent(m,o,j)}return this},addEvent:function(r,l,k,q,n){var j,m=d(r),p=m+this.retrieve(),o="on"+m;if(!(l.attachedElements&&l.attachedElements[p])){var s=this.retrieve(g)||{};if(!s[m]){s[m]=[];j=this[o];this[o]=null}if(typeof this.window==="object"){this.window[o]=i}else{if(!s[m].length){if(c){this.addEventListener(m,i,a[m])}else{this[o]=i}}}if(j){s[m].push(j)}if(m!==r){l.evt=r}l.relay=k;l.proxy=q;l.selector=n;l.attachedElements=l.attachedElements||{};l.attachedElements[p]=true;s[m].push(l);this.store(g,s)}return this},handleEvent:function(r){var q=(r&&f.dom.test(r.type)&&c)?r:h(r),o=d(q.type),p=q.target,l=q.relatedTarget,n=this.retrieve(g)[o].slice(0),t,j,s;if((t=n.length)){for(var m=0;m<t;m++){if(typeof n[m]==="function"){if((s=n[m].evt)&&s!==o){q.type=s;if(l&&f.mouseenterleave.test(s)){if(n[m].relay){var k=n[m].elms||(n[m].elms=this.cssSelect(n[m].selector));if(k.indexOf(p)<0||!DOMAssistant.hasChild.call(l,p)){continue}}else{if(this===l||this.hasChild(l)){continue}}}}j=n[m].call(this,q)}}if(j===false){q.stopPropagation()}return j}},removeEvent:function(w,l,k,s){var q=(w=d(w))+this.retrieve(),x=this.retrieve(g),p="on"+w;if(x&&!w){for(var v in x){if(x[v].length){this.removeEvent(v)}}var r=this.attributes;for(var t,m=r.length;m--;){t=r[m].nodeName.toLowerCase();if(f.on.test(t)&&typeof this[t]==="function"){this[t]=null}}}else{if(x&&x[w]){var o=x[w];for(var u,n=o.length;n--;){u=l||o[n];if(o[n]===u&&k===u.relay&&s===u.proxy){o.splice(n,1);if(!!s&&u.selector){this.cssSelect(u.selector).removeEvent(s)}if(u.attachedElements){u.attachedElements[q]=null}}}if(!x[w].length){if(c){this.removeEventListener(w,i,a[w])}else{this[p]=null}}}else{if(this[p]&&!l&&!k){this[p]=null}}}return this},relayEvent:function(k,j,m,l){if(e(k)){this.relayEvent("focus",j,function(){DOMAssistant.$$(this).removeEvent(k).addEvent(k,function(n){return m.call(this,h(n))})},k).relayEvent("blur",j,function(){DOMAssistant.$$(this).removeEvent(k)},k);return this}return this.addEvent(k,function(s){s=h(s);var r=s.target,n=arguments,o=0,t,p=this.cssSelect(j);while((t=p[o++])){if((t===r||DOMAssistant.hasChild.call(t,r))&&!t.disabled){s.currentTarget=t;var q=m.apply(t,n);if(!q){s.preventDefault()}return q}}},true,l,j)},unrelayEvent:function(j){if(e(j)){return this.removeEvent("focus",null,true,j).removeEvent("blur",null,true,j)}return this.removeEvent(j,null,true)},preventDefault:function(j){if(j.preventDefault){j.preventDefault()}j.returnValue=false},cancelBubble:function(j){if(j.stopPropagation){j.stopPropagation()}j.cancelBubble=true}}}();DOMAssistant.attach(DOMAssistant.Events);DOMAssistant.DOMLoad=function(){var g=false,a=null,f=[],b={},c=null,d=function(){for(var j=0,h=f.length;j<h;j++){try{f[j]()}catch(k){if(c&&typeof c==="function"){c(k)}}}f=[]},e=function(){if(g){return}g=true;d()};
3
-/*@cc_on @if(@_win32||@_win64)document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/
4
-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<h;j++){k=arguments[j];if(!k.DOMReady&&!b[k]){if(typeof k==="string"){b[k]=true;k=new Function(k)}k.DOMReady=true;f.push(k)}}if(g){d()}},setErrorHandling:function(h){c=h}}}();DOMAssistant.DOMReady=DOMAssistant.DOMLoad.DOMReady;
5 1
\ No newline at end of file
6 2
new file mode 100644
... ...
@@ -0,0 +1,1497 @@
0
+/*!
1
+  * Ender: open module JavaScript framework
2
+  * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
3
+  * https://ender.no.de
4
+  * License MIT
5
+  * Build: ender -b jeesh
6
+  */
7
+!function (context) {
8
+
9
+  function aug(o, o2) {
10
+    for (var k in o2) {
11
+      k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
12
+    }
13
+    return o;
14
+  }
15
+
16
+  function boosh(s, r) {
17
+    var els;
18
+    if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) { //string || node || nodelist || window
19
+      els = ender._select(s, r);
20
+      els.selector = s;
21
+    } else {
22
+      els = isFinite(s.length) ? s : [s];
23
+    }
24
+    return aug(els, boosh);
25
+  }
26
+
27
+  function ender(s, r) {
28
+    return boosh(s, r);
29
+  }
30
+
31
+  aug(ender, {
32
+    _VERSION: '0.2.0',
33
+    ender: function (o, chain) {
34
+      aug(chain ? boosh : ender, o);
35
+    }
36
+  });
37
+
38
+  aug(boosh, {
39
+    forEach: function (fn, scope) {
40
+      // opt out of native forEach so we can intentionally call our own scope
41
+      // defaulting to the current item
42
+      for (var i = 0, l = this.length; i < l; ++i) {
43
+        i in this && fn.call(scope || this[i], this[i], i, this);
44
+      }
45
+      // return self for chaining
46
+      return this;
47
+    }
48
+  });
49
+
50
+  var old = context.$;
51
+  ender.noConflict = function () {
52
+    context.$ = old;
53
+    return this;
54
+  };
55
+
56
+  (typeof module !== 'undefined') && module.exports && (module.exports = ender);
57
+  // use subscript notation as extern for Closure compilation
58
+  context['ender'] = context['$'] = ender;
59
+
60
+}(this);
61
+/*!
62
+  * bean.js - copyright Jacob Thornton 2011
63
+  * https://github.com/fat/bean
64
+  * MIT License
65
+  * special thanks to:
66
+  * dean edwards: http://dean.edwards.name/
67
+  * dperini: https://github.com/dperini/nwevents
68
+  * the entire mootools team: github.com/mootools/mootools-core
69
+  */
70
+!function (context) {
71
+  var __uid = 1, registry = {}, collected = {},
72
+      overOut = /over|out/,
73
+      namespace = /[^\.]*(?=\..*)\.|.*/,
74
+      stripName = /\..*/,
75
+      addEvent = 'addEventListener',
76
+      attachEvent = 'attachEvent',
77
+      removeEvent = 'removeEventListener',
78
+      detachEvent = 'detachEvent',
79
+      doc = context.document || {},
80
+      root = doc.documentElement || {},
81
+      W3C_MODEL = root[addEvent],
82
+      eventSupport = W3C_MODEL ? addEvent : attachEvent,
83
+
84
+  isDescendant = function (parent, child) {
85
+    var node = child.parentNode;
86
+    while (node != null) {
87
+      if (node == parent) {
88
+        return true;
89
+      }
90
+      node = node.parentNode;
91
+    }
92
+  },
93
+
94
+  retrieveUid = function (obj, uid) {
95
+    return (obj.__uid = uid || obj.__uid || __uid++);
96
+  },
97
+
98
+  retrieveEvents = function (element) {
99
+    var uid = retrieveUid(element);
100
+    return (registry[uid] = registry[uid] || {});
101
+  },
102
+
103
+  listener = W3C_MODEL ? function (element, type, fn, add) {
104
+    element[add ? addEvent : removeEvent](type, fn, false);
105
+  } : function (element, type, fn, add, custom) {
106
+    custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
107
+    element[add ? attachEvent : detachEvent]('on' + type, fn);
108
+  },
109
+
110
+  nativeHandler = function (element, fn, args) {
111
+    return function (event) {
112
+      event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
113
+      return fn.apply(element, [event].concat(args));
114
+    };
115
+  },
116
+
117
+  customHandler = function (element, fn, type, condition, args) {
118
+    return function (event) {
119
+      if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
120
+        fn.apply(element, [event].concat(args));
121
+      }
122
+    };
123
+  },
124
+
125
+  addListener = function (element, orgType, fn, args) {
126
+    var type = orgType.replace(stripName, ''),
127
+        events = retrieveEvents(element),
128
+        handlers = events[type] || (events[type] = {}),
129
+        uid = retrieveUid(fn, orgType.replace(namespace, ''));
130
+    if (handlers[uid]) {
131
+      return element;
132
+    }
133
+    var custom = customEvents[type];
134
+    if (custom) {
135
+      fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
136
+      type = custom.base || type;
137
+    }
138
+    var isNative = nativeEvents[type];
139
+    fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
140
+    isNative = W3C_MODEL || isNative;
141
+    if (type == 'unload') {
142
+      var org = fn;
143
+      fn = function () {
144
+        removeListener(element, type, fn) && org();
145
+      };
146
+    }
147
+    element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
148
+    handlers[uid] = fn;
149
+    fn.__uid = uid;
150
+    return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
151
+  },
152
+
153
+  removeListener = function (element, orgType, handler) {
154
+    var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
155
+    if (!events || !events[type]) {
156
+      return element;
157
+    }
158
+    names = orgType.replace(namespace, '');
159
+    uids = names ? names.split('.') : [handler.__uid];
160
+    for (i = uids.length; i--;) {
161
+      uid = uids[i];
162
+      handler = events[type][uid];
163
+      delete events[type][uid];
164
+      if (element[eventSupport]) {
165
+        type = customEvents[type] ? customEvents[type].base : type;
166
+        var isNative = W3C_MODEL || nativeEvents[type];
167
+        listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
168
+      }
169
+    }
170
+    return element;
171
+  },
172
+
173
+  del = function (selector, fn, $) {
174
+    return function (e) {
175
+      var array = typeof selector == 'string' ? $(selector, this) : selector;
176
+      for (var target = e.target; target && target != this; target = target.parentNode) {
177
+        for (var i = array.length; i--;) {
178
+          if (array[i] == target) {
179
+            return fn.apply(target, arguments);
180
+          }
181
+        }
182
+      }
183
+    };
184
+  },
185
+
186
+  add = function (element, events, fn, delfn, $) {
187
+    if (typeof events == 'object' && !fn) {
188
+      for (var type in events) {
189
+        events.hasOwnProperty(type) && add(element, type, events[type]);
190
+      }
191
+    } else {
192
+      var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
193
+      fn = isDel ? del(events, delfn, $) : fn;
194
+      for (var i = types.length; i--;) {
195
+        addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
196
+      }
197
+    }
198
+    return element;
199
+  },
200
+
201
+  remove = function (element, orgEvents, fn) {
202
+    var k, type, events,
203
+        isString = typeof(orgEvents) == 'string',
204
+        names = isString && orgEvents.replace(namespace, ''),
205
+        rm = removeListener,
206
+        attached = retrieveEvents(element);
207
+    if (isString && /\s/.test(orgEvents)) {
208
+      orgEvents = orgEvents.split(' ');
209
+      var i = orgEvents.length - 1;
210
+      while (remove(element, orgEvents[i]) && i--) {}
211
+      return element;
212
+    }
213
+    events = isString ? orgEvents.replace(stripName, '') : orgEvents;
214
+    if (!attached || (isString && !attached[events])) {
215
+      return element;
216
+    }
217
+    if (typeof fn == 'function') {
218
+      rm(element, events, fn);
219
+    } else if (names) {
220
+      rm(element, orgEvents);
221
+    } else {
222
+      rm = events ? rm : remove;
223
+      type = isString && events;
224
+      events = events ? (fn || attached[events] || events) : attached;
225
+      for (k in events) {
226
+        events.hasOwnProperty(k) && rm(element, type || k, events[k]);
227
+      }
228
+    }
229
+    return element;
230
+  },
231
+
232
+  fire = function (element, type, args) {
233
+    var evt, k, i, types = type.split(' ');
234
+    for (i = types.length; i--;) {
235
+      type = types[i].replace(stripName, '');
236
+      var isNative = nativeEvents[type],
237
+          isNamespace = types[i].replace(namespace, ''),
238
+          handlers = retrieveEvents(element)[type];
239
+      if (isNamespace) {
240
+        isNamespace = isNamespace.split('.');
241
+        for (k = isNamespace.length; k--;) {
242
+          handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
243
+        }
244
+      } else if (!args && element[eventSupport]) {
245
+        fireListener(isNative, type, element);
246
+      } else {
247
+        for (k in handlers) {
248
+          handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
249
+        }
250
+      }
251
+    }
252
+    return element;
253
+  },
254
+
255
+  fireListener = W3C_MODEL ? function (isNative, type, element) {
256
+    evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
257
+    evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
258
+    element.dispatchEvent(evt);
259
+  } : function (isNative, type, element) {
260
+    isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
261
+  },
262
+
263
+  clone = function (element, from, type) {
264
+    var events = retrieveEvents(from), obj, k;
265
+    obj = type ? events[type] : events;
266
+    for (k in obj) {
267
+      obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
268
+    }
269
+    return element;
270
+  },
271
+
272
+  fixEvent = function (e) {
273
+    var result = {};
274
+    if (!e) {
275
+      return result;
276
+    }
277
+    var type = e.type, target = e.target || e.srcElement;
278
+    result.preventDefault = fixEvent.preventDefault(e);
279
+    result.stopPropagation = fixEvent.stopPropagation(e);
280
+    result.target = target && target.nodeType == 3 ? target.parentNode : target;
281
+    if (~type.indexOf('key')) {
282
+      result.keyCode = e.which || e.keyCode;
283
+    } else if ((/click|mouse|menu/i).test(type)) {
284
+      result.rightClick = e.which == 3 || e.button == 2;
285
+      result.pos = { x: 0, y: 0 };
286
+      if (e.pageX || e.pageY) {
287
+        result.clientX = e.pageX;
288
+        result.clientY = e.pageY;
289
+      } else if (e.clientX || e.clientY) {
290
+        result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
291
+        result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
292
+      }
293
+      overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
294
+    }
295
+    for (var k in e) {
296
+      if (!(k in result)) {
297
+        result[k] = e[k];
298
+      }
299
+    }
300
+    return result;
301
+  };
302
+
303
+  fixEvent.preventDefault = function (e) {
304
+    return function () {
305
+      if (e.preventDefault) {
306
+        e.preventDefault();
307
+      }
308
+      else {
309
+        e.returnValue = false;
310
+      }
311
+    };
312
+  };
313
+
314
+  fixEvent.stopPropagation = function (e) {
315
+    return function () {
316
+      if (e.stopPropagation) {
317
+        e.stopPropagation();
318
+      } else {
319
+        e.cancelBubble = true;
320
+      }
321
+    };
322
+  };
323
+
324
+  var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons
325
+    mousewheel: 1, DOMMouseScroll: 1, //mouse wheel
326
+    mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement
327
+    keydown: 1, keypress: 1, keyup: 1, //keyboard
328
+    orientationchange: 1, // mobile
329
+    touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch
330
+    gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture
331
+    focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements
332
+    load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
333
+    error: 1, abort: 1, scroll: 1 }; //misc
334
+
335
+  function check(event) {
336
+    var related = event.relatedTarget;
337
+    if (!related) {
338
+      return related == null;
339
+    }
340
+    return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related));
341
+  }
342
+
343
+  var customEvents = {
344
+    mouseenter: { base: 'mouseover', condition: check },
345
+    mouseleave: { base: 'mouseout', condition: check },
346
+    mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
347
+  };
348
+
349
+  var bean = { add: add, remove: remove, clone: clone, fire: fire };
350
+
351
+  var clean = function (el) {
352
+    var uid = remove(el).__uid;
353
+    if (uid) {
354
+      delete collected[uid];
355
+      delete registry[uid];
356
+    }
357
+  };
358
+
359
+  if (context[attachEvent]) {
360
+    add(context, 'unload', function () {
361
+      for (var k in collected) {
362
+        collected.hasOwnProperty(k) && clean(collected[k]);
363
+      }
364
+      context.CollectGarbage && CollectGarbage();
365
+    });
366
+  }
367
+
368
+  var oldBean = context.bean;
369
+  bean.noConflict = function () {
370
+    context.bean = oldBean;
371
+    return this;
372
+  };
373
+
374
+  (typeof module !== 'undefined' && module.exports) ?
375
+    (module.exports = bean) :
376
+    (context['bean'] = bean);
377
+
378
+}(this);!function ($) {
379
+  var b = bean.noConflict(),
380
+      integrate = function (method, type, method2) {
381
+        var _args = type ? [type] : [];
382
+        return function () {
383
+          for (var args, i = 0, l = this.length; i < l; i++) {
384
+            args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0));
385
+            args.length == 4 && args.push($);
386
+            !arguments.length && method == 'add' && type && (method = 'fire');
387
+            b[method].apply(this, args);
388
+          }
389
+          return this;
390
+        };
391
+      };
392
+
393
+  var add = integrate('add'),
394
+      remove = integrate('remove'),
395
+      fire = integrate('fire');
396
+
397
+  var methods = {
398
+
399
+    on: add,
400
+    addListener: add,
401
+    bind: add,
402
+    listen: add,
403
+    delegate: add,
404
+
405
+    unbind: remove,
406
+    unlisten: remove,
407
+    removeListener: remove,
408
+    undelegate: remove,
409
+
410
+    emit: fire,
411
+    trigger: fire,
412
+
413
+    cloneEvents: integrate('clone'),
414
+
415
+    hover: function (enter, leave) {
416
+      for (var i = 0, l = this.length; i < l; i++) {
417
+        b.add.call(this, this[i], 'mouseenter', enter);
418
+        b.add.call(this, this[i], 'mouseleave', leave);
419
+      }
420
+      return this;
421
+    }
422
+  };
423
+
424
+  var shortcuts = [
425
+    'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin',
426
+    'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown',
427
+    'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup',
428
+    'resize', 'scroll', 'select', 'submit', 'unload'
429
+  ];
430
+
431
+  for (var i = shortcuts.length; i--;) {
432
+    var shortcut = shortcuts[i];
433
+    methods[shortcut] = integrate('add', shortcut);
434
+  }
435
+
436
+  $.ender(methods, true);
437
+}(ender);
438
+/*!
439
+  * bonzo.js - copyright @dedfat 2011
440
+  * https://github.com/ded/bonzo
441
+  * Follow our software http://twitter.com/dedfat
442
+  * MIT License
443
+  */
444
+!function (context) {
445
+
446
+  var doc = context.document,
447
+      html = doc.documentElement,
448
+      query = null,
449
+      byTag = 'getElementsByTagName',
450
+      specialAttributes = /^checked|value|selected$/,
451
+      specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i,
452
+      tagMap = { select: 'option', table: 'tbody', tr: 'td' },
453
+      stateAttributes = /^checked|selected$/,
454
+      ie = /msie/i.test(navigator.userAgent),
455
+      uidList = [],
456
+      uuids = 0,
457
+      digit = /^-?[\d\.]+$/,
458
+      px = 'px',
459
+      // commonly used methods
460
+      setAttribute = 'setAttribute',
461
+      getAttribute = 'getAttribute',
462
+      trimReplace = /(^\s*|\s*$)/g,
463
+      unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 };
464
+
465
+  function classReg(c) {
466
+    return new RegExp("(^|\\s+)" + c + "(\\s+|$)");
467
+  }
468
+
469
+  function each(ar, fn, scope) {
470
+    for (var i = 0, l = ar.length; i < l; i++) {
471
+      fn.call(scope || ar[i], ar[i], i, ar);
472
+    }
473
+    return ar;
474
+  }
475
+
476
+  var trim = String.prototype.trim ?
477
+    function (s) {
478
+      return s.trim();
479
+    } :
480
+    function (s) {
481
+      return s.replace(trimReplace, '');
482
+    };
483
+
484
+  function camelize(s) {
485
+    return s.replace(/-(.)/g, function (m, m1) {
486
+      return m1.toUpperCase();
487
+    });
488
+  }
489
+
490
+  function is(node) {
491
+    return node && node.nodeName && node.nodeType == 1;
492
+  }
493
+
494
+  function some(ar, fn, scope) {
495
+    for (var i = 0, j = ar.length; i < j; ++i) {
496
+      if (fn.call(scope, ar[i], i, ar)) {
497
+        return true;
498
+      }
499
+    }
500
+    return false;
501
+  }
502
+
503
+  var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
504
+    function (el, property) {
505
+      var value = null;
506
+      if (property == 'float') {
507
+        property = 'cssFloat';
508
+      }
509
+      var computed = doc.defaultView.getComputedStyle(el, '');
510
+      computed && (value = computed[camelize(property)]);
511
+      return el.style[property] || value;
512
+
513
+    } : (ie && html.currentStyle) ?
514
+
515
+    function (el, property) {
516
+      property = camelize(property);
517
+      property = property == 'float' ? 'styleFloat' : property;
518
+
519
+      if (property == 'opacity') {
520
+        var val = 100;
521
+        try {
522
+          val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
523
+        } catch (e1) {
524
+          try {
525
+            val = el.filters('alpha').opacity;
526
+          } catch (e2) {}
527
+        }
528
+        return val / 100;
529
+      }
530
+      var value = el.currentStyle ? el.currentStyle[property] : null;
531
+      return el.style[property] || value;
532
+    } :
533
+
534
+    function (el, property) {
535
+      return el.style[camelize(property)];
536
+    };
537
+
538
+  function insert(target, host, fn) {
539
+    var i = 0, self = host || this, r = [];
540
+    each(normalize(query ? query(target) : target), function (t) {
541
+      each(self, function (el) {
542
+        var n = el.cloneNode(true);
543
+        fn(t, n);
544
+        r[i] = n;
545
+        i++;
546
+      });
547
+    }, this);
548
+    each(r, function (e, i) {
549
+      self[i] = e;
550
+    });
551
+    self.length = i;
552
+    return self;
553
+  }
554
+
555
+  function xy(el, x, y) {
556
+    var $el = bonzo(el),
557
+        style = $el.css('position'),
558
+        offset = $el.offset(),
559
+        rel = 'relative',
560
+        isRel = style == rel,
561
+        delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)];
562
+
563
+    if (style == 'static') {
564
+      $el.css('position', rel);
565
+      style = rel;
566
+    }
567
+
568
+    isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft);
569
+    isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop);
570
+
571
+    x !== null && (el.style.left = x - offset.left + delta[0] + 'px');
572
+    y !== null && (el.style.top = y - offset.top + delta[1] + 'px');
573
+
574
+  }
575
+
576
+  function Bonzo(elements) {
577
+    this.length = 0;
578
+    this.original = elements;
579
+    if (elements) {
580
+      elements = typeof elements !== 'string' &&
581
+        !elements.nodeType &&
582
+        typeof elements.length !== 'undefined' ?
583
+          elements :
584
+          [elements];
585
+      this.length = elements.length;
586
+      for (var i = 0; i < elements.length; i++) {
587
+        this[i] = elements[i];
588
+      }
589
+    }
590
+  }
591
+
592
+  Bonzo.prototype = {
593
+
594
+    each: function (fn, scope) {
595
+      return each(this, fn, scope);
596
+    },
597
+
598
+    map: function (fn, reject) {
599
+      var m = [], n, i;
600
+      for (i = 0; i < this.length; i++) {
601
+        n = fn.call(this, this[i]);
602
+        reject ? (reject(n) && m.push(n)) : m.push(n);
603
+      }
604
+      return m;
605
+    },
606
+
607
+    first: function () {
608
+      return bonzo(this[0]);
609
+    },
610
+
611
+    last: function () {
612
+      return bonzo(this[this.length - 1]);
613
+    },
614
+
615
+    html: function (h, text) {
616
+      var method = text ?
617
+        html.textContent == null ?
618
+          'innerText' :
619
+          'textContent' :
620
+        'innerHTML', m;
621
+      function append(el, tag) {
622
+        while (el.firstChild) {
623
+          el.removeChild(el.firstChild);
624
+        }
625
+        each(normalize(h, tag), function (node) {
626
+          el.appendChild(node);
627
+        });
628
+      }
629
+      return typeof h !== 'undefined' ?
630
+          this.each(function (el) {
631
+            (m = el.tagName.match(specialTags)) ?
632
+              append(el, m[0]) :
633
+              (el[method] = h);
634
+          }) :
635
+        this[0] ? this[0][method] : '';
636
+    },
637
+
638
+    text: function (text) {
639
+      return this.html(text, 1);
640
+    },
641
+
642
+    addClass: function (c) {
643
+      return this.each(function (el) {
644
+        this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c));
645
+      }, this);
646
+    },
647
+
648
+    removeClass: function (c) {
649
+      return this.each(function (el) {
650
+        this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' ')));
651
+      }, this);
652
+    },
653
+
654
+    hasClass: function (el, c) {
655
+      return typeof c == 'undefined' ?
656
+        some(this, function (i) {
657
+          return classReg(el).test(i.className);
658
+        }) :
659
+        classReg(c).test(el.className);
660
+    },
661
+
662
+    toggleClass: function (c, condition) {
663
+      if (typeof condition !== 'undefined' && !condition) {
664
+        return this;
665
+      }
666
+      return this.each(function (el) {
667
+        this.hasClass(el, c) ?
668
+          (el.className = trim(el.className.replace(classReg(c), ' '))) :
669
+          (el.className = trim(el.className + ' ' + c));
670
+      }, this);
671
+    },
672
+
673
+    show: function (type) {
674
+      return this.each(function (el) {
675
+        el.style.display = type || '';
676
+      });
677
+    },
678
+
679
+    hide: function (elements) {
680
+      return this.each(function (el) {
681
+        el.style.display = 'none';
682
+      });
683
+    },
684
+
685
+    append: function (node) {
686
+      return this.each(function (el) {
687
+        each(normalize(node), function (i) {
688
+          el.appendChild(i);
689
+        });
690
+      });
691
+    },
692
+
693
+    prepend: function (node) {
694
+      return this.each(function (el) {
695
+        var first = el.firstChild;
696
+        each(normalize(node), function (i) {
697
+          el.insertBefore(i, first);
698
+        });
699
+      });
700
+    },
701
+
702
+    appendTo: function (target, host) {
703
+      return insert.call(this, target, host, function (t, el) {
704
+        t.appendChild(el);
705
+      });
706
+    },
707
+
708
+    prependTo: function (target, host) {
709
+      return insert.call(this, target, host, function (t, el) {
710
+        t.insertBefore(el, t.firstChild);
711
+      });
712
+    },
713
+
714
+    next: function () {
715
+      return this.related('nextSibling');
716
+    },
717
+
718
+    previous: function () {
719
+      return this.related('previousSibling');
720
+    },
721
+
722
+    related: function (method) {
723
+      return this.map(
724
+        function (el) {
725
+          el = el[method];
726
+          while (el && el.nodeType !== 1) {
727
+            el = el[method];
728
+          }
729
+          return el || 0;
730
+        },
731
+        function (el) {
732
+          return el;
733
+        }
734
+      );
735
+    },
736
+
737
+    before: function (node) {
738
+      return this.each(function (el) {
739
+        each(bonzo.create(node), function (i) {
740
+          el.parentNode.insertBefore(i, el);
741
+        });
742
+      });
743
+    },
744
+
745
+    after: function (node) {
746
+      return this.each(function (el) {
747
+        each(bonzo.create(node), function (i) {
748
+          el.parentNode.insertBefore(i, el.nextSibling);
749
+        });
750
+      });
751
+    },
752
+
753
+    insertBefore: function (target, host) {
754
+      return insert.call(this, target, host, function (t, el) {
755
+        t.parentNode.insertBefore(el, t);
756
+      });
757
+    },
758
+
759
+    insertAfter: function (target, host) {
760
+      return insert.call(this, target, host, function (t, el) {
761
+        var sibling = t.nextSibling;
762
+        if (sibling) {
763
+          t.parentNode.insertBefore(el, sibling);
764
+        }
765
+        else {
766
+          t.parentNode.appendChild(el);
767
+        }
768
+      });
769
+    },
770
+
771
+    css: function (o, v) {
772
+      // is this a request for just getting a style?
773
+      if (v === undefined && typeof o == 'string') {
774
+        return getStyle(this[0], o);
775
+      }
776
+      var iter = o;
777
+      if (typeof o == 'string') {
778
+        iter = {};
779
+        iter[o] = v;
780
+      }
781
+
782
+      if (ie && iter.opacity) {
783
+        // oh this 'ol gamut
784
+        iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')';
785
+        // give it layout
786
+        iter.zoom = o.zoom || 1;
787
+        delete iter.opacity;
788
+      }
789
+
790
+      if (v = iter['float']) {
791
+        // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat
792
+        ie ? (iter.styleFloat = v) : (iter.cssFloat = v);
793
+        delete iter['float'];
794
+      }
795
+
796
+      var fn = function (el, p, v) {
797
+        for (var k in iter) {
798
+          if (iter.hasOwnProperty(k)) {
799
+            v = iter[k];
800
+            // change "5" to "5px" - unless you're line-height, which is allowed
801
+            (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px);
802
+            el.style[p] = v;
803
+          }
804
+        }
805
+      };
806
+      return this.each(fn);
807
+    },
808
+
809
+    offset: function (x, y) {
810
+      if (x || y) {
811
+        return this.each(function (el) {
812
+          xy(el, x, y);
813
+        });
814
+      }
815
+      var el = this[0];
816
+      var width = el.offsetWidth;
817
+      var height = el.offsetHeight;
818
+      var top = el.offsetTop;
819
+      var left = el.offsetLeft;
820
+      while (el = el.offsetParent) {
821
+        top = top + el.offsetTop;
822
+        left = left + el.offsetLeft;
823
+      }
824
+
825
+      return {
826
+        top: top,
827
+        left: left,
828
+        height: height,
829
+        width: width
830
+      };
831
+    },
832
+
833
+    attr: function (k, v) {
834
+      var el = this[0];
835
+      return typeof v == 'undefined' ?
836
+        specialAttributes.test(k) ?
837
+          stateAttributes.test(k) && typeof el[k] == 'string' ?
838
+            true : el[k] : el[getAttribute](k) :
839
+        this.each(function (el) {
840
+          k == 'value' ? (el.value = v) : el[setAttribute](k, v);
841
+        });
842
+    },
843
+
844
+    val: function (s) {
845
+      return (typeof s == 'string') ? this.attr('value', s) : this[0].value;
846
+    },
847
+
848
+    removeAttr: function (k) {
849
+      return this.each(function (el) {
850
+        el.removeAttribute(k);
851
+      });
852
+    },
853
+
854
+    data: function (k, v) {
855
+      var el = this[0];
856
+      if (typeof v === 'undefined') {
857
+        el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
858
+        var uid = el[getAttribute]('data-node-uid');
859
+        uidList[uid] || (uidList[uid] = {});
860
+        return uidList[uid][k];
861
+      } else {
862
+        return this.each(function (el) {
863
+          el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
864
+          var uid = el[getAttribute]('data-node-uid');
865
+          var o = {};
866
+          o[k] = v;
867
+          uidList[uid] = o;
868
+        });
869
+      }
870
+    },
871
+
872
+    remove: function () {
873
+      return this.each(function (el) {
874
+        el.parentNode && el.parentNode.removeChild(el);
875
+      });
876
+    },
877
+
878
+    empty: function () {
879
+      return this.each(function (el) {
880
+        while (el.firstChild) {
881
+          el.removeChild(el.firstChild);
882
+        }
883
+      });
884
+    },
885
+
886
+    detach: function () {
887
+      return this.map(function (el) {
888
+        return el.parentNode.removeChild(el);
889
+      });
890
+    },
891
+
892
+    scrollTop: function (y) {
893
+      return scroll.call(this, null, y, 'y');
894
+    },
895
+
896
+    scrollLeft: function (x) {
897
+      return scroll.call(this, x, null, 'x');
898
+    }
899
+  };
900
+
901
+  function normalize(node, tag) {
902
+    return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node;
903
+  }
904
+
905
+  function scroll(x, y, type) {
906
+    var el = this[0];
907
+    if (x == null && y == null) {
908
+      return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type];
909
+    }
910
+    if (isBody(el)) {
911
+      window.scrollTo(x, y);
912
+    } else {
913
+      x != null && (el.scrollLeft = x);
914
+      y != null && (el.scrollTop = y);
915
+    }
916
+    return this;
917
+  }
918
+
919
+  function isBody(element) {
920
+    return element === window || (/^(?:body|html)$/i).test(element.tagName);
921
+  }
922
+
923
+  function getWindowScroll() {
924
+    return { x: window.pageXOffset || html.scrollLeft, y: window.pageYOffset || html.scrollTop };
925
+  }
926
+
927
+  function bonzo(els, host) {
928
+    return new Bonzo(els, host);
929
+  }
930
+
931
+  bonzo.setQueryEngine = function (q) {
932
+    query = q;
933
+    delete bonzo.setQueryEngine;
934
+  };
935
+
936
+  bonzo.aug = function (o, target) {
937
+    for (var k in o) {
938
+      o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]);
939
+    }
940
+  };
941
+
942
+  bonzo.create = function (node, tag) {
943
+    return typeof node == 'string' ?
944
+      function () {
945
+        var t = tag ? tagMap[tag.toLowerCase()] : null;
946
+        var el = doc.createElement(t || 'div'), els = [];
947
+        if (tag) {
948
+          var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g"));
949
+          each(bitches, function (m) {
950
+            m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2');
951
+            var bah = doc.createElement(t);
952
+            bah.appendChild(doc.createDocumentFragment(m));
953
+            el.appendChild(bah);
954
+          });
955
+        } else {
956
+          el.innerHTML = node;
957
+        }
958
+        var nodes = el.childNodes;
959
+        el = el.firstChild;
960
+        els.push(el);
961
+        while (el = el.nextSibling) {
962
+          (el.nodeType == 1) && els.push(el);
963
+        }
964
+        return els;
965
+
966
+      }() : is(node) ? [node.cloneNode(true)] : [];
967
+  };
968
+
969
+  bonzo.doc = function () {
970
+    var w = html.scrollWidth,
971
+        h = html.scrollHeight,
972
+        vp = this.viewport();
973
+    return {
974
+      width: Math.max(w, vp.width),
975
+      height: Math.max(h, vp.height)
976
+    };
977
+  };
978
+
979
+  bonzo.firstChild = function (el) {
980
+    for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
981
+      if (c[i].nodeType === 1) {
982
+        e = c[j = i];
983
+      }
984
+    }
985
+    return e;
986
+  };
987
+
988
+  bonzo.viewport = function () {
989
+    var h = self.innerHeight,
990
+        w = self.innerWidth;
991
+    ie && (h = html.clientHeight) && (w = html.clientWidth);
992
+    return {
993
+      width: w,
994
+      height: h
995
+    };
996
+  };
997
+
998
+  bonzo.isAncestor = 'compareDocumentPosition' in html ?
999
+    function (container, element) {
1000
+      return (container.compareDocumentPosition(element) & 16) == 16;
1001
+    } : 'contains' in html ?
1002
+    function (container, element) {
1003
+      return container !== element && container.contains(element);
1004
+    } :
1005
+    function (container, element) {
1006
+      while (element = element.parentNode) {
1007
+        if (element === container) {
1008
+          return true;
1009
+        }
1010
+      }
1011
+      return false;
1012
+    };
1013
+
1014
+  var old = context.bonzo;
1015
+  bonzo.noConflict = function () {
1016
+    context.bonzo = old;
1017
+    return this;
1018
+  };
1019
+  context['bonzo'] = bonzo;
1020
+
1021
+}(this);!function ($) {
1022
+
1023
+  var b = bonzo;
1024
+  b.setQueryEngine($);
1025
+  $.ender(b);
1026
+  $.ender(b(), true);
1027
+  $.ender({
1028
+    create: function (node) {
1029
+      return $(b.create(node));
1030
+    }
1031
+  });
1032
+
1033
+  $.id = function (id) {
1034
+    return $([document.getElementById(id)]);
1035
+  };
1036
+
1037
+  function indexOf(ar, val) {
1038
+    for (var i = 0; i < ar.length; i++) {
1039
+      if (ar[i] === val) {
1040
+        return i;
1041
+      }
1042
+    }
1043
+    return -1;
1044
+  }
1045
+
1046
+  function uniq(ar) {
1047
+    var a = [], i, j;
1048
+    label:
1049
+    for (i = 0; i < ar.length; i++) {
1050
+      for (j = 0; j < a.length; j++) {
1051
+        if (a[j] == ar[i]) {
1052
+          continue label;
1053
+        }
1054
+      }
1055
+      a[a.length] = ar[i];
1056
+    }
1057
+    return a;
1058
+  }
1059
+
1060
+  $.ender({
1061
+    parents: function (selector, closest) {
1062
+      var collection = $(selector), j, k, p, r = [];
1063
+      for (j = 0, k = this.length; j < k; j++) {
1064
+        p = this[j];
1065
+        while (p = p.parentNode) {
1066
+          if (indexOf(collection, p) !== -1) {
1067
+            r.push(p);
1068
+            if (closest) break;
1069
+          }
1070
+        }
1071
+      }
1072
+      return $(uniq(r));
1073
+    },
1074
+
1075
+    closest: function (selector) {
1076
+      return this.parents(selector, true);
1077
+    },
1078
+
1079
+    first: function () {
1080
+      return $(this[0]);
1081
+    },
1082
+
1083
+    last: function () {
1084
+      return $(this[this.length - 1]);
1085
+    },
1086
+
1087
+    next: function () {
1088
+      return $(b(this).next());
1089
+    },
1090
+
1091
+    previous: function () {
1092
+      return $(b(this).previous());
1093
+    },
1094
+
1095
+    appendTo: function (t) {
1096
+      return b(this.selector).appendTo(t, this);
1097
+    },
1098
+
1099
+    prependTo: function (t) {
1100
+      return b(this.selector).prependTo(t, this);
1101
+    },
1102
+
1103
+    insertAfter: function (t) {
1104
+      return b(this.selector).insertAfter(t, this);
1105
+    },
1106
+
1107
+    insertBefore: function (t) {
1108
+      return b(this.selector).insertBefore(t, this);
1109
+    },
1110
+
1111
+    siblings: function () {
1112
+      var i, l, p, r = [];
1113
+      for (i = 0, l = this.length; i < l; i++) {
1114
+        p = this[i];
1115
+        while (p = p.previousSibling) {
1116
+          p.nodeType == 1 && r.push(p);
1117
+        }
1118
+        p = this[i];
1119
+        while (p = p.nextSibling) {
1120
+          p.nodeType == 1 && r.push(p);
1121
+        }
1122
+      }
1123
+      return $(r);
1124
+    },
1125
+
1126
+    children: function () {
1127
+      var el, r = [];
1128
+      for (i = 0, l = this.length; i < l; i++) {
1129
+        if (!(el = b.firstChild(this[i]))) {
1130
+          continue;
1131
+        }
1132
+        r.push(el);
1133
+        while (el = el.nextSibling) {
1134
+          el.nodeType == 1 && r.push(el);
1135
+        }
1136
+      }
1137
+      return $(uniq(r));
1138
+    },
1139
+
1140
+    height: function (v) {
1141
+      return v ? this.css('height', v) : parseInt(this.css('height'), 10);
1142
+    },
1143
+
1144
+    width: function (v) {
1145
+      return v ? this.css('width', v) : parseInt(this.css('width'), 10);
1146
+    }
1147
+  }, true);
1148
+
1149
+}(ender || $);
1150
+
1151
+!function () { var exports = {}, module = { exports: exports }; !function (doc) {
1152
+  var loaded = 0, fns = [], ol, f = false,
1153
+      testEl = doc.createElement('a'),
1154
+      domContentLoaded = 'DOMContentLoaded',
1155
+      addEventListener = 'addEventListener',
1156
+      onreadystatechange = 'onreadystatechange';
1157
+
1158
+  /^loade|c/.test(doc.readyState) && (loaded = 1);
1159
+
1160
+  function flush() {
1161
+    loaded = 1;
1162
+    for (var i = 0, l = fns.length; i < l; i++) {
1163
+      fns[i]();
1164
+    }
1165
+  }
1166
+  doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() {
1167
+    doc.removeEventListener(domContentLoaded, fn, f);
1168
+    flush();
1169
+  }, f);
1170
+
1171
+
1172
+  testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() {
1173
+    if (/^c/.test(doc.readyState)) {
1174
+      doc.detachEvent(onreadystatechange, ol);
1175
+      flush();
1176
+    }
1177
+  }));
1178
+
1179
+  var domReady = testEl.doScroll ?
1180
+    function (fn) {
1181
+      self != top ?
1182
+        !loaded ?
1183
+          fns.push(fn) :
1184
+          fn() :
1185
+        !function () {
1186
+          try {
1187
+            testEl.doScroll('left');
1188
+          } catch (e) {
1189
+            return setTimeout(function() {
1190
+              domReady(fn);
1191
+            }, 50);
1192
+          }
1193
+          fn();
1194
+        }();
1195
+    } :
1196
+    function (fn) {
1197
+      loaded ? fn() : fns.push(fn);
1198
+    };
1199
+
1200
+    (typeof module !== 'undefined') && module.exports ?
1201
+      (module.exports = {domReady: domReady}) :
1202
+      (window.domReady = domReady);
1203
+
1204
+}(document); $.ender(module.exports); }.call($);
1205
+/*!
1206
+  * qwery.js - copyright @dedfat
1207
+  * https://github.com/ded/qwery
1208
+  * Follow our software http://twitter.com/dedfat
1209
+  * MIT License
1210
+  */
1211
+
1212
+!function (context, doc) {
1213
+
1214
+  var c, i, j, k, l, m, o, p, r, v,
1215
+      el, node, len, found, classes, item, items, token,
1216
+      id = /#([\w\-]+)/,
1217
+      clas = /\.[\w\-]+/g,
1218
+      idOnly = /^#([\w\-]+$)/,
1219
+      classOnly = /^\.([\w\-]+)$/,
1220
+      tagOnly = /^([\w\-]+)$/,
1221
+      tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
1222
+      html = doc.documentElement,
1223
+      tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
1224
+      specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
1225
+      simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
1226
+      attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
1227
+      chunker = new RegExp(simple.source + '(' + attr.source + ')?');
1228
+
1229
+  function array(ar) {
1230
+    r = [];
1231
+    for (i = 0, len = ar.length; i < len; i++) {
1232
+      r[i] = ar[i];
1233
+    }
1234
+    return r;
1235
+  }
1236
+
1237
+  var cache = function () {
1238
+    this.c = {};
1239
+  };
1240
+  cache.prototype = {
1241
+    g: function (k) {
1242
+      return this.c[k] || undefined;
1243
+    },
1244
+    s: function (k, v) {
1245
+      this.c[k] = v;
1246
+      return v;
1247
+    }
1248
+  };
1249
+
1250
+  var classCache = new cache(),
1251
+      cleanCache = new cache(),
1252
+      attrCache = new cache(),
1253
+      tokenCache = new cache();
1254
+
1255
+  function q(query) {
1256
+    return query.match(chunker);
1257
+  }
1258
+
1259
+  function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) {
1260
+    var m, c, k;
1261
+    if (tag && this.tagName.toLowerCase() !== tag) {
1262
+      return false;
1263
+    }
1264
+    if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) {
1265
+      return false;
1266
+    }
1267
+    if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
1268
+      for (i = classes.length; i--;) {
1269
+        c = classes[i].slice(1);
1270
+        if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) {
1271
+          return false;
1272
+        }
1273
+      }
1274
+    }
1275
+    if (wholeAttribute && !value) {
1276
+      o = this.attributes;
1277
+      for (k in o) {
1278
+        if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
1279
+          return this;
1280
+        }
1281
+      }
1282
+    }
1283
+    if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) {
1284
+      return false;
1285
+    }
1286
+    return this;
1287
+  }
1288
+
1289
+  function loopAll(tokens) {
1290
+    var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els,
1291
+        root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc;
1292
+    if (!root) {
1293
+      return r;
1294
+    }
1295
+    els = root.getElementsByTagName(tag);
1296
+    for (i = 0, l = els.length; i < l; i++) {
1297
+      el = els[i];
1298
+      if (item = interpret.apply(el, intr)) {
1299
+        r.push(item);
1300
+      }
1301
+    }
1302
+    return r;
1303
+  }
1304
+
1305
+  function clean(s) {
1306
+    return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'));
1307
+  }
1308
+
1309
+  function checkAttr(qualify, actual, val) {
1310
+    switch (qualify) {
1311
+    case '=':
1312
+      return actual == val;
1313
+    case '^=':
1314
+      return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val))));
1315
+    case '$=':
1316
+      return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$')));
1317
+    case '*=':
1318
+      return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val))));
1319
+    case '~=':
1320
+      return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)')));
1321
+    case '|=':
1322
+      return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)')));
1323
+    }
1324
+    return false;
1325
+  }
1326
+
1327
+  function _qwery(selector) {
1328
+    var r = [], ret = [], i, l,
1329
+        tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr));
1330
+    tokens = tokens.slice(0);
1331
+    if (!tokens.length) {
1332
+      return r;
1333
+    }
1334
+    r = loopAll(tokens);
1335
+    if (!tokens.length) {
1336
+      return r;
1337
+    }
1338
+    // loop through all descendent tokens
1339
+    for (j = 0, l = r.length, k = 0; j < l; j++) {
1340
+      node = r[j];
1341
+      p = node;
1342
+      // loop through each token
1343
+      for (i = tokens.length; i--;) {
1344
+        z: // loop through parent nodes
1345
+        while (p !== html && (p = p.parentNode)) {
1346
+          if (found = interpret.apply(p, q(tokens[i]))) {
1347
+            break z;
1348
+          }
1349
+        }
1350
+      }
1351
+      found && (ret[k++] = node);
1352
+    }
1353
+    return ret;
1354
+  }
1355
+
1356
+  function boilerPlate(selector, _root, fn) {
1357
+    var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
1358
+    if (selector === window || isNode(selector)) {
1359
+      return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
1360
+    }
1361
+    if (selector && typeof selector === 'object' && isFinite(selector.length)) {
1362
+      return array(selector);
1363
+    }
1364
+    if (m = selector.match(idOnly)) {
1365
+      return (el = doc.getElementById(m[1])) ? [el] : [];
1366
+    }
1367
+    if (m = selector.match(tagOnly)) {
1368
+      return array(root.getElementsByTagName(m[1]));
1369
+    }
1370
+    return false;
1371
+  }
1372
+
1373
+  function isNode(el) {
1374
+    return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
1375
+  }
1376
+
1377
+  function uniq(ar) {
1378
+    var a = [], i, j;
1379
+    label:
1380
+    for (i = 0; i < ar.length; i++) {
1381
+      for (j = 0; j < a.length; j++) {
1382
+        if (a[j] == ar[i]) {
1383
+          continue label;
1384
+        }
1385
+      }
1386
+      a[a.length] = ar[i];
1387
+    }
1388
+    return a;
1389
+  }
1390
+
1391
+  function qwery(selector, _root) {
1392
+    var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
1393
+    if (!root || !selector) {
1394
+      return [];
1395
+    }
1396
+    if (m = boilerPlate(selector, _root, qwery)) {
1397
+      return m;
1398
+    }
1399
+    return select(selector, root);
1400
+  }
1401
+
1402
+  var isAncestor = 'compareDocumentPosition' in html ?
1403
+    function (element, container) {
1404
+      return (container.compareDocumentPosition(element) & 16) == 16;
1405
+    } : 'contains' in html ?
1406
+    function (element, container) {
1407
+      container = container == doc || container == window ? html : container;
1408
+      return container !== element && container.contains(element);
1409
+    } :
1410
+    function (element, container) {
1411
+      while (element = element.parentNode) {
1412
+        if (element === container) {
1413
+          return 1;
1414
+        }
1415
+      }
1416
+      return 0;
1417
+    },
1418
+
1419
+  select = (doc.querySelector && doc.querySelectorAll) ?
1420
+    function (selector, root) {
1421
+      if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
1422
+        return array((root).getElementsByClassName(m[1]));
1423
+      }
1424
+      return array((root).querySelectorAll(selector));
1425
+    } :
1426
+    function (selector, root) {
1427
+      var result = [], collection, collections = [], i;
1428
+      if (m = selector.match(tagAndOrClass)) {
1429
+        items = root.getElementsByTagName(m[1] || '*');
1430
+        r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)'));
1431
+        for (i = 0, l = items.length, j = 0; i < l; i++) {
1432
+          r.test(items[i].className) && (result[j++] = items[i]);
1433
+        }
1434
+        return result;
1435
+      }
1436
+      for (i = 0, items = selector.split(','), l = items.length; i < l; i++) {
1437
+        collections[i] = _qwery(items[i]);
1438
+      }
1439
+      for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) {
1440
+        var ret = collection;
1441
+        if (root !== doc) {
1442
+          ret = [];
1443
+          for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) {
1444
+            // make sure element is a descendent of root
1445
+            isAncestor(element, root) && ret.push(element);
1446
+          }
1447
+        }
1448
+        result = result.concat(ret);
1449
+      }
1450
+      return uniq(result);
1451
+    };
1452
+
1453
+  qwery.uniq = uniq;
1454
+  var oldQwery = context.qwery;
1455
+  qwery.noConflict = function () {
1456
+    context.qwery = oldQwery;
1457
+    return this;
1458
+  };
1459
+  context['qwery'] = qwery;
1460
+
1461
+}(this, document);!function (doc) {
1462
+  var q = qwery.noConflict();
1463
+  function create(node, root) {
1464
+    var el = (root || doc).createElement('div'), els = [];
1465
+    el.innerHTML = node;
1466
+    var nodes = el.childNodes;
1467
+    el = el.firstChild;
1468
+    els.push(el);
1469
+    while (el = el.nextSibling) {
1470
+      (el.nodeType == 1) && els.push(el);
1471
+    }
1472
+    return els;
1473
+  };
1474
+  $._select = function (s, r) {
1475
+    return /^\s*</.test(s) ? create(s, r) : q(s, r);
1476
+  };
1477
+  $.ender({
1478
+    find: function (s) {
1479
+      var r = [], i, l, j, k, els;
1480
+      for (i = 0, l = this.length; i < l; i++) {
1481
+        els = q(s, this[i]);
1482
+        for (j = 0, k = els.length; j < k; j++) {
1483
+          r.push(els[j]);
1484
+        }
1485
+      }
1486
+      return $(q.uniq(r));
1487
+    }
1488
+    , and: function (s) {
1489
+      var plus = $(s);
1490
+      for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
1491
+        this[i] = plus[j];
1492
+      }
1493
+      return this;
1494
+    }
1495
+  }, true);
1496
+}(document);
0 1497
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+/*!
1
+  * Ender: open module JavaScript framework
2
+  * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
3
+  * https://ender.no.de
4
+  * License MIT
5
+  * Build: ender -b jeesh
6
+  */
7
+!function(a){function d(a,b){return c(a,b)}function c(a,e){var f;d._select&&typeof a=="string"||a.nodeName||a.length&&"item"in a||a==window?(f=d._select(a,e),f.selector=a):f=isFinite(a.length)?a:[a];return b(f,c)}function b(a,b){for(var c in b)c!="noConflict"&&c!="_VERSION"&&(a[c]=b[c]);return a}b(d,{_VERSION:"0.2.0",ender:function(a,e){b(e?c:d,a)}}),b(c,{forEach:function(a,b){for(var c=0,d=this.length;c<d;++c)c in this&&a.call(b||this[c],this[c],c,this);return this}});var e=a.$;d.noConflict=function(){a.$=e;return this},typeof module!="undefined"&&module.exports&&(module.exports=d),a.ender=a.$=d}(this),!function(a){function F(a){var b=a.relatedTarget;if(!b)return b==null;return b!=this&&b.prefix!="xul"&&!/document/.test(this.toString())&&!p(this,b)}var b=1,c={},d={},e=/over|out/,f=/[^\.]*(?=\..*)\.|.*/,g=/\..*/,h="addEventListener",i="attachEvent",j="removeEventListener",k="detachEvent",l=a.document||{},m=l.documentElement||{},n=m[h],o=n?h:i,p=function(a,b){var c=b.parentNode;while(c!=null){if(c==a)return!0;c=c.parentNode}},q=function(a,c){return a.__uid=c||a.__uid||b++},r=function(a){var b=q(a);return c[b]=c[b]||{}},s=n?function(a,b,c,d){a[d?h:j](b,c,!1)}:function(a,b,c,d,e){e&&d&&(a["_on"+e]=a["_on"+e]||0),a[d?i:k]("on"+b,c)},t=function(b,c,d){return function(e){e=D(e||((this.ownerDocument||this.document||this).parentWindow||a).event);return c.apply(b,[e].concat(d))}},u=function(a,b,c,d,e){return function(f){(d?d.call(this,f):n?!0:f&&f.propertyName=="_on"+c||!f)&&b.apply(a,[f].concat(e))}},v=function(a,b,c,e){var h=b.replace(g,""),i=r(a),j=i[h]||(i[h]={}),k=q(c,b.replace(f,""));if(j[k])return a;var l=G[h];l&&(c=l.condition?u(a,c,h,l.condition):c,h=l.base||h);var m=E[h];c=m?t(a,c,e):u(a,c,h,!1,e),m=n||m;if(h=="unload"){var p=c;c=function(){w(a,h,c)&&p()}}a[o]&&s(a,m?h:"propertychange",c,!0,!m&&h),j[k]=c,c.__uid=k;return h=="unload"?a:d[q(a)]=a},w=function(a,b,c){var d,e,h,i,j=r(a),k=b.replace(g,"");if(!j||!j[k])return a;e=b.replace(f,""),h=e?e.split("."):[c.__uid];for(i=h.length;i--;){d=h[i],c=j[k][d],delete j[k][d];if(a[o]){k=G[k]?G[k].base:k;var l=n||E[k];s(a,l?k:"propertychange",c,!1,!l&&k)}}return a},x=function(a,b,c){return function(d){var e=typeof a=="string"?c(a,this):a;for(var f=d.target;f&&f!=this;f=f.parentNode)for(var g=e.length;g--;)if(e[g]==f)return b.apply(f,arguments)}},y=function(a,b,c,d,e){if(typeof b=="object"&&!c)for(var f in b)b.hasOwnProperty(f)&&y(a,f,b[f]);else{var g=typeof c=="string",h=(g?c:b).split(" ");c=g?x(b,d,e):c;for(var i=h.length;i--;)v(a,h[i],c,Array.prototype.slice.call(arguments,g?4:3))}return a},z=function(a,b,c){var d,e,h,i=typeof b=="string",j=i&&b.replace(f,""),k=w,l=r(a);if(i&&/\s/.test(b)){b=b.split(" ");var m=b.length-1;while(z(a,b[m])&&m--);return a}h=i?b.replace(g,""):b;if(!l||i&&!l[h])return a;if(typeof c=="function")k(a,h,c);else if(j)k(a,b);else{k=h?k:z,e=i&&h,h=h?c||l[h]||h:l;for(d in h)h.hasOwnProperty(d)&&k(a,e||d,h[d])}return a},A=function(a,b,c){var d,e,h,i=b.split(" ");for(h=i.length;h--;){b=i[h].replace(g,"");var j=E[b],k=i[h].replace(f,""),l=r(a)[b];if(k){k=k.split(".");for(e=k.length;e--;)l[k[e]]&&l[k[e]].apply(a,c)}else if(!c&&a[o])B(j,b,a);else for(e in l)l.hasOwnProperty(e)&&l[e].apply(a,c)}return a},B=n?function(b,c,d){evt=document.createEvent(b?"HTMLEvents":"UIEvents"),evt[b?"initEvent":"initUIEvent"](c,!0,!0,a,1),d.dispatchEvent(evt)}:function(a,b,c){a?c.fireEvent("on"+b,document.createEventObject()):c["_on"+b]++},C=function(a,b,c){var d=r(b),e,f;e=c?d[c]:d;for(f in e)e.hasOwnProperty(f)&&(c?y:C)(a,c||b,c?e[f]:f);return a},D=function(a){var b={};if(!a)return b;var c=a.type,d=a.target||a.srcElement;b.preventDefault=D.preventDefault(a),b.stopPropagation=D.stopPropagation(a),b.target=d&&d.nodeType==3?d.parentNode:d;if(~c.indexOf("key"))b.keyCode=a.which||a.keyCode;else if(/click|mouse|menu/i.test(c)){b.rightClick=a.which==3||a.button==2,b.pos={x:0,y:0};if(a.pageX||a.pageY)b.clientX=a.pageX,b.clientY=a.pageY;else if(a.clientX||a.clientY)b.clientX=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,b.clientY=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;e.test(c)&&(b.relatedTarget=a.relatedTarget||a[(c=="mouseover"?"from":"to")+"Element"])}for(var f in a)f in b||(b[f]=a[f]);return b};D.preventDefault=function(a){return function(){a.preventDefault?a.preventDefault():a.returnValue=!1}},D.stopPropagation=function(a){return function(){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}};var E={click:1,dblclick:1,mouseup:1,mousedown:1,contextmenu:1,mousewheel:1,DOMMouseScroll:1,mouseover:1,mouseout:1,mousemove:1,selectstart:1,selectend:1,keydown:1,keypress:1,keyup:1,orientationchange:1,touchstart:1,touchmove:1,touchend:1,touchcancel:1,gesturestart:1,gesturechange:1,gestureend:1,focus:1,blur:1,change:1,reset:1,select:1,submit:1,load:1,unload:1,beforeunload:1,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1},G={mouseenter:{base:"mouseover",condition:F},mouseleave:{base:"mouseout",condition:F},mousewheel:{base:/Firefox/.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel"}},H={add:y,remove:z,clone:C,fire:A},I=function(a){var b=z(a).__uid;b&&(delete d[b],delete c[b])};a[i]&&y(a,"unload",function(){for(var b in d)d.hasOwnProperty(b)&&I(d[b]);a.CollectGarbage&&CollectGarbage()});var J=a.bean;H.noConflict=function(){a.bean=J;return this},typeof module!="undefined"&&module.exports?module.exports=H:a.bean=H}(this),!function(a){var b=bean.noConflict(),c=function(c,d,e){var f=d?[d]:[];return function(){for(var e,g=0,h=this.length;g<h;g++)e=[this[g]].concat(f,Array.prototype.slice.call(arguments,0)),e.length==4&&e.push(a),!arguments.length&&c=="add"&&d&&(c="fire"),b[c].apply(this,e);return this}},d=c("add"),e=c("remove"),f=c("fire"),g={on:d,addListener:d,bind:d,listen:d,delegate:d,unbind:e,unlisten:e,removeListener:e,undelegate:e,emit:f,trigger:f,cloneEvents:c("clone"),hover:function(a,c){for(var d=0,e=this.length;d<e;d++)b.add.call(this,this[d],"mouseenter",a),b.add.call(this,this[d],"mouseleave",c);return this}},h=["blur","change","click","dblclick","error","focus","focusin","focusout","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mouseout","mouseover","mouseup","resize","scroll","select","submit","unload"];for(var i=h.length;i--;){var j=h[i];g[j]=c("add",j)}a.ender(g,!0)}(ender),!function(a){function G(a,b){return new B(a,b)}function F(){return{x:window.pageXOffset||c.scrollLeft,y:window.pageYOffset||c.scrollTop}}function E(a){return a===window||/^(?:body|html)$/i.test(a.tagName)}function D(a,b,c){var d=this[0];if(a==null&&b==null)return(E(d)?F():{x:d.scrollLeft,y:d.scrollTop})[c];E(d)?window.scrollTo(a,b):(a!=null&&(d.scrollLeft=a),b!=null&&(d.scrollTop=b));return this}function C(a,b){return typeof a=="string"?G.create(a,b):w(a)?[a]:a}function B(a){this.length=0,this.original=a;if(a){a=typeof a!="string"&&!a.nodeType&&typeof a.length!="undefined"?a:[a],this.length=a.length;for(var b=0;b<a.length;b++)this[b]=a[b]}}function A(a,b,c){var d=G(a),e=d.css("position"),f=d.offset(),g="relative",h=e==g,i=[parseInt(d.css("left"),10),parseInt(d.css("top"),10)];e=="static"&&(d.css("position",g),e=g),isNaN(i[0])&&(i[0]=h?0:a.offsetLeft),isNaN(i[1])&&(i[1]=h?0:a.offsetTop),b!==null&&(a.style.left=b-f.left+i[0]+"px"),c!==null&&(a.style.top=c-f.top+i[1]+"px")}function z(a,b,c){var e=0,f=b||this,g=[];t(C(d?d(a):a),function(a){t(f,function(b){var d=b.cloneNode(!0);c(a,d),g[e]=d,e++})},this),t(g,function(a,b){f[b]=a}),f.length=e;return f}function x(a,b,c){for(var d=0,e=a.length;d<e;++d)if(b.call(c,a[d],d,a))return!0;return!1}function w(a){return a&&a.nodeName&&a.nodeType==1}function v(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function t(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c||a[d],a[d],d,a);return a}function s(a){return new RegExp("(^|\\s+)"+a+"(\\s+|$)")}var b=a.document,c=b.documentElement,d=null,e="getElementsByTagName",f=/^checked|value|selected$/,g=/select|map|fieldset|table|tbody|tr|colgroup/i,h={select:"option",table:"tbody",tr:"td"},i=/^checked|selected$/,j=/msie/i.test(navigator.userAgent),k=[],l=0,m=/^-?[\d\.]+$/,n="px",o="setAttribute",p="getAttribute",q=/(^\s*|\s*$)/g,r={lineHeight:1,zoom:1,zIndex:1,opacity:1},u=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(q,"")},y=b.defaultView&&b.defaultView.getComputedStyle?function(a,c){var d=null;c=="float"&&(c="cssFloat");var e=b.defaultView.getComputedStyle(a,"");e&&(d=e[v(c)]);return a.style[c]||d}:j&&c.currentStyle?function(a,b){b=v(b),b=b=="float"?"styleFloat":b;if(b=="opacity"){var c=100;try{c=a.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(d){try{c=a.filters("alpha").opacity}catch(e){}}return c/100}var f=a.currentStyle?a.currentStyle[b]:null;return a.style[b]||f}:function(a,b){return a.style[v(b)]};B.prototype={each:function(a,b){return t(this,a,b)},map:function(a,b){var c=[],d,e;for(e=0;e<this.length;e++)d=a.call(this,this[e]),b?b(d)&&c.push(d):c.push(d);return c},first:function(){return G(this[0])},last:function(){return G(this[this.length-1])},html:function(a,b){function f(b,c){while(b.firstChild)b.removeChild(b.firstChild);t(C(a,c),function(a){b.appendChild(a)})}var d=b?c.textContent==null?"innerText":"textContent":"innerHTML",e;return typeof a!="undefined"?this.each(function(b){(e=b.tagName.match(g))?f(b,e[0]):b[d]=a}):this[0]?this[0][d]:""},text:function(a){return this.html(a,1)},addClass:function(a){return this.each(function(b){this.hasClass(b,a)||(b.className=u(b.className+" "+a))},this)},removeClass:function(a){return this.each(function(b){this.hasClass(b,a)&&(b.className=u(b.className.replace(s(a)," ")))},this)},hasClass:function(a,b){return typeof b=="undefined"?x(this,function(b){return s(a).test(b.className)}):s(b).test(a.className)},toggleClass:function(a,b){if(typeof b!="undefined"&&!b)return this;return this.each(function(b){this.hasClass(b,a)?b.className=u(b.className.replace(s(a)," ")):b.className=u(b.className+" "+a)},this)},show:function(a){return this.each(function(b){b.style.display=a||""})},hide:function(a){return this.each(function(a){a.style.display="none"})},append:function(a){return this.each(function(b){t(C(a),function(a){b.appendChild(a)})})},prepend:function(a){return this.each(function(b){var c=b.firstChild;t(C(a),function(a){b.insertBefore(a,c)})})},appendTo:function(a,b){return z.call(this,a,b,function(a,b){a.appendChild(b)})},prependTo:function(a,b){return z.call(this,a,b,function(a,b){a.insertBefore(b,a.firstChild)})},next:function(){return this.related("nextSibling")},previous:function(){return this.related("previousSibling")},related:function(a){return this.map(function(b){b=b[a];while(b&&b.nodeType!==1)b=b[a];return b||0},function(a){return a})},before:function(a){return this.each(function(b){t(G.create(a),function(a){b.parentNode.insertBefore(a,b)})})},after:function(a){return this.each(function(b){t(G.create(a),function(a){b.parentNode.insertBefore(a,b.nextSibling)})})},insertBefore:function(a,b){return z.call(this,a,b,function(a,b){a.parentNode.insertBefore(b,a)})},insertAfter:function(a,b){return z.call(this,a,b,function(a,b){var c=a.nextSibling;c?a.parentNode.insertBefore(b,c):a.parentNode.appendChild(b)})},css:function(a,b){if(b===undefined&&typeof a=="string")return y(this[0],a);var c=a;typeof a=="string"&&(c={},c[a]=b),j&&c.opacity&&(c.filter="alpha(opacity="+c.opacity*100+")",c.zoom=a.zoom||1,delete c.opacity);if(b=c["float"])j?c.styleFloat=b:c.cssFloat=b,delete c["float"];var d=function(a,b,d){for(var e in c)c.hasOwnProperty(e)&&(d=c[e],(b=v(e))&&m.test(d)&&!(b in r)&&(d+=n),a.style[b]=d)};return this.each(d)},offset:function(a,b){if(a||b)return this.each(function(c){A(c,a,b)});var c=this[0],d=c.offsetWidth,e=c.offsetHeight,f=c.offsetTop,g=c.offsetLeft;while(c=c.offsetParent)f=f+c.offsetTop,g=g+c.offsetLeft;return{top:f,left:g,height:e,width:d}},attr:function(a,b){var c=this[0];return typeof b=="undefined"?f.test(a)?i.test(a)&&typeof c[a]=="string"?!0:c[a]:c[p](a):this.each(function(c){a=="value"?c.value=b:c[o](a,b)})},val:function(a){return typeof a=="string"?this.attr("value",a):this[0].value},removeAttr:function(a){return this.each(function(b){b.removeAttribute(a)})},data:function(a,b){var c=this[0];if(typeof b=="undefined"){c[p]("data-node-uid")||c[o]("data-node-uid",++l);var d=c[p]("data-node-uid");k[d]||(k[d]={});return k[d][a]}return this.each(function(c){c[p]("data-node-uid")||c[o]("data-node-uid",++l);var d=c[p]("data-node-uid"),e={};e[a]=b,k[d]=e})},remove:function(){return this.each(function(a){a.parentNode&&a.parentNode.removeChild(a)})},empty:function(){return this.each(function(a){while(a.firstChild)a.removeChild(a.firstChild)})},detach:function(){return this.map(function(a){return a.parentNode.removeChild(a)})},scrollTop:function(a){return D.call(this,null,a,"y")},scrollLeft:function(a){return D.call(this,a,null,"x")}},G.setQueryEngine=function(a){d=a,delete G.setQueryEngine},G.aug=function(a,b){for(var c in a)a.hasOwnProperty(c)&&((b||B.prototype)[c]=a[c])},G.create=function(a,c){return typeof a=="string"?function(){var d=c?h[c.toLowerCase()]:null,e=b.createElement(d||"div"),f=[];if(c){var g=a.match(new RegExp("<"+d+">.+?<\\/"+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<d;c++)b[c].nodeType===1&&(e=b[d=c]);return e},G.viewport=function(){var a=self.innerHeight,b=self.innerWidth;j&&(a=c.clientHeight)&&(b=c.clientWidth);return{width:b,height:a}},G.isAncestor="compareDocumentPosition"in c?function(a,b){return(a.compareDocumentPosition(b)&16)==16}:"contains"in c?function(a,b){return a!==b&&a.contains(b)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1};var H=a.bonzo;G.noConflict=function(){a.bonzo=H;return this},a.bonzo=G}(this),!function(a){function d(a){var b=[],c,d;label:for(c=0;c<a.length;c++){for(d=0;d<b.length;d++)if(b[d]==a[c])continue label;b[b.length]=a[c]}return b}function c(a,b){for(var c=0;c<a.length;c++)if(a[c]===b)return c;return-1}var b=bonzo;b.setQueryEngine(a),a.ender(b),a.ender(b(),!0),a.ender({create:function(c){return a(b.create(c))}}),a.id=function(b){return a([document.getElementById(b)])},a.ender({parents:function(b,e){var f=a(b),g,h,i,j=[];for(g=0,h=this.length;g<h;g++){i=this[g];while(i=i.parentNode)if(c(f,i)!==-1){j.push(i);if(e)break}}return a(d(j))},closest:function(a){return this.parents(a,!0)},first:function(){return a(this[0])},last:function(){return a(this[this.length-1])},next:function(){return a(b(this).next())},previous:function(){return a(b(this).previous())},appendTo:function(a){return b(this.selector).appendTo(a,this)},prependTo:function(a){return b(this.selector).prependTo(a,this)},insertAfter:function(a){return b(this.selector).insertAfter(a,this)},insertBefore:function(a){return b(this.selector).insertBefore(a,this)},siblings:function(){var b,c,d,e=[];for(b=0,c=this.length;b<c;b++){d=this[b];while(d=d.previousSibling)d.nodeType==1&&e.push(d);d=this[b];while(d=d.nextSibling)d.nodeType==1&&e.push(d)}return a(e)},children:function(){var c,e=[];for(i=0,l=this.length;i<l;i++){if(!(c=b.firstChild(this[i])))continue;e.push(c);while(c=c.nextSibling)c.nodeType==1&&e.push(c)}return a(d(e))},height:function(a){return a?this.css("height",a):parseInt(this.css("height"),10)},width:function(a){return a?this.css("width",a):parseInt(this.css("width"),10)}},!0)}(ender||$),!function(){var a={},b={exports:a};!function(a){function k(){c=1;for(var a=0,b=d.length;a<b;a++)d[a]()}var c=0,d=[],e,f=!1,g=a.createElement("a"),h="DOMContentLoaded",i="addEventListener",j="onreadystatechange";/^loade|c/.test(a.readyState)&&(c=1),a[i]&&a[i](h,function b(){a.removeEventListener(h,b,f),k()},f),g.doScroll&&a.attachEvent(j,e=function b(){/^c/.test(a.readyState)&&(a.detachEvent(j,b),k())});var l=g.doScroll?function(a){self!=top?c?a():d.push(a):!function(){try{g.doScroll("left")}catch(b){return setTimeout(function(){l(a)},50)}a()}()}:function(a){c?a():d.push(a)};typeof b!="undefined"&&b.exports?b.exports={domReady:l}:window.domReady=l}(document),$.ender(b.exports)}.call($),!function(a,b){function V(a,c){var d=typeof c=="string"?V(c)[0]:c||b;if(!d||!a)return[];if(h=S(a,c,V))return h;return X(a,d)}function U(a){var b=[],c,d;label:for(c=0;c<a.length;c++){for(d=0;d<b.length;d++)if(b[d]==a[c])continue label;b[b.length]=a[c]}return b}function T(a){return a&&a.nodeType&&(a.nodeType==1||a.nodeType==9)}function S(a,c,d){var e=typeof c=="string"?d(c)[0]:c||b;if(a===window||T(a))return!c||a!==window&&T(e)&&W(a,e)?[a]:[];if(a&&typeof a=="object"&&isFinite(a.length))return G(a);if(h=a.match(w))return(m=b.getElementById(h[1]))?[m]:[];if(h=a.match(y))return G(e.getElementsByTagName(h[1]));return!1}function R(a){var b=[],c=[],d,g,h=L.g(a)||L.s(a,a.split(B));h=h.slice(0);if(!h.length)return b;b=O(h);if(!h.length)return b;for(e=0,g=b.length,f=0;e<g;e++){n=b[e],j=n;for(d=h.length;d--;)z:while(j!==A&&(j=j.parentNode))if(p=N.apply(j,M(h[d])))break z;p&&(c[f++]=n)}return c}function Q(a,b,c){switch(a){case"=":return b==c;case"^=":return b.match(K.g("^="+c)||K.s("^="+c,new RegExp("^"+P(c))));case"$=":return b.match(K.g("$="+c)||K.s("$="+c,new RegExp(P(c)+"$")));case"*=":return b.match(K.g(c)||K.s(c,new RegExp(P(c))));case"~=":return b.match(K.g("~="+c)||K.s("~="+c,new RegExp("(?:^|\\s+)"+P(c)+"(?:\\s+|$)")));case"|=":return b.match(K.g("|="+c)||K.s("|="+c,new RegExp("^"+P(c)+"(-|$)")))}return!1}function P(a){return J.g(a)||J.s(a,a.replace(C,"\\$1"))}function O(a){var c=[],d=a.pop(),e=M(d),f=e[1]||"*",g,i,j,k=a.length&&(h=a[0].match(w))?b.getElementById(h[1]):b;if(!k)return c;j=k.getElementsByTagName(f);for(g=0,i=j.length;g<i;g++)m=j[g],(r=N.apply(m,e))&&c.push(r);return c}function N(a,b,c,e,f,g,h){var j,k,l;if(b&&this.tagName.toLowerCase()!==b)return!1;if(c&&(j=c.match(u))&&j[1]!==this.id)return!1;if(c&&(q=c.match(v)))for(d=q.length;d--;){k=q[d].slice(1);if(!(I.g(k)||I.s(k,new RegExp("(^|\\s+)"+k+"(\\s+|$)"))).test(this.className))return!1}if(e&&!h){i=this.attributes;for(l in i)if(Object.prototype.hasOwnProperty.call(i,l)&&(i[l].name||l)==f)return this}if(e&&!Q(g,this.getAttribute(f)||"",h))return!1;return this}function M(a){return a.match(F)}function G(a){k=[];for(d=0,o=a.length;d<o;d++)k[d]=a[d];return k}var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=/#([\w\-]+)/,v=/\.[\w\-]+/g,w=/^#([\w\-]+$)/,x=/^\.([\w\-]+)$/,y=/^([\w\-]+)$/,z=/^([\w]+)?\.([\w\-]+)$/,A=b.documentElement,B=/\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,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<g;j++)k.test(s[j].className)&&(d[e++]=s[j]);return d}for(j=0,s=a.split(","),g=s.length;j<g;j++)i[j]=R(s[j]);for(j=0,g=i.length;j<g&&(f=i[j]);j++){var l=f;if(c!==b){l=[];for(e=0,h=f.length;e<h&&(element=f[e]);e++)W(element,c)&&l.push(element)}d=d.concat(l)}return U(d)};V.uniq=U;var Y=a.qwery;V.noConflict=function(){a.qwery=Y;return this},a.qwery=V}(this,document),!function(a){function c(b,c){var d=(c||a).createElement("div"),e=[];d.innerHTML=b;var f=d.childNodes;d=d.firstChild,e.push(d);while(d=d.nextSibling)d.nodeType==1&&e.push(d);return e}var b=qwery.noConflict();$._select=function(a,d){return/^\s*</.test(a)?c(a,d):b(a,d)},$.ender({find:function(a){var c=[],d,e,f,g,h;for(d=0,e=this.length;d<e;d++){h=b(a,this[d]);for(f=0,g=h.length;f<g;f++)c.push(h[f])}return $(b.uniq(c))},and:function(a){var b=$(a);for(var c=this.length,d=0,e=this.length+b.length;c<e;c++,d++)this[c]=b[d];return this}},!0)}(document)
0 8
\ No newline at end of file
1 9
new file mode 100644
... ...
@@ -0,0 +1,1529 @@
0
+// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8
1
+var DOMAssistant = function () {
2
+	var HTMLArray = function () {
3
+		// Constructor
4
+	},
5
+	w = window, _$ = w.$, _$$ = w.$$,
6
+	isIE = /*@cc_on!@*/false,
7
+	isIE5 = isIE && parseFloat(navigator.appVersion) < 6,
8
+	sort, tagCache = {}, lastCache = {}, useCache = true,
9
+	slice = Array.prototype.slice,
10
+	camel = {
11
+		"accesskey": "accessKey",
12
+		"class": "className",
13
+		"colspan": "colSpan",
14
+		"for": "htmlFor",
15
+		"maxlength": "maxLength",
16
+		"readonly": "readOnly",
17
+		"rowspan": "rowSpan",
18
+		"tabindex": "tabIndex",
19
+		"valign": "vAlign",
20
+		"cellspacing": "cellSpacing",
21
+		"cellpadding": "cellPadding"
22
+	},
23
+	regex = {
24
+		rules: /\s*,\s*/g,
25
+		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]*\(.+\)))\))?)*)?([+>~])?/,
26
+		selectorSplit: /(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g,
27
+		id: /^#([-\w\u00C0-\uFFFF=$]+)$/,
28
+		tag: /^\w+/,
29
+		relation: /^[+>~]$/,
30
+		pseudo: /^:(\w[-\w]*)(\((.+)\))?$/,
31
+		pseudos: /:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g,
32
+		attribs: /\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g,
33
+		classes: /\.([-\w\u00C0-\uFFFF]+)/g,
34
+		quoted: /^["'](.*)["']$/,
35
+		nth: /^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/,
36
+		special: /(:check|:enabl|\bselect)ed\b/
37
+	},
38
+	navigate = function (node, direction, checkTagName) {
39
+		var oldName = node.tagName;
40
+		while ((node = node[direction + "Sibling"]) && (node.nodeType !== 1 || (checkTagName? node.tagName !== oldName : node.tagName === "!"))) {}
41
+		return node;
42
+	},
43
+	def = function (obj) {
44
+		return typeof obj !== "undefined";
45
+	},
46
+	sortDocumentOrder = function (elmArray) {
47
+		return (sortDocumentOrder = elmArray[0].compareDocumentPosition? function (elmArray) { return elmArray.sort( function (a, b) { return 3 - (a.compareDocumentPosition(b) & 6); } ); } :
48
+			isIE? function (elmArray) { return elmArray.sort( function (a, b) { return a.sourceIndex - b.sourceIndex; } ); } :
49
+			function (elmArray) { return elmArray.sort( function (a, b) {
50
+				var range1 = document.createRange(), range2 = document.createRange();
51
+				range1.setStart(a, 0);
52
+				range1.setEnd(a, 0);
53
+				range2.setStart(b, 0);
54
+				range2.setEnd(b, 0);
55
+				return range1.compareBoundaryPoints(Range.START_TO_END, range2);
56
+			} ); })(elmArray);
57
+	};
58
+	var pushAll = function (set1, set2) {
59
+		set1.push.apply(set1, slice.apply(set2));
60
+		return set1;
61
+	};
62
+	if (isIE) {
63
+		pushAll = function (set1, set2) {
64
+			if (set2.slice) {
65
+				return set1.concat(set2);
66
+			}
67
+			var i=0, item;
68
+			while ((item = set2[i++])) {
69
+				set1[set1.length] = item;
70
+			}
71
+			return set1;
72
+		};
73
+	}
74
+	return {
75
+		isIE : isIE,
76
+		camel : camel,
77
+		def : def,
78
+		allMethods : [],
79
+		publicMethods : [
80
+			"prev",
81
+			"next",
82
+			"hasChild",
83
+			"cssSelect",
84
+			"elmsByClass",
85
+			"elmsByAttribute",
86
+			"elmsByTag"
87
+		],
88
+		
89
+		harmonize : function () {
90
+			w.$ = _$;
91
+			w.$$ = _$$;
92
+			return this;
93
+		},
94
+		
95
+		initCore : function () {
96
+			this.applyMethod.call(w, "$", this.$);
97
+			this.applyMethod.call(w, "$$", this.$$);
98
+			w.DOMAssistant = this;
99
+			if (isIE) {
100
+				HTMLArray = Array;
101
+			}
102
+			HTMLArray.prototype = [];
103
+			(function (H) {
104
+				H.each = function (fn, context) {
105
+					for (var i=0, il=this.length; i<il; i++) {
106
+						if (fn.call(context || this[i], this[i], i, this) === false) {
107
+							break;
108
+						}
109
+					}
110
+					return this;
111
+				};
112
+				H.first = function () {
113
+					return def(this[0])? DOMAssistant.addMethodsToElm(this[0]) : null;
114
+				};
115
+				H.end = function () {
116
+					return this.previousSet;
117
+				};
118
+				H.indexOf = H.indexOf || function (elm) {
119
+					for (var i=0, il=this.length; i<il; i++) {
120
+						if (i in this && this[i] === elm) {
121
+							return i;
122
+						}
123
+					}
124
+					return -1;
125
+				};
126
+				H.map = function (fn, context) {
127
+					var res = [];
128
+					for (var i=0, il=this.length; i<il; i++) {
129
+						if (i in this) {
130
+							res[i] = fn.call(context || this[i], this[i], i, this);
131
+						}
132
+					}
133
+					return res;
134
+				};
135
+				H.filter = function (fn, context) {
136
+					var res = new HTMLArray();
137
+					res.previousSet = this;
138
+					for (var i=0, il=this.length; i<il; i++) {
139
+						if (i in this && fn.call(context || this[i], this[i], i, this)) {
140
+							res.push(this[i]);
141
+						}
142
+					}
143
+					return res;
144
+				};
145
+				H.every = function (fn, context) {
146
+					for (var i=0, il=this.length; i<il; i++) {
147
+						if (i in this && !fn.call(context || this[i], this[i], i, this)) {
148
+							return false;
149
+						}
150
+					}
151
+					return true;
152
+				};
153
+				H.some = function (fn, context) {
154
+					for (var i=0, il=this.length; i<il; i++) {
155
+						if (i in this && fn.call(context || this[i], this[i], i, this)) {
156
+							return true;
157
+						}
158
+					}
159
+					return false;
160
+				};
161
+			})(HTMLArray.prototype);
162
+			this.attach(this);
163
+		},
164
+		
165
+		addMethods : function (name, method) {
166
+			if (!def(this.allMethods[name])) {
167
+				this.allMethods[name] = method;
168
+				this.addHTMLArrayPrototype(name, method);
169
+			}
170
+		},
171
+		
172
+		addMethodsToElm : function (elm) {
173
+			for (var method in this.allMethods) {
174
+				if (def(this.allMethods[method])) {
175
+					this.applyMethod.call(elm, method, this.allMethods[method]);
176
+				}
177
+			}
178
+			return elm;
179
+		},
180
+		
181
+		applyMethod : function (method, func) {
182
+			if (typeof this[method] !== "function") {
183
+				this[method] = func;
184
+			}
185
+		},
186
+		
187
+		attach : function (plugin) {
188
+			var publicMethods = plugin.publicMethods;
189
+			if (!def(publicMethods)) {
190
+				for (var method in plugin) {
191
+					if (method !== "init" && def(plugin[method])) {
192
+						this.addMethods(method, plugin[method]);
193
+					}
194
+				}
195
+			}
196
+			else if (publicMethods.constructor === Array) {
197
+				for (var i=0, current; (current=publicMethods[i]); i++) {
198
+					this.addMethods(current, plugin[current]);
199
+				}
200
+			}
201
+			if (typeof plugin.init === "function") {
202
+				plugin.init();
203
+			}
204
+		},
205
+		
206
+		addHTMLArrayPrototype : function (name, method) {
207
+			HTMLArray.prototype[name] = function () {
208
+				var elmsToReturn = new HTMLArray();
209
+				elmsToReturn.previousSet = this;
210
+				for (var i=0, il=this.length; i<il; i++) {
211
+					elmsToReturn.push(method.apply(DOMAssistant.$$(this[i]), arguments));
212
+				}
213
+				return elmsToReturn;
214
+			};
215
+		},
216
+		
217
+		cleanUp : function (elm) {
218
+			var children = elm.all || elm.getElementsByTagName("*");
219
+			for (var i=0, child; (child=children[i++]);) {
220
+				if (child.hasData && child.hasData()) {
221
+					if (child.removeEvent) { child.removeEvent(); }
222
+					child.unstore();
223
+				}
224
+			}
225
+			elm.innerHTML = "";
226
+		},
227
+		
228
+		setCache : function (cache) {
229
+			useCache = cache;
230
+		},
231
+		
232
+		$ : function () {
233
+			var obj = arguments[0];
234
+			if (arguments.length === 1 && (typeof obj === "object" || (typeof obj === "function" && !!obj.nodeName))) {
235
+				return DOMAssistant.$$(obj);
236
+			}
237
+			var elm = !!obj? new HTMLArray() : null;
238
+			for (var i=0, arg, idMatch; (arg=arguments[i]); i++) {
239
+				if (typeof arg === "string") {
240
+					arg = arg.replace(/^[^#\(]*(#)/, "$1");
241
+					if (regex.id.test(arg)) {
242
+						if ((idMatch = DOMAssistant.$$(arg.substr(1), false))) {
243
+							elm.push(idMatch);
244
+						}
245
+					}
246
+					else {
247
+						var doc = (document.all || document.getElementsByTagName("*")).length;
248
+						elm = (!document.querySelectorAll && useCache && lastCache.rule && lastCache.rule === arg && lastCache.doc === doc)? lastCache.elms : pushAll(elm, DOMAssistant.cssSelection.call(document, arg));
249
+						lastCache = { rule: arg, elms: elm, doc: doc };
250
+					}
251
+				}
252
+			}
253
+			return elm;
254
+		},
255
+		
256
+		$$ : function (id, addMethods) {
257
+			var elm = (typeof id === "object" || typeof id === "function" && !!id.nodeName)? id : document.getElementById(id),
258
+				applyMethods = def(addMethods)? addMethods : true,
259
+				getId = function(el) { var eid = el.id; return typeof eid !== "object"? eid : el.attributes.id.nodeValue; };
260
+			if (typeof id === "string" && elm && getId(elm) !== id) {
261
+				elm = null;
262
+				for (var i=0, item; (item=document.all[i]); i++) {
263
+					if (getId(item) === id) {
264
+						elm = item;
265
+						break;
266
+					}
267
+				}
268
+			}
269
+			if (elm && applyMethods && !elm.next) {
270
+				DOMAssistant.addMethodsToElm(elm);
271
+			}
272
+			return elm;
273
+		},
274
+		
275
+		prev : function () {
276
+			return DOMAssistant.$$(navigate(this, "previous"));
277
+		},
278
+
279
+		next : function () {
280
+			return DOMAssistant.$$(navigate(this, "next"));
281
+		},
282
+		
283
+		hasChild: function (elm) {
284
+			return this === document || this !== elm && (this.contains? this.contains(elm) : !!(this.compareDocumentPosition(elm) & 16));
285
+		},
286
+
287
+		getSequence : function (expression) {
288
+			var start, add = 2, max = -1, modVal = -1,
289
+				pseudoVal = regex.nth.exec(expression.replace(/^0n\+/, "").replace(/^2n$/, "even").replace(/^2n+1$/, "odd"));
290
+			if (!pseudoVal) {
291
+				return null;
292
+			}
293
+			if (pseudoVal[2]) {	// odd or even
294
+				start = (pseudoVal[2] === "odd")? 1 : 2;
295
+				modVal = (start === 1)? 1 : 0;
296
+			}
297
+			else if (pseudoVal[3]) {	// single digit
298
+				start = max = parseInt(pseudoVal[3], 10);
299
+				add = 0;
300
+			}
301
+			else if (pseudoVal[4]) {	// an+b
302
+				add = pseudoVal[6]? parseInt(pseudoVal[6], 10) : 1;
303
+				start = pseudoVal[7]? parseInt(pseudoVal[7], 10) : 0;
304
+				while (start < 1) {
305
+					start += add;
306
+				}
307
+				modVal = (start >= add)? (start - add) % add : start;
308
+			}
309
+			else if (pseudoVal[8]) {	// -an+b
310
+				add = pseudoVal[10]? parseInt(pseudoVal[10], 10) : 1;
311
+				start = max = parseInt(pseudoVal[11], 10);
312
+				while (start > add) {
313
+					start -= add;
314
+				}
315
+				modVal = (max >= add)? (max - add) % add : max;
316
+			}
317
+			return { start: start, add: add, max: max, modVal: modVal };
318
+		},
319
+		
320
+		cssByDOM : function (cssRule) {
321
+			var prevParents, currentRule, cssSelectors, childOrSiblingRef, nextTag, nextRegExp, current, previous, prevParent, notElm, addElm, iteratorNext, childElm, sequence, anyTag,
322
+				elm = new HTMLArray(), index = elm.indexOf, prevElm = [], matchingElms = [], cssRules = cssRule.replace(regex.rules, ",").split(","), splitRule = {};
323
+			function clearAdded (elm) {
324
+				elm = elm || prevElm;
325
+				for (var n=elm.length; n--;) {
326
+					elm[n].added = null;
327
+					elm[n].removeAttribute("added");
328
+				}
329
+			}
330
+			function clearChildElms () {
331
+				for (var n=prevParents.length; n--;) {
332
+					prevParents[n].childElms = null;
333
+				}
334
+			}
335
+			function subtractArray (arr1, arr2) {
336
+				for (var i=0, src1; (src1=arr1[i]); i++) {
337
+					var found = false;
338
+					for (var j=0, src2; (src2=arr2[j]); j++) {
339
+						if (src2 === src1) {
340
+							found = true;
341
+							arr2.splice(j, 1);
342
+							break;
343
+						}
344
+					}
345
+					if (found) {
346
+						arr1.splice(i--, 1);
347
+					}
348
+				}
349
+				return arr1;
350
+			}
351
+			function getAttr (elm, attr) {
352
+				return (isIE || regex.special.test(attr))? elm[camel[attr.toLowerCase()] || attr] : elm.getAttribute(attr, 2);
353
+			}
354
+			function attrToRegExp (attrVal, substrOperator) {
355
+				attrVal = attrVal? attrVal.replace(regex.quoted, "$1").replace(/(\.|\[|\])/g, "\\$1") : null;
356
+				return {
357
+					"^": "^" + attrVal,
358
+					"$": attrVal + "$",
359
+					"*": attrVal,
360
+					"|": "^" + attrVal + "(\\-\\w+)*$",
361
+					"~": "\\b" + attrVal + "\\b"
362
+				}[substrOperator] || (attrVal !== null? "^" + attrVal + "$" : attrVal);
363
+			}
364
+			function notComment(el) {
365
+				return (el || this).tagName !== "!";
366
+			}
367
+			function getTags (tag, context) {
368
+				return isIE5? (tag === "*"? context.all : context.all.tags(tag)) : context.getElementsByTagName(tag);
369
+			}
370
+			function getElementsByTagName (tag, parent) {
371
+				tag = tag || "*";
372
+				parent = parent || document;
373
+				return (parent === document || parent.lastModified)? tagCache[tag] || (tagCache[tag] = getTags(tag, document)) : getTags(tag, parent);
374
+			}
375
+			function getElementsByPseudo (previousMatch, pseudoClass, pseudoValue) {
376
+				prevParents = [];
377
+				var pseudo = pseudoClass.split("-"), matchingElms = [], idx = 0, checkNodeName = /\-of\-type$/.test(pseudoClass), recur,
378
+				match = {
379
+					first: function(el) { return !navigate(el, "previous", checkNodeName); },
380
+					last: function(el) { return !navigate(el, "next", checkNodeName); },
381
+					empty: function(el) { return !el.firstChild; },
382
+					enabled: function(el) { return !el.disabled && el.type !== "hidden"; },
383
+					disabled: function(el) { return el.disabled; },
384
+					checked: function(el) { return el.checked; },
385
+					contains: function(el) { return (el.innerText || el.textContent || "").indexOf(pseudoValue.replace(regex.quoted, "$1")) > -1; },
386
+					other: function(el) { return getAttr(el, pseudoClass) === pseudoValue; }
387
+				};
388
+				function basicMatch(key) {
389
+					while ((previous=previousMatch[idx++])) {
390
+						if (notComment(previous) && match[key](previous)) {
391
+							matchingElms[matchingElms.length] = previous;
392
+						}
393
+					}
394
+					return matchingElms;
395
+				}
396
+				var word = pseudo[0] || null;
397
+				if (word && match[word]) {
398
+					return basicMatch(word);
399
+				}
400
+				switch (word) {
401
+					case "only":
402
+						var kParent, kTag;
403
+						while ((previous=previousMatch[idx++])) {
404
+							prevParent = previous.parentNode;
405
+							var q = previous.nodeName;
406
+							if (prevParent !== kParent || q !== kTag) {
407
+								if (match.first(previous) && match.last(previous)) {
408
+									matchingElms[matchingElms.length] = previous;
409
+								}
410
+								kParent = prevParent;
411
+								kTag = q;
412
+							}
413
+						}
414
+						break;
415
+					case "nth":
416
+						if (pseudoValue === "n") {
417
+							matchingElms = previousMatch;
418
+						}
419
+						else {
420
+							var direction = (pseudo[1] === "last")? ["lastChild", "previousSibling"] : ["firstChild", "nextSibling"];
421
+							sequence = DOMAssistant.getSequence(pseudoValue);
422
+							if (sequence) {
423
+								while ((previous=previousMatch[idx++])) {
424
+									prevParent = previous.parentNode;
425
+									prevParent.childElms = prevParent.childElms || {};
426
+									var p = previous.nodeName;
427
+									if (!prevParent.childElms[p]) {
428
+										var childCount = 0;
429
+										iteratorNext = sequence.start;
430
+										childElm = prevParent[direction[0]];
431
+										while (childElm && (sequence.max < 0 || iteratorNext <= sequence.max)) {
432
+											var c = childElm.nodeName;
433
+											if ((checkNodeName && c === p) || (!checkNodeName && childElm.nodeType === 1 && c !== "!")) {
434
+												if (++childCount === iteratorNext) {
435
+													if (c === p) { matchingElms[matchingElms.length] = childElm; }
436
+													iteratorNext += sequence.add;
437
+												}
438
+											}
439
+											childElm = childElm[direction[1]];
440
+										}
441
+										if (anyTag) { sort++; }
442
+										prevParent.childElms[p] = true;
443
+										prevParents[prevParents.length] = prevParent;
444
+									}
445
+								}
446
+								clearChildElms();
447
+							}
448
+						}
449
+						break;
450
+					case "target":
451
+						var hash = document.location.hash.slice(1);
452
+						if (hash) {
453
+							while ((previous=previousMatch[idx++])) {
454
+								if (getAttr(previous, "name") === hash || getAttr(previous, "id") === hash) {
455
+									matchingElms[matchingElms.length] = previous;
456
+									break;
457
+								}
458
+							}
459
+						}
460
+						break;
461
+					case "not":
462
+						if ((recur = regex.pseudo.exec(pseudoValue))) {
463
+							matchingElms = subtractArray(previousMatch, getElementsByPseudo(previousMatch, recur[1]? recur[1].toLowerCase() : null, recur[3] || null));
464
+						}
465
+						else {
466
+							for (var re in regex) {
467
+								if (regex[re].lastIndex) {
468
+									regex[re].lastIndex = 0;
469
+								}
470
+							}
471
+							pseudoValue = pseudoValue.replace(regex.id, "[id=$1]");
472
+							var notTag = regex.tag.exec(pseudoValue);
473
+							var notClass = regex.classes.exec(pseudoValue);
474
+							var notAttr = regex.attribs.exec(pseudoValue);
475
+							var notRegExp = new RegExp(notAttr? attrToRegExp(notAttr[4], notAttr[2]) : "(^|\\s)" + (notTag? notTag[0] : notClass? notClass[1] : "") + "(\\s|$)", "i");
476
+							while ((notElm=previousMatch[idx++])) {
477
+								addElm = null;
478
+								if (notTag && !notRegExp.test(notElm.nodeName) || notClass && !notRegExp.test(notElm.className)) {
479
+									addElm = notElm;
480
+								}
481
+								else if (notAttr) {
482
+									var att = getAttr(notElm, notAttr[1]);
483
+									if (!def(att) || att === false || typeof att === "string" && !notRegExp.test(att)) {
484
+										addElm = notElm;
485
+									}
486
+								}
487
+								if (addElm && !addElm.added) {
488
+									addElm.added = true;
489
+									matchingElms[matchingElms.length] = addElm;
490
+								}
491
+							}
492
+						}
493
+						break;
494
+					default: return basicMatch("other");
495
+				}
496
+				return matchingElms;
497
+			}
498
+			function pushUnique(set1, set2) {
499
+				var i=0, s=set1, item;
500
+				while ((item = set2[i++])) {
501
+					if (!s.length || s.indexOf(item) < 0) {
502
+						set1.push(item);
503
+					}
504
+				}
505
+				return set1;
506
+			}
507
+			sort = -1;
508
+			for (var a=0, tagBin=[]; (currentRule=cssRules[a]); a++) {
509
+				if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || a && index.call(cssRules.slice(0, a), currentRule) > -1) { continue; }
510
+				prevElm = [this];
511
+				for (var i=0, rule; (rule=cssSelectors[i]); i++) {
512
+					matchingElms = [];
513
+					if ((childOrSiblingRef = regex.relation.exec(rule))) {
514
+						var idElm = null, nextWord = cssSelectors[i+1];
515
+						if ((nextTag = regex.tag.exec(nextWord))) {
516
+							nextTag = nextTag[0];
517
+							nextRegExp = new RegExp("(^|\\s)" + nextTag + "(\\s|$)", "i");
518
+						}
519
+						else if (regex.id.test(nextWord)) {
520
+							idElm = DOMAssistant.$(nextWord) || null;
521
+						}
522
+						for (var j=0, prevRef; (prevRef=prevElm[j]); j++) {
523
+							switch (childOrSiblingRef[0]) {
524
+								case ">":
525
+									var children = idElm || getElementsByTagName(nextTag, prevRef);
526
+									for (var k=0, child; (child=children[k]); k++) {
527
+										if (child.parentNode === prevRef) {
528
+											matchingElms[matchingElms.length] = child;
529
+										}
530
+									}
531
+									break;
532
+								case "+":
533
+									if ((prevRef = navigate(prevRef, "next"))) {
534
+										if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) {
535
+											matchingElms[matchingElms.length] = prevRef;
536
+										}
537
+									}
538
+									break;
539
+								case "~":
540
+									while ((prevRef = prevRef.nextSibling) && !prevRef.added) {
541
+										if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) {
542
+											prevRef.added = true;
543
+											matchingElms[matchingElms.length] = prevRef;
544
+										}
545
+									}
546
+									break;
547
+							}
548
+						}
549
+						prevElm = matchingElms;
550
+						clearAdded();
551
+						rule = cssSelectors[++i];
552
+						if (/^\w+$/.test(rule) || regex.id.test(rule)) {
553
+							continue;
554
+						}
555
+						prevElm.skipTag = true;
556
+					}
557
+					var cssSelector = regex.selector.exec(rule);
558
+					splitRule = {
559
+						tag : cssSelector[1]? cssSelector[1] : "*",
560
+						id : cssSelector[2],
561
+						allClasses : cssSelector[3],
562
+						allAttr : cssSelector[5],
563
+						allPseudos : cssSelector[10]
564
+					};
565
+					anyTag = (splitRule.tag === "*");
566
+					if (splitRule.id) {
567
+						var u = 0, DOMElm = document.getElementById(splitRule.id.slice(1));
568
+						if (DOMElm) {
569
+							while (prevElm[u] && !DOMAssistant.hasChild.call(prevElm[u], DOMElm)) { u++; }
570
+							matchingElms = (u < prevElm.length && (anyTag || splitRule.tag === DOMElm.tagName.toLowerCase()))? [DOMElm] : [];
571
+						}
572
+						prevElm = matchingElms;
573
+					}
574
+					else if (splitRule.tag && !prevElm.skipTag) {
575
+						if (i===0 && !matchingElms.length && prevElm.length === 1) {
576
+							prevElm = matchingElms = pushAll([], getElementsByTagName(splitRule.tag, prevElm[0]));
577
+						}
578
+						else {
579
+							for (var l=0, ll=prevElm.length, tagCollectionMatches, tagMatch; l<ll; l++) {
580
+								tagCollectionMatches = getElementsByTagName(splitRule.tag, prevElm[l]);
581
+								for (var m=0; (tagMatch=tagCollectionMatches[m]); m++) {
582
+									if (!tagMatch.added) {
583
+										tagMatch.added = true;
584
+										matchingElms[matchingElms.length] = tagMatch;
585
+									}
586
+								}
587
+							}
588
+							prevElm = matchingElms;
589
+							clearAdded();
590
+						}
591
+					}
592
+					if (!matchingElms.length) {
593
+						break;
594
+					}
595
+					prevElm.skipTag = false;
596
+					if (splitRule.allClasses) {
597
+						var n = 0, matchingClassElms = [], allClasses = splitRule.allClasses.split(".").slice(1);
598
+						while ((current = prevElm[n++])) {
599
+							var matchCls = true, elmClass = current.className;
600
+							if (elmClass && elmClass.length) {
601
+								elmClass = elmClass.split(" ");
602
+								for (var o=allClasses.length; o--;) {
603
+									if (elmClass.indexOf(allClasses[o]) < 0) {
604
+										matchCls = false;
605
+										break;
606
+									}
607
+								}
608
+								if (matchCls) {
609
+									matchingClassElms[matchingClassElms.length] = current;
610
+								}
611
+							}
612
+						}
613
+						prevElm = matchingElms = matchingClassElms;
614
+					}
615
+					if (splitRule.allAttr) {
616
+						var matchAttr, r = 0, regExpAttributes = [], matchingAttributeElms = [], allAttr = splitRule.allAttr.match(regex.attribs);
617
+						for (var specialStrip = /^\[(selected|readonly)(\s*=.+)?\]$/, q=0, ql=allAttr.length, attributeMatch, attrVal; q<ql; q++) {
618
+							regex.attribs.lastIndex = 0;
619
+							attributeMatch = regex.attribs.exec(allAttr[q].replace(specialStrip, "[$1]"));
620
+							attrVal = attrToRegExp(attributeMatch[4], attributeMatch[2] || null);
621
+							regExpAttributes[q] = [(attrVal? new RegExp(attrVal) : null), attributeMatch[1]];
622
+						}
623
+						while ((current = matchingElms[r++])) {
624
+							for (var s=0, sl=regExpAttributes.length; s<sl; s++) {
625
+								var attributeRegExp = regExpAttributes[s][0], currentAttr = getAttr(current, regExpAttributes[s][1]);
626
+								matchAttr = true;
627
+								if (!attributeRegExp && currentAttr === true) { continue; }
628
+								if ((!attributeRegExp && (!currentAttr || typeof currentAttr !== "string" || !currentAttr.length)) || (!!attributeRegExp && !attributeRegExp.test(currentAttr))) {
629
+									matchAttr = false;
630
+									break;
631
+								}
632
+							}
633
+							if (matchAttr) {
634
+								matchingAttributeElms[matchingAttributeElms.length] = current;
635
+							}
636
+						}
637
+						prevElm = matchingElms = matchingAttributeElms;
638
+					}
639
+					if (splitRule.allPseudos) {
640
+						var allPseudos = splitRule.allPseudos.match(regex.pseudos);
641
+						for (var t=0, tl=allPseudos.length; t<tl; t++) {
642
+							regex.pseudos.lastIndex = 0;
643
+							var pseudo = regex.pseudos.exec(allPseudos[t]);
644
+							var pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null;
645
+							var pseudoValue = pseudo[3] || null;
646
+							matchingElms = getElementsByPseudo(matchingElms, pseudoClass, pseudoValue);
647
+							clearAdded(matchingElms);
648
+						}
649
+						prevElm = matchingElms;
650
+					}
651
+				}
652
+				elm = ((tagBin.length && (anyTag || index.call(tagBin, splitRule.tag) >= 0 || index.call(tagBin, "*") >= 0))? pushUnique : pushAll)(elm, prevElm);
653
+				tagBin.push(splitRule.tag);
654
+				if (isIE && anyTag) { elm = elm.filter(notComment); }
655
+			}
656
+			return ((elm.length > 1 && cssRules.length > 1) || sort > 0)? sortDocumentOrder(elm) : elm;
657
+		},
658
+		
659
+		cssByXpath : function (cssRule) {
660
+			var ns = { xhtml: "http://www.w3.org/1999/xhtml" },
661
+				prefix = (document.documentElement.namespaceURI === ns.xhtml)? "xhtml:" : "",
662
+				nsResolver = function lookupNamespaceURI (prefix) {
663
+					return ns[prefix] || null;
664
+				};
665
+			DOMAssistant.cssByXpath = function (cssRule) {
666
+				var currentRule, cssSelectors, xPathExpression, cssSelector, splitRule, sequence,
667
+					elm = new HTMLArray(), cssRules = cssRule.replace(regex.rules, ",").split(",");
668
+				function attrToXPath (wrap) {
669
+					var pre = wrap? "[" : "", post = wrap? "]" : "";
670
+					return function (match, p1, p2, p3, p4) {
671
+						p4 = (p4 || "").replace(regex.quoted, "$1");
672
+						if (p1 === p4 && p1 === "readonly") { p3 = null; }
673
+						return pre + ({
674
+							"^": "starts-with(@" + p1 + ", \"" + p4 + "\")",
675
+							"$": "substring(@" + p1 + ", (string-length(@" + p1 + ") - " + (p4.length - 1) + "), " + p4.length + ") = \"" + p4 + "\"",
676
+							"*": "contains(concat(\" \", @" + p1 + ", \" \"), \"" + p4 + "\")",
677
+							"|": "@" + p1 + "=\"" + p4 + "\" or starts-with(@" + p1 + ", \"" + p4 + "-\")",
678
+							"~": "contains(concat(\" \", @" + p1 + ", \" \"), \" " + p4 + " \")"
679
+						}[p2] || ("@" + p1 + (p3? "=\"" + p4 + "\"" : ""))) + post;
680
+					};
681
+				}
682
+				function pseudoToXPath (tag, pseudoClass, pseudoValue) {
683
+					tag = /\-child$/.test(pseudoClass)? "*" : tag;
684
+					var pseudo = pseudoClass.split("-"), position = ((pseudo[1] === "last")? "(count(following-sibling::" : "(count(preceding-sibling::") + tag + ") + 1)", recur, hash;
685
+					switch (pseudo[0]) {
686
+						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: "")) : "";
687
+						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())) + ")";
688
+						case "first": return "not(preceding-sibling::" + tag + ")";
689
+						case "last": return "not(following-sibling::" + tag + ")";
690
+						case "only": return "not(preceding-sibling::" + tag + " or following-sibling::" + tag + ")";
691
+						case "empty": return "not(child::*) and not(text())";
692
+						case "contains": return "contains(., \"" + pseudoValue.replace(regex.quoted, "$1") + "\")";
693
+						case "enabled": return "not(@disabled) and not(@type=\"hidden\")";
694
+						case "disabled": return "@disabled";
695
+						case "target": return "@name=\"" + (hash = document.location.hash.slice(1)) + "\" or @id=\"" + hash + "\"";
696
+						default: return "@" + pseudoClass + "=\"" + pseudoValue + "\"";
697
+					}
698
+				}
699
+				for (var i=0; (currentRule=cssRules[i]); i++) {
700
+					if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || i && elm.indexOf.call(cssRules.slice(0, i), currentRule) > -1) { continue; }
701
+					xPathExpression = xPathExpression? xPathExpression + " | ." : ".";
702
+					for (var j=0, jl=cssSelectors.length; j<jl; j++) {
703
+						cssSelector = regex.selector.exec(cssSelectors[j]);
704
+						splitRule = {
705
+							tag: prefix + (cssSelector[1]? cssSelector[1] : "*"),
706
+							id: cssSelector[2],
707
+							allClasses: cssSelector[3],
708
+							allAttr: cssSelector[5],
709
+							allPseudos: cssSelector[10],
710
+							tagRelation: cssSelector[20]
711
+						};
712
+						xPathExpression +=
713
+							(splitRule.tagRelation? ({ ">": "/", "+": "/following-sibling::*[1]/self::", "~": "/following-sibling::" }[splitRule.tagRelation] || "") : ((j > 0 && regex.relation.test(cssSelectors[j-1]))? splitRule.tag : ("//" + splitRule.tag))) +
714
+							(splitRule.id || "").replace(regex.id, "[@id = \"$1\"]") +
715
+							(splitRule.allClasses || "").replace(regex.classes, "[contains(concat(\" \", @class, \" \"), \" $1 \")]") +
716
+							(splitRule.allAttr || "").replace(regex.attribs, attrToXPath(true));
717
+						if (splitRule.allPseudos) {
718
+							var allPseudos = splitRule.allPseudos.match(regex.pseudos);
719
+							for (var k=0, kl=allPseudos.length; k<kl; k++) {
720
+								regex.pseudos.lastIndex = 0;
721
+								var pseudo = regex.pseudos.exec(allPseudos[k]),
722
+									pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null,
723
+									pseudoValue = pseudo[3] || null,
724
+									xpath = pseudoToXPath(splitRule.tag, pseudoClass, pseudoValue);
725
+								if (xpath.length) {
726
+									xPathExpression += "[" + xpath + "]";
727
+								}
728
+							}
729
+						}
730
+					}
731
+				}
732
+				try {
733
+					var xPathNodes = document.evaluate(xPathExpression, this, nsResolver, 7, null), node, p=0;
734
+					while ((node = xPathNodes.snapshotItem(p++))) { elm.push(node); }
735
+				} catch (e) {}
736
+				return elm;
737
+			};
738
+			return DOMAssistant.cssByXpath.call(this, cssRule);
739
+		},
740
+		
741
+		cssSelection : function (cssRule) {
742
+			if (!cssRule) { return null; }
743
+			var special = regex.special.test(cssRule);
744
+			try {
745
+				if (document.querySelectorAll && !special) {
746
+					return pushAll(new HTMLArray(), this.querySelectorAll(cssRule));
747
+				}
748
+			} catch (e) {}
749
+			return ((document.evaluate && !special && !/-of-type/.test(cssRule))? DOMAssistant.cssByXpath : DOMAssistant.cssByDOM).call(this, cssRule);
750
+		},
751
+		
752
+		cssSelect : function (cssRule) {
753
+			return DOMAssistant.cssSelection.call(this, cssRule);
754
+		},
755
+		
756
+		elmsByClass : function (className, tag) {
757
+			var cssRule = (tag || "") + "." + className;
758
+			return DOMAssistant.cssSelection.call(this, cssRule);
759
+		},
760
+		
761
+		elmsByAttribute : function (attr, attrVal, tag, substrMatchSelector) {
762
+			var cssRule = (tag || "") + "[" + attr + ((attrVal && attrVal !== "*")? ((substrMatchSelector || "") + "=" + attrVal + "]") : "]");
763
+			return DOMAssistant.cssSelection.call(this, cssRule);
764
+		},
765
+		
766
+		elmsByTag : function (tag) {
767
+			return DOMAssistant.cssSelection.call(this, tag);
768
+		}
769
+	};
770
+}();
771
+DOMAssistant.initCore();
772
+DOMAssistant.Storage = function () {
773
+	var uniqueId = 1, data = [], expando = "_da" + +new Date();
774
+	return {
775
+		hasData : function () {
776
+			var uid = this[expando];
777
+			return !!uid && !!data[uid];
778
+		},
779
+		retrieve : function (key) {
780
+			if (!DOMAssistant.def(key)) {
781
+				return this[expando] || (this[expando] = uniqueId++);
782
+			}
783
+			if (!this[expando] || !data[this[expando]]) { return; }
784
+			return data[this[expando]][key];
785
+		},
786
+		
787
+		store : function (key, val) {
788
+			var uid = this[expando] || (this[expando] = uniqueId++);
789
+			data[uid] = data[uid] || {};
790
+			if (typeof key === "object") {
791
+				for (var i in key) {
792
+					if (typeof i === "string") {
793
+						data[uid][i] = key[i];
794
+					}
795
+				}
796
+			}
797
+			else {
798
+				data[uid][key] = val;
799
+			}
800
+			return this;
801
+		},
802
+		
803
+		unstore : function (key) {
804
+			var uid = this[expando] || (this[expando] = uniqueId++);
805
+			if (data[uid]) {
806
+				if (DOMAssistant.def(key)) {
807
+					delete data[uid][key];
808
+				}
809
+				else {
810
+					data[uid] = null;
811
+				}
812
+			}
813
+			return this;
814
+		}
815
+	};
816
+}();
817
+DOMAssistant.attach(DOMAssistant.Storage);
818
+DOMAssistant.AJAX = function () {
819
+	var globalXMLHttp = null,
820
+	readyState = 0,
821
+	status = -1,
822
+	statusText = "",
823
+	requestPool = [],
824
+	createAjaxObj = function (url, method, callback, addToContent) {
825
+		var params = null;
826
+		if (/POST/i.test(method)) {
827
+			url = url.split("?");
828
+			params = url[1];
829
+			url = url[0];
830
+		}
831
+		return {
832
+			url : url,
833
+			method : method,
834
+			callback : callback,
835
+			params : params,
836
+			headers : {},
837
+			responseType : "text",
838
+			addToContent : addToContent || false
839
+		};
840
+	};
841
+	return {
842
+		publicMethods : [
843
+			"ajax",
844
+			"get",
845
+			"post",
846
+			"load"
847
+		],
848
+		
849
+		initRequest : function () {
850
+			var XMLHttp = null;
851
+			if (!!window.XMLHttpRequest && !DOMAssistant.isIE) {
852
+				XMLHttp = new XMLHttpRequest();
853
+				DOMAssistant.AJAX.initRequest = function () {
854
+					return requestPool.length? requestPool.pop() : new XMLHttpRequest();
855
+				};
856
+			}
857
+			else if (!!window.ActiveXObject) {
858
+				var XMLHttpMS = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
859
+				for (var i=0; i<XMLHttpMS.length; i++) {
860
+					try {
861
+						XMLHttp = new window.ActiveXObject(XMLHttpMS[i]);
862
+						DOMAssistant.AJAX.initRequest = function () {
863
+							return requestPool.length? requestPool.pop() : new window.ActiveXObject(XMLHttpMS[i]);
864
+						};
865
+						break;
866
+					}
867
+					catch (e) {
868
+						XMLHttp = null;
869
+					}
870
+				}
871
+			}
872
+			return XMLHttp;
873
+		},
874
+		
875
+		ajax : function (ajaxObj) {
876
+			if (!ajaxObj.noParse && ajaxObj.url && /\?/.test(ajaxObj.url) && ajaxObj.method && /POST/i.test(ajaxObj.method)) {
877
+				var url = ajaxObj.url.split("?");
878
+				ajaxObj.url = url[0];
879
+				ajaxObj.params = url[1] + ((url[1].length > 0 && ajaxObj.params)? ("&" + ajaxObj.params) : "");
880
+			}
881
+			return DOMAssistant.AJAX.makeCall.call(this, ajaxObj);
882
+		},
883
+		
884
+		get : function (url, callback, addToContent) {
885
+			return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "GET", callback, addToContent));
886
+		},
887
+		
888
+		post : function (url, callback) {
889
+			return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "POST", callback));
890
+		},
891
+		
892
+		load : function (url, addToContent) {
893
+			this.get(url, DOMAssistant.AJAX.replaceWithAJAXContent, addToContent);
894
+		},
895
+		
896
+		makeCall : function (ajaxObj) {
897
+			var XMLHttp = DOMAssistant.AJAX.initRequest();
898
+			if (XMLHttp) {
899
+				globalXMLHttp = XMLHttp;
900
+				(function (elm) {
901
+					var url = ajaxObj.url,
902
+						method = ajaxObj.method || "GET",
903
+						callback = ajaxObj.callback,
904
+						params = ajaxObj.params,
905
+						headers = ajaxObj.headers,
906
+						responseType = ajaxObj.responseType || "text",
907
+						addToContent = ajaxObj.addToContent,
908
+						timeout = ajaxObj.timeout || null,
909
+						ex = ajaxObj.exception,
910
+						timeoutId = null,
911
+						done = false;
912
+					XMLHttp.open(method, url, true);
913
+					XMLHttp.setRequestHeader("AJAX", "true");
914
+					XMLHttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
915
+					if (method === "POST") {
916
+						XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
917
+						XMLHttp.setRequestHeader("Content-length", params? params.length : 0);
918
+						if (XMLHttp.overrideMimeType) {
919
+							XMLHttp.setRequestHeader("Connection", "close");
920
+						}
921
+					}
922
+					if (responseType === "json") {
923
+						XMLHttp.setRequestHeader("Accept", "application/json, text/javascript, */*");
924
+					}
925
+					for (var i in headers) {
926
+						if (typeof i === "string") {
927
+							XMLHttp.setRequestHeader(i, headers[i]);
928
+						}
929
+					}
930
+					if (typeof callback === "function") {
931
+						XMLHttp.onreadystatechange = function () {
932
+							try {
933
+								if (XMLHttp.readyState === 4 && !done) {
934
+									window.clearTimeout(timeoutId);
935
+									done = true;
936
+									status = XMLHttp.status;
937
+									statusText = XMLHttp.statusText;
938
+									readyState = 4;
939
+									if ((status || location.protocol !== "file:") && (status < 200 || status >= 300)) {
940
+										throw new Error(statusText);
941
+									}
942
+									var response = /xml/i.test(responseType)? XMLHttp.responseXML : XMLHttp.responseText;
943
+									if (/json/i.test(responseType) && !!response) {
944
+										response = (typeof JSON === "object" && typeof JSON.parse === "function")? JSON.parse(response) : eval("(" + response + ")");
945
+									}
946
+									globalXMLHttp = null;
947
+									XMLHttp.onreadystatechange = function () {};
948
+									requestPool.push(XMLHttp);
949
+									callback.call(elm, response, addToContent);
950
+								}
951
+							}
952
+							catch (e) {
953
+								globalXMLHttp = XMLHttp = null;
954
+								if (typeof ex === "function") {
955
+									ex.call(elm, e);
956
+									ex = null;
957
+								}
958
+							}
959
+						};
960
+					}
961
+					XMLHttp.send(params);
962
+					if (timeout) {
963
+						timeoutId = window.setTimeout( function () {
964
+							if (!done) {
965
+								XMLHttp.abort();
966
+								done = true;
967
+								if (typeof ex === "function") {
968
+									readyState = 0;
969
+									status = 408;
970
+									statusText = "Request timeout";
971
+									globalXMLHttp = XMLHttp = null;
972
+									ex.call(elm, new Error(statusText));
973
+									ex = null;
974
+								}
975
+							}
976
+						}, timeout);
977
+					}
978
+				})(this);
979
+			}
980
+			return this;
981
+		},
982
+		
983
+		replaceWithAJAXContent : function (content, add) {
984
+			if (add) {
985
+				this.innerHTML += content;
986
+			}
987
+			else {
988
+				DOMAssistant.cleanUp(this);
989
+				this.innerHTML = content;
990
+			}
991
+		},
992
+		
993
+		getReadyState : function () {
994
+			return (globalXMLHttp && DOMAssistant.def(globalXMLHttp.readyState))? globalXMLHttp.readyState : readyState;
995
+		},
996
+		
997
+		getStatus : function () {
998
+			return status;
999
+		},
1000
+		
1001
+		getStatusText : function () {
1002
+			return statusText;
1003
+		}
1004
+	};
1005
+}();
1006
+DOMAssistant.attach(DOMAssistant.AJAX);
1007
+DOMAssistant.CSS = function () {
1008
+	var def = DOMAssistant.def,
1009
+		direct = { display: true };
1010
+	return {
1011
+		addClass : function (className) {
1012
+			if (!this.hasClass(className)) {
1013
+				var currentClass = this.className;
1014
+				this.className = currentClass + (currentClass.length? " " : "") + className;
1015
+			}
1016
+			return this;
1017
+		},
1018
+
1019
+		removeClass : function (className) {
1020
+			return this.replaceClass(className);
1021
+		},
1022
+
1023
+		replaceClass : function (className, newClass) {
1024
+			var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i");
1025
+			this.className = this.className.replace(classToRemove, function (match, p1, p2) {
1026
+				return newClass? (p1 + newClass + p2) : " ";
1027
+			}).replace(/^\s+|\s+$/g, "");
1028
+			return this;
1029
+		},
1030
+
1031
+		hasClass : function (className) {
1032
+			return (" " + this.className + " ").indexOf(" " + className + " ") > -1;
1033
+		},
1034
+
1035
+		setStyle : function (style, value) {
1036
+			var css = this.style;
1037
+			if ("filters" in this && (typeof style === "string"? /opacity/i.test(style) : def(style.opacity))) {
1038
+				css.zoom = 1;
1039
+				css.filter = (css.filter || "").replace(/alpha\([^)]*\)/, "") + "alpha(opacity=" + (def(style.opacity)? style.opacity : value) * 100 + ")";
1040
+			}
1041
+			if (def(css.cssText)) {
1042
+				var styleToSet = css.cssText;
1043
+				if (typeof style === "object") {
1044
+					for (var i in style) {
1045
+						if (typeof i === "string") {
1046
+							if (direct[i]) { css[i] = style[i]; }
1047
+							styleToSet += ";" + i + ":" + style[i];
1048
+						}
1049
+					}
1050
+				}
1051
+				else {
1052
+					if (direct[style]) { css[style] = value; }
1053
+					styleToSet += ";" + style + ":" + value;
1054
+				}
1055
+				css.cssText = styleToSet;
1056
+			}
1057
+			return this;
1058
+		},
1059
+
1060
+		getStyle : function (cssRule) {
1061
+			var val = "", f;
1062
+			cssRule = cssRule.toLowerCase();
1063
+			if (document.defaultView && document.defaultView.getComputedStyle) {
1064
+				val = document.defaultView.getComputedStyle(this, "").getPropertyValue(cssRule);
1065
+			}
1066
+			else if (this.currentStyle) {
1067
+				if ("filters" in this && cssRule === "opacity") {
1068
+					val = (f = this.style.filter || this.currentStyle.filter) && f.indexOf("opacity=") >= 0? parseFloat(f.match(/opacity=([^)]*)/)[1]) / 100 : 1;
1069
+				}
1070
+				else {
1071
+					cssRule = cssRule.replace(/^float$/, "styleFloat").replace(/\-(\w)/g, function (match, p1) {
1072
+						return p1.toUpperCase();
1073
+					});
1074
+					val = this.currentStyle[cssRule];
1075
+				}
1076
+				if (val === "auto" && /^(width|height)$/.test(cssRule) && this.currentStyle.display !== "none") {
1077
+					val = this["offset" + cssRule.charAt(0).toUpperCase() + cssRule.substr(1)] + "px";
1078
+				}
1079
+			}
1080
+			return val;
1081
+		}
1082
+	};
1083
+}();
1084
+DOMAssistant.attach(DOMAssistant.CSS);
1085
+DOMAssistant.Content = function () {
1086
+	var D$ = DOMAssistant.$$;
1087
+	return {
1088
+		init : function () {
1089
+			DOMAssistant.setCache(false);
1090
+		},
1091
+
1092
+		create : function (name, attr, append, content) {
1093
+			var elm = D$(document.createElement(name));
1094
+			if (attr) {
1095
+				elm = elm.setAttributes(attr);
1096
+			}
1097
+			if (DOMAssistant.def(content)) {
1098
+				elm.addContent(content);
1099
+			}
1100
+			if (append) {
1101
+				this.appendChild(elm);
1102
+			}
1103
+			return elm;
1104
+		},
1105
+
1106
+		setAttributes : function (attr) {
1107
+			if (DOMAssistant.isIE) {
1108
+				var setAttr = function (elm, att, val) {
1109
+					var attLower = att.toLowerCase();
1110
+					switch (attLower) {
1111
+						case "name":
1112
+						case "type":
1113
+						case "multiple":
1114
+							return D$(document.createElement(elm.outerHTML.replace(new RegExp(attLower + "(=[a-zA-Z]+)?"), " ").replace(">", " " + attLower + "=" + val + ">")));
1115
+						case "style":
1116
+							elm.style.cssText = val;
1117
+							return elm;
1118
+						default:
1119
+							elm[DOMAssistant.camel[attLower] || att] = val;
1120
+							return elm;
1121
+					}
1122
+				};
1123
+				DOMAssistant.Content.setAttributes = function (attr) {
1124
+					var elem = this;
1125
+					var parent = this.parentNode;
1126
+					for (var i in attr) {
1127
+						if (typeof attr[i] === "string" || typeof attr[i] === "number") {
1128
+							var newElem = setAttr(elem, i, attr[i]);
1129
+							if (parent && /(name|type)/i.test(i)) {
1130
+								if (elem.innerHTML) {
1131
+									newElem.innerHTML = elem.innerHTML;
1132
+								}
1133
+								parent.replaceChild(newElem, elem);
1134
+							}
1135
+							elem = newElem;
1136
+						}
1137
+					}
1138
+					return elem;
1139
+				};
1140
+			}
1141
+			else {
1142
+				DOMAssistant.Content.setAttributes = function (attr) {
1143
+					for (var i in attr) {
1144
+						if (/class/i.test(i)) {
1145
+							this.className = attr[i];
1146
+						}
1147
+						else {
1148
+							this.setAttribute(i, attr[i]);
1149
+						}
1150
+					}
1151
+					return this;
1152
+				};
1153
+			}
1154
+			return DOMAssistant.Content.setAttributes.call(this, attr); 
1155
+		},
1156
+
1157
+		addContent : function (content) {
1158
+			var type = typeof content;
1159
+			if (type === "string" || type === "number") {
1160
+				if (!this.firstChild) {
1161
+					this.innerHTML = content;
1162
+				}
1163
+				else {
1164
+					var tmp = document.createElement("div");
1165
+					tmp.innerHTML = content;
1166
+					for (var i=tmp.childNodes.length-1, last=null; i>=0; i--) {
1167
+						last = this.insertBefore(tmp.childNodes[i], last);
1168
+					}
1169
+				}
1170
+			}
1171
+			else if (type === "object" || (type === "function" && !!content.nodeName)) {
1172
+				this.appendChild(content);
1173
+			}
1174
+			return this;
1175
+		},
1176
+
1177
+		replaceContent : function (content) {
1178
+			DOMAssistant.cleanUp(this);
1179
+			return this.addContent(content);
1180
+		},
1181
+
1182
+		replace : function (content, returnNew) {
1183
+			var type = typeof content;
1184
+			if (type === "string" || type === "number") {
1185
+				var parent = this.parentNode;
1186
+				var tmp = DOMAssistant.Content.create.call(parent, "div", null, false, content);
1187
+				for (var i=tmp.childNodes.length; i--;) {
1188
+					parent.insertBefore(tmp.childNodes[i], this.nextSibling);
1189
+				}
1190
+				content = this.nextSibling;
1191
+				parent.removeChild(this);
1192
+			}
1193
+			else if (type === "object" || (type === "function" && !!content.nodeName)) {
1194
+				this.parentNode.replaceChild(content, this);
1195
+			}
1196
+			return returnNew? content : this;
1197
+		},
1198
+
1199
+		remove : function () {
1200
+			DOMAssistant.cleanUp(this);
1201
+			if (this.hasData()) {
1202
+				if (this.removeEvent) { this.removeEvent(); }
1203
+				this.unstore();
1204
+			}
1205
+			this.parentNode.removeChild(this);
1206
+			return null;
1207
+		}
1208
+	};
1209
+}();
1210
+DOMAssistant.attach(DOMAssistant.Content);
1211
+DOMAssistant.Events = function () {
1212
+	var handler,
1213
+		key = "_events",
1214
+		w3cMode = !!document.addEventListener,
1215
+		useCapture = { focus: true, blur: true },
1216
+		translate = DOMAssistant.isIE? { focus: "activate", blur: "deactivate", mouseenter: "mouseover", mouseleave: "mouseout" } : { mouseenter: "mouseover", mouseleave: "mouseout" },
1217
+		regex = {
1218
+			special: /^submit|reset|change|select$/i,
1219
+			mouseenterleave: /^mouse(enter|leave)$/i,
1220
+			dom: /^DOM/,
1221
+			on: /^on/i
1222
+		},
1223
+		special = function (e) {
1224
+			return DOMAssistant.isIE && regex.special.test(e);
1225
+		},
1226
+		fix = function (e) {
1227
+			return translate[e] || e;
1228
+		},
1229
+		createEvent = function (e, type, target) {
1230
+			e = e || window.event || {};
1231
+			if (e.event) { return e; }
1232
+			var event = {
1233
+				event: e,
1234
+				type: type || e.type,
1235
+				bubbles: e.bubbles || true,
1236
+				cancelable: e.cancelable || false,
1237
+				target: target || e.target || e.srcElement,
1238
+				clientX: e.clientX || 0,
1239
+				clientY: e.clientY || 0,
1240
+				altKey: e.altKey || false,
1241
+				ctrlKey: e.ctrlKey || false,
1242
+				shiftKey: e.shiftKey || false,
1243
+				button: e.button || null,
1244
+				timeStamp: +new Date(),
1245
+				preventDefault: function() {
1246
+					if (e.preventDefault) { e.preventDefault(); }
1247
+					this.returnValue = e.returnValue = false;
1248
+				},
1249
+				stopPropagation: function() {
1250
+					if (e.stopPropagation) { e.stopPropagation(); }
1251
+					this.cancelBubble = e.cancelBubble = true;
1252
+				}
1253
+			};
1254
+			if (event.target && 3 === event.target.nodeType) { // Safari textnode bug
1255
+				event.target = event.target.parentNode;	
1256
+			}
1257
+			event.currentTarget = event.target;
1258
+			event.relatedTarget = e.relatedTarget || (e.fromElement === event.target? e.toElement : e.fromElement) || null;
1259
+			var de = document.documentElement, b = document.body;
1260
+			event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));
1261
+			event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0));
1262
+			if ("number" === typeof e.which) {
1263
+				event.keyCode = e.keyCode;
1264
+				event.charCode = event.which = e.which;
1265
+			}
1266
+			else if (e.keyCode) {
1267
+				event.keyCode = event.charCode = e.keyCode;
1268
+			}
1269
+			return event;
1270
+		};
1271
+
1272
+	return {
1273
+		publicMethods : [
1274
+			"triggerEvent",
1275
+			"addEvent",
1276
+			"removeEvent",
1277
+			"relayEvent",
1278
+			"unrelayEvent",
1279
+			"preventDefault",
1280
+			"cancelBubble"
1281
+		],
1282
+
1283
+		init : function () {
1284
+			DOMAssistant.preventDefault = this.preventDefault;
1285
+			DOMAssistant.cancelBubble = this.cancelBubble;
1286
+			handler = this.handleEvent;
1287
+		},
1288
+
1289
+		triggerEvent : function (evt, target, e) {
1290
+			var fevt = fix(evt),
1291
+				events = this.retrieve(key),
1292
+				event = e || createEvent(e, fevt, target || this);
1293
+			event.currentTarget = this;
1294
+			if (events && events[fevt]) {
1295
+				for (var i=0, iL=events[fevt].length; i<iL; i++) {
1296
+					if (events[fevt][i].call(this, event) === false) { event.stopPropagation(); }
1297
+				}
1298
+			}
1299
+			else if (typeof this["on" + fevt] === "function") {
1300
+				this["on" + fevt].call(this, event);
1301
+			}
1302
+			var p = DOMAssistant.$$(this.parentNode);
1303
+			if (!event.cancelBubble && p && p.nodeType === 1) {
1304
+				p.triggerEvent(fevt, target, event);
1305
+			}
1306
+			return this;
1307
+		},
1308
+
1309
+		addEvent : function (evt, func, relay, proxy, selector) {
1310
+			var existingEvent,
1311
+				fevt = fix(evt),
1312
+				uid = fevt + this.retrieve(),
1313
+				onevt = "on" + fevt;
1314
+			if (!(func.attachedElements && func.attachedElements[uid])) {
1315
+				var events = this.retrieve(key) || {};
1316
+				if (!events[fevt]) {
1317
+					events[fevt] = [];
1318
+					existingEvent = this[onevt];
1319
+					this[onevt] = null;
1320
+				}
1321
+				if (typeof this.window === "object") { this.window[onevt] = handler; }
1322
+				else if (!events[fevt].length) {
1323
+					if (w3cMode) { this.addEventListener(fevt, handler, useCapture[fevt]); }
1324
+					else { this[onevt] = handler; }
1325
+				}
1326
+				if (existingEvent) {
1327
+					events[fevt].push(existingEvent);
1328
+				}
1329
+				if (fevt !== evt) { func.evt = evt; }
1330
+				func.relay = relay;
1331
+				func.proxy = proxy;
1332
+				func.selector = selector;
1333
+				func.attachedElements = func.attachedElements || {};
1334
+				func.attachedElements[uid] = true;
1335
+				events[fevt].push(func);
1336
+				this.store(key, events);
1337
+			}
1338
+			return this;
1339
+		},
1340
+
1341
+		handleEvent : function (evt) {
1342
+			var currentEvt = (evt && regex.dom.test(evt.type) && w3cMode)? evt : createEvent(evt),
1343
+				type = fix(currentEvt.type),
1344
+				targ = currentEvt.target,
1345
+				relatedTarg = currentEvt.relatedTarget,
1346
+				eventColl = this.retrieve(key)[type].slice(0), eventCollLength, eventReturn, oevt;
1347
+			if ((eventCollLength = eventColl.length)) {
1348
+				for (var i=0; i<eventCollLength; i++) {
1349
+					if (typeof eventColl[i] === "function") {
1350
+						if ((oevt = eventColl[i].evt) && oevt !== type) {
1351
+							currentEvt.type = oevt;
1352
+							if (relatedTarg && regex.mouseenterleave.test(oevt)) {
1353
+								if (eventColl[i].relay) {
1354
+									var elms = eventColl[i].elms || (eventColl[i].elms = this.cssSelect(eventColl[i].selector));
1355
+									if (elms.indexOf(targ) < 0 || !DOMAssistant.hasChild.call(relatedTarg, targ)) { continue; }
1356
+								}
1357
+								else if (this === relatedTarg || this.hasChild(relatedTarg)) { continue; }
1358
+							}
1359
+						}
1360
+						eventReturn = eventColl[i].call(this, currentEvt);
1361
+					}
1362
+				}
1363
+				if (eventReturn === false) { currentEvt.stopPropagation(); }
1364
+				return eventReturn;
1365
+			}
1366
+		},
1367
+
1368
+		removeEvent : function (evt, func, relay, proxy) {
1369
+			var uid = (evt = fix(evt)) + this.retrieve(),
1370
+				events = this.retrieve(key),
1371
+				onevt = "on" + evt;
1372
+			if (events && !evt) {
1373
+				for (var ev in events) {
1374
+					if (events[ev].length) { this.removeEvent(ev); }
1375
+				}
1376
+				var attr = this.attributes;
1377
+				for (var att, j=attr.length; j--;) {
1378
+					att = attr[j].nodeName.toLowerCase();
1379
+					if (regex.on.test(att) && typeof this[att] === "function") {
1380
+						this[att] = null;
1381
+					}
1382
+				}
1383
+			}
1384
+			else if (events && events[evt]) {
1385
+				var eventColl = events[evt];
1386
+				for (var fn, i=eventColl.length; i--;) {
1387
+					fn = func || eventColl[i];
1388
+					if (eventColl[i] === fn && relay === fn.relay && proxy === fn.proxy) {
1389
+						eventColl.splice(i, 1);
1390
+						if (!!proxy && fn.selector) {
1391
+							this.cssSelect(fn.selector).removeEvent(proxy);
1392
+						}
1393
+						if (fn.attachedElements) {
1394
+							fn.attachedElements[uid] = null;
1395
+						}
1396
+					}
1397
+				}
1398
+				if (!events[evt].length) {
1399
+					if (w3cMode) { this.removeEventListener(evt, handler, useCapture[evt]); }
1400
+					else { this[onevt] = null; }
1401
+				}
1402
+			}
1403
+			else if (this[onevt] && !func && !relay) {
1404
+				this[onevt] = null;
1405
+			}
1406
+			return this;
1407
+		},
1408
+
1409
+		relayEvent: function (evt, selector, fn, proxy) {
1410
+			if (special(evt)) {
1411
+				this.relayEvent("focus", selector, function() {
1412
+					DOMAssistant.$$(this).removeEvent(evt).addEvent(evt, function(e) {
1413
+						return fn.call(this, createEvent(e));
1414
+					});
1415
+				}, evt).relayEvent("blur", selector, function() {
1416
+					DOMAssistant.$$(this).removeEvent(evt);
1417
+				}, evt);
1418
+				return this;
1419
+			}
1420
+			return this.addEvent(evt, function(e) {
1421
+				e = createEvent(e);
1422
+				var target = e.target, args = arguments, i = 0, elm, elms = this.cssSelect(selector);
1423
+				while ((elm = elms[i++])) {
1424
+					if ((elm === target || DOMAssistant.hasChild.call(elm, target)) && !elm.disabled) {
1425
+						e.currentTarget = elm;
1426
+						var retVal = fn.apply(elm, args);
1427
+						if (!retVal) { e.preventDefault(); }
1428
+						return retVal;
1429
+					}
1430
+				}
1431
+			}, true, proxy, selector);
1432
+		},
1433
+
1434
+		unrelayEvent: function (evt) {
1435
+			if (special(evt)) {
1436
+				return this.removeEvent("focus", null, true, evt).removeEvent("blur", null, true, evt);
1437
+			}
1438
+			return this.removeEvent(evt, null, true);
1439
+		},
1440
+
1441
+		preventDefault : function (evt) {
1442
+			if (evt.preventDefault) { evt.preventDefault(); }
1443
+			evt.returnValue = false;
1444
+		},
1445
+
1446
+		cancelBubble : function (evt) {
1447
+			if (evt.stopPropagation) { evt.stopPropagation(); }
1448
+			evt.cancelBubble = true;
1449
+		}
1450
+	};
1451
+}();
1452
+DOMAssistant.attach(DOMAssistant.Events);
1453
+DOMAssistant.DOMLoad = function () {
1454
+	var DOMLoaded = false,
1455
+	DOMLoadTimer = null,
1456
+	functionsToCall = [],
1457
+	addedStrings = {},
1458
+	errorHandling = null,
1459
+	execFunctions = function () {
1460
+		for (var i=0, il=functionsToCall.length; i<il; i++) {
1461
+			try {
1462
+				functionsToCall[i]();
1463
+			}
1464
+			catch (e) {
1465
+				if (errorHandling && typeof errorHandling === "function") {
1466
+					errorHandling(e);
1467
+				}
1468
+			}
1469
+		}
1470
+		functionsToCall = [];
1471
+	},
1472
+	DOMHasLoaded = function () {
1473
+		if (DOMLoaded) {
1474
+			return;
1475
+		}
1476
+		DOMLoaded = true;
1477
+		execFunctions();
1478
+	};
1479
+	/* Internet Explorer */
1480
+	/*@cc_on
1481
+	@if (@_win32 || @_win64)
1482
+		document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>");
1483
+		document.getElementById("ieScriptLoad").onreadystatechange = function() {
1484
+			if (this.readyState === "complete") {
1485
+				DOMHasLoaded();
1486
+			}
1487
+		};
1488
+	@end @*/
1489
+	/* Mozilla, Chrome, Opera */
1490
+	if (document.addEventListener) {
1491
+		document.addEventListener("DOMContentLoaded", DOMHasLoaded, false);
1492
+	}
1493
+	/* Safari, iCab, Konqueror */
1494
+	if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) {
1495
+		DOMLoadTimer = setInterval(function () {
1496
+			if (/loaded|complete/i.test(document.readyState)) {
1497
+				DOMHasLoaded();
1498
+				clearInterval(DOMLoadTimer);
1499
+			}
1500
+		}, 10);
1501
+	}
1502
+	/* Other web browsers */
1503
+	window.onload = DOMHasLoaded;
1504
+	
1505
+	return {
1506
+		DOMReady : function () {
1507
+			for (var i=0, il=arguments.length, funcRef; i<il; i++) {
1508
+				funcRef = arguments[i];
1509
+				if (!funcRef.DOMReady && !addedStrings[funcRef]) {
1510
+					if (typeof funcRef === "string") {
1511
+						addedStrings[funcRef] = true;
1512
+						funcRef = new Function(funcRef);
1513
+					}
1514
+					funcRef.DOMReady = true;
1515
+					functionsToCall.push(funcRef);
1516
+				}
1517
+			}
1518
+			if (DOMLoaded) {
1519
+				execFunctions();
1520
+			}
1521
+		},
1522
+		
1523
+		setErrorHandling : function (funcRef) {
1524
+			errorHandling = funcRef;
1525
+		}
1526
+	};
1527
+}();
1528
+DOMAssistant.DOMReady = DOMAssistant.DOMLoad.DOMReady;
0 1529
\ No newline at end of file
1 1530
new file mode 100644
... ...
@@ -0,0 +1,292 @@
0
+/*
1
+ * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
2
+ * Copyright 2011, Scott Jehl, scottjehl.com
3
+ * Dual licensed under the MIT or GPL Version 2 licenses.
4
+ * Usage: Check out the readme file or github.com/scottjehl/respond
5
+*/
6
+(function( win, mqSupported ){
7
+	//exposed namespace
8
+	win.respond		= {};
9
+
10
+	//define update even in native-mq-supporting browsers, to avoid errors
11
+	respond.update	= function(){};
12
+
13
+	//expose media query support flag for external use
14
+	respond.mediaQueriesSupported	= mqSupported;
15
+
16
+	//if media queries are supported, exit here
17
+	if( mqSupported ){ return; }
18
+
19
+	//define vars
20
+	var doc 			= win.document,
21
+		docElem 		= doc.documentElement,
22
+		mediastyles		= [],
23
+		rules			= [],
24
+		appendedEls 	= [],
25
+		parsedSheets 	= {},
26
+		resizeThrottle	= 30,
27
+		head 			= doc.getElementsByTagName( "head" )[0] || docElem,
28
+		links			= head.getElementsByTagName( "link" ),
29
+		requestQueue	= [],
30
+
31
+		//loop stylesheets, send text content to translate
32
+		ripCSS			= function(){
33
+			var sheets 	= links,
34
+				sl 		= sheets.length,
35
+				i		= 0,
36
+				//vars for loop:
37
+				sheet, href, media, isCSS;
38
+
39
+			for( ; i < sl; i++ ){
40
+				sheet	= sheets[ i ],
41
+				href	= sheet.href,
42
+				media	= sheet.media,
43
+				isCSS	= sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
44
+
45
+				//only links plz and prevent re-parsing
46
+				if( !!href && isCSS && !parsedSheets[ href ] ){
47
+					if( !/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test( href )
48
+						|| href.replace( RegExp.$1, "" ).split( "/" )[0] === win.location.host ){
49
+						requestQueue.push( {
50
+							href: href,
51
+							media: media
52
+						} );
53
+					}
54
+					else{
55
+						parsedSheets[ href ] = true;
56
+					}
57
+				}
58
+			}
59
+			makeRequests();
60
+
61
+		},
62
+
63
+		//recurse through request queue, get css text
64
+		makeRequests	= function(){
65
+			if( requestQueue.length ){
66
+				var thisRequest = requestQueue.shift();
67
+
68
+				ajax( thisRequest.href, function( styles ){
69
+					translate( styles, thisRequest.href, thisRequest.media );
70
+					parsedSheets[ thisRequest.href ] = true;
71
+					makeRequests();
72
+				} );
73
+			}
74
+		},
75
+
76
+		//find media blocks in css text, convert to style blocks
77
+		translate			= function( styles, href, media ){
78
+			var qs			= styles.match( /@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi ),
79
+				ql			= qs && qs.length || 0,
80
+				//try to get CSS path
81
+				href		= href.substring( 0, href.lastIndexOf( "/" )),
82
+				repUrls		= function( css ){
83
+					return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" );
84
+				},
85
+				useMedia	= !ql && media,
86
+				//vars used in loop
87
+				i			= 0,
88
+				j, fullq, thisq, eachq, eql;
89
+
90
+			//if path exists, tack on trailing slash
91
+			if( href.length ){ href += "/"; }
92
+
93
+			//if no internal queries exist, but media attr does, use that
94
+			//note: this currently lacks support for situations where a media attr is specified on a link AND
95
+				//its associated stylesheet has internal CSS media queries.
96
+				//In those cases, the media attribute will currently be ignored.
97
+			if( useMedia ){
98
+				ql = 1;
99
+			}
100
+
101
+
102
+			for( ; i < ql; i++ ){
103
+				j	= 0;
104
+
105
+				//media attr
106
+				if( useMedia ){
107
+					fullq = media;
108
+					rules.push( repUrls( styles ) );
109
+				}
110
+				//parse for styles
111
+				else{
112
+					fullq	= qs[ i ].match( /@media ([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1;
113
+					rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
114
+				}
115
+
116
+				eachq	= fullq.split( "," );
117
+				eql		= eachq.length;
118
+
119
+
120
+				for( ; j < eql; j++ ){
121
+					thisq	= eachq[ j ];
122
+					mediastyles.push( {
123
+						media	: thisq.match( /(only\s+)?([a-zA-Z]+)(\sand)?/ ) && RegExp.$2,
124
+						rules	: rules.length - 1,
125
+						minw	: thisq.match( /\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 ),
126
+						maxw	: thisq.match( /\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 )
127
+					} );
128
+				}
129
+			}
130
+
131
+			applyMedia();
132
+		},
133
+
134
+		lastCall,
135
+
136
+		resizeDefer,
137
+
138
+		//enable/disable styles
139
+		applyMedia			= function( fromResize ){
140
+			var name		= "clientWidth",
141
+				docElemProp	= docElem[ name ],
142
+				currWidth 	= doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp,
143
+				styleBlocks	= {},
144
+				dFrag		= doc.createDocumentFragment(),
145
+				lastLink	= links[ links.length-1 ],
146
+				now 		= (new Date()).getTime();
147
+
148
+			//throttle resize calls
149
+			if( fromResize && lastCall && now - lastCall < resizeThrottle ){
150
+				clearTimeout( resizeDefer );
151
+				resizeDefer = setTimeout( applyMedia, resizeThrottle );
152
+				return;
153
+			}
154
+			else {
155
+				lastCall	= now;
156
+			}
157
+
158
+			for( var i in mediastyles ){
159
+				var thisstyle = mediastyles[ i ];
160
+				if( !thisstyle.minw && !thisstyle.maxw ||
161
+					( !thisstyle.minw || thisstyle.minw && currWidth >= thisstyle.minw ) &&
162
+					(!thisstyle.maxw || thisstyle.maxw && currWidth <= thisstyle.maxw ) ){
163
+						if( !styleBlocks[ thisstyle.media ] ){
164
+							styleBlocks[ thisstyle.media ] = [];
165
+						}
166
+						styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );
167
+				}
168
+			}
169
+
170
+			//remove any existing respond style element(s)
171
+			for( var i in appendedEls ){
172
+				if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){
173
+					head.removeChild( appendedEls[ i ] );
174
+				}
175
+			}
176
+
177
+			//inject active styles, grouped by media type
178
+			for( var i in styleBlocks ){
179
+				var ss		= doc.createElement( "style" ),
180
+					css		= styleBlocks[ i ].join( "\n" );
181
+
182
+				ss.type = "text/css";
183
+				ss.media	= i;
184
+
185
+				if ( ss.styleSheet ){
186
+		        	ss.styleSheet.cssText = css;
187
+		        }
188
+		        else {
189
+					ss.appendChild( doc.createTextNode( css ) );
190
+		        }
191
+		        dFrag.appendChild( ss );
192
+				appendedEls.push( ss );
193
+			}
194
+
195
+			//append to DOM at once
196
+			head.insertBefore( dFrag, lastLink.nextSibling );
197
+		},
198
+		//tweaked Ajax functions from Quirksmode
199
+		ajax = function( url, callback ) {
200
+			var req = xmlHttp();
201
+			if (!req){
202
+				return;
203
+			}
204
+			req.open( "GET", url, true );
205
+			req.onreadystatechange = function () {
206
+				if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){
207
+					return;
208
+				}
209
+				callback( req.responseText );
210
+			}
211
+			if ( req.readyState == 4 ){
212
+				return;
213
+			}
214
+			req.send();
215
+		},
216
+		//define ajax obj
217
+		xmlHttp = (function() {
218
+			var xmlhttpmethod = false,
219
+				attempts = [
220
+					function(){ return new ActiveXObject("Microsoft.XMLHTTP") },
221
+					function(){ return new XMLHttpRequest() }
222
+				],
223
+				al = attempts.length;
224
+
225
+			while( al-- ){
226
+				try {
227
+					xmlhttpmethod = attempts[ al ]();
228
+				}
229
+				catch(e) {
230
+					continue;
231
+				}
232
+				break;
233
+			}
234
+			return function(){
235
+				return xmlhttpmethod;
236
+			};
237
+		})();
238
+
239
+	//translate CSS
240
+	ripCSS();
241
+
242
+	//expose update for re-running respond later on
243
+	respond.update = ripCSS;
244
+
245
+	//adjust on resize
246
+	function callMedia(){
247
+		applyMedia( true );
248
+	}
249
+	if( win.addEventListener ){
250
+		win.addEventListener( "resize", callMedia, false );
251
+	}
252
+	else if( win.attachEvent ){
253
+		win.attachEvent( "onresize", callMedia );
254
+	}
255
+})(
256
+	this,
257
+	(function( win ){
258
+
259
+		//for speed, flag browsers with window.matchMedia support and IE 9 as supported
260
+		if( win.matchMedia ){ return true; }
261
+
262
+		var bool,
263
+			doc			= document,
264
+			docElem		= doc.documentElement,
265
+			refNode		= docElem.firstElementChild || docElem.firstChild,
266
+			// fakeBody required for <FF4 when executed in <head>
267
+			fakeUsed	= !doc.body,
268
+			fakeBody	= doc.body || doc.createElement( "body" ),
269
+			div			= doc.createElement( "div" ),
270
+			q			= "only all";
271
+
272
+		div.id = "mq-test-1";
273
+		div.style.cssText = "position:absolute;top:-99em";
274
+		fakeBody.appendChild( div );
275
+
276
+		div.innerHTML = '_<style media="'+q+'"> #mq-test-1 { width: 9px; }</style>';
277
+		if( fakeUsed ){
278
+			docElem.insertBefore( fakeBody, refNode );
279
+		}
280
+		div.removeChild( div.firstChild );
281
+		bool = div.offsetWidth == 9;
282
+		if( fakeUsed ){
283
+			docElem.removeChild( fakeBody );
284
+		}
285
+		else{
286
+			fakeBody.removeChild( div );
287
+		}
288
+		return bool;
289
+	})( this )
290
+);
291
+
0 292
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+/*!
1
+ * selectivizr v1.0.1 - (c) Keith Clark, freely distributable under the terms of the MIT license.
2
+ * selectivizr.com
3
+ */
4
+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;c<g;c++){var h=Q(b[c].replace(R,q).replace(S,q))+w,f=[];b[c]=h.replace(T,function(d,l,m,j,i){if(l){if(f.length>0){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<m;i++){j=x[i];for(var B=j.className,C=0,V=d.length;C<V;C++){var r=d[C];if(!RegExp("(^|\\s)"+r.className+"(\\s|$)").test(j.className))if(r.b&&(r.b===k||r.b(j)===k))B=E(B,r.className,k)}j.className=B}}f=[]}return l}else{if(l=m?W(m):!F||F.test(j)?{className:G(j),b:k}:null){f.push(l);return"."+l.className}return d}})}return e+b.join(",")})}function W(a){var b=k,e=G(a.slice(1)),c=a.substring(0,5)==":not(",g,h;if(c)a=a.slice(5,-1);var f=a.indexOf("(");if(f>-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;c<n.styleSheets.length;c++){b=n.styleSheets[c];if(b.href!=o)if(a=D(b.href,e))b.cssText=N(K(a))}z.length>0&&setInterval(function(){for(var g=0,h=z.length;g<h;g++){var f=z[g];if(f.disabled!==f.a)if(f.disabled){f.disabled=p;f.a=k;f.disabled=k}else f.a=f.disabled}},250)}if(!/*@cc_on!@*/true){var n=document,H=n.documentElement,v=function(){if(A.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),s=/MSIE ([\d])/.exec(navigator.userAgent)[1];if(!(n.compatMode!="CSS1Compat"||s<6||s>8||!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("<script id="+M+" defer src='//:'><\/script>");n.getElementById(M).onreadystatechange=function(){if(this.readyState=="complete"){a:{var a,b;for(b in L)if(A[b]&&(a=eval(L[b].replace("*",b)))){y=a;break a}y=p}if(y){ga();this.parentNode.removeChild(this)}}}}}})(this);
0 5
\ No newline at end of file
... ...
@@ -2,19 +2,19 @@
2 2
 // By @mathias, @cheeaun and @jdalton
3 3
 
4 4
 (function(doc) {
5
-	var addEvent = 'addEventListener',
6
-	    type = 'gesturestart',
7
-	    qsa = 'querySelectorAll',
8
-	    scales = [1, 1],
9
-	    meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
10
-	function fix() {
11
-		meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
12
-		doc.removeEventListener(type, fix, true);
13
-	}
14
-	if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15
-		fix();
16
-		scales = [.25, 1.6];
17
-		doc[addEvent](type, fix, true);
18
-	}
5
+  var addEvent = 'addEventListener',
6
+  type = 'gesturestart',
7
+  qsa = 'querySelectorAll',
8
+  scales = [1, 1],
9
+  meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
10
+  function fix() {
11
+    meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
12
+    doc.removeEventListener(type, fix, true);
13
+  }
14
+  if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15
+    fix();
16
+    scales = [.25, 1.6];
17
+    doc[addEvent](type, fix, true);
18
+  }
19 19
 }(document));
20 20
 
21 21
new file mode 100644
... ...
@@ -0,0 +1,85 @@
0
+// jXHR.js (JSON-P XHR)
1
+// v0.1 (c) Kyle Simpson
2
+// MIT License
3
+
4
+(function(global){
5
+	var SETTIMEOUT = global.setTimeout, // for better compression
6
+		doc = global.document,
7
+		callback_counter = 0;
8
+
9
+	global.jXHR = function() {
10
+		var script_url,
11
+			script_loaded,
12
+			jsonp_callback,
13
+			scriptElem,
14
+			publicAPI = null;
15
+
16
+		function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
17
+
18
+		function reset() {
19
+			script_loaded = false;
20
+			script_url = "";
21
+			removeScript();
22
+			scriptElem = null;
23
+			fireReadyStateChange(0);
24
+		}
25
+
26
+		function ThrowError(msg) {
27
+			try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); }
28
+		}
29
+
30
+		function handleScriptLoad() {
31
+			if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
32
+			this.onload = this.onreadystatechange = null; // prevent memory leak
33
+			script_loaded = true;
34
+			if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"].");
35
+			removeScript();
36
+		}
37
+
38
+		function fireReadyStateChange(rs,args) {
39
+			args = args || [];
40
+			publicAPI.readyState = rs;
41
+			if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
42
+		}
43
+
44
+		publicAPI = {
45
+			onerror:null,
46
+			onreadystatechange:null,
47
+			readyState:0,
48
+			open:function(method,url){
49
+				reset();
50
+				internal_callback = "cb"+(callback_counter++);
51
+				(function(icb){
52
+					global.jXHR[icb] = function() {
53
+						try { fireReadyStateChange.call(publicAPI,4,arguments); }
54
+						catch(err) {
55
+							publicAPI.readyState = -1;
56
+							ThrowError("Script failed to run ["+script_url+"].");
57
+						}
58
+						global.jXHR[icb] = null;
59
+					};
60
+				})(internal_callback);
61
+				script_url = url.replace(/=\?/,"=jXHR."+internal_callback);
62
+				fireReadyStateChange(1);
63
+			},
64
+			send:function(){
65
+				SETTIMEOUT(function(){
66
+					scriptElem = doc.createElement("script");
67
+					scriptElem.setAttribute("type","text/javascript");
68
+					scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
69
+					scriptElem.setAttribute("src",script_url);
70
+					doc.getElementsByTagName("head")[0].appendChild(scriptElem);
71
+				},0);
72
+				fireReadyStateChange(2);
73
+			},
74
+			setRequestHeader:function(){}, // noop
75
+			getResponseHeader:function(){return "";}, // basically noop
76
+			getAllResponseHeaders:function(){return [];} // ditto
77
+		};
78
+
79
+		reset();
80
+
81
+		return publicAPI;
82
+	};
83
+})(window);
84
+
0 85
new file mode 100644
... ...
@@ -0,0 +1,481 @@
0
+/*
1
+    http://www.JSON.org/json2.js
2
+    2011-02-23
3
+
4
+    Public Domain.
5
+
6
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
7
+
8
+    See http://www.JSON.org/js.html
9
+
10
+
11
+    This code should be minified before deployment.
12
+    See http://javascript.crockford.com/jsmin.html
13
+
14
+    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
15
+    NOT CONTROL.
16
+
17
+
18
+    This file creates a global JSON object containing two methods: stringify
19
+    and parse.
20
+
21
+        JSON.stringify(value, replacer, space)
22
+            value       any JavaScript value, usually an object or array.
23
+
24
+            replacer    an optional parameter that determines how object
25
+                        values are stringified for objects. It can be a
26
+                        function or an array of strings.
27
+
28
+            space       an optional parameter that specifies the indentation
29
+                        of nested structures. If it is omitted, the text will
30
+                        be packed without extra whitespace. If it is a number,
31
+                        it will specify the number of spaces to indent at each
32
+                        level. If it is a string (such as '\t' or '&nbsp;'),
33
+                        it contains the characters used to indent at each level.
34
+
35
+            This method produces a JSON text from a JavaScript value.
36
+
37
+            When an object value is found, if the object contains a toJSON
38
+            method, its toJSON method will be called and the result will be
39
+            stringified. A toJSON method does not serialize: it returns the
40
+            value represented by the name/value pair that should be serialized,
41
+            or undefined if nothing should be serialized. The toJSON method
42
+            will be passed the key associated with the value, and this will be
43
+            bound to the value
44
+
45
+            For example, this would serialize Dates as ISO strings.
46
+
47
+                Date.prototype.toJSON = function (key) {
48
+                    function f(n) {
49
+                        // Format integers to have at least two digits.
50
+                        return n < 10 ? '0' + n : n;
51
+                    }
52
+
53
+                    return this.getUTCFullYear()   + '-' +
54
+                         f(this.getUTCMonth() + 1) + '-' +
55
+                         f(this.getUTCDate())      + 'T' +
56
+                         f(this.getUTCHours())     + ':' +
57
+                         f(this.getUTCMinutes())   + ':' +
58
+                         f(this.getUTCSeconds())   + 'Z';
59
+                };
60
+
61
+            You can provide an optional replacer method. It will be passed the
62
+            key and value of each member, with this bound to the containing
63
+            object. The value that is returned from your method will be
64
+            serialized. If your method returns undefined, then the member will
65
+            be excluded from the serialization.
66
+
67
+            If the replacer parameter is an array of strings, then it will be
68
+            used to select the members to be serialized. It filters the results
69
+            such that only members with keys listed in the replacer array are
70
+            stringified.
71
+
72
+            Values that do not have JSON representations, such as undefined or
73
+            functions, will not be serialized. Such values in objects will be
74
+            dropped; in arrays they will be replaced with null. You can use
75
+            a replacer function to replace those with JSON values.
76
+            JSON.stringify(undefined) returns undefined.
77
+
78
+            The optional space parameter produces a stringification of the
79
+            value that is filled with line breaks and indentation to make it
80
+            easier to read.
81
+
82
+            If the space parameter is a non-empty string, then that string will
83
+            be used for indentation. If the space parameter is a number, then
84
+            the indentation will be that many spaces.
85
+
86
+            Example:
87
+
88
+            text = JSON.stringify(['e', {pluribus: 'unum'}]);
89
+            // text is '["e",{"pluribus":"unum"}]'
90
+
91
+
92
+            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
93
+            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
94
+
95
+            text = JSON.stringify([new Date()], function (key, value) {
96
+                return this[key] instanceof Date ?
97
+                    'Date(' + this[key] + ')' : value;
98
+            });
99
+            // text is '["Date(---current time---)"]'
100
+
101
+
102
+        JSON.parse(text, reviver)
103
+            This method parses a JSON text to produce an object or array.
104
+            It can throw a SyntaxError exception.
105
+
106
+            The optional reviver parameter is a function that can filter and
107
+            transform the results. It receives each of the keys and values,
108
+            and its return value is used instead of the original value.
109
+            If it returns what it received, then the structure is not modified.
110
+            If it returns undefined then the member is deleted.
111
+
112
+            Example:
113
+
114
+            // Parse the text. Values that look like ISO date strings will
115
+            // be converted to Date objects.
116
+
117
+            myData = JSON.parse(text, function (key, value) {
118
+                var a;
119
+                if (typeof value === 'string') {
120
+                    a =
121
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
122
+                    if (a) {
123
+                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
124
+                            +a[5], +a[6]));
125
+                    }
126
+                }
127
+                return value;
128
+            });
129
+
130
+            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
131
+                var d;
132
+                if (typeof value === 'string' &&
133
+                        value.slice(0, 5) === 'Date(' &&
134
+                        value.slice(-1) === ')') {
135
+                    d = new Date(value.slice(5, -1));
136
+                    if (d) {
137
+                        return d;
138
+                    }
139
+                }
140
+                return value;
141
+            });
142
+
143
+
144
+    This is a reference implementation. You are free to copy, modify, or
145
+    redistribute.
146
+*/
147
+
148
+/*jslint evil: true, strict: false, regexp: false */
149
+
150
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
151
+    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
152
+    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
153
+    lastIndex, length, parse, prototype, push, replace, slice, stringify,
154
+    test, toJSON, toString, valueOf
155
+*/
156
+
157
+
158
+// Create a JSON object only if one does not already exist. We create the
159
+// methods in a closure to avoid creating global variables.
160
+
161
+var JSON;
162
+if (!JSON) {
163
+    JSON = {};
164
+}
165
+
166
+(function () {
167
+    "use strict";
168
+
169
+    function f(n) {
170
+        // Format integers to have at least two digits.
171
+        return n < 10 ? '0' + n : n;
172
+    }
173
+
174
+    if (typeof Date.prototype.toJSON !== 'function') {
175
+
176
+        Date.prototype.toJSON = function (key) {
177
+
178
+            return isFinite(this.valueOf()) ?
179
+                this.getUTCFullYear()     + '-' +
180
+                f(this.getUTCMonth() + 1) + '-' +
181
+                f(this.getUTCDate())      + 'T' +
182
+                f(this.getUTCHours())     + ':' +
183
+                f(this.getUTCMinutes())   + ':' +
184
+                f(this.getUTCSeconds())   + 'Z' : null;
185
+        };
186
+
187
+        String.prototype.toJSON      =
188
+            Number.prototype.toJSON  =
189
+            Boolean.prototype.toJSON = function (key) {
190
+                return this.valueOf();
191
+            };
192
+    }
193
+
194
+    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
195
+        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
196
+        gap,
197
+        indent,
198
+        meta = {    // table of character substitutions
199
+            '\b': '\\b',
200
+            '\t': '\\t',
201
+            '\n': '\\n',
202
+            '\f': '\\f',
203
+            '\r': '\\r',
204
+            '"' : '\\"',
205
+            '\\': '\\\\'
206
+        },
207
+        rep;
208
+
209
+
210
+    function quote(string) {
211
+
212
+// If the string contains no control characters, no quote characters, and no
213
+// backslash characters, then we can safely slap some quotes around it.
214
+// Otherwise we must also replace the offending characters with safe escape
215
+// sequences.
216
+
217
+        escapable.lastIndex = 0;
218
+        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
219
+            var c = meta[a];
220
+            return typeof c === 'string' ? c :
221
+                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
222
+        }) + '"' : '"' + string + '"';
223
+    }
224
+
225
+
226
+    function str(key, holder) {
227
+
228
+// Produce a string from holder[key].
229
+
230
+        var i,          // The loop counter.
231
+            k,          // The member key.
232
+            v,          // The member value.
233
+            length,
234
+            mind = gap,
235
+            partial,
236
+            value = holder[key];
237
+
238
+// If the value has a toJSON method, call it to obtain a replacement value.
239
+
240
+        if (value && typeof value === 'object' &&
241
+                typeof value.toJSON === 'function') {
242
+            value = value.toJSON(key);
243
+        }
244
+
245
+// If we were called with a replacer function, then call the replacer to
246
+// obtain a replacement value.
247
+
248
+        if (typeof rep === 'function') {
249
+            value = rep.call(holder, key, value);
250
+        }
251
+
252
+// What happens next depends on the value's type.
253
+
254
+        switch (typeof value) {
255
+        case 'string':
256
+            return quote(value);
257
+
258
+        case 'number':
259
+
260
+// JSON numbers must be finite. Encode non-finite numbers as null.
261
+
262
+            return isFinite(value) ? String(value) : 'null';
263
+
264
+        case 'boolean':
265
+        case 'null':
266
+
267
+// If the value is a boolean or null, convert it to a string. Note:
268
+// typeof null does not produce 'null'. The case is included here in
269
+// the remote chance that this gets fixed someday.
270
+
271
+            return String(value);
272
+
273
+// If the type is 'object', we might be dealing with an object or an array or
274
+// null.
275
+
276
+        case 'object':
277
+
278
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
279
+// so watch out for that case.
280
+
281
+            if (!value) {
282
+                return 'null';
283
+            }
284
+
285
+// Make an array to hold the partial results of stringifying this object value.
286
+
287
+            gap += indent;
288
+            partial = [];
289
+
290
+// Is the value an array?
291
+
292
+            if (Object.prototype.toString.apply(value) === '[object Array]') {
293
+
294
+// The value is an array. Stringify every element. Use null as a placeholder
295
+// for non-JSON values.
296
+
297
+                length = value.length;
298
+                for (i = 0; i < length; i += 1) {
299
+                    partial[i] = str(i, value) || 'null';
300
+                }
301
+
302
+// Join all of the elements together, separated with commas, and wrap them in
303
+// brackets.
304
+
305
+                v = partial.length === 0 ? '[]' : gap ?
306
+                    '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
307
+                    '[' + partial.join(',') + ']';
308
+                gap = mind;
309
+                return v;
310
+            }
311
+
312
+// If the replacer is an array, use it to select the members to be stringified.
313
+
314
+            if (rep && typeof rep === 'object') {
315
+                length = rep.length;
316
+                for (i = 0; i < length; i += 1) {
317
+                    if (typeof rep[i] === 'string') {
318
+                        k = rep[i];
319
+                        v = str(k, value);
320
+                        if (v) {
321
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
322
+                        }
323
+                    }
324
+                }
325
+            } else {
326
+
327
+// Otherwise, iterate through all of the keys in the object.
328
+
329
+                for (k in value) {
330
+                    if (Object.prototype.hasOwnProperty.call(value, k)) {
331
+                        v = str(k, value);
332
+                        if (v) {
333
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
334
+                        }
335
+                    }
336
+                }
337
+            }
338
+
339
+// Join all of the member texts together, separated with commas,
340
+// and wrap them in braces.
341
+
342
+            v = partial.length === 0 ? '{}' : gap ?
343
+                '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
344
+                '{' + partial.join(',') + '}';
345
+            gap = mind;
346
+            return v;
347
+        }
348
+    }
349
+
350
+// If the JSON object does not yet have a stringify method, give it one.
351
+
352
+    if (typeof JSON.stringify !== 'function') {
353
+        JSON.stringify = function (value, replacer, space) {
354
+
355
+// The stringify method takes a value and an optional replacer, and an optional
356
+// space parameter, and returns a JSON text. The replacer can be a function
357
+// that can replace values, or an array of strings that will select the keys.
358
+// A default replacer method can be provided. Use of the space parameter can
359
+// produce text that is more easily readable.
360
+
361
+            var i;
362
+            gap = '';
363
+            indent = '';
364
+
365
+// If the space parameter is a number, make an indent string containing that
366
+// many spaces.
367
+
368
+            if (typeof space === 'number') {
369
+                for (i = 0; i < space; i += 1) {
370
+                    indent += ' ';
371
+                }
372
+
373
+// If the space parameter is a string, it will be used as the indent string.
374
+
375
+            } else if (typeof space === 'string') {
376
+                indent = space;
377
+            }
378
+
379
+// If there is a replacer, it must be a function or an array.
380
+// Otherwise, throw an error.
381
+
382
+            rep = replacer;
383
+            if (replacer && typeof replacer !== 'function' &&
384
+                    (typeof replacer !== 'object' ||
385
+                    typeof replacer.length !== 'number')) {
386
+                throw new Error('JSON.stringify');
387
+            }
388
+
389
+// Make a fake root object containing our value under the key of ''.
390
+// Return the result of stringifying the value.
391
+
392
+            return str('', {'': value});
393
+        };
394
+    }
395
+
396
+
397
+// If the JSON object does not yet have a parse method, give it one.
398
+
399
+    if (typeof JSON.parse !== 'function') {
400
+        JSON.parse = function (text, reviver) {
401
+
402
+// The parse method takes a text and an optional reviver function, and returns
403
+// a JavaScript value if the text is a valid JSON text.
404
+
405
+            var j;
406
+
407
+            function walk(holder, key) {
408
+
409
+// The walk method is used to recursively walk the resulting structure so
410
+// that modifications can be made.
411
+
412
+                var k, v, value = holder[key];
413
+                if (value && typeof value === 'object') {
414
+                    for (k in value) {
415
+                        if (Object.prototype.hasOwnProperty.call(value, k)) {
416
+                            v = walk(value, k);
417
+                            if (v !== undefined) {
418
+                                value[k] = v;
419
+                            } else {
420
+                                delete value[k];
421
+                            }
422
+                        }
423
+                    }
424
+                }
425
+                return reviver.call(holder, key, value);
426
+            }
427
+
428
+
429
+// Parsing happens in four stages. In the first stage, we replace certain
430
+// Unicode characters with escape sequences. JavaScript handles many characters
431
+// incorrectly, either silently deleting them, or treating them as line endings.
432
+
433
+            text = String(text);
434
+            cx.lastIndex = 0;
435
+            if (cx.test(text)) {
436
+                text = text.replace(cx, function (a) {
437
+                    return '\\u' +
438
+                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
439
+                });
440
+            }
441
+
442
+// In the second stage, we run the text against regular expressions that look
443
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
444
+// because they can cause invocation, and '=' because it can cause mutation.
445
+// But just to be safe, we want to reject all unexpected forms.
446
+
447
+// We split the second stage into 4 regexp operations in order to work around
448
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
449
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
450
+// replace all simple value tokens with ']' characters. Third, we delete all
451
+// open brackets that follow a colon or comma or that begin the text. Finally,
452
+// we look to see that the remaining characters are only whitespace or ']' or
453
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
454
+
455
+            if (/^[\],:{}\s]*$/
456
+                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
457
+                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
458
+                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
459
+
460
+// In the third stage we use the eval function to compile the text into a
461
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
462
+// in JavaScript: it can begin a block or an object literal. We wrap the text
463
+// in parens to eliminate the ambiguity.
464
+
465
+                j = eval('(' + text + ')');
466
+
467
+// In the optional fourth stage, we recursively walk the new structure, passing
468
+// each name/value pair to a reviver function for possible transformation.
469
+
470
+                return typeof reviver === 'function' ?
471
+                    walk({'': j}, '') : j;
472
+            }
473
+
474
+// If the text is not JSON parseable, then a SyntaxError is thrown.
475
+
476
+            throw new SyntaxError('JSON.parse');
477
+        };
478
+    }
479
+}());
480
+
0 481
new file mode 100644
... ...
@@ -0,0 +1,964 @@
0
+/*!
1
+ * Modernizr v1.7
2
+ * http://www.modernizr.com
3
+ *
4
+ * Developed by: 
5
+ * - Faruk Ates  http://farukat.es/
6
+ * - Paul Irish  http://paulirish.com/
7
+ *
8
+ * Copyright (c) 2009-2011
9
+ * Dual-licensed under the BSD or MIT licenses.
10
+ * http://www.modernizr.com/license/
11
+ */
12
+
13
+ 
14
+/*
15
+ * Modernizr is a script that detects native CSS3 and HTML5 features
16
+ * available in the current UA and provides an object containing all
17
+ * features with a true/false value, depending on whether the UA has
18
+ * native support for it or not.
19
+ * 
20
+ * Modernizr will also add classes to the <html> element of the page,
21
+ * one for each feature it detects. If the UA supports it, a class
22
+ * like "cssgradients" will be added. If not, the class name will be
23
+ * "no-cssgradients". This allows for simple if-conditionals in your
24
+ * CSS, giving you fine control over the look & feel of your website.
25
+ * 
26
+ * @author        Faruk Ates
27
+ * @author        Paul Irish
28
+ * @copyright     (c) 2009-2011 Faruk Ates.
29
+ * @contributor   Ben Alman
30
+ */
31
+
32
+window.Modernizr = (function(window,document,undefined){
33
+    
34
+    var version = '1.7',
35
+
36
+    ret = {},
37
+
38
+    /**
39
+     * !! DEPRECATED !!
40
+     * 
41
+     * enableHTML5 is a private property for advanced use only. If enabled,
42
+     * it will make Modernizr.init() run through a brief while() loop in
43
+     * which it will create all HTML5 elements in the DOM to allow for
44
+     * styling them in Internet Explorer, which does not recognize any
45
+     * non-HTML4 elements unless created in the DOM this way.
46
+     * 
47
+     * enableHTML5 is ON by default.
48
+     * 
49
+     * The enableHTML5 toggle option is DEPRECATED as per 1.6, and will be
50
+     * replaced in 2.0 in lieu of the modular, configurable nature of 2.0.
51
+     */
52
+    enableHTML5 = true,
53
+    
54
+    
55
+    docElement = document.documentElement,
56
+    docHead = document.head || document.getElementsByTagName('head')[0],
57
+
58
+    /**
59
+     * Create our "modernizr" element that we do most feature tests on.
60
+     */
61
+    mod = 'modernizr',
62
+    modElem = document.createElement( mod ),
63
+    m_style = modElem.style,
64
+
65
+    /**
66
+     * Create the input element for various Web Forms feature tests.
67
+     */
68
+    inputElem = document.createElement( 'input' ),
69
+    
70
+    smile = ':)',
71
+    
72
+    tostring = Object.prototype.toString,
73
+    
74
+    // List of property values to set for css tests. See ticket #21
75
+    prefixes = ' -webkit- -moz- -o- -ms- -khtml- '.split(' '),
76
+
77
+    // Following spec is to expose vendor-specific style properties as:
78
+    //   elem.style.WebkitBorderRadius
79
+    // and the following would be incorrect:
80
+    //   elem.style.webkitBorderRadius
81
+    
82
+    // Webkit ghosts their properties in lowercase but Opera & Moz do not.
83
+    // Microsoft foregoes prefixes entirely <= IE8, but appears to 
84
+    //   use a lowercase `ms` instead of the correct `Ms` in IE9
85
+    
86
+    // More here: http://github.com/Modernizr/Modernizr/issues/issue/21
87
+    domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
88
+
89
+    ns = {'svg': 'http://www.w3.org/2000/svg'},
90
+
91
+    tests = {},
92
+    inputs = {},
93
+    attrs = {},
94
+    
95
+    classes = [],
96
+    
97
+    featurename, // used in testing loop
98
+    
99
+    
100
+    
101
+    // todo: consider using http://javascript.nwbox.com/CSSSupport/css-support.js instead
102
+    testMediaQuery = function(mq){
103
+
104
+      var st = document.createElement('style'),
105
+          div = document.createElement('div'),
106
+          ret;
107
+
108
+      st.textContent = mq + '{#modernizr{height:3px}}';
109
+      docHead.appendChild(st);
110
+      div.id = 'modernizr';
111
+      docElement.appendChild(div);
112
+
113
+      ret = div.offsetHeight === 3;
114
+
115
+      st.parentNode.removeChild(st);
116
+      div.parentNode.removeChild(div);
117
+
118
+      return !!ret;
119
+
120
+    },
121
+    
122
+    
123
+    /**
124
+      * isEventSupported determines if a given element supports the given event
125
+      * function from http://yura.thinkweb2.com/isEventSupported/
126
+      */
127
+    isEventSupported = (function(){
128
+
129
+      var TAGNAMES = {
130
+        'select':'input','change':'input',
131
+        'submit':'form','reset':'form',
132
+        'error':'img','load':'img','abort':'img'
133
+      };
134
+
135
+      function isEventSupported(eventName, element) {
136
+
137
+        element = element || document.createElement(TAGNAMES[eventName] || 'div');
138
+        eventName = 'on' + eventName;
139
+
140
+        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
141
+        var isSupported = (eventName in element);
142
+
143
+        if (!isSupported) {
144
+          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
145
+          if (!element.setAttribute) {
146
+            element = document.createElement('div');
147
+          }
148
+          if (element.setAttribute && element.removeAttribute) {
149
+            element.setAttribute(eventName, '');
150
+            isSupported = is(element[eventName], 'function');
151
+
152
+            // If property was created, "remove it" (by setting value to `undefined`)
153
+            if (!is(element[eventName], undefined)) {
154
+              element[eventName] = undefined;
155
+            }
156
+            element.removeAttribute(eventName);
157
+          }
158
+        }
159
+
160
+        element = null;
161
+        return isSupported;
162
+      }
163
+      return isEventSupported;
164
+    })();
165
+    
166
+    
167
+    // hasOwnProperty shim by kangax needed for Safari 2.0 support
168
+    var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty;
169
+    if (!is(_hasOwnProperty, undefined) && !is(_hasOwnProperty.call, undefined)) {
170
+      hasOwnProperty = function (object, property) {
171
+        return _hasOwnProperty.call(object, property);
172
+      };
173
+    }
174
+    else {
175
+      hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
176
+        return ((property in object) && is(object.constructor.prototype[property], undefined));
177
+      };
178
+    }
179
+    
180
+    /**
181
+     * set_css applies given styles to the Modernizr DOM node.
182
+     */
183
+    function set_css( str ) {
184
+        m_style.cssText = str;
185
+    }
186
+
187
+    /**
188
+     * set_css_all extrapolates all vendor-specific css strings.
189
+     */
190
+    function set_css_all( str1, str2 ) {
191
+        return set_css(prefixes.join(str1 + ';') + ( str2 || '' ));
192
+    }
193
+
194
+    /**
195
+     * is returns a boolean for if typeof obj is exactly type.
196
+     */
197
+    function is( obj, type ) {
198
+        return typeof obj === type;
199
+    }
200
+
201
+    /**
202
+     * contains returns a boolean for if substr is found within str.
203
+     */
204
+    function contains( str, substr ) {
205
+        return (''+str).indexOf( substr ) !== -1;
206
+    }
207
+
208
+    /**
209
+     * test_props is a generic CSS / DOM property test; if a browser supports
210
+     *   a certain property, it won't return undefined for it.
211
+     *   A supported CSS property returns empty string when its not yet set.
212
+     */
213
+    function test_props( props, callback ) {
214
+        for ( var i in props ) {
215
+            if ( m_style[ props[i] ] !== undefined && ( !callback || callback( props[i], modElem ) ) ) {
216
+                return true;
217
+            }
218
+        }
219
+    }
220
+
221
+    /**
222
+     * test_props_all tests a list of DOM properties we want to check against.
223
+     *   We specify literally ALL possible (known and/or likely) properties on 
224
+     *   the element including the non-vendor prefixed one, for forward-
225
+     *   compatibility.
226
+     */
227
+    function test_props_all( prop, callback ) {
228
+      
229
+        var uc_prop = prop.charAt(0).toUpperCase() + prop.substr(1),
230
+            props   = (prop + ' ' + domPrefixes.join(uc_prop + ' ') + uc_prop).split(' ');
231
+
232
+        return !!test_props( props, callback );
233
+    }
234
+    
235
+
236
+    /**
237
+     * Tests
238
+     * -----
239
+     */
240
+
241
+    tests['flexbox'] = function() {
242
+        /**
243
+         * set_prefixed_value_css sets the property of a specified element
244
+         * adding vendor prefixes to the VALUE of the property.
245
+         * @param {Element} element
246
+         * @param {string} property The property name. This will not be prefixed.
247
+         * @param {string} value The value of the property. This WILL be prefixed.
248
+         * @param {string=} extra Additional CSS to append unmodified to the end of
249
+         * the CSS string.
250
+         */
251
+        function set_prefixed_value_css(element, property, value, extra) {
252
+            property += ':';
253
+            element.style.cssText = (property + prefixes.join(value + ';' + property)).slice(0, -property.length) + (extra || '');
254
+        }
255
+
256
+        /**
257
+         * set_prefixed_property_css sets the property of a specified element
258
+         * adding vendor prefixes to the NAME of the property.
259
+         * @param {Element} element
260
+         * @param {string} property The property name. This WILL be prefixed.
261
+         * @param {string} value The value of the property. This will not be prefixed.
262
+         * @param {string=} extra Additional CSS to append unmodified to the end of
263
+         * the CSS string.
264
+         */
265
+        function set_prefixed_property_css(element, property, value, extra) {
266
+            element.style.cssText = prefixes.join(property + ':' + value + ';') + (extra || '');
267
+        }
268
+
269
+        var c = document.createElement('div'),
270
+            elem = document.createElement('div');
271
+
272
+        set_prefixed_value_css(c, 'display', 'box', 'width:42px;padding:0;');
273
+        set_prefixed_property_css(elem, 'box-flex', '1', 'width:10px;');
274
+
275
+        c.appendChild(elem);
276
+        docElement.appendChild(c);
277
+
278
+        var ret = elem.offsetWidth === 42;
279
+
280
+        c.removeChild(elem);
281
+        docElement.removeChild(c);
282
+
283
+        return ret;
284
+    };
285
+    
286
+    // On the S60 and BB Storm, getContext exists, but always returns undefined
287
+    // http://github.com/Modernizr/Modernizr/issues/issue/97/ 
288
+    
289
+    tests['canvas'] = function() {
290
+        var elem = document.createElement( 'canvas' );
291
+        return !!(elem.getContext && elem.getContext('2d'));
292
+    };
293
+    
294
+    tests['canvastext'] = function() {
295
+        return !!(ret['canvas'] && is(document.createElement( 'canvas' ).getContext('2d').fillText, 'function'));
296
+    };
297
+    
298
+    // This WebGL test false positives in FF depending on graphics hardware. But really it's quite impossible to know
299
+    // wether webgl will succeed until after you create the context. You might have hardware that can support
300
+    // a 100x100 webgl canvas, but will not support a 1000x1000 webgl canvas. So this feature inference is weak, 
301
+    // but intentionally so.
302
+    tests['webgl'] = function(){
303
+        return !!window.WebGLRenderingContext;
304
+    };
305
+    
306
+    /*
307
+     * The Modernizr.touch test only indicates if the browser supports
308
+     *    touch events, which does not necessarily reflect a touchscreen
309
+     *    device, as evidenced by tablets running Windows 7 or, alas,
310
+     *    the Palm Pre / WebOS (touch) phones.
311
+     *    
312
+     * Additionally, Chrome (desktop) used to lie about its support on this,
313
+     *    but that has since been rectified: http://crbug.com/36415
314
+     *    
315
+     * We also test for Firefox 4 Multitouch Support.
316
+     *
317
+     * For more info, see: http://modernizr.github.com/Modernizr/touch.html
318
+     */
319
+     
320
+    tests['touch'] = function() {
321
+
322
+        return ('ontouchstart' in window) || testMediaQuery('@media ('+prefixes.join('touch-enabled),(')+'modernizr)');
323
+
324
+    };
325
+
326
+
327
+    /**
328
+     * geolocation tests for the new Geolocation API specification.
329
+     *   This test is a standards compliant-only test; for more complete
330
+     *   testing, including a Google Gears fallback, please see:
331
+     *   http://code.google.com/p/geo-location-javascript/
332
+     * or view a fallback solution using google's geo API:
333
+     *   http://gist.github.com/366184
334
+     */
335
+    tests['geolocation'] = function() {
336
+        return !!navigator.geolocation;
337
+    };
338
+
339
+    // Per 1.6: 
340
+    // This used to be Modernizr.crosswindowmessaging but the longer
341
+    // name has been deprecated in favor of a shorter and property-matching one.
342
+    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
343
+    // and in the first release thereafter disappear entirely.
344
+    tests['postmessage'] = function() {
345
+      return !!window.postMessage;
346
+    };
347
+
348
+    // Web SQL database detection is tricky:
349
+
350
+    // In chrome incognito mode, openDatabase is truthy, but using it will 
351
+    //   throw an exception: http://crbug.com/42380
352
+    // We can create a dummy database, but there is no way to delete it afterwards. 
353
+    
354
+    // Meanwhile, Safari users can get prompted on any database creation.
355
+    //   If they do, any page with Modernizr will give them a prompt:
356
+    //   http://github.com/Modernizr/Modernizr/issues/closed#issue/113
357
+    
358
+    // We have chosen to allow the Chrome incognito false positive, so that Modernizr
359
+    //   doesn't litter the web with these test databases. As a developer, you'll have
360
+    //   to account for this gotcha yourself.
361
+    tests['websqldatabase'] = function() {
362
+      var result = !!window.openDatabase;
363
+      /*  if (result){
364
+            try {
365
+              result = !!openDatabase( mod + "testdb", "1.0", mod + "testdb", 2e4);
366
+            } catch(e) {
367
+            }
368
+          }  */
369
+      return result;
370
+    };
371
+    
372
+    // Vendors have inconsistent prefixing with the experimental Indexed DB:
373
+    // - Firefox is shipping indexedDB in FF4 as moz_indexedDB
374
+    // - Webkit's implementation is accessible through webkitIndexedDB
375
+    // We test both styles.
376
+    tests['indexedDB'] = function(){
377
+      for (var i = -1, len = domPrefixes.length; ++i < len; ){ 
378
+        var prefix = domPrefixes[i].toLowerCase();
379
+        if (window[prefix + '_indexedDB'] || window[prefix + 'IndexedDB']){
380
+          return true;
381
+        } 
382
+      }
383
+      return false;
384
+    };
385
+
386
+    // documentMode logic from YUI to filter out IE8 Compat Mode
387
+    //   which false positives.
388
+    tests['hashchange'] = function() {
389
+      return isEventSupported('hashchange', window) && ( document.documentMode === undefined || document.documentMode > 7 );
390
+    };
391
+
392
+    // Per 1.6: 
393
+    // This used to be Modernizr.historymanagement but the longer
394
+    // name has been deprecated in favor of a shorter and property-matching one.
395
+    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
396
+    // and in the first release thereafter disappear entirely.
397
+    tests['history'] = function() {
398
+      return !!(window.history && history.pushState);
399
+    };
400
+
401
+    tests['draganddrop'] = function() {
402
+        return isEventSupported('dragstart') && isEventSupported('drop');
403
+    };
404
+    
405
+    tests['websockets'] = function(){
406
+        return ('WebSocket' in window);
407
+    };
408
+    
409
+    
410
+    // http://css-tricks.com/rgba-browser-support/
411
+    tests['rgba'] = function() {
412
+        // Set an rgba() color and check the returned value
413
+        
414
+        set_css(  'background-color:rgba(150,255,150,.5)' );
415
+        
416
+        return contains( m_style.backgroundColor, 'rgba' );
417
+    };
418
+    
419
+    tests['hsla'] = function() {
420
+        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
421
+        //   except IE9 who retains it as hsla
422
+        
423
+        set_css('background-color:hsla(120,40%,100%,.5)' );
424
+        
425
+        return contains( m_style.backgroundColor, 'rgba' ) || contains( m_style.backgroundColor, 'hsla' );
426
+    };
427
+    
428
+    tests['multiplebgs'] = function() {
429
+        // Setting multiple images AND a color on the background shorthand property
430
+        //  and then querying the style.background property value for the number of
431
+        //  occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
432
+        
433
+        set_css( 'background:url(//:),url(//:),red url(//:)' );
434
+        
435
+        // If the UA supports multiple backgrounds, there should be three occurrences
436
+        //   of the string "url(" in the return value for elem_style.background
437
+
438
+        return new RegExp("(url\\s*\\(.*?){3}").test(m_style.background);
439
+    };
440
+    
441
+    
442
+    // In testing support for a given CSS property, it's legit to test:
443
+    //    `elem.style[styleName] !== undefined`
444
+    // If the property is supported it will return an empty string,
445
+    // if unsupported it will return undefined.
446
+    
447
+    // We'll take advantage of this quick test and skip setting a style 
448
+    // on our modernizr element, but instead just testing undefined vs
449
+    // empty string.
450
+    
451
+
452
+    tests['backgroundsize'] = function() {
453
+        return test_props_all( 'backgroundSize' );
454
+    };
455
+    
456
+    tests['borderimage'] = function() {
457
+        return test_props_all( 'borderImage' );
458
+    };
459
+    
460
+    
461
+    // Super comprehensive table about all the unique implementations of 
462
+    // border-radius: http://muddledramblings.com/table-of-css3-border-radius-compliance
463
+    
464
+    tests['borderradius'] = function() {
465
+        return test_props_all( 'borderRadius', '', function( prop ) {
466
+            return contains( prop, 'orderRadius' );
467
+        });
468
+    };
469
+    
470
+    // WebOS unfortunately false positives on this test.
471
+    tests['boxshadow'] = function() {
472
+        return test_props_all( 'boxShadow' );
473
+    };
474
+    
475
+    // FF3.0 will false positive on this test 
476
+    tests['textshadow'] = function(){
477
+        return document.createElement('div').style.textShadow === '';
478
+    };
479
+    
480
+    
481
+    tests['opacity'] = function() {
482
+        // Browsers that actually have CSS Opacity implemented have done so
483
+        //  according to spec, which means their return values are within the
484
+        //  range of [0.0,1.0] - including the leading zero.
485
+        
486
+        set_css_all( 'opacity:.55' );
487
+        
488
+        // The non-literal . in this regex is intentional:
489
+        //   German Chrome returns this value as 0,55
490
+        // https://github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
491
+        return /^0.55$/.test(m_style.opacity);
492
+    };
493
+    
494
+    
495
+    tests['cssanimations'] = function() {
496
+        return test_props_all( 'animationName' );
497
+    };
498
+    
499
+    
500
+    tests['csscolumns'] = function() {
501
+        return test_props_all( 'columnCount' );
502
+    };
503
+    
504
+    
505
+    tests['cssgradients'] = function() {
506
+        /**
507
+         * For CSS Gradients syntax, please see:
508
+         * http://webkit.org/blog/175/introducing-css-gradients/
509
+         * https://developer.mozilla.org/en/CSS/-moz-linear-gradient
510
+         * https://developer.mozilla.org/en/CSS/-moz-radial-gradient
511
+         * http://dev.w3.org/csswg/css3-images/#gradients-
512
+         */
513
+        
514
+        var str1 = 'background-image:',
515
+            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
516
+            str3 = 'linear-gradient(left top,#9f9, white);';
517
+        
518
+        set_css(
519
+            (str1 + prefixes.join(str2 + str1) + prefixes.join(str3 + str1)).slice(0,-str1.length)
520
+        );
521
+        
522
+        return contains( m_style.backgroundImage, 'gradient' );
523
+    };
524
+    
525
+    
526
+    tests['cssreflections'] = function() {
527
+        return test_props_all( 'boxReflect' );
528
+    };
529
+    
530
+    
531
+    tests['csstransforms'] = function() {
532
+        return !!test_props([ 'transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ]);
533
+    };
534
+    
535
+    
536
+    tests['csstransforms3d'] = function() {
537
+        
538
+        var ret = !!test_props([ 'perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective' ]);
539
+        
540
+        // Webkit’s 3D transforms are passed off to the browser's own graphics renderer.
541
+        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
542
+        //   some conditions. As a result, Webkit typically recognizes the syntax but 
543
+        //   will sometimes throw a false positive, thus we must do a more thorough check:
544
+        if (ret && 'webkitPerspective' in docElement.style){
545
+          
546
+          // Webkit allows this media query to succeed only if the feature is enabled.    
547
+          // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }`    
548
+          ret = testMediaQuery('@media ('+prefixes.join('transform-3d),(')+'modernizr)');
549
+        }
550
+        return ret;
551
+    };
552
+    
553
+    
554
+    tests['csstransitions'] = function() {
555
+        return test_props_all( 'transitionProperty' );
556
+    };
557
+
558
+
559
+    // @font-face detection routine by Diego Perini
560
+    // http://javascript.nwbox.com/CSSSupport/
561
+    tests['fontface'] = function(){
562
+
563
+        var 
564
+        sheet, bool,
565
+        head = docHead || docElement,
566
+        style = document.createElement("style"),
567
+        impl = document.implementation || { hasFeature: function() { return false; } };
568
+        
569
+        style.type = 'text/css';
570
+        head.insertBefore(style, head.firstChild);
571
+        sheet = style.sheet || style.styleSheet;
572
+
573
+        var supportAtRule = impl.hasFeature('CSS2', '') ?
574
+                function(rule) {
575
+                    if (!(sheet && rule)) return false;
576
+                    var result = false;
577
+                    try {
578
+                        sheet.insertRule(rule, 0);
579
+                        result = (/src/i).test(sheet.cssRules[0].cssText);
580
+                        sheet.deleteRule(sheet.cssRules.length - 1);
581
+                    } catch(e) { }
582
+                    return result;
583
+                } :
584
+                function(rule) {
585
+                    if (!(sheet && rule)) return false;
586
+                    sheet.cssText = rule;
587
+                    
588
+                    return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) &&
589
+                      sheet.cssText
590
+                            .replace(/\r+|\n+/g, '')
591
+                            .indexOf(rule.split(' ')[0]) === 0;
592
+                };
593
+        
594
+        bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }');
595
+        head.removeChild(style);
596
+        return bool;
597
+    };
598
+    
599
+
600
+    // These tests evaluate support of the video/audio elements, as well as
601
+    // testing what types of content they support.
602
+    //
603
+    // We're using the Boolean constructor here, so that we can extend the value
604
+    // e.g.  Modernizr.video     // true
605
+    //       Modernizr.video.ogg // 'probably'
606
+    //
607
+    // Codec values from : http://github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
608
+    //                     thx to NielsLeenheer and zcorpan
609
+    
610
+    // Note: in FF 3.5.1 and 3.5.0, "no" was a return value instead of empty string.
611
+    //   Modernizr does not normalize for that.
612
+    
613
+    tests['video'] = function() {
614
+        var elem = document.createElement('video'),
615
+            bool = !!elem.canPlayType;
616
+        
617
+        if (bool){  
618
+            bool      = new Boolean(bool);  
619
+            bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"');
620
+            
621
+            // Workaround required for IE9, which doesn't report video support without audio codec specified.
622
+            //   bug 599718 @ msft connect
623
+            var h264 = 'video/mp4; codecs="avc1.42E01E';
624
+            bool.h264 = elem.canPlayType(h264 + '"') || elem.canPlayType(h264 + ', mp4a.40.2"');
625
+            
626
+            bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"');
627
+        }
628
+        return bool;
629
+    };
630
+    
631
+    tests['audio'] = function() {
632
+        var elem = document.createElement('audio'),
633
+            bool = !!elem.canPlayType;
634
+        
635
+        if (bool){  
636
+            bool      = new Boolean(bool);  
637
+            bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"');
638
+            bool.mp3  = elem.canPlayType('audio/mpeg;');
639
+            
640
+            // Mimetypes accepted: 
641
+            //   https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
642
+            //   http://bit.ly/iphoneoscodecs
643
+            bool.wav  = elem.canPlayType('audio/wav; codecs="1"');
644
+            bool.m4a  = elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;');
645
+        }
646
+        return bool;
647
+    };
648
+
649
+
650
+    // Firefox has made these tests rather unfun.
651
+
652
+    // In FF4, if disabled, window.localStorage should === null.
653
+
654
+    // Normally, we could not test that directly and need to do a 
655
+    //   `('localStorage' in window) && ` test first because otherwise Firefox will
656
+    //   throw http://bugzil.la/365772 if cookies are disabled
657
+
658
+    // However, in Firefox 4 betas, if dom.storage.enabled == false, just mentioning
659
+    //   the property will throw an exception. http://bugzil.la/599479
660
+    // This looks to be fixed for FF4 Final.
661
+
662
+    // Because we are forced to try/catch this, we'll go aggressive.
663
+
664
+    // FWIW: IE8 Compat mode supports these features completely:
665
+    //   http://www.quirksmode.org/dom/html5.html
666
+    // But IE8 doesn't support either with local files
667
+
668
+    tests['localstorage'] = function() {
669
+        try {
670
+            return !!localStorage.getItem;
671
+        } catch(e) {
672
+            return false;
673
+        }
674
+    };
675
+
676
+    tests['sessionstorage'] = function() {
677
+        try {
678
+            return !!sessionStorage.getItem;
679
+        } catch(e){
680
+            return false;
681
+        }
682
+    };
683
+
684
+
685
+    tests['webWorkers'] = function () {
686
+        return !!window.Worker;
687
+    };
688
+
689
+
690
+    tests['applicationcache'] =  function() {
691
+        return !!window.applicationCache;
692
+    };
693
+
694
+ 
695
+    // Thanks to Erik Dahlstrom
696
+    tests['svg'] = function(){
697
+        return !!document.createElementNS && !!document.createElementNS(ns.svg, "svg").createSVGRect;
698
+    };
699
+
700
+    tests['inlinesvg'] = function() {
701
+      var div = document.createElement('div');
702
+      div.innerHTML = '<svg/>';
703
+      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
704
+    };
705
+
706
+    // Thanks to F1lt3r and lucideer
707
+    // http://github.com/Modernizr/Modernizr/issues#issue/35
708
+    tests['smil'] = function(){
709
+        return !!document.createElementNS && /SVG/.test(tostring.call(document.createElementNS(ns.svg,'animate')));
710
+    };
711
+
712
+    tests['svgclippaths'] = function(){
713
+        // Possibly returns a false positive in Safari 3.2?
714
+        return !!document.createElementNS && /SVG/.test(tostring.call(document.createElementNS(ns.svg,'clipPath')));
715
+    };
716
+
717
+
718
+    // input features and input types go directly onto the ret object, bypassing the tests loop.
719
+    // Hold this guy to execute in a moment.
720
+    function webforms(){
721
+    
722
+        // Run through HTML5's new input attributes to see if the UA understands any.
723
+        // We're using f which is the <input> element created early on
724
+        // Mike Taylr has created a comprehensive resource for testing these attributes
725
+        //   when applied to all input types: 
726
+        //   http://miketaylr.com/code/input-type-attr.html
727
+        // spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
728
+        ret['input'] = (function(props) {
729
+            for (var i = 0, len = props.length; i<len; i++) {
730
+                attrs[ props[i] ] = !!(props[i] in inputElem);
731
+            }
732
+            return attrs;
733
+        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
734
+
735
+        // Run through HTML5's new input types to see if the UA understands any.
736
+        //   This is put behind the tests runloop because it doesn't return a
737
+        //   true/false like all the other tests; instead, it returns an object
738
+        //   containing each input type with its corresponding true/false value 
739
+        
740
+        // Big thanks to @miketaylr for the html5 forms expertise. http://miketaylr.com/
741
+        ret['inputtypes'] = (function(props) {
742
+          
743
+            for (var i = 0, bool, inputElemType, defaultView, len=props.length; i < len; i++) {
744
+              
745
+                inputElem.setAttribute('type', inputElemType = props[i]);
746
+                bool = inputElem.type !== 'text';
747
+                
748
+                // We first check to see if the type we give it sticks.. 
749
+                // If the type does, we feed it a textual value, which shouldn't be valid.
750
+                // If the value doesn't stick, we know there's input sanitization which infers a custom UI
751
+                if (bool){  
752
+                  
753
+                    inputElem.value         = smile;
754
+                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
755
+     
756
+                    if (/^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined){
757
+                      
758
+                      docElement.appendChild(inputElem);
759
+                      defaultView = document.defaultView;
760
+                      
761
+                      // Safari 2-4 allows the smiley as a value, despite making a slider
762
+                      bool =  defaultView.getComputedStyle && 
763
+                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&                  
764
+                              // Mobile android web browser has false positive, so must
765
+                              // check the height to see if the widget is actually there.
766
+                              (inputElem.offsetHeight !== 0);
767
+                              
768
+                      docElement.removeChild(inputElem);
769
+                              
770
+                    } else if (/^(search|tel)$/.test(inputElemType)){
771
+                      // Spec doesnt define any special parsing or detectable UI 
772
+                      //   behaviors so we pass these through as true
773
+                      
774
+                      // Interestingly, opera fails the earlier test, so it doesn't
775
+                      //  even make it here.
776
+                      
777
+                    } else if (/^(url|email)$/.test(inputElemType)) {
778
+                      // Real url and email support comes with prebaked validation.
779
+                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;
780
+                      
781
+                    } else if (/^color$/.test(inputElemType)) {
782
+                        // chuck into DOM and force reflow for Opera bug in 11.00
783
+                        // github.com/Modernizr/Modernizr/issues#issue/159
784
+                        docElement.appendChild(inputElem);
785
+                        docElement.offsetWidth; 
786
+                        bool = inputElem.value != smile;
787
+                        docElement.removeChild(inputElem);
788
+
789
+                    } else {
790
+                      // If the upgraded input compontent rejects the :) text, we got a winner
791
+                      bool = inputElem.value != smile;
792
+                    }
793
+                }
794
+                
795
+                inputs[ props[i] ] = !!bool;
796
+            }
797
+            return inputs;
798
+        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
799
+
800
+    }
801
+
802
+
803
+
804
+    // End of test definitions
805
+    // -----------------------
806
+
807
+
808
+
809
+    // Run through all tests and detect their support in the current UA.
810
+    // todo: hypothetically we could be doing an array of tests and use a basic loop here.
811
+    for ( var feature in tests ) {
812
+        if ( hasOwnProperty( tests, feature ) ) {
813
+            // run the test, throw the return value into the Modernizr,
814
+            //   then based on that boolean, define an appropriate className
815
+            //   and push it into an array of classes we'll join later.
816
+            featurename  = feature.toLowerCase();
817
+            ret[ featurename ] = tests[ feature ]();
818
+
819
+            classes.push( ( ret[ featurename ] ? '' : 'no-' ) + featurename );
820
+        }
821
+    }
822
+    
823
+    // input tests need to run.
824
+    if (!ret.input) webforms();
825
+    
826
+
827
+   
828
+    // Per 1.6: deprecated API is still accesible for now:
829
+    ret.crosswindowmessaging = ret.postmessage;
830
+    ret.historymanagement = ret.history;
831
+
832
+
833
+
834
+    /**
835
+     * Addtest allows the user to define their own feature tests
836
+     * the result will be added onto the Modernizr object,
837
+     * as well as an appropriate className set on the html element
838
+     * 
839
+     * @param feature - String naming the feature
840
+     * @param test - Function returning true if feature is supported, false if not
841
+     */
842
+    ret.addTest = function (feature, test) {
843
+      feature = feature.toLowerCase();
844
+      
845
+      if (ret[ feature ]) {
846
+        return; // quit if you're trying to overwrite an existing test
847
+      } 
848
+      test = !!(test());
849
+      docElement.className += ' ' + (test ? '' : 'no-') + feature; 
850
+      ret[ feature ] = test;
851
+      return ret; // allow chaining.
852
+    };
853
+
854
+    /**
855
+     * Reset m.style.cssText to nothing to reduce memory footprint.
856
+     */
857
+    set_css( '' );
858
+    modElem = inputElem = null;
859
+
860
+    //>>BEGIN IEPP
861
+    // Enable HTML 5 elements for styling in IE. 
862
+    // fyi: jscript version does not reflect trident version
863
+    //      therefore ie9 in ie7 mode will still have a jScript v.9
864
+    if ( enableHTML5 && window.attachEvent && (function(){ var elem = document.createElement("div");
865
+                                      elem.innerHTML = "<elem></elem>";
866
+                                      return elem.childNodes.length !== 1; })()) {
867
+        // iepp v1.6.2 by @jon_neal : code.google.com/p/ie-print-protector
868
+        (function(win, doc) {
869
+          var elems = 'abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video',
870
+            elemsArr = elems.split('|'),
871
+            elemsArrLen = elemsArr.length,
872
+            elemRegExp = new RegExp('(^|\\s)('+elems+')', 'gi'), 
873
+            tagRegExp = new RegExp('<(\/*)('+elems+')', 'gi'),
874
+            ruleRegExp = new RegExp('(^|[^\\n]*?\\s)('+elems+')([^\\n]*)({[\\n\\w\\W]*?})', 'gi'),
875
+            docFrag = doc.createDocumentFragment(),
876
+            html = doc.documentElement,
877
+            head = html.firstChild,
878
+            bodyElem = doc.createElement('body'),
879
+            styleElem = doc.createElement('style'),
880
+            body;
881
+          function shim(doc) {
882
+            var a = -1;
883
+            while (++a < elemsArrLen)
884
+              // Use createElement so IE allows HTML5-named elements in a document
885
+              doc.createElement(elemsArr[a]);
886
+          }
887
+          function getCSS(styleSheetList, mediaType) {
888
+            var a = -1,
889
+              len = styleSheetList.length,
890
+              styleSheet,
891
+              cssTextArr = [];
892
+            while (++a < len) {
893
+              styleSheet = styleSheetList[a];
894
+              // Get css from all non-screen stylesheets and their imports
895
+              if ((mediaType = styleSheet.media || mediaType) != 'screen') cssTextArr.push(getCSS(styleSheet.imports, mediaType), styleSheet.cssText);
896
+            }
897
+            return cssTextArr.join('');
898
+          }
899
+          // Shim the document and iepp fragment
900
+          shim(doc);
901
+          shim(docFrag);
902
+          // Add iepp custom print style element
903
+          head.insertBefore(styleElem, head.firstChild);
904
+          styleElem.media = 'print';
905
+          win.attachEvent(
906
+            'onbeforeprint',
907
+            function() {
908
+              var a = -1,
909
+                cssText = getCSS(doc.styleSheets, 'all'),
910
+                cssTextArr = [],
911
+                rule;
912
+              body = body || doc.body;
913
+              // Get only rules which reference HTML5 elements by name
914
+              while ((rule = ruleRegExp.exec(cssText)) != null)
915
+                // Replace all html5 element references with iepp substitute classnames
916
+                cssTextArr.push((rule[1]+rule[2]+rule[3]).replace(elemRegExp, '$1.iepp_$2')+rule[4]);
917
+              // Write iepp custom print CSS
918
+              styleElem.styleSheet.cssText = cssTextArr.join('\n');
919
+              while (++a < elemsArrLen) {
920
+                var nodeList = doc.getElementsByTagName(elemsArr[a]),
921
+                  nodeListLen = nodeList.length,
922
+                  b = -1;
923
+                while (++b < nodeListLen)
924
+                  if (nodeList[b].className.indexOf('iepp_') < 0)
925
+                    // Append iepp substitute classnames to all html5 elements
926
+                    nodeList[b].className += ' iepp_'+elemsArr[a];
927
+              }
928
+              docFrag.appendChild(body);
929
+              html.appendChild(bodyElem);
930
+              // Write iepp substitute print-safe document
931
+              bodyElem.className = body.className;
932
+              // Replace HTML5 elements with <font> which is print-safe and shouldn't conflict since it isn't part of html5
933
+              bodyElem.innerHTML = body.innerHTML.replace(tagRegExp, '<$1font');
934
+            }
935
+          );
936
+          win.attachEvent(
937
+            'onafterprint',
938
+            function() {
939
+              // Undo everything done in onbeforeprint
940
+              bodyElem.innerHTML = '';
941
+              html.removeChild(bodyElem);
942
+              html.appendChild(body);
943
+              styleElem.styleSheet.cssText = '';
944
+            }
945
+          );
946
+        })(window, document);
947
+    }
948
+    //>>END IEPP
949
+
950
+    // Assign private properties to the return object with prefix
951
+    ret._enableHTML5     = enableHTML5;
952
+    ret._version         = version;
953
+
954
+    // Remove "no-js" class from <html> element, if it exists:
955
+    docElement.className = docElement.className.replace(/\bno-js\b/,'') 
956
+                            + ' js '
957
+
958
+                            // Add the new classes to the <html> element.
959
+                            + classes.join( ' ' );
960
+    
961
+    return ret;
962
+
963
+})(this,this.document);
0 964
\ No newline at end of file
1 965
deleted file mode 100644
... ...
@@ -1,2 +0,0 @@
1
-// Modernizr v1.7  www.modernizr.com
2
-window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";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="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
3 1
\ No newline at end of file
4 2
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-/*
2
- * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
3
- * Copyright 2011, Scott Jehl, scottjehl.com
4
- * Dual licensed under the MIT or GPL Version 2 licenses.
5
- * Usage: Check out the readme file or github.com/scottjehl/respond
6
-*/
7
-(function(e,h){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=h;if(h){return}var u=e.document,r=u.documentElement,i=[],k=[],p=[],o={},g=30,f=u.getElementsByTagName("head")[0]||r,b=f.getElementsByTagName("link"),d=[],a=function(){var B=b,w=B.length;for(var z=0;z<w;z++){var y=B[z],x=y.href,A=y.media,v=y.rel&&y.rel.toLowerCase()==="stylesheet";if(!!x&&v&&!o[x]){if(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(x)||x.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:x,media:A})}else{o[x]=true}}}t()},t=function(){if(d.length){var v=d.shift();n(v.href,function(w){m(w,v.href,v.media);o[v.href]=true;t()})}},m=function(G,v,x){var E=G.match(/@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi),H=E&&E.length||0,v=v.substring(0,v.lastIndexOf("/")),w=function(I){return I.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+v+"$2$3")},y=!H&&x;if(v.length){v+="/"}if(y){H=1}for(var B=0;B<H;B++){var C;if(y){C=x;k.push(w(G))}else{C=E[B].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&w(RegExp.$2))}var z=C.split(","),F=z.length;for(var A=0;A<F;A++){var D=z[A];i.push({media:D.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:k.length-1,minw:D.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:D.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}}j()},l,q,j=function(E){var v="clientWidth",x=r[v],D=u.compatMode==="CSS1Compat"&&x||u.body[v]||x,z={},C=u.createDocumentFragment(),B=b[b.length-1],w=(new Date()).getTime();if(E&&l&&w-l<g){clearTimeout(q);q=setTimeout(j,g);return}else{l=w}for(var y in i){var F=i[y];if(!F.minw&&!F.maxw||(!F.minw||F.minw&&D>=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='_<style media="'+a+'"> #mq-test-1 { width: 9px; }</style>';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));
8
-
9 1
deleted file mode 100755
... ...
@@ -1,5 +0,0 @@
1
-/*!
2
- * selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms of the MIT license.
3
- * selectivizr.com
4
- */
5
-(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;b<e;b++){var s=D(a[b].replace(E,h).replace(F,h))+o,l=[];a[b]=s.replace(G,function(a,b,c,d,e){if(b){if(l.length>0){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<c;e++){for(var d=f[e],h=d.className,j=0,m=a.length;j<m;j++){var g=a[j];if(!RegExp("(^|\\s)"+g.className+"(\\s|$)").test(d.className)&&g.b&&(g.b===!0||g.b(d)===!0))h=u(h,g.className,!0)}d.className=h}}l=[]}return b}else{if(b=c?I(c):!v||v.test(d)?{className:w(d),b:!0}:null)return l.push(b),"."+b.className;return a}})}return d+a.join(",")})}function I(a){var c=!0,d=w(a.slice(1)),b=a.substring(0,5)==":not(",e,f;b&&(a=a.slice(5,-1));var l=a.indexOf("(");l>-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;b<f.styleSheets.length;b++)if(c=f.styleSheets[b],c.href!=i&&(a=r(c.href,d)))c.cssText=A(y(a));q.length>0&&setInterval(function(){for(var a=0,c=q.length;a<c;a++){var b=q[a];if(b.disabled!==b.a)b.disabled?(b.disabled=!1,b.a=!0,b.disabled=!0):b.a=b.disabled}},250)}if(!/*@cc_on!@*/true){var f=document,p=f.documentElement,n=function(){if(j.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),m=/MSIE (\d+)/.exec(navigator.userAgent)[1];if(!(f.compatMode!="CSS1Compat"||m<6||m>8||!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);
6 1
\ No newline at end of file
... ...
@@ -1,6 +1,5 @@
1
-var count = pinboard_count;
2
-var linkroll = 'pinboard_linkroll';
3 1
 function pinboardNS_fetch_script(url) {
2
+  console.log(url);
4 3
   document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>');
5 4
 }
6 5
 
... ...
@@ -10,9 +9,6 @@ function pinboardNS_show_bmarks(r) {
10 10
   lr.show_bmarks();
11 11
 }
12 12
 
13
-var json_URL = "http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count=" + count;
14
-pinboardNS_fetch_script(json_URL);
15
-
16 13
 function Pinboard_Linkroll() {
17 14
   var items;
18 15
 
... ...
@@ -42,7 +38,7 @@ function Pinboard_Linkroll() {
42 42
     if (it.t.length > 0) {
43 43
       for (var i = 0; i < it.t.length; i++) {
44 44
         var tag = it.t[i];
45
-        str += " <a class=\"pin-tag\" href=\"http://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag) + "</a>  ";
45
+        str += " <a class=\"pin-tag\" href=\"http://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag).replace(/^\s+|\s+$/g, '') + "</a> ";
46 46
       }
47 47
     }
48 48
     str += "</p></li>\n";
49 49
new file mode 100644
... ...
@@ -0,0 +1,30 @@
0
+function addDivLines(){
1
+  $('div.highlight pre code').each(function(el){
2
+    var content = bonzo(el).html();
3
+    var lines = content.split('\n');
4
+    var count = lines.length;
5
+    bonzo(lines).each(function(line, index){
6
+      if(line == '') line = ' ';
7
+      lines[index] = '<div class="line">' + line + '</div>';
8
+    });
9
+    $(el).html(lines.join(''));
10
+  });
11
+}
12
+function preToTable(){
13
+  $('div.highlight').each(function(code){
14
+    var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">';
15
+    var lineNumbers = '<pre class="line-numbers">';
16
+    var tableMiddle = '</pre></td><td class="code" width="100%">';
17
+    var tableEnd = '</td></tr></tbody></table>';
18
+    var count = $('div.line', code).length;
19
+    for (i=1;i<=count; i++){
20
+      lineNumbers += '<span class="line">'+i+'</span>\n';
21
+    }
22
+    table = tableStart + lineNumbers + tableMiddle + '<pre>'+$('pre', code).html()+'</pre>' + tableEnd;
23
+    $(code).html(table);
24
+  });
25
+}
26
+$.domReady(function () {
27
+  addDivLines();
28
+  preToTable();
29
+});
... ...
@@ -1,9 +1,3 @@
1
-/* 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 */
2
-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<i;a+=1){g[a]=n(a,b)||'null'}d=g.length===0?'[]':h?'[\n'+h+g.join(',\n'+h)+'\n'+k+']':'['+g.join(',')+']';h=k;return d}if(j&&typeof j==='object'){i=j.length;for(a=0;a<i;a+=1){e=j[a];if(typeof e==='string'){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}else{for(e in b){if(Object.hasOwnProperty.call(b,e)){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}d=g.length===0?'{}':h?'{\n'+h+g.join(',\n'+h)+'\n'+k+'}':'{'+g.join(',')+'}';h=k;return d}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(c,f,a){var e;h='';m='';if(typeof a==='number'){for(e=0;e<a;e+=1){m+=' '}}else if(typeof a==='string'){m=a}j=f;if(f&&typeof f!=='function'&&(typeof f!=='object'||typeof f.length!=='number')){throw new Error('JSON.stringify');}return n('',{'':c})}}if(typeof JSON.parse!=='function'){JSON.parse=function(i,k){var g;function b(c,f){var a,e,d=c[f];if(d&&typeof d==='object'){for(a in d){if(Object.hasOwnProperty.call(d,a)){e=b(d,a);if(e!==undefined){d[a]=e}else{delete d[a]}}}}return k.call(c,f,d)}o.lastIndex=0;if(o.test(i)){i=i.replace(o,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(i.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){g=eval('('+i+')');return typeof k==='function'?b({'':g},''):g}throw new SyntaxError('JSON.parse');}}}());
3
-
4
-// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License
5
-(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
6
-
7 1
 function getTwitterFeed(success, user, count, replies) {
8 2
   feed = new jXHR();
9 3
   feed.onerror = function (msg,url) { alert(msg); }
... ...
@@ -30,18 +24,18 @@ function showTwitterFeed(tweets){
30 30
   var timeline = document.getElementById('tweets');
31 31
   timeline.innerHTML='';
32 32
   for (t in tweets){
33
-    timeline.innerHTML+='<li>'+'<p>'+linkifyTweet(tweets[t].text)+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a></p>'+'</li>';
33
+    timeline.innerHTML+='<li>'+'<p>'+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'"><span>&infin;</span><span>'+prettyDate(tweets[t].created_at)+'</span></a>'+linkifyTweet(tweets[t].text)+'</p>'+'</li>';
34 34
   }
35 35
 }
36 36
 function linkifyTweet(text){
37
-  return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
37
+  return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>')
38 38
     .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
39
-    .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
39
+    .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
40 40
 }
41 41
 
42 42
 function prettyDate(date_str){
43 43
   var time_formats = [
44
-    [60, 'just now', 1], // 60
44
+    [60, 'now', 1], // 60
45 45
     [120, '1 min', '1 minute from now'], // 60*2
46 46
     [3600, 'mins', 60], // 60*60, 60
47 47
     [7200, '1 hour', '1 hour from now'], // 60*60*2
48 48
new file mode 100644
... ...
@@ -0,0 +1,397 @@
0
+---
1
+layout: default
2
+layout: page
3
+nometa: true
4
+title: Syntax Highlighting Debug
5
+---
6
+
7
+<h3 class="filename">gist_syntax_test.rb</h3>
8
+{% gist 996818 test.rb %}
9
+
10
+<h3 class="filename">syntax_test.diff</h3>
11
+{% highlight diff %}
12
+@@ -590,7 +590,7 @@ class SpritesTest < Test::Unit::TestCase
13
+   it "should generate a sprite from nested folders" do
14
+     css = render <<-SCSS
15
+-      @import "nested/*.png";
16
++      @import "nested/**/*.png";
17
+       @include all-nested-sprites;
18
+     SCSS
19
+     assert_correct css, <<-CSS
20
+
21
+{% endhighlight %}
22
+
23
+<h3 class="filename">syntax_test.html</h3>
24
+{% highlight html %}
25
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
26
+<html><head>
27
+<title>A Tiny Page</title>
28
+<style type="text/css">
29
+<!--
30
+      p { font-size:15pt; color:#000 }
31
+    -->
32
+</style></head><!-- real comment -->
33
+<body bgcolor="#FFFFFF" text="#000000" link="#0000CC">
34
+<script language="javascript" type="text/javascript">
35
+      function changeHeight(h) {
36
+        var tds = document.getElementsByTagName("td");
37
+        for(var i = 0; i < tds.length; i++) {
38
+          tds[i].setAttribute("height", h + "px");
39
+      }}
40
+</script>
41
+<h1>abc</h1>
42
+<h2>def</h2>
43
+<p>Testing page</p>
44
+</body></html>
45
+{% endhighlight %}
46
+
47
+<h3 class="filename">syntax_test.js</h3>
48
+{% highlight js %}
49
+
50
+/**
51
+sample javascript from xui
52
+*/
53
+
54
+var undefined,
55
+    xui,
56
+    window     = this,
57
+    string     = new String('string'),
58
+    document   = window.document,
59
+    simpleExpr = /^#?([\w-]+)$/,
60
+    idExpr     = /^#/,
61
+    tagExpr    = /<([\w:]+)/,
62
+    slice      = function (e) { return [].slice.call(e, 0); };
63
+    try { var a = slice(document.documentElement.childNodes)[0].nodeType; }
64
+    catch(e){ slice = function (e) { var ret=[]; for (var i=0; e[i]; i++)
65
+        ret.push(e[i]); return ret; }; }
66
+
67
+window.x$ = window.xui = xui = function(q, context) {
68
+    return new xui.fn.find(q, context);
69
+};
70
+
71
+
72
+{% endhighlight %}
73
+
74
+<h3 class="filename">syntax_test.rb</h3>
75
+{% highlight ruby %}
76
+
77
+include Enumerable
78
+
79
+def initialize(rbconfig)
80
+@rbconfig = rbconfig
81
+@no_harm = false
82
+end
83
+
84
+def load_savefile
85
+begin
86
+    File.foreach(savefile()) do |line|
87
+    k, v = *line.split(/=/, 2)
88
+    self[k] = v.strip
89
+    end
90
+rescue Errno::ENOENT
91
+    setup_rb_error $!.message + "\n#{File.basename($0)} config first"
92
+end
93
+end
94
+
95
+if c['rubylibdir']
96
+    # V > 1.6.3
97
+    libruby         = "#{c['prefix']}/lib/ruby"
98
+    siterubyverarch = c['sitearchdir']
99
+end
100
+parameterize = lambda {|path|
101
+    path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
102
+}
103
+
104
+if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
105
+    makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
106
+else
107
+    makeprog = 'make'
108
+end
109
+
110
+def setup_rb_error(msg)
111
+  raise SetupError, msg
112
+end
113
+
114
+if $0 == __FILE__
115
+  begin
116
+    ToplevelInstaller.invoke
117
+  rescue SetupError
118
+    raise if $DEBUG
119
+    $stderr.puts $!.message
120
+    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
121
+    exit 1
122
+  end
123
+end
124
+{% endhighlight %}
125
+
126
+<h3 class="filename">syntax_test.php</h3>
127
+{% highlight php %}
128
+<?php
129
+require_once($GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/country/common.php");
130
+require_once($GLOBALS['g_campsiteDir']. "/classes/SimplePager.php");
131
+camp_load_translation_strings("api");
132
+
133
+$f_country_language_selected = camp_session_get('f_language_selected', '');
134
+$f_country_offset = camp_session_get('f_country_offset', 0);
135
+if (empty($f_country_language_selected)) {
136
+	$f_country_language_selected = null;
137
+}
138
+$ItemsPerPage = 20;
139
+$languages = Language::GetLanguages(null, null, null, array(), array(), true);
140
+$numCountries = Country::GetNumCountries($f_country_language_selected);
141
+
142
+$pager = new SimplePager($numCountries, $ItemsPerPage, "index.php?");
143
+
144
+$crumbs = array();
145
+$crumbs[] = array(getGS("Configure"), "");
146
+$crumbs[] = array(getGS("Countries"), "");
147
+echo camp_html_breadcrumbs($crumbs);
148
+
149
+?>
150
+
151
+<?php  if ($g_user->hasPermission("ManageCountries")) { ?>
152
+<table BORDER="0" CELLSPACING="0" CELLPADDING="1">
153
+    <tr>
154
+        <td><a href="add.php"><?php putGS("Add new"); ?></a></td>
155
+    </tr>
156
+</table>
157
+{% endhighlight %}
158
+
159
+
160
+<h3 class="filename">syntax_test.hs</h3>
161
+{% highlight hs %}
162
+{-# LANGUAGE OverloadedStrings #-}
163
+module Main where
164
+
165
+--import Prelude hiding (id)
166
+--import Control.Category (id)
167
+import Control.Arrow ((>>>), (***), arr)
168
+import Control.Monad (forM_)
169
+-- import Data.Monoid (mempty, mconcat)
170
+
171
+-- import System.FilePath
172
+
173
+import Hakyll
174
+
175
+
176
+main :: IO ()
177
+main = hakyll $ do
178
+
179
+    route   "css/*" $ setExtension "css"
180
+    compile "css/*" $ byExtension (error "Not a (S)CSS file")
181
+        [ (".css",  compressCssCompiler)
182
+        , (".scss", sass)
183
+        ]
184
+
185
+    route   "js/**" idRoute
186
+    compile "js/**" copyFileCompiler
187
+
188
+    route   "img/*" idRoute
189
+    compile "img/*" copyFileCompiler
190
+
191
+    compile "templates/*" templateCompiler
192
+
193
+    forM_ ["test.md", "index.md"] $ \page -> do
194
+        route   page $ setExtension "html"
195
+        compile page $ pageCompiler
196
+            >>> applyTemplateCompiler "templates/default.html"
197
+            >>> relativizeUrlsCompiler
198
+
199
+sass :: Compiler Resource String
200
+sass = getResourceString >>> unixFilter "sass" ["-s", "--scss"]
201
+                         >>> arr compressCss
202
+
203
+{% endhighlight %}
204
+
205
+<h3 class="filename">syntax_test.sh</h3>
206
+{% highlight sh %}
207
+#!/bin/bash
208
+
209
+cd $ROOT_DIR
210
+DOT_FILES="lastpass weechat ssh Xauthority"
211
+for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done
212
+
213
+# TODO: refactor with suffix variables (or common cron values)
214
+
215
+case "$PLATFORM" in
216
+	linux)
217
+        #conform_link "$CONF_DIR/shell/zshenv" ".zshenv"
218
+        crontab -l > $ROOT_DIR/tmp/crontab-conflict-arch
219
+        cd $ROOT_DIR/$CONF_DIR/cron
220
+        if [[ "$(diff ~/tmp/crontab-conflict-arch crontab-current-arch)" == ""
221
+            ]];
222
+            then # no difference with current backup
223
+                logger "$LOG_PREFIX: crontab live settings match stored "\
224
+                    "settings; no restore required"
225
+                rm ~/tmp/crontab-conflict-arch
226
+            else # current crontab settings in file do not match live settings
227
+                crontab $ROOT_DIR/$CONF_DIR/cron/crontab-current-arch
228
+                logger "$LOG_PREFIX: crontab stored settings conflict with "\
229
+                    "live settings; stored settings restored. "\
230
+                    "Previous settings recorded in ~/tmp/crontab-conflict-arch."
231
+        fi
232
+    ;;
233
+
234
+{% endhighlight %}
235
+
236
+<h3 class="filename">syntax_test.py</h3>
237
+{% highlight py %}
238
+# test python (sample from offlineimap)
239
+
240
+class ExitNotifyThread(Thread):
241
+    """This class is designed to alert a "monitor" to the fact that a thread has
242
+    exited and to provide for the ability for it to find out why."""
243
+    def run(self):
244
+        global exitthreads, profiledir
245
+        self.threadid = thread.get_ident()
246
+        try:
247
+            if not profiledir:          # normal case
248
+                Thread.run(self)
249
+            else:
250
+                try:
251
+                    import cProfile as profile
252
+                except ImportError:
253
+                    import profile
254
+                prof = profile.Profile()
255
+                try:
256
+                    prof = prof.runctx("Thread.run(self)", globals(), locals())
257
+                except SystemExit:
258
+                    pass
259
+                prof.dump_stats( \
260
+                            profiledir + "/" + str(self.threadid) + "_" + \
261
+                            self.getName() + ".prof")
262
+        except:
263
+            self.setExitCause('EXCEPTION')
264
+            if sys:
265
+                self.setExitException(sys.exc_info()[1])
266
+                tb = traceback.format_exc()
267
+                self.setExitStackTrace(tb)
268
+        else:
269
+            self.setExitCause('NORMAL')
270
+        if not hasattr(self, 'exitmessage'):
271
+            self.setExitMessage(None)
272
+
273
+        if exitthreads:
274
+            exitthreads.put(self, True)
275
+
276
+    def setExitCause(self, cause):
277
+        self.exitcause = cause
278
+    def getExitCause(self):
279
+        """Returns the cause of the exit, one of:
280
+        'EXCEPTION' -- the thread aborted because of an exception
281
+        'NORMAL' -- normal termination."""
282
+        return self.exitcause
283
+    def setExitException(self, exc):
284
+        self.exitexception = exc
285
+    def getExitException(self):
286
+        """If getExitCause() is 'EXCEPTION', holds the value from
287
+        sys.exc_info()[1] for this exception."""
288
+        return self.exitexception
289
+    def setExitStackTrace(self, st):
290
+        self.exitstacktrace = st
291
+    def getExitStackTrace(self):
292
+        """If getExitCause() is 'EXCEPTION', returns a string representing
293
+        the stack trace for this exception."""
294
+        return self.exitstacktrace
295
+    def setExitMessage(self, msg):
296
+        """Sets the exit message to be fetched by a subsequent call to
297
+        getExitMessage.  This message may be any object or type except
298
+        None."""
299
+        self.exitmessage = msg
300
+    def getExitMessage(self):
301
+        """For any exit cause, returns the message previously set by
302
+        a call to setExitMessage(), or None if there was no such message
303
+        set."""
304
+        return self.exitmessage
305
+
306
+{% endhighlight %}
307
+
308
+<h3 class="filename">syntax_test.pl</h3>
309
+{% highlight perl %}
310
+#!perl -w
311
+
312
+# Time-stamp: <2002/04/06, 13:12:13 (EST), maverick, csvformat.pl>
313
+# Two pass CSV file to table formatter
314
+
315
+$delim = $#ARGV >= 1 ? $ARGV[1] : ',';
316
+print STDERR "Split pattern: $delim\n";
317
+
318
+# first pass
319
+open F, "<$ARGV[0]" or die;
320
+while(<F>)
321
+{
322
+  chomp;
323
+  $i = 0;
324
+  map { $max[$_->[1]] = $_->[0] if $_->[0] > ($max[$_->[1]] || 0) }
325
+    (map {[length $_, $i++]} split($delim));
326
+}
327
+close F;
328
+
329
+print STDERR 'Field width:   ', join(', ', @max), "\n";
330
+print STDERR join(' ', map {'-' x $_} @max);
331
+
332
+# second pass
333
+open F, "<$ARGV[0]" or die;
334
+while(<F>)
335
+  {
336
+  chomp;
337
+  $i = 0;
338
+  map { printf("%-$max[$_->[1]]s ", $_->[0]) }
339
+    (map {[$_, $i++]} split($delim));
340
+  print "\n";
341
+}
342
+close F;
343
+
344
+{% endhighlight %}
345
+
346
+<h3 class="filename">syntax_test.java</h3>
347
+{% highlight java %}
348
+import java.util.Map;
349
+import java.util.TreeSet;
350
+
351
+public class GetEnv {
352
+  /**
353
+   * let's test generics
354
+   * @param args the command line arguments
355
+   */
356
+  public static void main(String[] args) {
357
+    // get a map of environment variables
358
+    Map<String, String> env = System.getenv();
359
+    // build a sorted set out of the keys and iterate
360
+    for(String k: new TreeSet<String>(env.keySet())) {
361
+      System.out.printf("%s = %s\n", k, env.get(k));
362
+    }
363
+  }    }
364
+{% endhighlight %}
365
+
366
+<h3 class="filename">syntax_test.c</h3>
367
+{% highlight c %}
368
+#define UNICODE
369
+#include <windows.h>
370
+
371
+int main(int argc, char **argv) {
372
+  int speed = 0, speed1 = 0, speed2 = 0; // 1-20
373
+  printf("Set Mouse Speed by Maverick\n");
374
+
375
+  SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
376
+  printf("Current speed: %2d\n", speed);
377
+
378
+  if (argc == 1) return 0;
379
+  if (argc >= 2) sscanf(argv[1], "%d", &speed1);
380
+  if (argc >= 3) sscanf(argv[2], "%d", &speed2);
381
+
382
+  if (argc == 2) // set speed to first value
383
+    speed = speed1;
384
+  else if (speed == speed1 || speed == speed2) // alternate
385
+    speed = speed1 + speed2 - speed;
386
+  else
387
+    speed = speed1;  // start with first value
388
+
389
+  SystemParametersInfo(SPI_SETMOUSESPEED, 0,  speed, 0);
390
+  SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
391
+  printf("New speed:     %2d\n", speed);
392
+  return 0;
393
+}
394
+
395
+{% endhighlight %}
396
+
0 397
deleted file mode 100644
... ...
@@ -1,228 +0,0 @@
1
-layout: default
2
-title: Syntax Highlighting Debug
3
-<div class="code_window">
4
-<em>Ruby</em>
5
-{% highlight ruby %}
6
-def rebuild_site(relative)
7
-  puts ">>> Change Detected to: #{relative} <<<"
8
-  IO.popen('rake generate') do |io|
9
-    print(io.readpartial(512)) until io.eof?
10
-  end
11
-  puts '>>> Update Complete <<<'
12
-end
13
-{% endhighlight %}
14
-</div>
15
-
16
-So that's a small example. What about a big one?
17
-
18
-<div class="code_window">
19
-<em>Ruby</em>
20
-{% highlight ruby %}
21
-require 'active_support/core_ext/array'
22
-require 'active_support/core_ext/hash/except'
23
-require 'active_support/core_ext/object/metaclass'
24
-
25
-module ActiveRecord
26
-  module NamedScope
27
-    extend ActiveSupport::Concern
28
-
29
-    # All subclasses of ActiveRecord::Base have one named scope:
30
-    # * <tt>scoped</tt> - which allows for the creation of anonymous \scopes, on the fly: <tt>Shirt.scoped(:conditions => {:color => 'red'}).scoped(:include => :washing_instructions)</tt>
31
-    #
32
-    # These anonymous \scopes tend to be useful when procedurally generating complex queries, where passing
33
-    # intermediate values (scopes) around as first-class objects is convenient.
34
-    #
35
-    # You can define a scope that applies to all finders using ActiveRecord::Base.default_scope.
36
-    included do
37
-      named_scope :scoped, lambda { |scope| scope }
38
-    end
39
-
40
-    module ClassMethods
41
-      def scopes
42
-        read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {})
43
-      end
44
-
45
-      # Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query,
46
-      # such as <tt>:conditions => {:color => :red}, :select => 'shirts.*', :include => :washing_instructions</tt>.
47
-      #
48
-      #   class Shirt < ActiveRecord::Base
49
-      #     named_scope :red, :conditions => {:color => 'red'}
50
-      #     named_scope :dry_clean_only, :joins => :washing_instructions, :conditions => ['washing_instructions.dry_clean_only = ?', true]
51
-      #   end
52
-      # 
53
-      # The above calls to <tt>named_scope</tt> define class methods Shirt.red and Shirt.dry_clean_only. Shirt.red, 
54
-      # in effect, represents the query <tt>Shirt.find(:all, :conditions => {:color => 'red'})</tt>.
55
-      #
56
-      # Unlike <tt>Shirt.find(...)</tt>, however, the object returned by Shirt.red is not an Array; it resembles the association object
57
-      # constructed by a <tt>has_many</tt> declaration. For instance, you can invoke <tt>Shirt.red.find(:first)</tt>, <tt>Shirt.red.count</tt>,
58
-      # <tt>Shirt.red.find(:all, :conditions => {:size => 'small'})</tt>. Also, just
59
-      # as with the association objects, named \scopes act like an Array, implementing Enumerable; <tt>Shirt.red.each(&block)</tt>,
60
-      # <tt>Shirt.red.first</tt>, and <tt>Shirt.red.inject(memo, &block)</tt> all behave as if Shirt.red really was an Array.
61
-      #
62
-      # These named \scopes are composable. For instance, <tt>Shirt.red.dry_clean_only</tt> will produce all shirts that are both red and dry clean only.
63
-      # Nested finds and calculations also work with these compositions: <tt>Shirt.red.dry_clean_only.count</tt> returns the number of garments
64
-      # for which these criteria obtain. Similarly with <tt>Shirt.red.dry_clean_only.average(:thread_count)</tt>.
65
-      #
66
-      # All \scopes are available as class methods on the ActiveRecord::Base descendant upon which the \scopes were defined. But they are also available to
67
-      # <tt>has_many</tt> associations. If,
68
-      #
69
-      #   class Person < ActiveRecord::Base
70
-      #     has_many :shirts
71
-      #   end
72
-      #
73
-      # then <tt>elton.shirts.red.dry_clean_only</tt> will return all of Elton's red, dry clean
74
-      # only shirts.
75
-      #
76
-      # Named \scopes can also be procedural:
77
-      #
78
-      #   class Shirt < ActiveRecord::Base
79
-      #     named_scope :colored, lambda { |color|
80
-      #       { :conditions => { :color => color } }
81
-      #     }
82
-      #   end
83
-      #
84
-      # In this example, <tt>Shirt.colored('puce')</tt> finds all puce shirts.
85
-      #
86
-      # Named \scopes can also have extensions, just as with <tt>has_many</tt> declarations:
87
-      #
88
-      #   class Shirt < ActiveRecord::Base
89
-      #     named_scope :red, :conditions => {:color => 'red'} do
90
-      #       def dom_id
91
-      #         'red_shirts'
92
-      #       end
93
-      #     end
94
-      #   end
95
-      #
96
-      #
97
-      # For testing complex named \scopes, you can examine the scoping options using the
98
-      # <tt>proxy_options</tt> method on the proxy itself.
99
-      #
100
-      #   class Shirt < ActiveRecord::Base
101
-      #     named_scope :colored, lambda { |color|
102
-      #       { :conditions => { :color => color } }
103
-      #     }
104
-      #   end
105
-      #
106
-      #   expected_options = { :conditions => { :colored => 'red' } }
107
-      #   assert_equal expected_options, Shirt.colored('red').proxy_options
108
-      def named_scope(name, options = {}, &block)
109
-        name = name.to_sym
110
-        scopes[name] = lambda do |parent_scope, *args|
111
-          Scope.new(parent_scope, case options
112
-            when Hash
113
-              options
114
-            when Proc
115
-              options.call(*args)
116
-          end, &block)
117
-        end
118
-        metaclass.instance_eval do
119
-          define_method name do |*args|
120
-            scopes[name].call(self, *args)
121
-          end
122
-        end
123
-      end
124
-    end
125
-
126
-    class Scope
127
-      attr_reader :proxy_scope, :proxy_options, :current_scoped_methods_when_defined
128
-      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
129
-      [].methods.each do |m|
130
-        unless m =~ /^__/ || NON_DELEGATE_METHODS.include?(m.to_s)
131
-          delegate m, :to => :proxy_found
132
-        end
133
-      end
134
-
135
-      delegate :scopes, :with_scope, :scoped_methods, :to => :proxy_scope
136
-
137
-      def initialize(proxy_scope, options, &block)
138
-        options ||= {}
139
-        [options[:extend]].flatten.each { |extension| extend extension } if options[:extend]
140
-        extend Module.new(&block) if block_given?
141
-        unless Scope === proxy_scope
142
-          @current_scoped_methods_when_defined = proxy_scope.send(:current_scoped_methods)
143
-        end
144
-        @proxy_scope, @proxy_options = proxy_scope, options.except(:extend)
145
-      end
146
-
147
-      def reload
148
-        load_found; self
149
-      end
150
-
151
-      def first(*args)
152
-        if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash))
153
-          proxy_found.first(*args)
154
-        else
155
-          find(:first, *args)
156
-        end
157
-      end
158
-
159
-      def last(*args)
160
-        if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash))
161
-          proxy_found.last(*args)
162
-        else
163
-          find(:last, *args)
164
-        end
165
-      end
166
-
167
-      def size
168
-        @found ? @found.length : count
169
-      end
170
-
171
-      def empty?
172
-        @found ? @found.empty? : count.zero?
173
-      end
174
-
175
-      def respond_to?(method, include_private = false)
176
-        super || @proxy_scope.respond_to?(method, include_private)
177
-      end
178
-
179
-      def any?
180
-        if block_given?
181
-          proxy_found.any? { |*block_args| yield(*block_args) }
182
-        else
183
-          !empty?
184
-        end
185
-      end
186
-
187
-      # Returns true if the named scope has more than 1 matching record.
188
-      def many?
189
-        if block_given?
190
-          proxy_found.many? { |*block_args| yield(*block_args) }
191
-        else
192
-          size > 1
193
-        end
194
-      end
195
-
196
-      protected
197
-      def proxy_found
198
-        @found || load_found
199
-      end
200
-
201
-      private
202
-      def method_missing(method, *args, &block)
203
-        if scopes.include?(method)
204
-          scopes[method].call(self, *args)
205
-        else
206
-          with_scope({:find => proxy_options, :create => proxy_options[:conditions].is_a?(Hash) ?  proxy_options[:conditions] : {}}, :reverse_merge) do
207
-            method = :new if method == :build
208
-            if current_scoped_methods_when_defined && !scoped_methods.include?(current_scoped_methods_when_defined)
209
-              with_scope current_scoped_methods_when_defined do
210
-                proxy_scope.send(method, *args, &block)
211
-              end
212
-            else
213
-              proxy_scope.send(method, *args, &block)
214
-            end
215
-          end
216
-        end
217
-      end
218
-
219
-      def load_found
220
-        @found = find(:all)
221
-      end
222
-    end
223
-  end
224
-end
225
-{% endhighlight %}
226
-</div>
227 1
\ No newline at end of file