aboutsummaryrefslogtreecommitdiff
path: root/themes/classic/source
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--themes/classic/source/_includes/article.html28
-rw-r--r--themes/classic/source/_includes/asides/delicious.html7
-rw-r--r--themes/classic/source/_includes/asides/pinboard.html19
-rw-r--r--themes/classic/source/_includes/asides/recent_posts.html12
-rw-r--r--themes/classic/source/_includes/asides/twitter.html19
-rw-r--r--themes/classic/source/_includes/disqus_thread.html7
-rw-r--r--themes/classic/source/_includes/footer.html4
-rw-r--r--themes/classic/source/_includes/google_analytics.html13
-rw-r--r--themes/classic/source/_includes/head.html32
-rw-r--r--themes/classic/source/_includes/header.html1
-rw-r--r--themes/classic/source/_includes/navigation.html16
-rw-r--r--themes/classic/source/_includes/sidebar.html8
-rw-r--r--themes/classic/source/_layouts/archive_monthly.html19
-rw-r--r--themes/classic/source/_layouts/archive_yearly.html25
-rw-r--r--themes/classic/source/_layouts/default.html26
-rw-r--r--themes/classic/source/_layouts/page.html13
-rw-r--r--themes/classic/source/_layouts/post.html16
-rw-r--r--themes/classic/source/_posts/2009-11-13-hello-world.markdown16
-rw-r--r--themes/classic/source/_posts/2011-03-14-test-post.markdown6
-rw-r--r--themes/classic/source/_posts/2011-04-07-test-of-typography.markdown50
-rw-r--r--themes/classic/source/archive.html24
-rw-r--r--themes/classic/source/atom.xml28
-rwxr-xr-xthemes/classic/source/fonts/adellebasic_bold-webfont.eotbin0 -> 13694 bytes
-rwxr-xr-xthemes/classic/source/fonts/adellebasic_bold-webfont.svg139
-rwxr-xr-xthemes/classic/source/fonts/adellebasic_bold-webfont.ttfbin0 -> 24072 bytes
-rwxr-xr-xthemes/classic/source/fonts/adellebasic_bold-webfont.woffbin0 -> 15604 bytes
-rw-r--r--themes/classic/source/images/code_bg.pngbin0 -> 239 bytes
-rw-r--r--themes/classic/source/images/dotted-border.pngbin0 -> 99 bytes
-rw-r--r--themes/classic/source/images/line-tile.pngbin0 -> 636 bytes
-rw-r--r--themes/classic/source/images/rss.pngbin0 -> 504 bytes
-rw-r--r--themes/classic/source/images/search.pngbin0 -> 333 bytes
-rw-r--r--themes/classic/source/index.html11
-rw-r--r--themes/classic/source/javascripts/libs/ender.js1497
-rw-r--r--themes/classic/source/javascripts/libs/jXHR.js85
-rw-r--r--themes/classic/source/javascripts/octopress.js88
-rw-r--r--themes/classic/source/javascripts/pinboard.js56
-rw-r--r--themes/classic/source/javascripts/twitter.js80
-rw-r--r--themes/classic/source/stylesheets/screen.css1
-rw-r--r--themes/classic/source/test/syntax.html397
-rw-r--r--themes/classic/source/test/typography.haml114
40 files changed, 2857 insertions, 0 deletions
diff --git a/themes/classic/source/_includes/article.html b/themes/classic/source/_includes/article.html
new file mode 100644
index 00000000..1be65526
--- /dev/null
+++ b/themes/classic/source/_includes/article.html
@@ -0,0 +1,28 @@
+{% if page.author %}
+ {% assign author = page.author %}
+{% else %}
+ {% assign author = site.author %}
+{% endif %}
+<header>
+ {% if index %}
+ <h1 class="entry-title"><a href="{{ page.url }}">{{ page.title }}</a></h1>
+ {% else %}
+ <h1 class="entry-title">{{ page.title }}</h1>
+ {% endif %}
+ {% unless page.nometa %}
+ <p>
+ {% if page.date %}
+ <time datetime="{{ page.date | datetime }}" pubdate {% if page.updated %} updated {% endif %}>{{ page.date | ordinalize }}</time>
+ {% endif %}
+ {% if page.updated %}
+ <time class="updated" datetime="{{ page.updated | datetime }}"></time>
+ {% endif %}
+ {% if author %}<span class="byline author vcard">By <span class="fn">{{ author }}</span></span>{% endif %}
+ </p>
+ {% endunless %}
+</header>
+{% if index %}
+<div class="entry-content">{{ content | exerpt(content, page.url, 'Continue reading &raquo;') | smart_quotes }}</div>
+{% else %}
+<div class="entry-content">{{ content | smart_quotes }}</div>
+{% endif %}
diff --git a/themes/classic/source/_includes/asides/delicious.html b/themes/classic/source/_includes/asides/delicious.html
new file mode 100644
index 00000000..307a2e94
--- /dev/null
+++ b/themes/classic/source/_includes/asides/delicious.html
@@ -0,0 +1,7 @@
+{% if site.delicious_user %}
+<section>
+ <h1>On Delicious</h1>
+ <script type="text/javascript" src="http://feeds.delicious.com/v2/js/{{ site.delicious_user }}?title=&count={{ site.delicious_count }}&sort=date&extended"></script>
+ <p><a href="http://delicious.com/{{ site.delicious_user }}">My Delicious Bookmarks &raquo;</a></p>
+</section>
+{% endif %}
diff --git a/themes/classic/source/_includes/asides/pinboard.html b/themes/classic/source/_includes/asides/pinboard.html
new file mode 100644
index 00000000..1cbb1379
--- /dev/null
+++ b/themes/classic/source/_includes/asides/pinboard.html
@@ -0,0 +1,19 @@
+{% if site.pinboard_user %}
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:{{ site.pinboard_user }}">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "{{ site.pinboard_user }}"; //id target for pinboard list
+ var pinboard_count = {{ site.pinboard_count }}; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+{% endif %}
diff --git a/themes/classic/source/_includes/asides/recent_posts.html b/themes/classic/source/_includes/asides/recent_posts.html
new file mode 100644
index 00000000..7b40b76e
--- /dev/null
+++ b/themes/classic/source/_includes/asides/recent_posts.html
@@ -0,0 +1,12 @@
+{% if page.single and site.recent_posts %}
+<section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+ {% for post in site.posts limit: site.recent_posts %}
+ <li class="post">
+ <a href="{{ post.url }}">{{ post.title }}</a>
+ </li>
+ {% endfor %}
+ </ul>
+ </section>
+{% endif %}
diff --git a/themes/classic/source/_includes/asides/twitter.html b/themes/classic/source/_includes/asides/twitter.html
new file mode 100644
index 00000000..15cab8bc
--- /dev/null
+++ b/themes/classic/source/_includes/asides/twitter.html
@@ -0,0 +1,19 @@
+{% if site.twitter_user %}
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("{{site.twitter_user}}", {{site.twitter_tweet_count}}, {{site.twitter_show_replies}});
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+ {% if site.twitter_follow_button %}
+ <a href="http://twitter.com/{{ site.twitter_user }}" class="twitter-follow-button" data-width="208px" data-show-count="{{ site.twitter_show_follower_count }}">Follow @{{ site.twitter_user }}</a>
+ {% else %}
+ <p>Follow <a href="http://twitter.com/{{site.twitter_user}}">@{{ site.twitter_user }}</a></p>
+ {% endif %}
+</section>
+{% endif %}
diff --git a/themes/classic/source/_includes/disqus_thread.html b/themes/classic/source/_includes/disqus_thread.html
new file mode 100644
index 00000000..036b9d7b
--- /dev/null
+++ b/themes/classic/source/_includes/disqus_thread.html
@@ -0,0 +1,7 @@
+<script type="text/javascript">
+ var disqus_url = "{{ site.url }}{{ page.url }}";
+</script>
+<noscript>
+ <a href="http://{{ site.disqus_short_name }}.disqus.com/?url=ref">View the discussion thread</a>
+</noscript>
+<script type="text/javascript" src="http://disqus.com/forums/{{ site.disqus_short_name }}/embed.js"></script>
diff --git a/themes/classic/source/_includes/footer.html b/themes/classic/source/_includes/footer.html
new file mode 100644
index 00000000..e12f0678
--- /dev/null
+++ b/themes/classic/source/_includes/footer.html
@@ -0,0 +1,4 @@
+<p>
+ Copyright &copy; {{ site.time | date: "%Y" }} - {{ site.author }} -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
diff --git a/themes/classic/source/_includes/google_analytics.html b/themes/classic/source/_includes/google_analytics.html
new file mode 100644
index 00000000..4d4d5969
--- /dev/null
+++ b/themes/classic/source/_includes/google_analytics.html
@@ -0,0 +1,13 @@
+{% if site.google_analytics_tracking_id %}
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', '{{ site.google_analytics_tracking_id }}']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+{% endif %}
diff --git a/themes/classic/source/_includes/head.html b/themes/classic/source/_includes/head.html
new file mode 100644
index 00000000..bf93b7b6
--- /dev/null
+++ b/themes/classic/source/_includes/head.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ {% if page.title %}
+ <title>{{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
+ {% else %}
+ <title>{{site.title}}{% if site.author %} - {{ site.author }}{% endif %}</title>
+ {% endif %}
+ <meta name="author" content="{{site.author}}">
+ {% if page.description %}
+ <meta name="description" content="{{page.description}}"/>
+ {% endif %}
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ {% if page.keywords %}
+ <meta name="keywords" content="{{page.keywords}}"/>
+ {% endif %}
+
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ {% include google_analytics.html %}
+ <link href="/atom.xml" rel="alternate" title="{{site.title}}" type="application/atom+xml"/>
+</head>
diff --git a/themes/classic/source/_includes/header.html b/themes/classic/source/_includes/header.html
new file mode 100644
index 00000000..4e0519e6
--- /dev/null
+++ b/themes/classic/source/_includes/header.html
@@ -0,0 +1 @@
+<h1><a href="/">{{ site.title }}</a></h1>
diff --git a/themes/classic/source/_includes/navigation.html b/themes/classic/source/_includes/navigation.html
new file mode 100644
index 00000000..766c220f
--- /dev/null
+++ b/themes/classic/source/_includes/navigation.html
@@ -0,0 +1,16 @@
+<ul role="subscription">
+ <li><a href="{{ site.subscribe_rss }}" rel="subscribe-rss">RSS</a></li>
+ {% if site.subscribe_emai %}
+ <li><a href="{{ site.subscribe_email }}" rel="subscribe-email">Email</a></li>
+ {% endif %}
+</ul>
+<form action="{{ site.simple_search }}" method="get">
+ <fieldset role="site-search">
+ <input type="hidden" name="q" value="site:{{ site.url | search_url }}" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+<ul role="main-nav">
+ <li><a href="/">Home</a></li>
+ <li><a href="/archive.html">Archive</a></li>
+</ul>
diff --git a/themes/classic/source/_includes/sidebar.html b/themes/classic/source/_includes/sidebar.html
new file mode 100644
index 00000000..0bce3c77
--- /dev/null
+++ b/themes/classic/source/_includes/sidebar.html
@@ -0,0 +1,8 @@
+<section>
+ <h1>About Me</h1>
+ <p>Hi, I'm Octopress!</p>
+</section>
+{% include asides/recent_posts.html %}
+{% include asides/twitter.html %}
+{% include asides/delicious.html %}
+{% include asides/pinboard.html %}
diff --git a/themes/classic/source/_layouts/archive_monthly.html b/themes/classic/source/_layouts/archive_monthly.html
new file mode 100644
index 00000000..85ada6d8
--- /dev/null
+++ b/themes/classic/source/_layouts/archive_monthly.html
@@ -0,0 +1,19 @@
+---
+layout: default
+---
+<div id="content">
+ <div class="post">
+ <h1 class="post-title">{{ page.month | date_to_month }} {{ page.year }}</h1>
+ <p class="lead">Posts from {{ page.month | date_to_month }}, {{ page.year }}</p>
+ <ul>
+ {% for d in (1..31) reversed %}
+ {% if page.collated_posts[page.year][page.month][d] %}
+ {% for p in page.collated_posts[page.year][page.month][d] reversed %}
+ <li><a href='{{ p.url }}'>{{ p.title }}</a></li>
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ </ul>
+ </div>
+</div>
+
diff --git a/themes/classic/source/_layouts/archive_yearly.html b/themes/classic/source/_layouts/archive_yearly.html
new file mode 100644
index 00000000..dabebebd
--- /dev/null
+++ b/themes/classic/source/_layouts/archive_yearly.html
@@ -0,0 +1,25 @@
+---
+layout: default
+---
+<div id="content">
+ <div class="post">
+ <h1 class="post-title">{{ page.year }}</h1>
+ <p class="lead">Posts from the year {{ page.year }}</p>
+ {% for m in (1..12) reversed %}
+ {% if page.collated_posts[page.year][m] %}
+ <h3>{{ m | date_to_month }}</h3>
+ {% for d in (1..31) reversed %}
+ {% if page.collated_posts[page.year][m][d] %}
+ {% for p in page.collated_posts[page.year][m][d] reversed %}
+ <div>
+ <strong>{{ p.date | date: "%d" }}</strong>
+ <a href='{{ p.url }}'>{{ p.title }}</a>
+ </div>
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ </div>
+</div>
+
diff --git a/themes/classic/source/_layouts/default.html b/themes/classic/source/_layouts/default.html
new file mode 100644
index 00000000..dc69ef83
--- /dev/null
+++ b/themes/classic/source/_layouts/default.html
@@ -0,0 +1,26 @@
+{% include head.html %}
+<body {% if page.body_id %} id="{{ page.body_id }}" {% endif %} {% if page.sidebar == 'none' %} class="no-sidebar" {% endif %}>
+ <header>{% include header.html %}</header>
+ <nav>{% include navigation.html %}</nav>
+ <div>
+ <div>
+ <div id="articles">{{ content }}</div>
+ {% unless page.sidebar == 'none' %}
+ <aside>{% include sidebar.html %}</aside>
+ {% endunless %}
+ </div>
+ </div>
+ <footer>{% include footer.html %}</footer>
+ {% if site.twitter_follow_button or site.twitter_tweet_button %}
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+ {% endif %}
+</body>
+</html>
diff --git a/themes/classic/source/_layouts/page.html b/themes/classic/source/_layouts/page.html
new file mode 100644
index 00000000..88d6e13a
--- /dev/null
+++ b/themes/classic/source/_layouts/page.html
@@ -0,0 +1,13 @@
+---
+layout: default
+no_title_link: true
+permalink: pretty
+single: true
+---
+
+<article>
+ {% include article.html %}
+ {% if site.disqus_short_name %}
+ <div id="disqus_thread">{% include disqus_thread.html %}</div>
+ {% endif %}
+</article>
diff --git a/themes/classic/source/_layouts/post.html b/themes/classic/source/_layouts/post.html
new file mode 100644
index 00000000..7407d1e3
--- /dev/null
+++ b/themes/classic/source/_layouts/post.html
@@ -0,0 +1,16 @@
+---
+layout: default
+single: true
+---
+
+<article class="hentry">
+ {% include article.html %}
+ <footer>
+ <p>
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="{{ site.url }}{{ page.url }}" data-via="{{ site.twitter_user }}" data-counturl="{{ site.url }}{{ page.url }}" >Tweet</a>
+ </p>
+ </footer>
+ {% if site.disqus_short_name %}
+ <div id="disqus_thread">{% include disqus_thread.html %}</div>
+ {% endif %}
+</article>
diff --git a/themes/classic/source/_posts/2009-11-13-hello-world.markdown b/themes/classic/source/_posts/2009-11-13-hello-world.markdown
new file mode 100644
index 00000000..af719856
--- /dev/null
+++ b/themes/classic/source/_posts/2009-11-13-hello-world.markdown
@@ -0,0 +1,16 @@
+---
+title: Hello World! I'm Octopress!
+layout: post
+updated: March 10th, 2010
+---
+
+**Octopress is a blogging framework designed for hackers**, based on [Jekyll](http://github.com/mojombo/jekyll) the blog aware static site generator powering [Github pages](http://pages.github.com/).
+If you don't know what Jekyll is, [Jack Moffitt](http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/) wrote a good summary:
+
+{% blockquote Jack Moffitt http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/ Blogging with Git Emacs and Jekyll %}
+ Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control.
+{% endblockquote %}
+
+There's no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work.
+
+[Read the wiki to learn more](http://wiki.github.com/imathis/octopress/)
diff --git a/themes/classic/source/_posts/2011-03-14-test-post.markdown b/themes/classic/source/_posts/2011-03-14-test-post.markdown
new file mode 100644
index 00000000..5fd45b8f
--- /dev/null
+++ b/themes/classic/source/_posts/2011-03-14-test-post.markdown
@@ -0,0 +1,6 @@
+---
+title: Test Post
+layout: post
+---
+
+This is a test!
diff --git a/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown b/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown
new file mode 100644
index 00000000..5ae332c5
--- /dev/null
+++ b/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown
@@ -0,0 +1,50 @@
+---
+title: "Test of Typography"
+date: 2011-04-07 19:17
+layout: post
+---
+
+In the past I've always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten *professionally* printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.
+
+## Why Have Business Cards?
+I'm rarely asked for my business card except when I attend conferences, of which I attend one or two each year. As a freelance contractor, I leave work by walking twenty-five feet from my office to the couch. Many of the
+people I work for I've never met in-person.
+
+When someone gives me their business card, I read it, pocket it, and eventually throw it out &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?
+
+<!-- more -->
+
+### Inspiration Demands Action
+In one of our campfire chats [Nathaniel Talbott](http://twitter.com/NTalbott) showed off his business cards which he printed through [Moo](http://moo.com). 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.
+
+<img src="/content/blog/2010/cards/box.jpg" alt="cards in a box" width="300px" class="right"/> Moo's [MiniCard's](http://moo.com/products/minicards.php) are very unique. You can print 100 cards, each with a totally different back. With a typical printing service this would be prohibitively expensive, but with Moo the rules are different. This freedom encourages us to go beyond nicely styled contact information and branding. Some clever uses involve offering unique invite codes for a web application, or sharing a photography portfolio with Moo's Flickr import feature.
+
+I realized that I could print several design iterations and decide later which worked best. Without the pressure to choose a single design, I felt the freedom to create.
+
+### The Freedom to Fail
+<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'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.
+
+<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.
+
+### A Second Iteration
+After holding the finished product, I began to see how my design could be improved. I learned that Gill Sans is harder to read at a small size in a high contrast print, so I switched to Futura. I showed my cards to some far-sighted friends and adjusted my font size accordingly. I discarded a background gradient (which I should have known wouldn't translate well to print) in favor of a solid color. **Sidenote:** On screen, gradients emulate the subtleties of a natural light source, but on a real object it doesn't make sense and generally looks bad.
+
+I changed my approach choosing a single design with multiple color variations. In the promotional cards Moo sent me, I learned that they do a fantastic job with bright colors and I wanted to use that boldness in my design. I was inspired by what [Seth Godin said](http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html):
+
+> Every interaction is both precious and an opportunity to delight.
+
+<img src="/content/blog/2010/cards/holder.jpg" alt="MiniCard Holder" width="220px" class="right"/> I pictured sliding a card out of my [MiniCard Holder](http://moo.com/products/accessories/holders/moo_minicard_holders) and revealing another brightly-colored card beneath. As I hand someone a card they'll see the flash of color and realize that their card was special, and different from my other cards. That's what I want my clients and future clients to feel.
+
+### The Final Design
+
+<img src="/content/blog/2010/cards/all.jpg" alt="all card designs" width="640px"/>
+
+The MiniCard's unique constraints inspired me with a fresh challenge and their pricing model encouraged me to experiment. Instead of treating business cards like a necessary design task, I saw them as a opportunity to release quickly, fail cheaply, and improve. Now when I give someone a business card, it's something valuable to me, and I hope they're delighted.
+
+**Update:** I thought I'd share some other great uses of Moo's MiniCards. There's a fantastic [Flikr pool](http://www.flickr.com/groups/moo/pool/), but here are some of my favorites. Enjoy:
+
+- [Product](http://www.flickr.com/photos/lushlampwork/4131018201/in/pool-moo) [tags](http://www.flickr.com/photos/lushlampwork/4297224179/in/pool-moo)
+- [Photography](http://www.flickr.com/photos/thisiswoly/4206576342/in/pool-moo) or [art](http://www.flickr.com/photos/lesleybarnes/4276368956/in/pool-moo) [portfolios](http://www.flickr.com/photos/playinprogress/4158223112/in/pool-moo)
+- [Gift](http://www.flickr.com/photos/polkadotcreations/4167249758/in/pool-moo) [tags](http://www.flickr.com/photos/22338102@N04/4278114745/in/pool-moo)
+- [An advent calendar](http://www.flickr.com/photos/bcome/4177034036/in/pool-moo)
+
diff --git a/themes/classic/source/archive.html b/themes/classic/source/archive.html
new file mode 100644
index 00000000..98518aa5
--- /dev/null
+++ b/themes/classic/source/archive.html
@@ -0,0 +1,24 @@
+---
+layout: page
+title: Blog Archive
+nometa: true
+---
+{% for post in site.posts reverse %}
+ {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
+ {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}
+ {% unless year == this_year %}
+ {% unless forloop.first %}</ul>{% endunless %}
+ {% assign year = this_year %}
+ <h2>{{ year }}</h2>
+ <ul class="blog_archives">
+ {% endunless %}
+ {% unless month == this_month %}
+ {% assign month = this_month %}
+ <li><h4>{{ month }}</h4></li>
+ {% endunless %}
+ <li>
+ <time datetime="{{ post.date | datetime }}" pubdate>{{ post.date | date: "%d"}}</time>
+ <a href="{{ post.url }}">{{post.title}}</a>
+ </li>
+ {% if forloop.last %}</ul>{% endif %}
+{% endfor %}
diff --git a/themes/classic/source/atom.xml b/themes/classic/source/atom.xml
new file mode 100644
index 00000000..3b4e6613
--- /dev/null
+++ b/themes/classic/source/atom.xml
@@ -0,0 +1,28 @@
+---
+layout: nil
+---
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title>{{ site.blog_title }}</title>
+ <link href="{{ site.url }}/atom.xml" rel="self"/>
+ <link href="{{ site.url }}/"/>
+ <updated>{{ site.time | date_to_xmlschema }}</updated>
+ <id>{{ site.url }}/</id>
+ <author>
+ <name>{{ site.author }}</name>
+ {% if site.email %}
+ <email>{{ site.email }}</email>
+ {% endif %}
+ </author>
+
+ {% for post in site.posts %}
+ <entry>
+ <title>{{ post.title }}</title>
+ <link href="{{ site.url }}{{ post.url }}"/>
+ <updated>{{ post.date | date_to_xmlschema }}</updated>
+ <id>{{ site.url }}{{ post.id }}</id>
+ <content type="html">{{ post.content | full_urls: site.url | xml_escape }}</content>
+ </entry>
+ {% endfor %}
+</feed>
diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.eot b/themes/classic/source/fonts/adellebasic_bold-webfont.eot
new file mode 100755
index 00000000..5bace32f
--- /dev/null
+++ b/themes/classic/source/fonts/adellebasic_bold-webfont.eot
Binary files differ
diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.svg b/themes/classic/source/fonts/adellebasic_bold-webfont.svg
new file mode 100755
index 00000000..c259c24c
--- /dev/null
+++ b/themes/classic/source/fonts/adellebasic_bold-webfont.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Copyright c 2009 by TypeTogether All rights reserved
+Designer : Veronika Burian Jos Scaglione
+Foundry : TypeTogether
+Foundry URL : wwwtypetogethercom
+</metadata>
+<defs>
+<font id="webfontKykxqSyz" horiz-adv-x="1167" >
+<font-face units-per-em="2048" ascent="1546" descent="-502" />
+<missing-glyph horiz-adv-x="413" />
+<glyph unicode=" " horiz-adv-x="413" />
+<glyph unicode="&#x09;" horiz-adv-x="413" />
+<glyph unicode="&#xa0;" horiz-adv-x="413" />
+<glyph unicode="!" horiz-adv-x="569" d="M414 401h-258l-37 719v363h330v-363zM461 135q0 -160 -176 -160t-176 160t176 160t176 -160z" />
+<glyph unicode="&#x22;" horiz-adv-x="825" d="M358 915h-276v531h276v-531zM743 915h-276v531h276v-531z" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="'" horiz-adv-x="442" d="M358 915h-276v531h276v-531z" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="+" d="M705 248h-246v295h-273v237h273v287h246v-287h274v-237h-274v-295z" />
+<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" />
+<glyph unicode="-" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
+<glyph unicode="." horiz-adv-x="555" d="M453 135q0 -160 -174 -160q-176 0 -176.5 160t176.5 160q174 0 174 -160z" />
+<glyph unicode="/" horiz-adv-x="929" d="M315 -188h-292l575 1734h291z" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="4" horiz-adv-x="1140" d="M934 -137h-283v264h-598v211l420 879l268 -123l-387 -727h297v329l283 43v-372h170v-240h-170v-264z" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="&#x3c;" d="M940 172l-799 281v286l795 291l70 -231l-598 -201l602 -201z" />
+<glyph unicode="=" d="M979 266h-791v240h791v-240zM979 647h-791v240h791v-240z" />
+<glyph unicode="&#x3e;" d="M1010 453l-799 -281l-70 225l602 201l-596 201l68 231l795 -291v-286z" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="[" horiz-adv-x="630" d="M557 -293h-459v1776h459v-156l-127 -22q-33 -4 -33 -41v-1336q0 -39 33 -43l127 -22v-156z" />
+<glyph unicode="\" horiz-adv-x="921" d="M897 -188h-283l-573 1734h281z" />
+<glyph unicode="]" horiz-adv-x="630" d="M532 1483v-1776h-464v156l133 22q33 4 32 43v1295q0 76 -32 82l-133 22v156h464z" />
+<glyph unicode="^" horiz-adv-x="1247" d="M1186 612h-295l-273 492l-266 -492h-291l404 748h313z" />
+<glyph unicode="_" horiz-adv-x="1024" d="M1024 -371h-1024v219h1024v-219z" />
+<glyph unicode="`" horiz-adv-x="1024" d="M762 1251l-117 -102l-364 299l168 160z" />
+<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" />
+<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 " />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="|" horiz-adv-x="573" d="M426 -293h-281v1839h281v-1839z" />
+<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" />
+<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" />
+<glyph unicode="&#xad;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
+<glyph unicode="&#x2000;" horiz-adv-x="802" />
+<glyph unicode="&#x2001;" horiz-adv-x="1607" />
+<glyph unicode="&#x2002;" horiz-adv-x="802" />
+<glyph unicode="&#x2003;" horiz-adv-x="1607" />
+<glyph unicode="&#x2004;" horiz-adv-x="534" />
+<glyph unicode="&#x2005;" horiz-adv-x="401" />
+<glyph unicode="&#x2006;" horiz-adv-x="266" />
+<glyph unicode="&#x2007;" horiz-adv-x="266" />
+<glyph unicode="&#x2008;" horiz-adv-x="200" />
+<glyph unicode="&#x2009;" horiz-adv-x="321" />
+<glyph unicode="&#x200a;" horiz-adv-x="88" />
+<glyph unicode="&#x2010;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
+<glyph unicode="&#x2011;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
+<glyph unicode="&#x2012;" horiz-adv-x="636" d="M596 465h-555v260h555v-260z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1024" d="M1022 465h-1022v219h1022v-219z" />
+<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M2048 465h-2048v219h2048v-219z" />
+<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" />
+<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" />
+<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" />
+<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" />
+<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" />
+<glyph unicode="&#x202f;" horiz-adv-x="321" />
+<glyph unicode="&#x205f;" horiz-adv-x="401" />
+<glyph unicode="&#xe000;" horiz-adv-x="1065" d="M0 1065h1065v-1065h-1065v1065z" />
+<glyph horiz-adv-x="1024" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.ttf b/themes/classic/source/fonts/adellebasic_bold-webfont.ttf
new file mode 100755
index 00000000..7e70d0de
--- /dev/null
+++ b/themes/classic/source/fonts/adellebasic_bold-webfont.ttf
Binary files differ
diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.woff b/themes/classic/source/fonts/adellebasic_bold-webfont.woff
new file mode 100755
index 00000000..07ae59a2
--- /dev/null
+++ b/themes/classic/source/fonts/adellebasic_bold-webfont.woff
Binary files differ
diff --git a/themes/classic/source/images/code_bg.png b/themes/classic/source/images/code_bg.png
new file mode 100644
index 00000000..a57bab56
--- /dev/null
+++ b/themes/classic/source/images/code_bg.png
Binary files differ
diff --git a/themes/classic/source/images/dotted-border.png b/themes/classic/source/images/dotted-border.png
new file mode 100644
index 00000000..57f99071
--- /dev/null
+++ b/themes/classic/source/images/dotted-border.png
Binary files differ
diff --git a/themes/classic/source/images/line-tile.png b/themes/classic/source/images/line-tile.png
new file mode 100644
index 00000000..f67ee19f
--- /dev/null
+++ b/themes/classic/source/images/line-tile.png
Binary files differ
diff --git a/themes/classic/source/images/rss.png b/themes/classic/source/images/rss.png
new file mode 100644
index 00000000..f458e57d
--- /dev/null
+++ b/themes/classic/source/images/rss.png
Binary files differ
diff --git a/themes/classic/source/images/search.png b/themes/classic/source/images/search.png
new file mode 100644
index 00000000..1220ff4e
--- /dev/null
+++ b/themes/classic/source/images/search.png
Binary files differ
diff --git a/themes/classic/source/index.html b/themes/classic/source/index.html
new file mode 100644
index 00000000..09eb8d13
--- /dev/null
+++ b/themes/classic/source/index.html
@@ -0,0 +1,11 @@
+---
+layout: default
+---
+{% for page in site.posts limit:3 %}
+{% assign content = page.content %}
+{% assign index = true %}
+ <article>
+ {% include article.html %}
+ </article>
+{% endfor %}
+
diff --git a/themes/classic/source/javascripts/libs/ender.js b/themes/classic/source/javascripts/libs/ender.js
new file mode 100644
index 00000000..5e56fd89
--- /dev/null
+++ b/themes/classic/source/javascripts/libs/ender.js
@@ -0,0 +1,1497 @@
+/*!
+ * Ender: open module JavaScript framework
+ * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
+ * https://ender.no.de
+ * License MIT
+ * Build: ender -b jeesh
+ */
+!function (context) {
+
+ function aug(o, o2) {
+ for (var k in o2) {
+ k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
+ }
+ return o;
+ }
+
+ function boosh(s, r) {
+ var els;
+ if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) { //string || node || nodelist || window
+ els = ender._select(s, r);
+ els.selector = s;
+ } else {
+ els = isFinite(s.length) ? s : [s];
+ }
+ return aug(els, boosh);
+ }
+
+ function ender(s, r) {
+ return boosh(s, r);
+ }
+
+ aug(ender, {
+ _VERSION: '0.2.0',
+ ender: function (o, chain) {
+ aug(chain ? boosh : ender, o);
+ }
+ });
+
+ aug(boosh, {
+ forEach: function (fn, scope) {
+ // opt out of native forEach so we can intentionally call our own scope
+ // defaulting to the current item
+ for (var i = 0, l = this.length; i < l; ++i) {
+ i in this && fn.call(scope || this[i], this[i], i, this);
+ }
+ // return self for chaining
+ return this;
+ }
+ });
+
+ var old = context.$;
+ ender.noConflict = function () {
+ context.$ = old;
+ return this;
+ };
+
+ (typeof module !== 'undefined') && module.exports && (module.exports = ender);
+ // use subscript notation as extern for Closure compilation
+ context['ender'] = context['$'] = ender;
+
+}(this);
+/*!
+ * bean.js - copyright Jacob Thornton 2011
+ * https://github.com/fat/bean
+ * MIT License
+ * special thanks to:
+ * dean edwards: http://dean.edwards.name/
+ * dperini: https://github.com/dperini/nwevents
+ * the entire mootools team: github.com/mootools/mootools-core
+ */
+!function (context) {
+ var __uid = 1, registry = {}, collected = {},
+ overOut = /over|out/,
+ namespace = /[^\.]*(?=\..*)\.|.*/,
+ stripName = /\..*/,
+ addEvent = 'addEventListener',
+ attachEvent = 'attachEvent',
+ removeEvent = 'removeEventListener',
+ detachEvent = 'detachEvent',
+ doc = context.document || {},
+ root = doc.documentElement || {},
+ W3C_MODEL = root[addEvent],
+ eventSupport = W3C_MODEL ? addEvent : attachEvent,
+
+ isDescendant = function (parent, child) {
+ var node = child.parentNode;
+ while (node != null) {
+ if (node == parent) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ },
+
+ retrieveUid = function (obj, uid) {
+ return (obj.__uid = uid || obj.__uid || __uid++);
+ },
+
+ retrieveEvents = function (element) {
+ var uid = retrieveUid(element);
+ return (registry[uid] = registry[uid] || {});
+ },
+
+ listener = W3C_MODEL ? function (element, type, fn, add) {
+ element[add ? addEvent : removeEvent](type, fn, false);
+ } : function (element, type, fn, add, custom) {
+ custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
+ element[add ? attachEvent : detachEvent]('on' + type, fn);
+ },
+
+ nativeHandler = function (element, fn, args) {
+ return function (event) {
+ event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
+ return fn.apply(element, [event].concat(args));
+ };
+ },
+
+ customHandler = function (element, fn, type, condition, args) {
+ return function (event) {
+ if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
+ fn.apply(element, [event].concat(args));
+ }
+ };
+ },
+
+ addListener = function (element, orgType, fn, args) {
+ var type = orgType.replace(stripName, ''),
+ events = retrieveEvents(element),
+ handlers = events[type] || (events[type] = {}),
+ uid = retrieveUid(fn, orgType.replace(namespace, ''));
+ if (handlers[uid]) {
+ return element;
+ }
+ var custom = customEvents[type];
+ if (custom) {
+ fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
+ type = custom.base || type;
+ }
+ var isNative = nativeEvents[type];
+ fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
+ isNative = W3C_MODEL || isNative;
+ if (type == 'unload') {
+ var org = fn;
+ fn = function () {
+ removeListener(element, type, fn) && org();
+ };
+ }
+ element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
+ handlers[uid] = fn;
+ fn.__uid = uid;
+ return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
+ },
+
+ removeListener = function (element, orgType, handler) {
+ var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
+ if (!events || !events[type]) {
+ return element;
+ }
+ names = orgType.replace(namespace, '');
+ uids = names ? names.split('.') : [handler.__uid];
+ for (i = uids.length; i--;) {
+ uid = uids[i];
+ handler = events[type][uid];
+ delete events[type][uid];
+ if (element[eventSupport]) {
+ type = customEvents[type] ? customEvents[type].base : type;
+ var isNative = W3C_MODEL || nativeEvents[type];
+ listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
+ }
+ }
+ return element;
+ },
+
+ del = function (selector, fn, $) {
+ return function (e) {
+ var array = typeof selector == 'string' ? $(selector, this) : selector;
+ for (var target = e.target; target && target != this; target = target.parentNode) {
+ for (var i = array.length; i--;) {
+ if (array[i] == target) {
+ return fn.apply(target, arguments);
+ }
+ }
+ }
+ };
+ },
+
+ add = function (element, events, fn, delfn, $) {
+ if (typeof events == 'object' && !fn) {
+ for (var type in events) {
+ events.hasOwnProperty(type) && add(element, type, events[type]);
+ }
+ } else {
+ var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
+ fn = isDel ? del(events, delfn, $) : fn;
+ for (var i = types.length; i--;) {
+ addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
+ }
+ }
+ return element;
+ },
+
+ remove = function (element, orgEvents, fn) {
+ var k, type, events,
+ isString = typeof(orgEvents) == 'string',
+ names = isString && orgEvents.replace(namespace, ''),
+ rm = removeListener,
+ attached = retrieveEvents(element);
+ if (isString && /\s/.test(orgEvents)) {
+ orgEvents = orgEvents.split(' ');
+ var i = orgEvents.length - 1;
+ while (remove(element, orgEvents[i]) && i--) {}
+ return element;
+ }
+ events = isString ? orgEvents.replace(stripName, '') : orgEvents;
+ if (!attached || (isString && !attached[events])) {
+ return element;
+ }
+ if (typeof fn == 'function') {
+ rm(element, events, fn);
+ } else if (names) {
+ rm(element, orgEvents);
+ } else {
+ rm = events ? rm : remove;
+ type = isString && events;
+ events = events ? (fn || attached[events] || events) : attached;
+ for (k in events) {
+ events.hasOwnProperty(k) && rm(element, type || k, events[k]);
+ }
+ }
+ return element;
+ },
+
+ fire = function (element, type, args) {
+ var evt, k, i, types = type.split(' ');
+ for (i = types.length; i--;) {
+ type = types[i].replace(stripName, '');
+ var isNative = nativeEvents[type],
+ isNamespace = types[i].replace(namespace, ''),
+ handlers = retrieveEvents(element)[type];
+ if (isNamespace) {
+ isNamespace = isNamespace.split('.');
+ for (k = isNamespace.length; k--;) {
+ handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
+ }
+ } else if (!args && element[eventSupport]) {
+ fireListener(isNative, type, element);
+ } else {
+ for (k in handlers) {
+ handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
+ }
+ }
+ }
+ return element;
+ },
+
+ fireListener = W3C_MODEL ? function (isNative, type, element) {
+ evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
+ evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
+ element.dispatchEvent(evt);
+ } : function (isNative, type, element) {
+ isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
+ },
+
+ clone = function (element, from, type) {
+ var events = retrieveEvents(from), obj, k;
+ obj = type ? events[type] : events;
+ for (k in obj) {
+ obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
+ }
+ return element;
+ },
+
+ fixEvent = function (e) {
+ var result = {};
+ if (!e) {
+ return result;
+ }
+ var type = e.type, target = e.target || e.srcElement;
+ result.preventDefault = fixEvent.preventDefault(e);
+ result.stopPropagation = fixEvent.stopPropagation(e);
+ result.target = target && target.nodeType == 3 ? target.parentNode : target;
+ if (~type.indexOf('key')) {
+ result.keyCode = e.which || e.keyCode;
+ } else if ((/click|mouse|menu/i).test(type)) {
+ result.rightClick = e.which == 3 || e.button == 2;
+ result.pos = { x: 0, y: 0 };
+ if (e.pageX || e.pageY) {
+ result.clientX = e.pageX;
+ result.clientY = e.pageY;
+ } else if (e.clientX || e.clientY) {
+ result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
+ result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
+ }
+ overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
+ }
+ for (var k in e) {
+ if (!(k in result)) {
+ result[k] = e[k];
+ }
+ }
+ return result;
+ };
+
+ fixEvent.preventDefault = function (e) {
+ return function () {
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
+ else {
+ e.returnValue = false;
+ }
+ };
+ };
+
+ fixEvent.stopPropagation = function (e) {
+ return function () {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ };
+ };
+
+ var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons
+ mousewheel: 1, DOMMouseScroll: 1, //mouse wheel
+ mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement
+ keydown: 1, keypress: 1, keyup: 1, //keyboard
+ orientationchange: 1, // mobile
+ touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch
+ gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture
+ focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements
+ load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
+ error: 1, abort: 1, scroll: 1 }; //misc
+
+ function check(event) {
+ var related = event.relatedTarget;
+ if (!related) {
+ return related == null;
+ }
+ return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related));
+ }
+
+ var customEvents = {
+ mouseenter: { base: 'mouseover', condition: check },
+ mouseleave: { base: 'mouseout', condition: check },
+ mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
+ };
+
+ var bean = { add: add, remove: remove, clone: clone, fire: fire };
+
+ var clean = function (el) {
+ var uid = remove(el).__uid;
+ if (uid) {
+ delete collected[uid];
+ delete registry[uid];
+ }
+ };
+
+ if (context[attachEvent]) {
+ add(context, 'unload', function () {
+ for (var k in collected) {
+ collected.hasOwnProperty(k) && clean(collected[k]);
+ }
+ context.CollectGarbage && CollectGarbage();
+ });
+ }
+
+ var oldBean = context.bean;
+ bean.noConflict = function () {
+ context.bean = oldBean;
+ return this;
+ };
+
+ (typeof module !== 'undefined' && module.exports) ?
+ (module.exports = bean) :
+ (context['bean'] = bean);
+
+}(this);!function ($) {
+ var b = bean.noConflict(),
+ integrate = function (method, type, method2) {
+ var _args = type ? [type] : [];
+ return function () {
+ for (var args, i = 0, l = this.length; i < l; i++) {
+ args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0));
+ args.length == 4 && args.push($);
+ !arguments.length && method == 'add' && type && (method = 'fire');
+ b[method].apply(this, args);
+ }
+ return this;
+ };
+ };
+
+ var add = integrate('add'),
+ remove = integrate('remove'),
+ fire = integrate('fire');
+
+ var methods = {
+
+ on: add,
+ addListener: add,
+ bind: add,
+ listen: add,
+ delegate: add,
+
+ unbind: remove,
+ unlisten: remove,
+ removeListener: remove,
+ undelegate: remove,
+
+ emit: fire,
+ trigger: fire,
+
+ cloneEvents: integrate('clone'),
+
+ hover: function (enter, leave) {
+ for (var i = 0, l = this.length; i < l; i++) {
+ b.add.call(this, this[i], 'mouseenter', enter);
+ b.add.call(this, this[i], 'mouseleave', leave);
+ }
+ return this;
+ }
+ };
+
+ var shortcuts = [
+ '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 = shortcuts.length; i--;) {
+ var shortcut = shortcuts[i];
+ methods[shortcut] = integrate('add', shortcut);
+ }
+
+ $.ender(methods, true);
+}(ender);
+/*!
+ * bonzo.js - copyright @dedfat 2011
+ * https://github.com/ded/bonzo
+ * Follow our software http://twitter.com/dedfat
+ * MIT License
+ */
+!function (context) {
+
+ var doc = context.document,
+ html = doc.documentElement,
+ query = null,
+ byTag = 'getElementsByTagName',
+ specialAttributes = /^checked|value|selected$/,
+ specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i,
+ tagMap = { select: 'option', table: 'tbody', tr: 'td' },
+ stateAttributes = /^checked|selected$/,
+ ie = /msie/i.test(navigator.userAgent),
+ uidList = [],
+ uuids = 0,
+ digit = /^-?[\d\.]+$/,
+ px = 'px',
+ // commonly used methods
+ setAttribute = 'setAttribute',
+ getAttribute = 'getAttribute',
+ trimReplace = /(^\s*|\s*$)/g,
+ unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 };
+
+ function classReg(c) {
+ return new RegExp("(^|\\s+)" + c + "(\\s+|$)");
+ }
+
+ function each(ar, fn, scope) {
+ for (var i = 0, l = ar.length; i < l; i++) {
+ fn.call(scope || ar[i], ar[i], i, ar);
+ }
+ return ar;
+ }
+
+ var trim = String.prototype.trim ?
+ function (s) {
+ return s.trim();
+ } :
+ function (s) {
+ return s.replace(trimReplace, '');
+ };
+
+ function camelize(s) {
+ return s.replace(/-(.)/g, function (m, m1) {
+ return m1.toUpperCase();
+ });
+ }
+
+ function is(node) {
+ return node && node.nodeName && node.nodeType == 1;
+ }
+
+ function some(ar, fn, scope) {
+ for (var i = 0, j = ar.length; i < j; ++i) {
+ if (fn.call(scope, ar[i], i, ar)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
+ function (el, property) {
+ var value = null;
+ if (property == 'float') {
+ property = 'cssFloat';
+ }
+ var computed = doc.defaultView.getComputedStyle(el, '');
+ computed && (value = computed[camelize(property)]);
+ return el.style[property] || value;
+
+ } : (ie && html.currentStyle) ?
+
+ function (el, property) {
+ property = camelize(property);
+ property = property == 'float' ? 'styleFloat' : property;
+
+ if (property == 'opacity') {
+ var val = 100;
+ try {
+ val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+ } catch (e1) {
+ try {
+ val = el.filters('alpha').opacity;
+ } catch (e2) {}
+ }
+ return val / 100;
+ }
+ var value = el.currentStyle ? el.currentStyle[property] : null;
+ return el.style[property] || value;
+ } :
+
+ function (el, property) {
+ return el.style[camelize(property)];
+ };
+
+ function insert(target, host, fn) {
+ var i = 0, self = host || this, r = [];
+ each(normalize(query ? query(target) : target), function (t) {
+ each(self, function (el) {
+ var n = el.cloneNode(true);
+ fn(t, n);
+ r[i] = n;
+ i++;
+ });
+ }, this);
+ each(r, function (e, i) {
+ self[i] = e;
+ });
+ self.length = i;
+ return self;
+ }
+
+ function xy(el, x, y) {
+ var $el = bonzo(el),
+ style = $el.css('position'),
+ offset = $el.offset(),
+ rel = 'relative',
+ isRel = style == rel,
+ delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)];
+
+ if (style == 'static') {
+ $el.css('position', rel);
+ style = rel;
+ }
+
+ isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft);
+ isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop);
+
+ x !== null && (el.style.left = x - offset.left + delta[0] + 'px');
+ y !== null && (el.style.top = y - offset.top + delta[1] + 'px');
+
+ }
+
+ function Bonzo(elements) {
+ this.length = 0;
+ this.original = elements;
+ if (elements) {
+ elements = typeof elements !== 'string' &&
+ !elements.nodeType &&
+ typeof elements.length !== 'undefined' ?
+ elements :
+ [elements];
+ this.length = elements.length;
+ for (var i = 0; i < elements.length; i++) {
+ this[i] = elements[i];
+ }
+ }
+ }
+
+ Bonzo.prototype = {
+
+ each: function (fn, scope) {
+ return each(this, fn, scope);
+ },
+
+ map: function (fn, reject) {
+ var m = [], n, i;
+ for (i = 0; i < this.length; i++) {
+ n = fn.call(this, this[i]);
+ reject ? (reject(n) && m.push(n)) : m.push(n);
+ }
+ return m;
+ },
+
+ first: function () {
+ return bonzo(this[0]);
+ },
+
+ last: function () {
+ return bonzo(this[this.length - 1]);
+ },
+
+ html: function (h, text) {
+ var method = text ?
+ html.textContent == null ?
+ 'innerText' :
+ 'textContent' :
+ 'innerHTML', m;
+ function append(el, tag) {
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
+ each(normalize(h, tag), function (node) {
+ el.appendChild(node);
+ });
+ }
+ return typeof h !== 'undefined' ?
+ this.each(function (el) {
+ (m = el.tagName.match(specialTags)) ?
+ append(el, m[0]) :
+ (el[method] = h);
+ }) :
+ this[0] ? this[0][method] : '';
+ },
+
+ text: function (text) {
+ return this.html(text, 1);
+ },
+
+ addClass: function (c) {
+ return this.each(function (el) {
+ this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c));
+ }, this);
+ },
+
+ removeClass: function (c) {
+ return this.each(function (el) {
+ this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' ')));
+ }, this);
+ },
+
+ hasClass: function (el, c) {
+ return typeof c == 'undefined' ?
+ some(this, function (i) {
+ return classReg(el).test(i.className);
+ }) :
+ classReg(c).test(el.className);
+ },
+
+ toggleClass: function (c, condition) {
+ if (typeof condition !== 'undefined' && !condition) {
+ return this;
+ }
+ return this.each(function (el) {
+ this.hasClass(el, c) ?
+ (el.className = trim(el.className.replace(classReg(c), ' '))) :
+ (el.className = trim(el.className + ' ' + c));
+ }, this);
+ },
+
+ show: function (type) {
+ return this.each(function (el) {
+ el.style.display = type || '';
+ });
+ },
+
+ hide: function (elements) {
+ return this.each(function (el) {
+ el.style.display = 'none';
+ });
+ },
+
+ append: function (node) {
+ return this.each(function (el) {
+ each(normalize(node), function (i) {
+ el.appendChild(i);
+ });
+ });
+ },
+
+ prepend: function (node) {
+ return this.each(function (el) {
+ var first = el.firstChild;
+ each(normalize(node), function (i) {
+ el.insertBefore(i, first);
+ });
+ });
+ },
+
+ appendTo: function (target, host) {
+ return insert.call(this, target, host, function (t, el) {
+ t.appendChild(el);
+ });
+ },
+
+ prependTo: function (target, host) {
+ return insert.call(this, target, host, function (t, el) {
+ t.insertBefore(el, t.firstChild);
+ });
+ },
+
+ next: function () {
+ return this.related('nextSibling');
+ },
+
+ previous: function () {
+ return this.related('previousSibling');
+ },
+
+ related: function (method) {
+ return this.map(
+ function (el) {
+ el = el[method];
+ while (el && el.nodeType !== 1) {
+ el = el[method];
+ }
+ return el || 0;
+ },
+ function (el) {
+ return el;
+ }
+ );
+ },
+
+ before: function (node) {
+ return this.each(function (el) {
+ each(bonzo.create(node), function (i) {
+ el.parentNode.insertBefore(i, el);
+ });
+ });
+ },
+
+ after: function (node) {
+ return this.each(function (el) {
+ each(bonzo.create(node), function (i) {
+ el.parentNode.insertBefore(i, el.nextSibling);
+ });
+ });
+ },
+
+ insertBefore: function (target, host) {
+ return insert.call(this, target, host, function (t, el) {
+ t.parentNode.insertBefore(el, t);
+ });
+ },
+
+ insertAfter: function (target, host) {
+ return insert.call(this, target, host, function (t, el) {
+ var sibling = t.nextSibling;
+ if (sibling) {
+ t.parentNode.insertBefore(el, sibling);
+ }
+ else {
+ t.parentNode.appendChild(el);
+ }
+ });
+ },
+
+ css: function (o, v) {
+ // is this a request for just getting a style?
+ if (v === undefined && typeof o == 'string') {
+ return getStyle(this[0], o);
+ }
+ var iter = o;
+ if (typeof o == 'string') {
+ iter = {};
+ iter[o] = v;
+ }
+
+ if (ie && iter.opacity) {
+ // oh this 'ol gamut
+ iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')';
+ // give it layout
+ iter.zoom = o.zoom || 1;
+ delete iter.opacity;
+ }
+
+ if (v = iter['float']) {
+ // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat
+ ie ? (iter.styleFloat = v) : (iter.cssFloat = v);
+ delete iter['float'];
+ }
+
+ var fn = function (el, p, v) {
+ for (var k in iter) {
+ if (iter.hasOwnProperty(k)) {
+ v = iter[k];
+ // change "5" to "5px" - unless you're line-height, which is allowed
+ (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px);
+ el.style[p] = v;
+ }
+ }
+ };
+ return this.each(fn);
+ },
+
+ offset: function (x, y) {
+ if (x || y) {
+ return this.each(function (el) {
+ xy(el, x, y);
+ });
+ }
+ var el = this[0];
+ var width = el.offsetWidth;
+ var height = el.offsetHeight;
+ var top = el.offsetTop;
+ var left = el.offsetLeft;
+ while (el = el.offsetParent) {
+ top = top + el.offsetTop;
+ left = left + el.offsetLeft;
+ }
+
+ return {
+ top: top,
+ left: left,
+ height: height,
+ width: width
+ };
+ },
+
+ attr: function (k, v) {
+ var el = this[0];
+ return typeof v == 'undefined' ?
+ specialAttributes.test(k) ?
+ stateAttributes.test(k) && typeof el[k] == 'string' ?
+ true : el[k] : el[getAttribute](k) :
+ this.each(function (el) {
+ k == 'value' ? (el.value = v) : el[setAttribute](k, v);
+ });
+ },
+
+ val: function (s) {
+ return (typeof s == 'string') ? this.attr('value', s) : this[0].value;
+ },
+
+ removeAttr: function (k) {
+ return this.each(function (el) {
+ el.removeAttribute(k);
+ });
+ },
+
+ data: function (k, v) {
+ var el = this[0];
+ if (typeof v === 'undefined') {
+ el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
+ var uid = el[getAttribute]('data-node-uid');
+ uidList[uid] || (uidList[uid] = {});
+ return uidList[uid][k];
+ } else {
+ return this.each(function (el) {
+ el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
+ var uid = el[getAttribute]('data-node-uid');
+ var o = {};
+ o[k] = v;
+ uidList[uid] = o;
+ });
+ }
+ },
+
+ remove: function () {
+ return this.each(function (el) {
+ el.parentNode && el.parentNode.removeChild(el);
+ });
+ },
+
+ empty: function () {
+ return this.each(function (el) {
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
+ });
+ },
+
+ detach: function () {
+ return this.map(function (el) {
+ return el.parentNode.removeChild(el);
+ });
+ },
+
+ scrollTop: function (y) {
+ return scroll.call(this, null, y, 'y');
+ },
+
+ scrollLeft: function (x) {
+ return scroll.call(this, x, null, 'x');
+ }
+ };
+
+ function normalize(node, tag) {
+ return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node;
+ }
+
+ function scroll(x, y, type) {
+ var el = this[0];
+ if (x == null && y == null) {
+ return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type];
+ }
+ if (isBody(el)) {
+ window.scrollTo(x, y);
+ } else {
+ x != null && (el.scrollLeft = x);
+ y != null && (el.scrollTop = y);
+ }
+ return this;
+ }
+
+ function isBody(element) {
+ return element === window || (/^(?:body|html)$/i).test(element.tagName);
+ }
+
+ function getWindowScroll() {
+ return { x: window.pageXOffset || html.scrollLeft, y: window.pageYOffset || html.scrollTop };
+ }
+
+ function bonzo(els, host) {
+ return new Bonzo(els, host);
+ }
+
+ bonzo.setQueryEngine = function (q) {
+ query = q;
+ delete bonzo.setQueryEngine;
+ };
+
+ bonzo.aug = function (o, target) {
+ for (var k in o) {
+ o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]);
+ }
+ };
+
+ bonzo.create = function (node, tag) {
+ return typeof node == 'string' ?
+ function () {
+ var t = tag ? tagMap[tag.toLowerCase()] : null;
+ var el = doc.createElement(t || 'div'), els = [];
+ if (tag) {
+ var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g"));
+ each(bitches, function (m) {
+ m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2');
+ var bah = doc.createElement(t);
+ bah.appendChild(doc.createDocumentFragment(m));
+ el.appendChild(bah);
+ });
+ } else {
+ el.innerHTML = node;
+ }
+ var nodes = el.childNodes;
+ el = el.firstChild;
+ els.push(el);
+ while (el = el.nextSibling) {
+ (el.nodeType == 1) && els.push(el);
+ }
+ return els;
+
+ }() : is(node) ? [node.cloneNode(true)] : [];
+ };
+
+ bonzo.doc = function () {
+ var w = html.scrollWidth,
+ h = html.scrollHeight,
+ vp = this.viewport();
+ return {
+ width: Math.max(w, vp.width),
+ height: Math.max(h, vp.height)
+ };
+ };
+
+ bonzo.firstChild = function (el) {
+ for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
+ if (c[i].nodeType === 1) {
+ e = c[j = i];
+ }
+ }
+ return e;
+ };
+
+ bonzo.viewport = function () {
+ var h = self.innerHeight,
+ w = self.innerWidth;
+ ie && (h = html.clientHeight) && (w = html.clientWidth);
+ return {
+ width: w,
+ height: h
+ };
+ };
+
+ bonzo.isAncestor = 'compareDocumentPosition' in html ?
+ function (container, element) {
+ return (container.compareDocumentPosition(element) & 16) == 16;
+ } : 'contains' in html ?
+ function (container, element) {
+ return container !== element && container.contains(element);
+ } :
+ function (container, element) {
+ while (element = element.parentNode) {
+ if (element === container) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ var old = context.bonzo;
+ bonzo.noConflict = function () {
+ context.bonzo = old;
+ return this;
+ };
+ context['bonzo'] = bonzo;
+
+}(this);!function ($) {
+
+ var b = bonzo;
+ b.setQueryEngine($);
+ $.ender(b);
+ $.ender(b(), true);
+ $.ender({
+ create: function (node) {
+ return $(b.create(node));
+ }
+ });
+
+ $.id = function (id) {
+ return $([document.getElementById(id)]);
+ };
+
+ function indexOf(ar, val) {
+ for (var i = 0; i < ar.length; i++) {
+ if (ar[i] === val) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ function uniq(ar) {
+ var a = [], i, j;
+ label:
+ for (i = 0; i < ar.length; i++) {
+ for (j = 0; j < a.length; j++) {
+ if (a[j] == ar[i]) {
+ continue label;
+ }
+ }
+ a[a.length] = ar[i];
+ }
+ return a;
+ }
+
+ $.ender({
+ parents: function (selector, closest) {
+ var collection = $(selector), j, k, p, r = [];
+ for (j = 0, k = this.length; j < k; j++) {
+ p = this[j];
+ while (p = p.parentNode) {
+ if (indexOf(collection, p) !== -1) {
+ r.push(p);
+ if (closest) break;
+ }
+ }
+ }
+ return $(uniq(r));
+ },
+
+ closest: function (selector) {
+ return this.parents(selector, true);
+ },
+
+ first: function () {
+ return $(this[0]);
+ },
+
+ last: function () {
+ return $(this[this.length - 1]);
+ },
+
+ next: function () {
+ return $(b(this).next());
+ },
+
+ previous: function () {
+ return $(b(this).previous());
+ },
+
+ appendTo: function (t) {
+ return b(this.selector).appendTo(t, this);
+ },
+
+ prependTo: function (t) {
+ return b(this.selector).prependTo(t, this);
+ },
+
+ insertAfter: function (t) {
+ return b(this.selector).insertAfter(t, this);
+ },
+
+ insertBefore: function (t) {
+ return b(this.selector).insertBefore(t, this);
+ },
+
+ siblings: function () {
+ var i, l, p, r = [];
+ for (i = 0, l = this.length; i < l; i++) {
+ p = this[i];
+ while (p = p.previousSibling) {
+ p.nodeType == 1 && r.push(p);
+ }
+ p = this[i];
+ while (p = p.nextSibling) {
+ p.nodeType == 1 && r.push(p);
+ }
+ }
+ return $(r);
+ },
+
+ children: function () {
+ var el, r = [];
+ for (i = 0, l = this.length; i < l; i++) {
+ if (!(el = b.firstChild(this[i]))) {
+ continue;
+ }
+ r.push(el);
+ while (el = el.nextSibling) {
+ el.nodeType == 1 && r.push(el);
+ }
+ }
+ return $(uniq(r));
+ },
+
+ height: function (v) {
+ return v ? this.css('height', v) : parseInt(this.css('height'), 10);
+ },
+
+ width: function (v) {
+ return v ? this.css('width', v) : parseInt(this.css('width'), 10);
+ }
+ }, true);
+
+}(ender || $);
+
+!function () { var exports = {}, module = { exports: exports }; !function (doc) {
+ var loaded = 0, fns = [], ol, f = false,
+ testEl = doc.createElement('a'),
+ domContentLoaded = 'DOMContentLoaded',
+ addEventListener = 'addEventListener',
+ onreadystatechange = 'onreadystatechange';
+
+ /^loade|c/.test(doc.readyState) && (loaded = 1);
+
+ function flush() {
+ loaded = 1;
+ for (var i = 0, l = fns.length; i < l; i++) {
+ fns[i]();
+ }
+ }
+ doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() {
+ doc.removeEventListener(domContentLoaded, fn, f);
+ flush();
+ }, f);
+
+
+ testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() {
+ if (/^c/.test(doc.readyState)) {
+ doc.detachEvent(onreadystatechange, ol);
+ flush();
+ }
+ }));
+
+ var domReady = testEl.doScroll ?
+ function (fn) {
+ self != top ?
+ !loaded ?
+ fns.push(fn) :
+ fn() :
+ !function () {
+ try {
+ testEl.doScroll('left');
+ } catch (e) {
+ return setTimeout(function() {
+ domReady(fn);
+ }, 50);
+ }
+ fn();
+ }();
+ } :
+ function (fn) {
+ loaded ? fn() : fns.push(fn);
+ };
+
+ (typeof module !== 'undefined') && module.exports ?
+ (module.exports = {domReady: domReady}) :
+ (window.domReady = domReady);
+
+}(document); $.ender(module.exports); }.call($);
+/*!
+ * qwery.js - copyright @dedfat
+ * https://github.com/ded/qwery
+ * Follow our software http://twitter.com/dedfat
+ * MIT License
+ */
+
+!function (context, doc) {
+
+ var c, i, j, k, l, m, o, p, r, v,
+ el, node, len, found, classes, item, items, token,
+ id = /#([\w\-]+)/,
+ clas = /\.[\w\-]+/g,
+ idOnly = /^#([\w\-]+$)/,
+ classOnly = /^\.([\w\-]+)$/,
+ tagOnly = /^([\w\-]+)$/,
+ tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
+ html = doc.documentElement,
+ tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
+ specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
+ simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
+ attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
+ chunker = new RegExp(simple.source + '(' + attr.source + ')?');
+
+ function array(ar) {
+ r = [];
+ for (i = 0, len = ar.length; i < len; i++) {
+ r[i] = ar[i];
+ }
+ return r;
+ }
+
+ var cache = function () {
+ this.c = {};
+ };
+ cache.prototype = {
+ g: function (k) {
+ return this.c[k] || undefined;
+ },
+ s: function (k, v) {
+ this.c[k] = v;
+ return v;
+ }
+ };
+
+ var classCache = new cache(),
+ cleanCache = new cache(),
+ attrCache = new cache(),
+ tokenCache = new cache();
+
+ function q(query) {
+ return query.match(chunker);
+ }
+
+ function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) {
+ var m, c, k;
+ if (tag && this.tagName.toLowerCase() !== tag) {
+ return false;
+ }
+ if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) {
+ return false;
+ }
+ if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
+ for (i = classes.length; i--;) {
+ c = classes[i].slice(1);
+ if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) {
+ return false;
+ }
+ }
+ }
+ if (wholeAttribute && !value) {
+ o = this.attributes;
+ for (k in o) {
+ if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
+ return this;
+ }
+ }
+ }
+ if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) {
+ return false;
+ }
+ return this;
+ }
+
+ function loopAll(tokens) {
+ var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els,
+ root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc;
+ if (!root) {
+ return r;
+ }
+ els = root.getElementsByTagName(tag);
+ for (i = 0, l = els.length; i < l; i++) {
+ el = els[i];
+ if (item = interpret.apply(el, intr)) {
+ r.push(item);
+ }
+ }
+ return r;
+ }
+
+ function clean(s) {
+ return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'));
+ }
+
+ function checkAttr(qualify, actual, val) {
+ switch (qualify) {
+ case '=':
+ return actual == val;
+ case '^=':
+ return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val))));
+ case '$=':
+ return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$')));
+ case '*=':
+ return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val))));
+ case '~=':
+ return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)')));
+ case '|=':
+ return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)')));
+ }
+ return false;
+ }
+
+ function _qwery(selector) {
+ var r = [], ret = [], i, l,
+ tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr));
+ tokens = tokens.slice(0);
+ if (!tokens.length) {
+ return r;
+ }
+ r = loopAll(tokens);
+ if (!tokens.length) {
+ return r;
+ }
+ // loop through all descendent tokens
+ for (j = 0, l = r.length, k = 0; j < l; j++) {
+ node = r[j];
+ p = node;
+ // loop through each token
+ for (i = tokens.length; i--;) {
+ z: // loop through parent nodes
+ while (p !== html && (p = p.parentNode)) {
+ if (found = interpret.apply(p, q(tokens[i]))) {
+ break z;
+ }
+ }
+ }
+ found && (ret[k++] = node);
+ }
+ return ret;
+ }
+
+ function boilerPlate(selector, _root, fn) {
+ var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
+ if (selector === window || isNode(selector)) {
+ return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
+ }
+ if (selector && typeof selector === 'object' && isFinite(selector.length)) {
+ return array(selector);
+ }
+ if (m = selector.match(idOnly)) {
+ return (el = doc.getElementById(m[1])) ? [el] : [];
+ }
+ if (m = selector.match(tagOnly)) {
+ return array(root.getElementsByTagName(m[1]));
+ }
+ return false;
+ }
+
+ function isNode(el) {
+ return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
+ }
+
+ function uniq(ar) {
+ var a = [], i, j;
+ label:
+ for (i = 0; i < ar.length; i++) {
+ for (j = 0; j < a.length; j++) {
+ if (a[j] == ar[i]) {
+ continue label;
+ }
+ }
+ a[a.length] = ar[i];
+ }
+ return a;
+ }
+
+ function qwery(selector, _root) {
+ var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
+ if (!root || !selector) {
+ return [];
+ }
+ if (m = boilerPlate(selector, _root, qwery)) {
+ return m;
+ }
+ return select(selector, root);
+ }
+
+ var isAncestor = 'compareDocumentPosition' in html ?
+ function (element, container) {
+ return (container.compareDocumentPosition(element) & 16) == 16;
+ } : 'contains' in html ?
+ function (element, container) {
+ container = container == doc || container == window ? html : container;
+ return container !== element && container.contains(element);
+ } :
+ function (element, container) {
+ while (element = element.parentNode) {
+ if (element === container) {
+ return 1;
+ }
+ }
+ return 0;
+ },
+
+ select = (doc.querySelector && doc.querySelectorAll) ?
+ function (selector, root) {
+ if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
+ return array((root).getElementsByClassName(m[1]));
+ }
+ return array((root).querySelectorAll(selector));
+ } :
+ function (selector, root) {
+ var result = [], collection, collections = [], i;
+ if (m = selector.match(tagAndOrClass)) {
+ items = root.getElementsByTagName(m[1] || '*');
+ r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)'));
+ for (i = 0, l = items.length, j = 0; i < l; i++) {
+ r.test(items[i].className) && (result[j++] = items[i]);
+ }
+ return result;
+ }
+ for (i = 0, items = selector.split(','), l = items.length; i < l; i++) {
+ collections[i] = _qwery(items[i]);
+ }
+ for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) {
+ var ret = collection;
+ if (root !== doc) {
+ ret = [];
+ for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) {
+ // make sure element is a descendent of root
+ isAncestor(element, root) && ret.push(element);
+ }
+ }
+ result = result.concat(ret);
+ }
+ return uniq(result);
+ };
+
+ qwery.uniq = uniq;
+ var oldQwery = context.qwery;
+ qwery.noConflict = function () {
+ context.qwery = oldQwery;
+ return this;
+ };
+ context['qwery'] = qwery;
+
+}(this, document);!function (doc) {
+ var q = qwery.noConflict();
+ function create(node, root) {
+ var el = (root || doc).createElement('div'), els = [];
+ el.innerHTML = node;
+ var nodes = el.childNodes;
+ el = el.firstChild;
+ els.push(el);
+ while (el = el.nextSibling) {
+ (el.nodeType == 1) && els.push(el);
+ }
+ return els;
+ };
+ $._select = function (s, r) {
+ return /^\s*</.test(s) ? create(s, r) : q(s, r);
+ };
+ $.ender({
+ find: function (s) {
+ var r = [], i, l, j, k, els;
+ for (i = 0, l = this.length; i < l; i++) {
+ els = q(s, this[i]);
+ for (j = 0, k = els.length; j < k; j++) {
+ r.push(els[j]);
+ }
+ }
+ return $(q.uniq(r));
+ }
+ , and: function (s) {
+ var plus = $(s);
+ for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
+ this[i] = plus[j];
+ }
+ return this;
+ }
+ }, true);
+}(document);
diff --git a/themes/classic/source/javascripts/libs/jXHR.js b/themes/classic/source/javascripts/libs/jXHR.js
new file mode 100644
index 00000000..6775655c
--- /dev/null
+++ b/themes/classic/source/javascripts/libs/jXHR.js
@@ -0,0 +1,85 @@
+// jXHR.js (JSON-P XHR)
+// v0.1 (c) Kyle Simpson
+// MIT License
+
+(function(global){
+ var SETTIMEOUT = global.setTimeout, // for better compression
+ doc = global.document,
+ callback_counter = 0;
+
+ global.jXHR = function() {
+ var script_url,
+ script_loaded,
+ jsonp_callback,
+ scriptElem,
+ publicAPI = null;
+
+ function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
+
+ function reset() {
+ script_loaded = false;
+ script_url = "";
+ removeScript();
+ scriptElem = null;
+ fireReadyStateChange(0);
+ }
+
+ function ThrowError(msg) {
+ try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); }
+ }
+
+ function handleScriptLoad() {
+ if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
+ this.onload = this.onreadystatechange = null; // prevent memory leak
+ script_loaded = true;
+ if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"].");
+ removeScript();
+ }
+
+ function fireReadyStateChange(rs,args) {
+ args = args || [];
+ publicAPI.readyState = rs;
+ if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
+ }
+
+ publicAPI = {
+ onerror:null,
+ onreadystatechange:null,
+ readyState:0,
+ open:function(method,url){
+ reset();
+ internal_callback = "cb"+(callback_counter++);
+ (function(icb){
+ global.jXHR[icb] = function() {
+ try { fireReadyStateChange.call(publicAPI,4,arguments); }
+ catch(err) {
+ publicAPI.readyState = -1;
+ ThrowError("Script failed to run ["+script_url+"].");
+ }
+ global.jXHR[icb] = null;
+ };
+ })(internal_callback);
+ script_url = url.replace(/=\?/,"=jXHR."+internal_callback);
+ fireReadyStateChange(1);
+ },
+ send:function(){
+ SETTIMEOUT(function(){
+ scriptElem = doc.createElement("script");
+ scriptElem.setAttribute("type","text/javascript");
+ scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
+ scriptElem.setAttribute("src",script_url);
+ doc.getElementsByTagName("head")[0].appendChild(scriptElem);
+ },0);
+ fireReadyStateChange(2);
+ },
+ setRequestHeader:function(){}, // noop
+ getResponseHeader:function(){return "";}, // basically noop
+ getAllResponseHeaders:function(){return [];} // ditto
+ };
+
+ reset();
+
+ return publicAPI;
+ };
+})(window);
+
diff --git a/themes/classic/source/javascripts/octopress.js b/themes/classic/source/javascripts/octopress.js
new file mode 100644
index 00000000..68e5139b
--- /dev/null
+++ b/themes/classic/source/javascripts/octopress.js
@@ -0,0 +1,88 @@
+function getNav(){
+ var fieldset = $('body > nav fieldset[role=site-search]').after('<fieldset role="mobile-nav"></fieldset>').next();
+ var select = $(fieldset).append('<select></select>').children();
+ select.append('<option value="">Navigate&hellip;</option>');
+ $($('body > nav ul[role=main-nav] a').concat($('body > nav ul[role=subscription] a'))).each(function(link) {
+ select.append('<option value="'+link.href+'">&bull; '+link.text+'</option>')
+ });
+ select.bind('change', function(event){
+ if (select.val()) window.location.href = select.val();
+ });
+}
+function addSidebarToggler() {
+ $('#articles').before('<a href="#" class="toggle-sidebar">&raquo;</a>').previous().bind('click', function(e){
+ e.preventDefault();
+ if($('body').hasClass('collapse-sidebar')){
+ $('body').removeClass('collapse-sidebar');
+ e.target.innerHTML = '&raquo;';
+ } else {
+ $('body').addClass('collapse-sidebar');
+ e.target.innerHTML = '&laquo;';
+ }
+ });
+}
+function testFeatures() {
+ var features = ['maskImage'];
+ $(features).map(function(feature){
+ if(Modernizr.testAllProps(feature)) {
+ $('html').addClass(feature);
+ } else {
+ $('html').addClass('no-'+feature);
+ }
+ });
+}
+
+function addDivLines(){
+ $('div.highlight pre code').each(function(el){
+ var content = bonzo(el).html();
+ var lines = content.split('\n');
+ var count = lines.length;
+ bonzo(lines).each(function(line, index){
+ if(line == '') line = ' ';
+ lines[index] = '<div class="line">' + line + '</div>';
+ });
+ $(el).html(lines.join(''));
+ });
+}
+function preToTable(){
+ $('div.highlight').each(function(code){
+ var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">';
+ var lineNumbers = '<pre class="line-numbers">';
+ var tableMiddle = '</pre></td><td class="code" width="100%">';
+ var tableEnd = '</td></tr></tbody></table>';
+ var count = $('div.line', code).length;
+ for (i=1;i<=count; i++){
+ lineNumbers += '<span class="line">'+i+'</span>\n';
+ }
+ table = tableStart + lineNumbers + tableMiddle + '<pre>'+$('pre', code).html()+'</pre>' + tableEnd;
+ $(code).html(table);
+ });
+}
+$.domReady(function(){
+ testFeatures();
+ addDivLines();
+ preToTable();
+ getNav();
+ addSidebarToggler();
+});
+
+// iOS scaling bug fix
+// Rewritten version
+// By @mathias, @cheeaun and @jdalton
+// Source url: https://gist.github.com/901295
+(function(doc) {
+ var addEvent = 'addEventListener',
+ type = 'gesturestart',
+ qsa = 'querySelectorAll',
+ scales = [1, 1],
+ meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
+ function fix() {
+ meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
+ doc.removeEventListener(type, fix, true);
+ }
+ if ((meta = meta[meta.length - 1]) && addEvent in doc) {
+ fix();
+ scales = [.25, 1.6];
+ doc[addEvent](type, fix, true);
+ }
+}(document));
diff --git a/themes/classic/source/javascripts/pinboard.js b/themes/classic/source/javascripts/pinboard.js
new file mode 100644
index 00000000..52577e2c
--- /dev/null
+++ b/themes/classic/source/javascripts/pinboard.js
@@ -0,0 +1,56 @@
+function pinboardNS_fetch_script(url) {
+ //document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>');
+ (function(){
+ var pinboardLinkroll = document.createElement('script');
+ pinboardLinkroll.type = 'text/javascript';
+ pinboardLinkroll.async = true;
+ pinboardLinkroll.src = url;
+ document.getElementsByTagName('head')[0].appendChild(pinboardLinkroll);
+ })();
+}
+
+function pinboardNS_show_bmarks(r) {
+ var lr = new Pinboard_Linkroll();
+ lr.set_items(r);
+ lr.show_bmarks();
+}
+
+function Pinboard_Linkroll() {
+ var items;
+
+ this.set_items = function(i) {
+ this.items = i;
+ }
+ this.show_bmarks = function() {
+ var lines = [];
+ for (var i = 0; i < this.items.length; i++) {
+ var item = this.items[i];
+ var str = this.format_item(item);
+ lines.push(str);
+ }
+ document.getElementById(linkroll).innerHTML = lines.join("\n");
+ }
+ this.cook = function(v) {
+ return v.replace('<', '&lt;').replace('>', '&gt>');
+ }
+
+ this.format_item = function(it) {
+ var str = "<li class=\"pin-item\">";
+ if (!it.d) { return; }
+ str += "<p><a class=\"pin-title\" href=\"" + this.cook(it.u) + "\">" + this.cook(it.d) + "</a>";
+ if (it.n) {
+ str += "<span class=\"pin-description\">" + this.cook(it.n) + "</span>\n";
+ }
+ if (it.t.length > 0) {
+ for (var i = 0; i < it.t.length; i++) {
+ var tag = it.t[i];
+ 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> ";
+ }
+ }
+ str += "</p></li>\n";
+ return str;
+ }
+}
+Pinboard_Linkroll.prototype = new Pinboard_Linkroll();
+pinboardNS_fetch_script("http://feeds.pinboard.in/json/v1/u:"+pinboard_user+"/?cb=pinboardNS_show_bmarks\&count="+pinboard_count);
+
diff --git a/themes/classic/source/javascripts/twitter.js b/themes/classic/source/javascripts/twitter.js
new file mode 100644
index 00000000..eda13c93
--- /dev/null
+++ b/themes/classic/source/javascripts/twitter.js
@@ -0,0 +1,80 @@
+// JSON-P Twitter fetcher for Octopress
+// (c) Brandon Mathis // MIT Lisence
+function getTwitterFeed(user, count, replies) {
+ feed = new jXHR();
+ feed.onerror = function (msg,url) {
+ $('#tweets li.loading').addClass('error').text("Twitter's busted");
+ }
+ feed.onreadystatechange = function(data){
+ if (feed.readyState === 4) {
+ var tweets = new Array();
+ for (i in data){
+ if(tweets.length < count){
+ if(replies || data[i].in_reply_to_user_id == null){
+ tweets.push(data[i]);
+ }
+ }
+ }
+ showTwitterFeed(tweets, user);
+ }
+ };
+ feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+(parseInt(count)+60)+"&callback=?");
+ feed.send();
+}
+
+function showTwitterFeed(tweets, twitter_user){
+ var timeline = document.getElementById('tweets');
+ timeline.innerHTML='';
+ for (t in tweets){
+ timeline.innerHTML+='<li>'+'<p>'+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a>'+linkifyTweet(tweets[t].text)+'</p>'+'</li>';
+ }
+}
+function linkifyTweet(text){
+ return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>')
+ .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
+ .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
+}
+
+
+
+// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License | http://mulletxhr.com/
+// uncompressed version available in source/javascripts/libs/jXHR.js
+(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);
+
+
+/* Sky Slavin, Ludopoli. MIT license. * based on JavaScript Pretty Date * Copyright (c) 2008 John Resig (jquery.com) * Licensed under the MIT license. */
+
+function prettyDate(time) {
+ if (navigator.appName == 'Microsoft Internet Explorer') {
+ return "<span>&infin;</span>"; // because IE date parsing isn't fun.
+ };
+
+ var say = {};
+ say.just_now = " now",
+ say.minute_ago = "1m",
+ say.minutes_ago = "m",
+ say.hour_ago = "1h",
+ say.hours_ago = "h",
+ say.yesterday = "1d",
+ say.days_ago = "d",
+ say.weeks_ago = "w"
+
+ var current_date = new Date();
+ current_date_time = current_date.getTime();
+ current_date_full = current_date_time + (1 * 60000);
+ var date = new Date(time);
+ var diff = ((current_date_full - date.getTime()) / 1000);
+ var day_diff = Math.floor(diff / 86400);
+
+ if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) return;
+
+ return day_diff == 0 && (
+ diff < 60 && say.just_now ||
+ diff < 120 && say.minute_ago ||
+ diff < 3600 && Math.floor(diff / 60) + say.minutes_ago ||
+ diff < 7200 && say.hour_ago ||
+ diff < 86400 && Math.floor(diff / 3600) + say.hours_ago) ||
+ day_diff == 1 && say.yesterday ||
+ day_diff < 7 && day_diff + say.days_ago ||
+ day_diff < 31 && Math.ceil(day_diff / 7) + say.weeks_ago;
+}
diff --git a/themes/classic/source/stylesheets/screen.css b/themes/classic/source/stylesheets/screen.css
new file mode 100644
index 00000000..ce9beff2
--- /dev/null
+++ b/themes/classic/source/stylesheets/screen.css
@@ -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}#articles a,#articles + aside a{color:#1863a1}#articles a:visited,#articles + aside a:visited{color:#4f1175}#articles a:focus,#articles + aside a:focus{color:#033b6a}#articles a:hover,#articles + aside a:hover{color:#033b6a}.group,body > header,body > nav,body > footer,body #articles > article,body > nav + div,body > nav + div > div{*zoom:1}.group:after,body > header:after,body > nav:after,body > footer:after,body #articles > article:after,body > nav + div:after,body > nav + div > div:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}body{-webkit-text-size-adjust:none;max-width:1400px;position:relative;margin:0 auto}body > header,body > nav,body > footer,body #articles > article{padding-left:18px;padding-right:18px}@media only screen and (min-width: 480px){body > header,body > nav,body > footer,body #articles > article{padding-left:18px;padding-right:18px}}@media only screen and (min-width: 768px){body > header,body > nav,body > footer,body #articles > article{padding-left:24px;padding-right:24px}}@media only screen and (min-width: 992px){body > header,body > nav,body > footer,body #articles > article{padding-left:30px;padding-right:30px}}body > header{font-size:.8em;padding-top:1.5em;padding-bottom:1.5em}.toggle-sidebar{display:none}#articles{width:100%}#articles + aside{display:none}@media only screen and (min-width: 550px){body > header{font-size:1em}}@media only screen and (min-width: 768px){body{-webkit-text-size-adjust:auto}body > header{font-size:1.2em}body > nav + div{padding:0;margin:0 auto}body > nav + div > div{margin-right:240px}#articles{padding-top:12px;padding-bottom:12px;float:left}#articles + aside{width:210px;padding:0 15px 15px;display:block;float:left;margin:0 -100% 0 0}body > div > div{position:relative}.collapse-sidebar > div > div{margin-right:10px}.collapse-sidebar #articles + aside{display:none}.collapse-sidebar .toggle-sidebar{right:-1px;background-color:#eeeeee;border-right-width:0;text-indent:2px;border-left:1px solid #dcdcdc;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0.3em;-webkit-border-bottom-left-radius:0.3em;-o-border-bottom-left-radius:0.3em;-ms-border-bottom-left-radius:0.3em;-khtml-border-bottom-left-radius:0.3em;border-bottom-left-radius:0.3em;color:#aaaaaa}.collapse-sidebar .toggle-sidebar:hover{color:#888888}.toggle-sidebar{outline:none;position:absolute;right:-21px;top:0;width:20px;font-size:1.2em;line-height:1.1em;padding-bottom:.1em;text-indent:-1px;text-decoration:none;color:#cccccc;-moz-border-radius-bottomright:0.3em;-webkit-border-bottom-right-radius:0.3em;-o-border-bottom-right-radius:0.3em;-ms-border-bottom-right-radius:0.3em;-khtml-border-bottom-right-radius:0.3em;border-bottom-right-radius:0.3em;text-align:center;background:#f7f7f7;border-bottom:1px solid #dcdcdc;border-right:1px solid #dcdcdc;display:inline-block}.toggle-sidebar:hover{color:#999999}}@media only screen and (min-width: 992px){body > *{font-size:1.1em}body > header{font-size:1.3em}body > nav + div > div{margin-right:300px}#articles{padding-top:15px;padding-bottom:15px}#articles + aside{width:260px;padding:0 20px 20px}}.heading,body > header h1,h1,h2,h3,h4,h5,h6{font-family:"Georgia", "PT Sans", "Helvetica Neue", Arial, sans-serif;font-weight:bold}.sans,body > nav a,#articles + aside section,body > footer{font-family:"Helvetica Neue", Arial, sans-serif}.serif,body{font-family:Georgia, Times, "Times New Roman", serif}.mono,.pre,html .gist .gist-file .gist-syntax .gist-highlight pre,pre{font-family:Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace}body > header h1{font-size:2em;font-weight:normal;line-height:1.2em;margin-bottom:0.6667em}body{line-height:1.5em;color:black}h1,h2,h3,h4,h5,h6{text-rendering:optimizelegibility;margin-bottom:1em;font-weight:normal}h1{font-size:2em;line-height:1.3334em}h2,section h1{font-size:1.5em}h3,section h2,section section h1{font-size:1.3em}h4,section h3,section section h2,section section section h1{font-size:1em}h5,section h4,section section h3{font-size:.9em}h6,section h5,section section h4,section section section h3{font-size:.8em}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:1.2em}blockquote > p:first-child:before{content:"\201C";position:absolute;top:0.1em;left:-0.5em;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:1.2em;text-align:right}blockquote + p > cite:before{content:'– ';color:#555555}blockquote + p > cite a{font-style:italic}body > header{background-color:#333333}body > header h1{display:inline-block;margin:0}body > header h1 a,body > header h1 a:visited{color:#f2f2f2;text-decoration:none}body > nav{position:relative;background-color:#cccccc;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e0e0e0), color-stop(50%, #cccccc), color-stop(100%, #b0b0b0));background:-webkit-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-moz-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-o-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:linear-gradient(#e0e0e0,#cccccc,#b0b0b0);border-top:1px solid #f2f2f2;border-bottom:1px solid #8c8c8c;padding-top:.35em;padding-bottom:.35em}body > nav form{-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;margin:0;padding:0}body > nav form .search{padding:.25em .5em 0;font-size:.85em;line-height:1em;width:95%;-moz-border-radius:0.5em;-webkit-border-radius:0.5em;-o-border-radius:0.5em;-ms-border-radius:0.5em;-khtml-border-radius:0.5em;border-radius:0.5em;-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;-moz-box-shadow:#d1d1d1 0 1px;-webkit-box-shadow:#d1d1d1 0 1px;-o-box-shadow:#d1d1d1 0 1px;box-shadow:#d1d1d1 0 1px;background-color:#f2f2f2;border:1px solid #b3b3b3;color:#888}body > nav form .search: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 fieldset[role=site-search]{float:right;width:48%}body > nav fieldset[role=mobile-nav]{float:left;width:48%}body > nav fieldset[role=mobile-nav] select{width:100%;font-size:.8em;border:1px solid #888}body > nav ul{display:none}@media only screen and (min-width: 550px){body > nav{font-size:.9em}body > nav ul{margin:0;padding:0;border:0;overflow:hidden;*zoom:1;float:left;display:block;padding-top:.25em}body > nav ul li{list-style-image:none;list-style-type:none;margin-left:0px;white-space:nowrap;display:inline;float:left;padding-left:0;padding-right:0}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[role=subscription]{margin-left:.8em;float:right}body > nav ul[role=subscription] li:last-child a{padding-right:0}body > nav ul li{margin:0}body > nav a{color:#6b6b6b;text-shadow:#ebebeb 0 1px;float:left;text-decoration:none;font-size:.9em;padding:.1em 0;line-height:1.5em}body > nav a:visited{color:#6b6b6b}body > nav a:hover{color:#2b2b2b}body > nav li + li{border-left:1px solid #b0b0b0;margin-left:.8em}body > nav li + li a{padding-left:.8em;border-left:1px solid #dedede}body > nav fieldset[role=mobile-nav]{display:none}body > nav fieldset[role=site-search]{width:100%}body > nav form{float:right;text-align:left;width:182px;padding-left:.8em}body > nav form .search{width:93%;font-size:.95em;line-height:1.2em}}@media only screen and (min-width: 992px){body > nav form{width:235px}}.maskImage ul[role=subscription] li,.maskImage ul[role=subscription] a{border:0;padding:0}.maskImage a[rel=subscribe-rss]{position:relative;top:-2px;width:24px;height:24px;-moz-mask-image:url('/images/rss.png?1305289158');-webkit-mask-image:url('/images/rss.png?1305289158');-o-mask-image:url('/images/rss.png?1305289158');-ms-mask-image:url('/images/rss.png?1305289158');-khtml-mask-image:url('/images/rss.png?1305289158');mask-image:url('/images/rss.png?1305289158');-moz-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;-o-mask-repeat:no-repeat;-ms-mask-repeat:no-repeat;-khtml-mask-repeat:no-repeat;mask-repeat:no-repeat;text-indent:-999999em;background-color:#dedede;border:0;padding:0}.maskImage a[rel=subscribe-rss]:hover:after{background-color:#969696}.maskImage a[rel=subscribe-rss]:after{content:"";-moz-mask-image:url('/images/rss.png?1305289158');-webkit-mask-image:url('/images/rss.png?1305289158');-o-mask-image:url('/images/rss.png?1305289158');-ms-mask-image:url('/images/rss.png?1305289158');-khtml-mask-image:url('/images/rss.png?1305289158');mask-image:url('/images/rss.png?1305289158');-moz-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;-o-mask-repeat:no-repeat;-ms-mask-repeat:no-repeat;-khtml-mask-repeat:no-repeat;mask-repeat:no-repeat;width:24px;height:24px;position:absolute;top:-1px;left:0;background-color:#b0b0b0}html{background:#252525 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAb1BMVEUAAAAdHR0eHR4eHh4eHh8fHx8gICAhISEiISIiIiIjIyMkJCQlJCUlJSUmJSYmJiYnJycoKCgpKCkqKisqKywrKywsKy0sLC0tLC4tLS4tLS8uLi8uLjAvLzAwLzEAAAAAAAAAAAAAAAAAAAAAAADZ8HsjAAAAJXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMGCw4PcEyLoAAAAZdJREFUaN7tmFlvwkAQg4cSoClHQsvRAmkyXv7/b6w3BFH15EjmAc2DX2xZn6IIsmvZV6KhrAWIQKUMKhXt6hhFG7V9jC5sXNO5uCEmFDWgSDCgXPsuL2qICUUNKBIMKLf8xs5uiAkFBpQb/5XOa8j9UGBAaeFr8X9DTCilAUWCAaWlr/jfDTGhVAYU2RtQWjxd/d4QE4rFs8jegNLyqffnhphQ1IAiwYDSwW3ke0NMKGpA6eb+9qUh90OBAaW7e/WnhphQSgOKBANKt3vH6ZhqQCkNKBIMKN3vUKdjascUg03tdEz15c6XO1/ufLnz5c6XO1/ufLnz5c6XO1/ufLnz5c6XO1/ufLnz5c6Xu+6Xu4QaAekQmjBIGPSioq1IGPVpP0Q1dkr1gMEjNKXdpz2ghtFW9BlFO20aA5kzeKbGQJ5DMwY5gwk1pZ0rsgx4oj2hprTntV03ZrNDY0w7o6I9YYNRtKdNQ6odgw31AhQFtGDwymBNFbS3itUaWNB+o5a0l7RjtKD9Dt01jV3T2Ci2WyDaq0PjAzgEkrGstE8ZAAAAAElFTkSuQmCC') top left}body{background-color:#333333;border:0 0 1px 0 solid #181818}body > div{background-color:#eeeeee;border-bottom:1px solid #8c8c8c}body > div > div{background-color:#f7f7f7;border-right:1px solid #dcdcdc}@media only screen and (min-width: 1400px){body{border:1px solid #181818;border-top:0}}.side-shadow-border,#articles + aside section h1,#articles + aside li{-moz-box-shadow:white 0 1px;-webkit-box-shadow:white 0 1px;-o-box-shadow:white 0 1px;box-shadow:white 0 1px}#articles + aside{padding-top:1.2em}#articles + aside section{font-size:.8em;line-height:1.5em;margin-bottom:1.5em}#articles + aside section h1{margin:1.5em 0 0;padding-bottom:.2em;border-bottom:1px solid #dcdcdc}#articles + aside section h1 + p{padding-top:.4em}#articles + aside ul{margin-bottom:0.5em}#articles + aside li{list-style:none;padding:.5em 0;margin:0;border-bottom:1px solid #dcdcdc}#articles + aside li p:last-child{margin-bottom:0}#articles + aside a{color:inherit;-moz-transition-property:color;-webkit-transition-property:color;-o-transition-property:color;transition-property:color;-moz-transition-duration:0.5s;-webkit-transition-duration:0.5s;-o-transition-duration:0.5s;transition-duration:0.5s}#articles + aside:hover a,#articles + aside:hover #tweets a{color:#1863a1}#articles + aside #recent_posts time{text-transform:uppercase;font-size:.9em;color:#666}#articles + aside #tweets a{color:#666;text-decoration:none}#articles + aside #tweets a:hover{text-decoration:underline}#articles + aside #tweets li:hover a[href*='status']{color:#666}#articles + aside #tweets p{position:relative;padding-right:1.4em}#articles + aside #tweets a[href*='status']{color:#ccc;position:absolute;top:0;right:-0.5em;text-decoration:none;padding:0 .5em .1em;text-shadow:#fff 0 1px}#articles + aside #tweets a[href*='status'] span:last-child{display:none;font-size:.7em}#articles + aside #tweets a[href*='status'] span:first-child{font-size:1.1em}#articles + aside #tweets a[href*='status']:hover{background:#e5e5e5;-moz-box-shadow:#eeeeee -2px 2px 8px 8px;-webkit-box-shadow:#eeeeee -2px 2px 8px 8px;-o-box-shadow:#eeeeee -2px 2px 8px 8px;box-shadow:#eeeeee -2px 2px 8px 8px;-moz-border-radius:1em;-webkit-border-radius:1em;-o-border-radius:1em;-ms-border-radius:1em;-khtml-border-radius:1em;border-radius:1em;text-decoration:none;line-height:1.2em}#articles + aside #tweets a[href*='status']:hover span:first-child{display:none}#articles + aside #tweets a[href*='status']:hover span:last-child{display:inline-block}#articles + aside #tweets a[href*='status']:hover span:last-child{color:#444}#articles + aside #pinboard_linkroll .pin-title,#articles + aside #pinboard_linkroll .pin-description{display:block;margin-bottom:.5em}#articles + aside #pinboard_linkroll .pin-tag{text-decoration:none}#articles + aside #pinboard_linkroll .pin-tag:hover{text-decoration:underline}#articles + aside #pinboard_linkroll .pin-tag:after{content:','}#articles + aside #pinboard_linkroll .pin-tag:last-child:after{content:''}#articles + aside .delicious-posts a.delicious-link{margin-bottom:.5em;display:block}#articles + aside .delicious-posts p{font-size:1em}.aside-alt-link,#articles + aside #tweets a[href*='twitter.com/search'],#articles + aside #pinboard_linkroll .pin-tag{color:#999}.aside-alt-link:hover,#articles + aside #tweets a[href*='twitter.com/search']:hover,#articles + aside #pinboard_linkroll .pin-tag:hover{color:#555}#articles > article{padding-bottom:1em}#articles > article:last-child{margin-bottom:0;border-bottom:none}#articles > article h2{padding-top:0.8em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAABCAYAAACsXeyTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAFUlEQVQIHWNIS0sr/v//PwMMDzY+ADqMahlW4J91AAAAAElFTkSuQmCC') top left repeat-x}#articles > article .byline + time:before,#articles > 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}#articles > article header{padding-top:2em;margin-bottom:1.5em;padding-bottom:1.5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAABCAYAAACsXeyTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAFUlEQVQIHWNIS0sr/v//PwMMDzY+ADqMahlW4J91AAAAAElFTkSuQmCC') bottom left repeat-x}#articles > article header h1{margin:0}#articles > article header h1 a{text-decoration:none}#articles > article header h1 a:hover{text-decoration:underline}#articles > article header p{font-size:.9em;color:#555555;border:none;padding-top:0;margin:0;font-style:italic;font-family:"Georgia", Palatino, Times, "Times New Roman"}#articles > article .entry-content img{max-width:100%}#articles > 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}#articles > article .footer{padding-top:15px}body > footer{font-size:.8em;color:#6b6b6b;text-shadow:#d9d9d9 0 1px;background-color:#ccc;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e0e0e0), color-stop(50%, #cccccc), color-stop(100%, #b0b0b0));background:-webkit-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-moz-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-o-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:linear-gradient(#e0e0e0,#cccccc,#b0b0b0);border-top:1px solid #f2f2f2;position:relative;padding-top:1em;padding-bottom:1em;z-index:1}body > footer a{color:#6b6b6b}body > footer a:hover{color:#2b2b2b}body > footer p:last-child{margin-bottom:0}.gutter .line-numbers{text-align:right;background:#073642 !important;border-right:1px solid #00232c;-moz-box-shadow:#083e4b -1px 0 inset;-webkit-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px}.gutter .line-numbers span{color:#586e75 !important}html .gist .gist-file{margin-bottom:1.5em;border:none}html .gist .gist-file .gist-syntax{border-bottom:1px solid #515151 !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .gist-highlight pre{overflow-y:hidden;overflow-x:auto}html .gist .gist-file .gist-meta{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0b0b0), color-stop(100%, #a7a7a7));background:-webkit-linear-gradient(#b0b0b0,#a7a7a7);background:-moz-linear-gradient(#b0b0b0,#a7a7a7);background:-o-linear-gradient(#b0b0b0,#a7a7a7);background:linear-gradient(#b0b0b0,#a7a7a7);padding:0.5em;background-color:#bababa !important;border:1px solid #9c9c9c;border-top:1px solid #d0d0d0;border-bottom:1px solid #777777;font-size:.7em !important;font-family:"Helvetica Neue", Arial, sans-serif !important;color:#464646 !important;line-height:1.4em}.pre,html .gist .gist-file .gist-syntax .gist-highlight pre,pre{font-size:.8em;line-height:1.45em;padding:1em 1.2em !important;background:#002b36 !important;color:#93a1a1 !important}.pre span,html .gist .gist-file .gist-syntax .gist-highlight pre span,pre span{color:#93a1a1 !important}.pre span,html .gist .gist-file .gist-syntax .gist-highlight pre span,pre span{font-style:normal !important;font-weight:normal !important}.pre .c,html .gist .gist-file .gist-syntax .gist-highlight pre .c,pre .c{color:#586e75 !important;font-style:italic !important}.pre .cm,html .gist .gist-file .gist-syntax .gist-highlight pre .cm,pre .cm{color:#586e75 !important;font-style:italic !important}.pre .cp,html .gist .gist-file .gist-syntax .gist-highlight pre .cp,pre .cp{color:#586e75 !important;font-style:italic !important}.pre .c1,html .gist .gist-file .gist-syntax .gist-highlight pre .c1,pre .c1{color:#586e75 !important;font-style:italic !important}.pre .cs,html .gist .gist-file .gist-syntax .gist-highlight pre .cs,pre .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre .err,html .gist .gist-file .gist-syntax .gist-highlight pre .err,pre .err{color:#dc322f !important;background:none !important}.pre .k,html .gist .gist-file .gist-syntax .gist-highlight pre .k,pre .k{color:#cb4b16 !important}.pre .o,html .gist .gist-file .gist-syntax .gist-highlight pre .o,pre .o{color:#93a1a1 !important;font-weight:bold !important}.pre .p,html .gist .gist-file .gist-syntax .gist-highlight pre .p,pre .p{color:#93a1a1 !important}.pre .ow,html .gist .gist-file .gist-syntax .gist-highlight pre .ow,pre .ow{color:#2aa198 !important;font-weight:bold !important}.pre .gd,html .gist .gist-file .gist-syntax .gist-highlight pre .gd,pre .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:block}.pre .gd .x,html .gist .gist-file .gist-syntax .gist-highlight pre .gd .x,pre .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:block}.pre .ge,html .gist .gist-file .gist-syntax .gist-highlight pre .ge,pre .ge{color:#93a1a1 !important;font-style:italic !important}.pre .gh,html .gist .gist-file .gist-syntax .gist-highlight pre .gh,pre .gh{color:#586e75 !important}.pre .gi,html .gist .gist-file .gist-syntax .gist-highlight pre .gi,pre .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:block}.pre .gi .x,html .gist .gist-file .gist-syntax .gist-highlight pre .gi .x,pre .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:block}.pre .gs,html .gist .gist-file .gist-syntax .gist-highlight pre .gs,pre .gs{color:#93a1a1 !important;font-weight:bold !important}.pre .gu,html .gist .gist-file .gist-syntax .gist-highlight pre .gu,pre .gu{color:#6c71c4 !important}.pre .kc,html .gist .gist-file .gist-syntax .gist-highlight pre .kc,pre .kc{color:#859900 !important;font-weight:bold !important}.pre .kd,html .gist .gist-file .gist-syntax .gist-highlight pre .kd,pre .kd{color:#268bd2 !important}.pre .kp,html .gist .gist-file .gist-syntax .gist-highlight pre .kp,pre .kp{color:#cb4b16 !important;font-weight:bold !important}.pre .kr,html .gist .gist-file .gist-syntax .gist-highlight pre .kr,pre .kr{color:#d33682 !important;font-weight:bold !important}.pre .kt,html .gist .gist-file .gist-syntax .gist-highlight pre .kt,pre .kt{color:#2aa198 !important}.pre .n,html .gist .gist-file .gist-syntax .gist-highlight pre .n,pre .n{color:#268bd2 !important}.pre .na,html .gist .gist-file .gist-syntax .gist-highlight pre .na,pre .na{color:#268bd2 !important}.pre .nb,html .gist .gist-file .gist-syntax .gist-highlight pre .nb,pre .nb{color:#859900 !important}.pre .no,html .gist .gist-file .gist-syntax .gist-highlight pre .no,pre .no{color:#b58900 !important}.pre .ne,html .gist .gist-file .gist-syntax .gist-highlight pre .ne,pre .ne{color:#268bd2 !important;font-weight:bold !important}.pre .nf,html .gist .gist-file .gist-syntax .gist-highlight pre .nf,pre .nf{color:#268bd2 !important;font-weight:bold !important}.pre .nn,html .gist .gist-file .gist-syntax .gist-highlight pre .nn,pre .nn{color:#b58900 !important}.pre .nt,html .gist .gist-file .gist-syntax .gist-highlight pre .nt,pre .nt{color:#268bd2 !important;font-weight:bold !important}.pre .nx,html .gist .gist-file .gist-syntax .gist-highlight pre .nx,pre .nx{color:#b58900 !important}.pre .vg,html .gist .gist-file .gist-syntax .gist-highlight pre .vg,pre .vg{color:#268bd2 !important}.pre .vi,html .gist .gist-file .gist-syntax .gist-highlight pre .vi,pre .vi{color:#268bd2 !important}.pre .nv,html .gist .gist-file .gist-syntax .gist-highlight pre .nv,pre .nv{color:#268bd2 !important}.pre .mf,html .gist .gist-file .gist-syntax .gist-highlight pre .mf,pre .mf{color:#2aa198 !important}.pre .m,html .gist .gist-file .gist-syntax .gist-highlight pre .m,pre .m{color:#2aa198 !important}.pre .mh,html .gist .gist-file .gist-syntax .gist-highlight pre .mh,pre .mh{color:#2aa198 !important}.pre .mi,html .gist .gist-file .gist-syntax .gist-highlight pre .mi,pre .mi{color:#2aa198 !important}.pre .s,html .gist .gist-file .gist-syntax .gist-highlight pre .s,pre .s{color:#2aa198 !important}.pre .sd,html .gist .gist-file .gist-syntax .gist-highlight pre .sd,pre .sd{color:#2aa198 !important}.pre .s2,html .gist .gist-file .gist-syntax .gist-highlight pre .s2,pre .s2{color:#2aa198 !important}.pre .se,html .gist .gist-file .gist-syntax .gist-highlight pre .se,pre .se{color:#dc322f !important}.pre .si,html .gist .gist-file .gist-syntax .gist-highlight pre .si,pre .si{color:#268bd2 !important}.pre .sr,html .gist .gist-file .gist-syntax .gist-highlight pre .sr,pre .sr{color:#2aa198 !important}.pre .s1,html .gist .gist-file .gist-syntax .gist-highlight pre .s1,pre .s1{color:#2aa198 !important}.highlight{margin-bottom:1.5em;overflow-y:hidden}.highlight .gutter pre{padding-left:.8em !important;padding-right:.8em !important}h3.filename{font-size:13px;line-height:2em;text-align:center;text-shadow:#cbcccc 0 1px 0;color:#474747;font-style:normal;margin-bottom:0;-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;font-family:"Helvetica Neue",Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaaaaa url('/images/code_bg.png?1270921258') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0}
diff --git a/themes/classic/source/test/syntax.html b/themes/classic/source/test/syntax.html
new file mode 100644
index 00000000..ac26554f
--- /dev/null
+++ b/themes/classic/source/test/syntax.html
@@ -0,0 +1,397 @@
+---
+layout: default
+layout: page
+nometa: true
+title: Syntax Highlighting Debug
+---
+
+<h3 class="filename">gist_syntax_test.rb</h3>
+{% gist 996818 test.rb %}
+
+<h3 class="filename">syntax_test.diff</h3>
+{% highlight diff %}
+@@ -590,7 +590,7 @@ class SpritesTest < Test::Unit::TestCase
+ it "should generate a sprite from nested folders" do
+ css = render <<-SCSS
+- @import "nested/*.png";
++ @import "nested/**/*.png";
+ @include all-nested-sprites;
+ SCSS
+ assert_correct css, <<-CSS
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.html</h3>
+{% highlight html %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+<title>A Tiny Page</title>
+<style type="text/css">
+<!--
+ p { font-size:15pt; color:#000 }
+ -->
+</style></head><!-- real comment -->
+<body bgcolor="#FFFFFF" text="#000000" link="#0000CC">
+<script language="javascript" type="text/javascript">
+ function changeHeight(h) {
+ var tds = document.getElementsByTagName("td");
+ for(var i = 0; i < tds.length; i++) {
+ tds[i].setAttribute("height", h + "px");
+ }}
+</script>
+<h1>abc</h1>
+<h2>def</h2>
+<p>Testing page</p>
+</body></html>
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.js</h3>
+{% highlight js %}
+
+/**
+sample javascript from xui
+*/
+
+var undefined,
+ xui,
+ window = this,
+ string = new String('string'),
+ document = window.document,
+ simpleExpr = /^#?([\w-]+)$/,
+ idExpr = /^#/,
+ tagExpr = /<([\w:]+)/,
+ slice = function (e) { return [].slice.call(e, 0); };
+ try { var a = slice(document.documentElement.childNodes)[0].nodeType; }
+ catch(e){ slice = function (e) { var ret=[]; for (var i=0; e[i]; i++)
+ ret.push(e[i]); return ret; }; }
+
+window.x$ = window.xui = xui = function(q, context) {
+ return new xui.fn.find(q, context);
+};
+
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.rb</h3>
+{% highlight ruby %}
+
+include Enumerable
+
+def initialize(rbconfig)
+@rbconfig = rbconfig
+@no_harm = false
+end
+
+def load_savefile
+begin
+ File.foreach(savefile()) do |line|
+ k, v = *line.split(/=/, 2)
+ self[k] = v.strip
+ end
+rescue Errno::ENOENT
+ setup_rb_error $!.message + "\n#{File.basename($0)} config first"
+end
+end
+
+if c['rubylibdir']
+ # V > 1.6.3
+ libruby = "#{c['prefix']}/lib/ruby"
+ siterubyverarch = c['sitearchdir']
+end
+parameterize = lambda {|path|
+ path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
+}
+
+if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
+ makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
+else
+ makeprog = 'make'
+end
+
+def setup_rb_error(msg)
+ raise SetupError, msg
+end
+
+if $0 == __FILE__
+ begin
+ ToplevelInstaller.invoke
+ rescue SetupError
+ raise if $DEBUG
+ $stderr.puts $!.message
+ $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
+ exit 1
+ end
+end
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.php</h3>
+{% highlight php %}
+<?php
+require_once($GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/country/common.php");
+require_once($GLOBALS['g_campsiteDir']. "/classes/SimplePager.php");
+camp_load_translation_strings("api");
+
+$f_country_language_selected = camp_session_get('f_language_selected', '');
+$f_country_offset = camp_session_get('f_country_offset', 0);
+if (empty($f_country_language_selected)) {
+ $f_country_language_selected = null;
+}
+$ItemsPerPage = 20;
+$languages = Language::GetLanguages(null, null, null, array(), array(), true);
+$numCountries = Country::GetNumCountries($f_country_language_selected);
+
+$pager = new SimplePager($numCountries, $ItemsPerPage, "index.php?");
+
+$crumbs = array();
+$crumbs[] = array(getGS("Configure"), "");
+$crumbs[] = array(getGS("Countries"), "");
+echo camp_html_breadcrumbs($crumbs);
+
+?>
+
+<?php if ($g_user->hasPermission("ManageCountries")) { ?>
+<table BORDER="0" CELLSPACING="0" CELLPADDING="1">
+ <tr>
+ <td><a href="add.php"><?php putGS("Add new"); ?></a></td>
+ </tr>
+</table>
+{% endhighlight %}
+
+
+<h3 class="filename">syntax_test.hs</h3>
+{% highlight hs %}
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+--import Prelude hiding (id)
+--import Control.Category (id)
+import Control.Arrow ((>>>), (***), arr)
+import Control.Monad (forM_)
+-- import Data.Monoid (mempty, mconcat)
+
+-- import System.FilePath
+
+import Hakyll
+
+
+main :: IO ()
+main = hakyll $ do
+
+ route "css/*" $ setExtension "css"
+ compile "css/*" $ byExtension (error "Not a (S)CSS file")
+ [ (".css", compressCssCompiler)
+ , (".scss", sass)
+ ]
+
+ route "js/**" idRoute
+ compile "js/**" copyFileCompiler
+
+ route "img/*" idRoute
+ compile "img/*" copyFileCompiler
+
+ compile "templates/*" templateCompiler
+
+ forM_ ["test.md", "index.md"] $ \page -> do
+ route page $ setExtension "html"
+ compile page $ pageCompiler
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+sass :: Compiler Resource String
+sass = getResourceString >>> unixFilter "sass" ["-s", "--scss"]
+ >>> arr compressCss
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.sh</h3>
+{% highlight sh %}
+#!/bin/bash
+
+cd $ROOT_DIR
+DOT_FILES="lastpass weechat ssh Xauthority"
+for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done
+
+# TODO: refactor with suffix variables (or common cron values)
+
+case "$PLATFORM" in
+ linux)
+ #conform_link "$CONF_DIR/shell/zshenv" ".zshenv"
+ crontab -l > $ROOT_DIR/tmp/crontab-conflict-arch
+ cd $ROOT_DIR/$CONF_DIR/cron
+ if [[ "$(diff ~/tmp/crontab-conflict-arch crontab-current-arch)" == ""
+ ]];
+ then # no difference with current backup
+ logger "$LOG_PREFIX: crontab live settings match stored "\
+ "settings; no restore required"
+ rm ~/tmp/crontab-conflict-arch
+ else # current crontab settings in file do not match live settings
+ crontab $ROOT_DIR/$CONF_DIR/cron/crontab-current-arch
+ logger "$LOG_PREFIX: crontab stored settings conflict with "\
+ "live settings; stored settings restored. "\
+ "Previous settings recorded in ~/tmp/crontab-conflict-arch."
+ fi
+ ;;
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.py</h3>
+{% highlight py %}
+# test python (sample from offlineimap)
+
+class ExitNotifyThread(Thread):
+ """This class is designed to alert a "monitor" to the fact that a thread has
+ exited and to provide for the ability for it to find out why."""
+ def run(self):
+ global exitthreads, profiledir
+ self.threadid = thread.get_ident()
+ try:
+ if not profiledir: # normal case
+ Thread.run(self)
+ else:
+ try:
+ import cProfile as profile
+ except ImportError:
+ import profile
+ prof = profile.Profile()
+ try:
+ prof = prof.runctx("Thread.run(self)", globals(), locals())
+ except SystemExit:
+ pass
+ prof.dump_stats( \
+ profiledir + "/" + str(self.threadid) + "_" + \
+ self.getName() + ".prof")
+ except:
+ self.setExitCause('EXCEPTION')
+ if sys:
+ self.setExitException(sys.exc_info()[1])
+ tb = traceback.format_exc()
+ self.setExitStackTrace(tb)
+ else:
+ self.setExitCause('NORMAL')
+ if not hasattr(self, 'exitmessage'):
+ self.setExitMessage(None)
+
+ if exitthreads:
+ exitthreads.put(self, True)
+
+ def setExitCause(self, cause):
+ self.exitcause = cause
+ def getExitCause(self):
+ """Returns the cause of the exit, one of:
+ 'EXCEPTION' -- the thread aborted because of an exception
+ 'NORMAL' -- normal termination."""
+ return self.exitcause
+ def setExitException(self, exc):
+ self.exitexception = exc
+ def getExitException(self):
+ """If getExitCause() is 'EXCEPTION', holds the value from
+ sys.exc_info()[1] for this exception."""
+ return self.exitexception
+ def setExitStackTrace(self, st):
+ self.exitstacktrace = st
+ def getExitStackTrace(self):
+ """If getExitCause() is 'EXCEPTION', returns a string representing
+ the stack trace for this exception."""
+ return self.exitstacktrace
+ def setExitMessage(self, msg):
+ """Sets the exit message to be fetched by a subsequent call to
+ getExitMessage. This message may be any object or type except
+ None."""
+ self.exitmessage = msg
+ def getExitMessage(self):
+ """For any exit cause, returns the message previously set by
+ a call to setExitMessage(), or None if there was no such message
+ set."""
+ return self.exitmessage
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.pl</h3>
+{% highlight perl %}
+#!perl -w
+
+# Time-stamp: <2002/04/06, 13:12:13 (EST), maverick, csvformat.pl>
+# Two pass CSV file to table formatter
+
+$delim = $#ARGV >= 1 ? $ARGV[1] : ',';
+print STDERR "Split pattern: $delim\n";
+
+# first pass
+open F, "<$ARGV[0]" or die;
+while(<F>)
+{
+ chomp;
+ $i = 0;
+ map { $max[$_->[1]] = $_->[0] if $_->[0] > ($max[$_->[1]] || 0) }
+ (map {[length $_, $i++]} split($delim));
+}
+close F;
+
+print STDERR 'Field width: ', join(', ', @max), "\n";
+print STDERR join(' ', map {'-' x $_} @max);
+
+# second pass
+open F, "<$ARGV[0]" or die;
+while(<F>)
+ {
+ chomp;
+ $i = 0;
+ map { printf("%-$max[$_->[1]]s ", $_->[0]) }
+ (map {[$_, $i++]} split($delim));
+ print "\n";
+}
+close F;
+
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.java</h3>
+{% highlight java %}
+import java.util.Map;
+import java.util.TreeSet;
+
+public class GetEnv {
+ /**
+ * let's test generics
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ // get a map of environment variables
+ Map<String, String> env = System.getenv();
+ // build a sorted set out of the keys and iterate
+ for(String k: new TreeSet<String>(env.keySet())) {
+ System.out.printf("%s = %s\n", k, env.get(k));
+ }
+ } }
+{% endhighlight %}
+
+<h3 class="filename">syntax_test.c</h3>
+{% highlight c %}
+#define UNICODE
+#include <windows.h>
+
+int main(int argc, char **argv) {
+ int speed = 0, speed1 = 0, speed2 = 0; // 1-20
+ printf("Set Mouse Speed by Maverick\n");
+
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("Current speed: %2d\n", speed);
+
+ if (argc == 1) return 0;
+ if (argc >= 2) sscanf(argv[1], "%d", &speed1);
+ if (argc >= 3) sscanf(argv[2], "%d", &speed2);
+
+ if (argc == 2) // set speed to first value
+ speed = speed1;
+ else if (speed == speed1 || speed == speed2) // alternate
+ speed = speed1 + speed2 - speed;
+ else
+ speed = speed1; // start with first value
+
+ SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0);
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("New speed: %2d\n", speed);
+ return 0;
+}
+
+{% endhighlight %}
+
diff --git a/themes/classic/source/test/typography.haml b/themes/classic/source/test/typography.haml
new file mode 100644
index 00000000..82ec3132
--- /dev/null
+++ b/themes/classic/source/test/typography.haml
@@ -0,0 +1,114 @@
+---
+layout: page
+title: Typography Testing
+sidebar: none
+---
+
+%h1 Level 01 Heading
+%h2 Level 02 Heading
+%h3 Level 03 Heading
+%h4 Level 04 Heading
+%h5 Level 05 Heading
+%h6 Level 06 Heading
+
+
+%p
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce sodales ligula sed urna. Aliquam posuere arcu
+ viverra erat. Pellentesque et enim dapibus ante facilisis bibendum. Nam congue dapibus urna. Vestibulum consequat
+ arcu at magna. Nunc faucibus mollis lacus. Nulla tempor luctus tellus. Donec blandit lobortis pede. Vestibulum
+ vel pede ut urna eleifend lacinia.
+
+%h2 Level 02 Heading
+
+%p
+ Maecenas ligula nibh, imperdiet at, interdum eget, sagittis eu, enim. Vivamus vel urna. Donec fringilla
+ ullamcorper sem. In risus arcu, pellentesque cursus, faucibus cursus, consequat quis, est. Aliquam id erat.
+ Aliquam arcu. Phasellus vulputate. Integer sem diam, mattis vel, viverra ullamcorper, ultricies quis, nisl. Sed
+ sollicitudin quam ut nisi. Vivamus velit sapien, volutpat eu, faucibus id, nonummy id, urna.
+
+%h3 Level 03 Heading
+
+%p
+ Take it<sub>2</sub> to the power of<sup>3</sup>
+ Praesent iaculis pellentesque est. Nulla facilisi. Etiam fringilla vehicula orci. Aliquam fermentum ipsum id
+ nulla. Aliquam interdum laoreet leo. Cras accumsan. Nam pharetra diam id nunc. Integer blandit tellus vulputate
+ felis. Cras aliquam, eros in euismod aliquam, enim nisl mollis metus, quis fringilla ipsum diam ut pede. Mauris a
+ libero ac velit interdum pulvinar. Nunc ipsum mauris, semper rhoncus, feugiat ut, egestas id, diam. Nullam
+ porttitor condimentum risus. Vivamus nec enim eget nisi commodo euismod. Ut turpis. Nullam malesuada rutrum
+ neque. Nam sodales porta elit. Mauris mollis nisl vel augue.
+
+%p
+ And we were like <q>Woah</q>, and he was like <q>Woah</q>, and they were like <q>WOAH!</q> <code><\reference></code>
+
+%p
+ %abbr(title="For The Win!") FTW!
+%p
+
+%h3 Unordered lists
+%ul
+ %li Lorem ipsum dolor sit amet
+ %li Consectetur adipisicing elit
+ %li Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
+ %li Ut enim ad minim veniam
+
+%h3 Ordered lists
+%ol
+ %li Consectetur adipisicing elit
+ %li Sed do eiusmod tempor incididunt ut labore
+ %li Et dolore magna aliqua
+
+%h3 Blockquotes
+%blockquote
+ %p
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+%h3 Tables
+%table
+ %caption
+ Jimi Hendrix - albums
+ %thead
+ %tr
+ %th Album
+ %th Year
+ %th Price
+ %tfoot
+ %tr
+ %td Album
+ %td Year
+ %td Price
+ %tbody
+ %tr
+ %td Are You Experienced
+ %td 1967
+ %td $10.00
+ %tr
+ %td Axis: Bold as Love
+ %td 1967
+ %td $12.00
+ %tr
+ %td Electric Ladyland
+ %td 1968
+ %td $10.00
+ %tr
+ %td Band of Gypsys
+ %td 1970
+ %td $12.00
+%p
+ %a(href="#")Link
+ %br/
+ %strong &lt;strong&gt;
+ %br/
+ %del &lt;del&gt; deleted
+ %br/
+ %dfn &lt;dfn&gt; dfn
+ %br/
+ %em &lt;em&gt; emphasis
+ %br/
+
+%tt
+ &lt;tt&gt;
+ Pellentesque tempor, dui ut ultrices viverra, neque urna blandit nisi, id accumsan dolor est vitae risus.
+%hr