diff options
52 files changed, 671 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..654f8e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*~ +_cache +_site +hakyll +hakyll.o +hakyll.hi diff --git a/css/original.css b/css/original.css new file mode 100644 index 0000000..a6bfd5d --- /dev/null +++ b/css/original.css @@ -0,0 +1,17 @@ +#wrapper{width:811px;} +#header{background:transparent url('../images/theme/content_top.png') no-repeat;} +#top_bar{padding-top:74px;} +#rss-feed{ position:relative;top:35px; } +#content{background: #FFF url('../images/theme/content_middle.png') repeat-y;width:769px;} +#content-body{width:547px;} +#footer{background:transparent url('../images/theme/content_bottom.png') no-repeat;} +#footer .text{width:785px;} +ul#front_menu{width:548px;} +.expand{width:768px !important;} +.hentry{width:548px;overflow:hidden;} +.cat_tags{background:#FFF url('../images/theme/tags_category.png') no-repeat;width:540px;} +.cat_tags_close{background:#FFF url('../images/theme/tags_category.png') 0 -81px no-repeat;width:548px;} +.cat_tags_continue{background:#FFF url('../images/theme/tags_category_continue.png') no-repeat;width:540px;} +.cat_tags_continue_close{background:#FFF url('../images/theme/tags_category_continue.png') 0 -81px no-repeat;width:548px;} +.cat_tags .category{width:400px;} +.cat_tags .continue{padding-right:10px;}
\ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..42f9919 --- /dev/null +++ b/css/style.css @@ -0,0 +1,235 @@ +/* +Theme Name: LightWord +Theme URI: http://www.lightword-design.com/ +Description: Simply clever theme with two or three columns, adsense support, fixed-width, widget-ready and threaded comments. Compatible with WordPress 2.9 and above, valid XHTML & CSS + WP3 ready. +Author: Andrei Luca +Template: lightword +Version: 2.0.0.6 +Tags: white, light, two-columns, right-sidebar, fixed-width, theme-options, translation-ready, threaded-comments, custom-header,three-columns +License: GNU General Public License v2.0 +License URI: http://www.gnu.org/licenses/gpl-2.0.html +*/ + +/* RESET */ +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,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;vertical-align:baseline;background:transparent;margin:0;padding:0;} + +/* BASIC */ +*:focus{outline:none;} +.clear{clear:both;} +body{background-color:#2C2C29;font-family:Tahoma;font-size:11px;color:#2C2C29;} +p{font-size:1.2em;padding:2px;margin:1px 0 15px;} +a{color:#807D7A;} +h2{background-color:#FFF;border-bottom:1px solid #DCDCDB;letter-spacing:-1px;font-size:24px;padding-bottom:3px;font-weight:400;margin:10px 0 3px 0;font-family:Vera, Helvetica, Georgia;} +h3#reply-title{background:transparent;border-bottom:1px solid #DCDCDB;letter-spacing:-1px;font-size:24px;padding-bottom:3px;font-weight:400;margin:10px 0 3px 0;font-family:Vera, Helvetica, Georgia;} +h2 a{font-weight:700;border:0;text-decoration:none;color:#2C2C29;display:block;} +h3{font-size:1.8em;margin: 15px 0 15px;} +h4{font-size:1.5em;margin: 15px 0 15px;} +h5{font-size:1.4em;margin: 15px 0 15px;} +h6{font-size:1.3em;margin: 15px 0 15px;} +hr{color:#DCDCDB;background-color:#DCDCDB;height:1px;border:0px;} +pre{width:100%; white-space:pre-wrap;} +dl{padding:.4em 0 1em;} +dt{text-decoration:underline;font-weight:bold;} +dd{} + +/* LAYOUT */ +#wrapper{margin:0 auto;text-align:left;} +h1#logo,h1#logo a{font-family:Vera, Helvetica,Georgia;padding:0;margin-top:7px;font-size:36px;color:#FFF;text-decoration:none;text-transform:uppercase;} +h1#logo small{color:#FFF;font-size:12px;display:block;margin:-2px 2px 1px;height:20px;} +h1#logo small a{font-size:12px;border-bottom:1px solid #FFF;} +#rss-feed{float:right;width:190px;font-weight:700;position:relative;left:7px;color:#FFF;text-decoration:none;} +#header{height:113px;} +#top{z-index:1;cursor:pointer;display:block;margin-left:5px;position:relative;bottom:-55px;margin-top:-55px;min-height:56px;} +#top_cufon{cursor:pointer;display:block;margin-left:5px;position:relative;bottom:-55px;margin-top:-55px;min-height:56px;} +#top_cufon small{ width:600px; } +#top strong{display:none;} +#top_bar{padding:72px 23px 0 20px;} +#searchform{float:right;width:191px;height:26px;background:url(../images/theme/searchbox.png) no-repeat;position:relative;top:1px;} +#header #s{border:1px solid #000;float:left;border:0;width:154px;background:none;color:#ACACAB;margin:4px 0 0 4px;} +#header #go{float:right;width:25px;height:26px;background-color:transparent;border:0px;cursor:pointer;} +#content{padding:15px 10px 15px 15px;margin:-7px 0 0 7px;z-index:20 !important;position:relative;} +#content-body{display:inline-block;min-height:300px;height:auto !important;margin-right:25px;} +* html #content-body{float:left;margin-right:24px;} *+html #content-body{float:left;margin-right:28px;} +#footer{height:8px;} +#footer .text{color:#8D837B;font-size:10px;display:block;padding:12px;} +#footer .top{position:relative;right:5px;top:-5px;display:inline;float:right;} +* html #footer .top{top:-20px;} *+html #footer .top{top:-20px;} +#footer em, #footer em a{font-style:normal;color:#41413E;} + +/* FRONT MENU */ + +ul#front_menu{float:left;text-transform:uppercase;position:relative;top:-4px;} +* html .expand{margin-top:-13px;} *+html .expand{margin-top:-13px;} +#front_menu li{list-style:none;float:left;margin-right:4px;} +* html #front_menu li{height:36px;display:inline;} +#front_menu li a{height:36px;display:block;background:url(../images/theme/nav.png) no-repeat left top;padding-left:15px;color:#2C2C29;font:700 .88em/26px Arial, Helvetica, sans-serif;text-decoration:none;cursor:pointer;} +#front_menu li a span{height:36px;display:block;background:url(../images/theme/nav.png) no-repeat right top;line-height:36px;padding-right:15px;} +#front_menu li a:hover,#front_menu li a.s{background-position:left bottom;} +#front_menu li a:hover span,#front_menu li a.s span{background-position:right bottom;} +* html #front_menu li a,* html #front_menu li a span{width:1%;white-space:nowrap;cursor:pointer;} +* html #front_menu li a span{position:relative;} +#front_menu li {background:none;float:left; position:relative;} +#front_menu ul {width:200px;position:absolute;display:none; background:#FFF;border-left:1px solid #ACACAB;border-right:1px solid #ACACAB;border-bottom:1px solid #ACACAB;-moz-border-radius-bottomleft: 5px;-moz-border-radius-bottomright: 5px;-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius:5px;} +#front_menu ul li a, #front_menu ul li a span{margin:-3px -1px;height:auto;background:none;} +#front_menu li ul a {width:200px; float:left; white-space:nowrap;} +#front_menu li ul a:hover{text-decoration:underline;} +#front_menu ul ul {top:auto;} +#front_menu li ul ul {left:1em; } +#front_menu li:hover ul ul, #front_menu li:hover ul ul ul, #front_menu li:hover ul ul ul ul {display:none;} + +/* WP */ +blockquote{margin:20px 10px 10px 5px;border-left:4px solid #DDD;padding:0 5px 0 5px;text-align:justify;} +.commenttext blockquote{border-left:4px solid #B6B6B5;} +.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;padding-top:4px;} +.gallery-caption{ border:1px solid #ddd;text-align:center;background-color:#f3f3f3;padding-top:4px; } +.wp-caption img{border:none;margin:0;padding:0;} +.wp-caption p.wp-caption-text{font-size:11px;line-height:17px;color:#111;margin:0;padding:0 4px 5px;} +.alignleft,img.alignleft{float:left;margin:5px 10px 5px 0;} +.alignright,img.alignright{float:right;margin:5px 0 5px 10px;} +.aligncenter,div.aligncenter,img.aligncenter{text-align:center;display:block;margin:10px auto;} +abbr, acronym, span.abbr{cursor:help;border-bottom:1px dotted #000;} +table{margin:.5em 0 1em;} +table td,table th{text-align:left;border-right:1px solid #fff;padding:.9em .8em;} +table th{background-color:#eee;text-transform:uppercase;font-weight:bold;border-bottom:1px solid #e8e1c8;} +table td{background-color:#f5f5f5;} +table th a{color:#d6f325;} +table tr.even td{background-color:#eee;} +table.nostyle td,table.nostyle th,table.nostyle tr.even td,table.nostyle tr:hover td{border:0;background:none;background-color:transparent;} +.wp_syntax { width:auto; } +.wp_syntax table { border:0 !important; } +.wp_syntax table td { border:0 !important; } +img.wp-smiley{border:0px;vertical-align:middle;} + +/* CONTENT */ +#content-body ul,#content-body ol{margin:15px 30px;font-size:12px;} +#content-body ul li{list-style:circle;margin-bottom:4px;} +.hentry{height:auto!important;margin-bottom:1em;} +.sticky h2 a{color:red;} +.comm_date{background:transparent url(../images/theme/date_comm_box.png) no-repeat;height:100px;width:57px;position:absolute;text-align:center;margin:0 0 0 -72px;z-index:2;} +/*.only_date{background:transparent url(../images/theme/data_box.png) no-repeat !important;height:67px !important;}*/ +* html .comm_date{margin-top:10px;} *+html .comm_date{margin-top:10px;} +.comm_date .data{margin-left:-1px;padding-top:10px;display:block;font-weight:700;text-transform:uppercase;letter-spacing:-1px;} +.comm_date .nr_comm{padding-top:14px;color:#FFF;display:block;font-weight:700;} +.comm_date .nr_comm_spot, .comm_date .dsq-comment-count{display:block;margin:0 9px 0 8px;padding:6px 0 5px 0;} +.comm_date .data .j{font-size:24px;display:block;} + +.only_date{background:transparent url(../images/theme/data_box.png) no-repeat;height:100px;width:57px;position:absolute;text-align:center;margin:0 0 0 -72px;z-index:2;} +* html .only_date{margin-top:10px;} *+html .only_date{margin-top:10px;} +.only_date .data{margin-left:-1px;padding-top:10px;display:block;font-weight:700;text-transform:uppercase;letter-spacing:-1px;} +.only_date .nr_comm{padding-top:14px;color:#FFF;display:block;font-weight:700;} +.only_date .nr_comm_spot, .only_date .dsq-comment-count{display:block;margin:0 9px 0 8px;padding:6px 0 5px 0;} +.only_date .data .j{font-size:24px;display:block;} + +.nr_comm a{color:#FFF;text-decoration:none;} +.cat_tags{margin-top:10px;padding:8px 0 5px 10px;} +.cat_tags_close{max-height:3px;height:3px;margin-bottom:20px;} +* html .cat_tags_close{margin-top:-8px;} +*:first-child+html .cat_tags{padding:9px 8px 0;margin-bottom:-3px;} +.cat_tags .continue{float:right;padding-right:10px;width:100px;text-align:center;} +.cat_tags .category{float:left;} +.cat_tags a,.cat_tags .continue a{color:#2C2C29;} +.cat_tags a:hover{color:#ACACAB;} + + +/* SIDEBAR */ +.content-sidebar{width:191px;display:inline-block;overflow:hidden;vertical-align:top;} +.content-sidebar input{padding:3px;border:1px solid #E5E2E0;margin-bottom:2px;} +.content-sidebar h3{margin:8px 0 0 0 !important;display:block;background:#FFF url(../images/theme/sidebar_h3.png) no-repeat;height:22px;width:181px;font-weight:700;font-size:11px;padding:9px 0 0 10px;} +.content-sidebar h3 a{text-decoration:none;color:#2C2C29;line-height:13px;} +.content-sidebar ul{list-style:none;width:191px;padding:2px;} +.content-sidebar li{list-style:none;} +* html .content-sidebar ul{width:160px;} +.content-sidebar ul li,.content-sidebar-2 ul li{display:block;color:#9D9793;line-height:16px;padding:4px 0 4px;border-bottom:1px solid #EEE;width:185px;} +.content-sidebar ul ul li,.content-sidebar-2 ul ul li{border:0px;padding-bottom:0;width:140px;} +.content-sidebar ul li.page_item ul li.page_item , .content-sidebar ul li.cat-item ul.children li.cat-item{background:url(../images/theme/arrow.gif) 0 11px no-repeat;padding-left:11px;margin-top:-3px;} +.content-sidebar ul li.page_item ul li.page_item ul li.page_item, .content-sidebar ul li.cat-item ul.children li.cat-item ul.children li.cat-item{background:url(../images/theme/arrow.gif) 0 11px no-repeat;padding-left:12px;} +.content-sidebar ul li a:hover,.content-sidebar .recentcomments a:hover{color:#AAA;} +.content-sidebar .textwidget, .content-sidebar select{padding:3px;margin:10px 2px 10px 2px;width:188px;} +.content-sidebar .recentcomments{display:block;border-bottom:1px solid #EEE;color:#9D9793;padding:4px 0px;line-height:16px;} +.content-sidebar .right {float:right; width:91px;overflow:hidden;} +.content-sidebar .left {float:left; width:91px;overflow:hidden;} + +/* COMMENTS */ +#content-body input{padding:3px;border:1px solid #E5E2E0;margin-bottom:2px;} +#content-body textarea{border:1px solid #E5E2E0;width:97.5%;height:100px;padding:5px;font: 12px Verdana;} +#content-body input#submit {width: 88px;height: 25px;border: 0px;background:#2C2C29 url(../images/theme/submit_btn.png) no-repeat;font: bold 12px Helvetica,Georgia,serif;color:#FFF;text-align:center;cursor:pointer;} +#comentarii ol.commentlist{width:100%;margin:0;padding:0;font-size:11px;} +ol.commentlist{list-style:none;} +ol.commentlist li{list-style-type:none;margin-bottom: 10px;background-color: #F5F5F5;border: 1px solid #DDD;padding: 15px 10px 4px 10px;} +ol.commentlist li ul{list-style-type: none;margin-left: 7px !important;} +ol.commentlist li ul.children li{list-style:none !important;background-color: #FFF;width:100%;font-size:11px;} +ol.commentlist li ul.children li ul.children li{background-color:#F5F5F5;} +ol.commentlist li div.comment_content{float: left;width: 100%;} +ol li div.comment_content div.commentmetadata{color: #999;border-bottom: 1px solid #ddd;margin:0px 8px 5px;} +ol li div.comment_content div.commentmetadata a{color: #bbb;text-decoration: none;} +ol li div.comment_content p{padding:0 0 16px 6px;} +ol li div.comment_content .reply{margin:8px;} +strong.comment_author{font-size:125%;} +strong.comment_author a{text-decoration:underline !important;} +a#cancel-comment-reply-link{text-transform:uppercase;font-size:80%;margin-left:10px;} +li #respond{padding:7px;} +li #respond h2, li #respond h3#reply-title{display:none;} +li.comment-author-admin{border:1px solid #BBBBBB !important; } + +/* COMMENTS / TRACKBACKS TABS */ +#tabsContainer p{margin-bottom:-2px !important;} +#tabsContainer{margin-top:2em;} +#tabsContainer a{text-decoration:none;} +.trackbacks{background-color:#EEEEEE;margin-bottom:5px;padding:10px;border-bottom:1px solid #CCC;} +.tab-content {background-color:#FFF;display: none;} +.tab-content p.no{padding-top:10px;} +.tab-content.selected { display: block; } +.clear_tab{clear:both;border-bottom:3px solid #2C2C29;margin-top:-21px;} +.tabs {display: block;float: left;height: 30px;padding: 0 0 0 20px;line-height: 29px;position: relative;top: 1px;color: #787878;text-decoration: none;margin: 0 0px 0 0;} +.subscribe_comments {display: block;float: right;height: 30px;padding: 0 0 0 20px;line-height: 29px;position: relative;top: 1px;color: #787878;text-decoration: none;margin: 0 5px 0 0;} +.tabs span {display: block;float: left;padding: 0 20px 0 0;cursor:pointer;} +.tabs.selected {background-color:#2C2C29;color:#FFF; } +div.selected{background-color:#FFF;color:#2C2C29;} +p.comment-form-author label, p.comment-form-author span.required,p.comment-form-email label, p.comment-form-email span.required,p.comment-form-url label{font-size:10px;margin-left:5px;} + +/* PAGINATION */ +.nav_link{margin-top:15px;border-top:1px solid #DDD;background-color:#F5F5F5;padding:10px;} +.nav_link a{text-decoration:none;} +.nav_link .page_number{border:1px solid #DDD;padding:2px 10px;background-color:#EDEDED;} +.nav_link a .page_number{border:1px solid #DDD;background-color:#F5F5F5;padding:2px 10px;} +.newer_older a{margin-top:1em;text-decoration:none;font-size:12px;letter-spacing:-1px;font-weight:700;} +.newer a{background:#FFF url(../images/theme/older_newer.png) no-repeat;width:129px;padding:6px 3px 6px 0px;float:left;cursor:pointer;text-align:center;height:14px;} +.older a{background:#FFF url(../images/theme/older_newer.png) no-repeat;width:129px;padding:6px 3px 6px 2px;float:right;cursor:pointer;text-align:center;height:14px;} +.next_previous_links{margin-top:10px;border-top:1px solid #DDD;background-color:#F5F5F5;padding:0 5px;} +.next_previous_links_comments{margin-top:10px;border-bottom:1px solid #DDD;background-color:#F5F5F5;padding:0 5px;} + +/* WIDGETS */ +#calendar_wrap{margin:0;} +#wp-calendar {font-size: 1.2em;empty-cells: show;line-height:5px;margin-top:10px;} +#wp-calendar a {font-size: 1.0em;display: block;font-weight: bold;} +#wp-calendar #next a {padding-right: 10px;text-align: right;} +#wp-calendar #prev a {padding-left: 10px;text-align: left;} +#wp-calendar caption {width:98.8%;padding:10px 5px;margin:0;text-transform: uppercase;font-weight: lighter;font-size: .8em;color: #444;text-align: left;background:#C2C2C2;} +#wp-calendar th {padding: 4px 5px 4px 5px;font-weight: 700;font-size: .8em;color: #666;text-align: center;background: #f4f4f4;} +#wp-calendar td {padding: 6px 5px 6px 5px;text-align: center;} +#wp-calendar td#today {background: #e0e0e0;} +#wp-calendar td#prev a {padding: 0;text-align: left;font-weight: normal;} +#wp-calendar td#next a {padding: 0;text-align: right;font-weight: normal;} +a.rsswidget img{display:none;} +div.rssSummary{margin:5px;} + +/* ARCHIVE */ +.archive_h2{text-transform:uppercase;cursor:pointer;font-size:16px;} +.archive_h2 span{font-size:12px;} +ul.hide{list-style-type:none;display:none;} + +/* OTHERS */ +.promote{border:1px solid #B6B6B5;padding:10px 10px 5px 10px;margin-top:1em;background:#EDEDED url(../images/theme/rss.png) 90% -35px no-repeat;} +.promote h3{margin-left:3px; } +.post-edit-link{display:block;background-color:#F5F5F5;margin-bottom:1em;padding:5px;color:#B6B6B5;} +.post-edit-link:hover{background-color:#FFFFD3;color:#2C2C29;} +.comment-edit-link{background-color:#EFEFEF;padding:1px 5px;color:#999999;border-left:1px solid #DDD;} +.about_author{background-color:#F5F5F5;padding:1px 10px;} +.bypostauthor{ background-color:#F5F5F5; } +.about_author h4{ font-size:12px;padding-top:3px; } +.moderation{font-size:80%;} +#breadcrumbs{background-color:#F5F5F5;padding:5px;} +ol.snap_nav{list-style:none;display:block;} +ol.snap_nav li{display:inline; background-color:#F4F4F4;padding:3px;} +ol.snap_nav .snap_selected{background-color:#DDD;} +.simple_date{background:url(../images/theme/date.png) 5px 50% no-repeat;padding:8px 25px;background-color:#EEE;margin-bottom:1em;}
\ No newline at end of file diff --git a/hakyll.hs b/hakyll.hs new file mode 100644 index 0000000..daac1a5 --- /dev/null +++ b/hakyll.hs @@ -0,0 +1,206 @@ +{-# LANGUAGE OverloadedStrings #-} +module Main where + +import Prelude hiding (id) +import Control.Arrow +import Control.Category (id) +import Control.Monad +import Data.Function (on) +import Data.List hiding (group) +import Data.Maybe +import Data.Monoid (mempty, mconcat) + +import System.FilePath (takeFileName) +import System.Locale (defaultTimeLocale, TimeLocale) +import Data.Time.Calendar +import Data.Time.Clock (UTCTime (..)) +import Data.Time.Format (parseTime, formatTime) + +import Text.Printf + +import Hakyll + +main :: IO () +main = hakyll $ do + -- Compress CSS + match "css/*" $ do + route idRoute + compile compressCssCompiler + + -- Images + match "images/**" $ do + route idRoute + compile copyFileCompiler + + -- Render posts + group "posts" $ do + match (inPostGroup "posts/*") $ do + route $ setExtension ".html" + compile $ pageCompiler + >>> addDate + >>> addTagCloud + >>> addArchiveLinks + >>> renderTagsField "prettytags" (fromCapture "tags/*") + >>> applyTemplateCompiler "templates/post.html" + >>> applyTemplateCompiler "templates/default.html" + >>> relativizeUrlsCompiler + + -- Index + match "index.html" $ route idRoute + create "index.html" $ constA mempty + >>> arr (setField "title" "Home") + >>> addTagCloud + >>> addArchiveLinks + >>> requireAllA allPosts (id *** arr recentFirst >>> addPosts) + >>> applyTemplateCompiler "templates/index.html" + >>> applyTemplateCompiler "templates/default.html" + >>> relativizeUrlsCompiler + + match "posts/*" $ compile $ readPageCompiler + >>> (id &&& getIdentifier) + >>> setFieldA "path" (arr $ fromMaybe "" . runRoutes (setExtension ".html")) + >>> (id &&& arr (getField "path")) + >>> setFieldA "url" (arr ('/':)) + + -- Tags + create "tags" $ + requireAll allPosts (\_ ps -> readTags ps :: Tags String) + + -- Add a tag list compiler for every tag + match "tags/*" $ route $ setExtension ".html" + metaCompile $ require_ "tags" + >>> arr tagsMap + >>> arr (map (\(t, p) -> (tagIdentifier t, makeTagList t p))) + + -- Archive + create "archive" $ + requireAll allPosts (\_ -> Tags . groupTuples . reverse . sortBy (compare `on` fst) . catMaybes . map (\page -> getDate page >>= (\date -> return (date, page)))) + + match "archive/**" $ route $ setExtension ".html" + metaCompile $ require_ "archive" + >>> arr tagsMap + >>> arr (map (\(m, p) -> (archiveIdentifier m, makeArchive m p))) + + -- Render RSS feed + match "rss.xml" $ route idRoute + create "rss.xml" $ requireAll_ allPosts + >>> mapCompiler (arr $ copyBodyToField "description") + >>> renderRss feedConfiguration + + -- Read templates + match "templates/*" $ compile templateCompiler + where + postGroup = Just "posts" + + inPostGroup :: Pattern a -> Pattern a + inPostGroup p = patternIntersection [inGroup postGroup, p] + + notInPostGroup :: Pattern a -> Pattern a + notInPostGroup p = patternIntersection [complement $ inGroup postGroup, p] + + allPosts :: Pattern (Page String) + allPosts = notInPostGroup "posts/*" + + +patternIntersection :: [Pattern a] -> Pattern a +patternIntersection patterns = predicate $ flip all patterns . flip matches + + +getUTCMaybe :: TimeLocale -- ^ Output time locale + -> Page a -- ^ Input page + -> Maybe UTCTime -- ^ Parsed UTCTime +getUTCMaybe locale page = msum + [ fromPublished "%a, %d %b %Y %H:%M:%S UT" + , fromPublished "%Y-%m-%dT%H:%M:%SZ" + , fromPublished "%B %e, %Y %l:%M %p" + , fromPublished "%B %e, %Y" + , getFieldMaybe "path" page >>= parseTime' "%Y-%m-%d" . + intercalate "-" . take 3 . splitAll "-" . takeFileName + ] + where + fromPublished f = getFieldMaybe "published" page >>= parseTime' f + parseTime' f str = parseTime locale f str + +getDate :: Page a -> Maybe String +getDate = liftM ((\(y, m, _) -> printf "%04d/%02d" y m) . toGregorian . utctDay) . getUTCMaybe defaultTimeLocale + +groupTuples :: Eq a => [(a, b)] -> [(a, [b])] +groupTuples = map (fst . head &&& map snd) . groupBy ((==) `on` fst) + + +addPosts :: Compiler (Page String, [Page String]) (Page String) +addPosts = setFieldA "posts" $ + mapCompiler (addDate + >>> addTagCloud + >>> renderTagsField "prettytags" (fromCapture "tags/*") + >>> applyTemplateCompiler "templates/post_short.html") + >>> arr mconcat + >>> arr pageBody + +addDate = arr $ renderDateField "date" "<span class=\"data\"><span class=\"j\">%e</span>%b/%y</span>" "" + +addTagCloud = requireA "tags" (setFieldA "tagcloud" renderTagCloud') + where + renderTagCloud' :: Compiler (Tags String) String + renderTagCloud' = renderTagCloud tagIdentifier 100 300 + +addArchiveLinks = requireA "archive" (setFieldA "archive" renderArchive) + where + renderArchive :: Compiler (Tags String) String + renderArchive = arr tagsMap + >>> arr (map (\(s, p) -> "<li><a href=\"/archive/" ++ s ++ ".html\" title=\"" ++ prettyMonth s ++ "\">" ++ prettyMonth s ++ "</a> (" ++ show (length p) ++ ")</li>")) + >>> arr mconcat + +prettyMonth :: String -> String +prettyMonth s = month ++ " " ++ year + where + year = take 4 s + month = case (drop 5 s) of + "01" -> "January" + "02" -> "February" + "03" -> "March" + "04" -> "April" + "05" -> "May" + "06" -> "June" + "07" -> "July" + "08" -> "August" + "09" -> "September" + "10" -> "October" + "11" -> "November" + "12" -> "December" + _ -> "Unknown" + + +tagIdentifier :: String -> Identifier (Page String) +tagIdentifier = fromCapture "tags/*" + +archiveIdentifier :: String -> Identifier (Page String) +archiveIdentifier = fromCapture "archive/*" + +makeTagList :: String -> [Page String] -> Compiler () (Page String) +makeTagList tag posts = constA (mempty, posts) + >>> addPosts + >>> addTagCloud + >>> addArchiveLinks + >>> arr (setField "title" ("Posts tagged ‘" ++ tag ++ "’")) + >>> applyTemplateCompiler "templates/posts.html" + >>> applyTemplateCompiler "templates/default.html" + >>> relativizeUrlsCompiler + +makeArchive :: String -> [Page String] -> Compiler () (Page String) +makeArchive month posts = constA (mempty, posts) + >>> addPosts + >>> addTagCloud + >>> addArchiveLinks + >>> arr (setField "title" ("Archive for " ++ prettyMonth month)) + >>> applyTemplateCompiler "templates/posts.html" + >>> applyTemplateCompiler "templates/default.html" + >>> relativizeUrlsCompiler + +feedConfiguration :: FeedConfiguration +feedConfiguration = FeedConfiguration + { feedTitle = "Universe Factory" + , feedDescription = "Because one universe is not enough" + , feedAuthorName = "NeoRaider" + , feedRoot = "http://blog.universe-factory.net/" + } diff --git a/images/theme/arrow.gif b/images/theme/arrow.gif Binary files differnew file mode 100644 index 0000000..6c3de0e --- /dev/null +++ b/images/theme/arrow.gif diff --git a/images/theme/banner.png b/images/theme/banner.png Binary files differnew file mode 100644 index 0000000..88c6c03 --- /dev/null +++ b/images/theme/banner.png diff --git a/images/theme/christmas_head.png b/images/theme/christmas_head.png Binary files differnew file mode 100644 index 0000000..97a2308 --- /dev/null +++ b/images/theme/christmas_head.png diff --git a/images/theme/content_bottom.gif b/images/theme/content_bottom.gif Binary files differnew file mode 100644 index 0000000..df31a29 --- /dev/null +++ b/images/theme/content_bottom.gif diff --git a/images/theme/content_bottom.png b/images/theme/content_bottom.png Binary files differnew file mode 100644 index 0000000..f8befb5 --- /dev/null +++ b/images/theme/content_bottom.png diff --git a/images/theme/content_middle.png b/images/theme/content_middle.png Binary files differnew file mode 100644 index 0000000..6192a72 --- /dev/null +++ b/images/theme/content_middle.png diff --git a/images/theme/content_top.png b/images/theme/content_top.png Binary files differnew file mode 100644 index 0000000..078769f --- /dev/null +++ b/images/theme/content_top.png diff --git a/images/theme/content_top_no_rss.png b/images/theme/content_top_no_rss.png Binary files differnew file mode 100644 index 0000000..10f9ecf --- /dev/null +++ b/images/theme/content_top_no_rss.png diff --git a/images/theme/data_box.png b/images/theme/data_box.png Binary files differnew file mode 100644 index 0000000..c665dbc --- /dev/null +++ b/images/theme/data_box.png diff --git a/images/theme/date.png b/images/theme/date.png Binary files differnew file mode 100644 index 0000000..47a72fd --- /dev/null +++ b/images/theme/date.png diff --git a/images/theme/date_comm_box.png b/images/theme/date_comm_box.png Binary files differnew file mode 100644 index 0000000..7a65b41 --- /dev/null +++ b/images/theme/date_comm_box.png diff --git a/images/theme/header-image.png b/images/theme/header-image.png Binary files differnew file mode 100644 index 0000000..d1aa39c --- /dev/null +++ b/images/theme/header-image.png diff --git a/images/theme/header-image_blank.png b/images/theme/header-image_blank.png Binary files differnew file mode 100644 index 0000000..1524173 --- /dev/null +++ b/images/theme/header-image_blank.png diff --git a/images/theme/nav.png b/images/theme/nav.png Binary files differnew file mode 100644 index 0000000..aca94bb --- /dev/null +++ b/images/theme/nav.png diff --git a/images/theme/nav2.png b/images/theme/nav2.png Binary files differnew file mode 100644 index 0000000..41ea33a --- /dev/null +++ b/images/theme/nav2.png diff --git a/images/theme/older_newer.png b/images/theme/older_newer.png Binary files differnew file mode 100644 index 0000000..f8da8c2 --- /dev/null +++ b/images/theme/older_newer.png diff --git a/images/theme/rss.png b/images/theme/rss.png Binary files differnew file mode 100644 index 0000000..651bf6c --- /dev/null +++ b/images/theme/rss.png diff --git a/images/theme/searchbox.png b/images/theme/searchbox.png Binary files differnew file mode 100644 index 0000000..b7b9c7d --- /dev/null +++ b/images/theme/searchbox.png diff --git a/images/theme/sidebar_h3.png b/images/theme/sidebar_h3.png Binary files differnew file mode 100644 index 0000000..6f67ff9 --- /dev/null +++ b/images/theme/sidebar_h3.png diff --git a/images/theme/single-page-template/content_bottom.png b/images/theme/single-page-template/content_bottom.png Binary files differnew file mode 100644 index 0000000..c1d51d5 --- /dev/null +++ b/images/theme/single-page-template/content_bottom.png diff --git a/images/theme/single-page-template/content_top.png b/images/theme/single-page-template/content_top.png Binary files differnew file mode 100644 index 0000000..6efda00 --- /dev/null +++ b/images/theme/single-page-template/content_top.png diff --git a/images/theme/single-page-template/content_top_no_rss.png b/images/theme/single-page-template/content_top_no_rss.png Binary files differnew file mode 100644 index 0000000..3127042 --- /dev/null +++ b/images/theme/single-page-template/content_top_no_rss.png diff --git a/images/theme/submit_btn.png b/images/theme/submit_btn.png Binary files differnew file mode 100644 index 0000000..d924d46 --- /dev/null +++ b/images/theme/submit_btn.png diff --git a/images/theme/tags_category.png b/images/theme/tags_category.png Binary files differnew file mode 100644 index 0000000..924e6f2 --- /dev/null +++ b/images/theme/tags_category.png diff --git a/images/theme/tags_category_continue.png b/images/theme/tags_category_continue.png Binary files differnew file mode 100644 index 0000000..b0bfed1 --- /dev/null +++ b/images/theme/tags_category_continue.png diff --git a/images/theme/wider/content_bottom.gif b/images/theme/wider/content_bottom.gif Binary files differnew file mode 100644 index 0000000..df6d7d0 --- /dev/null +++ b/images/theme/wider/content_bottom.gif diff --git a/images/theme/wider/content_bottom.png b/images/theme/wider/content_bottom.png Binary files differnew file mode 100644 index 0000000..c745a5f --- /dev/null +++ b/images/theme/wider/content_bottom.png diff --git a/images/theme/wider/content_middle.png b/images/theme/wider/content_middle.png Binary files differnew file mode 100644 index 0000000..dca28cd --- /dev/null +++ b/images/theme/wider/content_middle.png diff --git a/images/theme/wider/content_top.png b/images/theme/wider/content_top.png Binary files differnew file mode 100644 index 0000000..74044ca --- /dev/null +++ b/images/theme/wider/content_top.png diff --git a/images/theme/wider/content_top_no_rss.png b/images/theme/wider/content_top_no_rss.png Binary files differnew file mode 100644 index 0000000..91de548 --- /dev/null +++ b/images/theme/wider/content_top_no_rss.png diff --git a/images/theme/wider/tags_category.png b/images/theme/wider/tags_category.png Binary files differnew file mode 100644 index 0000000..d3404ff --- /dev/null +++ b/images/theme/wider/tags_category.png diff --git a/images/theme/wider/two-sidebars/content_bottom.gif b/images/theme/wider/two-sidebars/content_bottom.gif Binary files differnew file mode 100644 index 0000000..f86d7bf --- /dev/null +++ b/images/theme/wider/two-sidebars/content_bottom.gif diff --git a/images/theme/wider/two-sidebars/content_bottom.png b/images/theme/wider/two-sidebars/content_bottom.png Binary files differnew file mode 100644 index 0000000..4921784 --- /dev/null +++ b/images/theme/wider/two-sidebars/content_bottom.png diff --git a/images/theme/wider/two-sidebars/content_middle.png b/images/theme/wider/two-sidebars/content_middle.png Binary files differnew file mode 100644 index 0000000..e203c4d --- /dev/null +++ b/images/theme/wider/two-sidebars/content_middle.png diff --git a/images/theme/wider/two-sidebars/content_top.png b/images/theme/wider/two-sidebars/content_top.png Binary files differnew file mode 100644 index 0000000..4f5c393 --- /dev/null +++ b/images/theme/wider/two-sidebars/content_top.png diff --git a/posts/2009-11-05-a-first-post.markdown b/posts/2009-11-05-a-first-post.markdown new file mode 100644 index 0000000..3c9d4ab --- /dev/null +++ b/posts/2009-11-05-a-first-post.markdown @@ -0,0 +1,22 @@ +--- +title: A first post +author: Julius Caesar +tags: caesar, random crap +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium leo +adipiscing lectus iaculis lobortis. Vivamus scelerisque velit dignissim metus +gravida sit amet dapibus ligula tempor. Quisque sit amet viverra nunc. +Suspendisse cursus elementum ante, ut venenatis nisi dictum eu. Nulla diam +ligula, eleifend in varius quis, malesuada a nibh. Vivamus consequat +pellentesque erat non blandit. Nunc sit amet eros vel massa semper ullamcorper +quis iaculis magna. Vestibulum ullamcorper urna sit amet est elementum +pulvinar. Vestibulum consequat lacus ac quam hendrerit tincidunt. Praesent +bibendum vehicula diam, nec sagittis risus tempus a. Nulla quis odio sit amet +odio vehicula cursus ut id odio. Curabitur semper magna euismod magna mollis +venenatis. Nunc eget eleifend velit. Mauris sed posuere sem. Fusce id nunc +nisi, a aliquam orci. Suspendisse laoreet justo non enim laoreet eget consequat +velit porttitor. Aenean faucibus sodales metus at tincidunt. Donec vestibulum +leo pulvinar erat auctor ac ultrices massa euismod. Phasellus blandit cursus +magna, eget lacinia mi lobortis sed. Suspendisse ultricies enim ligula, vel +scelerisque mauris. diff --git a/posts/2009-11-10-another-post.markdown b/posts/2009-11-10-another-post.markdown new file mode 100644 index 0000000..2fffc7c --- /dev/null +++ b/posts/2009-11-10-another-post.markdown @@ -0,0 +1,16 @@ +--- +title: Another post +author: Marcus Tullius Cicero +tags: cicero, random crap +--- + +Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit. Donec +tempor ligula et quam volutpat quis fermentum eros congue. Sed ut pulvinar sem. +Sed aliquam ipsum id purus sollicitudin vulputate. Cras et mauris dui, vel +hendrerit leo. Ut metus ipsum, fermentum ac malesuada id, tempus pharetra quam. +Donec diam felis, consequat ac scelerisque cursus, gravida non lectus. Sed +faucibus elit dapibus diam elementum id varius nisi tristique. Proin consequat +faucibus neque in aliquam. Vestibulum ligula odio, pulvinar vel hendrerit +vitae, egestas ut nibh. Praesent ut velit elit, in consequat dolor. Praesent +sem enim, commodo in gravida sed, adipiscing vel eros. Lorem ipsum dolor sit +amet, consectetur adipiscing elit. Proin non aliquam nunc. diff --git a/posts/2009-11-28-a-third-post.markdown b/posts/2009-11-28-a-third-post.markdown new file mode 100644 index 0000000..afabcc7 --- /dev/null +++ b/posts/2009-11-28-a-third-post.markdown @@ -0,0 +1,20 @@ +--- +title: A third post +author: Publius Ovidius Naso +tags: epic fail, ovidius +--- + +Pellentesque tempor blandit elit, vel ultricies arcu congue egestas. Fusce +vitae rutrum nisl. Fusce id mauris libero, a venenatis tellus. Fusce iaculis, +lorem et ornare molestie, mauris risus mollis nisi, non fermentum lacus lacus +sit amet ipsum. Praesent lobortis ullamcorper dolor, eget convallis ligula +dignissim a. Suspendisse nulla nisi, congue et pharetra vel, convallis non +libero. Ut a nulla ipsum. Phasellus cursus velit id neque viverra ut +pellentesque justo posuere. Curabitur laoreet enim et velit tempor consectetur. +Donec eu pretium urna. Suspendisse vitae nisi at metus vestibulum aliquam in +sit amet nisl. Donec convallis lacinia odio, vestibulum molestie nunc feugiat +a. Suspendisse vehicula, sapien id aliquet consectetur, sem sapien ullamcorper +arcu, scelerisque porttitor elit ipsum posuere ligula. Nulla at velit eu metus +tincidunt auctor ut sit amet enim. Donec placerat dapibus nisi id facilisis. +Maecenas pellentesque pulvinar auctor. Curabitur gravida quam sit amet purus +consectetur blandit. diff --git a/posts/2009-12-04-this-blog-aint-dead.markdown b/posts/2009-12-04-this-blog-aint-dead.markdown new file mode 100644 index 0000000..0c56146 --- /dev/null +++ b/posts/2009-12-04-this-blog-aint-dead.markdown @@ -0,0 +1,13 @@ +--- +title: This blog ain't dead +author: Marcus Antonius +tags: epic fail, antonius +--- + +Etiam non felis aliquet tellus dictum vestibulum. Aliquam accumsan mauris non +lacus ultricies nec lacinia enim rhoncus. Curabitur vel tortor massa, elementum +tincidunt elit. Maecenas venenatis luctus arcu ut ullamcorper. Donec interdum +dolor eu enim tristique vel vehicula risus mollis. Nunc nec tortor quam. Nulla +a mauris arcu. Phasellus venenatis tortor vel odio tincidunt consequat. Integer +venenatis nibh vitae lectus laoreet eu feugiat nunc pretium. Integer nec turpis +metus, in fermentum lorem. diff --git a/posts/2009-12-23-almost-christmas.markdown b/posts/2009-12-23-almost-christmas.markdown new file mode 100644 index 0000000..78a1508 --- /dev/null +++ b/posts/2009-12-23-almost-christmas.markdown @@ -0,0 +1,14 @@ +--- +title: Almost Christmas! +author: Publius Vergilius Maro +tags: christmas, random crap +--- + +Morbi tincidunt eleifend ante, eu gravida ante rutrum vel. Nunc bibendum nulla +tellus, eget egestas sapien. Nam rhoncus interdum libero, eget congue orci +imperdiet eu. Quisque pellentesque fringilla urna, ac venenatis ante ultricies +et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames +ac turpis egestas. Mauris eleifend sagittis ultrices. Quisque ultrices accumsan +nisl, sed pellentesque metus porta vitae. Nulla facilisi. In et nibh tincidunt +mi volutpat pellentesque vitae nec sapien. Integer massa ipsum, pellentesque in +elementum at, cursus sit amet diam. diff --git a/templates/archiveitem.html b/templates/archiveitem.html new file mode 100644 index 0000000..60da335 --- /dev/null +++ b/templates/archiveitem.html @@ -0,0 +1,3 @@ +<li> + <a href="$url$">$title$</a> +</li> diff --git a/templates/default.html b/templates/default.html new file mode 100644 index 0000000..db34114 --- /dev/null +++ b/templates/default.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>Universe Factory - $title$</title> + + <link rel="stylesheet" id="lightword_stylesheet-css" href="/css/style.css" type="text/css" media="all" /> + <link rel="stylesheet" id="lightword_stylesheet_original-css" href="/css/original.css" type="text/css" media="all" /> + <style type="text/css"> + #content-body, x:-moz-any-link, x:default {float:none; margin-right:25px;} + </style> + </head> + + <body class="home blog"> + <div id="wrapper"> + + <div id="top_cufon"><h1 id="logo"><a name="top" title="Universe Factory" href="/">Universe Factory</a> <small>Because one universe is not enough</small></h1></div> + + <div id="header"> + <a id="rss-feed" title="Syndicate this site using RSS" href="/feed/">Subscribe via RSS</a> + + <div id="top_bar"> + <div class="center_menu"> + <ul id="front_menu" > + <li><a class="s" title="Home" href="/"><span>Home</span></a></li> + </ul> + </div> + </div> + </div> + <div id="content"> + <div id="content-body"> + $body$ + + <!--<div class="newer_older"> + <span class="newer"> </span> + <span class="older"> <a href="/2/" >Older Entries »</a></span> + </div>--> + </div> + <div class="content-sidebar"> + <h3>Blogroll</h3> + <ul class="xoxo blogroll"> + </ul> + + <h3>Tags</h3><div class="tagcloud"> + $tagcloud$ + </div> + <h3>Archive</h3> + <ul> + $archive$ + </ul> + </div><div class="clear"></div> + </div> + <div id="footer"> + <span class="text"> + Copyright © 2012 <a href="http://blog.universe-factory.net/">Universe Factory</a> · Powered by <a href="http://github.com/jaspervdj/hakyll" title="Hakyll">Hakyll</a><br/> + Based on <a href="http://www.lightword-design.com/" title="Lightword Theme">Lightword Theme</a> by Andrei Luca adapted for Hakyll + <a title="Go to top" class="top" href="#top">Go to top ↑</a> + </span> + </div> + </div> + </body> +</html> diff --git a/templates/default.html.orig b/templates/default.html.orig new file mode 100644 index 0000000..0537065 --- /dev/null +++ b/templates/default.html.orig @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>SimpleBlog - $title$</title> + <link rel="stylesheet" type="text/css" href="/css/default.css" /> + <link rel="alternate" + type="application/rss+xml" + title="SimpleBlog" + href="/rss.xml" /> + </head> + <body> + <h1>SimpleBlog - $title$</h1> + <div id="navigation"> + <a href="/">Home</a> + <a href="/posts.html">All posts</a> + </div> + + $body$ + </body> +</html> diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..55579d1 --- /dev/null +++ b/templates/index.html @@ -0,0 +1 @@ +$posts$ diff --git a/templates/post.html b/templates/post.html new file mode 100644 index 0000000..7505058 --- /dev/null +++ b/templates/post.html @@ -0,0 +1,13 @@ +<div class="post type-post status-publish format-standard hentry"> + <div class="only_date"> + $date$ + </div> + <h2>$title$</h2> + <p>$body$</p> + + <div class="cat_tags clear"> + <span class="category">Tagged as: $prettytags$</span> + <div class="clear"></div> + </div> + <div class="cat_tags_close"></div> +</div> diff --git a/templates/post_short.html b/templates/post_short.html new file mode 100644 index 0000000..06242ca --- /dev/null +++ b/templates/post_short.html @@ -0,0 +1,13 @@ +<div class="post type-post status-publish format-standard hentry"> + <div class="only_date"> + $date$ + </div> + <h2><a title="$title$" href="$url$" rel="bookmark">$title$</a></h2> + <p>$body$</p> + + <div class="cat_tags clear cat_tags_continue"> + <span class="category">Tagged as: $prettytags$</span> + <span class="continue"><a title="$title$" href="$url$">Continue reading</a></span><div class="clear"></div> + </div> + <div class="cat_tags_close cat_tags_continue_close"></div> +</div> diff --git a/templates/postitem.html b/templates/postitem.html new file mode 100644 index 0000000..ccbb58e --- /dev/null +++ b/templates/postitem.html @@ -0,0 +1,4 @@ +<li> + <a href="$url$">$title$</a> + - <em>$date$</em> - by <em>$author$</em> +</li> diff --git a/templates/posts.html b/templates/posts.html new file mode 100644 index 0000000..55579d1 --- /dev/null +++ b/templates/posts.html @@ -0,0 +1 @@ +$posts$ |