diff --git a/_config.yml b/_config.yml index 51cdc56..ff0bfdb 100644 --- a/_config.yml +++ b/_config.yml @@ -19,7 +19,7 @@ simple_search: http://google.com/search email: # Twitter -#twitter_user: imathis +twitter_user: imathis twitter_tweet_count: 4 twitter_show_replies: false twitter_follow_button: true diff --git a/themes/classic/sass/default/_partials.scss b/themes/classic/sass/default/_partials.scss new file mode 100644 index 0000000..4ca98c0 --- /dev/null +++ b/themes/classic/sass/default/_partials.scss @@ -0,0 +1,12 @@ +//@import "partials/shared"; +//@import "partials/search"; + +/* layout partials */ +@import "partials/header"; +@import "partials/navigation"; +@import "partials/page"; +@import "partials/sidebar"; +@import "partials/blog"; +@import "partials/footer"; + +@import "partials/syntax"; diff --git a/themes/classic/sass/default/_style.scss b/themes/classic/sass/default/_style.scss new file mode 100644 index 0000000..051e003 --- /dev/null +++ b/themes/classic/sass/default/_style.scss @@ -0,0 +1,8 @@ +@include global-reset; +@include reset-html5; + +@import "core/utilities"; +@import "core/theme"; +@import "core/layout"; +@import "core/typography"; +@import "partials"; diff --git a/themes/classic/sass/default/core/_layout.scss b/themes/classic/sass/default/core/_layout.scss new file mode 100644 index 0000000..0fdb235 --- /dev/null +++ b/themes/classic/sass/default/core/_layout.scss @@ -0,0 +1,128 @@ +$default-border-radius: 4px; + +$pad-min: 18px; +$pad-narrow: 18px; +$pad-medium: 24px; +$pad-wide: 30px; +$sidebar-width-medium: 240px; +$sidebar-pad-medium: 15px; +$sidebar-pad-wide: 20px; +$sidebar-width-wide: 300px; + +.group { @include pie-clearfix; } + +//html { } +body { + -webkit-text-size-adjust: none; + max-width: 1400px; + position: relative; + margin: 0 auto; + > header, > nav, > footer, #articles > article { + @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: .8em; + padding-top: 1.5em; + padding-bottom: 1.5em; + } +} + +.toggle-sidebar { display: none; } +#articles { width: 100%; + aside { display: none; } } + +@media only screen and (min-width: 550px) { + body > header { font-size: 1em; } +} +@media only screen and (min-width: 768px) { + body { -webkit-text-size-adjust: auto; } + body > header { font-size: 1.2em; } + body > nav { + + div { + @extend .group; + padding: 0; + margin: 0 auto; + > div { + @extend .group; + margin-right: $sidebar-width-medium; + } + } + } + #articles { + padding-top: $pad-medium/2; + padding-bottom: $pad-medium/2; + float: left; + + aside { + width: $sidebar-width-medium - $sidebar-pad-medium*2; + padding: 0 $sidebar-pad-medium $sidebar-pad-medium; + display: block; + float: left; + margin: 0 -100% 0 0; + } + } + body > div > div { position: relative; } + + .collapse-sidebar { + > div > div { margin-right: 10px; } + #articles + aside { + display: none; + } + .toggle-sidebar { + right: -1px; + background-color: $sidebar-bg; + border-right-width: 0; + text-indent: 2px; + border-left: 1px solid $sidebar-border; + @include border-bottom-right-radius(0); + @include border-bottom-left-radius(.3em); + @include link-colors(#aaa, #888); + } + } + + .toggle-sidebar { + outline: none; + position: absolute; right: -21px; top: 0; + width: 20px; + font-size: 1.2em; + line-height: 1.1em; + padding-bottom: .1em; + text-indent: -1px; + text-decoration: none; + @include link-colors(#ccc, #999); + @include border-bottom-right-radius(.3em); + text-align: center; + background: $main-bg; + border-bottom: 1px solid $sidebar-border; + border-right: 1px solid $sidebar-border; + display: inline-block; + } +} + +@media only screen and (min-width: 992px) { + body > * { font-size: 1.1em; } + body > header { + font-size: 1.3em; + } + body > nav + div > div { margin-right: $sidebar-width-wide; } + #articles { + padding-top: $pad-wide/2; + padding-bottom: $pad-wide/2; + + aside { + width: $sidebar-width-wide - $sidebar-pad-wide*2; + padding: 0 $sidebar-pad-wide $sidebar-pad-wide; + } + } +} diff --git a/themes/classic/sass/default/core/_theme.scss b/themes/classic/sass/default/core/_theme.scss new file mode 100644 index 0000000..a38f912 --- /dev/null +++ b/themes/classic/sass/default/core/_theme.scss @@ -0,0 +1,51 @@ +// Link Colors +$link-color: lighten(#165b94, 3); +$link-color-hover: darken(#165b94, 5); + +// Main Section Colors +$body-color: #333333; +$light-text: #999999; +$page-bg: #252525; + +$header-bg: #333; //#0c2e46; //darken(#238bd2, 32); //#263448; //#323232; +$header-border: lighten($header-bg, 15); +$title-color: #f2f2f2; + +$nav-bg: #ccc;//#3a6ea5; +$nav-color: darken($nav-bg, 38); +$nav-color-hover: darken($nav-color, 25); +$nav-border: darken($nav-bg, 10); +$nav-border-top: lighten($nav-bg, 15); +$nav-border-bottom: darken($nav-bg, 25);//darken($nav-bg, 5); +$nav-border-left: darken($nav-bg, 11); +$nav-border-right: lighten($nav-bg, 7); + +$sidebar-bg: #eee; //#f8f8f8; //desaturate(change-color(#e8f4f4, $hue: 207), 100); //mix(#f5f5f5, aqua, 93%); +$sidebar-border: darken($sidebar-bg, 7); + +// Blog +$article-border: #eeeeee; +$main-bg: #f7f7f7; + +$footer-color: #999999; +//$footer-bg: #444444; +$footer-bg: $nav-bg;//$page-bg; +$footer-border: $nav-border-top;//$page-bg; + +// Form Colors +$fieldset-bg: #ececec; +$fieldset-border: #c3c3c3; + +$textinput-color: #333333; +$textinput-bg: #f4f4f4; +$textinput-bg-focus: #fefeee; + +$textinput-border-top: #aaaaaa; +$textinput-border-bottom: #c6c6c6; +$textinput-border-left: #c3c3c3; +$textinput-border-right: #c3c3c3; +$textinput-border-focus: #989898; + +#articles a, #articles + aside a { + @include link-colors($link-color, $hover: saturate(darken($link_color, 15), 20), $focus: saturate(darken($link_color, 15), 20), $visited: darken(adjust_hue($link_color, 70), 10)); +} diff --git a/themes/classic/sass/default/core/_typography.scss b/themes/classic/sass/default/core/_typography.scss new file mode 100644 index 0000000..67cc76e --- /dev/null +++ b/themes/classic/sass/default/core/_typography.scss @@ -0,0 +1,126 @@ +$type-border: #ddd; +$type-color-light: #555; +$type-color: #000; +$blockquote: $type-border !default; //darken($type-border, 20) !default; +$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; + +// Fonts +//@include font-face("Adelle", font-files("adellebasic_bold-webfont.woff", woff, "adellebasic_bold-webfont.ttf", truetype, "adellebasic_bold-webfont.svg#webfontKykxqSyz", svg), $eot: "adellebasic_bold-webfont.eot" ); +.heading { + font-family: "Georgia", "PT Sans", "Helvetica Neue", Arial, sans-serif; + font-weight: bold; +} +.sans { font-family: "Helvetica Neue", Arial, sans-serif; } +.serif { font-family: Georgia, Times, "Times New Roman", serif; } +.mono { font-family: $mono; } + +body > header h1 { + font-size: 2em; + @extend .heading; + font-weight: normal; + line-height: 1.2em; + margin-bottom: 0.6667em; +} + +body { + line-height: 1.5em; + color: $type-color; + @extend .serif; +} + + +#{headings()}{ + @extend .heading; + text-rendering: optimizelegibility; + margin-bottom: 1em; + font-weight: normal; +} +h1 { + font-size: 2em; + line-height: 1.3334em +} +h2, section h1 { + font-size: 1.5em; +} +h3, section h2, section section h1 { + font-size: 1.3em; +} +h4, section h3, section section h2, section section section h1 { + font-size: 1em; +} +h5, section h4, section section h3 { + font-size: .9em; +} +h6, section h5, section section h4, section section section h3 { + font-size: .8em; +} +p, blockquote, ul, ol { margin-bottom: 1.5em; } + +ul{ list-style-type: disc; } + +ol{ list-style-type: decimal; ol { list-style-type: lower-alpha; } } +ul ul, ol ol { margin-left: 1.75em; } + +li { margin-bottom: .5em; } + +strong { font-weight: bold; } + +em { font-style: italic; } + +sup, sub { font-size: 0.8em; position: relative; display: inline-block; } +sup { top: -.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; + margin-left: $bq-margin; + > p { + &:first-child:before { + content: "\201C"; + position: absolute; + top: 0.1em; + left: -.5em; + font-size: 3em; + color: $blockquote; + } + &:last-child:after { + content: "\201D"; + position: relative; + top: 0.3em; + line-height: 0; + font-size: 2em; + color: $blockquote; + } + } + + p > cite { + margin-left: $bq-margin; + text-align: right; + &:before { content: '– '; color: $type-color-light; } + a { font-style: italic; } + } +} diff --git a/themes/classic/sass/default/core/_utilities.scss b/themes/classic/sass/default/core/_utilities.scss new file mode 100644 index 0000000..84312b5 --- /dev/null +++ b/themes/classic/sass/default/core/_utilities.scss @@ -0,0 +1,4 @@ +@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); +} diff --git a/themes/classic/sass/default/media/_480.scss b/themes/classic/sass/default/media/_480.scss new file mode 100644 index 0000000..fe1aa64 --- /dev/null +++ b/themes/classic/sass/default/media/_480.scss @@ -0,0 +1,26 @@ +#articles + aside { display: none; } +body > nav { + .site-serch { + width: 10em; + .search { width: 100%; background-color: #f6f6f6; } + } +} + +body > nav, body > footer, body > div > div { + padding-left: .5em; + padding-right: .5em; +} +body > * { font-size: .8em; } +body > header { + font-size: .5em; + padding: .4em .5em; +} +header, #{headings()} { text-align: center; } +.site-search { + margin: .15em 0 0; padding: 0; + .search { + padding: .3em .8em 0; + line-height: 1.5em; + font-size: .85em; + } +} diff --git a/themes/classic/sass/default/media/_768.scss b/themes/classic/sass/default/media/_768.scss new file mode 100644 index 0000000..67e7952 --- /dev/null +++ b/themes/classic/sass/default/media/_768.scss @@ -0,0 +1,8 @@ +//body { + //padding: 0 1em; +//} +//body > header { + //font-size: 1em; + //padding-top: .5em; + //padding-bottom: .5em; +//} diff --git a/themes/classic/sass/default/media/_992.scss b/themes/classic/sass/default/media/_992.scss new file mode 100644 index 0000000..bacd81d --- /dev/null +++ b/themes/classic/sass/default/media/_992.scss @@ -0,0 +1,19 @@ +//@include media-layout(1.2em, 20em, 1em); +//body > * { + //margin: 0 auto; + //font-size: 1em; +//} +//body { + //max-width: 1280px; + //margin: 0 auto; + //> header { + //padding-top: 2em; + //padding-bottom: 1em; + //} + //> nav { + //border-left: 1px solid $header-border; + //border-right: 1px solid $header-border; + //@include border-top-radius(.6em); + //} +//} + diff --git a/themes/classic/sass/default/partials/_blog.scss b/themes/classic/sass/default/partials/_blog.scss new file mode 100644 index 0000000..4a3312b --- /dev/null +++ b/themes/classic/sass/default/partials/_blog.scss @@ -0,0 +1,54 @@ +#articles { + > article { + padding-bottom: 1em; + &:last-child { margin-bottom: 0; border-bottom: none; } + h2 { + padding-top: 0.8em; + //border-top: 3px double $type-border; + background: inline-image('dotted-border.png') top left repeat-x; + } + .byline + time:before, .byline + time +time:before { + content: "\2022 "; + padding: 0 .3em 0 .2em; + display: inline-block; + @include opacity(.5); + } + header { + padding-top: 2em; + margin-bottom: 1.5em; + padding-bottom: 1.5em; + background: inline-image('dotted-border.png') bottom left repeat-x; + h1 { + margin: 0; + a { text-decoration: none; + &:hover { text-decoration: underline; } } + } + p { + font-size: .9em; + color: $type-color-light; + border: none; + padding-top: 0; + margin: 0; + font-style: italic; + font-family: "Georgia", Palatino, Times, "Times New Roman"; + } + } + .entry-content { + img { max-width: 100%; } + } + #disqus_thread { } + .meta { + border-bottom: 1px dashed #dddddd; + text-transform: uppercase; + color: #777777; + padding: 8px 0 5px; + margin-bottom: 1.5em; + font-size: 75%; + letter-spacing: 1px; + } + + .footer { + padding-top: 15px; + } + } +} diff --git a/themes/classic/sass/default/partials/_delicious.scss b/themes/classic/sass/default/partials/_delicious.scss new file mode 100644 index 0000000..e962702 --- /dev/null +++ b/themes/classic/sass/default/partials/_delicious.scss @@ -0,0 +1,4 @@ +.delicious-posts { + a.delicious-link { margin-bottom: .5em; display: block; } + p { font-size: 1em; } +} diff --git a/themes/classic/sass/default/partials/_footer.scss b/themes/classic/sass/default/partials/_footer.scss new file mode 100644 index 0000000..4ec28b7 --- /dev/null +++ b/themes/classic/sass/default/partials/_footer.scss @@ -0,0 +1,17 @@ +body > footer { + @extend .sans; + font-size: .8em; + color: $nav-color; + text-shadow: lighten($footer-bg, 5) 0 1px; + background-color: $footer-bg; + @include background(linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11))); + border-top: 1px solid $footer-border; + position: relative; + padding-top: 1em; + padding-bottom: 1em; + z-index: 1; + a { + @include link-colors($nav-color, $nav-color-hover); + } + p:last-child { margin-bottom: 0; } +} diff --git a/themes/classic/sass/default/partials/_header.scss b/themes/classic/sass/default/partials/_header.scss new file mode 100644 index 0000000..63a58c6 --- /dev/null +++ b/themes/classic/sass/default/partials/_header.scss @@ -0,0 +1,11 @@ +body > header { + background-color: $header_bg; + h1 { + display: inline-block; + margin: 0; + a, a:visited { + color: $title_color; + text-decoration: none; + } + } +} diff --git a/themes/classic/sass/default/partials/_navigation.scss b/themes/classic/sass/default/partials/_navigation.scss new file mode 100644 index 0000000..ecc29e4 --- /dev/null +++ b/themes/classic/sass/default/partials/_navigation.scss @@ -0,0 +1,116 @@ +body > nav { + position: relative; + background-color: $nav-bg; + @include background(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; + //position: absolute; left: 0; right: 0; top: 0; + form { + @include background-clip(padding-box); + margin: 0; padding: 0; + .search { + padding: .25em .5em 0; + font-size: .85em; + line-height: 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; + //float: right; + display: block; + padding-top: .25em; + } + 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: .9em; + 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; + } + } + fieldset[role=mobile-nav] { display: none; } + fieldset[role=site-search]{ width: 100%; } + form { + float: right; + text-align: left; + width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 5px; + padding-left: .8em; + .search { + width: 93%; + font-size: .95em; + line-height: 1.2em; + } + } + } + + @media only screen and (min-width: 992px) { + form { + width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 5px; + } + } +} +.maskImage { + ul[role=subscription] { li, a { border: 0; padding: 0; }} + a[rel=subscribe-rss]{ + position: relative; top: -2px; + width: image-width('rss.png'); + height: image-height('rss.png'); + @include mask-image('rss.png'); + text-indent: -999999em; + background-color: $nav-border-right; + border: 0; + padding: 0; + &:hover:after { background-color: darken($nav-border-left, 10); } + &:after { + content: ""; + @include mask-image('rss.png'); + width: image-width('rss.png'); + height: image-height('rss.png'); + position: absolute; top: -1px; left: 0; + background-color: $nav-border-left; + } + } +} diff --git a/themes/classic/sass/default/partials/_page.scss b/themes/classic/sass/default/partials/_page.scss new file mode 100644 index 0000000..cb0aa27 --- /dev/null +++ b/themes/classic/sass/default/partials/_page.scss @@ -0,0 +1,18 @@ +html { + background: $page-bg inline-image('line-tile.png') top left; +} +body { + border: 0 0 1px 0 solid darken($page-bg, 5); + > div { + background-color: $sidebar-bg; + border-bottom: 1px solid $nav-border-bottom; + > div { + background-color: $main-bg; + border-right: 1px solid $sidebar-border; + } + } +} + +@media only screen and (min-width: 1400px) { + body { border: 0 1px 0 solid darken($page-bg, 5); } +} diff --git a/themes/classic/sass/default/partials/_pinboard.scss b/themes/classic/sass/default/partials/_pinboard.scss new file mode 100644 index 0000000..9f9ab46 --- /dev/null +++ b/themes/classic/sass/default/partials/_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/themes/classic/sass/default/partials/_search.scss b/themes/classic/sass/default/partials/_search.scss new file mode 100644 index 0000000..e69de29 diff --git a/themes/classic/sass/default/partials/_sidebar.scss b/themes/classic/sass/default/partials/_sidebar.scss new file mode 100644 index 0000000..046068d --- /dev/null +++ b/themes/classic/sass/default/partials/_sidebar.scss @@ -0,0 +1,55 @@ +.side-shadow-border { + @include box-shadow(#fff 0 1px); +} +#articles + aside { + padding-top: 1.2em; + section { + @extend .sans; + font-size: .8em; + line-height: 1.5em; + margin-bottom: 1.5em; + h1 { + margin: 1.5em 0 0; + padding-bottom: .2em; + border-bottom: 1px solid $sidebar-border; + @extend .side-shadow-border; + + p { + padding-top: .4em; + } + } + } + ul { + margin-bottom: 0.5em; + } + 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, &:hover #tweets a { color: $link-color; } + #recent_posts { + time { + text-transform: uppercase; + font-size: .9em; + color: #666; + } + } + @import "twitter"; + @import "pinboard"; + @import "delicious"; +} +.aside-alt-link { + color: #999; + &:hover { + color: #555; + } +} diff --git a/themes/classic/sass/default/partials/_syntax.scss b/themes/classic/sass/default/partials/_syntax.scss new file mode 100644 index 0000000..5797c28 --- /dev/null +++ b/themes/classic/sass/default/partials/_syntax.scss @@ -0,0 +1,167 @@ +$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; + +// If you prefer light colors, uncomment the following block to change themes +//$base03: $base3; +//$base02: $base2; +//$base01: $base1; +//$base00: $base0; +//$base0: $base00; +//$base1: $base01; +//$base2: $base02; +//$base3: $base03; + +.gutter { + .line-numbers { + text-align: right; + background: $base02 !important; + border-right: 1px solid darken($base03, 2); + @include box-shadow(lighten($base02, 2) -1px 0 inset); + text-shadow: darken($base02, 10) 0 -1px; + span { color: $base01 !important; } + } +} +html .gist .gist-file { + margin-bottom: 1.5em; + border: none; + .gist-syntax { + border-bottom: 1px solid #515151 !important; + .gist-highlight{ + background: $base03 !important; + pre { + @extend .pre; + overflow-y: hidden; + overflow-x: auto; + } + } + } + .gist-meta { + @include background(linear-gradient(#b0b0b0, #a7a7a7)); + padding: 0.5em; + background-color: #bababa !important; + border: 1px solid #9c9c9c; + border-top: 1px solid #d0d0d0; + border-bottom: 1px solid #777777; + font-size: .7em !important; + font-family: "Helvetica Neue", Arial, sans-serif !important; + color: #464646 !important; + line-height: 1.4em; + } +} +pre { @extend .pre; } + +.pre { + @extend .mono; + font-size: .8em; + line-height: 1.45em; + padding: 1em 1.2em !important; + background: $base03 !important; + color: $base1 !important; + span { color: $base1 !important; } + span { font-style: normal !important; font-weight: normal !important; } + + .c { color: $base01 !important; font-style: italic !important; } /* Comment */ + .cm { color: $base01 !important; font-style: italic !important; } /* Comment.Multiline */ + .cp { color: $base01 !important; font-style: italic !important; } /* Comment.Preproc */ + .c1 { color: $base01 !important; font-style: italic !important; } /* Comment.Single */ + .cs { color: $base01 !important; font-weight: bold !important; font-style: italic !important; } /* Comment.Special */ + .err { color: $red !important; background: none !important; } /* Error */ + .k { color: $orange !important; } /* Keyword */ + .o { color: $base1 !important; font-weight: bold !important; } /* Operator */ + .p { color: $base1 !important; } /* Operator */ + .ow { color: $cyan !important; font-weight: bold !important; } /* Operator.Word */ + .gd { color: $base1 !important; background-color: mix($red, $base03, 25%) !important; display: block; } /* Generic.Deleted */ + .gd .x { color: $base1 !important; background-color: mix($red, $base03, 35%) !important; display: block; } /* Generic.Deleted.Specific */ + .ge { color: $base1 !important; font-style: italic !important; } /* Generic.Emph */ + //.gr { color: #aa0000 } /* Generic.Error */ + .gh { color: $base01 !important; } /* Generic.Heading */ + .gi { color: $base1 !important; background-color: mix($green, $base03, 20%) !important; display: block; } /* Generic.Inserted */ + .gi .x { color: $base1 !important; background-color: mix($green, $base03, 40%) !important; display: block; } /* Generic.Inserted.Specific */ + //.go { color: #888888 } /* Generic.Output */ + //.gp { color: #555555 } /* Generic.Prompt */ + .gs { color: $base1 !important; font-weight: bold !important; } /* Generic.Strong */ + .gu { color: $violet !important; } /* Generic.Subheading */ + //.gt { color: #aa0000 } /* Generic.Traceback */ + .kc { color: $green !important; font-weight: bold !important; } /* Keyword.Constant */ + .kd { color: $blue !important; } /* Keyword.Declaration */ + .kp { color: $orange !important; font-weight: bold !important; } /* Keyword.Pseudo */ + .kr { color: $magenta !important; font-weight: bold !important; } /* Keyword.Reserved */ + .kt { color: $cyan !important; } /* Keyword.Type */ + .n { color: $blue !important; } + .na { color: $blue !important; } /* Name.Attribute */ + .nb { color: $green !important; } /* Name.Builtin */ + //.nc { color: #445588; font-weight: bold } /* Name.Class */ + .no { color: $yellow !important; } /* Name.Constant */ + //.ni { color: #800080 } /* Name.Entity */ + .ne { color: $blue !important; font-weight: bold !important; } /* Name.Exception */ + .nf { color: $blue !important; font-weight: bold !important; } /* Name.Function */ + .nn { color: $yellow !important; } /* Name.Namespace */ + .nt { color: $blue !important; font-weight: bold !important; } /* Name.Tag */ + .nx { color: $yellow !Important; } + //.bp { color: #999999 } /* Name.Builtin.Pseudo */ + //.vc { color: #008080 } /* Name.Variable.Class */ + .vg { color: $blue !important; } /* Name.Variable.Global */ + .vi { color: $blue !important; } /* Name.Variable.Instance */ + .nv { color: $blue !important; } /* Name.Variable */ + //.w { color: #bbbbbb } /* Text.Whitespace */ + .mf { color: $cyan !important; } /* Literal.Number.Float */ + .m { color: $cyan !important; } /* Literal.Number */ + .mh { color: $cyan !important; } /* Literal.Number.Hex */ + .mi { color: $cyan !important; } /* Literal.Number.Integer */ + //.mo { color: #009999 } /* Literal.Number.Oct */ + .s { color: $cyan !important; } /* Literal.String */ + //.sb { color: #d14 } /* Literal.String.Backtick */ + //.sc { color: #d14 } /* Literal.String.Char */ + .sd { color: $cyan !important; } /* Literal.String.Doc */ + .s2 { color: $cyan !important; } /* Literal.String.Double */ + .se { color: $red !important; } /* Literal.String.Escape */ + //.sh { color: #d14 } /* Literal.String.Heredoc */ + .si { color: $blue !important; } /* Literal.String.Interpol */ + //.sx { color: #d14 } /* Literal.String.Other */ + .sr { color: $cyan !important; } /* Literal.String.Regex */ + .s1 { color: $cyan !important; } /* Literal.String.Single */ + //.ss { color: #990073 } /* Literal.String.Symbol */ + //.il { color: #009999 } /* Literal.Number.Integer.Long */ +} + +.highlight { + margin-bottom: 1.5em; + overflow-y: hidden; + .gutter pre { + padding-left: .8em !important; + padding-right: .8em !important; + } +} + +h3.filename { + font-size: 13px; + line-height: 2em; + text-align: center; + text-shadow: #cbcccc 0 1px 0; + color: #474747; + font-style: normal; + margin-bottom: 0; + + @include border-top-radius(5px); + font-family: "Helvetica Neue",Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif; + background: #aaaaaa image-url("code_bg.png") top repeat-x; + border: 1px solid #565656; + border-top-color: #cbcbcb; + border-left-color: #a5a5a5; + border-right-color: #a5a5a5; + border-bottom: 0; +} diff --git a/themes/classic/sass/default/partials/_twitter.scss b/themes/classic/sass/default/partials/_twitter.scss new file mode 100644 index 0000000..de7a693 --- /dev/null +++ b/themes/classic/sass/default/partials/_twitter.scss @@ -0,0 +1,33 @@ +#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; + } + } + a { color: #666; @include hover-link; } + p { + position: relative; + padding-right: 1em; + } + a[href*='status']{ + color: #aaa; + 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; } + &:hover { + color: #555; + text-decoration: none; + } + } + a[href*='twitter.com/search']{ + @extend .aside-alt-link; + } +} diff --git a/themes/classic/sass/screen.scss b/themes/classic/sass/screen.scss new file mode 100644 index 0000000..eb00e5a --- /dev/null +++ b/themes/classic/sass/screen.scss @@ -0,0 +1,2 @@ +@import "compass"; +@import "default/style"; diff --git a/themes/classic/source/_includes/article.html b/themes/classic/source/_includes/article.html new file mode 100644 index 0000000..1be6552 --- /dev/null +++ b/themes/classic/source/_includes/article.html @@ -0,0 +1,28 @@ +{% if page.author %} + {% assign author = page.author %} +{% else %} + {% assign author = site.author %} +{% endif %} +
+ {% if index %} +

