diff --git a/sass/_base.scss b/sass/_base.scss
new file mode 100644
index 0000000..05fdd00
--- /dev/null
+++ b/sass/_base.scss
@@ -0,0 +1,5 @@
+@import "base/utilities";
+@import "base/solarized";
+@import "base/theme";
+@import "base/typography";
+@import "base/layout";
diff --git a/sass/_partials.scss b/sass/_partials.scss
new file mode 100644
index 0000000..99c28b6
--- /dev/null
+++ b/sass/_partials.scss
@@ -0,0 +1,8 @@
+@import "partials/header";
+@import "partials/navigation";
+@import "partials/blog";
+@import "partials/sharing";
+@import "partials/syntax";
+@import "partials/archive";
+@import "partials/sidebar";
+@import "partials/footer";
diff --git a/sass/base/_layout.scss b/sass/base/_layout.scss
new file mode 100644
index 0000000..ef47279
--- /dev/null
+++ b/sass/base/_layout.scss
@@ -0,0 +1,155 @@
+$max-width: 1200px !default;
+
+// Padding used for layout margins
+$pad-min: 18px !default;
+$pad-narrow: 25px !default;
+$pad-medium: 35px !default;
+$pad-wide: 55px !default;
+
+// Sidebar widths used in media queries
+$sidebar-width-medium: 240px !default;
+$sidebar-pad-medium: 15px !default;
+$sidebar-pad-wide: 20px !default;
+$sidebar-width-wide: 300px !default;
+
+$indented-lists: false !default;
+
+.group { @include pie-clearfix; }
+
+@mixin collapse-sidebar {
+ float: none;
+ width: auto;
+ clear: left;
+ margin: 0;
+ padding: 0 $pad-medium 1px;
+ background-color: lighten($sidebar-bg, 2);
+ border-top: 1px solid lighten($sidebar-border, 4);
+ section {
+ &.odd, &.even { float: left; width: 48%; }
+ &.odd { margin-left: 0; }
+ &.even { margin-left: 4%; }
+ }
+ &.thirds section {
+ width: 30%;
+ margin-left: 5%;
+ &.first { margin-left: 0; }
+ }
+}
+
+body {
+ -webkit-text-size-adjust: none;
+ max-width: $max-width;
+ position: relative;
+ margin: 0 auto;
+ > header, > nav, > footer, #content > article, #content > div > article, #content > div > section, nav[role=pagination] {
+ @extend .group;
+ padding-left: $pad-min;
+ padding-right: $pad-min;
+ @media only screen and (min-width: 480px) {
+ padding-left: $pad-narrow;
+ padding-right: $pad-narrow;
+ }
+ @media only screen and (min-width: 768px) {
+ padding-left: $pad-medium;
+ padding-right: $pad-medium;
+ }
+ @media only screen and (min-width: 992px) {
+ padding-left: $pad-wide;
+ padding-right: $pad-wide;
+ }
+ }
+ > header {
+ font-size: 1em;
+ padding-top: 1.5em;
+ padding-bottom: 1.5em;
+ }
+}
+
+#content { > div, > article { width: 100%; }}
+
+aside[role=sidebar] {
+ float: none;
+ padding: 0 $pad-min 1px;
+ background-color: lighten($sidebar-bg, 2);
+ border-top: 1px solid $sidebar-border;
+ @extend .group;
+}
+
+.toggle-sidebar { &, .no-sidebar & { display: none; }}
+
+body.sidebar-footer {
+ @media only screen and (min-width: 750px) {
+ aside[role=sidebar]{ @include collapse-sidebar; }
+ }
+ #content { margin-right: 0px; }
+ .toggle-sidebar { display: none; }
+}
+
+@media only screen and (min-width: 550px) {
+ body > header { font-size: 1em; }
+}
+@media only screen and (min-width: 750px) {
+ aside[role=sidebar] { @include collapse-sidebar; }
+}
+@media only screen and (min-width: 768px) {
+ body { -webkit-text-size-adjust: auto; }
+ body > header { font-size: 1.2em; }
+ #main {
+ @extend .group;
+ padding: 0;
+ margin: 0 auto;
+ }
+ #content {
+ @extend .group;
+ margin-right: $sidebar-width-medium;
+ position: relative;
+ .no-sidebar & { margin-right: 0; }
+ .collapse-sidebar & { margin-right: 20px; }
+ > div, > article {
+ padding-top: $pad-medium/2;
+ padding-bottom: $pad-medium/2;
+ float: left;
+ }
+ }
+ aside[role=sidebar] {
+ @extend .group;
+ width: $sidebar-width-medium - $sidebar-pad-medium*2;
+ padding: 0 $sidebar-pad-medium $sidebar-pad-medium;
+ background: none;
+ clear: none;
+ float: left;
+ margin: 0 -100% 0 0;
+ section {
+ width: auto; margin-left: 0;
+ &.odd, &.even { float: none; width: auto; margin-left: 0; }
+ }
+ .collapse-sidebar & {
+ @include collapse-sidebar;
+ }
+ }
+}
+
+@media only screen and (min-width: 992px) {
+ body > header { font-size: 1.3em; }
+ #content { margin-right: $sidebar-width-wide; }
+ #content {
+ > div, > article {
+ padding-top: $pad-wide/2;
+ padding-bottom: $pad-wide/2;
+ }
+ }
+ aside[role=sidebar] {
+ width: $sidebar-width-wide - $sidebar-pad-wide*2;
+ padding: 1.2em $sidebar-pad-wide $sidebar-pad-wide;
+ .collapse-sidebar & {
+ padding: { left: $pad-wide; right: $pad-wide; }
+ @extend .group;
+ }
+ }
+}
+
+@if $indented-lists == false {
+ @media only screen and (min-width: 768px) {
+ ul, ol { margin-left: 0; }
+ }
+}
diff --git a/sass/base/_solarized.scss b/sass/base/_solarized.scss
new file mode 100644
index 0000000..f4126b0
--- /dev/null
+++ b/sass/base/_solarized.scss
@@ -0,0 +1,18 @@
+$base03: #002b36; //darkest blue
+$base02: #073642; //dark blue
+$base01: #586e75; //darkest gray
+$base00: #657b83; //dark gray
+$base0: #839496; //medium gray
+$base1: #93a1a1; //medium light gray
+$base2: #eee8d5; //cream
+$base3: #fdf6e3; //white
+$yellow: #b58900;
+$orange: #cb4b16;
+$red: #dc322f;
+$magenta: #d33682;
+$violet: #6c71c4;
+$blue: #268bd2;
+$cyan: #2aa198;
+$green: #859900;
+
+$pre-bg: $base03 !default;
diff --git a/sass/base/_theme.scss b/sass/base/_theme.scss
new file mode 100644
index 0000000..3953fe3
--- /dev/null
+++ b/sass/base/_theme.scss
@@ -0,0 +1,88 @@
+$noise-bg: image-url('noise.png') top left;
+$img-border: inline-image('dotted-border.png');
+
+// Main Link Colors
+$link-color: lighten(#165b94, 3) !default;
+$link-color-hover: adjust-color($link-color, $lightness: 10, $saturation: 25) !default;
+$link-color-visited: adjust-color($link-color, $hue: 80, $lightness: -4) !default;
+$link-color-active: adjust-color($link-color-hover, $lightness: -15) !default;
+
+// Main Section Colors
+$main-bg: #f8f8f8 !default;
+$page-bg: #252525 !default;
+$article-border: #eeeeee !default;
+
+$header-bg: #333 !default;
+$header-border: lighten($header-bg, 15) !default;
+$title-color: #f2f2f2 !default;
+$subtitle-color: #aaa !default;
+
+$text-color: #222 !default;
+$text-color-light: #aaa !default;
+$type-border: #ddd !default;
+
+/* non highlighted code colors */
+$pre-bg: $base03 !default;
+$pre-border: $base02 !default;
+$pre-color: $base1 !default;
+
+/* Navigation */
+$nav-bg: #ccc !default;
+$nav-color: darken($nav-bg, 38) !default;
+$nav-color-hover: darken($nav-color, 25) !default;
+$nav-placeholder: desaturate(darken($nav-bg, 10), 15) !default;
+$nav-border: darken($nav-bg, 10) !default;
+$nav-border-top: lighten($nav-bg, 15) !default;
+$nav-border-bottom: darken($nav-bg, 25) !default;
+$nav-border-left: darken($nav-bg, 11) !default;
+$nav-border-right: lighten($nav-bg, 7) !default;
+
+/* Sidebar colors */
+$sidebar-bg: #f2f2f2 !default;
+$sidebar-link-color: $link-color !default;
+$sidebar-link-color-hover: $link-color-hover !default;
+$sidebar-link-color-active: $link-color-active !default;
+$sidebar-color: change-color(mix($text-color, $sidebar-bg, 80), $hue: hue($sidebar-bg), $saturation: saturation($sidebar-bg)/2) !default;
+$sidebar-border: desaturate(darken($sidebar-bg, 7), 10) !default;
+$sidebar-border: darken($sidebar-bg, 7) !default;
+$sidebar-link-color-subdued: lighten($sidebar-color, 20) !default;
+$sidebar-link-color-subdued-hover: $sidebar-link-color-hover !default;
+$twitter-status-link: lighten($sidebar-link-color-subdued, 15) !default;
+
+$footer-color: #888 !default;
+$footer-bg: #ccc !default;
+$footer-color: darken($footer-bg, 38) !default;
+$footer-color-hover: darken($footer-color, 10) !default;
+$footer-border-top: lighten($footer-bg, 15) !default;
+$footer-border-bottom: darken($footer-bg, 15) !default;
+$footer-link-color: darken($footer-bg, 38) !default;
+$footer-link-color-hover: darken($footer-color, 25) !default;
+$page-border-bottom: darken($footer-bg, 5) !default;
+
+
+/* Core theme application */
+
+a {
+ @include link-colors($link-color, $hover: $link-color-hover, $focus: $link-color-hover, $visited: $link-color-visited, $active: $link-color-active);
+}
+aside[role=sidebar] a {
+ @include link-colors($sidebar-link-color, $hover: $sidebar-link-color-hover, $focus: $sidebar-link-color-hover, $active: $sidebar-link-color-active);
+}
+a {
+ @include transition(color .3s);
+}
+
+html {
+ background: $page-bg image-url('line-tile.png') top left;
+}
+body {
+ > div {
+ background: $sidebar-bg $noise-bg;
+ border-bottom: 1px solid $page-border-bottom;
+ > div {
+ background: $main-bg $noise-bg;
+ border-right: 1px solid $sidebar-border;
+ }
+ }
+}
+
diff --git a/sass/base/_typography.scss b/sass/base/_typography.scss
new file mode 100644
index 0000000..06d1a98
--- /dev/null
+++ b/sass/base/_typography.scss
@@ -0,0 +1,137 @@
+$blockquote: $type-border !default;
+$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace;
+
+// Fonts
+.heading {
+ font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif;
+}
+.sans { font-family: "PT Sans", "Helvetica Neue", Arial, sans-serif; }
+.serif { font-family: "PT Serif", Georgia, Times, "Times New Roman", serif; }
+.mono { font-family: $mono; }
+
+body > header h1 {
+ font-size: 2.2em;
+ @extend .heading;
+ font-weight: normal;
+ line-height: 1.2em;
+ margin-bottom: 0.6667em;
+}
+
+body {
+ line-height: 1.5em;
+ color: $text-color;
+ @extend .serif;
+}
+h1 {
+ font-size: 2.2em;
+ line-height: 1.2em;
+}
+
+@media only screen and (min-width: 992px) {
+ body { font-size: 1.15em; }
+ h1 { font-size: 3em; line-height: 1.2em; }
+}
+
+#{headings()}{
+ @extend .heading;
+ text-rendering: optimizelegibility;
+ margin-bottom: 1em;
+ font-weight: bold;
+}
+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;
+ ul { list-style-type: circle;
+ ul { list-style-type: square; }}}
+
+ol { list-style-type: decimal;
+ ol { list-style-type: lower-alpha;
+ ol { list-style-type: lower-roman; }}}
+
+ul, ol { &, ul, ol { margin-left: 1.3em; }}
+
+strong { font-weight: bold; }
+
+em { font-style: italic; }
+
+sup, sub { font-size: 0.8em; position: relative; display: inline-block; }
+sup { top: -.5em; }
+sub { bottom: -.5em; }
+
+q { font-style: italic;
+ &:before { content: "\201C"; }
+ &: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; }
+
+pre, code, tt { @extend .mono-font; }
+
+sub, sup { line-height: 0; }
+
+hr { margin-bottom: 0.2em; }
+
+small { font-size: .8em; }
+
+big { font-size: 1.2em; }
+
+blockquote {
+ $bq-margin: 1.2em;
+ font-style: italic;
+ position: relative;
+ font-size: 1.2em;
+ line-height: 1.5em;
+ padding-left: 1em;
+ border-left: 4px solid rgba($text-color-light, .5);
+ cite {
+ font-style: italic;
+ a { color: $text-color-light !important; word-wrap: break-word; }
+ &:before { content: '–'; padding:{right: .3em; left: .3em;} color: $text-color-light; }
+ }
+ @media only screen and (min-width: 992px) {
+ padding-left: 1.5em;
+ border-left-width: 4px;
+ }
+}
+
+.has-pullquote:before {
+ /* Reset metrics. */
+ padding: 0;
+ border: none;
+
+ /* Content */
+ content: attr(data-pullquote);
+
+ /* Pull out to the right, modular scale based margins. */
+ float: right;
+ width: 45%;
+ margin: .5em 0 1em 1.5em;
+
+ /* Baseline correction */
+ position: relative;
+ top: 7px;
+ font-size: 1.4em;
+ line-height: 1.45em;
+}
+
diff --git a/sass/base/_utilities.scss b/sass/base/_utilities.scss
new file mode 100644
index 0000000..8b718cd
--- /dev/null
+++ b/sass/base/_utilities.scss
@@ -0,0 +1,21 @@
+@mixin mask-image($img, $repeat: no-repeat){
+ @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms);
+ @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms);
+ width: image-width($img);
+ height: image-height($img);
+}
+
+@mixin selection($bg, $color: inherit, $text-shadow: none){
+ * {
+ &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ &::selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ }
+}
+
+@function text-color($color, $dark: dark, $light: light){
+ $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000;
+ $text-color: if($text-color >= 150, $dark, $light);
+ @return $text-color;
+}
+
diff --git a/sass/custom/_colors.scss b/sass/custom/_colors.scss
new file mode 100644
index 0000000..0771a86
--- /dev/null
+++ b/sass/custom/_colors.scss
@@ -0,0 +1,20 @@
+// Here you can easily change your sites's color scheme.
+// To give it a try, uncomment some of the lines below rebuild your blog, and see how it works.
+
+//$header-bg: #263347;
+//$subtitle-color: lighten($header-bg, 58);
+//$nav-bg: desaturate(lighten(#8fc17a, 18), 5);
+//$sidebar-bg: desaturate(#eceff5, 8);
+//$sidebar-link-color: saturate(#526f9a, 10);
+//$sidebar-link-color-hover: darken(#7ab662, 9);
+
+
+//To use the light Solarized highlighting theme uncomment this block
+//$base03: $base3;
+//$base02: $base2;
+//$base01: $base1;
+//$base00: $base0;
+//$base0: $base00;
+//$base1: $base01;
+//$base2: $base02;
+//$base3: $base03;
diff --git a/sass/custom/_layout.scss b/sass/custom/_layout.scss
new file mode 100644
index 0000000..5317311
--- /dev/null
+++ b/sass/custom/_layout.scss
@@ -0,0 +1,17 @@
+// Here you can easily change your sites's layout.
+// To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works.
+
+//$max-width: 1350px;
+//$indented-lists: true;
+
+// Padding used for layout margins
+//$pad-min: 18px;
+//$pad-narrow: 25px;
+//$pad-medium: 35px;
+//$pad-wide: 55px;
+
+// Sidebar widths used in media queries
+//$sidebar-width-medium: 240px;
+//$sidebar-pad-medium: 15px;
+//$sidebar-pad-wide: 20px;
+//$sidebar-width-wide: 300px;
diff --git a/sass/custom/_styles.scss b/sass/custom/_styles.scss
new file mode 100644
index 0000000..91ffccc
--- /dev/null
+++ b/sass/custom/_styles.scss
@@ -0,0 +1,2 @@
+// This File is imported last, and will override other styles in the cascade
+// Add styles here to make changes without digging in too much
diff --git a/sass/partials/_archive.scss b/sass/partials/_archive.scss
new file mode 100644
index 0000000..9ef1e82
--- /dev/null
+++ b/sass/partials/_archive.scss
@@ -0,0 +1,72 @@
+#archive {
+ #content > div { &, > article { padding-top: 0; } }
+}
+#blog-archives {
+ article {
+ padding: 1em 0 1em;
+ position: relative;
+ background: $img-border bottom left repeat-x;
+ &:last-child {
+ background: none;
+ }
+ footer { padding: 0; margin: 0;}
+ }
+ h1 { color: $text-color; margin-bottom: .3em; }
+ h2 { display: none; }
+ h1 {
+ font-size: 1.5em;
+ a {
+ @include hover-link;
+ color: inherit;
+ &:hover { color: $link-color-hover; }
+ font-weight: normal;
+ display: inline-block;
+ }
+ }
+ a.category, time {
+ @extend .sans;
+ color: $text-color-light;
+ }
+ color: $text-color-light;
+ .entry-content { display: none; }
+ time {
+ font-size: .9em;
+ line-height: 1.2em;
+ .month, .day { display: inline-block; }
+ .month { text-transform: uppercase; }
+ }
+ p { margin-bottom: 1em; }
+ &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }}
+ a:hover { color: $link-color-hover; }
+ @media only screen and (min-width: 550px) {
+ article { margin-left: 5em; }
+ h2 {
+ margin-bottom: .3em;
+ font-weight: normal;
+ display: inline-block;
+ position: relative; top: -1px;
+ float: left;
+ &:first-child { padding-top: .75em; }
+ }
+ time {
+ position: absolute;
+ text-align: right;
+ left: 0em;
+ top: 1.8em;
+ }
+ .year { display: none; }
+ article {
+ padding:{left: 4.5em; bottom: .7em;}
+ }
+ a.category {
+ line-height: 1.1em;
+ }
+ }
+}
+#content > .category {
+ article {
+ margin-left: 0;
+ padding-left: 6.8em;
+ }
+ .year { display: inline; }
+}
diff --git a/sass/partials/_blog.scss b/sass/partials/_blog.scss
new file mode 100644
index 0000000..26ad19b
--- /dev/null
+++ b/sass/partials/_blog.scss
@@ -0,0 +1,146 @@
+article {
+ overflow: hidden;
+ padding-top: 1em;
+ header {
+ position: relative;
+ padding-top: 2em;
+ padding-bottom: 1em;
+ margin-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ h1 {
+ margin: 0;
+ a { text-decoration: none;
+ &:hover { text-decoration: underline; } }
+ }
+ p {
+ font-size: .9em;
+ color: $text-color-light;
+ margin: 0;
+ &.meta {
+ @extend .sans;
+ text-transform: uppercase;
+ position: absolute; top: 0;
+ }
+ }
+ @media only screen and (min-width: 768px) {
+ margin-bottom: 1.5em;
+ padding-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ }
+ }
+ h2 {
+ padding-top: 0.8em;
+ background: $img-border top left repeat-x;
+ }
+ .entry-content & h2:first-child, header + h2 { padding-top: 0; }
+ h2:first-child, header + h2 { background: none; }
+ .feature {
+ padding-top: .5em;
+ margin-bottom: 1em;
+ padding-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ font-size: 2.0em; font-style: italic;
+ line-height: 1.3em;
+ }
+ .entry-content {
+ img, video { max-width: 100%; height: auto; }
+ video {
+ width: 100%; display: block; margin-bottom: 1.5em;
+ padding: .8em; background: #fff; border: 1px solid #eee;
+ @include box-sizing(border-box);
+ }
+ }
+ .flash-video {
+ max-width: 100%;
+ margin-bottom: 1.5em;
+ @include box-sizing(border-box);
+ padding: .8em; background: #fff; border: 1px solid #eee;
+ > div {
+ position: relative;
+ display: block;
+ padding-bottom: 56.25%;
+ padding-top: 1px;
+ height: 0;
+ overflow: hidden;
+ iframe, object, embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ > footer {
+ padding-bottom: 2.5em;
+ margin-top: 2em;
+ @extend .sans;
+ p.meta {
+ margin-bottom: .8em;
+ font-size: .85em;
+ }
+ .byline + time:before, time +time:before, .comments:before, .byline ~ .categories:before {
+ @extend .separator;
+ }
+ }
+
+}
+article + article {
+ .blog-index & {
+ background: $img-border top left repeat-x;
+ }
+}
+#content .blog-index {
+ padding: { top: 0; bottom: 0; }
+ article { padding-top: 2em; }
+ article header { background: none; padding-bottom: 0; }
+ article h1 {
+ font-size: 2.2em;
+ a { color: inherit; &:hover { color: $link-color-hover; } }
+ }
+ a[rel=full-article] {
+ background: darken($main-bg, 5);
+ display: inline-block;
+ padding: .4em .8em;
+ margin-right: .5em;
+ text-decoration: none;
+ color: mix($text-color, $text-color-light);
+ @extend .serif;
+ @include transition(background-color .5s);
+ &:hover {
+ background: $link-color-hover;
+ text-shadow: none;
+ color: $main-bg;
+ }
+ }
+ footer {
+ @extend .sans;
+ margin-top: 1em;
+ }
+}
+
+.separator {
+ content: "\2022 ";
+ padding: 0 .4em 0 .2em;
+ display: inline-block;
+}
+
+#content nav[role=pagination] {
+ text-align: center;
+ font-size: .95em;
+ div {
+ position: relative;
+ background: $img-border top left repeat-x;
+ padding: {top: 1.5em; bottom: 1.5em;}
+ }
+ a {
+ text-decoration: none;
+ color: $text-color-light;
+ &.prev { position: absolute; left: 0; }
+ &.next { position: absolute; right: 0; }
+ &:hover { color: $link-color-hover; }
+ &[href*=archive] {
+ &:before, &:after { content: '\2014'; padding: 0 .3em; }
+ }
+ }
+}
diff --git a/sass/partials/_footer.scss b/sass/partials/_footer.scss
new file mode 100644
index 0000000..e750342
--- /dev/null
+++ b/sass/partials/_footer.scss
@@ -0,0 +1,19 @@
+body > footer {
+ @extend .sans;
+ font-size: .8em;
+ color: $footer-color;
+ text-shadow: lighten($footer-bg, 5) 0 1px;
+ background-color: $footer-bg;
+ @include background(image-url('noise.png'), linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)));
+ border-top: 1px solid $footer-border-top;
+ position: relative;
+ padding-top: 1em;
+ padding-bottom: 1em;
+ margin-bottom: 3em;
+ @include border-bottom-radius(.4em);
+ z-index: 1;
+ a {
+ @include link-colors($footer-link-color, $footer-link-color-hover, $visited: $footer-link-color);
+ }
+ p:last-child { margin-bottom: 0; }
+}
diff --git a/sass/partials/_header.scss b/sass/partials/_header.scss
new file mode 100644
index 0000000..e3c6c02
--- /dev/null
+++ b/sass/partials/_header.scss
@@ -0,0 +1,18 @@
+body > header {
+ background: $header-bg;
+ h1 {
+ display: inline-block;
+ margin: 0;
+ a, a:visited, a:hover {
+ color: $title_color;
+ text-decoration: none;
+ }
+ }
+ h2 {
+ margin: .2em 0 0;
+ @extend .sans;
+ font-size: 1em;
+ color: $subtitle-color;
+ font-weight: normal;
+ }
+}
diff --git a/sass/partials/_navigation.scss b/sass/partials/_navigation.scss
new file mode 100644
index 0000000..7af9f9f
--- /dev/null
+++ b/sass/partials/_navigation.scss
@@ -0,0 +1,136 @@
+body > nav {
+ position: relative;
+ background-color: $nav-bg;
+ @include background(image-url('noise.png'), linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)));
+ border: {
+ top: 1px solid $nav-border-top;
+ bottom: 1px solid $nav-border-bottom; }
+ padding-top: .35em;
+ padding-bottom: .35em;
+ form {
+ @include background-clip(padding-box);
+ margin: 0; padding: 0;
+ .search {
+ padding: .3em .5em 0;
+ font-size: .85em;
+ @extend .sans;
+ line-height: 1.1em;
+ width: 95%;
+ @include border-radius(.5em);
+ @include background-clip(padding-box);
+ @include box-shadow(lighten($nav-bg, 2) 0 1px);
+ background-color: lighten($nav-bg, 15);
+ border: 1px solid $nav-border;
+ color: #888;
+ &:focus {
+ color: #444;
+ border-color: #80b1df;
+ @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset);
+ background-color: #fff;
+ outline: none;
+ }
+ }
+ }
+ fieldset[role=site-search]{ float: right; width: 48%; }
+ fieldset[role=mobile-nav]{ float: left; width: 48%;
+ select{ width: 100%; font-size: .8em; border: 1px solid #888;}
+ }
+ ul { display: none; }
+ @media only screen and (min-width: 550px) {
+ font-size: .9em;
+ ul {
+ @include horizontal-list(0);
+ float: left;
+ display: block;
+ padding-top: .15em;
+ }
+ ul[role=subscription] {
+ margin-left: .8em;
+ float: right;
+ li:last-child a { padding-right: 0; }
+ }
+ ul li {
+ margin: 0;
+ }
+ a {
+ @include link-colors($nav-color, $nav-color-hover, $visited: $nav-color);
+ @extend .sans;
+ text-shadow: lighten($nav-bg, 12) 0 1px;
+ float: left;
+ text-decoration: none;
+ font-size: 1.1em;
+ padding: .1em 0;
+ line-height: 1.5em;
+ }
+ li + li {
+ border-left: 1px solid $nav-border-left;
+ margin-left: .8em;
+ a {
+ padding-left: .8em;
+ border-left: 1px solid $nav-border-right;
+ }
+ }
+ form {
+ float: right;
+ text-align: left;
+ padding-left: .8em;
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 20px;
+ .search {
+ width: 93%;
+ font-size: .95em;
+ line-height: 1.2em;
+ }
+ }
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 58px;
+ .search { width: 91%; }
+ }
+ fieldset[role=mobile-nav] { display: none; }
+ fieldset[role=site-search]{ width: 99%; }
+ }
+ @media only screen and (min-width: 992px) {
+ form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 10px;
+ }
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 58px;
+ }
+ }
+}
+.no-placeholder {
+ body > nav .search {
+ background: lighten($nav-bg, 15) image-url('search.png') .3em .25em no-repeat;
+ text-indent: 1.3em;
+ }
+}
+@mixin mask-subscription-nav($feed: 'rss.png'){
+ position: relative; top: 0px;
+ text-indent: -999999em;
+ background-color: $nav-border-right;
+ border: 0;
+ padding: 0;
+ &,&:after { @include mask-image($feed); }
+ &:after {
+ content: "";
+ position: absolute; top: -1px; left: 0;
+ background-color: lighten($nav-color, 25);
+ }
+ &:hover:after { background-color: lighten($nav-color, 20); }
+}
+.maskImage {
+ body > nav {
+ @media only screen and (min-width: 550px) {
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 32px;
+ }
+ }
+ @media only screen and (min-width: 992px) {
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 32px;
+ }
+ }
+ }
+ ul[role=subscription] { position: relative; top: .2em; li, a { border: 0; padding: 0; }}
+ a[rel=subscribe-rss]{ @include mask-subscription-nav('rss.png'); }
+ a[rel=subscribe-email]{ @include mask-subscription-nav('email.png'); }
+}
diff --git a/sass/partials/_sharing.scss b/sass/partials/_sharing.scss
new file mode 100644
index 0000000..1fa9775
--- /dev/null
+++ b/sass/partials/_sharing.scss
@@ -0,0 +1,6 @@
+.sharing {
+ p.meta + & {
+ padding: { top: 1em; left: 0; }
+ background: $img-border top left repeat-x;
+ }
+}
diff --git a/sass/partials/_sidebar.scss b/sass/partials/_sidebar.scss
new file mode 100644
index 0000000..ac790e0
--- /dev/null
+++ b/sass/partials/_sidebar.scss
@@ -0,0 +1,4 @@
+@import "sidebar/base";
+@import "sidebar/twitter";
+@import "sidebar/pinboard";
+@import "sidebar/delicious";
diff --git a/sass/partials/_syntax.scss b/sass/partials/_syntax.scss
new file mode 100644
index 0000000..b31e250
--- /dev/null
+++ b/sass/partials/_syntax.scss
@@ -0,0 +1,215 @@
+.highlight, html .gist .gist-file .gist-syntax .gist-highlight {
+ .line-numbers {
+ text-align: right;
+ font-size: 13px;
+ line-height: 1.45em;
+ background: $base02 $noise-bg !important;
+ border-right: 1px solid darken($base03, 2) !important;
+ @include box-shadow(lighten($base02, 2) -1px 0 inset);
+ text-shadow: darken($base02, 10) 0 -1px;
+ span { color: $base01 !important; }
+ padding: .8em !important;
+ @include border-radius(0);
+ }
+}
+html .gist .gist-file {
+ margin-bottom: 1.5em;
+ position: relative;
+ border: none;
+ padding-top: image-height("code_bg.png") !important;
+ .gist-syntax {
+ border-bottom: 1px solid darken($base03, 2) !important;
+ .gist-highlight{
+ background: $base03 !important;
+ pre {
+ @extend .pre-code;
+ }
+ }
+ }
+ .gist-meta {
+ padding: .6em 0.8em;
+ border: 1px solid lighten($base02, 2) !important;
+ color: $base01;
+ font-size: .7em !important;
+ background: $base02 $noise-bg;
+ @extend .sans;
+ line-height: 1.5em;
+ a {
+ color: mix($base1, $base01) !important;
+ @include hover-link;
+ &:hover { color: $base1 !important; }
+ }
+ a[href*='#file'] {
+ position: absolute; top: 0; left:0; right:-10px;
+ color: #474747 !important;
+ @extend .code-title;
+ &:hover { color: $link-color !important; }
+ }
+ a[href*=raw]{
+ @extend .download-source;
+ top: .4em;
+ }
+ }
+}
+pre {
+ background: $pre-bg $noise-bg;
+ @include border-radius(.4em);
+ @extend .mono;
+ border: 1px solid $pre-border;
+ line-height: 1.45em;
+ font-size: 13px;
+ margin-bottom: 1.5em;
+ padding: .8em 1em;
+ color: $pre-color;
+ overflow: auto;
+}
+h3.filename {
+ @extend .code-title;
+ + pre { @include border-top-radius(0px); }
+}
+
+p code {
+ @extend .mono;
+ display: inline-block;
+ white-space: no-wrap;
+ background: #fff;
+ font-size: .8em;
+ line-height: 1.5em;
+ color: #555;
+ border: 1px solid #ddd;
+ @include border-radius(.4em);
+ padding: 0 .3em;
+ margin: -1px 0;
+}
+
+.pre-code {
+ @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
+ font-family: $mono !important;
+ overflow: scroll;
+ overflow-y: hidden;
+ display: block;
+ padding: .8em !important;
+ overflow-x: auto;
+ line-height: 1.45em;
+ background: $base03 $noise-bg !important;
+ color: $base1 !important;
+ span { color: $base1 !important; }
+ span { font-style: normal !important; font-weight: normal !important; }
+
+ .c { color: $base01 !important; font-style: italic !important; } /* Comment */
+ .cm { color: $base01 !important; font-style: italic !important; } /* Comment.Multiline */
+ .cp { color: $base01 !important; font-style: italic !important; } /* Comment.Preproc */
+ .c1 { color: $base01 !important; font-style: italic !important; } /* Comment.Single */
+ .cs { color: $base01 !important; font-weight: bold !important; font-style: italic !important; } /* Comment.Special */
+ .err { color: $red !important; background: none !important; } /* Error */
+ .k { color: $orange !important; } /* Keyword */
+ .o { color: $base1 !important; font-weight: bold !important; } /* Operator */
+ .p { color: $base1 !important; } /* Operator */
+ .ow { color: $cyan !important; font-weight: bold !important; } /* Operator.Word */
+ .gd { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: inline-block; } /* Generic.Deleted */
+ .gd .x { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: inline-block; } /* Generic.Deleted.Specific */
+ .ge { color: $base1 !important; font-style: italic !important; } /* Generic.Emph */
+ //.gr { color: #aa0000 } /* Generic.Error */
+ .gh { color: $base01 !important; } /* Generic.Heading */
+ .gi { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: inline-block; } /* Generic.Inserted */
+ .gi .x { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: inline-block; } /* Generic.Inserted.Specific */
+ //.go { color: #888888 } /* Generic.Output */
+ //.gp { color: #555555 } /* Generic.Prompt */
+ .gs { color: $base1 !important; font-weight: bold !important; } /* Generic.Strong */
+ .gu { color: $violet !important; } /* Generic.Subheading */
+ //.gt { color: #aa0000 } /* Generic.Traceback */
+ .kc { color: $green !important; font-weight: bold !important; } /* Keyword.Constant */
+ .kd { color: $blue !important; } /* Keyword.Declaration */
+ .kp { color: $orange !important; font-weight: bold !important; } /* Keyword.Pseudo */
+ .kr { color: $magenta !important; font-weight: bold !important; } /* Keyword.Reserved */
+ .kt { color: $cyan !important; } /* Keyword.Type */
+ .n { color: $blue !important; }
+ .na { color: $blue !important; } /* Name.Attribute */
+ .nb { color: $green !important; } /* Name.Builtin */
+ //.nc { color: #445588; font-weight: bold } /* Name.Class */
+ .no { color: $yellow !important; } /* Name.Constant */
+ //.ni { color: #800080 } /* Name.Entity */
+ .ne { color: $blue !important; font-weight: bold !important; } /* Name.Exception */
+ .nf { color: $blue !important; font-weight: bold !important; } /* Name.Function */
+ .nn { color: $yellow !important; } /* Name.Namespace */
+ .nt { color: $blue !important; font-weight: bold !important; } /* Name.Tag */
+ .nx { color: $yellow !Important; }
+ //.bp { color: #999999 } /* Name.Builtin.Pseudo */
+ //.vc { color: #008080 } /* Name.Variable.Class */
+ .vg { color: $blue !important; } /* Name.Variable.Global */
+ .vi { color: $blue !important; } /* Name.Variable.Instance */
+ .nv { color: $blue !important; } /* Name.Variable */
+ //.w { color: #bbbbbb } /* Text.Whitespace */
+ .mf { color: $cyan !important; } /* Literal.Number.Float */
+ .m { color: $cyan !important; } /* Literal.Number */
+ .mh { color: $cyan !important; } /* Literal.Number.Hex */
+ .mi { color: $cyan !important; } /* Literal.Number.Integer */
+ //.mo { color: #009999 } /* Literal.Number.Oct */
+ .s { color: $cyan !important; } /* Literal.String */
+ //.sb { color: #d14 } /* Literal.String.Backtick */
+ //.sc { color: #d14 } /* Literal.String.Char */
+ .sd { color: $cyan !important; } /* Literal.String.Doc */
+ .s2 { color: $cyan !important; } /* Literal.String.Double */
+ .se { color: $red !important; } /* Literal.String.Escape */
+ //.sh { color: #d14 } /* Literal.String.Heredoc */
+ .si { color: $blue !important; } /* Literal.String.Interpol */
+ //.sx { color: #d14 } /* Literal.String.Other */
+ .sr { color: $cyan !important; } /* Literal.String.Regex */
+ .s1 { color: $cyan !important; } /* Literal.String.Single */
+ //.ss { color: #990073 } /* Literal.String.Symbol */
+ //.il { color: #009999 } /* Literal.Number.Integer.Long */
+ div { .gd, .gd .x, .gi, .gi .x { display: block; }}
+}
+
+.highlight, .gist-highlight {
+ pre { background: none; @include border-radius(none); border: none; padding: 0; margin-bottom: 0; }
+ margin-bottom: 1.5em;
+ background: $base03;
+ overflow-y: hidden;
+ overflow-x: auto;
+}
+pre, .highlight, .gist-highlight {
+ &::-webkit-scrollbar { height: .5em; background: rgba(#fff, .15); }
+ &::-webkit-scrollbar-thumb:horizontal { background: rgba(#fff, .2); -webkit-border-radius: 4px; border-radius: 4px }
+}
+
+.highlight code { @extend .pre-code; background: #000;}
+figure[role=code] {
+ background: none;
+ padding: 0;
+ border: 0;
+ margin-bottom: 1.5em;
+ figcaption {
+ position: relative;
+ @extend .code-title;
+ a { @extend .download-source; }
+ }
+ .highlight { margin-bottom: 0; border-bottom: 1px solid darken($base03, 2) !important; }
+}
+.code-title {
+ text-align: center;
+ font-size: 13px;
+ line-height: 2em;
+ text-shadow: #cbcccc 0 1px 0;
+ color: #474747;
+ font-weight: normal;
+ margin-bottom: 0;
+ @include border-top-radius(5px);
+ font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;
+ background: #aaaaaa image-url("code_bg.png") top repeat-x;
+ border: 1px solid #565656;
+ border-top-color: #cbcbcb;
+ border-left-color: #a5a5a5;
+ border-right-color: #a5a5a5;
+ border-bottom: 0;
+}
+
+.download-source {
+ position: absolute; right: .8em;
+ @include hover-link;
+ color: #666 !important;
+ z-index: 1;
+ font-size: 13px;
+ text-shadow: #cbcccc 0 1px 0;
+ padding-left: 3em;
+}
diff --git a/sass/partials/sidebar/_base.scss b/sass/partials/sidebar/_base.scss
new file mode 100644
index 0000000..b07dffa
--- /dev/null
+++ b/sass/partials/sidebar/_base.scss
@@ -0,0 +1,99 @@
+.side-shadow-border {
+ @include box-shadow(lighten($sidebar-bg, 5) 0 1px);
+}
+aside[role=sidebar] {
+ color: $sidebar-color;
+ text-shadow: lighten($sidebar-bg, 8) 0 1px;
+ section {
+ @extend .sans;
+ font-size: .8em;
+ line-height: 1.4em;
+ margin-bottom: 1.5em;
+ h1 {
+ margin: 1.5em 0 0;
+ padding-bottom: .2em;
+ border-bottom: 1px solid $sidebar-border;
+ @extend .side-shadow-border;
+ + p {
+ padding-top: .4em;
+ }
+ }
+ }
+ ul {
+ margin-bottom: 0.5em;
+ margin-left: 0;
+ }
+ li {
+ list-style: none;
+ padding: .5em 0;
+ margin: 0;
+ border-bottom: 1px solid $sidebar-border;
+ @extend .side-shadow-border;
+ p:last-child {
+ margin-bottom: 0;
+ }
+ }
+ a {
+ color: inherit;
+ @include transition(color .5s);
+ }
+ &:hover a {
+ color: $sidebar-link-color;
+ &:hover { color: $sidebar-link-color-hover; }
+ }
+}
+.aside-alt-link {
+ color: $sidebar-link-color-subdued;
+ &:hover {
+ color: $sidebar-link-color-subdued-hover;
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .toggle-sidebar {
+ outline: none;
+ position: absolute; right: -10px; top: 0; bottom: 0;
+ display: inline-block;
+ text-decoration: none;
+ color: mix($text-color-light, $sidebar-bg);
+ width: 9px;
+ cursor: pointer;
+ &:hover {
+ background: mix($sidebar-border, $sidebar-bg);
+ @include background(linear-gradient(left, rgba($sidebar-border, .5), rgba($sidebar-border, 0)));
+ }
+ &:after {
+ position: absolute; right: -11px; top: 0;
+ width: 20px;
+ font-size: 1.2em;
+ line-height: 1.1em;
+ padding-bottom: .15em;
+ @include border-bottom-right-radius(.3em);
+ text-align: center;
+ background: $main-bg $noise-bg;
+ border-bottom: 1px solid $sidebar-border;
+ border-right: 1px solid $sidebar-border;
+ content: "\00BB";
+ text-indent: -1px;
+ }
+ .collapse-sidebar & {
+ text-indent: 0px;
+ right: -20px;
+ width: 19px;
+ &:hover {
+ background: mix($sidebar-border, $sidebar-bg);
+ }
+ &:after {
+ border-left: 1px solid $sidebar-border;
+ text-shadow: #fff 0 1px;
+ content: "\00AB";
+ left: 0px; right: 0;
+ text-align: center;
+ text-indent: 0;
+ border: 0;
+ border-right-width: 0;
+ background: none;
+ }
+ }
+ }
+}
diff --git a/sass/partials/sidebar/_delicious.scss b/sass/partials/sidebar/_delicious.scss
new file mode 100644
index 0000000..e962702
--- /dev/null
+++ b/sass/partials/sidebar/_delicious.scss
@@ -0,0 +1,4 @@
+.delicious-posts {
+ a.delicious-link { margin-bottom: .5em; display: block; }
+ p { font-size: 1em; }
+}
diff --git a/sass/partials/sidebar/_pinboard.scss b/sass/partials/sidebar/_pinboard.scss
new file mode 100644
index 0000000..9f9ab46
--- /dev/null
+++ b/sass/partials/sidebar/_pinboard.scss
@@ -0,0 +1,12 @@
+#pinboard_linkroll {
+ .pin-title, .pin-description {
+ display: block;
+ margin-bottom: .5em;
+ }
+ .pin-tag {
+ @include hover-link;
+ @extend .aside-alt-link;
+ &:after { content: ','; }
+ &:last-child:after { content: ''; }
+ }
+}
diff --git a/sass/partials/sidebar/_twitter.scss b/sass/partials/sidebar/_twitter.scss
new file mode 100644
index 0000000..ccc9b53
--- /dev/null
+++ b/sass/partials/sidebar/_twitter.scss
@@ -0,0 +1,34 @@
+#tweets {
+ .loading {
+ background: inline-image('bird_32_gray.png') no-repeat center .5em;
+ color: darken($sidebar-bg, 18);
+ text-shadow: $main-bg 0 1px;
+ text-align: center;
+ padding: 2.5em 0 .5em;
+ &.error {
+ background: inline-image('bird_32_gray_fail.png') no-repeat center .5em;
+ }
+ }
+ p {
+ position: relative;
+ padding-right: 1em;
+ }
+ a[href*=status]{
+ color: $twitter-status-link;
+ float: right;
+ padding: 0 0 .1em 1em;
+ position: relative; right: -1.3em;
+ text-shadow: #fff 0 1px;
+ font-size: .7em;
+ span { font-size: 1.5em; }
+ text-decoration: none;
+ &:hover {
+ color: $sidebar-link-color-subdued-hover;
+ text-decoration: none;
+ }
+ }
+ a[href*='twitter.com/search']{
+ @extend .aside-alt-link;
+ @include hover-link;
+ }
+}
diff --git a/sass/screen.scss b/sass/screen.scss
new file mode 100644
index 0000000..f08da4c
--- /dev/null
+++ b/sass/screen.scss
@@ -0,0 +1,9 @@
+@import "compass";
+@include global-reset;
+@include reset-html5;
+
+@import "custom/colors";
+@import "custom/layout";
+@import "base";
+@import "partials";
+@import "custom/styles";
diff --git a/source/_includes/archive_post.html b/source/_includes/archive_post.html
new file mode 100644
index 0000000..1e291c1
--- /dev/null
+++ b/source/_includes/archive_post.html
@@ -0,0 +1,8 @@
+{% capture category %}{{ post.categories | size }}{% endcapture %}
+
+{{ post.date | date: "%b %d %Y "}}
+{% if category != '0' %}
+
+ posted in {{ post.categories | category_links }}
+
+{% endif %}
diff --git a/source/_includes/article.html b/source/_includes/article.html
new file mode 100644
index 0000000..69bb500
--- /dev/null
+++ b/source/_includes/article.html
@@ -0,0 +1,20 @@
+{% unless page.no_header %}
+
+{% endunless %}
+{% if index %}
+ {{ content | exerpt | smart_quotes }}
+
+{% else %}
+{{ content | smart_quotes }}
+{% endif %}
diff --git a/source/_includes/asides/delicious.html b/source/_includes/asides/delicious.html
new file mode 100644
index 0000000..307a2e9
--- /dev/null
+++ b/source/_includes/asides/delicious.html
@@ -0,0 +1,7 @@
+{% if site.delicious_user %}
+
+{% endif %}
diff --git a/source/_includes/asides/pinboard.html b/source/_includes/asides/pinboard.html
new file mode 100644
index 0000000..bf65666
--- /dev/null
+++ b/source/_includes/asides/pinboard.html
@@ -0,0 +1,19 @@
+{% if site.pinboard_user %}
+
+
+{% endif %}
diff --git a/source/_includes/asides/recent_posts.html b/source/_includes/asides/recent_posts.html
new file mode 100644
index 0000000..9b8f47a
--- /dev/null
+++ b/source/_includes/asides/recent_posts.html
@@ -0,0 +1,10 @@
+
+ Recent Posts
+
+ {% for post in site.posts limit: site.recent_posts %}
+
+ {{ post.title }}
+
+ {% endfor %}
+
+
diff --git a/source/_includes/asides/twitter.html b/source/_includes/asides/twitter.html
new file mode 100644
index 0000000..d10d9e2
--- /dev/null
+++ b/source/_includes/asides/twitter.html
@@ -0,0 +1,19 @@
+{% if site.twitter_user %}
+
+ Latest Tweets
+
+
+
+ {% if site.twitter_follow_button %}
+
+ {% else %}
+ Follow @{{ site.twitter_user }}
+ {% endif %}
+
+{% endif %}
diff --git a/source/_includes/footer.html b/source/_includes/footer.html
new file mode 100644
index 0000000..e12f067
--- /dev/null
+++ b/source/_includes/footer.html
@@ -0,0 +1,4 @@
+
+ Copyright © {{ site.time | date: "%Y" }} - {{ site.author }} -
+ Powered by Octopress
+
diff --git a/source/_includes/google_analytics.html b/source/_includes/google_analytics.html
new file mode 100644
index 0000000..4d4d596
--- /dev/null
+++ b/source/_includes/google_analytics.html
@@ -0,0 +1,13 @@
+{% if site.google_analytics_tracking_id %}
+
+{% endif %}
diff --git a/source/_includes/google_plus_one.html b/source/_includes/google_plus_one.html
new file mode 100644
index 0000000..b69ddae
--- /dev/null
+++ b/source/_includes/google_plus_one.html
@@ -0,0 +1,9 @@
+{% if site.google_plus_one %}
+
+{% endif %}
diff --git a/source/_includes/head.html b/source/_includes/head.html
new file mode 100644
index 0000000..2654ec4
--- /dev/null
+++ b/source/_includes/head.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ {{site.title}}{% if page.title %}: {{page.title}}{% endif %}
+
+ {% if page.description %}
+
+ {% endif %}
+
+
+
+
+
+
+ {% if page.keywords %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% include google_analytics.html %}
+ {% include google_plus_one.html %}
+ {% include twitter_sharing.html %}
+
diff --git a/source/_includes/header.html b/source/_includes/header.html
new file mode 100644
index 0000000..411b6ab
--- /dev/null
+++ b/source/_includes/header.html
@@ -0,0 +1,6 @@
+
+
+ {% if site.subtitle %}
+ {{ site.subtitle }}
+ {% endif %}
+
diff --git a/source/_includes/navigation.html b/source/_includes/navigation.html
new file mode 100644
index 0000000..4518fcd
--- /dev/null
+++ b/source/_includes/navigation.html
@@ -0,0 +1,16 @@
+
+ RSS
+ {% if site.subscribe_email %}
+ Email
+ {% endif %}
+
+
+
diff --git a/source/_includes/post/author.html b/source/_includes/post/author.html
new file mode 100644
index 0000000..b2db904
--- /dev/null
+++ b/source/_includes/post/author.html
@@ -0,0 +1,6 @@
+{% if post.author %}
+ {% assign author = post.author %}
+{% else %}
+ {% assign author = site.author %}
+{% endif %}
+{% if author %}Posted by {{ author }} {% endif %}
diff --git a/source/_includes/post/categories.html b/source/_includes/post/categories.html
new file mode 100644
index 0000000..4a98b29
--- /dev/null
+++ b/source/_includes/post/categories.html
@@ -0,0 +1,10 @@
+{% capture category %}{% if post %}{{ post.categories | category_links | size }}{% else %}{{ page.categories | category_links | size }}{% endif %}{% endcapture %}
+{% unless category == '0' %}
+
+ {% if post %}
+ {{ post.categories | category_links }}
+ {% else %}
+ {{ page.categories | category_links }}
+ {% endif %}
+
+{% endunless %}
diff --git a/source/_includes/post/date.html b/source/_includes/post/date.html
new file mode 100644
index 0000000..f1ed481
--- /dev/null
+++ b/source/_includes/post/date.html
@@ -0,0 +1,10 @@
+{% capture date %}{{ page.date }}{{ post.date }}{% endcapture %}
+{% capture has_date %}{{ date | size }}{% endcapture %}
+{% capture updated %}{{ page.updated }}{{ post.updated }}{% endcapture %}
+{% capture was_updated %}{{ updated | size }}{% endcapture %}
+{% if has_date != '0' %}
+{{ date | ordinalize }}
+{% endif %}
+{% if was_updated != '0' %}
+
+{% endif %}
diff --git a/source/_includes/post/disqus_thread.html b/source/_includes/post/disqus_thread.html
new file mode 100644
index 0000000..f966f03
--- /dev/null
+++ b/source/_includes/post/disqus_thread.html
@@ -0,0 +1,13 @@
+
+
+Please enable JavaScript to view the comments powered by Disqus.
diff --git a/source/_includes/post/sharing.html b/source/_includes/post/sharing.html
new file mode 100644
index 0000000..7b074af
--- /dev/null
+++ b/source/_includes/post/sharing.html
@@ -0,0 +1,8 @@
+
+ {% if site.twitter_tweet_button %}
+
+ {% endif %}
+ {% if site.google_plus_one %}
+
+ {% endif %}
+
diff --git a/source/_includes/sidebar.html b/source/_includes/sidebar.html
new file mode 100644
index 0000000..f2e0734
--- /dev/null
+++ b/source/_includes/sidebar.html
@@ -0,0 +1,4 @@
+{% include asides/recent_posts.html %}
+{% include asides/twitter.html %}
+{% include asides/delicious.html %}
+{% include asides/pinboard.html %}
diff --git a/source/_includes/twitter_sharing.html b/source/_includes/twitter_sharing.html
new file mode 100644
index 0000000..687e77d
--- /dev/null
+++ b/source/_includes/twitter_sharing.html
@@ -0,0 +1,11 @@
+{% if site.twitter_follow_button or site.twitter_tweet_button %}
+
+{% endif %}
diff --git a/source/_layouts/category_index.html b/source/_layouts/category_index.html
new file mode 100644
index 0000000..85a6307
--- /dev/null
+++ b/source/_layouts/category_index.html
@@ -0,0 +1,17 @@
+---
+layout: page
+footer: false
+---
+
+
+{% for post in site.categories[page.category] %}
+{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
+{% unless year == this_year %}
+ {% assign year = this_year %}
+
{{ year }}
+{% endunless %}
+
+ {% include archive_post.html %}
+
+{% endfor %}
+
diff --git a/source/_layouts/default.html b/source/_layouts/default.html
new file mode 100644
index 0000000..fdb60de
--- /dev/null
+++ b/source/_layouts/default.html
@@ -0,0 +1,15 @@
+{% include head.html %}
+
+ {% include header.html %}
+ {% include navigation.html %}
+
+
+ {{ content }}
+ {% unless page.sidebar == false %}
+
{% include sidebar.html %}
+ {% endunless %}
+
+
+ {% include footer.html %}
+
+
diff --git a/source/_layouts/page.html b/source/_layouts/page.html
new file mode 100644
index 0000000..07dd050
--- /dev/null
+++ b/source/_layouts/page.html
@@ -0,0 +1,27 @@
+---
+layout: default
+---
+
+
+
+
+ {{ content | smart_quotes }}
+ {% unless page.footer == false %}
+
+ {% endunless %}
+
+{% if site.disqus_short_name and page.comments == true %}
+
+{% endif %}
+
diff --git a/source/_layouts/post.html b/source/_layouts/post.html
new file mode 100644
index 0000000..0e1004f
--- /dev/null
+++ b/source/_layouts/post.html
@@ -0,0 +1,26 @@
+---
+layout: default
+single: true
+---
+
+
+
+ {% include article.html %}
+
+
+{% if site.disqus_short_name and page.comments != false %}
+
+{% endif %}
+
diff --git a/source/_posts b/source/_posts
new file mode 120000
index 0000000..6719156
--- /dev/null
+++ b/source/_posts
@@ -0,0 +1 @@
+/Users/bmathis/Dropbox/octopress/_assets/source/_posts
\ No newline at end of file
diff --git a/source/assets/jwplayer/glow/controlbar/background.png b/source/assets/jwplayer/glow/controlbar/background.png
new file mode 100644
index 0000000..c2824cc
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/background.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/blankButton.png b/source/assets/jwplayer/glow/controlbar/blankButton.png
new file mode 100644
index 0000000..010159f
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/blankButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/divider.png b/source/assets/jwplayer/glow/controlbar/divider.png
new file mode 100644
index 0000000..77cd829
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/divider.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/fullscreenButton.png b/source/assets/jwplayer/glow/controlbar/fullscreenButton.png
new file mode 100644
index 0000000..e06aa50
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/fullscreenButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png b/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png
new file mode 100644
index 0000000..d2bc4fc
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/muteButton.png b/source/assets/jwplayer/glow/controlbar/muteButton.png
new file mode 100644
index 0000000..40c40ab
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/muteButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/muteButtonOver.png b/source/assets/jwplayer/glow/controlbar/muteButtonOver.png
new file mode 100644
index 0000000..96fe7bb
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/muteButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/normalscreenButton.png b/source/assets/jwplayer/glow/controlbar/normalscreenButton.png
new file mode 100644
index 0000000..2229507
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/normalscreenButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png b/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png
new file mode 100644
index 0000000..15db44d
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/pauseButton.png b/source/assets/jwplayer/glow/controlbar/pauseButton.png
new file mode 100644
index 0000000..e399bf3
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/pauseButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png b/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png
new file mode 100644
index 0000000..409d89d
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/playButton.png b/source/assets/jwplayer/glow/controlbar/playButton.png
new file mode 100644
index 0000000..f8d9a00
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/playButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/playButtonOver.png b/source/assets/jwplayer/glow/controlbar/playButtonOver.png
new file mode 100644
index 0000000..3fe2848
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/playButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png b/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png
new file mode 100644
index 0000000..73b371a
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png b/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png
new file mode 100644
index 0000000..7232217
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png b/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png
new file mode 100644
index 0000000..626444a
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png b/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png
new file mode 100644
index 0000000..132a8e7
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/timeSliderRail.png b/source/assets/jwplayer/glow/controlbar/timeSliderRail.png
new file mode 100644
index 0000000..27851df
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/timeSliderRail.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/unmuteButton.png b/source/assets/jwplayer/glow/controlbar/unmuteButton.png
new file mode 100644
index 0000000..3658453
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/unmuteButton.png differ
diff --git a/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png b/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png
new file mode 100644
index 0000000..138ebb3
Binary files /dev/null and b/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png differ
diff --git a/source/assets/jwplayer/glow/display/background.png b/source/assets/jwplayer/glow/display/background.png
new file mode 100644
index 0000000..391152f
Binary files /dev/null and b/source/assets/jwplayer/glow/display/background.png differ
diff --git a/source/assets/jwplayer/glow/display/bufferIcon.png b/source/assets/jwplayer/glow/display/bufferIcon.png
new file mode 100644
index 0000000..a3819c1
Binary files /dev/null and b/source/assets/jwplayer/glow/display/bufferIcon.png differ
diff --git a/source/assets/jwplayer/glow/display/muteIcon.png b/source/assets/jwplayer/glow/display/muteIcon.png
new file mode 100644
index 0000000..e0408bb
Binary files /dev/null and b/source/assets/jwplayer/glow/display/muteIcon.png differ
diff --git a/source/assets/jwplayer/glow/display/playIcon.png b/source/assets/jwplayer/glow/display/playIcon.png
new file mode 100644
index 0000000..cb38427
Binary files /dev/null and b/source/assets/jwplayer/glow/display/playIcon.png differ
diff --git a/source/assets/jwplayer/glow/dock/button.png b/source/assets/jwplayer/glow/dock/button.png
new file mode 100644
index 0000000..391152f
Binary files /dev/null and b/source/assets/jwplayer/glow/dock/button.png differ
diff --git a/source/assets/jwplayer/glow/glow.xml b/source/assets/jwplayer/glow/glow.xml
new file mode 100644
index 0000000..7d5ba03
--- /dev/null
+++ b/source/assets/jwplayer/glow/glow.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/assets/jwplayer/glow/playlist/item.png b/source/assets/jwplayer/glow/playlist/item.png
new file mode 100644
index 0000000..812592c
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/item.png differ
diff --git a/source/assets/jwplayer/glow/playlist/itemOver.png b/source/assets/jwplayer/glow/playlist/itemOver.png
new file mode 100644
index 0000000..549f372
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/itemOver.png differ
diff --git a/source/assets/jwplayer/glow/playlist/sliderCapBottom.png b/source/assets/jwplayer/glow/playlist/sliderCapBottom.png
new file mode 100644
index 0000000..048cc62
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/sliderCapBottom.png differ
diff --git a/source/assets/jwplayer/glow/playlist/sliderCapTop.png b/source/assets/jwplayer/glow/playlist/sliderCapTop.png
new file mode 100644
index 0000000..65c463a
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/sliderCapTop.png differ
diff --git a/source/assets/jwplayer/glow/playlist/sliderRail.png b/source/assets/jwplayer/glow/playlist/sliderRail.png
new file mode 100644
index 0000000..121778a
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/sliderRail.png differ
diff --git a/source/assets/jwplayer/glow/playlist/sliderThumb.png b/source/assets/jwplayer/glow/playlist/sliderThumb.png
new file mode 100644
index 0000000..118c3e0
Binary files /dev/null and b/source/assets/jwplayer/glow/playlist/sliderThumb.png differ
diff --git a/source/assets/jwplayer/glow/sharing/embedIcon.png b/source/assets/jwplayer/glow/sharing/embedIcon.png
new file mode 100644
index 0000000..3394ac9
Binary files /dev/null and b/source/assets/jwplayer/glow/sharing/embedIcon.png differ
diff --git a/source/assets/jwplayer/glow/sharing/embedScreen.png b/source/assets/jwplayer/glow/sharing/embedScreen.png
new file mode 100644
index 0000000..b405975
Binary files /dev/null and b/source/assets/jwplayer/glow/sharing/embedScreen.png differ
diff --git a/source/assets/jwplayer/glow/sharing/shareIcon.png b/source/assets/jwplayer/glow/sharing/shareIcon.png
new file mode 100644
index 0000000..eae1d4e
Binary files /dev/null and b/source/assets/jwplayer/glow/sharing/shareIcon.png differ
diff --git a/source/assets/jwplayer/glow/sharing/shareScreen.png b/source/assets/jwplayer/glow/sharing/shareScreen.png
new file mode 100644
index 0000000..695ec94
Binary files /dev/null and b/source/assets/jwplayer/glow/sharing/shareScreen.png differ
diff --git a/source/assets/jwplayer/player.swf b/source/assets/jwplayer/player.swf
new file mode 100644
index 0000000..0eee379
Binary files /dev/null and b/source/assets/jwplayer/player.swf differ
diff --git a/source/atom.xml b/source/atom.xml
new file mode 100644
index 0000000..3b4e661
--- /dev/null
+++ b/source/atom.xml
@@ -0,0 +1,28 @@
+---
+layout: nil
+---
+
+
+
+ {{ site.blog_title }}
+
+
+ {{ site.time | date_to_xmlschema }}
+ {{ site.url }}/
+
+ {{ site.author }}
+ {% if site.email %}
+ {{ site.email }}
+ {% endif %}
+
+
+ {% for post in site.posts %}
+
+ {{ post.title }}
+
+ {{ post.date | date_to_xmlschema }}
+ {{ site.url }}{{ post.id }}
+ {{ post.content | full_urls: site.url | xml_escape }}
+
+ {% endfor %}
+
diff --git a/source/blog/archives/index.html b/source/blog/archives/index.html
new file mode 100644
index 0000000..f1d9cee
--- /dev/null
+++ b/source/blog/archives/index.html
@@ -0,0 +1,18 @@
+---
+layout: page
+title: Blog Archive
+footer: false
+---
+
+
+{% for post in site.posts reverse %}
+{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
+{% unless year == this_year %}
+ {% assign year = this_year %}
+
{{ year }}
+{% endunless %}
+
+ {% include archive_post.html %}
+
+{% endfor %}
+
diff --git a/source/docs/blogging/code/index.markdown b/source/docs/blogging/code/index.markdown
new file mode 100644
index 0000000..2a405ee
--- /dev/null
+++ b/source/docs/blogging/code/index.markdown
@@ -0,0 +1,9 @@
+---
+layout: page
+title: "Sharing Code Snippets"
+date: 2011-07-19 18:10
+sidebar: false
+footer: false
+---
+
+Awesomeness!
diff --git a/source/docs/blogging/code/test/index.markdown b/source/docs/blogging/code/test/index.markdown
new file mode 100644
index 0000000..8e46796
--- /dev/null
+++ b/source/docs/blogging/code/test/index.markdown
@@ -0,0 +1,303 @@
+---
+layout: page
+title: Syntax Highlighting Test
+footer: false
+---
+
+{% include_code javascripts/test.js %}
+
+{% codeblock Testing html files (test.html) %}
+
+
+A Tiny Page
+
+
+
+abc
+def
+Testing page
+
+{% endcodeblock %}
+
+{% gist 996818 %}
+
+syntax_test.php
+{% highlight php %}
+
+
+hasPermission("ManageCountries")) { ?>
+
+{% endhighlight %}
+
+
+syntax_test.hs
+{% highlight hs %}
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+--import Prelude hiding (id)
+--import Control.Category (id)
+import Control.Arrow ((>>>), (***), arr)
+import Control.Monad (forM_)
+-- import Data.Monoid (mempty, mconcat)
+
+-- import System.FilePath
+
+import Hakyll
+
+
+main :: IO ()
+main = hakyll $ do
+
+ route "css/*" $ setExtension "css"
+ compile "css/*" $ byExtension (error "Not a (S)CSS file")
+ [ (".css", compressCssCompiler)
+ , (".scss", sass)
+ ]
+
+ route "js/**" idRoute
+ compile "js/**" copyFileCompiler
+
+ route "img/*" idRoute
+ compile "img/*" copyFileCompiler
+
+ compile "templates/*" templateCompiler
+
+ forM_ ["test.md", "index.md"] $ \page -> do
+ route page $ setExtension "html"
+ compile page $ pageCompiler
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+sass :: Compiler Resource String
+sass = getResourceString >>> unixFilter "sass" ["-s", "--scss"]
+ >>> arr compressCss
+
+{% endhighlight %}
+
+syntax_test.sh
+{% highlight sh %}
+#!/bin/bash
+
+cd $ROOT_DIR
+DOT_FILES="lastpass weechat ssh Xauthority"
+for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done
+
+# TODO: refactor with suffix variables (or common cron values)
+
+case "$PLATFORM" in
+ linux)
+ #conform_link "$CONF_DIR/shell/zshenv" ".zshenv"
+ crontab -l > $ROOT_DIR/tmp/crontab-conflict-arch
+ cd $ROOT_DIR/$CONF_DIR/cron
+ if [[ "$(diff ~/tmp/crontab-conflict-arch crontab-current-arch)" == ""
+ ]];
+ then # no difference with current backup
+ logger "$LOG_PREFIX: crontab live settings match stored "\
+ "settings; no restore required"
+ rm ~/tmp/crontab-conflict-arch
+ else # current crontab settings in file do not match live settings
+ crontab $ROOT_DIR/$CONF_DIR/cron/crontab-current-arch
+ logger "$LOG_PREFIX: crontab stored settings conflict with "\
+ "live settings; stored settings restored. "\
+ "Previous settings recorded in ~/tmp/crontab-conflict-arch."
+ fi
+ ;;
+
+{% endhighlight %}
+
+syntax_test.py
+{% highlight py %}
+# test python (sample from offlineimap)
+
+class ExitNotifyThread(Thread):
+ """This class is designed to alert a "monitor" to the fact that a thread has
+ exited and to provide for the ability for it to find out why."""
+ def run(self):
+ global exitthreads, profiledir
+ self.threadid = thread.get_ident()
+ try:
+ if not profiledir: # normal case
+ Thread.run(self)
+ else:
+ try:
+ import cProfile as profile
+ except ImportError:
+ import profile
+ prof = profile.Profile()
+ try:
+ prof = prof.runctx("Thread.run(self)", globals(), locals())
+ except SystemExit:
+ pass
+ prof.dump_stats( \
+ profiledir + "/" + str(self.threadid) + "_" + \
+ self.getName() + ".prof")
+ except:
+ self.setExitCause('EXCEPTION')
+ if sys:
+ self.setExitException(sys.exc_info()[1])
+ tb = traceback.format_exc()
+ self.setExitStackTrace(tb)
+ else:
+ self.setExitCause('NORMAL')
+ if not hasattr(self, 'exitmessage'):
+ self.setExitMessage(None)
+
+ if exitthreads:
+ exitthreads.put(self, True)
+
+ def setExitCause(self, cause):
+ self.exitcause = cause
+ def getExitCause(self):
+ """Returns the cause of the exit, one of:
+ 'EXCEPTION' -- the thread aborted because of an exception
+ 'NORMAL' -- normal termination."""
+ return self.exitcause
+ def setExitException(self, exc):
+ self.exitexception = exc
+ def getExitException(self):
+ """If getExitCause() is 'EXCEPTION', holds the value from
+ sys.exc_info()[1] for this exception."""
+ return self.exitexception
+ def setExitStackTrace(self, st):
+ self.exitstacktrace = st
+ def getExitStackTrace(self):
+ """If getExitCause() is 'EXCEPTION', returns a string representing
+ the stack trace for this exception."""
+ return self.exitstacktrace
+ def setExitMessage(self, msg):
+ """Sets the exit message to be fetched by a subsequent call to
+ getExitMessage. This message may be any object or type except
+ None."""
+ self.exitmessage = msg
+ def getExitMessage(self):
+ """For any exit cause, returns the message previously set by
+ a call to setExitMessage(), or None if there was no such message
+ set."""
+ return self.exitmessage
+
+{% endhighlight %}
+
+syntax_test.pl
+{% highlight perl %}
+#!perl -w
+
+# Time-stamp: <2002/04/06, 13:12:13 (EST), maverick, csvformat.pl>
+# Two pass CSV file to table formatter
+
+$delim = $#ARGV >= 1 ? $ARGV[1] : ',';
+print STDERR "Split pattern: $delim\n";
+
+# first pass
+open F, "<$ARGV[0]" or die;
+while()
+{
+ chomp;
+ $i = 0;
+ map { $max[$_->[1]] = $_->[0] if $_->[0] > ($max[$_->[1]] || 0) }
+ (map {[length $_, $i++]} split($delim));
+}
+close F;
+
+print STDERR 'Field width: ', join(', ', @max), "\n";
+print STDERR join(' ', map {'-' x $_} @max);
+
+# second pass
+open F, "<$ARGV[0]" or die;
+while()
+ {
+ chomp;
+ $i = 0;
+ map { printf("%-$max[$_->[1]]s ", $_->[0]) }
+ (map {[$_, $i++]} split($delim));
+ print "\n";
+}
+close F;
+
+{% endhighlight %}
+
+syntax_test.java
+{% highlight java %}
+import java.util.Map;
+import java.util.TreeSet;
+
+public class GetEnv {
+ /**
+ * let's test generics
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ // get a map of environment variables
+ Map env = System.getenv();
+ // build a sorted set out of the keys and iterate
+ for(String k: new TreeSet(env.keySet())) {
+ System.out.printf("%s = %s\n", k, env.get(k));
+ }
+ } }
+{% endhighlight %}
+
+syntax_test.c
+{% highlight c %}
+#define UNICODE
+#include
+
+int main(int argc, char **argv) {
+ int speed = 0, speed1 = 0, speed2 = 0; // 1-20
+ printf("Set Mouse Speed by Maverick\n");
+
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("Current speed: %2d\n", speed);
+
+ if (argc == 1) return 0;
+ if (argc >= 2) sscanf(argv[1], "%d", &speed1);
+ if (argc >= 3) sscanf(argv[2], "%d", &speed2);
+
+ if (argc == 2) // set speed to first value
+ speed = speed1;
+ else if (speed == speed1 || speed == speed2) // alternate
+ speed = speed1 + speed2 - speed;
+ else
+ speed = speed1; // start with first value
+
+ SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0);
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("New speed: %2d\n", speed);
+ return 0;
+}
+
+{% endhighlight %}
diff --git a/source/docs/blogging/index.markdown b/source/docs/blogging/index.markdown
new file mode 100644
index 0000000..e6fa44e
--- /dev/null
+++ b/source/docs/blogging/index.markdown
@@ -0,0 +1,77 @@
+---
+layout: page
+title: Blogging Basics
+date: July 19 2011
+sidebar: false
+comments: false
+footer: false
+---
+
+Create your first post.
+
+ rake new_post["hello world"]
+
+This will put a new post with a name like like `2011-07-3-hello-world.markdown` in the `source/_posts` directory.
+The filename will determine your url, and depending on your [permalink settings](https://github.com/mojombo/jekyll/wiki/Permalinks) your url may end up looking like this
+`site.com/blog/20011/07/03/hello-world/index.html`.
+
+New post expects a title and attempts to strip out undesirable url characters when creating the filename.
+
+ rake new_post["Zombie Ninjas Attack: A survivor's retrospective"]
+ # Creates the file
+ source/_posts/2011-07-03-zombie-ninjas-attack-a-survivors-retrospective.markdown
+
+The default file extension for new posts is `markdown` but you can configure that in the `Rakefile`.
+Open up your post in a text editor and you'll see a block of [yaml front matter](https://github.com/mojombo/jekyll/wiki/yaml-front-matter)
+which tells Jekyll how to processes posts and pages.
+
+ ---
+ layout: post
+ title: "Hello World"
+ date: 2011-07-03 5:59
+ comments: true
+ categories:
+ ---
+
+If you like, you can turn comments off, add categories for your post. Beneath the yaml block, go ahead and type up a sample post, or use some [inspired filler](http://baconipsum.com/).
+After you've saved that post you'll want to generate your blog.
+
+### Generate & Preview
+
+ rake generate # Generates posts and pages into the public directory
+ rake watch # Watches source/ and sass/ for changes and regenerates
+ rake preview # Watches, and mounts a webserver at http://localhost:4000
+
+Jekyll's built in webbrick server is handy, but if you're a [POW](http://pow.cx) user, you can set it up to work with Octopress like this.
+
+ cd ~/.pow
+ ln -s /path/to/octopress
+ cd -
+
+Now that you're setup with POW, you'll just run `rake watch` and load up `http://octopress.dev` instead.
+
+### Pages
+
+You can add pages anywhere in your blog source directory and they'll be parsed by Jekyll. The URL will correspond directly to the filepath, so `about.markdown` will become `site.com/about.html`. If you prefer the URL `site.com/about/` you'll want to create the page as `about/index.markdown`.
+Octopress has a rake task for creating new pages easily.
+
+ rake new_page[awesome]
+ # creates
+ /source/awesome/index.markdown
+
+ rake new_page[awesome/page.html]
+ # creates
+ /source/awesome/page.html
+
+Like with the new post task, the default file extension is `markdown` but you can configure that in the `Rakefile`. A freshly generated page might look like this:
+
+ ---
+ layout: page
+ title: "Awesome"
+ date: 2011-07-03 5:59
+ comments: true
+ sharing: true
+ footer: true
+ ---
+
+The title is derived from the filename so you'll likely want to change that. This is very similar to the post yaml except it doesn't include categories, and you can toggle sharing and comments or remove the footer altogehter. If you don't want to show a date on your page, just remove it from the yaml.
diff --git a/source/docs/configuring/index.markdown b/source/docs/configuring/index.markdown
new file mode 100644
index 0000000..9713031
--- /dev/null
+++ b/source/docs/configuring/index.markdown
@@ -0,0 +1,61 @@
+---
+layout: page
+title: Configuring Octopress
+date: July 19 2011
+sidebar: false
+comments: false
+footer: false
+---
+
+[« Previous, Deploying Octopress](/docs/deploy)
+
+I've tried to keep configuring Octopress fairly simple and Octopress keeps most configurations in two places, the `Rakefile` and the `_config.yml`.
+Here's a list of files for configuring Octopress.
+
+ _config.yml # Main config (Jekyll's settings)
+ Rakefile # Configs for deployment
+ config.rb # Compass config
+ config.ru # Rack config
+
+Configurations in the `Rakefile` are mostly related to deployment and you probably won't have to touch them unless you're using rsync.
+
+## Blog Configuration
+
+In the `_config.yml` there are three sections for configuring your Octopress Blog.
+
+### Main Configs
+
+- **url** - Your blog's full published url. This lets Octopress automatically rewrite relative urls to absolute urls for the RSS feed.
+- **title** - Your blog's title is used in the header and title tag for your pages.
+- **subtitle** - A further description for your blog. This appears beneath the Main header.
+- **author** - Your name (for RSS, Copyright, and metadata) If this is a multi-author blog, you can set author in the yaml front matter of each blog post instead.
+- **simple_search** - Queries entered in the search form, are constructed as a site search query eg. `search phrase site:yoursite.com`. Here you can set the search engine it uses (defaults to Google).
+- **subscribe_rss** - Enter a url for your blog's RSS feed Defaults to `/atom.xml` an ATOM feed generated by Octopress
+- **subscribe_email** - Enter a url for your blog's email subscription link (if you have one). Octopress does not provide this.
+- **email** - (Optional) fills in the email property of the RSS feed.
+
+### Jekyll & Plugins
+If you're not familiar with Jekyll, you should probably have a look at the [configuration docs](https://github.com/mojombo/jekyll/wiki/Configuration)
+
+- **root** - Leave this blank unless you're deploying to a subdirectory. For more info see [Deploying Octopress](/setup/deploy/)
+- **port** - Specify a port for Jekyll's built in webbrick server.
+- **permalink** - See [Jekyll's permalink docs](https://github.com/mojombo/jekyll/wiki/Permalinks) if you want to change the way permalinks are written for your blog posts.
+- **source** - The source directory for your blog, no need to change this.
+- **destination** - The folder where the generated blog files will be written.
+- **plugins** - The plugins directory.
+- **markdown** - Choose your Markdown processor (rdiscount or kramdown).
+- **pygments** - Enable or disable pygments syntax highlighting.
+- **paginate** - Set the number of posts per page in your blog index.
+- **recent_posts** - Set the number of recent posts to appear in the sidebar section.
+
+### 3rd Party Settings
+These third party integrations are already set up for you. Simply fill in the configurations and they'll be added to your site.
+
+- **Twitter** - Setup a sidebar twitter feed, follow button, and tweet button (for sharing posts and pages).
+- **Google Plus One** - Setup sharing for posts and pages on Google's plus one network.
+- **Pinboard** - Share your recent Pinboard bookmarks in the sidebar.
+- **Delicious** - Share your recent Delicious bookmarks in the sidebar.
+- **Disqus Comments** - Add your disqus short name to enable disqus comments on your site.
+- **Google Analytics** - Add your tracking id to enable Google Analytics tracking for your site.
+
+[Next, Blogging With Octopress »](/docs/blogging)
diff --git a/source/docs/deploying/index.markdown b/source/docs/deploying/index.markdown
new file mode 100644
index 0000000..1147bfb
--- /dev/null
+++ b/source/docs/deploying/index.markdown
@@ -0,0 +1,84 @@
+---
+layout: page
+title: Deploying Octopress
+date: July 18 2011
+sidebar: false
+comments: false
+footer: false
+---
+
+[« Previous, Octopress Setup](/docs/setup)
+
+### Deploying with Rsync via SSH
+
+Add your server configurations to the `Rakefile` under Rsync deploy config. To deploy with Rsync, be sure your public key is listed in your server's `~/.ssh/authorized_keys` file.
+
+ ssh_user = "user@domain.com"
+ document_root = "~/website.com/"
+ deploy_default = "rsync"
+
+Now if you run `rake deploy` in your terminal, your `public` directory will be synced to your server's document root.
+
+### Deploying to Github Pages
+
+To setup deployment, you'll want to clone your target repository into the `_deploy` directory in your Octopress project.
+If you're using Github project pages, clone the repository for that project, eg `git@github.com:username/project.git`.
+If you're using Github user or organization pages, clone the repository `git@github.com:usernem/username.github.com.git`.
+
+ # For Github project pages:
+ git clone git@github.com:username/project.git _deploy
+ rake config_deploy[gh-pages]
+
+ # For Github user/organization pages:
+ git clone git@github.com:username/username.github.com _deploy
+ rake config_deploy[master]
+
+ # Now to deploy, you'll run
+ rake deploy
+
+The `config_deploy` rake task takes a branch name as an argument and creates a [new empty branch](http://book.git-scm.com/5_creating_new_empty_branches.html), and adds an initial commit.
+This also sets `deploy_default = "push"` in your `_config.yml` and prepares your branch for easy deployment. The `rake deploy` task copies the generated blog from the `public` directory to the `_deploy` directory, adds new files, removes old files, sets a commit message, and pushes to Github.
+Github will queue your site for publishing (which usually occurs instantly or within minutes if it's your first commit).
+
+
+### Deploying to a Subdirectory (Github Project Pages does this)
+
+If you're deploying to a subdirectory on your site, or if you're using Github's project pages, make sure you set up your urls correctly in your configs.
+You can do this *almost* automatically:
+
+ rake set_root_dir[your/path]
+
+ # To go back to publishing to the document root
+ rake set_root_dir[/]
+
+Then update your `_config.yml` and `Rakefile` as follows:
+
+ # _config.yml
+ url: http://yoursite.com/your/path
+
+ # Rakefile (if deploying with rsync)
+ document_root = "~/yoursite.com/your/path"
+
+To manually configure deployment to a subdirectory, you'll change `_config.yml`, `config.rb` and `Rakefile`.
+Here's an example for deploying the Octopress website to Github Project Pages:
+
+ # _config.yml
+ destination: public/octopress
+ url: http://imathis.github.com/octopress
+ subscribe_rss: /octopress/atom.xml
+ root: /octopress
+
+ # config.rb - for Compass & Sass
+ http_path = "/octopress"
+ http_images_path = "/octopress/images"
+ http_fonts_path = "/octopress/fonts"
+ css_dir = "public/octopress/stylesheets"
+
+ # Rakefile
+ public_dir = "public/octopress"
+ # If deploying with rsync, update your Rakefile path
+ document_root = "~/yoursite.com/your/path"
+
+For more info on deploying a Jekyll Blog, checkout [Jekyll's deployment wiki page](https://github.com/mojombo/jekyll/wiki/Deployment).
+
+[Next, Configuring Octopress »](/docs/configuring)
diff --git a/source/docs/index.markdown b/source/docs/index.markdown
new file mode 100644
index 0000000..4a84234
--- /dev/null
+++ b/source/docs/index.markdown
@@ -0,0 +1,43 @@
+---
+layout: page
+title: Octopress Documentation
+date: July 18 2011
+sidebar: false
+comments: false
+footer: false
+---
+
+Octopress is a framework designed for Jekyll, the static blogging engine powering Github Pages. So what is Jekyll?
+
+{% blockquote Jekyll Wiki https://github.com/mojombo/jekyll/wiki/Usage %}
+Jekyll at its core is a text transformation engine. The concept behind the system is this: you give it text written in your favorite markup language, be that Markdown, Textile, or just plain HTML, and it churns that through a layout or series of layout files. Throughout that process you can tweak how you want the site URLs to look, what data gets displayed on the layout and more.
+{% endblockquote %}
+
+## Getting Started
+- [Initial setup](/docs/setup)
+- [Deploying Octopress](/docs/deploying)
+- [Basic Configuration](/docs/configuring)
+- [Updating](/docs/updating)
+
+## Using Octopress
+- [Blogging Basics](/docs/blogging)
+- [Sharing Code Snippets](/docs/blogging/code)
+- [Syntax Highlighting Test](/docs/blogging/code/test)
+- [Blogging With Plugins](/docs/blogging/plugins)
+- [Theming & Customization](/docs/theming)
+
+## Octopress Plugins - Usage & Examples
+- Code Block
+- Include Code
+- Gist Tag
+- Include Partial
+- Figure Tag
+- Blockquote
+- Pullquote
+- Custom filters
+- Sitemap Generator
+- Category Generator
+- Compass Compiler
+- Haml Convertor
+- Pygments Cache
+- Titlecase
diff --git a/source/docs/setup/index.markdown b/source/docs/setup/index.markdown
new file mode 100644
index 0000000..3cd0195
--- /dev/null
+++ b/source/docs/setup/index.markdown
@@ -0,0 +1,44 @@
+---
+layout: page
+title: Octopress Setup
+date: July 18 2011
+sidebar: false
+comments: false
+footer: false
+---
+
+
+[Create a new repository](https://github.com/repositories/new) for your website then
+open up a terminal and follow along. If you plan to host your site on [Github Pages](http://pages.github.com) for a user or organization, make sure the
+repository is named `your_username.github.com` or `your_organization.github.com`.
+
+ mkdir my_octopress_site
+ cd my_octopress_site
+ git init
+ git remote add octopress git://github.com/imathis/octopress.git
+ git pull octopress master
+ git remote add origin (your repository url)
+ git push origin master
+
+ # Next, if you're using Github user or organization pages,
+ # Create a source branch and push to origin source.
+ git branch source
+ git push origin source
+
+
+Next, setup an [RVM](http://beginrescueend.com/) and install dependencies.
+
+ rvm rvmrc trust
+ bundle install
+
+ # Install pygments (for syntax highlighing)
+ sudo easy_install pip
+ sudo pip install pygments
+
+Install the default Octopress theme,
+
+ rake install
+
+and you should be all set up to begin blogging with Octopress.
+
+[Next, Deploying Octopress »](/docs/deploying)
diff --git a/source/docs/theming/index.markdown b/source/docs/theming/index.markdown
new file mode 100644
index 0000000..5f33c80
--- /dev/null
+++ b/source/docs/theming/index.markdown
@@ -0,0 +1,9 @@
+---
+layout: page
+title: "Theming & Customization"
+date: 2011-07-19 18:16
+sidebar: false
+footer: false
+---
+
+WooHoo!
diff --git a/source/downloads/code/javascripts/test.js b/source/downloads/code/javascripts/test.js
new file mode 100644
index 0000000..ce01bf7
--- /dev/null
+++ b/source/downloads/code/javascripts/test.js
@@ -0,0 +1,20 @@
+/**
+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);
+};
diff --git a/source/images/bird_32_gray.png b/source/images/bird_32_gray.png
new file mode 100644
index 0000000..574f210
Binary files /dev/null and b/source/images/bird_32_gray.png differ
diff --git a/source/images/bird_32_gray_fail.png b/source/images/bird_32_gray_fail.png
new file mode 100644
index 0000000..8337d10
Binary files /dev/null and b/source/images/bird_32_gray_fail.png differ
diff --git a/source/images/code_bg.png b/source/images/code_bg.png
new file mode 100644
index 0000000..a57bab5
Binary files /dev/null and b/source/images/code_bg.png differ
diff --git a/source/images/dotted-border.png b/source/images/dotted-border.png
new file mode 100644
index 0000000..57f9907
Binary files /dev/null and b/source/images/dotted-border.png differ
diff --git a/source/images/email.png b/source/images/email.png
new file mode 100644
index 0000000..e55473f
Binary files /dev/null and b/source/images/email.png differ
diff --git a/source/images/favicon.png b/source/images/favicon.png
new file mode 100644
index 0000000..0f25067
Binary files /dev/null and b/source/images/favicon.png differ
diff --git a/source/images/line-tile.png b/source/images/line-tile.png
new file mode 100644
index 0000000..f67ee19
Binary files /dev/null and b/source/images/line-tile.png differ
diff --git a/source/images/noise.png b/source/images/noise.png
new file mode 100644
index 0000000..432e05b
Binary files /dev/null and b/source/images/noise.png differ
diff --git a/source/images/rss.png b/source/images/rss.png
new file mode 100644
index 0000000..151ae71
Binary files /dev/null and b/source/images/rss.png differ
diff --git a/source/images/search.png b/source/images/search.png
new file mode 100644
index 0000000..1220ff4
Binary files /dev/null and b/source/images/search.png differ
diff --git a/source/index.html b/source/index.html
new file mode 100644
index 0000000..f1d97f9
--- /dev/null
+++ b/source/index.html
@@ -0,0 +1,38 @@
+---
+layout: default
+meta: false
+footer: false
+---
+
+{% assign index = true %}
+{% for post in paginator.posts %}
+{% assign content = post.content %}
+
+ {% include article.html %}
+
+{% endfor %}
+
+
+ {% if paginator.next_page %}
+
← Older
+ {% endif %}
+
Blog Archives
+ {% if paginator.previous_page and paginator.previous_page > 1 %}
+
Newer →
+ {% elsif paginator.previous_page %}
+
Newer →
+ {% endif %}
+
+
+{% if site.disqus_short_name %}
+
+{% endif %}
+
diff --git a/source/javascripts/ender.js b/source/javascripts/ender.js
new file mode 100644
index 0000000..9958885
--- /dev/null
+++ b/source/javascripts/ender.js
@@ -0,0 +1,2 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('!5(O){5 2j(o,42){F(u k Y 42){k!=\'28\'&&k!=\'4T\'&&(o[k]=42[k])}7 o}5 2P(s,r){u R;B(X.4E&&N s==\'1p\'||s.4R||s.E&&\'3g\'Y s||s==1O){R=X.4E(s,r);R.H=s}1h{R=5F(s.E)?s:[s]}7 2j(R,2P)}5 X(s,r){7 2P(s,r)}2j(X,{4T:\'0.2.0\',X:5(o,4Z){2j(4Z?2P:X,o)}});2j(2P,{6E:5(D,1Z){F(u i=0,l=8.E;i.+?<\\\\/"+t+">","g"));K(5Y,5(m){m=m.1g(/<(.+)>(.+?)<\\/\\1>/,\'$2\');u 4l=I.3e(t);4l.2m(I.7Y(m));6.2m(4l)})}1h{6.4j=G}u 4Q=6.4y;6=6.1C;R.13(6);1d(6=6.25){(6.1j==1)&&R.13(6)}7 R}():4k(G)?[G.66(19)]:[]};U.I=5(){u w=W.6s,h=W.6v,4s=8.63();7{1N:65.62(w,4s.1N),1I:65.62(h,4s.1I)}};U.1C=5(6){F(u c=6.4y,i=0,j=(c&&c.E)||0,e;i\\{\\}\\$\\*\\^\'"]*\\])/,5X=/([.*+?\\^=!:${}()|\\[\\]\\/\\\\])/g,4W=/^([a-6J-9]+)?(?:([\\.\\#]+[\\w\\-\\.#]+)?)/,3y=/\\[([\\w\\-]+)(?:([\\|\\^\\$\\*\\~]?\\=)[\'"]?([ \\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^]+)["\']?)?\\]/,6g=1a 1E(4W.6l+\'(\'+3y.6l+\')?\');5 1R(Q){r=[];F(i=0,3W=Q.E;i<3W;i++){r[i]=Q[i]}7 r}u 2o=5(){8.c={}};2o.2g={g:5(k){7 8.c[k]||1w},s:5(k,v){8.c[k]=v;7 v}};u 30=1a 2o(),4i=1a 2o(),1x=1a 2o(),3Q=1a 2o();5 q(2n){7 2n.1c(6g)}5 3H(6y,1n,2Z,4t,4n,60,1l){u m,c,k;B(1n&&8.3T.6f()!==1n){7 1i}B(2Z&&(m=2Z.1c(2i))&&m[1]!==8.2i){7 1i}B(2Z&&(3x=2Z.1c(6j))){F(i=3x.E;i--;){c=3x[i].3u(1);B(!(30.g(c)||30.s(c,1a 1E(\'(^|\\\\s+)\'+c+\'(\\\\s+|$)\'))).12(8.1q)){7 1i}}}B(4t&&!1l){o=8.6T;F(k Y o){B(6O.2g.1T.11(o,k)&&(o[k].73||k)==4n){7 8}}}B(4t&&!5W(60,8.1S(4n)||\'\',1l)){7 1i}7 8}5 64(1s){u r=[],4B=1s.81(),4G=q(4B),1n=4G[1]||\'*\',i,l,R,V=1s.E&&(m=1s[0].1c(4a))?I.47(m[1]):I;B(!V){7 r}R=V.3o(1n);F(i=0,l=R.E;i.+?<\\/" + 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*
+ is released under the MIT License
+*/
+
+var swfobject = function() {
+
+ var UNDEF = "undefined",
+ OBJECT = "object",
+ SHOCKWAVE_FLASH = "Shockwave Flash",
+ SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+ FLASH_MIME_TYPE = "application/x-shockwave-flash",
+ EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+
+ win = window,
+ doc = document,
+ nav = navigator,
+
+ plugin = false,
+ regObjArr = [],
+ objIdArr = [],
+ storedAltContent,
+ storedAltContentId,
+ storedCallbackFn,
+ storedCallbackObj,
+ autoHideShow = true,
+
+ /* Centralized function for browser feature detection
+ - User agent string detection is only used when no good alternative is possible
+ - Is executed directly for optimal performance
+ */
+ ua = function() {
+ var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
+ u = nav.userAgent.toLowerCase(),
+ p = nav.platform.toLowerCase(),
+ windows = p ? /win/.test(p) : /win/.test(u),
+ mac = p ? /mac/.test(p) : /mac/.test(u),
+ webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+ ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
+ playerVersion = [0,0,0],
+ d = null;
+ if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+ d = nav.plugins[SHOCKWAVE_FLASH].description;
+ if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
+ plugin = true;
+ ie = false; // cascaded feature detection for Internet Explorer
+ d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+ playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+ playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+ playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
+ }
+ }
+ else if (typeof win.ActiveXObject != UNDEF) {
+ try {
+ var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+ if (a) { // a will return null when ActiveX is disabled
+ d = a.GetVariable("$version");
+ if (d) {
+ ie = true; // cascaded feature detection for Internet Explorer
+ d = d.split(" ")[1].split(",");
+ playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+ }
+ }
+ }
+ catch(e) {}
+ }
+ return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
+ }()
+
+
+ /* Main function
+ - Will preferably execute onDomLoad, otherwise onload (as a fallback)
+ */
+ function main() {
+ if (plugin) { testPlayerVersion(); }
+ else { matchVersions(); }
+ }
+
+ /* Detect the Flash Player version for non-Internet Explorer browsers
+ - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
+ a. Both release and build numbers can be detected
+ b. Avoid wrong descriptions by corrupt installers provided by Adobe
+ c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
+ - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
+ */
+ function testPlayerVersion() {
+ var b = doc.getElementsByTagName("body")[0];
+ var o = createElement(OBJECT);
+ o.setAttribute("type", FLASH_MIME_TYPE);
+ var t = b.appendChild(o);
+ if (t) {
+ var counter = 0;
+ (function(){
+ if (typeof t.GetVariable != UNDEF) {
+ var d = t.GetVariable("$version");
+ if (d) {
+ d = d.split(" ")[1].split(",");
+ ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+ }
+ }
+ else if (counter < 10) {
+ counter++;
+ setTimeout(arguments.callee, 10);
+ return;
+ }
+ b.removeChild(o);
+ t = null;
+ matchVersions();
+ })();
+ }
+ else {
+ matchVersions();
+ }
+ }
+
+
+ /* Cross-browser dynamic SWF creation
+ */
+ function createSWF(attObj, parObj, id) {
+ var r, el = getElementById(id);
+ if (ua.wk && ua.wk < 312) { return r; }
+ if (el) {
+ if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+ attObj.id = id;
+ }
+ if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
+ var att = "";
+ for (var i in attObj) {
+ if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
+ if (i.toLowerCase() == "data") {
+ parObj.movie = attObj[i];
+ }
+ else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ att += ' class="' + attObj[i] + '"';
+ }
+ else if (i.toLowerCase() != "classid") {
+ att += ' ' + i + '="' + attObj[i] + '"';
+ }
+ }
+ }
+ var par = "";
+ for (var j in parObj) {
+ if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
+ par += ' ';
+ }
+ }
+ el.outerHTML = '' + par + ' ';
+ objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
+ r = getElementById(attObj.id);
+ }
+ else { // well-behaving browsers
+ var o = createElement(OBJECT);
+ o.setAttribute("type", FLASH_MIME_TYPE);
+ for (var m in attObj) {
+ if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
+ if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ o.setAttribute("class", attObj[m]);
+ }
+ else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
+ o.setAttribute(m, attObj[m]);
+ }
+ }
+ }
+ for (var n in parObj) {
+ if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
+ createObjParam(o, n, parObj[n]);
+ }
+ }
+ el.parentNode.replaceChild(o, el);
+ r = o;
+ }
+ }
+ return r;
+ }
+
+ function createObjParam(el, pName, pValue) {
+ var p = createElement("param");
+ p.setAttribute("name", pName);
+ p.setAttribute("value", pValue);
+ el.appendChild(p);
+ }
+
+ /* Cross-browser SWF removal
+ - Especially needed to safely and completely remove a SWF in Internet Explorer
+ */
+ /* Functions to optimize JavaScript compression
+ */
+ function getElementById(id) {
+ var el = null;
+ try {
+ el = doc.getElementById(id);
+ }
+ catch (e) {}
+ return el;
+ }
+
+ function createElement(el) {
+ return doc.createElement(el);
+ }
+
+ /* Flash Player and SWF content version matching
+ */
+ function hasPlayerVersion(rv) {
+ var pv = ua.pv, v = rv.split(".");
+ v[0] = parseInt(v[0], 10);
+ v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
+ v[2] = parseInt(v[2], 10) || 0;
+ return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
+ }
+
+
+ /* Filter to avoid XSS attacks
+ */
+ function urlEncodeIfNecessary(s) {
+ var regex = /[\\\"<>\.;]/;
+ var hasBadChars = regex.exec(s) != null;
+ return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
+ }
+
+ return {
+ /* Public API
+ - Reference: http://code.google.com/p/swfobject/wiki/documentation
+ */
+
+ embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, flashvarsObj, parObj, attObj, callbackFn) {
+ var callbackObj = {success:false, id:replaceElemIdStr};
+ if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
+ widthStr += ""; // auto-convert to string
+ heightStr += "";
+ var att = {};
+ if (attObj && typeof attObj === OBJECT) {
+ for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
+ att[i] = attObj[i];
+ }
+ }
+ att.data = swfUrlStr;
+ att.width = widthStr;
+ att.height = heightStr;
+ var par = {};
+ if (parObj && typeof parObj === OBJECT) {
+ for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
+ par[j] = parObj[j];
+ }
+ }
+ if (flashvarsObj && typeof flashvarsObj === OBJECT) {
+ for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
+ if (typeof par.flashvars != UNDEF) {
+ par.flashvars += "&" + k + "=" + flashvarsObj[k];
+ }
+ else {
+ par.flashvars = k + "=" + flashvarsObj[k];
+ }
+ }
+ }
+ if (hasPlayerVersion(swfVersionStr)) { // create SWF
+ var obj = createSWF(att, par, replaceElemIdStr);
+ callbackObj.success = true;
+ callbackObj.ref = obj;
+ }
+ if (callbackFn) { callbackFn(callbackObj); }
+ }
+ else if (callbackFn) { callbackFn(callbackObj); }
+ },
+
+ ua: ua,
+
+ getFlashPlayerVersion: function() {
+ return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
+ },
+
+ hasFlashPlayerVersion: hasPlayerVersion,
+
+ createSWF: function(attObj, parObj, replaceElemIdStr) {
+ if (ua.w3) {
+ return createSWF(attObj, parObj, replaceElemIdStr);
+ }
+ else {
+ return undefined;
+ }
+ },
+
+ getQueryParamValue: function(param) {
+ var q = doc.location.search || doc.location.hash;
+ if (q) {
+ if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
+ if (param == null) {
+ return urlEncodeIfNecessary(q);
+ }
+ var pairs = q.split("&");
+ for (var i = 0; i < pairs.length; i++) {
+ if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+ return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
+ }
+ }
+ }
+ return "";
+ }
+ };
+}();
diff --git a/source/javascripts/modernizr-2.0.js b/source/javascripts/modernizr-2.0.js
new file mode 100644
index 0000000..b9846c4
--- /dev/null
+++ b/source/javascripts/modernizr-2.0.js
@@ -0,0 +1,5 @@
+/* Modernizr 2.0.4 (Custom Build) | MIT & BSD
+ * Contains: video | iepp | respond | mq | cssclasses | teststyles | testprop | testallprops | prefixes | domprefixes | load
+ * Build URL: http://j.mp/m1H1Y1
+ */
+;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+o.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(n.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.4",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),o="Webkit Moz O ms Khtml".split(" "),p={},q={},r={},s=[],t=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["",""].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},u=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;t("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)},p.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c};for(var E in p)x(p,E)&&(v=E.toLowerCase(),e[v]=p[E](),s.push((e[v]?"":"no-")+v));y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML=" ";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css",!a.e&&(w||r)?function a(b){m(function(){if(!d)try{b.sheet.cssRules.length?(d=1,j()):a(b)}catch(c){c.code==1e3||c.message=="security"||c.message=="denied"?(d=1,m(function(){j()},0)):a(b)}},0)}(c):(c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload()),m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return typeof a=="object"},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h nav fieldset[role=site-search]').after(' ').next().append(' ');
+ mobileNav.children('select').append('Navigate… ');
+ $($('body > nav ul[role=main-nav] a')).each(function(link) {
+ mobileNav.children('select').append('• '+link.text+' ')
+ });
+ mobileNav.children('select').bind('change', function(event){
+ if (event.target.value) window.location.href = event.target.value;
+ });
+}
+function addSidebarToggler() {
+ $('#content').append('');
+ $('.toggle-sidebar').bind('click', function(e){
+ e.preventDefault();
+ if($('body').hasClass('collapse-sidebar')){
+ $('body').removeClass('collapse-sidebar');
+ } else {
+ $('body').addClass('collapse-sidebar');
+ }
+ });
+ sections = $('aside[role=sidebar] > section')
+ if(sections.length > 1){
+ sections.each(function(section, index){
+ if ((sections.length >= 3) && index % 3 == 0) {
+ $(section).addClass("first");
+ }
+ count = ((index +1) % 2) ? "odd" : "even";
+ $(section).addClass(count);
+ });
+ }
+ if(sections.length >= 3){ $('aside[role=sidebar]').addClass('thirds') }
+}
+function testFeatures() {
+ var features = ['maskImage'];
+ $(features).map(function(feature){
+ if (Modernizr.testAllProps(feature)) {
+ $('html').addClass(feature);
+ } else {
+ $('html').addClass('no-'+feature);
+ }
+ });
+ if ("placeholder" in document.createElement("input")) {
+ $('html').addClass('placeholder');
+ } else {
+ $('html').addClass('no-placeholder');
+ }
+}
+
+function addCodeLineNumbers(){
+ if (navigator.appName == 'Microsoft Internet Explorer') { return }
+ $('div.highlight pre code').each(function(el){ addDivLines(el); });
+ $('div.highlight, div.gist-highlight').each(function(code){
+ var tableStart = '';
+ var lineNumbers = '';
+ var tableMiddle = ' ';
+ var tableEnd = '
';
+ var count = $('div.line', code).length;
+ for (i=1;i<=count; i++){
+ lineNumbers += ''+i+' \n';
+ }
+ table = tableStart + lineNumbers + tableMiddle + ''+$('pre', code).html()+' ' + tableEnd;
+ $(code).html(table);
+ });
+}
+function addDivLines(el){
+ var content = $(el).html();
+ var lines = content.replace(/\s*$/g, '').split(/\n/);
+ var count = lines.length;
+ $(lines).each(function(line, index){
+ if(line == '') line = ' ';
+ lines[index] = '' + line + '
';
+ });
+ $(el).html(lines.join(''));
+}
+
+function flashVideoFallback(){
+ var flashplayerlocation = "/assets/jwplayer/player.swf",
+ flashplayerskin = "/assets/jwplayer/glow/glow.xml";
+ $('video').each(function(video){
+ video = $(video);
+ if(!Modernizr.video.h264 && swfobject.getFlashPlayerVersion() || window.location.hash.indexOf("flash-test") != -1){
+ video.children('source[src$=mp4]').first().map(function(source){;
+ var src = $(source).attr('src'),
+ id = 'video_'+Math.round(1 + Math.random()*(100000)),
+ width = video.attr('width'),
+ height = parseInt(video.attr('height')) + 30;
+ video.after('');
+ swfobject.embedSWF(flashplayerlocation, id, width, height + 30, "9.0.0",
+ { file : src, image : video.attr('poster'), skin : flashplayerskin } ,
+ { movie : src, wmode : "opaque", allowfullscreen : "true" });
+ });
+ video.remove();
+ }
+ });
+}
+
+function wrapFlashVideos(){
+ $('object').each(function(object){
+ object = $(object);
+ if(object.children('param[name=movie]')){
+ var wrapper = object.before('
').previous();
+ $(wrapper).children().append(object);
+ }
+ });
+ $('iframe[src*=vimeo],iframe[src*=youtube]').each(function(iframe){
+ iframe = $(iframe);
+ var wrapper = iframe.before('
').previous();
+ $(wrapper).children().append(iframe);
+ });
+}
+
+$.domReady(function(){
+ testFeatures();
+ wrapFlashVideos();
+ flashVideoFallback();
+ addCodeLineNumbers();
+ 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));
+
+/*! SWFObject v2.2 modified by Brandon Mathis to contain only what is necessary to dynamically embed flash objects
+ * Uncompressed source in javascripts/libs/swfobject-dynamic.js
+ *
+ released under the MIT License
+*/
+var swfobject=function(){function s(a,b,d){var q,k=n(d);if(g.wk&&g.wk<312)return q;if(k){if(typeof a.id==l)a.id=d;if(g.ie&&g.win){var e="",c;for(c in a)if(a[c]!=Object.prototype[c])c.toLowerCase()=="data"?b.movie=a[c]:c.toLowerCase()=="styleclass"?e+=' class="'+a[c]+'"':c.toLowerCase()!="classid"&&(e+=" "+c+'="'+a[c]+'"');c="";for(var f in b)b[f]!=Object.prototype[f]&&(c+=' ');k.outerHTML='"+c+
+" ";q=n(a.id)}else{f=i.createElement(o);f.setAttribute("type",m);for(var h in a)a[h]!=Object.prototype[h]&&(h.toLowerCase()=="styleclass"?f.setAttribute("class",a[h]):h.toLowerCase()!="classid"&&f.setAttribute(h,a[h]));for(e in b)b[e]!=Object.prototype[e]&&e.toLowerCase()!="movie"&&(a=f,c=e,h=b[e],d=i.createElement("param"),d.setAttribute("name",c),d.setAttribute("value",h),a.appendChild(d));k.parentNode.replaceChild(f,k);q=f}}return q}function n(a){var b=null;try{b=i.getElementById(a)}catch(d){}return b}
+function t(a){var b=g.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function u(a){return/[\\\"<>\.;]/.exec(a)!=null&&typeof encodeURIComponent!=l?encodeURIComponent(a):a}var l="undefined",o="object",m="application/x-shockwave-flash",v=window,i=document,j=navigator,g=function(){var a=typeof i.getElementById!=l&&typeof i.getElementsByTagName!=l&&typeof i.createElement!=l,
+b=j.userAgent.toLowerCase(),d=j.platform.toLowerCase(),g=d?/win/.test(d):/win/.test(b),d=d?/mac/.test(d):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,k=!+"\u000b1",e=[0,0,0],c=null;if(typeof j.plugins!=l&&typeof j.plugins["Shockwave Flash"]==o){if((c=j.plugins["Shockwave Flash"].description)&&!(typeof j.mimeTypes!=l&&j.mimeTypes[m]&&!j.mimeTypes[m].enabledPlugin))k=!1,c=c.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(c.replace(/^(.*)\..*$/,"$1"),
+10),e[1]=parseInt(c.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(c)?parseInt(c.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof v.ActiveXObject!=l)try{var f=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(f&&(c=f.GetVariable("$version")))k=!0,c=c.split(" ")[1].split(","),e=[parseInt(c[0],10),parseInt(c[1],10),parseInt(c[2],10)]}catch(h){}return{w3:a,pv:e,wk:b,ie:k,win:g,mac:d}}();return{embedSWF:function(a,b,d,i,k,e,c,f,h){var j={success:!1,id:b};if(g.w3&&!(g.wk&&g.wk<312)&&
+a&&b&&d&&i&&k){d+="";i+="";var p={};if(f&&typeof f===o)for(var m in f)p[m]=f[m];p.data=a;p.width=d;p.height=i;a={};if(c&&typeof c===o)for(var n in c)a[n]=c[n];if(e&&typeof e===o)for(var r in e)typeof a.flashvars!=l?a.flashvars+="&"+r+"="+e[r]:a.flashvars=r+"="+e[r];if(t(k))b=s(p,a,b),j.success=!0,j.ref=b}h&&h(j)},ua:g,getFlashPlayerVersion:function(){return{major:g.pv[0],minor:g.pv[1],release:g.pv[2]}},hasFlashPlayerVersion:t,createSWF:function(a,b,d){if(g.w3)return s(a,b,d)},getQueryParamValue:function(a){var b=
+i.location.search||i.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(a==null)return u(b);for(var b=b.split("&"),d=0;d');
+ (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('<', '<').replace('>', '>>');
+ }
+
+ this.format_item = function(it) {
+ var str = "";
+ if (!it.d) { return; }
+ str += "" + this.cook(it.d) + " ";
+ if (it.n) {
+ str += "" + this.cook(it.n) + " \n";
+ }
+ if (it.t.length > 0) {
+ for (var i = 0; i < it.t.length; i++) {
+ var tag = it.t[i];
+ str += " " + this.cook(tag).replace(/^\s+|\s+$/g, '') + " ";
+ }
+ }
+ str += "
\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/source/javascripts/twitter.js b/source/javascripts/twitter.js
new file mode 100644
index 0000000..676619e
--- /dev/null
+++ b/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+=''+''+''+prettyDate(tweets[t].created_at)+' '+linkifyTweet(tweets[t].text.replace(/\n/g, ' '))+'
'+' ';
+ }
+}
+function linkifyTweet(text){
+ return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '$2 ')
+ .replace(/(^|\W)@(\w+)/g, '$1@$2 ')
+ .replace(/(^|\W)#(\w+)/g, '$1#$2 ');
+}
+
+
+
+// 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 "∞ "; // 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/source/test/plugins.html b/source/test/plugins.html
new file mode 100644
index 0000000..73a453e
--- /dev/null
+++ b/source/test/plugins.html
@@ -0,0 +1,9 @@
+---
+layout: page
+title: Plugins Test
+date: July 18 2011
+footer: false
+sidebar: false
+---
+
+{% figure small bird /images/bird_32_gray_fail.png Twitter Couldn't connect %}
diff --git a/source/test/syntax.html b/source/test/syntax.html
new file mode 100644
index 0000000..d65d6d8
--- /dev/null
+++ b/source/test/syntax.html
@@ -0,0 +1,304 @@
+---
+layout: page
+title: Syntax Highlighting Test
+footer: false
+---
+
+{% include_code javascripts/test.js %}
+
+{% codeblock Testing html files (test.html) %}
+
+
+A Tiny Page
+
+
+
+abc
+def
+Testing page
+
+{% endcodeblock %}
+
+{% gist 996818 %}
+
+syntax_test.php
+{% highlight php %}
+
+
+hasPermission("ManageCountries")) { ?>
+
+{% endhighlight %}
+
+
+syntax_test.hs
+{% highlight hs %}
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+--import Prelude hiding (id)
+--import Control.Category (id)
+import Control.Arrow ((>>>), (***), arr)
+import Control.Monad (forM_)
+-- import Data.Monoid (mempty, mconcat)
+
+-- import System.FilePath
+
+import Hakyll
+
+
+main :: IO ()
+main = hakyll $ do
+
+ route "css/*" $ setExtension "css"
+ compile "css/*" $ byExtension (error "Not a (S)CSS file")
+ [ (".css", compressCssCompiler)
+ , (".scss", sass)
+ ]
+
+ route "js/**" idRoute
+ compile "js/**" copyFileCompiler
+
+ route "img/*" idRoute
+ compile "img/*" copyFileCompiler
+
+ compile "templates/*" templateCompiler
+
+ forM_ ["test.md", "index.md"] $ \page -> do
+ route page $ setExtension "html"
+ compile page $ pageCompiler
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+sass :: Compiler Resource String
+sass = getResourceString >>> unixFilter "sass" ["-s", "--scss"]
+ >>> arr compressCss
+
+{% endhighlight %}
+
+syntax_test.sh
+{% highlight sh %}
+#!/bin/bash
+
+cd $ROOT_DIR
+DOT_FILES="lastpass weechat ssh Xauthority"
+for dotfile in $DOT_FILES; do conform_link "$DATA_DIR/$dotfile" ".$dotfile"; done
+
+# TODO: refactor with suffix variables (or common cron values)
+
+case "$PLATFORM" in
+ linux)
+ #conform_link "$CONF_DIR/shell/zshenv" ".zshenv"
+ crontab -l > $ROOT_DIR/tmp/crontab-conflict-arch
+ cd $ROOT_DIR/$CONF_DIR/cron
+ if [[ "$(diff ~/tmp/crontab-conflict-arch crontab-current-arch)" == ""
+ ]];
+ then # no difference with current backup
+ logger "$LOG_PREFIX: crontab live settings match stored "\
+ "settings; no restore required"
+ rm ~/tmp/crontab-conflict-arch
+ else # current crontab settings in file do not match live settings
+ crontab $ROOT_DIR/$CONF_DIR/cron/crontab-current-arch
+ logger "$LOG_PREFIX: crontab stored settings conflict with "\
+ "live settings; stored settings restored. "\
+ "Previous settings recorded in ~/tmp/crontab-conflict-arch."
+ fi
+ ;;
+
+{% endhighlight %}
+
+syntax_test.py
+{% highlight py %}
+# test python (sample from offlineimap)
+
+class ExitNotifyThread(Thread):
+ """This class is designed to alert a "monitor" to the fact that a thread has
+ exited and to provide for the ability for it to find out why."""
+ def run(self):
+ global exitthreads, profiledir
+ self.threadid = thread.get_ident()
+ try:
+ if not profiledir: # normal case
+ Thread.run(self)
+ else:
+ try:
+ import cProfile as profile
+ except ImportError:
+ import profile
+ prof = profile.Profile()
+ try:
+ prof = prof.runctx("Thread.run(self)", globals(), locals())
+ except SystemExit:
+ pass
+ prof.dump_stats( \
+ profiledir + "/" + str(self.threadid) + "_" + \
+ self.getName() + ".prof")
+ except:
+ self.setExitCause('EXCEPTION')
+ if sys:
+ self.setExitException(sys.exc_info()[1])
+ tb = traceback.format_exc()
+ self.setExitStackTrace(tb)
+ else:
+ self.setExitCause('NORMAL')
+ if not hasattr(self, 'exitmessage'):
+ self.setExitMessage(None)
+
+ if exitthreads:
+ exitthreads.put(self, True)
+
+ def setExitCause(self, cause):
+ self.exitcause = cause
+ def getExitCause(self):
+ """Returns the cause of the exit, one of:
+ 'EXCEPTION' -- the thread aborted because of an exception
+ 'NORMAL' -- normal termination."""
+ return self.exitcause
+ def setExitException(self, exc):
+ self.exitexception = exc
+ def getExitException(self):
+ """If getExitCause() is 'EXCEPTION', holds the value from
+ sys.exc_info()[1] for this exception."""
+ return self.exitexception
+ def setExitStackTrace(self, st):
+ self.exitstacktrace = st
+ def getExitStackTrace(self):
+ """If getExitCause() is 'EXCEPTION', returns a string representing
+ the stack trace for this exception."""
+ return self.exitstacktrace
+ def setExitMessage(self, msg):
+ """Sets the exit message to be fetched by a subsequent call to
+ getExitMessage. This message may be any object or type except
+ None."""
+ self.exitmessage = msg
+ def getExitMessage(self):
+ """For any exit cause, returns the message previously set by
+ a call to setExitMessage(), or None if there was no such message
+ set."""
+ return self.exitmessage
+
+{% endhighlight %}
+
+syntax_test.pl
+{% highlight perl %}
+#!perl -w
+
+# Time-stamp: <2002/04/06, 13:12:13 (EST), maverick, csvformat.pl>
+# Two pass CSV file to table formatter
+
+$delim = $#ARGV >= 1 ? $ARGV[1] : ',';
+print STDERR "Split pattern: $delim\n";
+
+# first pass
+open F, "<$ARGV[0]" or die;
+while()
+{
+ chomp;
+ $i = 0;
+ map { $max[$_->[1]] = $_->[0] if $_->[0] > ($max[$_->[1]] || 0) }
+ (map {[length $_, $i++]} split($delim));
+}
+close F;
+
+print STDERR 'Field width: ', join(', ', @max), "\n";
+print STDERR join(' ', map {'-' x $_} @max);
+
+# second pass
+open F, "<$ARGV[0]" or die;
+while()
+ {
+ chomp;
+ $i = 0;
+ map { printf("%-$max[$_->[1]]s ", $_->[0]) }
+ (map {[$_, $i++]} split($delim));
+ print "\n";
+}
+close F;
+
+{% endhighlight %}
+
+syntax_test.java
+{% highlight java %}
+import java.util.Map;
+import java.util.TreeSet;
+
+public class GetEnv {
+ /**
+ * let's test generics
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ // get a map of environment variables
+ Map env = System.getenv();
+ // build a sorted set out of the keys and iterate
+ for(String k: new TreeSet(env.keySet())) {
+ System.out.printf("%s = %s\n", k, env.get(k));
+ }
+ } }
+{% endhighlight %}
+
+syntax_test.c
+{% highlight c %}
+#define UNICODE
+#include
+
+int main(int argc, char **argv) {
+ int speed = 0, speed1 = 0, speed2 = 0; // 1-20
+ printf("Set Mouse Speed by Maverick\n");
+
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("Current speed: %2d\n", speed);
+
+ if (argc == 1) return 0;
+ if (argc >= 2) sscanf(argv[1], "%d", &speed1);
+ if (argc >= 3) sscanf(argv[2], "%d", &speed2);
+
+ if (argc == 2) // set speed to first value
+ speed = speed1;
+ else if (speed == speed1 || speed == speed2) // alternate
+ speed = speed1 + speed2 - speed;
+ else
+ speed = speed1; // start with first value
+
+ SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0);
+ SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
+ printf("New speed: %2d\n", speed);
+ return 0;
+}
+
+{% endhighlight %}
+
diff --git a/source/test/video.html b/source/test/video.html
new file mode 100644
index 0000000..5326b1d
--- /dev/null
+++ b/source/test/video.html
@@ -0,0 +1,21 @@
+---
+layout: page
+footer: false
+title: HTML5 Video + Flash Replcement test
+---
+
+
+
+
+
+You're probably using a browser which supports HTML5 video and you're looking at this page wondering if it really works.
+Reloading the page with the url hash #flash-test and you'll get to see the flash player fallback.
+
+Here's a flash video embed
+Freelance Whales - Enzymes from NEUE on Vimeo .
+
+A Vimeo embed
+Freelance Whales - Enzymes from NEUE on Vimeo .
+
+A YouTube embed
+VIDEO