{{ page.title }}

+ {% else %} +

{{ page.title }}

+ {% endif %} + {% unless page.nometa %} +

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

+ {% endunless %} +
+{% if index %} +
{{ content | exerpt(content, page.url, 'Continue reading »') | smart_quotes }}
+{% else %} +
{{ content | smart_quotes }}
+{% endif %} diff --git a/themes/classic/source/_includes/asides/delicious.html b/themes/classic/source/_includes/asides/delicious.html new file mode 100644 index 0000000..307a2e9 --- /dev/null +++ b/themes/classic/source/_includes/asides/delicious.html @@ -0,0 +1,7 @@ +{% if site.delicious_user %} +
+

On Delicious

+ +

My Delicious Bookmarks »

+
+{% endif %} diff --git a/themes/classic/source/_includes/asides/pinboard.html b/themes/classic/source/_includes/asides/pinboard.html new file mode 100644 index 0000000..1cbb137 --- /dev/null +++ b/themes/classic/source/_includes/asides/pinboard.html @@ -0,0 +1,19 @@ +{% if site.pinboard_user %} +
+

My Pinboard

+ +

My Pinboard Bookmarks »

+
+ +{% endif %} diff --git a/themes/classic/source/_includes/asides/recent_posts.html b/themes/classic/source/_includes/asides/recent_posts.html new file mode 100644 index 0000000..7b40b76 --- /dev/null +++ b/themes/classic/source/_includes/asides/recent_posts.html @@ -0,0 +1,12 @@ +{% if page.single and site.recent_posts %} +
+

Recent Posts

+ +
+{% endif %} diff --git a/themes/classic/source/_includes/asides/twitter.html b/themes/classic/source/_includes/asides/twitter.html new file mode 100644 index 0000000..15cab8b --- /dev/null +++ b/themes/classic/source/_includes/asides/twitter.html @@ -0,0 +1,19 @@ +{% if site.twitter_user %} +
+

Latest Tweets

+ + + + {% if site.twitter_follow_button %} + Follow @{{ site.twitter_user }} + {% else %} +

Follow @{{ site.twitter_user }}

+ {% endif %} +
+{% endif %} diff --git a/themes/classic/source/_includes/disqus_thread.html b/themes/classic/source/_includes/disqus_thread.html new file mode 100644 index 0000000..036b9d7 --- /dev/null +++ b/themes/classic/source/_includes/disqus_thread.html @@ -0,0 +1,7 @@ + + + diff --git a/themes/classic/source/_includes/footer.html b/themes/classic/source/_includes/footer.html new file mode 100644 index 0000000..e12f067 --- /dev/null +++ b/themes/classic/source/_includes/footer.html @@ -0,0 +1,4 @@ +

+ Copyright © {{ site.time | date: "%Y" }} - {{ site.author }} - + Powered by Octopress +

diff --git a/themes/classic/source/_includes/google_analytics.html b/themes/classic/source/_includes/google_analytics.html new file mode 100644 index 0000000..4d4d596 --- /dev/null +++ b/themes/classic/source/_includes/google_analytics.html @@ -0,0 +1,13 @@ +{% if site.google_analytics_tracking_id %} + +{% endif %} diff --git a/themes/classic/source/_includes/head.html b/themes/classic/source/_includes/head.html new file mode 100644 index 0000000..bf93b7b --- /dev/null +++ b/themes/classic/source/_includes/head.html @@ -0,0 +1,32 @@ + + + + + + + {% if page.title %} + {{site.title}}: {{page.title}}{% if site.author %} - {{ site.author }}{% endif %} + {% else %} + {{site.title}}{% if site.author %} - {{ site.author }}{% endif %} + {% endif %} + + {% if page.description %} + + {% endif %} + + + + + + + {% if page.keywords %} + + {% endif %} + + + + + + {% include google_analytics.html %} + + diff --git a/themes/classic/source/_includes/header.html b/themes/classic/source/_includes/header.html new file mode 100644 index 0000000..4e0519e --- /dev/null +++ b/themes/classic/source/_includes/header.html @@ -0,0 +1 @@ +

{{ site.title }}

diff --git a/themes/classic/source/_includes/navigation.html b/themes/classic/source/_includes/navigation.html new file mode 100644 index 0000000..766c220 --- /dev/null +++ b/themes/classic/source/_includes/navigation.html @@ -0,0 +1,16 @@ + +
+
+ + +
+
+ diff --git a/themes/classic/source/_includes/sidebar.html b/themes/classic/source/_includes/sidebar.html new file mode 100644 index 0000000..0bce3c7 --- /dev/null +++ b/themes/classic/source/_includes/sidebar.html @@ -0,0 +1,8 @@ +
+

About Me

+

Hi, I'm Octopress!

+
+{% include asides/recent_posts.html %} +{% include asides/twitter.html %} +{% include asides/delicious.html %} +{% include asides/pinboard.html %} diff --git a/themes/classic/source/_layouts/archive_monthly.html b/themes/classic/source/_layouts/archive_monthly.html new file mode 100644 index 0000000..85ada6d --- /dev/null +++ b/themes/classic/source/_layouts/archive_monthly.html @@ -0,0 +1,19 @@ +--- +layout: default +--- +
+
+

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

+

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

+ +
+
+ diff --git a/themes/classic/source/_layouts/archive_yearly.html b/themes/classic/source/_layouts/archive_yearly.html new file mode 100644 index 0000000..dabebeb --- /dev/null +++ b/themes/classic/source/_layouts/archive_yearly.html @@ -0,0 +1,25 @@ +--- +layout: default +--- +
+
+

{{ page.year }}

+

Posts from the year {{ page.year }}

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

{{ m | date_to_month }}

+ {% for d in (1..31) reversed %} + {% if page.collated_posts[page.year][m][d] %} + {% for p in page.collated_posts[page.year][m][d] reversed %} +
+ {{ p.date | date: "%d" }} + {{ p.title }} +
+ {% endfor %} + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} +
+
+ diff --git a/themes/classic/source/_layouts/default.html b/themes/classic/source/_layouts/default.html new file mode 100644 index 0000000..dc69ef8 --- /dev/null +++ b/themes/classic/source/_layouts/default.html @@ -0,0 +1,26 @@ +{% include head.html %} + +
{% include header.html %}
+ +
+
+
{{ content }}
+ {% unless page.sidebar == 'none' %} + + {% endunless %} +
+
+ + {% if site.twitter_follow_button or site.twitter_tweet_button %} + + {% endif %} + + diff --git a/themes/classic/source/_layouts/page.html b/themes/classic/source/_layouts/page.html new file mode 100644 index 0000000..88d6e13 --- /dev/null +++ b/themes/classic/source/_layouts/page.html @@ -0,0 +1,13 @@ +--- +layout: default +no_title_link: true +permalink: pretty +single: true +--- + +
+ {% include article.html %} + {% if site.disqus_short_name %} +
{% include disqus_thread.html %}
+ {% endif %} +
diff --git a/themes/classic/source/_layouts/post.html b/themes/classic/source/_layouts/post.html new file mode 100644 index 0000000..7407d1e --- /dev/null +++ b/themes/classic/source/_layouts/post.html @@ -0,0 +1,16 @@ +--- +layout: default +single: true +--- + +
+ {% include article.html %} + + {% if site.disqus_short_name %} +
{% include disqus_thread.html %}
+ {% endif %} +
diff --git a/themes/classic/source/_posts/2009-11-13-hello-world.markdown b/themes/classic/source/_posts/2009-11-13-hello-world.markdown new file mode 100644 index 0000000..af71985 --- /dev/null +++ b/themes/classic/source/_posts/2009-11-13-hello-world.markdown @@ -0,0 +1,16 @@ +--- +title: Hello World! I'm Octopress! +layout: post +updated: March 10th, 2010 +--- + +**Octopress is a blogging framework designed for hackers**, based on [Jekyll](http://github.com/mojombo/jekyll) the blog aware static site generator powering [Github pages](http://pages.github.com/). +If you don't know what Jekyll is, [Jack Moffitt](http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/) wrote a good summary: + +{% blockquote Jack Moffitt http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/ Blogging with Git Emacs and Jekyll %} + Jekyll is a static blog generator; it transforms a directory of input files into another directory of files suitable for a blog. The management of the blog is handled by standard, familiar tools like creating and renaming files, the text editor of your choice, and version control. +{% endblockquote %} + +There's no database to set up, and you get to use tools like Emacs, Vim, or TextMate to write your posts, not some lame in-browser text editor. Just write, generate, deploy, using the same tools and patterns you already use for your daily work. + +[Read the wiki to learn more](http://wiki.github.com/imathis/octopress/) diff --git a/themes/classic/source/_posts/2011-03-14-test-post.markdown b/themes/classic/source/_posts/2011-03-14-test-post.markdown new file mode 100644 index 0000000..5fd45b8 --- /dev/null +++ b/themes/classic/source/_posts/2011-03-14-test-post.markdown @@ -0,0 +1,6 @@ +--- +title: Test Post +layout: post +--- + +This is a test! diff --git a/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown b/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown new file mode 100644 index 0000000..5ae332c --- /dev/null +++ b/themes/classic/source/_posts/2011-04-07-test-of-typography.markdown @@ -0,0 +1,50 @@ +--- +title: "Test of Typography" +date: 2011-04-07 19:17 +layout: post +--- + +In the past I've always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten *professionally* printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design. + +## Why Have Business Cards? +I'm rarely asked for my business card except when I attend conferences, of which I attend one or two each year. As a freelance contractor, I leave work by walking twenty-five feet from my office to the couch. Many of the +people I work for I've never met in-person. + +When someone gives me their business card, I read it, pocket it, and eventually throw it out — sometimes before I remember to copy the information to my address book (sorry, just being honest). The reality is, with the ubiquity of the internet and with frictionless social networks like Twitter, I can connect with people immediately. So why have business cards? + + + +### Inspiration Demands Action +In one of our campfire chats [Nathaniel Talbott](http://twitter.com/NTalbott) showed off his business cards which he printed through [Moo](http://moo.com). They were half the size of regular business cards featuring the company logo on the front, and the url on the back. The unique size of the card intrigued me, and days later I couldn't stop thinking about designing a set of mini-cards for myself. + +cards in a box Moo's [MiniCard's](http://moo.com/products/minicards.php) are very unique. You can print 100 cards, each with a totally different back. With a typical printing service this would be prohibitively expensive, but with Moo the rules are different. This freedom encourages us to go beyond nicely styled contact information and branding. Some clever uses involve offering unique invite codes for a web application, or sharing a photography portfolio with Moo's Flickr import feature. + +I realized that I could print several design iterations and decide later which worked best. Without the pressure to choose a single design, I felt the freedom to create. + +### The Freedom to Fail +card concepts I could be cheeky and print up half of my cards with my logo on one side and only my Twitter name on the other. For less than $20 for 100 cards, I wasn't even concerned about possibly screwing up a whole batch. So that's what I did. I designed cards that were good enough and I printed them. If the cards did't turn out how I wanted them to, I could improve and print again. + +handout cards The process was fun and simple, and as soon as I finished, I wanted to do it again. When my cards arrived, I was absolutely delighted by the print quality and the care put into their presentation. Smartly Moo even included some beautiful promotional cards to hand out when people inevitably ask about mine. + +### A Second Iteration +After holding the finished product, I began to see how my design could be improved. I learned that Gill Sans is harder to read at a small size in a high contrast print, so I switched to Futura. I showed my cards to some far-sighted friends and adjusted my font size accordingly. I discarded a background gradient (which I should have known wouldn't translate well to print) in favor of a solid color. **Sidenote:** On screen, gradients emulate the subtleties of a natural light source, but on a real object it doesn't make sense and generally looks bad. + +I changed my approach choosing a single design with multiple color variations. In the promotional cards Moo sent me, I learned that they do a fantastic job with bright colors and I wanted to use that boldness in my design. I was inspired by what [Seth Godin said](http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html): + +> Every interaction is both precious and an opportunity to delight. + +MiniCard Holder I pictured sliding a card out of my [MiniCard Holder](http://moo.com/products/accessories/holders/moo_minicard_holders) and revealing another brightly-colored card beneath. As I hand someone a card they'll see the flash of color and realize that their card was special, and different from my other cards. That's what I want my clients and future clients to feel. + +### The Final Design + +all card designs + +The MiniCard's unique constraints inspired me with a fresh challenge and their pricing model encouraged me to experiment. Instead of treating business cards like a necessary design task, I saw them as a opportunity to release quickly, fail cheaply, and improve. Now when I give someone a business card, it's something valuable to me, and I hope they're delighted. + +**Update:** I thought I'd share some other great uses of Moo's MiniCards. There's a fantastic [Flikr pool](http://www.flickr.com/groups/moo/pool/), but here are some of my favorites. Enjoy: + +- [Product](http://www.flickr.com/photos/lushlampwork/4131018201/in/pool-moo) [tags](http://www.flickr.com/photos/lushlampwork/4297224179/in/pool-moo) +- [Photography](http://www.flickr.com/photos/thisiswoly/4206576342/in/pool-moo) or [art](http://www.flickr.com/photos/lesleybarnes/4276368956/in/pool-moo) [portfolios](http://www.flickr.com/photos/playinprogress/4158223112/in/pool-moo) +- [Gift](http://www.flickr.com/photos/polkadotcreations/4167249758/in/pool-moo) [tags](http://www.flickr.com/photos/22338102@N04/4278114745/in/pool-moo) +- [An advent calendar](http://www.flickr.com/photos/bcome/4177034036/in/pool-moo) + diff --git a/themes/classic/source/archive.html b/themes/classic/source/archive.html new file mode 100644 index 0000000..98518aa --- /dev/null +++ b/themes/classic/source/archive.html @@ -0,0 +1,24 @@ +--- +layout: page +title: Blog Archive +nometa: true +--- +{% for post in site.posts reverse %} + {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %} + {% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %} + {% unless year == this_year %} + {% unless forloop.first %}{% endunless %} + {% assign year = this_year %} +

{{ year }}

+ {% endif %} +{% endfor %} diff --git a/themes/classic/source/atom.xml b/themes/classic/source/atom.xml new file mode 100644 index 0000000..3b4e661 --- /dev/null +++ b/themes/classic/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/themes/classic/source/fonts/adellebasic_bold-webfont.eot b/themes/classic/source/fonts/adellebasic_bold-webfont.eot new file mode 100755 index 0000000..5bace32 Binary files /dev/null and b/themes/classic/source/fonts/adellebasic_bold-webfont.eot differ diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.svg b/themes/classic/source/fonts/adellebasic_bold-webfont.svg new file mode 100755 index 0000000..c259c24 --- /dev/null +++ b/themes/classic/source/fonts/adellebasic_bold-webfont.svg @@ -0,0 +1,139 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Copyright c 2009 by TypeTogether All rights reserved +Designer : Veronika Burian Jos Scaglione +Foundry : TypeTogether +Foundry URL : wwwtypetogethercom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.ttf b/themes/classic/source/fonts/adellebasic_bold-webfont.ttf new file mode 100755 index 0000000..7e70d0d Binary files /dev/null and b/themes/classic/source/fonts/adellebasic_bold-webfont.ttf differ diff --git a/themes/classic/source/fonts/adellebasic_bold-webfont.woff b/themes/classic/source/fonts/adellebasic_bold-webfont.woff new file mode 100755 index 0000000..07ae59a Binary files /dev/null and b/themes/classic/source/fonts/adellebasic_bold-webfont.woff differ diff --git a/themes/classic/source/images/code_bg.png b/themes/classic/source/images/code_bg.png new file mode 100644 index 0000000..a57bab5 Binary files /dev/null and b/themes/classic/source/images/code_bg.png differ diff --git a/themes/classic/source/images/dotted-border.png b/themes/classic/source/images/dotted-border.png new file mode 100644 index 0000000..57f9907 Binary files /dev/null and b/themes/classic/source/images/dotted-border.png differ diff --git a/themes/classic/source/images/line-tile.png b/themes/classic/source/images/line-tile.png new file mode 100644 index 0000000..f67ee19 Binary files /dev/null and b/themes/classic/source/images/line-tile.png differ diff --git a/themes/classic/source/images/rss.png b/themes/classic/source/images/rss.png new file mode 100644 index 0000000..f458e57 Binary files /dev/null and b/themes/classic/source/images/rss.png differ diff --git a/themes/classic/source/images/search.png b/themes/classic/source/images/search.png new file mode 100644 index 0000000..1220ff4 Binary files /dev/null and b/themes/classic/source/images/search.png differ diff --git a/themes/classic/source/index.html b/themes/classic/source/index.html new file mode 100644 index 0000000..09eb8d1 --- /dev/null +++ b/themes/classic/source/index.html @@ -0,0 +1,11 @@ +--- +layout: default +--- +{% for page in site.posts limit:3 %} +{% assign content = page.content %} +{% assign index = true %} +
+ {% include article.html %} +
+{% endfor %} + diff --git a/themes/classic/source/javascripts/libs/ender.js b/themes/classic/source/javascripts/libs/ender.js new file mode 100644 index 0000000..5e56fd8 --- /dev/null +++ b/themes/classic/source/javascripts/libs/ender.js @@ -0,0 +1,1497 @@ +/*! + * Ender: open module JavaScript framework + * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) + * https://ender.no.de + * License MIT + * Build: ender -b jeesh + */ +!function (context) { + + function aug(o, o2) { + for (var k in o2) { + k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]); + } + return o; + } + + function boosh(s, r) { + var els; + if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) { //string || node || nodelist || window + els = ender._select(s, r); + els.selector = s; + } else { + els = isFinite(s.length) ? s : [s]; + } + return aug(els, boosh); + } + + function ender(s, r) { + return boosh(s, r); + } + + aug(ender, { + _VERSION: '0.2.0', + ender: function (o, chain) { + aug(chain ? boosh : ender, o); + } + }); + + aug(boosh, { + forEach: function (fn, scope) { + // opt out of native forEach so we can intentionally call our own scope + // defaulting to the current item + for (var i = 0, l = this.length; i < l; ++i) { + i in this && fn.call(scope || this[i], this[i], i, this); + } + // return self for chaining + return this; + } + }); + + var old = context.$; + ender.noConflict = function () { + context.$ = old; + return this; + }; + + (typeof module !== 'undefined') && module.exports && (module.exports = ender); + // use subscript notation as extern for Closure compilation + context['ender'] = context['$'] = ender; + +}(this); +/*! + * bean.js - copyright Jacob Thornton 2011 + * https://github.com/fat/bean + * MIT License + * special thanks to: + * dean edwards: http://dean.edwards.name/ + * dperini: https://github.com/dperini/nwevents + * the entire mootools team: github.com/mootools/mootools-core + */ +!function (context) { + var __uid = 1, registry = {}, collected = {}, + overOut = /over|out/, + namespace = /[^\.]*(?=\..*)\.|.*/, + stripName = /\..*/, + addEvent = 'addEventListener', + attachEvent = 'attachEvent', + removeEvent = 'removeEventListener', + detachEvent = 'detachEvent', + doc = context.document || {}, + root = doc.documentElement || {}, + W3C_MODEL = root[addEvent], + eventSupport = W3C_MODEL ? addEvent : attachEvent, + + isDescendant = function (parent, child) { + var node = child.parentNode; + while (node != null) { + if (node == parent) { + return true; + } + node = node.parentNode; + } + }, + + retrieveUid = function (obj, uid) { + return (obj.__uid = uid || obj.__uid || __uid++); + }, + + retrieveEvents = function (element) { + var uid = retrieveUid(element); + return (registry[uid] = registry[uid] || {}); + }, + + listener = W3C_MODEL ? function (element, type, fn, add) { + element[add ? addEvent : removeEvent](type, fn, false); + } : function (element, type, fn, add, custom) { + custom && add && (element['_on' + custom] = element['_on' + custom] || 0); + element[add ? attachEvent : detachEvent]('on' + type, fn); + }, + + nativeHandler = function (element, fn, args) { + return function (event) { + event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event); + return fn.apply(element, [event].concat(args)); + }; + }, + + customHandler = function (element, fn, type, condition, args) { + return function (event) { + if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) { + fn.apply(element, [event].concat(args)); + } + }; + }, + + addListener = function (element, orgType, fn, args) { + var type = orgType.replace(stripName, ''), + events = retrieveEvents(element), + handlers = events[type] || (events[type] = {}), + uid = retrieveUid(fn, orgType.replace(namespace, '')); + if (handlers[uid]) { + return element; + } + var custom = customEvents[type]; + if (custom) { + fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn; + type = custom.base || type; + } + var isNative = nativeEvents[type]; + fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args); + isNative = W3C_MODEL || isNative; + if (type == 'unload') { + var org = fn; + fn = function () { + removeListener(element, type, fn) && org(); + }; + } + element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type); + handlers[uid] = fn; + fn.__uid = uid; + return type == 'unload' ? element : (collected[retrieveUid(element)] = element); + }, + + removeListener = function (element, orgType, handler) { + var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, ''); + if (!events || !events[type]) { + return element; + } + names = orgType.replace(namespace, ''); + uids = names ? names.split('.') : [handler.__uid]; + for (i = uids.length; i--;) { + uid = uids[i]; + handler = events[type][uid]; + delete events[type][uid]; + if (element[eventSupport]) { + type = customEvents[type] ? customEvents[type].base : type; + var isNative = W3C_MODEL || nativeEvents[type]; + listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type); + } + } + return element; + }, + + del = function (selector, fn, $) { + return function (e) { + var array = typeof selector == 'string' ? $(selector, this) : selector; + for (var target = e.target; target && target != this; target = target.parentNode) { + for (var i = array.length; i--;) { + if (array[i] == target) { + return fn.apply(target, arguments); + } + } + } + }; + }, + + add = function (element, events, fn, delfn, $) { + if (typeof events == 'object' && !fn) { + for (var type in events) { + events.hasOwnProperty(type) && add(element, type, events[type]); + } + } else { + var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' '); + fn = isDel ? del(events, delfn, $) : fn; + for (var i = types.length; i--;) { + addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3)); + } + } + return element; + }, + + remove = function (element, orgEvents, fn) { + var k, type, events, + isString = typeof(orgEvents) == 'string', + names = isString && orgEvents.replace(namespace, ''), + rm = removeListener, + attached = retrieveEvents(element); + if (isString && /\s/.test(orgEvents)) { + orgEvents = orgEvents.split(' '); + var i = orgEvents.length - 1; + while (remove(element, orgEvents[i]) && i--) {} + return element; + } + events = isString ? orgEvents.replace(stripName, '') : orgEvents; + if (!attached || (isString && !attached[events])) { + return element; + } + if (typeof fn == 'function') { + rm(element, events, fn); + } else if (names) { + rm(element, orgEvents); + } else { + rm = events ? rm : remove; + type = isString && events; + events = events ? (fn || attached[events] || events) : attached; + for (k in events) { + events.hasOwnProperty(k) && rm(element, type || k, events[k]); + } + } + return element; + }, + + fire = function (element, type, args) { + var evt, k, i, types = type.split(' '); + for (i = types.length; i--;) { + type = types[i].replace(stripName, ''); + var isNative = nativeEvents[type], + isNamespace = types[i].replace(namespace, ''), + handlers = retrieveEvents(element)[type]; + if (isNamespace) { + isNamespace = isNamespace.split('.'); + for (k = isNamespace.length; k--;) { + handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args); + } + } else if (!args && element[eventSupport]) { + fireListener(isNative, type, element); + } else { + for (k in handlers) { + handlers.hasOwnProperty(k) && handlers[k].apply(element, args); + } + } + } + return element; + }, + + fireListener = W3C_MODEL ? function (isNative, type, element) { + evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents"); + evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1); + element.dispatchEvent(evt); + } : function (isNative, type, element) { + isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++; + }, + + clone = function (element, from, type) { + var events = retrieveEvents(from), obj, k; + obj = type ? events[type] : events; + for (k in obj) { + obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k); + } + return element; + }, + + fixEvent = function (e) { + var result = {}; + if (!e) { + return result; + } + var type = e.type, target = e.target || e.srcElement; + result.preventDefault = fixEvent.preventDefault(e); + result.stopPropagation = fixEvent.stopPropagation(e); + result.target = target && target.nodeType == 3 ? target.parentNode : target; + if (~type.indexOf('key')) { + result.keyCode = e.which || e.keyCode; + } else if ((/click|mouse|menu/i).test(type)) { + result.rightClick = e.which == 3 || e.button == 2; + result.pos = { x: 0, y: 0 }; + if (e.pageX || e.pageY) { + result.clientX = e.pageX; + result.clientY = e.pageY; + } else if (e.clientX || e.clientY) { + result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; + result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; + } + overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']); + } + for (var k in e) { + if (!(k in result)) { + result[k] = e[k]; + } + } + return result; + }; + + fixEvent.preventDefault = function (e) { + return function () { + if (e.preventDefault) { + e.preventDefault(); + } + else { + e.returnValue = false; + } + }; + }; + + fixEvent.stopPropagation = function (e) { + return function () { + if (e.stopPropagation) { + e.stopPropagation(); + } else { + e.cancelBubble = true; + } + }; + }; + + var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons + mousewheel: 1, DOMMouseScroll: 1, //mouse wheel + mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement + keydown: 1, keypress: 1, keyup: 1, //keyboard + orientationchange: 1, // mobile + touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch + gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture + focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements + load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window + error: 1, abort: 1, scroll: 1 }; //misc + + function check(event) { + var related = event.relatedTarget; + if (!related) { + return related == null; + } + return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related)); + } + + var customEvents = { + mouseenter: { base: 'mouseover', condition: check }, + mouseleave: { base: 'mouseout', condition: check }, + mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' } + }; + + var bean = { add: add, remove: remove, clone: clone, fire: fire }; + + var clean = function (el) { + var uid = remove(el).__uid; + if (uid) { + delete collected[uid]; + delete registry[uid]; + } + }; + + if (context[attachEvent]) { + add(context, 'unload', function () { + for (var k in collected) { + collected.hasOwnProperty(k) && clean(collected[k]); + } + context.CollectGarbage && CollectGarbage(); + }); + } + + var oldBean = context.bean; + bean.noConflict = function () { + context.bean = oldBean; + return this; + }; + + (typeof module !== 'undefined' && module.exports) ? + (module.exports = bean) : + (context['bean'] = bean); + +}(this);!function ($) { + var b = bean.noConflict(), + integrate = function (method, type, method2) { + var _args = type ? [type] : []; + return function () { + for (var args, i = 0, l = this.length; i < l; i++) { + args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0)); + args.length == 4 && args.push($); + !arguments.length && method == 'add' && type && (method = 'fire'); + b[method].apply(this, args); + } + return this; + }; + }; + + var add = integrate('add'), + remove = integrate('remove'), + fire = integrate('fire'); + + var methods = { + + on: add, + addListener: add, + bind: add, + listen: add, + delegate: add, + + unbind: remove, + unlisten: remove, + removeListener: remove, + undelegate: remove, + + emit: fire, + trigger: fire, + + cloneEvents: integrate('clone'), + + hover: function (enter, leave) { + for (var i = 0, l = this.length; i < l; i++) { + b.add.call(this, this[i], 'mouseenter', enter); + b.add.call(this, this[i], 'mouseleave', leave); + } + return this; + } + }; + + var shortcuts = [ + 'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin', + 'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown', + 'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup', + 'resize', 'scroll', 'select', 'submit', 'unload' + ]; + + for (var i = shortcuts.length; i--;) { + var shortcut = shortcuts[i]; + methods[shortcut] = integrate('add', shortcut); + } + + $.ender(methods, true); +}(ender); +/*! + * bonzo.js - copyright @dedfat 2011 + * https://github.com/ded/bonzo + * Follow our software http://twitter.com/dedfat + * MIT License + */ +!function (context) { + + var doc = context.document, + html = doc.documentElement, + query = null, + byTag = 'getElementsByTagName', + specialAttributes = /^checked|value|selected$/, + specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i, + tagMap = { select: 'option', table: 'tbody', tr: 'td' }, + stateAttributes = /^checked|selected$/, + ie = /msie/i.test(navigator.userAgent), + uidList = [], + uuids = 0, + digit = /^-?[\d\.]+$/, + px = 'px', + // commonly used methods + setAttribute = 'setAttribute', + getAttribute = 'getAttribute', + trimReplace = /(^\s*|\s*$)/g, + unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 }; + + function classReg(c) { + return new RegExp("(^|\\s+)" + c + "(\\s+|$)"); + } + + function each(ar, fn, scope) { + for (var i = 0, l = ar.length; i < l; i++) { + fn.call(scope || ar[i], ar[i], i, ar); + } + return ar; + } + + var trim = String.prototype.trim ? + function (s) { + return s.trim(); + } : + function (s) { + return s.replace(trimReplace, ''); + }; + + function camelize(s) { + return s.replace(/-(.)/g, function (m, m1) { + return m1.toUpperCase(); + }); + } + + function is(node) { + return node && node.nodeName && node.nodeType == 1; + } + + function some(ar, fn, scope) { + for (var i = 0, j = ar.length; i < j; ++i) { + if (fn.call(scope, ar[i], i, ar)) { + return true; + } + } + return false; + } + + var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ? + function (el, property) { + var value = null; + if (property == 'float') { + property = 'cssFloat'; + } + var computed = doc.defaultView.getComputedStyle(el, ''); + computed && (value = computed[camelize(property)]); + return el.style[property] || value; + + } : (ie && html.currentStyle) ? + + function (el, property) { + property = camelize(property); + property = property == 'float' ? 'styleFloat' : property; + + if (property == 'opacity') { + var val = 100; + try { + val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity; + } catch (e1) { + try { + val = el.filters('alpha').opacity; + } catch (e2) {} + } + return val / 100; + } + var value = el.currentStyle ? el.currentStyle[property] : null; + return el.style[property] || value; + } : + + function (el, property) { + return el.style[camelize(property)]; + }; + + function insert(target, host, fn) { + var i = 0, self = host || this, r = []; + each(normalize(query ? query(target) : target), function (t) { + each(self, function (el) { + var n = el.cloneNode(true); + fn(t, n); + r[i] = n; + i++; + }); + }, this); + each(r, function (e, i) { + self[i] = e; + }); + self.length = i; + return self; + } + + function xy(el, x, y) { + var $el = bonzo(el), + style = $el.css('position'), + offset = $el.offset(), + rel = 'relative', + isRel = style == rel, + delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)]; + + if (style == 'static') { + $el.css('position', rel); + style = rel; + } + + isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft); + isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop); + + x !== null && (el.style.left = x - offset.left + delta[0] + 'px'); + y !== null && (el.style.top = y - offset.top + delta[1] + 'px'); + + } + + function Bonzo(elements) { + this.length = 0; + this.original = elements; + if (elements) { + elements = typeof elements !== 'string' && + !elements.nodeType && + typeof elements.length !== 'undefined' ? + elements : + [elements]; + this.length = elements.length; + for (var i = 0; i < elements.length; i++) { + this[i] = elements[i]; + } + } + } + + Bonzo.prototype = { + + each: function (fn, scope) { + return each(this, fn, scope); + }, + + map: function (fn, reject) { + var m = [], n, i; + for (i = 0; i < this.length; i++) { + n = fn.call(this, this[i]); + reject ? (reject(n) && m.push(n)) : m.push(n); + } + return m; + }, + + first: function () { + return bonzo(this[0]); + }, + + last: function () { + return bonzo(this[this.length - 1]); + }, + + html: function (h, text) { + var method = text ? + html.textContent == null ? + 'innerText' : + 'textContent' : + 'innerHTML', m; + function append(el, tag) { + while (el.firstChild) { + el.removeChild(el.firstChild); + } + each(normalize(h, tag), function (node) { + el.appendChild(node); + }); + } + return typeof h !== 'undefined' ? + this.each(function (el) { + (m = el.tagName.match(specialTags)) ? + append(el, m[0]) : + (el[method] = h); + }) : + this[0] ? this[0][method] : ''; + }, + + text: function (text) { + return this.html(text, 1); + }, + + addClass: function (c) { + return this.each(function (el) { + this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c)); + }, this); + }, + + removeClass: function (c) { + return this.each(function (el) { + this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' '))); + }, this); + }, + + hasClass: function (el, c) { + return typeof c == 'undefined' ? + some(this, function (i) { + return classReg(el).test(i.className); + }) : + classReg(c).test(el.className); + }, + + toggleClass: function (c, condition) { + if (typeof condition !== 'undefined' && !condition) { + return this; + } + return this.each(function (el) { + this.hasClass(el, c) ? + (el.className = trim(el.className.replace(classReg(c), ' '))) : + (el.className = trim(el.className + ' ' + c)); + }, this); + }, + + show: function (type) { + return this.each(function (el) { + el.style.display = type || ''; + }); + }, + + hide: function (elements) { + return this.each(function (el) { + el.style.display = 'none'; + }); + }, + + append: function (node) { + return this.each(function (el) { + each(normalize(node), function (i) { + el.appendChild(i); + }); + }); + }, + + prepend: function (node) { + return this.each(function (el) { + var first = el.firstChild; + each(normalize(node), function (i) { + el.insertBefore(i, first); + }); + }); + }, + + appendTo: function (target, host) { + return insert.call(this, target, host, function (t, el) { + t.appendChild(el); + }); + }, + + prependTo: function (target, host) { + return insert.call(this, target, host, function (t, el) { + t.insertBefore(el, t.firstChild); + }); + }, + + next: function () { + return this.related('nextSibling'); + }, + + previous: function () { + return this.related('previousSibling'); + }, + + related: function (method) { + return this.map( + function (el) { + el = el[method]; + while (el && el.nodeType !== 1) { + el = el[method]; + } + return el || 0; + }, + function (el) { + return el; + } + ); + }, + + before: function (node) { + return this.each(function (el) { + each(bonzo.create(node), function (i) { + el.parentNode.insertBefore(i, el); + }); + }); + }, + + after: function (node) { + return this.each(function (el) { + each(bonzo.create(node), function (i) { + el.parentNode.insertBefore(i, el.nextSibling); + }); + }); + }, + + insertBefore: function (target, host) { + return insert.call(this, target, host, function (t, el) { + t.parentNode.insertBefore(el, t); + }); + }, + + insertAfter: function (target, host) { + return insert.call(this, target, host, function (t, el) { + var sibling = t.nextSibling; + if (sibling) { + t.parentNode.insertBefore(el, sibling); + } + else { + t.parentNode.appendChild(el); + } + }); + }, + + css: function (o, v) { + // is this a request for just getting a style? + if (v === undefined && typeof o == 'string') { + return getStyle(this[0], o); + } + var iter = o; + if (typeof o == 'string') { + iter = {}; + iter[o] = v; + } + + if (ie && iter.opacity) { + // oh this 'ol gamut + iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')'; + // give it layout + iter.zoom = o.zoom || 1; + delete iter.opacity; + } + + if (v = iter['float']) { + // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat + ie ? (iter.styleFloat = v) : (iter.cssFloat = v); + delete iter['float']; + } + + var fn = function (el, p, v) { + for (var k in iter) { + if (iter.hasOwnProperty(k)) { + v = iter[k]; + // change "5" to "5px" - unless you're line-height, which is allowed + (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px); + el.style[p] = v; + } + } + }; + return this.each(fn); + }, + + offset: function (x, y) { + if (x || y) { + return this.each(function (el) { + xy(el, x, y); + }); + } + var el = this[0]; + var width = el.offsetWidth; + var height = el.offsetHeight; + var top = el.offsetTop; + var left = el.offsetLeft; + while (el = el.offsetParent) { + top = top + el.offsetTop; + left = left + el.offsetLeft; + } + + return { + top: top, + left: left, + height: height, + width: width + }; + }, + + attr: function (k, v) { + var el = this[0]; + return typeof v == 'undefined' ? + specialAttributes.test(k) ? + stateAttributes.test(k) && typeof el[k] == 'string' ? + true : el[k] : el[getAttribute](k) : + this.each(function (el) { + k == 'value' ? (el.value = v) : el[setAttribute](k, v); + }); + }, + + val: function (s) { + return (typeof s == 'string') ? this.attr('value', s) : this[0].value; + }, + + removeAttr: function (k) { + return this.each(function (el) { + el.removeAttribute(k); + }); + }, + + data: function (k, v) { + var el = this[0]; + if (typeof v === 'undefined') { + el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids); + var uid = el[getAttribute]('data-node-uid'); + uidList[uid] || (uidList[uid] = {}); + return uidList[uid][k]; + } else { + return this.each(function (el) { + el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids); + var uid = el[getAttribute]('data-node-uid'); + var o = {}; + o[k] = v; + uidList[uid] = o; + }); + } + }, + + remove: function () { + return this.each(function (el) { + el.parentNode && el.parentNode.removeChild(el); + }); + }, + + empty: function () { + return this.each(function (el) { + while (el.firstChild) { + el.removeChild(el.firstChild); + } + }); + }, + + detach: function () { + return this.map(function (el) { + return el.parentNode.removeChild(el); + }); + }, + + scrollTop: function (y) { + return scroll.call(this, null, y, 'y'); + }, + + scrollLeft: function (x) { + return scroll.call(this, x, null, 'x'); + } + }; + + function normalize(node, tag) { + return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node; + } + + function scroll(x, y, type) { + var el = this[0]; + if (x == null && y == null) { + return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type]; + } + if (isBody(el)) { + window.scrollTo(x, y); + } else { + x != null && (el.scrollLeft = x); + y != null && (el.scrollTop = y); + } + return this; + } + + function isBody(element) { + return element === window || (/^(?:body|html)$/i).test(element.tagName); + } + + function getWindowScroll() { + return { x: window.pageXOffset || html.scrollLeft, y: window.pageYOffset || html.scrollTop }; + } + + function bonzo(els, host) { + return new Bonzo(els, host); + } + + bonzo.setQueryEngine = function (q) { + query = q; + delete bonzo.setQueryEngine; + }; + + bonzo.aug = function (o, target) { + for (var k in o) { + o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]); + } + }; + + bonzo.create = function (node, tag) { + return typeof node == 'string' ? + function () { + var t = tag ? tagMap[tag.toLowerCase()] : null; + var el = doc.createElement(t || 'div'), els = []; + if (tag) { + var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g")); + each(bitches, function (m) { + m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2'); + var bah = doc.createElement(t); + bah.appendChild(doc.createDocumentFragment(m)); + el.appendChild(bah); + }); + } else { + el.innerHTML = node; + } + var nodes = el.childNodes; + el = el.firstChild; + els.push(el); + while (el = el.nextSibling) { + (el.nodeType == 1) && els.push(el); + } + return els; + + }() : is(node) ? [node.cloneNode(true)] : []; + }; + + bonzo.doc = function () { + var w = html.scrollWidth, + h = html.scrollHeight, + vp = this.viewport(); + return { + width: Math.max(w, vp.width), + height: Math.max(h, vp.height) + }; + }; + + bonzo.firstChild = function (el) { + for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) { + if (c[i].nodeType === 1) { + e = c[j = i]; + } + } + return e; + }; + + bonzo.viewport = function () { + var h = self.innerHeight, + w = self.innerWidth; + ie && (h = html.clientHeight) && (w = html.clientWidth); + return { + width: w, + height: h + }; + }; + + bonzo.isAncestor = 'compareDocumentPosition' in html ? + function (container, element) { + return (container.compareDocumentPosition(element) & 16) == 16; + } : 'contains' in html ? + function (container, element) { + return container !== element && container.contains(element); + } : + function (container, element) { + while (element = element.parentNode) { + if (element === container) { + return true; + } + } + return false; + }; + + var old = context.bonzo; + bonzo.noConflict = function () { + context.bonzo = old; + return this; + }; + context['bonzo'] = bonzo; + +}(this);!function ($) { + + var b = bonzo; + b.setQueryEngine($); + $.ender(b); + $.ender(b(), true); + $.ender({ + create: function (node) { + return $(b.create(node)); + } + }); + + $.id = function (id) { + return $([document.getElementById(id)]); + }; + + function indexOf(ar, val) { + for (var i = 0; i < ar.length; i++) { + if (ar[i] === val) { + return i; + } + } + return -1; + } + + function uniq(ar) { + var a = [], i, j; + label: + for (i = 0; i < ar.length; i++) { + for (j = 0; j < a.length; j++) { + if (a[j] == ar[i]) { + continue label; + } + } + a[a.length] = ar[i]; + } + return a; + } + + $.ender({ + parents: function (selector, closest) { + var collection = $(selector), j, k, p, r = []; + for (j = 0, k = this.length; j < k; j++) { + p = this[j]; + while (p = p.parentNode) { + if (indexOf(collection, p) !== -1) { + r.push(p); + if (closest) break; + } + } + } + return $(uniq(r)); + }, + + closest: function (selector) { + return this.parents(selector, true); + }, + + first: function () { + return $(this[0]); + }, + + last: function () { + return $(this[this.length - 1]); + }, + + next: function () { + return $(b(this).next()); + }, + + previous: function () { + return $(b(this).previous()); + }, + + appendTo: function (t) { + return b(this.selector).appendTo(t, this); + }, + + prependTo: function (t) { + return b(this.selector).prependTo(t, this); + }, + + insertAfter: function (t) { + return b(this.selector).insertAfter(t, this); + }, + + insertBefore: function (t) { + return b(this.selector).insertBefore(t, this); + }, + + siblings: function () { + var i, l, p, r = []; + for (i = 0, l = this.length; i < l; i++) { + p = this[i]; + while (p = p.previousSibling) { + p.nodeType == 1 && r.push(p); + } + p = this[i]; + while (p = p.nextSibling) { + p.nodeType == 1 && r.push(p); + } + } + return $(r); + }, + + children: function () { + var el, r = []; + for (i = 0, l = this.length; i < l; i++) { + if (!(el = b.firstChild(this[i]))) { + continue; + } + r.push(el); + while (el = el.nextSibling) { + el.nodeType == 1 && r.push(el); + } + } + return $(uniq(r)); + }, + + height: function (v) { + return v ? this.css('height', v) : parseInt(this.css('height'), 10); + }, + + width: function (v) { + return v ? this.css('width', v) : parseInt(this.css('width'), 10); + } + }, true); + +}(ender || $); + +!function () { var exports = {}, module = { exports: exports }; !function (doc) { + var loaded = 0, fns = [], ol, f = false, + testEl = doc.createElement('a'), + domContentLoaded = 'DOMContentLoaded', + addEventListener = 'addEventListener', + onreadystatechange = 'onreadystatechange'; + + /^loade|c/.test(doc.readyState) && (loaded = 1); + + function flush() { + loaded = 1; + for (var i = 0, l = fns.length; i < l; i++) { + fns[i](); + } + } + doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() { + doc.removeEventListener(domContentLoaded, fn, f); + flush(); + }, f); + + + testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() { + if (/^c/.test(doc.readyState)) { + doc.detachEvent(onreadystatechange, ol); + flush(); + } + })); + + var domReady = testEl.doScroll ? + function (fn) { + self != top ? + !loaded ? + fns.push(fn) : + fn() : + !function () { + try { + testEl.doScroll('left'); + } catch (e) { + return setTimeout(function() { + domReady(fn); + }, 50); + } + fn(); + }(); + } : + function (fn) { + loaded ? fn() : fns.push(fn); + }; + + (typeof module !== 'undefined') && module.exports ? + (module.exports = {domReady: domReady}) : + (window.domReady = domReady); + +}(document); $.ender(module.exports); }.call($); +/*! + * qwery.js - copyright @dedfat + * https://github.com/ded/qwery + * Follow our software http://twitter.com/dedfat + * MIT License + */ + +!function (context, doc) { + + var c, i, j, k, l, m, o, p, r, v, + el, node, len, found, classes, item, items, token, + id = /#([\w\-]+)/, + clas = /\.[\w\-]+/g, + idOnly = /^#([\w\-]+$)/, + classOnly = /^\.([\w\-]+)$/, + tagOnly = /^([\w\-]+)$/, + tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/, + html = doc.documentElement, + tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/, + specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g, + simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/, + attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/, + chunker = new RegExp(simple.source + '(' + attr.source + ')?'); + + function array(ar) { + r = []; + for (i = 0, len = ar.length; i < len; i++) { + r[i] = ar[i]; + } + return r; + } + + var cache = function () { + this.c = {}; + }; + cache.prototype = { + g: function (k) { + return this.c[k] || undefined; + }, + s: function (k, v) { + this.c[k] = v; + return v; + } + }; + + var classCache = new cache(), + cleanCache = new cache(), + attrCache = new cache(), + tokenCache = new cache(); + + function q(query) { + return query.match(chunker); + } + + function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) { + var m, c, k; + if (tag && this.tagName.toLowerCase() !== tag) { + return false; + } + if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) { + return false; + } + if (idsAndClasses && (classes = idsAndClasses.match(clas))) { + for (i = classes.length; i--;) { + c = classes[i].slice(1); + if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) { + return false; + } + } + } + if (wholeAttribute && !value) { + o = this.attributes; + for (k in o) { + if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) { + return this; + } + } + } + if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) { + return false; + } + return this; + } + + function loopAll(tokens) { + var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els, + root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc; + if (!root) { + return r; + } + els = root.getElementsByTagName(tag); + for (i = 0, l = els.length; i < l; i++) { + el = els[i]; + if (item = interpret.apply(el, intr)) { + r.push(item); + } + } + return r; + } + + function clean(s) { + return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1')); + } + + function checkAttr(qualify, actual, val) { + switch (qualify) { + case '=': + return actual == val; + case '^=': + return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val)))); + case '$=': + return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$'))); + case '*=': + return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val)))); + case '~=': + return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)'))); + case '|=': + return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)'))); + } + return false; + } + + function _qwery(selector) { + var r = [], ret = [], i, l, + tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)); + tokens = tokens.slice(0); + if (!tokens.length) { + return r; + } + r = loopAll(tokens); + if (!tokens.length) { + return r; + } + // loop through all descendent tokens + for (j = 0, l = r.length, k = 0; j < l; j++) { + node = r[j]; + p = node; + // loop through each token + for (i = tokens.length; i--;) { + z: // loop through parent nodes + while (p !== html && (p = p.parentNode)) { + if (found = interpret.apply(p, q(tokens[i]))) { + break z; + } + } + } + found && (ret[k++] = node); + } + return ret; + } + + function boilerPlate(selector, _root, fn) { + var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc); + if (selector === window || isNode(selector)) { + return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : []; + } + if (selector && typeof selector === 'object' && isFinite(selector.length)) { + return array(selector); + } + if (m = selector.match(idOnly)) { + return (el = doc.getElementById(m[1])) ? [el] : []; + } + if (m = selector.match(tagOnly)) { + return array(root.getElementsByTagName(m[1])); + } + return false; + } + + function isNode(el) { + return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9)); + } + + function uniq(ar) { + var a = [], i, j; + label: + for (i = 0; i < ar.length; i++) { + for (j = 0; j < a.length; j++) { + if (a[j] == ar[i]) { + continue label; + } + } + a[a.length] = ar[i]; + } + return a; + } + + function qwery(selector, _root) { + var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc); + if (!root || !selector) { + return []; + } + if (m = boilerPlate(selector, _root, qwery)) { + return m; + } + return select(selector, root); + } + + var isAncestor = 'compareDocumentPosition' in html ? + function (element, container) { + return (container.compareDocumentPosition(element) & 16) == 16; + } : 'contains' in html ? + function (element, container) { + container = container == doc || container == window ? html : container; + return container !== element && container.contains(element); + } : + function (element, container) { + while (element = element.parentNode) { + if (element === container) { + return 1; + } + } + return 0; + }, + + select = (doc.querySelector && doc.querySelectorAll) ? + function (selector, root) { + if (doc.getElementsByClassName && (m = selector.match(classOnly))) { + return array((root).getElementsByClassName(m[1])); + } + return array((root).querySelectorAll(selector)); + } : + function (selector, root) { + var result = [], collection, collections = [], i; + if (m = selector.match(tagAndOrClass)) { + items = root.getElementsByTagName(m[1] || '*'); + r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)')); + for (i = 0, l = items.length, j = 0; i < l; i++) { + r.test(items[i].className) && (result[j++] = items[i]); + } + return result; + } + for (i = 0, items = selector.split(','), l = items.length; i < l; i++) { + collections[i] = _qwery(items[i]); + } + for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) { + var ret = collection; + if (root !== doc) { + ret = []; + for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) { + // make sure element is a descendent of root + isAncestor(element, root) && ret.push(element); + } + } + result = result.concat(ret); + } + return uniq(result); + }; + + qwery.uniq = uniq; + var oldQwery = context.qwery; + qwery.noConflict = function () { + context.qwery = oldQwery; + return this; + }; + context['qwery'] = qwery; + +}(this, document);!function (doc) { + var q = qwery.noConflict(); + function create(node, root) { + var el = (root || doc).createElement('div'), els = []; + el.innerHTML = node; + var nodes = el.childNodes; + el = el.firstChild; + els.push(el); + while (el = el.nextSibling) { + (el.nodeType == 1) && els.push(el); + } + return els; + }; + $._select = function (s, r) { + return /^\s* nav fieldset[role=site-search]').after('
').next(); + var select = $(fieldset).append('').children(); + select.append(''); + $($('body > nav ul[role=main-nav] a').concat($('body > nav ul[role=subscription] a'))).each(function(link) { + select.append('') + }); + select.bind('change', function(event){ + if (select.val()) window.location.href = select.val(); + }); +} +function addSidebarToggler() { + $('#articles').before('»').previous().bind('click', function(e){ + e.preventDefault(); + if($('body').hasClass('collapse-sidebar')){ + $('body').removeClass('collapse-sidebar'); + e.target.innerHTML = '»'; + } else { + $('body').addClass('collapse-sidebar'); + e.target.innerHTML = '«'; + } + }); +} +function testFeatures() { + var features = ['maskImage']; + $(features).map(function(feature){ + if(Modernizr.testAllProps(feature)) { + $('html').addClass(feature); + } else { + $('html').addClass('no-'+feature); + } + }); +} + +function addDivLines(){ + $('div.highlight pre code').each(function(el){ + var content = bonzo(el).html(); + var lines = content.split('\n'); + var count = lines.length; + bonzo(lines).each(function(line, index){ + if(line == '') line = ' '; + lines[index] = '
' + line + '
'; + }); + $(el).html(lines.join('')); + }); +} +function preToTable(){ + $('div.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); + }); +} +$.domReady(function(){ + testFeatures(); + addDivLines(); + preToTable(); + getNav(); + addSidebarToggler(); +}); + +// iOS scaling bug fix +// Rewritten version +// By @mathias, @cheeaun and @jdalton +// Source url: https://gist.github.com/901295 +(function(doc) { + var addEvent = 'addEventListener', + type = 'gesturestart', + qsa = 'querySelectorAll', + scales = [1, 1], + meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; + function fix() { + meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; + doc.removeEventListener(type, fix, true); + } + if ((meta = meta[meta.length - 1]) && addEvent in doc) { + fix(); + scales = [.25, 1.6]; + doc[addEvent](type, fix, true); + } +}(document)); diff --git a/themes/classic/source/javascripts/pinboard.js b/themes/classic/source/javascripts/pinboard.js new file mode 100644 index 0000000..52577e2 --- /dev/null +++ b/themes/classic/source/javascripts/pinboard.js @@ -0,0 +1,56 @@ +function pinboardNS_fetch_script(url) { + //document.writeln(''); + (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/themes/classic/source/javascripts/twitter.js b/themes/classic/source/javascripts/twitter.js new file mode 100644 index 0000000..eda13c9 --- /dev/null +++ b/themes/classic/source/javascripts/twitter.js @@ -0,0 +1,80 @@ +// JSON-P Twitter fetcher for Octopress +// (c) Brandon Mathis // MIT Lisence +function getTwitterFeed(user, count, replies) { + feed = new jXHR(); + feed.onerror = function (msg,url) { + $('#tweets li.loading').addClass('error').text("Twitter's busted"); + } + feed.onreadystatechange = function(data){ + if (feed.readyState === 4) { + var tweets = new Array(); + for (i in data){ + if(tweets.length < count){ + if(replies || data[i].in_reply_to_user_id == null){ + tweets.push(data[i]); + } + } + } + showTwitterFeed(tweets, user); + } + }; + feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+(parseInt(count)+60)+"&callback=?"); + feed.send(); +} + +function showTwitterFeed(tweets, twitter_user){ + var timeline = document.getElementById('tweets'); + timeline.innerHTML=''; + for (t in tweets){ + timeline.innerHTML+='
  • '+'

    '+''+prettyDate(tweets[t].created_at)+''+linkifyTweet(tweets[t].text)+'

    '+'
  • '; + } +} +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/themes/classic/source/stylesheets/screen.css b/themes/classic/source/stylesheets/screen.css new file mode 100644 index 0000000..ce9beff --- /dev/null +++ b/themes/classic/source/stylesheets/screen.css @@ -0,0 +1 @@ +@charset "UTF-8";html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}#articles a,#articles + aside a{color:#1863a1}#articles a:visited,#articles + aside a:visited{color:#4f1175}#articles a:focus,#articles + aside a:focus{color:#033b6a}#articles a:hover,#articles + aside a:hover{color:#033b6a}.group,body > header,body > nav,body > footer,body #articles > article,body > nav + div,body > nav + div > div{*zoom:1}.group:after,body > header:after,body > nav:after,body > footer:after,body #articles > article:after,body > nav + div:after,body > nav + div > div:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}body{-webkit-text-size-adjust:none;max-width:1400px;position:relative;margin:0 auto}body > header,body > nav,body > footer,body #articles > article{padding-left:18px;padding-right:18px}@media only screen and (min-width: 480px){body > header,body > nav,body > footer,body #articles > article{padding-left:18px;padding-right:18px}}@media only screen and (min-width: 768px){body > header,body > nav,body > footer,body #articles > article{padding-left:24px;padding-right:24px}}@media only screen and (min-width: 992px){body > header,body > nav,body > footer,body #articles > article{padding-left:30px;padding-right:30px}}body > header{font-size:.8em;padding-top:1.5em;padding-bottom:1.5em}.toggle-sidebar{display:none}#articles{width:100%}#articles + aside{display:none}@media only screen and (min-width: 550px){body > header{font-size:1em}}@media only screen and (min-width: 768px){body{-webkit-text-size-adjust:auto}body > header{font-size:1.2em}body > nav + div{padding:0;margin:0 auto}body > nav + div > div{margin-right:240px}#articles{padding-top:12px;padding-bottom:12px;float:left}#articles + aside{width:210px;padding:0 15px 15px;display:block;float:left;margin:0 -100% 0 0}body > div > div{position:relative}.collapse-sidebar > div > div{margin-right:10px}.collapse-sidebar #articles + aside{display:none}.collapse-sidebar .toggle-sidebar{right:-1px;background-color:#eeeeee;border-right-width:0;text-indent:2px;border-left:1px solid #dcdcdc;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0.3em;-webkit-border-bottom-left-radius:0.3em;-o-border-bottom-left-radius:0.3em;-ms-border-bottom-left-radius:0.3em;-khtml-border-bottom-left-radius:0.3em;border-bottom-left-radius:0.3em;color:#aaaaaa}.collapse-sidebar .toggle-sidebar:hover{color:#888888}.toggle-sidebar{outline:none;position:absolute;right:-21px;top:0;width:20px;font-size:1.2em;line-height:1.1em;padding-bottom:.1em;text-indent:-1px;text-decoration:none;color:#cccccc;-moz-border-radius-bottomright:0.3em;-webkit-border-bottom-right-radius:0.3em;-o-border-bottom-right-radius:0.3em;-ms-border-bottom-right-radius:0.3em;-khtml-border-bottom-right-radius:0.3em;border-bottom-right-radius:0.3em;text-align:center;background:#f7f7f7;border-bottom:1px solid #dcdcdc;border-right:1px solid #dcdcdc;display:inline-block}.toggle-sidebar:hover{color:#999999}}@media only screen and (min-width: 992px){body > *{font-size:1.1em}body > header{font-size:1.3em}body > nav + div > div{margin-right:300px}#articles{padding-top:15px;padding-bottom:15px}#articles + aside{width:260px;padding:0 20px 20px}}.heading,body > header h1,h1,h2,h3,h4,h5,h6{font-family:"Georgia", "PT Sans", "Helvetica Neue", Arial, sans-serif;font-weight:bold}.sans,body > nav a,#articles + aside section,body > footer{font-family:"Helvetica Neue", Arial, sans-serif}.serif,body{font-family:Georgia, Times, "Times New Roman", serif}.mono,.pre,html .gist .gist-file .gist-syntax .gist-highlight pre,pre{font-family:Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace}body > header h1{font-size:2em;font-weight:normal;line-height:1.2em;margin-bottom:0.6667em}body{line-height:1.5em;color:black}h1,h2,h3,h4,h5,h6{text-rendering:optimizelegibility;margin-bottom:1em;font-weight:normal}h1{font-size:2em;line-height:1.3334em}h2,section h1{font-size:1.5em}h3,section h2,section section h1{font-size:1.3em}h4,section h3,section section h2,section section section h1{font-size:1em}h5,section h4,section section h3{font-size:.9em}h6,section h5,section section h4,section section section h3{font-size:.8em}p,blockquote,ul,ol{margin-bottom:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}ol ol{list-style-type:lower-alpha}ul ul,ol ol{margin-left:1.75em}li{margin-bottom:.5em}strong{font-weight:bold}em{font-style:italic}sup,sub{font-size:0.8em;position:relative;display:inline-block}sup{top:-0.5em}sub{bottom:-0.5em}q{font-style:italic}q:before{content:"\201C"}q:after{content:"\201D"}em,dfn{font-style:italic}strong,dfn{font-weight:bold}del,s{text-decoration:line-through}abbr,acronym{border-bottom:1px dotted;cursor:help}sub,sup{line-height:0}hr{margin-bottom:0.2em}small{font-size:.8em}big{font-size:1.2em}blockquote{font-style:italic;position:relative;margin-left:1.2em}blockquote > p:first-child:before{content:"\201C";position:absolute;top:0.1em;left:-0.5em;font-size:3em;color:#dddddd}blockquote > p:last-child:after{content:"\201D";position:relative;top:0.3em;line-height:0;font-size:2em;color:#dddddd}blockquote + p > cite{margin-left:1.2em;text-align:right}blockquote + p > cite:before{content:'– ';color:#555555}blockquote + p > cite a{font-style:italic}body > header{background-color:#333333}body > header h1{display:inline-block;margin:0}body > header h1 a,body > header h1 a:visited{color:#f2f2f2;text-decoration:none}body > nav{position:relative;background-color:#cccccc;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e0e0e0), color-stop(50%, #cccccc), color-stop(100%, #b0b0b0));background:-webkit-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-moz-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-o-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:linear-gradient(#e0e0e0,#cccccc,#b0b0b0);border-top:1px solid #f2f2f2;border-bottom:1px solid #8c8c8c;padding-top:.35em;padding-bottom:.35em}body > nav form{-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box;margin:0;padding:0}body > nav form .search{padding:.25em .5em 0;font-size:.85em;line-height:1em;width:95%;-moz-border-radius:0.5em;-webkit-border-radius:0.5em;-o-border-radius:0.5em;-ms-border-radius:0.5em;-khtml-border-radius:0.5em;border-radius:0.5em;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box;-moz-box-shadow:#d1d1d1 0 1px;-webkit-box-shadow:#d1d1d1 0 1px;-o-box-shadow:#d1d1d1 0 1px;box-shadow:#d1d1d1 0 1px;background-color:#f2f2f2;border:1px solid #b3b3b3;color:#888}body > nav form .search:focus{color:#444;border-color:#80b1df;-moz-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-webkit-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-o-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;background-color:#fff;outline:none}body > nav fieldset[role=site-search]{float:right;width:48%}body > nav fieldset[role=mobile-nav]{float:left;width:48%}body > nav fieldset[role=mobile-nav] select{width:100%;font-size:.8em;border:1px solid #888}body > nav ul{display:none}@media only screen and (min-width: 550px){body > nav{font-size:.9em}body > nav ul{margin:0;padding:0;border:0;overflow:hidden;*zoom:1;float:left;display:block;padding-top:.25em}body > nav ul li{list-style-image:none;list-style-type:none;margin-left:0px;white-space:nowrap;display:inline;float:left;padding-left:0;padding-right:0}body > nav ul li:first-child,body > nav ul li.first{padding-left:0}body > nav ul li:last-child{padding-right:0}body > nav ul li.last{padding-right:0}body > nav ul[role=subscription]{margin-left:.8em;float:right}body > nav ul[role=subscription] li:last-child a{padding-right:0}body > nav ul li{margin:0}body > nav a{color:#6b6b6b;text-shadow:#ebebeb 0 1px;float:left;text-decoration:none;font-size:.9em;padding:.1em 0;line-height:1.5em}body > nav a:visited{color:#6b6b6b}body > nav a:hover{color:#2b2b2b}body > nav li + li{border-left:1px solid #b0b0b0;margin-left:.8em}body > nav li + li a{padding-left:.8em;border-left:1px solid #dedede}body > nav fieldset[role=mobile-nav]{display:none}body > nav fieldset[role=site-search]{width:100%}body > nav form{float:right;text-align:left;width:182px;padding-left:.8em}body > nav form .search{width:93%;font-size:.95em;line-height:1.2em}}@media only screen and (min-width: 992px){body > nav form{width:235px}}.maskImage ul[role=subscription] li,.maskImage ul[role=subscription] a{border:0;padding:0}.maskImage a[rel=subscribe-rss]{position:relative;top:-2px;width:24px;height:24px;-moz-mask-image:url('/images/rss.png?1305289158');-webkit-mask-image:url('/images/rss.png?1305289158');-o-mask-image:url('/images/rss.png?1305289158');-ms-mask-image:url('/images/rss.png?1305289158');-khtml-mask-image:url('/images/rss.png?1305289158');mask-image:url('/images/rss.png?1305289158');-moz-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;-o-mask-repeat:no-repeat;-ms-mask-repeat:no-repeat;-khtml-mask-repeat:no-repeat;mask-repeat:no-repeat;text-indent:-999999em;background-color:#dedede;border:0;padding:0}.maskImage a[rel=subscribe-rss]:hover:after{background-color:#969696}.maskImage a[rel=subscribe-rss]:after{content:"";-moz-mask-image:url('/images/rss.png?1305289158');-webkit-mask-image:url('/images/rss.png?1305289158');-o-mask-image:url('/images/rss.png?1305289158');-ms-mask-image:url('/images/rss.png?1305289158');-khtml-mask-image:url('/images/rss.png?1305289158');mask-image:url('/images/rss.png?1305289158');-moz-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;-o-mask-repeat:no-repeat;-ms-mask-repeat:no-repeat;-khtml-mask-repeat:no-repeat;mask-repeat:no-repeat;width:24px;height:24px;position:absolute;top:-1px;left:0;background-color:#b0b0b0}html{background:#252525 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAb1BMVEUAAAAdHR0eHR4eHh4eHh8fHx8gICAhISEiISIiIiIjIyMkJCQlJCUlJSUmJSYmJiYnJycoKCgpKCkqKisqKywrKywsKy0sLC0tLC4tLS4tLS8uLi8uLjAvLzAwLzEAAAAAAAAAAAAAAAAAAAAAAADZ8HsjAAAAJXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMGCw4PcEyLoAAAAZdJREFUaN7tmFlvwkAQg4cSoClHQsvRAmkyXv7/b6w3BFH15EjmAc2DX2xZn6IIsmvZV6KhrAWIQKUMKhXt6hhFG7V9jC5sXNO5uCEmFDWgSDCgXPsuL2qICUUNKBIMKLf8xs5uiAkFBpQb/5XOa8j9UGBAaeFr8X9DTCilAUWCAaWlr/jfDTGhVAYU2RtQWjxd/d4QE4rFs8jegNLyqffnhphQ1IAiwYDSwW3ke0NMKGpA6eb+9qUh90OBAaW7e/WnhphQSgOKBANKt3vH6ZhqQCkNKBIMKN3vUKdjascUg03tdEz15c6XO1/ufLnz5c6XO1/ufLnz5c6XO1/ufLnz5c6XO1/ufLnz5c6Xu+6Xu4QaAekQmjBIGPSioq1IGPVpP0Q1dkr1gMEjNKXdpz2ghtFW9BlFO20aA5kzeKbGQJ5DMwY5gwk1pZ0rsgx4oj2hprTntV03ZrNDY0w7o6I9YYNRtKdNQ6odgw31AhQFtGDwymBNFbS3itUaWNB+o5a0l7RjtKD9Dt01jV3T2Ci2WyDaq0PjAzgEkrGstE8ZAAAAAElFTkSuQmCC') top left}body{background-color:#333333;border:0 0 1px 0 solid #181818}body > div{background-color:#eeeeee;border-bottom:1px solid #8c8c8c}body > div > div{background-color:#f7f7f7;border-right:1px solid #dcdcdc}@media only screen and (min-width: 1400px){body{border:1px solid #181818;border-top:0}}.side-shadow-border,#articles + aside section h1,#articles + aside li{-moz-box-shadow:white 0 1px;-webkit-box-shadow:white 0 1px;-o-box-shadow:white 0 1px;box-shadow:white 0 1px}#articles + aside{padding-top:1.2em}#articles + aside section{font-size:.8em;line-height:1.5em;margin-bottom:1.5em}#articles + aside section h1{margin:1.5em 0 0;padding-bottom:.2em;border-bottom:1px solid #dcdcdc}#articles + aside section h1 + p{padding-top:.4em}#articles + aside ul{margin-bottom:0.5em}#articles + aside li{list-style:none;padding:.5em 0;margin:0;border-bottom:1px solid #dcdcdc}#articles + aside li p:last-child{margin-bottom:0}#articles + aside a{color:inherit;-moz-transition-property:color;-webkit-transition-property:color;-o-transition-property:color;transition-property:color;-moz-transition-duration:0.5s;-webkit-transition-duration:0.5s;-o-transition-duration:0.5s;transition-duration:0.5s}#articles + aside:hover a,#articles + aside:hover #tweets a{color:#1863a1}#articles + aside #recent_posts time{text-transform:uppercase;font-size:.9em;color:#666}#articles + aside #tweets a{color:#666;text-decoration:none}#articles + aside #tweets a:hover{text-decoration:underline}#articles + aside #tweets li:hover a[href*='status']{color:#666}#articles + aside #tweets p{position:relative;padding-right:1.4em}#articles + aside #tweets a[href*='status']{color:#ccc;position:absolute;top:0;right:-0.5em;text-decoration:none;padding:0 .5em .1em;text-shadow:#fff 0 1px}#articles + aside #tweets a[href*='status'] span:last-child{display:none;font-size:.7em}#articles + aside #tweets a[href*='status'] span:first-child{font-size:1.1em}#articles + aside #tweets a[href*='status']:hover{background:#e5e5e5;-moz-box-shadow:#eeeeee -2px 2px 8px 8px;-webkit-box-shadow:#eeeeee -2px 2px 8px 8px;-o-box-shadow:#eeeeee -2px 2px 8px 8px;box-shadow:#eeeeee -2px 2px 8px 8px;-moz-border-radius:1em;-webkit-border-radius:1em;-o-border-radius:1em;-ms-border-radius:1em;-khtml-border-radius:1em;border-radius:1em;text-decoration:none;line-height:1.2em}#articles + aside #tweets a[href*='status']:hover span:first-child{display:none}#articles + aside #tweets a[href*='status']:hover span:last-child{display:inline-block}#articles + aside #tweets a[href*='status']:hover span:last-child{color:#444}#articles + aside #pinboard_linkroll .pin-title,#articles + aside #pinboard_linkroll .pin-description{display:block;margin-bottom:.5em}#articles + aside #pinboard_linkroll .pin-tag{text-decoration:none}#articles + aside #pinboard_linkroll .pin-tag:hover{text-decoration:underline}#articles + aside #pinboard_linkroll .pin-tag:after{content:','}#articles + aside #pinboard_linkroll .pin-tag:last-child:after{content:''}#articles + aside .delicious-posts a.delicious-link{margin-bottom:.5em;display:block}#articles + aside .delicious-posts p{font-size:1em}.aside-alt-link,#articles + aside #tweets a[href*='twitter.com/search'],#articles + aside #pinboard_linkroll .pin-tag{color:#999}.aside-alt-link:hover,#articles + aside #tweets a[href*='twitter.com/search']:hover,#articles + aside #pinboard_linkroll .pin-tag:hover{color:#555}#articles > article{padding-bottom:1em}#articles > article:last-child{margin-bottom:0;border-bottom:none}#articles > article h2{padding-top:0.8em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAABCAYAAACsXeyTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAFUlEQVQIHWNIS0sr/v//PwMMDzY+ADqMahlW4J91AAAAAElFTkSuQmCC') top left repeat-x}#articles > article .byline + time:before,#articles > article .byline + time + time:before{content:"\2022 ";padding:0 .3em 0 .2em;display:inline-block;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}#articles > article header{padding-top:2em;margin-bottom:1.5em;padding-bottom:1.5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAABCAYAAACsXeyTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAFUlEQVQIHWNIS0sr/v//PwMMDzY+ADqMahlW4J91AAAAAElFTkSuQmCC') bottom left repeat-x}#articles > article header h1{margin:0}#articles > article header h1 a{text-decoration:none}#articles > article header h1 a:hover{text-decoration:underline}#articles > article header p{font-size:.9em;color:#555555;border:none;padding-top:0;margin:0;font-style:italic;font-family:"Georgia", Palatino, Times, "Times New Roman"}#articles > article .entry-content img{max-width:100%}#articles > article .meta{border-bottom:1px dashed #dddddd;text-transform:uppercase;color:#777777;padding:8px 0 5px;margin-bottom:1.5em;font-size:75%;letter-spacing:1px}#articles > article .footer{padding-top:15px}body > footer{font-size:.8em;color:#6b6b6b;text-shadow:#d9d9d9 0 1px;background-color:#ccc;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e0e0e0), color-stop(50%, #cccccc), color-stop(100%, #b0b0b0));background:-webkit-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-moz-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:-o-linear-gradient(#e0e0e0,#cccccc,#b0b0b0);background:linear-gradient(#e0e0e0,#cccccc,#b0b0b0);border-top:1px solid #f2f2f2;position:relative;padding-top:1em;padding-bottom:1em;z-index:1}body > footer a{color:#6b6b6b}body > footer a:hover{color:#2b2b2b}body > footer p:last-child{margin-bottom:0}.gutter .line-numbers{text-align:right;background:#073642 !important;border-right:1px solid #00232c;-moz-box-shadow:#083e4b -1px 0 inset;-webkit-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px}.gutter .line-numbers span{color:#586e75 !important}html .gist .gist-file{margin-bottom:1.5em;border:none}html .gist .gist-file .gist-syntax{border-bottom:1px solid #515151 !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .gist-highlight pre{overflow-y:hidden;overflow-x:auto}html .gist .gist-file .gist-meta{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0b0b0), color-stop(100%, #a7a7a7));background:-webkit-linear-gradient(#b0b0b0,#a7a7a7);background:-moz-linear-gradient(#b0b0b0,#a7a7a7);background:-o-linear-gradient(#b0b0b0,#a7a7a7);background:linear-gradient(#b0b0b0,#a7a7a7);padding:0.5em;background-color:#bababa !important;border:1px solid #9c9c9c;border-top:1px solid #d0d0d0;border-bottom:1px solid #777777;font-size:.7em !important;font-family:"Helvetica Neue", Arial, sans-serif !important;color:#464646 !important;line-height:1.4em}.pre,html .gist .gist-file .gist-syntax .gist-highlight pre,pre{font-size:.8em;line-height:1.45em;padding:1em 1.2em !important;background:#002b36 !important;color:#93a1a1 !important}.pre span,html .gist .gist-file .gist-syntax .gist-highlight pre span,pre span{color:#93a1a1 !important}.pre span,html .gist .gist-file .gist-syntax .gist-highlight pre span,pre span{font-style:normal !important;font-weight:normal !important}.pre .c,html .gist .gist-file .gist-syntax .gist-highlight pre .c,pre .c{color:#586e75 !important;font-style:italic !important}.pre .cm,html .gist .gist-file .gist-syntax .gist-highlight pre .cm,pre .cm{color:#586e75 !important;font-style:italic !important}.pre .cp,html .gist .gist-file .gist-syntax .gist-highlight pre .cp,pre .cp{color:#586e75 !important;font-style:italic !important}.pre .c1,html .gist .gist-file .gist-syntax .gist-highlight pre .c1,pre .c1{color:#586e75 !important;font-style:italic !important}.pre .cs,html .gist .gist-file .gist-syntax .gist-highlight pre .cs,pre .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre .err,html .gist .gist-file .gist-syntax .gist-highlight pre .err,pre .err{color:#dc322f !important;background:none !important}.pre .k,html .gist .gist-file .gist-syntax .gist-highlight pre .k,pre .k{color:#cb4b16 !important}.pre .o,html .gist .gist-file .gist-syntax .gist-highlight pre .o,pre .o{color:#93a1a1 !important;font-weight:bold !important}.pre .p,html .gist .gist-file .gist-syntax .gist-highlight pre .p,pre .p{color:#93a1a1 !important}.pre .ow,html .gist .gist-file .gist-syntax .gist-highlight pre .ow,pre .ow{color:#2aa198 !important;font-weight:bold !important}.pre .gd,html .gist .gist-file .gist-syntax .gist-highlight pre .gd,pre .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:block}.pre .gd .x,html .gist .gist-file .gist-syntax .gist-highlight pre .gd .x,pre .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:block}.pre .ge,html .gist .gist-file .gist-syntax .gist-highlight pre .ge,pre .ge{color:#93a1a1 !important;font-style:italic !important}.pre .gh,html .gist .gist-file .gist-syntax .gist-highlight pre .gh,pre .gh{color:#586e75 !important}.pre .gi,html .gist .gist-file .gist-syntax .gist-highlight pre .gi,pre .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:block}.pre .gi .x,html .gist .gist-file .gist-syntax .gist-highlight pre .gi .x,pre .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:block}.pre .gs,html .gist .gist-file .gist-syntax .gist-highlight pre .gs,pre .gs{color:#93a1a1 !important;font-weight:bold !important}.pre .gu,html .gist .gist-file .gist-syntax .gist-highlight pre .gu,pre .gu{color:#6c71c4 !important}.pre .kc,html .gist .gist-file .gist-syntax .gist-highlight pre .kc,pre .kc{color:#859900 !important;font-weight:bold !important}.pre .kd,html .gist .gist-file .gist-syntax .gist-highlight pre .kd,pre .kd{color:#268bd2 !important}.pre .kp,html .gist .gist-file .gist-syntax .gist-highlight pre .kp,pre .kp{color:#cb4b16 !important;font-weight:bold !important}.pre .kr,html .gist .gist-file .gist-syntax .gist-highlight pre .kr,pre .kr{color:#d33682 !important;font-weight:bold !important}.pre .kt,html .gist .gist-file .gist-syntax .gist-highlight pre .kt,pre .kt{color:#2aa198 !important}.pre .n,html .gist .gist-file .gist-syntax .gist-highlight pre .n,pre .n{color:#268bd2 !important}.pre .na,html .gist .gist-file .gist-syntax .gist-highlight pre .na,pre .na{color:#268bd2 !important}.pre .nb,html .gist .gist-file .gist-syntax .gist-highlight pre .nb,pre .nb{color:#859900 !important}.pre .no,html .gist .gist-file .gist-syntax .gist-highlight pre .no,pre .no{color:#b58900 !important}.pre .ne,html .gist .gist-file .gist-syntax .gist-highlight pre .ne,pre .ne{color:#268bd2 !important;font-weight:bold !important}.pre .nf,html .gist .gist-file .gist-syntax .gist-highlight pre .nf,pre .nf{color:#268bd2 !important;font-weight:bold !important}.pre .nn,html .gist .gist-file .gist-syntax .gist-highlight pre .nn,pre .nn{color:#b58900 !important}.pre .nt,html .gist .gist-file .gist-syntax .gist-highlight pre .nt,pre .nt{color:#268bd2 !important;font-weight:bold !important}.pre .nx,html .gist .gist-file .gist-syntax .gist-highlight pre .nx,pre .nx{color:#b58900 !important}.pre .vg,html .gist .gist-file .gist-syntax .gist-highlight pre .vg,pre .vg{color:#268bd2 !important}.pre .vi,html .gist .gist-file .gist-syntax .gist-highlight pre .vi,pre .vi{color:#268bd2 !important}.pre .nv,html .gist .gist-file .gist-syntax .gist-highlight pre .nv,pre .nv{color:#268bd2 !important}.pre .mf,html .gist .gist-file .gist-syntax .gist-highlight pre .mf,pre .mf{color:#2aa198 !important}.pre .m,html .gist .gist-file .gist-syntax .gist-highlight pre .m,pre .m{color:#2aa198 !important}.pre .mh,html .gist .gist-file .gist-syntax .gist-highlight pre .mh,pre .mh{color:#2aa198 !important}.pre .mi,html .gist .gist-file .gist-syntax .gist-highlight pre .mi,pre .mi{color:#2aa198 !important}.pre .s,html .gist .gist-file .gist-syntax .gist-highlight pre .s,pre .s{color:#2aa198 !important}.pre .sd,html .gist .gist-file .gist-syntax .gist-highlight pre .sd,pre .sd{color:#2aa198 !important}.pre .s2,html .gist .gist-file .gist-syntax .gist-highlight pre .s2,pre .s2{color:#2aa198 !important}.pre .se,html .gist .gist-file .gist-syntax .gist-highlight pre .se,pre .se{color:#dc322f !important}.pre .si,html .gist .gist-file .gist-syntax .gist-highlight pre .si,pre .si{color:#268bd2 !important}.pre .sr,html .gist .gist-file .gist-syntax .gist-highlight pre .sr,pre .sr{color:#2aa198 !important}.pre .s1,html .gist .gist-file .gist-syntax .gist-highlight pre .s1,pre .s1{color:#2aa198 !important}.highlight{margin-bottom:1.5em;overflow-y:hidden}.highlight .gutter pre{padding-left:.8em !important;padding-right:.8em !important}h3.filename{font-size:13px;line-height:2em;text-align:center;text-shadow:#cbcccc 0 1px 0;color:#474747;font-style:normal;margin-bottom:0;-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;font-family:"Helvetica Neue",Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaaaaa url('/images/code_bg.png?1270921258') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0} diff --git a/themes/classic/source/test/syntax.html b/themes/classic/source/test/syntax.html new file mode 100644 index 0000000..ac26554 --- /dev/null +++ b/themes/classic/source/test/syntax.html @@ -0,0 +1,397 @@ +--- +layout: default +layout: page +nometa: true +title: Syntax Highlighting Debug +--- + +

    gist_syntax_test.rb

    +{% gist 996818 test.rb %} + +

    syntax_test.diff

    +{% highlight diff %} +@@ -590,7 +590,7 @@ class SpritesTest < Test::Unit::TestCase + it "should generate a sprite from nested folders" do + css = render <<-SCSS +- @import "nested/*.png"; ++ @import "nested/**/*.png"; + @include all-nested-sprites; + SCSS + assert_correct css, <<-CSS + +{% endhighlight %} + +

    syntax_test.html

    +{% highlight html %} + + +A Tiny Page + + + +

    abc

    +

    def

    +

    Testing page

    + +{% endhighlight %} + +

    syntax_test.js

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

    syntax_test.rb

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

    syntax_test.php

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

    syntax_test.hs

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

    syntax_test.sh

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

    syntax_test.py

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

    syntax_test.pl

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

    syntax_test.java

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

    syntax_test.c

    +{% highlight c %} +#define UNICODE +#include + +int main(int argc, char **argv) { + int speed = 0, speed1 = 0, speed2 = 0; // 1-20 + printf("Set Mouse Speed by Maverick\n"); + + SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); + printf("Current speed: %2d\n", speed); + + if (argc == 1) return 0; + if (argc >= 2) sscanf(argv[1], "%d", &speed1); + if (argc >= 3) sscanf(argv[2], "%d", &speed2); + + if (argc == 2) // set speed to first value + speed = speed1; + else if (speed == speed1 || speed == speed2) // alternate + speed = speed1 + speed2 - speed; + else + speed = speed1; // start with first value + + SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0); + SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0); + printf("New speed: %2d\n", speed); + return 0; +} + +{% endhighlight %} + diff --git a/themes/classic/source/test/typography.haml b/themes/classic/source/test/typography.haml new file mode 100644 index 0000000..82ec313 --- /dev/null +++ b/themes/classic/source/test/typography.haml @@ -0,0 +1,114 @@ +--- +layout: page +title: Typography Testing +sidebar: none +--- + +%h1 Level 01 Heading +%h2 Level 02 Heading +%h3 Level 03 Heading +%h4 Level 04 Heading +%h5 Level 05 Heading +%h6 Level 06 Heading + + +%p + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce sodales ligula sed urna. Aliquam posuere arcu + viverra erat. Pellentesque et enim dapibus ante facilisis bibendum. Nam congue dapibus urna. Vestibulum consequat + arcu at magna. Nunc faucibus mollis lacus. Nulla tempor luctus tellus. Donec blandit lobortis pede. Vestibulum + vel pede ut urna eleifend lacinia. + +%h2 Level 02 Heading + +%p + Maecenas ligula nibh, imperdiet at, interdum eget, sagittis eu, enim. Vivamus vel urna. Donec fringilla + ullamcorper sem. In risus arcu, pellentesque cursus, faucibus cursus, consequat quis, est. Aliquam id erat. + Aliquam arcu. Phasellus vulputate. Integer sem diam, mattis vel, viverra ullamcorper, ultricies quis, nisl. Sed + sollicitudin quam ut nisi. Vivamus velit sapien, volutpat eu, faucibus id, nonummy id, urna. + +%h3 Level 03 Heading + +%p + Take it2 to the power of3 + Praesent iaculis pellentesque est. Nulla facilisi. Etiam fringilla vehicula orci. Aliquam fermentum ipsum id + nulla. Aliquam interdum laoreet leo. Cras accumsan. Nam pharetra diam id nunc. Integer blandit tellus vulputate + felis. Cras aliquam, eros in euismod aliquam, enim nisl mollis metus, quis fringilla ipsum diam ut pede. Mauris a + libero ac velit interdum pulvinar. Nunc ipsum mauris, semper rhoncus, feugiat ut, egestas id, diam. Nullam + porttitor condimentum risus. Vivamus nec enim eget nisi commodo euismod. Ut turpis. Nullam malesuada rutrum + neque. Nam sodales porta elit. Mauris mollis nisl vel augue. + +%p + And we were like Woah, and he was like Woah, and they were like WOAH! <\reference> + +%p + %abbr(title="For The Win!") FTW! +%p + +%h3 Unordered lists +%ul + %li Lorem ipsum dolor sit amet + %li Consectetur adipisicing elit + %li Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua + %li Ut enim ad minim veniam + +%h3 Ordered lists +%ol + %li Consectetur adipisicing elit + %li Sed do eiusmod tempor incididunt ut labore + %li Et dolore magna aliqua + +%h3 Blockquotes +%blockquote + %p + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +%h3 Tables +%table + %caption + Jimi Hendrix - albums + %thead + %tr + %th Album + %th Year + %th Price + %tfoot + %tr + %td Album + %td Year + %td Price + %tbody + %tr + %td Are You Experienced + %td 1967 + %td $10.00 + %tr + %td Axis: Bold as Love + %td 1967 + %td $12.00 + %tr + %td Electric Ladyland + %td 1968 + %td $10.00 + %tr + %td Band of Gypsys + %td 1970 + %td $12.00 +%p + %a(href="#")Link + %br/ + %strong <strong> + %br/ + %del <del> deleted + %br/ + %dfn <dfn> dfn + %br/ + %em <em> emphasis + %br/ + +%tt + <tt> + Pellentesque tempor, dui ut ultrices viverra, neque urna blandit nisi, id accumsan dolor est vitae risus. +%hr