├── .gitignore └── template_packages ├── Classify ├── LICENSE ├── archive.jade ├── base.jade ├── category.jade ├── index.jade ├── post.jade └── style.scss ├── Deepure ├── README.md ├── album.jade ├── archive.jade ├── base.jade ├── image.jade ├── include │ ├── macros.jade │ └── sider.jade ├── index+tags+category.jade ├── post.jade └── sass │ ├── ie.scss │ ├── normalize.scss │ └── screen.scss ├── Farbtle ├── LICENSE ├── archive.jade ├── base.jade ├── basic.scss ├── index.jade ├── post+markdown.jade └── style.scss ├── Ink ├── 404.jade ├── LICENSE ├── README.markdown ├── archive.jade ├── base.jade ├── css │ ├── basic.css │ └── style.scss ├── img │ ├── bg.jpg │ ├── hover.png │ ├── menu.png │ └── search.png ├── index+category.jade ├── js │ └── scripts.js ├── mixins.jade ├── post.jade └── tags.jade ├── Minimal Box ├── README.md ├── archive.jade ├── base.jade ├── index+tags.jade ├── post+markdown.jade └── style.scss ├── Simpler ├── LICENSE ├── archive.jade ├── base.jade ├── css │ ├── back-top.png │ ├── basic.scss │ └── style.scss ├── include │ └── paginator.jade ├── index+tags.jade ├── markdown.jade ├── paginator.jade ├── post.jade └── scripts.coffee ├── The One ├── LICENSE ├── archive.jade ├── base.jade ├── basic.scss ├── index+tags.jade ├── post+markdown.jade └── style.scss ├── Violet ├── LICENSE ├── archive.jade ├── base.jade ├── include │ ├── paginator.jade │ └── posts_list.jade ├── index+tag.jade ├── markdown+pages.jade ├── post.jade └── style │ ├── basic.scss │ └── style.scss ├── Writer ├── LICENSE.txt ├── README.md ├── assets │ ├── css │ │ ├── normalize.css │ │ ├── nprogress.css │ │ └── style.scss │ └── js │ │ ├── jquery.fitvids.js │ │ ├── jquery.history.js │ │ ├── nprogress.js │ │ └── scripts.js ├── index+post+markdown+tags.jade └── interface.json ├── Yukina ├── 404.jade ├── LICENSE ├── README.markdown ├── base.jade ├── css │ ├── basic.css │ ├── roboto-300.woff │ ├── roboto-700.woff │ └── style.css ├── index.jade ├── interface.json └── post.jade └── default red ├── archive.jade ├── base.jade ├── categories.jade ├── css ├── basic.css └── style.scss ├── index+tags+category.jade └── post.jade /.gitignore: -------------------------------------------------------------------------------- 1 | *.py 2 | *.pyc 3 | template_packages/*.txt 4 | template_packages/default 5 | 6 | -------------------------------------------------------------------------------- /template_packages/Classify/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright © 2014 FarBox 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the “Software”), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Classify/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block content 3 | group_type = 'tags' if request.path.strip('/')=='tags' else '-date:year' 4 | entries = get_data(type='post',limit=50, sort='desc').group(group_type) 5 | 6 | for sub_title, posts in entries 7 | .archive 8 | h1= sub_title 9 | ul.listing 10 | for post in posts 11 | li.listing_item 12 | span.date= post.date.format("%Y-%m-%d") 13 | a(href=post.url, title=post.title)= post.title 14 | include include/paginator.jade -------------------------------------------------------------------------------- /template_packages/Classify/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 4 | meta(content="yes", name="apple-mobile-web-app-capable") 5 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 6 | meta(content="telephone=no", name="format-detection") 7 | meta(name="renderer", content="webkit") 8 | meta(name="keywords", content=site.configs.keywords.escaped) 9 | meta(name="description", content=site.raw_content.escaped) 10 | title 11 | block title 12 | | {{ request.args.s or site.title }} 13 | load('/template/style.scss') 14 | body 15 | #header 16 | #nav_wrap 17 | ul#nav 18 | li 19 | a(href="/") Home 20 | li 21 | a(href="/archive") Archive 22 | if has('images') 23 | li 24 | a(href='/album') Albums 25 | if not has('posts') 26 | +redirect('/album') 27 | for filename in ['links', 'about'] 28 | if has('%s.md'%filename) 29 | li 30 | a(href="/%s.md"%filename)= filename.title() 31 | #layout 32 | block content 33 | 34 | #footer 35 | a(href="https://www.farbox.com") Powered by FarBox -------------------------------------------------------------------------------- /template_packages/Classify/category.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block title 3 | if category 4 | | {{ category.title }} 5 | else 6 | +raise_404 7 | block content 8 | 9 | #category_posts 10 | h1= category.title 11 | ul 12 | for post in posts 13 | li 14 | a(href=post.url)= post.title 15 | .date= post.date.format('%d %b %Y') 16 | 17 | .pager 18 | if paginator.has_pre 19 | a.round.pre(href=paginator.pre_url) ← Newer 20 | if paginator.has_next 21 | a.round.next(href=paginator.next_url) Older → -------------------------------------------------------------------------------- /template_packages/Classify/index.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | 3 | block content 4 | new_post = get_data(type='post', limit=1, with_page=False) 5 | if new_post 6 | .new_post 7 | h2 8 | a(href=new_post.url)= new_post.title 9 | a.summary(href=new_post.url) 10 | .content= new_post.content.limit(180) 11 | 12 | ul.categories#categories 13 | for category in get_data(type='folder', level=1, min_posts_count=1, with_page=False, limit=10) 14 | li 15 | a(href="/category/{{ category.path }}") 16 | h3= category.title 17 | span {{ category.posts_count }} posts 18 | 19 | script 20 | function auto_margin(){ 21 | var e = document.getElementById('categories'); 22 | e.style.marginLeft = 0; 23 | var width = document.width || document.body.clientWidth; 24 | if (e && width > 292){ 25 | e.style.marginLeft = ( width% 296) /2 + 'px'; 26 | } 27 | } 28 | auto_margin(); 29 | window.onresize = auto_margin; -------------------------------------------------------------------------------- /template_packages/Classify/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block title 4 | | {{ post.title }} 5 | 6 | block content 7 | .post 8 | h1.title= post.title 9 | .content 10 | .post_content= post.content 11 | .info 12 | .date @{{post.date}} 13 | 14 | include include/comments.jade 15 | 16 | -------------------------------------------------------------------------------- /template_packages/Classify/style.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ 2 | html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} 3 | 4 | 5 | body{ 6 | font: 400 16px/1.62 'PT Sans', "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, Hiragino Sans GB, Microsoft YaHei, sans-serif; 7 | line-height: 1.9; 8 | width: 80%; 9 | margin: 0 auto; 10 | max-width: 920px; 11 | 12 | } 13 | 14 | h1, h2, h3{ 15 | font-family: 'PT Serif', "Georgia", "Times New Roman", Times,"Songti SC","SimSun", sans-serif; 16 | } 17 | 18 | 19 | a{ 20 | text-decoration: none; 21 | } 22 | 23 | hr { 24 | margin: 3.2em 0; 25 | border: none; 26 | border-bottom: 1px solid #eee; 27 | } 28 | 29 | table { 30 | -moz-box-sizing: border-box; 31 | box-sizing: border-box; 32 | margin: 1em 0; 33 | width: 100%; 34 | max-width: 100%; 35 | border-width: 1px; border-style: solid; 36 | background-color: transparent; } 37 | 38 | table, table tr, table tr td, table tr th{ border-color: #e5e5e5; } 39 | table th{ color: #666666; background-color: #fdfdfd; } 40 | tr th{ border-bottom-width: 1px; border-bottom-style: solid; text-align: left; } 41 | tr th, tr td{ padding: 5px 20px; border-right: 1px solid; font-size: 1rem; } 42 | tr th:last-child, tr td:last-child{ border-right: 0px; } 43 | table th{ font-weight: bold; } 44 | table tbody > tr:nth-child(odd) > td, 45 | table tbody > tr:nth-child(odd) > th { 46 | background-color: #f9f9f9; } 47 | 48 | 49 | 50 | #header { 51 | height: 50px; 52 | border-bottom: 1px solid #eee; 53 | text-align: right; 54 | 55 | #nav_wrap{ 56 | float: right; 57 | } 58 | 59 | #nav { 60 | font-size: 14px; 61 | list-style: none; 62 | margin-top: 20px; 63 | 64 | li { 65 | float: left; 66 | margin-right: 50px; 67 | 68 | a { 69 | color: #111; 70 | text-decoration: none; 71 | 72 | &:hover, &.selected { 73 | color: #000; 74 | border-bottom: 1px dashed #999; 75 | } 76 | } 77 | 78 | } 79 | } 80 | } 81 | 82 | 83 | .post{ 84 | color: #222; 85 | 86 | .title{ 87 | color: #000; 88 | font-size: 2.3em; 89 | padding: 0.5em 0 1.5em 0; 90 | margin: 1em 0 2em 0; 91 | border-bottom: 1px solid #eee; 92 | text-align: center; 93 | line-height: 1.2; 94 | } 95 | img{ 96 | max-width: 100%; 97 | } 98 | 99 | .content { 100 | margin: 0 0 3em 0; 101 | .info{ 102 | .date{ 103 | margin-top: 3em; 104 | padding: 1em 0; 105 | color: #999; 106 | text-align: right; 107 | border-top: 1px solid #eee; 108 | border-bottom: 1px solid #eee; 109 | } 110 | } 111 | 112 | p img{ 113 | margin-left: -2em; 114 | } 115 | } 116 | 117 | 118 | p{ 119 | margin-bottom: 0.5em; 120 | } 121 | 122 | a{ 123 | color: #111; 124 | border-bottom: 1px solid #ccc; 125 | &:hover{ 126 | border-bottom: 1px solid #888; 127 | } 128 | } 129 | 130 | .toc{ 131 | line-height: 2.1; 132 | border: 1px solid #eee; 133 | li{ 134 | ul{ 135 | margin: 0; 136 | padding-top: 0; 137 | } 138 | } 139 | } 140 | 141 | 142 | 143 | 144 | blockquote { 145 | color: #777; 146 | display: block; 147 | text-align: justify; 148 | border-left: 4px solid #16B0FF; 149 | margin: 1em 0 1em 1em; 150 | padding-left: 0.5em; 151 | p{ 152 | text-indent: 0; 153 | } 154 | } 155 | 156 | pre { 157 | border: none; 158 | background: none; 159 | border-top: 1px dashed #ddd; 160 | border-bottom: 1px dashed #ddd; 161 | margin: 1.2em -2px; 162 | padding: 15px 20px; 163 | font-size: 14px; 164 | font-family: Menlo, monospace; 165 | line-height: 2.0; 166 | display: block; 167 | overflow: auto; 168 | max-width: 800px; 169 | } 170 | 171 | ul, ol{ 172 | margin-left: 1em; 173 | } 174 | 175 | h1, h2, h3, h4, h5, h6{ 176 | margin: 1.5em 0 0.1em 0; 177 | } 178 | h1 { 179 | font-size: 1.6em; 180 | } 181 | h2 { 182 | font-size: 1.35em; 183 | } 184 | h3 { 185 | font-size: 1.2em; 186 | } 187 | h4, h5, h6 { 188 | font-size: 1.05em; 189 | } 190 | } 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | .new_post{ 199 | margin: 50px 0; 200 | padding-bottom: 1.5em; 201 | border-bottom: 1px solid #eee; 202 | 203 | a{ 204 | color: #000; 205 | text-decoration: none; 206 | 207 | } 208 | 209 | h2 { 210 | font-size: 2.2em; 211 | a:hover{ 212 | text-decoration: underline; 213 | } 214 | } 215 | 216 | .summary{ 217 | display: block; 218 | &:hover{ 219 | background: #f6f6f6; 220 | } 221 | img{ 222 | display: block; 223 | max-width: 100%; 224 | margin: 0 auto; 225 | } 226 | } 227 | 228 | 229 | 230 | 231 | } 232 | 233 | 234 | 235 | 236 | 237 | .categories{ 238 | list-style:none; 239 | display:block; 240 | 241 | clear: both; 242 | padding: 0; 243 | margin-top: 50px; 244 | 245 | a{ 246 | text-decoration: none; 247 | color: #333; 248 | } 249 | 250 | li{ 251 | font-size:16px; 252 | display:inline-block; 253 | *display:inline; 254 | 255 | text-align:left; 256 | 257 | position: relative; 258 | 259 | h3{ 260 | font-size: 1.2em; 261 | word-wrap:break-word; 262 | overflow:hidden; 263 | font-weight: normal; 264 | } 265 | 266 | span{ 267 | color: #999; 268 | font-size: 0.8em; 269 | } 270 | 271 | a{ 272 | margin: 20px 40px; 273 | width: 150px; 274 | float: left; 275 | height: 165px; 276 | border: 1px solid #c8c8c8; 277 | padding: 60px 30px; 278 | 279 | &:hover{ 280 | border: 1px solid #b7b7b7; 281 | -webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.2); 282 | -moz-box-shadow: 0 1px 5px rgba(0,0,0,0.2); 283 | box-shadow: 0 1px 5px rgba(0,0,0,0.2); 284 | 285 | h3{ 286 | padding-left: 2px; 287 | } 288 | } 289 | } 290 | } 291 | } 292 | 293 | 294 | 295 | #category_posts, .archive{ 296 | margin: 60px 0 100px 0; 297 | h1 { 298 | text-align: center; 299 | } 300 | ul{ 301 | margin: 0 0 15px 0; 302 | padding: 0; 303 | list-style: none; 304 | 305 | li{ 306 | padding: 20px 15px 20px; 307 | 308 | a{ 309 | color: #333; 310 | &:hover{ 311 | border-bottom: 1px solid #ccc; 312 | } 313 | } 314 | 315 | .date{ 316 | float:right; 317 | text-align: right; 318 | } 319 | } 320 | } 321 | } 322 | 323 | 324 | .pager{ 325 | position: relative; 326 | height: 57px; 327 | margin: 50px 0 0 0; 328 | 329 | a { 330 | color: #333; 331 | letter-spacing: 1px; 332 | font-size: 14px; 333 | text-decoration: none; 334 | text-align: center; 335 | 336 | &:hover { 337 | border-bottom: 1px dashed #333; 338 | } 339 | } 340 | 341 | .next { 342 | position: absolute; 343 | right: 0; 344 | } 345 | 346 | .pre { 347 | position: absolute; 348 | left: 0; 349 | } 350 | } 351 | 352 | code{ 353 | background: #fffddb; 354 | padding: 0 5px; 355 | margin: 0 2px; 356 | } 357 | 358 | pre code{ 359 | background: none; 360 | } 361 | 362 | 363 | #footer{ 364 | clear: both; 365 | margin: 50px 0 30px 0; 366 | padding-top: 20px; 367 | border-top: 1px solid #eee; 368 | text-align: center; 369 | 370 | a{ 371 | font-size: 12px; 372 | color: #999; 373 | &:hover{ 374 | color: #333; 375 | border-bottom: 1px dashed #ccc; 376 | } 377 | } 378 | } 379 | 380 | @media screen and (max-width: 480px) { 381 | body{ 382 | width: 95%; 383 | } 384 | 385 | #header{ 386 | #nav_wrap{ 387 | float: left; 388 | } 389 | #nav{ 390 | padding: 0; 391 | li{ 392 | margin-right: 15px; 393 | } 394 | } 395 | } 396 | 397 | 398 | } 399 | 400 | 401 | 402 | .hll { background-color: #ffffcc } 403 | .c { color: #60a0b0; font-style: italic } /* Comment */ 404 | /* .err { border: 1px solid #FF0000 } /* Error */ 405 | .k { color: #007020; font-weight: bold } /* Keyword */ 406 | .o { color: #666666 } /* Operator */ 407 | .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ 408 | .cp { color: #007020 } /* Comment.Preproc */ 409 | .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ 410 | .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ 411 | .gd { color: #A00000 } /* Generic.Deleted */ 412 | .ge { font-style: italic } /* Generic.Emph */ 413 | .gr { color: #FF0000 } /* Generic.Error */ 414 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 415 | .gi { color: #00A000 } /* Generic.Inserted */ 416 | .go { color: #808080 } /* Generic.Output */ 417 | .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 418 | .gs { font-weight: bold } /* Generic.Strong */ 419 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 420 | .gt { color: #0040D0 } /* Generic.Traceback */ 421 | .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 422 | .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 423 | .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 424 | .kp { color: #007020 } /* Keyword.Pseudo */ 425 | .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 426 | .kt { color: #902000 } /* Keyword.Type */ 427 | .m { color: #40a070 } /* Literal.Number */ 428 | .s { color: #4070a0 } /* Literal.String */ 429 | .na { color: #4070a0 } /* Name.Attribute */ 430 | .nb { color: #007020 } /* Name.Builtin */ 431 | .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 432 | .no { color: #60add5 } /* Name.Constant */ 433 | .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 434 | .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 435 | .ne { color: #007020 } /* Name.Exception */ 436 | .nf { color: #06287e } /* Name.Function */ 437 | .nl { color: #002070; font-weight: bold } /* Name.Label */ 438 | .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 439 | .nt { color: #062873; font-weight: bold } /* Name.Tag */ 440 | .nv { color: #bb60d5 } /* Name.Variable */ 441 | .ow { color: #007020; font-weight: bold } /* Operator.Word */ 442 | .w { color: #bbbbbb } /* Text.Whitespace */ 443 | .mf { color: #40a070 } /* Literal.Number.Float */ 444 | .mh { color: #40a070 } /* Literal.Number.Hex */ 445 | .mi { color: #40a070 } /* Literal.Number.Integer */ 446 | .mo { color: #40a070 } /* Literal.Number.Oct */ 447 | .sb { color: #4070a0 } /* Literal.String.Backtick */ 448 | .sc { color: #4070a0 } /* Literal.String.Char */ 449 | .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 450 | .s2 { color: #4070a0 } /* Literal.String.Double */ 451 | .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 452 | .sh { color: #4070a0 } /* Literal.String.Heredoc */ 453 | .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 454 | .sx { color: #c65d09 } /* Literal.String.Other */ 455 | .sr { color: #235388 } /* Literal.String.Regex */ 456 | .s1 { color: #4070a0 } /* Literal.String.Single */ 457 | .ss { color: #517918 } /* Literal.String.Symbol */ 458 | .bp { color: #007020 } /* Name.Builtin.Pseudo */ 459 | .vc { color: #bb60d5 } /* Name.Variable.Class */ 460 | .vg { color: #bb60d5 } /* Name.Variable.Global */ 461 | .vi { color: #bb60d5 } /* Name.Variable.Instance */ 462 | .il { color: #40a070 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /template_packages/Deepure/README.md: -------------------------------------------------------------------------------- 1 | key: fblog-deepure 2 | title: fblog 3 | domain: http://motype.org 4 | 5 | ======= 6 | 7 | 8 | ###链接类主题 9 | 当文章头部有link标签时,文章列表内的标题将直接链到该link 10 | 11 | Title:协议森林by-Vamei 12 | Date: 2013-02-21 21:18:54 13 | link: http://www.cnblogs.com/vamei/archive/2012/12/05/2802811.html 14 | tags: 互联网协议 15 | 16 | ###Feedback 17 | http://motype.org/post/design/theme-farbox 18 | https://github.com/deepure/fblog/issues 19 | 20 | 21 | --- 22 | 23 | ### MIT license 24 | Copyright (c) 2014 deepure 25 | 26 | Permission is hereby granted, free of charge, to any person obtaining a copy 27 | of this software and associated documentation files (the "Software"), to deal 28 | in the Software without restriction, including without limitation the rights 29 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 30 | copies of the Software, and to permit persons to whom the Software is 31 | furnished to do so, subject to the following conditions: 32 | 33 | The above copyright notice and this permission notice shall be included in 34 | all copies or substantial portions of the Software. 35 | 36 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 37 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 38 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 39 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 40 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 41 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 42 | THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Deepure/album.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | 3 | block title 4 | title= folder.title or 'Images' 5 | 6 | block content 7 | {% from "include/macros.jade" import make_pager %} 8 | albums = get_data(types=['image', 'folder'], path=folder.path, min_images_count=1, level=1, limit=6) 9 | ul.image-list.cf 10 | for album in albums 11 | if album.content_type=='folder' 12 | li.folder 13 | a(href="/album/{{album.path}}") 14 | img(src='{{album.url}}?width=320&height=214&fixed=true', title=album.title) 15 | span {{ album.images_count}} photos 16 | else 17 | li 18 | a(href="/image/{{album.path}}") 19 | img(src='{{album.url}}?width=320&height=214&fixed=true', title=album.title) 20 | 21 | +make_pager 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /template_packages/Deepure/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | {% from "include/macros.jade" import make_pager %} 3 | block content 4 | entries = get_data(type='post', limit=300, sort='desc', pager_name='archive').group('date:year', reverse=True) 5 | ul.archive-list 6 | for year, posts in entries 7 | li.list-years= year 8 | ul.listing 9 | for post in posts 10 | li.listing-item 11 | span.date= post.date.format('%Y-%m-%d') 12 | a(href=post.url, title=post.title)= post.title 13 | 14 | +make_pager(pager_name='archive') 15 | 16 | 17 | -------------------------------------------------------------------------------- /template_packages/Deepure/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | block title 4 | title= site.title 5 | meta(name="viewport", content="width=device-width; initial-scale=1; maximum-scale=1") 6 | meta(name="keywords", content=site.configs.keywords.escaped) 7 | meta(name="description", content=site.raw_content.escaped) 8 | meta(name="renderer", content="webkit") 9 | //if lt IE 9 10 | load('html5shim.googlecode.com/svn/trunk/html5.js') 11 | //if IE 12 | load('/template/sass/ie.scss') 13 | load('fonts') 14 | load('/template/sass', ('normalize.scss', 'screen.scss')) 15 | body 16 | #wrap 17 | header#header.cf 18 | .logo 19 | a(href="/")= site.title 20 | nav.main-nav 21 | ul.menu 22 | li= a_with_selected('/', 'Home') 23 | li= a_with_selected('/archive', 'Archive') 24 | if has('images') 25 | li= a_with_selected('/album', 'Photos') 26 | if has('links.md') 27 | li= a_with_selected('/links.md', 'Links') 28 | if has('about.md') 29 | li= a_with_selected('/about.md', 'About') 30 | 31 | #main.cf 32 | block content 33 | 34 | footer#footer 35 | .footer-right 36 | a(href="/template", title="Clone Template") 37 | i.fa.fa-cloud-download 38 | .copyright Powered by   39 | a(href="https://www.farbox.com", target="_blank") FarBox   40 | | Theme by Deepure . Thanks for 41 | a(href="http://fontawesome.io/") Fontawesome 42 | |   & 43 | a(href="http://dropbox.com/") Dropbox 44 | 45 | // for duoshuo recent comments 46 | if site.configs.duoshuo 47 | script(type="text/javascript") 48 | var duoshuoQuery = {short_name:"{{ site.configs.duoshuo }}"}; 49 | (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; 50 | ds.src = '//static.duoshuo.com/embed.js';ds.charset = 'UTF-8'; 51 | (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); 52 | })(); 53 | 54 | -------------------------------------------------------------------------------- /template_packages/Deepure/image.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | 3 | block content 4 | image = get_doc(path2) 5 | if not image 6 | +raise_404 7 | else 8 | +add_doc_actions(image) 9 | pre_one = get_connected_one(image, same_folder=True, position='<') 10 | next_one = get_connected_one(image, same_folder=True, position='>') 11 | .image-wrap 12 | h2.title= image.title 13 | .information 14 | i.fa.fa-time 15 | span.date= image.date.format('%Y-%m-%d %H:%M') 16 | .image 17 | img(src="{{ image.url }}?width=960") 18 | +bread_nav(image.path, '/album/') 19 | .connected-images 20 | if pre_one 21 | a.pre(href='/image/{{pre_one.path}}') 22 | span <{{ pre_one.title }} 23 | else 24 | a.pre(href="#pre") 25 | span < No More 26 | if next_one 27 | a.next(href='/image/{{next_one.path}}') 28 | span >{{ next_one.title }} 29 | else 30 | a.next(href="#next") 31 | span > No More 32 | include include/comments 33 | -------------------------------------------------------------------------------- /template_packages/Deepure/include/macros.jade: -------------------------------------------------------------------------------- 1 | mixin make_pager(pager_name=None) 2 | if pager_name: 3 | pager = get_paginator(pager_name) 4 | .pager.cf 5 | if pager.has_pre or pager.has_next 6 | if pager.has_pre 7 | a.prev(href=pager.pre_page_url) 8 | i.fa.fa-angle-left 9 | |  {{ '上一页' if lang=='zh_cn' else 'Previous'}} 10 | if pager.has_next 11 | a.next(href=pager.next_page_url) 12 | i.fa.fa-angle-right 13 | |  {{ '下一页' if lang=='zh_cn' else 'Next'}} 14 | 15 | mixin make_posts_list 16 | for post in posts 17 | article.loop-post 18 | if post.cover 19 | a.entry-thumbnail(href=post.url) 20 | img(src=post.cover.s200) 21 | h2 22 | a(href=post.url)= post.title 23 | .entry-meta 24 | span 25 | i.fa.fa-calendar   26 | | {{ post.date.format('%Y-%m-%d') }} 27 | if post.tags 28 | i.fa.fa-tags   29 | for tag in post.tags 30 | a.tag(href='/tags/{{tag}}')  {{tag}} 31 | span.count 32 | i.fa.fa-book 33 | |  {{post.visits}} 34 | .post-intro= post.content.limit(300).no_pic 35 | +make_pager() 36 | 37 | -------------------------------------------------------------------------------- /template_packages/Deepure/include/sider.jade: -------------------------------------------------------------------------------- 1 | .sider 2 | aside 3 | h3 4 | i.fa.fa-magic 5 | span   Recent Articles 6 | ul.recent_posts 7 | rposts = get_data(path='/', type='post', limit=6, with_page=False) 8 | for post in rposts 9 | li.listing-item 10 | a(href=post.url, title=post.title)= post.title 11 | if site.configs.duoshuo 12 | aside 13 | h3 14 | i.fa.fa-comments 15 | span   Recent Comments 16 | ul.ds-recent-comments(data-show-title="0", data-show-time="0", data-show-avatars="0") 17 | elif site.configs.disqus 18 | aside 19 | h3 20 | i.fa.fa-comments 21 | span   Recent Comments 22 | script(type="text/javascript", src="http://{{site.configs.disqus}}.disqus.com/recent_comments_widget.js?num_items=5&hide_avatars=1&excerpt_length=50&hide_mods=1") 23 | if site.tags 24 | aside 25 | h3 26 | i.fa.fa-tags 27 | span  Tags 28 | div 29 | for tag_name, tag_count in site.tags 30 | a(href="/tags/{{tag_name}}") {{tag_name}}   -------------------------------------------------------------------------------- /template_packages/Deepure/index+tags+category.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | title= request.args.s or tags.join('+') or site.title 4 | block content 5 | {% from "include/macros.jade" import make_posts_list %} 6 | .primary 7 | +make_posts_list 8 | include include/sider.html -------------------------------------------------------------------------------- /template_packages/Deepure/post.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block title 3 | title= post.title 4 | block content 5 | .primary 6 | article.post 7 | header 8 | h2 9 | a(href=post.url)= post.title 10 | .entry-meta 11 | span 12 | i.fa.fa-calendar   13 | | {{ post.date.format('%Y-%m-%d') }} 14 | if post.tags 15 | span 16 | i.fa.fa-tags   17 | for tag in post.tags 18 | a.tag(href="/tags/{{tag}}")  {{tag}} 19 | span.count 20 | i.fa.fa-book 21 | |  {{post.visits}} 22 | .entry= post.content 23 | 24 | include include/comments 25 | 26 | include include/sider.html 27 | -------------------------------------------------------------------------------- /template_packages/Deepure/sass/ie.scss: -------------------------------------------------------------------------------- 1 | /* Welcome to Compass. Use this file to write IE specific override styles. 2 | * Import this file using the following HTML or equivalent: 3 | * */ 6 | -------------------------------------------------------------------------------- /template_packages/Deepure/sass/normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v2.1.0 | MIT License | git.io/normalize */ 2 | article, 3 | aside, 4 | details, 5 | figcaption, 6 | figure, 7 | footer, 8 | header, 9 | hgroup, 10 | main, 11 | nav, 12 | section, 13 | summary { 14 | display: block; 15 | } 16 | 17 | audio, 18 | canvas, 19 | video { 20 | display: inline-block; 21 | } 22 | 23 | 24 | audio:not([controls]) { 25 | display: none; 26 | height: 0; 27 | } 28 | 29 | 30 | 31 | [hidden] { 32 | display: none; 33 | } 34 | 35 | 36 | 37 | html { 38 | font-family: sans-serif; /* 1 */ 39 | -webkit-text-size-adjust: 100%; /* 2 */ 40 | -ms-text-size-adjust: 100%; /* 2 */ 41 | } 42 | 43 | body { 44 | margin: 0; 45 | } 46 | 47 | 48 | a:focus { 49 | outline: thin dotted; 50 | } 51 | 52 | a:active, 53 | a:hover { 54 | outline: 0; 55 | } 56 | 57 | 58 | h1 { 59 | font-size: 2em; 60 | margin: 0.67em 0; 61 | } 62 | 63 | abbr[title] { 64 | border-bottom: 1px dotted; 65 | } 66 | 67 | b, 68 | strong { 69 | font-weight: bold; 70 | } 71 | 72 | 73 | dfn { 74 | font-style: italic; 75 | } 76 | 77 | 78 | hr { 79 | -moz-box-sizing: content-box; 80 | box-sizing: content-box; 81 | height: 0; 82 | } 83 | 84 | 85 | mark { 86 | background: #ff0; 87 | color: #000; 88 | } 89 | 90 | code, 91 | kbd, 92 | pre, 93 | samp { 94 | font-family: monospace, serif; 95 | font-size: 1em; 96 | } 97 | 98 | 99 | pre { 100 | white-space: pre-wrap; 101 | } 102 | 103 | 104 | q { 105 | quotes: "\201C" "\201D" "\2018" "\2019"; 106 | } 107 | 108 | small { 109 | font-size: 80%; 110 | } 111 | 112 | sub, 113 | sup { 114 | font-size: 75%; 115 | line-height: 0; 116 | position: relative; 117 | vertical-align: baseline; 118 | } 119 | 120 | sup { 121 | top: -0.5em; 122 | } 123 | 124 | sub { 125 | bottom: -0.25em; 126 | } 127 | 128 | img { 129 | border: 0; 130 | } 131 | 132 | 133 | svg:not(:root) { 134 | overflow: hidden; 135 | } 136 | 137 | figure { 138 | margin: 0; 139 | } 140 | 141 | fieldset { 142 | border: 1px solid #c0c0c0; 143 | margin: 0 2px; 144 | padding: 0.35em 0.625em 0.75em; 145 | } 146 | 147 | 148 | legend { 149 | border: 0; /* 1 */ 150 | padding: 0; /* 2 */ 151 | } 152 | 153 | 154 | button, 155 | input, 156 | select, 157 | textarea { 158 | font-family: inherit; /* 1 */ 159 | font-size: 100%; /* 2 */ 160 | margin: 0; /* 3 */ 161 | } 162 | 163 | 164 | button, 165 | input { 166 | line-height: normal; 167 | } 168 | 169 | 170 | button, 171 | select { 172 | text-transform: none; 173 | } 174 | 175 | 176 | button, 177 | html input[type="button"], /* 1 */ 178 | input[type="reset"], 179 | input[type="submit"] { 180 | -webkit-appearance: button; /* 2 */ 181 | cursor: pointer; /* 3 */ 182 | } 183 | 184 | button[disabled], 185 | html input[disabled] { 186 | cursor: default; 187 | } 188 | 189 | input[type="checkbox"], 190 | input[type="radio"] { 191 | box-sizing: border-box; /* 1 */ 192 | padding: 0; /* 2 */ 193 | } 194 | 195 | 196 | input[type="search"] { 197 | -webkit-appearance: textfield; /* 1 */ 198 | -moz-box-sizing: content-box; 199 | -webkit-box-sizing: content-box; /* 2 */ 200 | box-sizing: content-box; 201 | } 202 | 203 | input[type="search"]::-webkit-search-cancel-button, 204 | input[type="search"]::-webkit-search-decoration { 205 | -webkit-appearance: none; 206 | } 207 | 208 | button::-moz-focus-inner, 209 | input::-moz-focus-inner { 210 | border: 0; 211 | padding: 0; 212 | } 213 | 214 | textarea { 215 | overflow: auto; /* 1 */ 216 | vertical-align: top; /* 2 */ 217 | } 218 | 219 | table { 220 | border-collapse: collapse; 221 | border-spacing: 0; 222 | } 223 | -------------------------------------------------------------------------------- /template_packages/Farbtle/LICENSE: -------------------------------------------------------------------------------- 1 | Feel free to use it in anyway. 2 | 3 | The only thing you should keep is a link to the site of the original designer. 4 | 5 | `Coded by YCF` -------------------------------------------------------------------------------- /template_packages/Farbtle/archive.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block content 3 | posts = get_posts(limit=300, sort=-1, status='public') 4 | ul#archive 5 | for post in posts 6 | li 7 | | [{{ post.date.format('%Y-%m-%d') }}] 8 | h2 9 | a(href=post.url)= post.title 10 | if paginator.has_next or paginator.has_pre 11 | nav.pager 12 | if paginator.has_pre 13 | a.pre(href=paginator.pre_page_url) Pre 14 | if paginator.has_next 15 | a.next(href=paginator.next_page_url) Next 16 | 17 | -------------------------------------------------------------------------------- /template_packages/Farbtle/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 4 | meta(content="yes", name="apple-mobile-web-app-capable") 5 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 6 | meta(content="telephone=no", name="format-detection") 7 | meta(name="renderer", content="webkit") 8 | title= post.title or site.title 9 | +load('/template/basic.scss,/template/style.scss') 10 | body 11 | #sidebar 12 | #avatar 13 | a(href='/') 14 | .border 15 | .img_container 16 | img(src=site.avatar, alt=site.title) 17 | .title 18 | a(href='/')= site.title 19 | ul 20 | li 21 | +a_with_selected("/archive", 'Archive') 22 | if has('images') 23 | li 24 | a(href="/album") Album 25 | if not has('posts') 26 | +redirect('/album') 27 | 28 | pages = get_data(status='pages', type='post', limit=5, with_page=False, sort='position') 29 | for page_p in pages 30 | li 31 | +a_with_selected("/"+page_p.path, page_p.filename.split('.')[0].title()) 32 | .clear 33 | 34 | #main 35 | #banner 36 | block banner 37 | span.date= now.format('%b,%d %Y') 38 | span.sub_info today 39 | block content 40 | #footer 41 | | © 2013 {{ site.title }} 42 | | | Coded by YCF 43 | | | Inspired by Svbtle 44 | | | Powered by FarBox 45 | | | Clone Theme 46 | 47 | -------------------------------------------------------------------------------- /template_packages/Farbtle/index.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block content 3 | .posts 4 | for post in posts 5 | .post 6 | h2.title 7 | a(href=post.url)= post.title 8 | .meta 9 | span.date= post.date.format('%Y.%m.%d') 10 | .content= post.content.limit(150) 11 | 12 | if paginator.has_next or paginator.has_pre 13 | .pager 14 | if paginator.has_pre 15 | a.pre(href=paginator.pre_page_url) Pre 16 | if paginator.has_next 17 | a.next(href=paginator.next_page_url) Next 18 | -------------------------------------------------------------------------------- /template_packages/Farbtle/post+markdown.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block banner 3 | h1.title= post.title 4 | span.sub_info= post.date.format('%b,%d %Y') 5 | block content 6 | .post 7 | .content= post.content 8 | include include/comments.jade -------------------------------------------------------------------------------- /template_packages/Farbtle/style.scss: -------------------------------------------------------------------------------- 1 | body{ 2 | background-color: #fff; 3 | color: #000; 4 | font-family: "Avenir", "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", STHeiti !important; 5 | padding: 0; 6 | border: 0; 7 | margin: 0; 8 | width:100%; 9 | } 10 | a { 11 | color:#000; 12 | text-decoration: none; 13 | &:hover{ 14 | color:#00a2ff; 15 | } 16 | } 17 | 18 | 19 | 20 | 21 | #sidebar { 22 | width: 260px; 23 | position: fixed; 24 | top: 0; 25 | left: 0; 26 | bottom: 0; 27 | right: auto; 28 | min-height: 690px; 29 | 30 | #avatar { 31 | margin:30px auto 0 auto; 32 | 33 | width: 120px; 34 | height: 120px; 35 | border-radius: 50%; 36 | border: 5px solid #f8f8f8; 37 | 38 | 39 | .border { 40 | border-radius:50%; 41 | width:100px; 42 | height:100px; 43 | border:3px solid #d3e7f4; 44 | margin-top: 7px; 45 | margin-left: 7px; 46 | 47 | 48 | .img_container { 49 | border-radius:50%; 50 | width:80px; 51 | height:80px; 52 | border:2px solid #f0f0f0; 53 | margin-left: 8px; 54 | margin-top: 8px; 55 | 56 | img{ 57 | width: 100%; 58 | height: 100%; 59 | border-radius:50%; 60 | overflow: hidden; 61 | } 62 | } 63 | 64 | } 65 | 66 | a:hover .border{ 67 | border-color: #58acf4; 68 | } 69 | } 70 | 71 | .title{ 72 | text-align: center; 73 | a{ 74 | font-weight: 900; 75 | font-size: 34px; 76 | line-height: 1.2; 77 | border: none; 78 | display: block; 79 | margin: 30px 20px 50px 20px; 80 | } 81 | 82 | } 83 | 84 | ul{ 85 | list-style: none; 86 | 87 | li{ 88 | margin-top:15px; 89 | height:32px; 90 | 91 | a{ 92 | font-size: 14px; 93 | border-radius: 30px; 94 | background-color: #fff; 95 | z-index: 999; 96 | padding: 7px 20px; 97 | border:4px solid #f8f8f8; 98 | 99 | &:hover, &.selected{ 100 | border-color: #00a2ff; 101 | } 102 | } 103 | } 104 | } 105 | } 106 | 107 | 108 | 109 | 110 | #banner { 111 | padding: 40px 0 40px 50px; 112 | color: #000; 113 | font-weight: 700; 114 | font-size: 16px; 115 | letter-spacing: 1px; 116 | line-height: 24px; 117 | 118 | .sub_info { 119 | padding-left: 1em; 120 | color:#e0e0e0; 121 | text-transform: uppercase; 122 | font-size: 0.9em; 123 | font-family: arial, sans-serif; 124 | } 125 | 126 | h1{ 127 | display: inline; 128 | font-size: 2.2em; 129 | } 130 | 131 | a{ 132 | color:#00a2ff; 133 | font-weight: bold; 134 | font-size:16px; 135 | &:hover{ 136 | text-decoration: underline; 137 | } 138 | } 139 | } 140 | 141 | 142 | .post{ 143 | border-top:1px solid #e0e0e0; 144 | min-height: 135px; 145 | padding:40px 60px 40px 50px; 146 | 147 | h2.title{ 148 | font-size: 26px; 149 | } 150 | 151 | 152 | .content{ 153 | color:#333; 154 | line-height:1.8em; 155 | margin-bottom: 80px; 156 | 157 | a{ 158 | line-height: 1em; 159 | display: inline-block; 160 | border-bottom: 1px dashed #00a2ff; 161 | color:#000; 162 | &:hover{ 163 | border-bottom: 1px solid #00a2ff; 164 | } 165 | } 166 | 167 | p{ 168 | margin: 1.2em 0; 169 | } 170 | 171 | li p, blockquote p{ 172 | margin: 0; 173 | } 174 | 175 | blockquote { 176 | display: inline-block; 177 | padding-left: 18px; 178 | padding-bottom: 0; 179 | font-size: 15px; 180 | line-height: 25px; 181 | margin-left: 0; 182 | margin-top: 0; 183 | margin-bottom: 0; 184 | border-left: 10px solid #00a2ff; 185 | } 186 | 187 | img { 188 | max-width: 100%; 189 | max-height: 100%; 190 | border:1px solid #e0e0e0; 191 | padding:5px; 192 | } 193 | } 194 | } 195 | 196 | 197 | 198 | #main { 199 | margin-left: 260px; 200 | border-left: 1px solid #efefef; 201 | 202 | position: relative; 203 | 204 | .posts { 205 | .meta{ 206 | display: none; 207 | } 208 | 209 | article{ 210 | .content{ 211 | margin-bottom: 30px; 212 | } 213 | 214 | h2.title{ 215 | margin: 0.2em 0 1.3em 0; 216 | } 217 | 218 | img { 219 | max-width:120px; 220 | max-height: 120px; 221 | border:1px solid #e0e0e0; 222 | padding:2px; 223 | } 224 | } 225 | } 226 | 227 | .pager{ 228 | border-top:1px solid #e0e0e0; 229 | padding:60px 40px; 230 | position: relative; 231 | 232 | a{ 233 | text-transform: uppercase; 234 | font-size: 14px; 235 | border-radius: 30px; 236 | background-color: #fff; 237 | z-index: 999; 238 | padding: 7px; 239 | padding-left: 20px; 240 | padding-right: 20px; 241 | border:4px solid #f8f8f8; 242 | 243 | &:hover{ 244 | border-color: #00a2ff; 245 | } 246 | 247 | &.pre{ 248 | position: absolute; 249 | left: 40px; 250 | top: 30px; 251 | } 252 | &.next{ 253 | position: absolute; 254 | right: 40px; 255 | top: 30px; 256 | } 257 | } 258 | } 259 | 260 | } 261 | 262 | #archive { 263 | font-size:12px; 264 | list-style:none; 265 | list-style-type: square; 266 | list-style-position: inside; 267 | color: #00a2ff; 268 | margin-bottom: 80px; 269 | 270 | h2{ 271 | padding-left:13px; 272 | font-size: 18px; 273 | margin: 0.35em 0 1.3em 0; 274 | } 275 | } 276 | 277 | 278 | 279 | #footer { 280 | border-top:1px solid #e0e0e0; 281 | font-size: 12px; 282 | padding:40px; 283 | color:#aaa; 284 | 285 | a{ 286 | color:#aaa; 287 | &:hover{ 288 | color:#00a2ff; 289 | } 290 | } 291 | } 292 | 293 | 294 | @media (max-width: 640px) { 295 | #sidebar{ 296 | position: relative; 297 | display: block; 298 | width: 100%; 299 | padding: 0; 300 | min-height: 50px; 301 | 302 | .clear{ 303 | clear: both; 304 | } 305 | 306 | ul{ 307 | margin: 15px 0; 308 | padding: 0; 309 | border-bottom: 1px solid #f0f0f0; 310 | padding-bottom: 20px; 311 | text-align: center; 312 | 313 | li{ 314 | float: left; 315 | margin-left: 5px; 316 | margin-right: 5px; 317 | 318 | a{ 319 | padding: 5px 10px; 320 | 321 | } 322 | } 323 | } 324 | 325 | #avatar{ 326 | display: none; 327 | } 328 | .title{ 329 | display: none; 330 | } 331 | } 332 | #main{ 333 | clear: both; 334 | margin-left: 0; 335 | 336 | .post{ 337 | padding: 15px; 338 | } 339 | } 340 | #banner{ 341 | padding: 40px 15px; 342 | } 343 | } 344 | 345 | 346 | 347 | -------------------------------------------------------------------------------- /template_packages/Ink/404.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | | 404 | {{site.title}} 4 | block content 5 | .detail-post 6 | h2= '对不起,您访问的页面不存在。' if lang=='zh_cn' else 'Sorry, this page is not found' 7 | .post_body 8 | p= '您可以尝试搜索:' if lang=='zh_cn' else 'Maybe you need to search:' 9 | .search-bar 10 | input(type="text", id='search-bar-2', value="", onkeyup="if (event.keyCode == 13) search_in_page();") 11 | a(href="javascript:search_in_page()") 12 | img(src="/template/img/search.png", alt="search icon") 13 | 14 | script(type="text/javascript") 15 | function search_in_page(){ 16 | if (document.getElementById('search-bar-2').value){ 17 | location.href='http://'+location.host+'?s='+document.getElementById('search-bar-2').value 18 | } 19 | else{ 20 | return false; 21 | } 22 | } -------------------------------------------------------------------------------- /template_packages/Ink/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Ink/README.markdown: -------------------------------------------------------------------------------- 1 | Theme Name: Ink 2 | Original Author: CHEN Yan 3 | Original Author URI: http://ccyann.com/ 4 | Description: Chinese style named `墨`. 5 | License: MIT 6 | -------------------------------------------------------------------------------- /template_packages/Ink/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | {% from "mixins" import make_paginator%} 3 | 4 | block title 5 | | Archive | {{ site.title }} 6 | 7 | block content 8 | ul.list_with_title 9 | for year, posts in get_data(type='post', sort='desc', limit=300).group('-date:year') 10 | li.listing_title= year 11 | ul.listing 12 | for post in posts 13 | li.listing-item 14 | span.date 15 | | {{ post.visits or 0 }} | {{ post.date.format("%m.%d") }} 16 | a(href=post.url, title=post.title)= post.title 17 | 18 | +make_paginator() 19 | 20 | -------------------------------------------------------------------------------- /template_packages/Ink/base.jade: -------------------------------------------------------------------------------- 1 | html(lang="zh-cn") 2 | head 3 | meta(http-equiv="content-type", content="text/html; charset=utf-8") 4 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 5 | meta(content="yes", name="apple-mobile-web-app-capable") 6 | meta(content="black-translucent", name="apple-mobile-web-app-status-bar-style") 7 | meta(content="telephone=no", name="format-detection") 8 | meta(name="description", content="") 9 | meta(name="keywords", content="") 10 | link(rel='alternate', type='application/rss+xml', title='atom 1.0', href='/feed') 11 | load("pure, jquery#1.10.2, /template/css/basic.css, /template/css/style.scss") 12 | 13 | if not has('favicon.icon') 14 | link(rel="shortcut icon", href="/template/favicon.ico") 15 | 16 | title 17 | block title 18 | site.title 19 | 20 | body 21 | #layout.pure-g-r 22 | .sidebar.pure-u 23 | #avatar 24 | a(href="/") 25 | img.logo(src="{{site.avatar}}?width=240&height=240&fixed=true", alt=site.title, title="Homepage") 26 | h1.site_name 27 | a(href="/")= site.title 28 | #switch 29 | img(src="/template/img/menu.png", alt="menu icon") 30 | ul.nav 31 | if has('about.md') 32 | li= a_with_selected('/about.md', '关于' if lang=='zh_cn' else 'About') 33 | li= a_with_selected('/category', '分类' if lang=='zh_cn' else 'Categories') 34 | if site.tags 35 | li= a_with_selected('/tags', '标签' if lang=='zh_cn' else 'Tags') 36 | li= a_with_selected('/archive', '归档' if lang=='zh_cn' else 'Archive') 37 | li= a_with_selected('/feed', '订阅' if lang=='zh_cn' else 'Feed') 38 | li#search 39 | a(href="#")= '搜索' if lang=='zh_cn' else 'Search' 40 | .search-bar 41 | input#search-bar(type='text', value=request.args.s, onkeyup="if (event.keyCode == 13) search();") 42 | a(href="javascript:search()") 43 | img(src="/template/img/search.png", alt="search icon") 44 | 45 | .content_body.pure-u-1 46 | #main 47 | block content 48 | #footer 49 | | Powered by 50 | a(href='http://www.farbox.com') FarBox 51 | | . ©2012-2015 Z.R.E.Y Inc. Theme 52 | a(href="http://blog.cyanchen.com/farbox-theme-ink") Ink 53 | | designed by 54 | a(href='http://cyanchen.com/') Cyan Chen 55 | |. 56 | load("/template/js/scripts.js") -------------------------------------------------------------------------------- /template_packages/Ink/css/basic.css: -------------------------------------------------------------------------------- 1 | /* Code.css 2 | --------------------------------------------------*/ 3 | blockquote { 4 | border-left: 0.4em solid #DDD; 5 | color: #777; 6 | display: block; 7 | text-align: justify; 8 | border-left: 4px solid #eeeeee; 9 | margin: 1em 0; 10 | padding-left: 1.5em; 11 | } 12 | table { 13 | background-color: transparent; 14 | border-collapse: collapse; 15 | border-spacing: 0; 16 | border: 1px solid #dddddd; 17 | border-left: 0; 18 | margin: 1em 0; 19 | 20 | } 21 | 22 | hr { 23 | margin: 1em 0; 24 | border-top: 1px dotted #ddd; 25 | border-bottom: 0px dashed #fff; 26 | } 27 | 28 | b, strong { 29 | color:inherit!important; 30 | } 31 | 32 | h3 { 33 | font-size: 1.5em; 34 | margin: 1em 0 0.5em; 35 | border-bottom: 1px solid #eee; 36 | } 37 | 38 | 39 | 40 | th, td { 41 | border-left: 1px solid #dddddd; 42 | padding: 8px; 43 | line-height: 1.8; 44 | vertical-align: middle; 45 | border-top: 1px solid #dddddd; 46 | } 47 | th { 48 | text-align:center; 49 | } 50 | .p_part { 51 | margin: 15px 0; 52 | } 53 | code{ 54 | border: 1px solid #e0e0e0; 55 | background: #F8F8F8; 56 | padding: 0 5px; 57 | margin: 0; 58 | font-family: consolas,Courier,monospace,serif; 59 | border-radius: 3px; 60 | font-size: 90%; 61 | white-space: pre-wrap; 62 | word-wrap: break-word; 63 | } 64 | pre{ 65 | border: 1px solid #e0e0e0; 66 | margin: 0 0 1em; 67 | padding: 5px 15px; 68 | font-family: consolas,Courier,monospace,serif; 69 | line-height: 1.5em; 70 | display: block; 71 | overflow: auto; 72 | background: #F8F8F8; 73 | letter-spacing: 0; 74 | border-radius: 3px; 75 | font-size: 90%; 76 | } 77 | 78 | pre p { 79 | margin: 0; 80 | } 81 | 82 | pre br{ 83 | display: none; 84 | } 85 | 86 | pre code{ 87 | border:none; 88 | background: none; 89 | padding: 0; 90 | margin: 0; 91 | font-size: 100%; 92 | } 93 | p { 94 | 95 | word-wrap: break-word; 96 | } 97 | 98 | .p { 99 | margin-bottom: 1em; 100 | } 101 | 102 | /*pygments*/ 103 | 104 | table.codehilitetable{ 105 | border:none; 106 | margin: 0; 107 | } 108 | 109 | 110 | .codehilitetable td{ 111 | border: none; 112 | padding: 0; 113 | 114 | } 115 | .hll { background-color: #ffffcc } 116 | .c { color: #60a0b0; font-style: italic } /* Comment */ 117 | /* .err { border: 1px solid #FF0000 } /* Error */ 118 | .k { color: #007020; font-weight: bold } /* Keyword */ 119 | .o { color: #666666 } /* Operator */ 120 | .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ 121 | .cp { color: #007020 } /* Comment.Preproc */ 122 | .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ 123 | .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ 124 | .gd { color: #A00000 } /* Generic.Deleted */ 125 | .ge { font-style: italic } /* Generic.Emph */ 126 | .gr { color: #FF0000 } /* Generic.Error */ 127 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 128 | .gi { color: #00A000 } /* Generic.Inserted */ 129 | .go { color: #808080 } /* Generic.Output */ 130 | .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 131 | .gs { font-weight: bold } /* Generic.Strong */ 132 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 133 | .gt { color: #0040D0 } /* Generic.Traceback */ 134 | .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 135 | .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 136 | .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 137 | .kp { color: #007020 } /* Keyword.Pseudo */ 138 | .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 139 | .kt { color: #902000 } /* Keyword.Type */ 140 | .m { color: #40a070 } /* Literal.Number */ 141 | .s { color: #4070a0 } /* Literal.String */ 142 | .na { color: #4070a0 } /* Name.Attribute */ 143 | .nb { color: #007020 } /* Name.Builtin */ 144 | .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 145 | .no { color: #60add5 } /* Name.Constant */ 146 | .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 147 | .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 148 | .ne { color: #007020 } /* Name.Exception */ 149 | .nf { color: #06287e } /* Name.Function */ 150 | .nl { color: #002070; font-weight: bold } /* Name.Label */ 151 | .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 152 | .nt { color: #062873; font-weight: bold } /* Name.Tag */ 153 | .nv { color: #bb60d5 } /* Name.Variable */ 154 | .ow { color: #007020; font-weight: bold } /* Operator.Word */ 155 | .w { color: #bbbbbb } /* Text.Whitespace */ 156 | .mf { color: #40a070 } /* Literal.Number.Float */ 157 | .mh { color: #40a070 } /* Literal.Number.Hex */ 158 | .mi { color: #40a070 } /* Literal.Number.Integer */ 159 | .mo { color: #40a070 } /* Literal.Number.Oct */ 160 | .sb { color: #4070a0 } /* Literal.String.Backtick */ 161 | .sc { color: #4070a0 } /* Literal.String.Char */ 162 | .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 163 | .s2 { color: #4070a0 } /* Literal.String.Double */ 164 | .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 165 | .sh { color: #4070a0 } /* Literal.String.Heredoc */ 166 | .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 167 | .sx { color: #c65d09 } /* Literal.String.Other */ 168 | .sr { color: #235388 } /* Literal.String.Regex */ 169 | .s1 { color: #4070a0 } /* Literal.String.Single */ 170 | .ss { color: #517918 } /* Literal.String.Symbol */ 171 | .bp { color: #007020 } /* Name.Builtin.Pseudo */ 172 | .vc { color: #bb60d5 } /* Name.Variable.Class */ 173 | .vg { color: #bb60d5 } /* Name.Variable.Global */ 174 | .vi { color: #bb60d5 } /* Name.Variable.Instance */ 175 | .il { color: #40a070 } /* Literal.Number.Integer.Long */ 176 | -------------------------------------------------------------------------------- /template_packages/Ink/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Ink/img/bg.jpg -------------------------------------------------------------------------------- /template_packages/Ink/img/hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Ink/img/hover.png -------------------------------------------------------------------------------- /template_packages/Ink/img/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Ink/img/menu.png -------------------------------------------------------------------------------- /template_packages/Ink/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Ink/img/search.png -------------------------------------------------------------------------------- /template_packages/Ink/index+category.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | {% from "mixins" import make_posts_list %} 3 | block title 4 | if request.path == '/' 5 | {{ site.title }} 6 | else 7 | {{ category.title or 'Categories' }} | {{ site.title }} 8 | 9 | block content 10 | if request.path == '/' or request.path not in ['/category', '/category/'] 11 | +make_posts_list() 12 | else 13 | ul#categories 14 | for category in get_data(type='folder', level=1, min_posts_count=1) 15 | li 16 | a(href='/category/{{category.path}}') 17 | h3= category.title 18 | span 19 | if lang == 'zh_cn' 20 | | {{ category.posts_count }} 篇文章 21 | else 22 | | {{ category.posts_count }} posts 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /template_packages/Ink/js/scripts.js: -------------------------------------------------------------------------------- 1 | /* search function */ 2 | function search() { 3 | if (document.getElementById('search-bar').value) { 4 | location.href = 'http://' + location.host + '?s=' + document.getElementById('search-bar').value 5 | } 6 | else { 7 | return false; 8 | } 9 | } 10 | 11 | /* search bar toggle */ 12 | $(document).ready(function () { 13 | $(".sidebar #search").click(function () { 14 | $(".sidebar .search-bar").slideToggle("250"); 15 | $(".sidebar #search a").toggleClass("selected"); 16 | $("#search-bar").focus(); 17 | }); 18 | 19 | if (location.search.indexOf('?s=')==0){ 20 | $(".sidebar #search").click() 21 | } 22 | }); 23 | 24 | /* responsive menu */ 25 | $(document).ready(function () { 26 | $("#switch").click(function () { 27 | $(".nav").slideToggle("250"); 28 | $("#switch").toggleClass("switch_current"); 29 | }); 30 | $(window).resize(function () { 31 | if ($(window).width() > 768) 32 | $(".nav").show(); 33 | }); 34 | $(window).resize(function () { 35 | if ($(window).width() < 768) 36 | $(".nav").hide(); 37 | }); 38 | }); 39 | 40 | 41 | /* smooth scroll */ 42 | $(function () { 43 | $('a[href*=#]:not([href=#])').click(function () { 44 | if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { 45 | var target = $(this.hash); 46 | target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 47 | if (target.length) { 48 | $('html,body').animate({ 49 | scrollTop: target.offset().top 50 | }, 250); 51 | return false; 52 | } 53 | } 54 | }); 55 | }); -------------------------------------------------------------------------------- /template_packages/Ink/mixins.jade: -------------------------------------------------------------------------------- 1 | 2 | 3 | mixin make_paginator() 4 | if pager.has_pre or pager.has_next 5 | div.clear 6 | .pager 7 | if pager.has_pre 8 | a.pre(href=pager.pre_page_url)= '上一页' if lang=='zh_cn' else 'Pre Page' 9 | else 10 | span.pre.unavailable= '已是最新一页' if lang=='zh_cn' else 'Already First' 11 | if pager.has_next 12 | a.next(href=pager.next_page_url)= '下一页' if lang=='zh_cn' else 'Next Page' 13 | else 14 | span.next.unavailable= '已是最后一页' if lang=='zh_cn' else 'Already Last' 15 | 16 | 17 | mixin make_posts_list(_posts=None) 18 | if _posts 19 | posts = _posts 20 | .posts 21 | for post in posts 22 | .post 23 | h2.title 24 | a(href=post.url, title=post.title)= post.title 25 | .info 26 | span.date= post.date.format('%Y.%m.%d') 27 | | 28 | span.visitors 29 | if lang == 'zh_cn' 30 | | {{post.visits}}次阅读 31 | else 32 | | {{post.visits}} visits 33 | 34 | path_parts = post.full_path.split('/') 35 | if path_parts.length > 2 36 | category_path = path_parts[1] 37 | a(href="/category/{{category_path}}")= category_path 38 | 39 | if post.tags 40 | | 41 | span.tags 42 | for tag in post.tags 43 | a(href="/tags/{{tag}}")= tag 44 | +make_paginator() 45 | 46 | -------------------------------------------------------------------------------- /template_packages/Ink/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block title 4 | post.title 5 | 6 | 7 | block content 8 | .post.detail-post 9 | h2.title= post.title 10 | .info 11 | span.date= post.date.format('%Y.%m.%d %H:%M %a') 12 | | 13 | span.visitors 14 | | {{post.visits}}{{'次阅读' if lang=='zh_cn' else ' visits'}} 15 | 16 | path_parts = post.full_path.split('/') 17 | if path_parts.length > 2 18 | category_path = path_parts[1] 19 | a(href="/category/{{category_path}}")= category_path 20 | 21 | if post.tags 22 | | 23 | span.tags 24 | for tag in post.tags 25 | a(href="/tags/{{tag}}")= tag 26 | | 27 | span.source 28 | a(href="?action=show_raw", target="_blank")= '源码' if lang=='zh_cn' else 'Text' 29 | 30 | .post_body= post.content 31 | 32 | 33 | .other_posts.pager 34 | pre_one = get_connected_one(post, position='<') 35 | next_one = get_connected_one(post, position='>') 36 | if pre_one 37 | a(href=pre_one.url, title=pre_one.title, class='pre')= '新一篇' if lang=='zh_cn' else 'Newer' 38 | else 39 | span.pre.unavailable= '已是最新一篇' if lang=='zh_cn' else 'No More' 40 | if next_one 41 | a(href=next_one.url, title=next_one.title, class='next')= '旧一篇' if lang=='zh_cn' else 'Older' 42 | elif pre_one 43 | span.next.unavailable= '已是最后一篇' if lang=='zh_cn' else 'No More' 44 | 45 | include include.comments -------------------------------------------------------------------------------- /template_packages/Ink/tags.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | {% from "mixins" import make_posts_list %} 3 | is_index = request.path.strip('/')=='tags' 4 | 5 | block title 6 | | {{ "Tags" if is_index else tags.join('+') }} | {{ site.title }} 7 | 8 | block content 9 | if is_index 10 | ul.list_with_title 11 | for tag_name, tag_count in site.tags 12 | li.listing_title 13 | a(href="/tags/{{tag_name}}")= tag_name 14 | | ({{tag_count}}) 15 | 16 | else 17 | #posts 18 | +make_posts_list() 19 | -------------------------------------------------------------------------------- /template_packages/Minimal Box/README.md: -------------------------------------------------------------------------------- 1 | ## Minimal Box 2 | 3 | This is a super simple and responsive theme for blog powered by farbox.com. 4 | 5 | Designed by Jaden, and this is his blog [copri.me](http:/copri.me). 6 | 7 | ## Something special 8 | 9 | You can use `refer` as a metadata field in a post. -------------------------------------------------------------------------------- /template_packages/Minimal Box/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | | Archive 4 | block content 5 | entries = get_data(type='post', sort='desc', limit=300).group('date:year', reverse=True) 6 | ul.archive-list 7 | for year, posts in entries 8 | li 9 | p.year= year 10 | for post in posts 11 | .post-set 12 | span.date= post.date.format('%b. %d') 13 | .post-link 14 | if post.metadata.refer 15 | a.refer-link(href=post.metadata.refer, target="_blank") 16 | span [reference] 17 | post.title 18 | else 19 | a(href=post.url)= post.title 20 | if paginator.has_pre or paginator.has_next 21 | .pager 22 | if pager.has_pre 23 | a.pre(href=pager.pre_url) ← new posts 24 | if pager.has_next 25 | a.next(href=pager.next_url) older posts → 26 | 27 | -------------------------------------------------------------------------------- /template_packages/Minimal Box/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(name="viewport", content="width=device-width, initial-scale=1.0") 4 | title 5 | block title 6 | site.title 7 | load("/template/style.scss") 8 | body 9 | .header-wrap 10 | .header.center-container 11 | a.logo(href='/', title=site.title)= site.title 12 | .links 13 | a(href="/archive") archive 14 | if has('about.md') 15 | a(href="/about.md") about 16 | .content-wrap 17 | .content.center-container 18 | block content 19 | 20 | .footer-wrap 21 | .main-center.footer 22 | p Themed by   23 | a(href="http://copri.me") Jaden Wang   24 | | Powered by 25 | a(href="https://www.farbox.com") farbox.com -------------------------------------------------------------------------------- /template_packages/Minimal Box/index+tags.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block content 3 | for post in posts 4 | if post.metadata.refer 5 | .post.ref-post 6 | h2.title 7 | a(target='_blank', href=post.metadata.refer)= post.title 8 | span → 9 | span.date= post.date.format('%B %d, %Y') 10 | .comment-body.abstract-content= post.content 11 | else 12 | .post.link-title-post 13 | h2.title 14 | a(href=post.url)= post.title 15 | span.date= post.date.format('%B %d, %Y') 16 | .post-body.abstract-content= post.content.opening or post.content.limit(100) 17 | 18 | if paginator.has_pre or paginator.has_next 19 | .pager 20 | if pager.has_pre 21 | a.pre(href=pager.pre_url) ← new posts 22 | if pager.has_next 23 | a.next(href=pager.next_url) older posts → -------------------------------------------------------------------------------- /template_packages/Minimal Box/post+markdown.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | post.title 4 | block content 5 | .post.normal-post 6 | h1.title= post.title 7 | a.perman-link(href=request.url, title="permanent link") ∞ 8 | span.date= post.date.format('%B %d, %Y') 9 | if post.tags 10 | p.tags Tags: 11 | for tag in post.tags 12 | a(href="/tags/{{tag}}")= tag 13 | 14 | .post-body= post.content 15 | p.eof · EOF · 16 | 17 | .comments 18 | include include.comments 19 | -------------------------------------------------------------------------------- /template_packages/Simpler/LICENSE: -------------------------------------------------------------------------------- 1 | Feel free to use it in anyway. 2 | 3 | The only thing you should keep is a link to the site of the original designer. 4 | 5 | `Designed by veganshe` -------------------------------------------------------------------------------- /template_packages/Simpler/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | title Archive 4 | block content 5 | entries = get_data(type='post', sort='desc', limit=300).group('date:year', reverse=True) 6 | #archive 7 | for year, posts in entries 8 | h3= year 9 | ul.listing 10 | for post in posts 11 | li.listing_item 12 | span= post.date.format("%Y-%m-%d") 13 | a(href=post.url, title=post.title)= post.title 14 | include include/paginator.jade 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /template_packages/Simpler/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 4 | meta(content="yes", name="apple-mobile-web-app-capable") 5 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 6 | meta(content="telephone=no", name="format-detection") 7 | meta(name="renderer", content="webkit") 8 | block title 9 | title= post.title or tags.join('+') or site.title 10 | +load('/template/css/basic.scss,/template/css/style.scss') 11 | body 12 | #header 13 | #nav_box 14 | ul#nav_menu 15 | li 16 | a(href='/') Home 17 | li 18 | a(href='/archive') Archive 19 | if has('images') 20 | li 21 | a(href='/album') Albums 22 | if not has('posts') 23 | +redirect('/album') 24 | pages = get_data(status='pages', type='post', limit=5, with_page=False, sort='position') 25 | for page_p in pages 26 | li 27 | a(href="/{{page_p.path}}")= page_p.filename.split('.')[0].title() 28 | #search_bar 29 | input#search_value(placeholder="Search",type="text",value=request.args.s, onkeyup="if (event.keyCode == 13) search();") 30 | .clear 31 | 32 | #main 33 | block content 34 | 35 | 36 | #footer 37 | span.copyright © 2013 {{ site.configs.title }} 38 | span.designed_by  | designed by veganshe 39 | span.powered  | on FarBox 40 | #back_to_top.back-to 41 | a.back_top(title='to Top', href="#") to Top 42 | 43 | +load('jquery, /template/scripts.coffee') 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /template_packages/Simpler/css/back-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Simpler/css/back-top.png -------------------------------------------------------------------------------- /template_packages/Simpler/css/style.scss: -------------------------------------------------------------------------------- 1 | $main_color: #00B893; 2 | 3 | 4 | body { 5 | width: 85%; 6 | max-width: 960px; 7 | margin: 0 auto; 8 | background: #fff; 9 | color: #444; 10 | font-size: 15px; 11 | line-height: 30px; 12 | font-family: Helvetica, arial, 'Hiragino Sans GB', 'Microsoft Yahei',Verdana,Arial, sans-serif; 13 | 14 | h1, h2, h3, h4, h5, h6 { 15 | font-weight: normal; 16 | } 17 | 18 | a { 19 | color: $main_color; 20 | text-decoration: none; 21 | 22 | &:hover { 23 | color: #444; 24 | border-bottom: none 25 | } 26 | } 27 | 28 | 29 | } 30 | 31 | #header { 32 | color: #666; 33 | padding: 20px 0; 34 | text-align: center; 35 | 36 | #nav_box { 37 | border-bottom: 1px solid #eee; 38 | margin: 10px 0 10px 0; 39 | position: relative; 40 | 41 | #nav_menu { 42 | height: 30px; 43 | line-height: 30px; 44 | list-style: none; 45 | padding: 0; 46 | 47 | li { 48 | float: left; 49 | padding: 0; 50 | margin: 0; 51 | height: 30px; 52 | line-height: 30px; 53 | border-bottom: none; 54 | 55 | a { 56 | color: #777; 57 | height: 29px; 58 | line-height: 29px; 59 | display: inline; 60 | float: left; 61 | padding: 0 20px; 62 | border-bottom: none; 63 | 64 | &:hover, &.selected { 65 | color: $main_color; 66 | } 67 | } 68 | } 69 | 70 | } 71 | } 72 | 73 | #search_bar{ 74 | position: absolute; 75 | right: 0; 76 | top: 0; 77 | input{ 78 | padding: 5px; 79 | } 80 | } 81 | } 82 | 83 | .post { 84 | margin-bottom: 100px; 85 | padding-bottom: 5px; 86 | border-bottom: 1px solid #eee; 87 | color: #666; 88 | width: 100%; 89 | 90 | 91 | p { 92 | margin: 0 0 23px; 93 | } 94 | 95 | strong { 96 | color: #000; 97 | font-family: 'Microsoft Yahei', Verdana, Arial, Helvetica, sans-serif; 98 | } 99 | 100 | img { 101 | max-width: 100%; 102 | margin: 5px 0; 103 | } 104 | 105 | h1, h2, h3, h4, h5, h6 { 106 | font-family: 'Microsoft Yahei', Verdana, Arial, Helvetica, sans-serif; 107 | color: #333; 108 | } 109 | 110 | h1 { 111 | font-size: 1.9rem; 112 | line-height: 1.2em; 113 | letter-spacing: -2px; 114 | text-indent: -3px; 115 | } 116 | 117 | h2 { 118 | font-size: 1.7rem; 119 | font-weight: 600; 120 | 121 | } 122 | 123 | h3 { 124 | font-size: 1.55rem; 125 | } 126 | 127 | h4 { 128 | font-size: 1.2rem; 129 | } 130 | 131 | h5 { 132 | font-size: 1.1rem; 133 | } 134 | 135 | h6 { 136 | font-size: 1.1rem; 137 | } 138 | 139 | 140 | .entry_title { 141 | color: #000; 142 | font-size: 48px; 143 | line-height: 1.2em; 144 | padding: 0; 145 | margin: 0.9em 0 1.0em 0; 146 | 147 | a { 148 | color: #000; 149 | border: none; 150 | 151 | &:hover { 152 | color: #999; 153 | } 154 | } 155 | } 156 | 157 | .date { 158 | display: inline; 159 | padding: 9px 15px; 160 | font-size: 14px; 161 | color: white; 162 | background: $main_color; 163 | -moz-border-radius: 4px; 164 | -webkit-border-radius: 4px; 165 | border-radius: 4px; 166 | text-align: center; 167 | margin-bottom: 35px 168 | } 169 | 170 | .info { 171 | margin: 0 0 10px 0; 172 | 173 | .datetime { 174 | float: left; 175 | width: 100px; 176 | font-size: 14px; 177 | color: #57575D; 178 | line-height: 1.25em; 179 | font-family: helvetica; 180 | } 181 | .read_more { 182 | float: right; 183 | } 184 | 185 | .tags { 186 | float: right; 187 | a { 188 | margin-left: 10px; 189 | color: #808080; 190 | 191 | &:hover { 192 | color: $main_color; 193 | } 194 | } 195 | } 196 | } 197 | 198 | } 199 | 200 | 201 | .pager{ 202 | position: relative; 203 | height: 20px; 204 | margin: 50px auto 80px auto; 205 | 206 | .pre{ 207 | position: absolute; 208 | left: 0; 209 | top: 0; 210 | } 211 | 212 | .next{ 213 | position: absolute; 214 | right: 0; 215 | top: 0; 216 | } 217 | } 218 | 219 | 220 | #archive { 221 | h3 { 222 | font-size: 16px; 223 | margin: 25px 0 20px 0; 224 | padding: 0; 225 | } 226 | 227 | .listing { 228 | list-style: none; 229 | 230 | .listing_item { 231 | margin-left: 0px; 232 | 233 | span { 234 | color: #989990; 235 | margin-right: 10px; 236 | } 237 | 238 | a { 239 | color: #808080; 240 | 241 | &:hover { 242 | color: $main_color; 243 | } 244 | } 245 | } 246 | } 247 | } 248 | 249 | #footer { 250 | margin-top: 120px; 251 | padding: 13px 0px; 252 | text-align: center; 253 | font-size: 14px; 254 | color: #999; 255 | 256 | .powered, .designed_by{ 257 | a{ 258 | color: #999; 259 | &:hover { 260 | color: $main_color; 261 | } 262 | } 263 | } 264 | } 265 | 266 | 267 | #back_to_top { 268 | display: none; 269 | bottom: 35px; 270 | overflow: hidden; 271 | position: fixed; 272 | right: 50px; 273 | width: 50px; 274 | z-index: 999; 275 | 276 | .back_top { 277 | background: url("back-top.png") no-repeat scroll 0 0 transparent; 278 | display: block; 279 | float: right; 280 | height: 40px; 281 | margin-left: 10px; 282 | outline: 0 none; 283 | text-indent: -9999em; 284 | width: 40px; 285 | 286 | &:hover { 287 | background-position: -40px 0; 288 | border-bottom: none; 289 | } 290 | 291 | a { 292 | border-bottom: none; 293 | } 294 | } 295 | } 296 | 297 | 298 | @media screen and (max-width: 480px) { 299 | body { 300 | width: 95%; 301 | } 302 | 303 | #header { 304 | padding: 0; 305 | #nav_box { 306 | #nav_menu { 307 | li { 308 | a { 309 | padding: 0 8px; 310 | } 311 | } 312 | } 313 | #search_bar { 314 | display: none; 315 | } 316 | } 317 | } 318 | 319 | #footer{ 320 | margin-top: 30px; 321 | } 322 | 323 | .post{ 324 | margin-bottom: 50px; 325 | .entry_title{ 326 | font-size: 32px; 327 | } 328 | } 329 | 330 | } 331 | 332 | 333 | 334 | 335 | 336 | 337 | -------------------------------------------------------------------------------- /template_packages/Simpler/include/paginator.jade: -------------------------------------------------------------------------------- 1 | if paginator.has_previous or paginator.has_next 2 | .clear 3 | .pager 4 | if paginator.has_previous 5 | a.pre(href=paginator.previous_page_url)= '上一页' if lang=='zh_cn' else 'Pre Page' 6 | if paginator.has_next 7 | a.next(href=paginator.next_page_url)= '下一页' if lang=='zh_cn' else 'Next Page' -------------------------------------------------------------------------------- /template_packages/Simpler/index+tags.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block content 3 | for post in posts 4 | .post.post_in_list 5 | h1.entry_title 6 | a(href=post.url)= post.title 7 | .post_body= post.content.limit(250) 8 | .info 9 | .datetime= post.date.format('%Y - %m - %d') 10 | .read_more 11 | a(href=post.url)= '> 阅读全文' if lang=='zh_cn' else '> Read More' 12 | .clear 13 | include include/paginator.jade 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /template_packages/Simpler/markdown.jade: -------------------------------------------------------------------------------- 1 | extends base.jade 2 | block content 3 | .post 4 | .content= post.content 5 | -------------------------------------------------------------------------------- /template_packages/Simpler/paginator.jade: -------------------------------------------------------------------------------- 1 | if paginator.has_previous or paginator.has_next 2 | .clear 3 | .pager 4 | if paginator.has_previous 5 | a.pre(href=paginator.previous_page_url)= '上一页' if lang=='zh_cn' else 'Pre Page' 6 | if paginator.has_next 7 | a.next(href=paginator.next_page_url)= '下一页' if lang=='zh_cn' else 'Next Page' -------------------------------------------------------------------------------- /template_packages/Simpler/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block content 3 | .post 4 | h1.entry_title= post.title 5 | if lang=='zh_cn' 6 | .date= post.date.format("于 %Y 年 %m 月 %d 日") 7 | else 8 | .date= post.date.format("Published on %Y - %m - %d") 9 | .post_body= post.content 10 | .info 11 | if post.tags 12 | span.tags 13 | for tag in post.tags 14 | a(href='/tags/{{tag}}')= '#'+tag 15 | .clear 16 | include include/comments 17 | -------------------------------------------------------------------------------- /template_packages/Simpler/scripts.coffee: -------------------------------------------------------------------------------- 1 | 2 | @search = -> 3 | if document.getElementById('search_value').value 4 | location.href='http://'+location.host+'?s='+document.getElementById('search_value').value 5 | return false 6 | 7 | 8 | $(document).ready -> 9 | bt = $('#back_to_top') 10 | if $(document).width() > 480 11 | $(window).scroll -> 12 | st = $(window).scrollTop() 13 | if st > 30 14 | bt.css('display', 'block') 15 | else 16 | bt.css('display', 'none') 17 | $('.back-to a').click -> 18 | $('body,html').animate({scrollTop: 0 }, 800) 19 | return false -------------------------------------------------------------------------------- /template_packages/The One/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright © 2014 Jaden & FarBox 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the “Software”), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/The One/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | | Archive 4 | block content 5 | entries = get_data(type='post', sort='desc', limit=300).group('date:year', reverse=True) 6 | ul.archive_list 7 | for year, posts in entries 8 | li 9 | p.year= year 10 | for post in posts 11 | .post_set 12 | span.date= post.date.format('%b. %d') 13 | .post_link 14 | a(href=post.url)= post.title 15 | if paginator.has_pre or paginator.has_next 16 | .pager 17 | if pager.has_pre 18 | a.pre(href=pager.pre_url) ← new posts 19 | if pager.has_next 20 | a.next(href=pager.next_url) older posts → 21 | 22 | -------------------------------------------------------------------------------- /template_packages/The One/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(name="viewport", content="width=device-width, initial-scale=1.0") 4 | meta(name="renderer", content="webkit") 5 | meta(name="keywords", content=site.configs.keywords.escaped) 6 | meta(name="description", content=site.raw_content.escaped) 7 | title 8 | block title 9 | site.title 10 | load("/template/basic.scss /template/style.scss") 11 | body 12 | .header_wrap 13 | .header.container 14 | a.logo(href='/', title=site.title)= site.title 15 | .links 16 | a(href="/") Home 17 | a(href="/archive") Archive 18 | if has('images') 19 | a(href='/album') Albums 20 | if not has('posts') 21 | +redirect('/album') 22 | if has('about.md') 23 | a(href="/about.md") About 24 | .content_wrap 25 | .content.container 26 | block content 27 | 28 | .footer_wrap 29 | .footer 30 | p Inspired by   31 | a(href="http://copri.me") Jaden   32 | | & Powered by 33 | a(href="https://www.farbox.com") farbox.com -------------------------------------------------------------------------------- /template_packages/The One/basic.scss: -------------------------------------------------------------------------------- 1 | 2 | html { 3 | height: 100%; 4 | max-height: 100%; } 5 | 6 | body { 7 | height: 100%; 8 | max-height: 100%; 9 | 10 | line-height: 1.6em;} 11 | 12 | 13 | h1, h2, h3, h4, h5, h6 { 14 | text-rendering: optimizeLegibility; 15 | line-height: 1; 16 | margin: 2rem 0; 17 | font-family: 'Open Sans', sans-serif; } 18 | 19 | h1 { 20 | font-size: 2.1rem; 21 | line-height: 1.2em; 22 | letter-spacing: -2px; 23 | text-indent: -3px; } 24 | 25 | h2 { 26 | font-size: 1.9rem; 27 | line-height: 1.2em; 28 | letter-spacing: -1px; 29 | text-indent: -2px; } 30 | 31 | h3 { 32 | font-size: 1.75rem; } 33 | 34 | h4 { 35 | font-size: 1.3rem; } 36 | 37 | h5 { 38 | font-size: 1.3rem; } 39 | 40 | h6 { 41 | font-size: 1.3rem; } 42 | 43 | 44 | p, ul, ol, dl { 45 | margin: 1em 0; } 46 | 47 | ol ol, ul ul, 48 | ul ol, ol ul { 49 | margin: 0.4em 0; } 50 | 51 | ul p, ol p, li p, .content li p, blockquote p, .content blockquote p{ 52 | margin: 0; 53 | } 54 | 55 | dl dt { 56 | float: left; 57 | width: 180px; 58 | overflow: hidden; 59 | clear: left; 60 | text-align: right; 61 | text-overflow: ellipsis; 62 | white-space: nowrap; 63 | font-weight: bold; 64 | margin-bottom: 1em; } 65 | 66 | dl dd { 67 | margin-left: 200px; 68 | margin-bottom: 1em; } 69 | 70 | hr { 71 | display: block; 72 | height: 1px; 73 | border: 0; 74 | border-top: 1px solid #efefef; 75 | margin: 3.2em 0; 76 | padding: 0; } 77 | 78 | blockquote { 79 | -moz-box-sizing: border-box; 80 | box-sizing: border-box; 81 | margin: 1.6em 0 1.6em -2.2em; 82 | padding: 0 0 0 1.6em; 83 | border-left: #4a4a4a 0.4em solid; } 84 | 85 | blockquote p { 86 | margin: 0.8em 0; 87 | font-style: italic; } 88 | 89 | blockquote small { 90 | display: inline-block; 91 | margin: 0.8em 0 0.8em 1.5em; 92 | font-size: 0.9em; 93 | color: #ccc; } 94 | 95 | blockquote small:before { 96 | content: '\2014 \00A0'; } 97 | 98 | blockquote cite { 99 | font-weight: bold; } 100 | 101 | blockquote cite a { 102 | font-weight: normal; } 103 | 104 | mark { 105 | background-color: #ffc336; } 106 | 107 | 108 | 109 | code, tt { 110 | padding: 1px 3px; 111 | font-family: Inconsolata, monospace, sans-serif; 112 | font-size: 0.85em; 113 | white-space: pre-wrap; 114 | border: 1px solid #E3EDF3; 115 | background: #F7FAFB; 116 | border-radius: 2px; } 117 | 118 | pre { 119 | -moz-box-sizing: border-box; 120 | box-sizing: border-box; 121 | margin: 1.6em 0; 122 | border: 1px solid #E3EDF3; 123 | width: 100%; 124 | padding: 10px; 125 | font-family: Inconsolata, monospace, sans-serif; 126 | font-size: 0.9em; 127 | white-space: pre; 128 | overflow: auto; 129 | background: #F7FAFB; 130 | border-radius: 3px; } 131 | 132 | pre code, tt { 133 | font-size: inherit; 134 | white-space: -moz-pre-wrap; 135 | white-space: pre-wrap; 136 | background: transparent; 137 | border: none; 138 | padding: 0; } 139 | 140 | kbd { 141 | display: inline-block; 142 | margin-bottom: 0.4em; 143 | padding: 1px 8px; 144 | border: #ccc 1px solid; 145 | color: #666; 146 | text-shadow: #fff 0 1px 0; 147 | font-size: 0.9em; 148 | font-weight: bold; 149 | background: #f4f4f4; 150 | border-radius: 4px; 151 | box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 0 white inset; } 152 | 153 | table { 154 | -moz-box-sizing: border-box; 155 | box-sizing: border-box; 156 | margin: 1em 0; 157 | width: 100%; 158 | max-width: 100%; 159 | border-width: 1px; border-style: solid; 160 | background-color: transparent; } 161 | 162 | table, table tr, table tr td, table tr th{ border-color: #e5e5e5; } 163 | table th{ color: #666666; background-color: #fdfdfd; } 164 | tr th{ border-bottom-width: 1px; border-bottom-style: solid; text-align: left; } 165 | tr th, tr td{ padding: 5px 20px; border-right: 1px solid; font-size: 1rem; } 166 | tr th:last-child, tr td:last-child{ border-right: 0px; } 167 | table th{ font-weight: bold; } 168 | table tbody > tr:nth-child(odd) > td, 169 | table tbody > tr:nth-child(odd) > th { 170 | background-color: #f9f9f9; } 171 | 172 | 173 | 174 | .toc { 175 | border: 1px solid #f0f0f0; 176 | margin-bottom: 20px; 177 | margin-top: 20px; 178 | 179 | } 180 | 181 | .clear{ 182 | width: 0; 183 | height: 0; 184 | clear: both; 185 | } 186 | 187 | 188 | 189 | 190 | .codehilite code, .codehilite pre { 191 | word-break: break-word; 192 | color: #fdce93; 193 | background-color: #3f3f3f; 194 | padding: 10px; 195 | line-height: 1.2em; 196 | border-radius: 3px; 197 | } 198 | 199 | .codehilite .hll { 200 | background-color: #222 201 | } 202 | 203 | .codehilite .c { 204 | color: #7f9f7f 205 | } 206 | 207 | .codehilite .err { 208 | color: #e37170; 209 | background-color: #3d3535 210 | } 211 | 212 | .codehilite .g { 213 | color: #7f9f7f 214 | } 215 | 216 | .codehilite .k { 217 | color: #f0dfaf 218 | } 219 | 220 | .codehilite .l { 221 | color: #ccc 222 | } 223 | 224 | .codehilite .n { 225 | color: #dcdccc 226 | } 227 | 228 | .codehilite .o { 229 | color: #f0efd0 230 | } 231 | 232 | .codehilite .x { 233 | color: #ccc 234 | } 235 | 236 | .codehilite .p { 237 | color: #41706f 238 | } 239 | 240 | .codehilite .cm { 241 | color: #7f9f7f 242 | } 243 | 244 | .codehilite .cp { 245 | color: #7f9f7f 246 | } 247 | 248 | .codehilite .c1 { 249 | color: #7f9f7f 250 | } 251 | 252 | .codehilite .cs { 253 | color: #cd0000; 254 | font-weight: bold 255 | } 256 | 257 | .codehilite .gd { 258 | color: #cd0000 259 | } 260 | 261 | .codehilite .ge { 262 | color: #ccc; 263 | font-style: italic 264 | } 265 | 266 | .codehilite .gr { 267 | color: red 268 | } 269 | 270 | .codehilite .gh { 271 | color: #dcdccc; 272 | font-weight: bold 273 | } 274 | 275 | .codehilite .gi { 276 | color: #00cd00 277 | } 278 | 279 | .codehilite .go { 280 | color: gray 281 | } 282 | 283 | .codehilite .gp { 284 | color: #dcdccc; 285 | font-weight: bold 286 | } 287 | 288 | .codehilite .gs { 289 | color: #ccc; 290 | font-weight: bold 291 | } 292 | 293 | .codehilite .gu { 294 | color: purple; 295 | font-weight: bold 296 | } 297 | 298 | .codehilite .gt { 299 | color: #0040D0 300 | } 301 | 302 | .codehilite .kc { 303 | color: #dca3a3 304 | } 305 | 306 | .codehilite .kd { 307 | color: #ffff86 308 | } 309 | 310 | .codehilite .kn { 311 | color: #dfaf8f; 312 | font-weight: bold 313 | } 314 | 315 | .codehilite .kp { 316 | color: #cdcf99 317 | } 318 | 319 | .codehilite .kr { 320 | color: #cdcd00 321 | } 322 | 323 | .codehilite .kt { 324 | color: #00cd00 325 | } 326 | 327 | .codehilite .ld { 328 | color: #cc9393 329 | } 330 | 331 | .codehilite .m { 332 | color: #8cd0d3 333 | } 334 | 335 | .codehilite .s { 336 | color: #cc9393 337 | } 338 | 339 | .codehilite .na { 340 | color: #9ac39f 341 | } 342 | 343 | .codehilite .nb { 344 | color: #efef8f 345 | } 346 | 347 | .codehilite .nc { 348 | color: #efef8f 349 | } 350 | 351 | .codehilite .no { 352 | color: #ccc 353 | } 354 | 355 | .codehilite .nd { 356 | color: #ccc 357 | } 358 | 359 | .codehilite .ni { 360 | color: #c28182 361 | } 362 | 363 | .codehilite .ne { 364 | color: #c3bf9f; 365 | font-weight: bold 366 | } 367 | 368 | .codehilite .nf { 369 | color: #efef8f 370 | } 371 | 372 | .codehilite .nl { 373 | color: #ccc 374 | } 375 | 376 | .codehilite .nn { 377 | color: #8fbede 378 | } 379 | 380 | .codehilite .nx { 381 | color: #ccc 382 | } 383 | 384 | .codehilite .py { 385 | color: #ccc 386 | } 387 | 388 | .codehilite .nt { 389 | color: #9ac39f 390 | } 391 | 392 | .codehilite .nv { 393 | color: #dcdccc 394 | } 395 | 396 | .codehilite .ow { 397 | color: #f0efd0 398 | } 399 | 400 | .codehilite .w { 401 | color: #ccc 402 | } 403 | 404 | .codehilite .mf { 405 | color: #8cd0d3 406 | } 407 | 408 | .codehilite .mh { 409 | color: #8cd0d3 410 | } 411 | 412 | .codehilite .mi { 413 | color: #8cd0d3 414 | } 415 | 416 | .codehilite .mo { 417 | color: #8cd0d3 418 | } 419 | 420 | .codehilite .sb { 421 | color: #cc9393 422 | } 423 | 424 | .codehilite .sc { 425 | color: #cc9393 426 | } 427 | 428 | .codehilite .sd { 429 | color: #cc9393 430 | } 431 | 432 | .codehilite .s2 { 433 | color: #cc9393 434 | } 435 | 436 | .codehilite .se { 437 | color: #cc9393 438 | } 439 | 440 | .codehilite .sh { 441 | color: #cc9393 442 | } 443 | 444 | .codehilite .si { 445 | color: #cc9393 446 | } 447 | 448 | .codehilite .sx { 449 | color: #cc9393 450 | } 451 | 452 | .codehilite .sr { 453 | color: #cc9393 454 | } 455 | 456 | .codehilite .s1 { 457 | color: #cc9393 458 | } 459 | 460 | .codehilite .ss { 461 | color: #cc9393 462 | } 463 | 464 | .codehilite .bp { 465 | color: #efef8f 466 | } 467 | 468 | .codehilite .vc { 469 | color: #efef8f 470 | } 471 | 472 | .codehilite .vg { 473 | color: #dcdccc 474 | } 475 | 476 | .codehilite .vi { 477 | color: #ffffc7 478 | } 479 | 480 | .codehilite .il { 481 | color: #8cd0d3 482 | } 483 | 484 | -------------------------------------------------------------------------------- /template_packages/The One/index+tags.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block content 3 | for post in posts 4 | .index_post 5 | .post_left 6 | h2.title 7 | a(href=post.url)= post.title 8 | span.date= post.date.format('%B %d, %Y') 9 | .post_right 10 | a(href=post.url)= post.content.limit(300).split('', 1)[0]+'' 11 | .clear 12 | 13 | if paginator.has_pre or paginator.has_next 14 | .pager 15 | if pager.has_pre 16 | a.pre(href=pager.pre_url) ← Pre 17 | if pager.has_next 18 | a.next(href=pager.next_url) Next → 19 | -------------------------------------------------------------------------------- /template_packages/The One/post+markdown.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | post.title 4 | block content 5 | .post 6 | h1.title= post.title 7 | a.perman_link(href=request.url, title="permanent link") ∞ 8 | span.date= post.date.format('%B %d, %Y') 9 | if post.tags 10 | p.tags Tags: 11 | for tag in post.tags 12 | a(href="/tags/{{tag}}")= tag 13 | 14 | .post_body= post.content 15 | p.eof · EOF · 16 | 17 | .comments 18 | include include.comments 19 | -------------------------------------------------------------------------------- /template_packages/The One/style.scss: -------------------------------------------------------------------------------- 1 | $bg_color: #fffdf4; 2 | 3 | 4 | 5 | 6 | ::selection { 7 | background: black; 8 | color: white; 9 | } 10 | 11 | ::-moz-selection { 12 | background: black; 13 | color: white; 14 | } 15 | 16 | body { 17 | font-family: 'adelle', 'Georgia', serif; 18 | font-size: 18px; 19 | color: #444; 20 | background: #fdfdfd; 21 | } 22 | 23 | a { 24 | color: black; 25 | text-decoration: none; 26 | transition: color linear .2s; 27 | } 28 | 29 | a:hover { 30 | color: indianred; 31 | } 32 | 33 | 34 | 35 | .container { 36 | width: 75%; 37 | margin: 0 auto; 38 | } 39 | 40 | /*------------------*/ 41 | /*----- header -----*/ 42 | /*------------------*/ 43 | .header_wrap { 44 | width: 100%; 45 | border-bottom: solid 1px #bcbcbc; 46 | 47 | .header { 48 | padding: 50px 0; 49 | overflow: hidden; 50 | font-weight: bold; 51 | 52 | .logo{ 53 | width: 40%; 54 | float: left; 55 | font-size: 1.3em; 56 | } 57 | 58 | .links{ 59 | font-family: "proxima-nova", "helvetica neue", "helvetica", sans-serif; 60 | text-transform: uppercase; 61 | font-size: 12px; 62 | width: 60%; 63 | text-align: right; 64 | float: right; 65 | margin-top: 0.5em; 66 | 67 | a{ 68 | margin: 0 0.8em; 69 | } 70 | } 71 | } 72 | } 73 | 74 | /*-------------------*/ 75 | /*----- Content -----*/ 76 | /*-------------------*/ 77 | .content_wrap { 78 | margin-top: 50px; 79 | } 80 | 81 | 82 | .index_post{ 83 | line-height: 1.6; 84 | margin-bottom: 50px; 85 | border-bottom: 1px solid #eaeaea; 86 | padding: 50px 0; 87 | 88 | .post_left{ 89 | float: left; 90 | width: 30%; 91 | 92 | h2{ 93 | font-size: 28px; 94 | line-height: 1.2; 95 | margin: 0; 96 | padding: 0; 97 | font-weight: bold; 98 | } 99 | 100 | .date{ 101 | color: #999; 102 | font-size: 14px; 103 | } 104 | } 105 | 106 | .post_right{ 107 | float: right; 108 | width: 68%; 109 | 110 | img{ 111 | max-width: 100%; 112 | border-bottom: 5px solid #ffffff; 113 | } 114 | 115 | p{ 116 | margin: 0; 117 | } 118 | 119 | a{ 120 | &:hover{ 121 | 122 | img{ 123 | border-bottom: 5px solid indianred; 124 | } 125 | } 126 | } 127 | 128 | } 129 | } 130 | 131 | /*----- Post -----*/ 132 | .post { 133 | line-height: 1.6; 134 | margin-bottom: 100px; 135 | word-break: break-word; 136 | 137 | .title { 138 | position: relative; 139 | margin-top: 0; 140 | font-size: 2.3em; 141 | font-weight: normal; 142 | margin-bottom: 15px; 143 | line-height: 1.1; 144 | font-family: 'adelle', 'Georgia', "Kaiti SC", "KaiTi", serif; 145 | 146 | .perman_link { 147 | color: #E60900; 148 | position: absolute; 149 | left: -25px; 150 | top: 0.5em; 151 | font-size: 0.5em; 152 | font-weight: normal; 153 | } 154 | } 155 | 156 | .date { 157 | font-size: 1em; 158 | color: #999; 159 | } 160 | 161 | 162 | .tags { 163 | font-size: 0.8em; 164 | color: #888; 165 | 166 | a { 167 | color: #888; 168 | border-bottom: dotted 1px #888; 169 | margin-left: 10px; 170 | transition: all linear 0.4s; 171 | -webkit-transition: all linear 0.4s; 172 | -moz-transition: all linear 0.4s; 173 | 174 | &:hover { 175 | color: black; 176 | border-bottom-color: black; 177 | margin-left: 10px; 178 | } 179 | } 180 | } 181 | 182 | img { 183 | max-width: 100%; 184 | height: auto; 185 | margin: 10px auto; 186 | display: block; 187 | } 188 | 189 | 190 | .post_body{ 191 | 192 | 193 | margin-top: 30px; 194 | font-size: 1.1em; 195 | 196 | p { 197 | margin: 1.5em 0; 198 | text-align: justify; 199 | line-height: 1.8; 200 | } 201 | 202 | a { 203 | color: #9c2525; 204 | -webkit-transition: all linear 0.4s; 205 | -moz-transition: all linear 0.4s; 206 | transition: all linear 0.4s; 207 | 208 | &:hover { 209 | color: #C9261E; 210 | border-bottom: solid 1px #E60900; 211 | } 212 | } 213 | 214 | code, pre { 215 | font-family: Monaco, Andale Mono, Courier New, monospace; 216 | } 217 | 218 | pre code{ 219 | font-size: 14px; 220 | } 221 | 222 | .eof { 223 | text-align: center; 224 | margin: 33px 0; 225 | color: #bbb; 226 | } 227 | 228 | 229 | 230 | } 231 | } 232 | 233 | 234 | 235 | 236 | 237 | 238 | /*------------------*/ 239 | /*----- footer -----*/ 240 | /*------------------*/ 241 | .footer_wrap { 242 | padding: 80px 0 10px; 243 | 244 | p { 245 | margin-top: 5px; 246 | text-align: center; 247 | font-size: 0.75em; 248 | } 249 | 250 | } 251 | 252 | 253 | 254 | 255 | /*----- archive page -----*/ 256 | .archive_list { 257 | list-style: none; 258 | 259 | .year { 260 | margin: 50px 0 15px 0; 261 | font-size: 1.5em; 262 | color: #222; 263 | } 264 | 265 | .post_set { 266 | overflow: hidden; 267 | margin-bottom: 15px; 268 | 269 | .date { 270 | display: block; 271 | float: left; 272 | width: 100px; 273 | } 274 | 275 | .post_link { 276 | margin-left: 100px; 277 | overflow: hidden; 278 | } 279 | 280 | .date{ 281 | font-size: 0.9em; 282 | } 283 | } 284 | 285 | a { 286 | -webkit-transition: all linear 0.4s; 287 | -moz-transition: all linear 0.4s; 288 | transition: all linear 0.4s; 289 | text-decoration: none; 290 | 291 | 292 | &:hover { 293 | color: #C9261E; 294 | border-bottom-color: #E60900; 295 | } 296 | } 297 | 298 | } 299 | 300 | 301 | 302 | .pager { 303 | margin-top: 6em; 304 | 305 | a{ 306 | color: #333; 307 | -webkit-transition: all linear 0.4s; 308 | -moz-transition: all linear 0.4s; 309 | transition: all linear 0.4s; 310 | &:hover { 311 | color: #C9261E; 312 | } 313 | } 314 | 315 | .pre { 316 | float: left; 317 | } 318 | .next { 319 | float: right; 320 | } 321 | 322 | } 323 | 324 | 325 | /*----- responsive for small screen ----- */ 326 | @media screen and (max-width: 480px) { 327 | body { 328 | font-size: 16px; 329 | } 330 | .post { 331 | line-height: 1.6; 332 | margin-bottom: 55px; 333 | .title { 334 | font-size: 2em; 335 | line-height: 1.2; 336 | 337 | .perman_link { 338 | display: none; 339 | } 340 | } 341 | } 342 | 343 | .container{ 344 | width: 92%; 345 | } 346 | 347 | .index_post{ 348 | .post_left{ 349 | display: block; 350 | width: 100%; 351 | } 352 | .post_right{ 353 | display: block; 354 | width: 100%; 355 | } 356 | } 357 | 358 | } 359 | 360 | 361 | 362 | 363 | /*----- syntax color from farbox basis.css -----*/ 364 | .hll { background-color: #ffffcc } 365 | .c { color: #60a0b0; font-style: italic } /* Comment */ 366 | /* .err { border: 1px solid #FF0000 } /* Error */ 367 | .k { color: #007020; font-weight: bold } /* Keyword */ 368 | .o { color: #666666 } /* Operator */ 369 | .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ 370 | .cp { color: #007020 } /* Comment.Preproc */ 371 | .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ 372 | .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ 373 | .gd { color: #A00000 } /* Generic.Deleted */ 374 | .ge { font-style: italic } /* Generic.Emph */ 375 | .gr { color: #FF0000 } /* Generic.Error */ 376 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 377 | .gi { color: #00A000 } /* Generic.Inserted */ 378 | .go { color: #808080 } /* Generic.Output */ 379 | .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 380 | .gs { font-weight: bold } /* Generic.Strong */ 381 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 382 | .gt { color: #0040D0 } /* Generic.Traceback */ 383 | .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 384 | .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 385 | .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 386 | .kp { color: #007020 } /* Keyword.Pseudo */ 387 | .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 388 | .kt { color: #902000 } /* Keyword.Type */ 389 | .m { color: #40a070 } /* Literal.Number */ 390 | .s { color: #4070a0 } /* Literal.String */ 391 | .na { color: #4070a0 } /* Name.Attribute */ 392 | .nb { color: #007020 } /* Name.Builtin */ 393 | .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 394 | .no { color: #60add5 } /* Name.Constant */ 395 | .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 396 | .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 397 | .ne { color: #007020 } /* Name.Exception */ 398 | .nf { color: #06287e } /* Name.Function */ 399 | .nl { color: #002070; font-weight: bold } /* Name.Label */ 400 | .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 401 | .nt { color: #062873; font-weight: bold } /* Name.Tag */ 402 | .nv { color: #bb60d5 } /* Name.Variable */ 403 | .ow { color: #007020; font-weight: bold } /* Operator.Word */ 404 | .w { color: #bbbbbb } /* Text.Whitespace */ 405 | .mf { color: #40a070 } /* Literal.Number.Float */ 406 | .mh { color: #40a070 } /* Literal.Number.Hex */ 407 | .mi { color: #40a070 } /* Literal.Number.Integer */ 408 | .mo { color: #40a070 } /* Literal.Number.Oct */ 409 | .sb { color: #4070a0 } /* Literal.String.Backtick */ 410 | .sc { color: #4070a0 } /* Literal.String.Char */ 411 | .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 412 | .s2 { color: #4070a0 } /* Literal.String.Double */ 413 | .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 414 | .sh { color: #4070a0 } /* Literal.String.Heredoc */ 415 | .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 416 | .sx { color: #c65d09 } /* Literal.String.Other */ 417 | .sr { color: #235388 } /* Literal.String.Regex */ 418 | .s1 { color: #4070a0 } /* Literal.String.Single */ 419 | .ss { color: #517918 } /* Literal.String.Symbol */ 420 | .bp { color: #007020 } /* Name.Builtin.Pseudo */ 421 | .vc { color: #bb60d5 } /* Name.Variable.Class */ 422 | .vg { color: #bb60d5 } /* Name.Variable.Global */ 423 | .vi { color: #bb60d5 } /* Name.Variable.Instance */ 424 | .il { color: #40a070 } /* Literal.Number.Integer.Long */ 425 | -------------------------------------------------------------------------------- /template_packages/Violet/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | Keep a link to the original designer ZhanXin.Lin: `zhanxin.lin`. 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Violet/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block content 4 | 5 | entries = get_data(type='post',limit=300, sort='desc').group('-date:year+month') 6 | #archive.common_width 7 | for key,posts in entries 8 | l_index = loop.index 9 | .archive_month 10 | .h 11 | h3= posts[0].date.format('%B %Y') 12 | if posts.length == 1 13 | span.count= '%s post'%posts.length 14 | else 15 | span.count= '%s posts'%posts.length 16 | .set 17 | for post in posts 18 | a(href=post.url) 19 | cover = post.cover or post.metadata.cover or '/farbox_free_image.jpg' 20 | loop_key = '%s-%s' % (l_index, loop.index) 21 | img(src='%s?width=240&height=120&fixed=true&index=%s'% (cover, loop_key)) 22 | .hover 23 | span.date= post.date.format('%b %d,%Y') 24 | span.title= post.title 25 | .clear 26 | 27 | include include/paginator.jade 28 | -------------------------------------------------------------------------------- /template_packages/Violet/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 4 | meta(content="yes", name="apple-mobile-web-app-capable") 5 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 6 | meta(content="telephone=no", name="format-detection") 7 | meta(name="renderer", content="webkit") 8 | meta(name="keywords", content=site.configs.keywords.escaped) 9 | meta(name="description", content=site.raw_content.escaped) 10 | block title 11 | title= request.args.s or post.title or tags.join('+') or site.title 12 | load('fonts /template/style/basic.scss /template/style/style.scss') 13 | body 14 | #body_wrapper 15 | if site.configs.cover and has(site.configs.cover) 16 | site_cover = site.configs.cover 17 | else 18 | site_cover = '/farbox_free_image.jpg' 19 | #header.header(style="background-image: url({{site_cover}}?blur=true)") 20 | .header_wrapper 21 | h1.title 22 | a(href='/')= site.title 23 | ul.nav 24 | li 25 | a(href="/") Home 26 | if has('images') 27 | li 28 | a(href='/album') Albums 29 | if not has('posts') 30 | +redirect('/album') 31 | if has('posts') 32 | li 33 | a(href='/archive') Archive 34 | pages = get_data(status='pages', type='post', limit=5, with_page=False, sort='position') 35 | for page_p in pages 36 | li 37 | a(href="/{{page_p.path}}")= page_p.filename.split('.')[0].title() 38 | #main 39 | block content 40 | #footer 41 | .powered_by 42 | a(href="https://www.farbox.com", target="_blank") Powered By FarBox.com 43 | .designed_by 44 | span Designed by 45 | a(href="http://www.zhanxin.info/") zhanxin.lin 46 | -------------------------------------------------------------------------------- /template_packages/Violet/include/paginator.jade: -------------------------------------------------------------------------------- 1 | if paginator.has_pre or paginator.has_next 2 | .clear 3 | .pager.common_width 4 | ul 5 | for p in range(1, paginator.total_pages+1) 6 | if paginator.page==p 7 | li 8 | a.current(href="javascript:void(0)")= p 9 | else 10 | li 11 | a(href='/page/%s'%p)= p 12 | .clear -------------------------------------------------------------------------------- /template_packages/Violet/include/posts_list.jade: -------------------------------------------------------------------------------- 1 | .posts 2 | for post in posts 3 | bg_class = 'post_bg_one' if loop.index%2 else 'post_bg_two' 4 | div(class='post_bg '+bg_class) 5 | .post.post_in_list.common_width 6 | h2.title 7 | a(href=post.url)= post.title 8 | span.date= post.date.format('%Y-%m-%d') 9 | .post_body= post.content.limit(300).split('', 1)[0]+'' 10 | .read_more 11 | a(href=post.url) Read More 12 | 13 | include include/paginator -------------------------------------------------------------------------------- /template_packages/Violet/index+tag.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | title= request.args.s or tags.join('+') or site.title 4 | 5 | block content 6 | include include/posts_list -------------------------------------------------------------------------------- /template_packages/Violet/markdown+pages.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | if request.path.startswith('/pages') 3 | post = get_doc(path2+'.md') or get_doc(path2+'.txt') or get_doc(path2+'.mk') or get_doc(path2+'.markdown') 4 | block title 5 | title= post.title 6 | block content 7 | .post.markdown_container.common_width 8 | .post_body.markdown_body= post.content -------------------------------------------------------------------------------- /template_packages/Violet/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | title= post.title 4 | block content 5 | .post.post_in_detail 6 | .post_header 7 | .common_width 8 | h2.title= post.title 9 | if post.tags 10 | .tags 11 | for tag in post.tags 12 | a(href="/tag/{{tag}}")= '#'+tag 13 | span.date Published on {{post.date.format('%Y-%m-%d')}} 14 | 15 | .common_width 16 | .post_body= post.content 17 | 18 | .other_posts 19 | .common_width 20 | if pre_one 21 | a.pre(href='{{pre_one.url}}#main') 22 | i.fa.fa-arrow-circle-left 23 | span= pre_one.title 24 | if next_one 25 | a.next(href='{{next_one.url}}#main') 26 | span= next_one.title 27 | i.fa.fa-arrow-circle-right 28 | .clear 29 | .comments_container 30 | .common_width 31 | include include/comments.jade -------------------------------------------------------------------------------- /template_packages/Writer/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Rory Gibson - Released under The MIT License. 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Writer/README.md: -------------------------------------------------------------------------------- 1 | # FarBoxwriter 2 | 3 | FarBoxwriter is a simple AJAX driven theme for the [Farbox](https://www.farbox.com) blogging platform released under the MIT License. 4 | 5 | And it's also a fork of [ghostwriter](https://github.com/roryg/ghostwriter), but with less codes. 6 | 7 | 8 | -------------------------------------------------------------------------------- /template_packages/Writer/assets/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v2.1.2 | MIT License | git.io/normalize */ 2 | 3 | /* ========================================================================== 4 | HTML5 display definitions 5 | ========================================================================== */ 6 | 7 | /** 8 | * Correct `block` display not defined in IE 8/9. 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | main, 20 | nav, 21 | section, 22 | summary { 23 | display: block; 24 | } 25 | 26 | /** 27 | * Correct `inline-block` display not defined in IE 8/9. 28 | */ 29 | 30 | audio, 31 | canvas, 32 | video { 33 | display: inline-block; 34 | } 35 | 36 | /** 37 | * Prevent modern browsers from displaying `audio` without controls. 38 | * Remove excess height in iOS 5 devices. 39 | */ 40 | 41 | audio:not([controls]) { 42 | display: none; 43 | height: 0; 44 | } 45 | 46 | /** 47 | * Address styling not present in IE 8/9. 48 | */ 49 | 50 | [hidden] { 51 | display: none; 52 | } 53 | 54 | /* ========================================================================== 55 | Base 56 | ========================================================================== */ 57 | 58 | /** 59 | * 1. Set default font family to sans-serif. 60 | * 2. Prevent iOS text size adjust after orientation change, without disabling 61 | * user zoom. 62 | */ 63 | 64 | html { 65 | font-family: sans-serif; /* 1 */ 66 | -ms-text-size-adjust: 100%; /* 2 */ 67 | -webkit-text-size-adjust: 100%; /* 2 */ 68 | } 69 | 70 | /** 71 | * Remove default margin. 72 | */ 73 | 74 | body { 75 | margin: 0; 76 | } 77 | 78 | /* ========================================================================== 79 | Links 80 | ========================================================================== */ 81 | 82 | /** 83 | * Address `outline` inconsistency between Chrome and other browsers. 84 | */ 85 | 86 | a:focus { 87 | outline: thin dotted; 88 | } 89 | 90 | /** 91 | * Improve readability when focused and also mouse hovered in all browsers. 92 | */ 93 | 94 | a:active, 95 | a:hover { 96 | outline: 0; 97 | } 98 | 99 | /* ========================================================================== 100 | Typography 101 | ========================================================================== */ 102 | 103 | /** 104 | * Address variable `h1` font-size and margin within `section` and `article` 105 | * contexts in Firefox 4+, Safari 5, and Chrome. 106 | */ 107 | 108 | h1 { 109 | font-size: 2em; 110 | margin: 0.67em 0; 111 | } 112 | 113 | /** 114 | * Address styling not present in IE 8/9, Safari 5, and Chrome. 115 | */ 116 | 117 | abbr[title] { 118 | border-bottom: 1px dotted; 119 | } 120 | 121 | /** 122 | * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. 123 | */ 124 | 125 | b, 126 | strong { 127 | font-weight: bold; 128 | } 129 | 130 | /** 131 | * Address styling not present in Safari 5 and Chrome. 132 | */ 133 | 134 | dfn { 135 | font-style: italic; 136 | } 137 | 138 | /** 139 | * Address differences between Firefox and other browsers. 140 | */ 141 | 142 | hr { 143 | -moz-box-sizing: content-box; 144 | box-sizing: content-box; 145 | height: 0; 146 | } 147 | 148 | /** 149 | * Address styling not present in IE 8/9. 150 | */ 151 | 152 | mark { 153 | background: #ff0; 154 | color: #000; 155 | } 156 | 157 | /** 158 | * Correct font family set oddly in Safari 5 and Chrome. 159 | */ 160 | 161 | code, 162 | kbd, 163 | pre, 164 | samp { 165 | font-family: monospace, serif; 166 | font-size: 1em; 167 | } 168 | 169 | /** 170 | * Improve readability of pre-formatted text in all browsers. 171 | */ 172 | 173 | pre { 174 | white-space: pre-wrap; 175 | } 176 | 177 | /** 178 | * Set consistent quote types. 179 | */ 180 | 181 | q { 182 | quotes: "\201C" "\201D" "\2018" "\2019"; 183 | } 184 | 185 | /** 186 | * Address inconsistent and variable font size in all browsers. 187 | */ 188 | 189 | small { 190 | font-size: 80%; 191 | } 192 | 193 | /** 194 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 195 | */ 196 | 197 | sub, 198 | sup { 199 | font-size: 75%; 200 | line-height: 0; 201 | position: relative; 202 | vertical-align: baseline; 203 | } 204 | 205 | sup { 206 | top: -0.5em; 207 | } 208 | 209 | sub { 210 | bottom: -0.25em; 211 | } 212 | 213 | /* ========================================================================== 214 | Embedded content 215 | ========================================================================== */ 216 | 217 | /** 218 | * Remove border when inside `a` element in IE 8/9. 219 | */ 220 | 221 | img { 222 | border: 0; 223 | } 224 | 225 | /** 226 | * Correct overflow displayed oddly in IE 9. 227 | */ 228 | 229 | svg:not(:root) { 230 | overflow: hidden; 231 | } 232 | 233 | /* ========================================================================== 234 | Figures 235 | ========================================================================== */ 236 | 237 | /** 238 | * Address margin not present in IE 8/9 and Safari 5. 239 | */ 240 | 241 | figure { 242 | margin: 0; 243 | } 244 | 245 | /* ========================================================================== 246 | Forms 247 | ========================================================================== */ 248 | 249 | /** 250 | * Define consistent border, margin, and padding. 251 | */ 252 | 253 | fieldset { 254 | border: 1px solid #c0c0c0; 255 | margin: 0 2px; 256 | padding: 0.35em 0.625em 0.75em; 257 | } 258 | 259 | /** 260 | * 1. Correct `color` not being inherited in IE 8/9. 261 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 262 | */ 263 | 264 | legend { 265 | border: 0; /* 1 */ 266 | padding: 0; /* 2 */ 267 | } 268 | 269 | /** 270 | * 1. Correct font family not being inherited in all browsers. 271 | * 2. Correct font size not being inherited in all browsers. 272 | * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. 273 | */ 274 | 275 | button, 276 | input, 277 | select, 278 | textarea { 279 | font-family: inherit; /* 1 */ 280 | font-size: 100%; /* 2 */ 281 | margin: 0; /* 3 */ 282 | } 283 | 284 | /** 285 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 286 | * the UA stylesheet. 287 | */ 288 | 289 | button, 290 | input { 291 | line-height: normal; 292 | } 293 | 294 | /** 295 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 296 | * All other form control elements do not inherit `text-transform` values. 297 | * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. 298 | * Correct `select` style inheritance in Firefox 4+ and Opera. 299 | */ 300 | 301 | button, 302 | select { 303 | text-transform: none; 304 | } 305 | 306 | /** 307 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 308 | * and `video` controls. 309 | * 2. Correct inability to style clickable `input` types in iOS. 310 | * 3. Improve usability and consistency of cursor style between image-type 311 | * `input` and others. 312 | */ 313 | 314 | button, 315 | html input[type="button"], /* 1 */ 316 | input[type="reset"], 317 | input[type="submit"] { 318 | -webkit-appearance: button; /* 2 */ 319 | cursor: pointer; /* 3 */ 320 | } 321 | 322 | /** 323 | * Re-set default cursor for disabled elements. 324 | */ 325 | 326 | button[disabled], 327 | html input[disabled] { 328 | cursor: default; 329 | } 330 | 331 | /** 332 | * 1. Address box sizing set to `content-box` in IE 8/9. 333 | * 2. Remove excess padding in IE 8/9. 334 | */ 335 | 336 | input[type="checkbox"], 337 | input[type="radio"] { 338 | box-sizing: border-box; /* 1 */ 339 | padding: 0; /* 2 */ 340 | } 341 | 342 | /** 343 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 344 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 345 | * (include `-moz` to future-proof). 346 | */ 347 | 348 | input[type="search"] { 349 | -webkit-appearance: textfield; /* 1 */ 350 | -moz-box-sizing: content-box; 351 | -webkit-box-sizing: content-box; /* 2 */ 352 | box-sizing: content-box; 353 | } 354 | 355 | /** 356 | * Remove inner padding and search cancel button in Safari 5 and Chrome 357 | * on OS X. 358 | */ 359 | 360 | input[type="search"]::-webkit-search-cancel-button, 361 | input[type="search"]::-webkit-search-decoration { 362 | -webkit-appearance: none; 363 | } 364 | 365 | /** 366 | * Remove inner padding and border in Firefox 4+. 367 | */ 368 | 369 | button::-moz-focus-inner, 370 | input::-moz-focus-inner { 371 | border: 0; 372 | padding: 0; 373 | } 374 | 375 | /** 376 | * 1. Remove default vertical scrollbar in IE 8/9. 377 | * 2. Improve readability and alignment in all browsers. 378 | */ 379 | 380 | textarea { 381 | overflow: auto; /* 1 */ 382 | vertical-align: top; /* 2 */ 383 | } 384 | 385 | /* ========================================================================== 386 | Tables 387 | ========================================================================== */ 388 | 389 | /** 390 | * Remove most spacing between table cells. 391 | */ 392 | 393 | table { 394 | border-collapse: collapse; 395 | border-spacing: 0; 396 | } 397 | -------------------------------------------------------------------------------- /template_packages/Writer/assets/css/nprogress.css: -------------------------------------------------------------------------------- 1 | /* Make clicks pass-through */ 2 | #nprogress { 3 | pointer-events: none; 4 | -webkit-pointer-events: none; 5 | } 6 | 7 | #nprogress .bar { 8 | background: #29d; 9 | 10 | position: fixed; 11 | z-index: 100; 12 | top: 0; 13 | left: 0; 14 | 15 | width: 100%; 16 | height: 2px; 17 | } 18 | 19 | /* Fancy blur effect */ 20 | #nprogress .peg { 21 | display: block; 22 | position: absolute; 23 | right: 0px; 24 | width: 100px; 25 | height: 100%; 26 | box-shadow: 0 0 10px #29d, 0 0 5px #29d; 27 | opacity: 1.0; 28 | 29 | -webkit-transform: rotate(3deg) translate(0px, -4px); 30 | -moz-transform: rotate(3deg) translate(0px, -4px); 31 | -ms-transform: rotate(3deg) translate(0px, -4px); 32 | -o-transform: rotate(3deg) translate(0px, -4px); 33 | transform: rotate(3deg) translate(0px, -4px); 34 | } 35 | 36 | /* Remove these to get rid of the spinner */ 37 | #nprogress .spinner { 38 | display: block; 39 | position: fixed; 40 | z-index: 100; 41 | top: 15px; 42 | right: 15px; 43 | } 44 | 45 | #nprogress .spinner-icon { 46 | width: 14px; 47 | height: 14px; 48 | 49 | border: solid 2px transparent; 50 | border-top-color: #29d; 51 | border-left-color: #29d; 52 | border-radius: 10px; 53 | 54 | -webkit-animation: nprogress-spinner 400ms linear infinite; 55 | -moz-animation: nprogress-spinner 400ms linear infinite; 56 | -ms-animation: nprogress-spinner 400ms linear infinite; 57 | -o-animation: nprogress-spinner 400ms linear infinite; 58 | animation: nprogress-spinner 400ms linear infinite; 59 | } 60 | 61 | @-webkit-keyframes nprogress-spinner { 62 | 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 63 | 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } 64 | } 65 | @-moz-keyframes nprogress-spinner { 66 | 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } 67 | 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } 68 | } 69 | @-o-keyframes nprogress-spinner { 70 | 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } 71 | 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } 72 | } 73 | @-ms-keyframes nprogress-spinner { 74 | 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } 75 | 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } 76 | } 77 | @keyframes nprogress-spinner { 78 | 0% { transform: rotate(0deg); transform: rotate(0deg); } 79 | 100% { transform: rotate(360deg); transform: rotate(360deg); } 80 | } 81 | 82 | -------------------------------------------------------------------------------- /template_packages/Writer/assets/css/style.scss: -------------------------------------------------------------------------------- 1 | // ============================================================ // 2 | // Colours // 3 | // ============================================================ // 4 | 5 | $primary: #F03838; 6 | $secondary: #303030; 7 | $background: #FEFEFE; 8 | 9 | /* ============================================================ */ 10 | /* Base */ 11 | /* ============================================================ */ 12 | 13 | html, body { height: 100%; } 14 | 15 | body { 16 | background: $background; 17 | color: #424242; 18 | font-family: "Open Sans", arial, sans-serif; 19 | font-size: 18px; 20 | } 21 | 22 | h1, h2, h3, h4, h5, h6 { 23 | margin-bottom: 33px; 24 | text-transform: none; 25 | } 26 | 27 | h1 { font-size: 26px; } 28 | h2 { font-size: 24px; } 29 | h3 { font-size: 20px; margin-bottom: 20px; } 30 | h4 { font-size: 18px; margin-bottom: 18px; } 31 | h5 { font-size: 16px; margin-bottom: 15px; } 32 | h6 { font-size: 14px; margin-bottom: 12px; } 33 | 34 | p { 35 | line-height: 1.8; 36 | margin: 0 0 30px; 37 | } 38 | 39 | a { 40 | color: $primary; 41 | text-decoration: none; 42 | } 43 | 44 | ul, ol { 45 | list-style-position: inside; 46 | line-height: 1.8; 47 | margin: 0 0 40px; 48 | padding: 0; 49 | 50 | ul, ol { margin: 10px 0 0 20px; } 51 | 52 | li { 53 | margin: 0 0 10px; 54 | 55 | &:last-of-type { margin-bottom: 0; } 56 | } 57 | } 58 | 59 | ul p, ol p{ 60 | overflow: visible; 61 | } 62 | 63 | blockquote { 64 | border-left: 1px dotted $secondary; 65 | margin: 40px 0; 66 | padding: 5px 30px; 67 | 68 | p { 69 | color: #AEADAD; 70 | display: block; 71 | font-style: italic; 72 | margin: 0; 73 | width: 100%; 74 | } 75 | } 76 | 77 | img { 78 | display: block; 79 | margin: 40px 0; 80 | width: auto; 81 | max-width: 100%; 82 | } 83 | 84 | pre { 85 | background: #F1F0EA; 86 | border: 1px solid #DDDBCC; 87 | border-radius: 3px; 88 | margin: 0 0 40px; 89 | padding: 15px 20px; 90 | } 91 | 92 | hr { 93 | border: none; 94 | border-bottom: 1px dotted #303030; 95 | margin: 45px 0; 96 | } 97 | 98 | table { 99 | margin-bottom:40px; 100 | width: 100%; 101 | 102 | tbody > tr:nth-child(odd) > td, 103 | tbody > tr:nth-child(odd) > th { 104 | background-color: #f7f7f3; 105 | } 106 | 107 | th { 108 | padding: 0 10px 10px; 109 | text-align: left; 110 | } 111 | 112 | td { padding: 10px; } 113 | 114 | tr { border-bottom: 1px dotted #AEADAD; } 115 | } 116 | 117 | ::selection { 118 | background: #FFF5B8; 119 | color: #000; 120 | display: block; 121 | } 122 | 123 | ::-moz-selection { 124 | background: #FFF5B8; 125 | color: #000; 126 | display: block; 127 | } 128 | 129 | .fluid-width-video-wrapper { margin-bottom: 40px; } 130 | 131 | /* ============================================================ */ 132 | /* General Appearance */ 133 | /* ============================================================ */ 134 | 135 | .container { 136 | margin: 0 auto; 137 | position: relative; 138 | width: 100%; 139 | max-width: 889px; 140 | } 141 | 142 | #wrapper { 143 | height: auto; 144 | min-height: 100%; 145 | /* This must be the same as the height of the footer */ 146 | margin-bottom: -265px; 147 | 148 | &:after { 149 | content: ""; 150 | display: block; 151 | /* This must be the same as the height of the footer */ 152 | height: 265px; 153 | } 154 | } 155 | 156 | .button { 157 | background: $secondary; 158 | border: none; 159 | border-radius: 3px; 160 | color: #FEFEFE; 161 | font-size: 14px; 162 | font-weight: 700; 163 | padding: 10px 12px; 164 | text-transform: uppercase; 165 | 166 | &:hover { background: $primary; } 167 | } 168 | 169 | .button-square { 170 | background: $primary; 171 | color: #FFF; 172 | float: left; 173 | font-size: 17px; 174 | margin: 0 0 0 10px; 175 | padding: 3px 8px 4px; 176 | 177 | &:hover { background: $secondary; } 178 | } 179 | 180 | /* ============================================================ */ 181 | /* Site Header */ 182 | /* ============================================================ */ 183 | 184 | .site-header { 185 | padding: 100px 0 0; 186 | overflow: auto; 187 | text-align: center; 188 | text-transform: uppercase; 189 | } 190 | 191 | .site-title-wrapper { 192 | display: table; 193 | margin: 0 auto; 194 | } 195 | 196 | .site-title { 197 | float: left; 198 | font-size: 14px; 199 | font-weight: 600; 200 | margin: 0; 201 | text-transform: uppercase; 202 | 203 | a { 204 | float: left; 205 | background: $primary; 206 | color: #FEFEFE; 207 | padding: 5px 10px 6px; 208 | 209 | &:hover { background: $secondary; } 210 | } 211 | } 212 | 213 | .site-nav { 214 | list-style: none; 215 | margin: 28px 0 10px; 216 | } 217 | 218 | .site-nav-item { 219 | display: inline-block; 220 | font-size: 14px; 221 | font-weight: 700; 222 | margin: 0 10px; 223 | 224 | a:hover { color: #424242; } 225 | } 226 | 227 | /* ============================================================ */ 228 | /* Post */ 229 | /* ============================================================ */ 230 | 231 | #latest-post { display: none; } 232 | 233 | .post-container { margin: 0 40px; } 234 | 235 | .post-header { 236 | border-bottom: 6px solid $secondary; 237 | margin: 0 0 50px; 238 | padding: 0 0 80px; 239 | text-align: center; 240 | text-transform: uppercase; 241 | } 242 | 243 | .post-title { 244 | font-size: 52px; 245 | font-weight: 700; 246 | margin: 15px 0; 247 | text-transform: uppercase; 248 | } 249 | 250 | .post-date, 251 | .blog-description { 252 | color: #AEADAD; 253 | font-size: 14px; 254 | font-weight: 600; 255 | line-height: 1; 256 | margin: 25px 0 0; 257 | 258 | &:after { 259 | border-bottom: 1px dotted $secondary; 260 | content: ""; 261 | display: block; 262 | margin: 40px auto 0; 263 | width: 100px; 264 | } 265 | } 266 | 267 | .post-content { 268 | margin: 0 0 92px; 269 | 270 | a:hover { 271 | border-bottom: 1px dotted $primary; 272 | padding: 0 0 2px; 273 | } 274 | } 275 | 276 | .post-tags { 277 | color: #AEADAD; 278 | font-size: 14px; 279 | 280 | span { font-weight: 600; } 281 | } 282 | 283 | .post-navigation { 284 | display: table; 285 | margin: 70px auto 100px; 286 | } 287 | 288 | .newer-posts, 289 | .older-posts { 290 | float: left; 291 | background: $primary; 292 | color: #FEFEFE; 293 | font-size: 14px; 294 | font-weight: 600; 295 | margin: 0 5px; 296 | padding: 5px 10px 6px; 297 | text-transform: uppercase; 298 | 299 | &:hover { 300 | background: $secondary; 301 | } 302 | } 303 | 304 | .page-number { display: none; } 305 | 306 | /* ============================================================ */ 307 | /* Post Index */ 308 | /* ============================================================ */ 309 | 310 | .post-list { 311 | border-top: 6px solid $secondary; 312 | list-style: none; 313 | margin: 80px 40px 0; 314 | padding: 35px 0 0; 315 | } 316 | 317 | .post-stub { 318 | border-bottom: 1px dotted $secondary; 319 | margin: 0; 320 | position: relative; 321 | 322 | &:first-child { padding-top: 0; } 323 | 324 | a { 325 | -webkit-transition: all 0.2s ease-in-out; 326 | -moz-transition: all 0.2s ease-in-out; 327 | transition: all 0.2s ease-in-out; 328 | display: block; 329 | color: #424242; 330 | padding: 20px 5px; 331 | 332 | &:hover { 333 | background: #FCF5F5; 334 | color: $primary; 335 | padding: 20px 12px; 336 | 337 | .post-stub-tag { background: $primary; } 338 | } 339 | } 340 | } 341 | 342 | .post-stub-tag { 343 | background: $secondary; 344 | border-radius: 3px; 345 | color: #FFF; 346 | float: right; 347 | font-size: 10px; 348 | margin: 7px 0 0; 349 | padding: 0 5px; 350 | text-transform: uppercase; 351 | } 352 | 353 | .post-stub-title { 354 | display: inline-block; 355 | margin: 0; 356 | text-transform: none; 357 | } 358 | 359 | .post-stub-date { 360 | display: inline-block; 361 | 362 | &:before { content: "/ "; } 363 | } 364 | 365 | .next-posts-link a, 366 | .previous-posts-link a { 367 | display: block; 368 | padding: 8px 11px; 369 | } 370 | 371 | /* ============================================================ */ 372 | /* Footer */ 373 | /* ============================================================ */ 374 | 375 | .footer { 376 | background: $secondary; 377 | color: #D3D3D3; 378 | height: 265px; 379 | overflow: auto; 380 | 381 | .site-title-wrapper { margin: 80px auto 35px; } 382 | 383 | .site-title a:hover, 384 | .button-square:hover { 385 | background: #121212; 386 | } 387 | 388 | .button-jump-top { 389 | font-size: 23px; 390 | line-height: 1.1; 391 | padding-top: 1px; 392 | } 393 | } 394 | 395 | .footer-copyright { 396 | color: #656565; 397 | font-size: 14px; 398 | margin: 0; 399 | text-align: center; 400 | 401 | a { 402 | color: #656565; 403 | font-weight: 700; 404 | margin: 0 5px; 405 | 406 | &:hover { color: #FEFEFE; } 407 | } 408 | } 409 | 410 | /* ============================================================ */ 411 | /* NProgress */ 412 | /* ============================================================ */ 413 | 414 | #nprogress .bar { background: $primary; } 415 | 416 | #nprogress .peg { box-shadow: 0 0 10px $primary, 0 0 5px $primary; } 417 | 418 | #nprogress .spinner-icon { 419 | border-top-color: $primary; 420 | border-left-color: $primary; 421 | } 422 | 423 | /* ============================================================ */ 424 | /* Media Queries */ 425 | /* ============================================================ */ 426 | 427 | @media only screen and (max-width: 800px) { 428 | .post-stub-tag { display: none; } 429 | } 430 | 431 | @media only screen and (max-width: 600px) { 432 | .site-nav-item { 433 | display: block; 434 | margin: 15px 0; 435 | } 436 | 437 | .post-stub-title { display: block; } 438 | 439 | .post-stub-date:before { 440 | content: ""; 441 | display: block; 442 | } 443 | 444 | .post-container, 445 | .post-list { 446 | margin-right: 25px; 447 | margin-left: 25px; 448 | } 449 | } 450 | 451 | @media only screen and (max-width: 400px) { 452 | .post-title { font-size: 32px; } 453 | 454 | .post-container, 455 | .post-list { 456 | margin-right: 15px; 457 | margin-left: 15px; 458 | } 459 | } -------------------------------------------------------------------------------- /template_packages/Writer/assets/js/jquery.fitvids.js: -------------------------------------------------------------------------------- 1 | /*global jQuery */ 2 | /*jshint multistr:true browser:true */ 3 | /*! 4 | * FitVids 1.0.3 5 | * 6 | * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com 7 | * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ 8 | * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ 9 | * 10 | * Date: Thu Sept 01 18:00:00 2011 -0500 11 | */ 12 | 13 | (function( $ ){ 14 | 15 | "use strict"; 16 | 17 | $.fn.fitVids = function( options ) { 18 | var settings = { 19 | customSelector: null 20 | }; 21 | 22 | if(!document.getElementById('fit-vids-style')) { 23 | 24 | var div = document.createElement('div'), 25 | ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0], 26 | cssStyles = '­'; 27 | 28 | div.className = 'fit-vids-style'; 29 | div.id = 'fit-vids-style'; 30 | div.style.display = 'none'; 31 | div.innerHTML = cssStyles; 32 | 33 | ref.parentNode.insertBefore(div,ref); 34 | 35 | } 36 | 37 | if ( options ) { 38 | $.extend( settings, options ); 39 | } 40 | 41 | return this.each(function(){ 42 | var selectors = [ 43 | "iframe[src*='player.vimeo.com']", 44 | "iframe[src*='youtube.com']", 45 | "iframe[src*='youtube-nocookie.com']", 46 | "iframe[src*='kickstarter.com'][src*='video.html']", 47 | "object", 48 | "embed" 49 | ]; 50 | 51 | if (settings.customSelector) { 52 | selectors.push(settings.customSelector); 53 | } 54 | 55 | var $allVideos = $(this).find(selectors.join(',')); 56 | $allVideos = $allVideos.not("object object"); // SwfObj conflict patch 57 | 58 | $allVideos.each(function(){ 59 | var $this = $(this); 60 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } 61 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), 62 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), 63 | aspectRatio = height / width; 64 | if(!$this.attr('id')){ 65 | var videoID = 'fitvid' + Math.floor(Math.random()*999999); 66 | $this.attr('id', videoID); 67 | } 68 | $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%"); 69 | $this.removeAttr('height').removeAttr('width'); 70 | }); 71 | }); 72 | }; 73 | // Works with either jQuery or Zepto 74 | })( window.jQuery || window.Zepto ); 75 | -------------------------------------------------------------------------------- /template_packages/Writer/assets/js/nprogress.js: -------------------------------------------------------------------------------- 1 | /*! NProgress (c) 2013, Rico Sta. Cruz 2 | * http://ricostacruz.com/nprogress */ 3 | 4 | ;(function(factory) { 5 | 6 | if (typeof module === 'function') { 7 | module.exports = factory(this.jQuery || require('jquery')); 8 | } else { 9 | this.NProgress = factory(this.jQuery); 10 | } 11 | 12 | })(function($) { 13 | var NProgress = {}; 14 | 15 | NProgress.version = '0.1.2'; 16 | 17 | var Settings = NProgress.settings = { 18 | minimum: 0.08, 19 | easing: 'ease', 20 | positionUsing: '', 21 | speed: 200, 22 | trickle: true, 23 | trickleRate: 0.02, 24 | trickleSpeed: 800, 25 | showSpinner: true, 26 | template: '
' 27 | }; 28 | 29 | /** 30 | * Updates configuration. 31 | * 32 | * NProgress.configure({ 33 | * minimum: 0.1 34 | * }); 35 | */ 36 | NProgress.configure = function(options) { 37 | $.extend(Settings, options); 38 | return this; 39 | }; 40 | 41 | /** 42 | * Last number. 43 | */ 44 | 45 | NProgress.status = null; 46 | 47 | /** 48 | * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`. 49 | * 50 | * NProgress.set(0.4); 51 | * NProgress.set(1.0); 52 | */ 53 | 54 | NProgress.set = function(n) { 55 | var started = NProgress.isStarted(); 56 | 57 | n = clamp(n, Settings.minimum, 1); 58 | NProgress.status = (n === 1 ? null : n); 59 | 60 | var $progress = NProgress.render(!started), 61 | $bar = $progress.find('[role="bar"]'), 62 | speed = Settings.speed, 63 | ease = Settings.easing; 64 | 65 | $progress[0].offsetWidth; /* Repaint */ 66 | 67 | $progress.queue(function(next) { 68 | // Set positionUsing if it hasn't already been set 69 | if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); 70 | 71 | // Add transition 72 | $bar.css(barPositionCSS(n, speed, ease)); 73 | 74 | if (n === 1) { 75 | // Fade out 76 | $progress.css({ transition: 'none', opacity: 1 }); 77 | $progress[0].offsetWidth; /* Repaint */ 78 | 79 | setTimeout(function() { 80 | $progress.css({ transition: 'all '+speed+'ms linear', opacity: 0 }); 81 | setTimeout(function() { 82 | NProgress.remove(); 83 | next(); 84 | }, speed); 85 | }, speed); 86 | } else { 87 | setTimeout(next, speed); 88 | } 89 | }); 90 | 91 | return this; 92 | }; 93 | 94 | NProgress.isStarted = function() { 95 | return typeof NProgress.status === 'number'; 96 | }; 97 | 98 | /** 99 | * Shows the progress bar. 100 | * This is the same as setting the status to 0%, except that it doesn't go backwards. 101 | * 102 | * NProgress.start(); 103 | * 104 | */ 105 | NProgress.start = function() { 106 | if (!NProgress.status) NProgress.set(0); 107 | 108 | var work = function() { 109 | setTimeout(function() { 110 | if (!NProgress.status) return; 111 | NProgress.trickle(); 112 | work(); 113 | }, Settings.trickleSpeed); 114 | }; 115 | 116 | if (Settings.trickle) work(); 117 | 118 | return this; 119 | }; 120 | 121 | /** 122 | * Hides the progress bar. 123 | * This is the *sort of* the same as setting the status to 100%, with the 124 | * difference being `done()` makes some placebo effect of some realistic motion. 125 | * 126 | * NProgress.done(); 127 | * 128 | * If `true` is passed, it will show the progress bar even if its hidden. 129 | * 130 | * NProgress.done(true); 131 | */ 132 | 133 | NProgress.done = function(force) { 134 | if (!force && !NProgress.status) return this; 135 | 136 | return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); 137 | }; 138 | 139 | /** 140 | * Increments by a random amount. 141 | */ 142 | 143 | NProgress.inc = function(amount) { 144 | var n = NProgress.status; 145 | 146 | if (!n) { 147 | return NProgress.start(); 148 | } else { 149 | if (typeof amount !== 'number') { 150 | amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); 151 | } 152 | 153 | n = clamp(n + amount, 0, 0.994); 154 | return NProgress.set(n); 155 | } 156 | }; 157 | 158 | NProgress.trickle = function() { 159 | return NProgress.inc(Math.random() * Settings.trickleRate); 160 | }; 161 | 162 | /** 163 | * (Internal) renders the progress bar markup based on the `template` 164 | * setting. 165 | */ 166 | 167 | NProgress.render = function(fromStart) { 168 | if (NProgress.isRendered()) return $("#nprogress"); 169 | $('html').addClass('nprogress-busy'); 170 | 171 | var $el = $("
") 172 | .html(Settings.template); 173 | 174 | var perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0); 175 | 176 | $el.find('[role="bar"]').css({ 177 | transition: 'all 0 linear', 178 | transform: 'translate3d('+perc+'%,0,0)' 179 | }); 180 | 181 | if (!Settings.showSpinner) 182 | $el.find('[role="spinner"]').remove(); 183 | 184 | $el.appendTo(document.body); 185 | 186 | return $el; 187 | }; 188 | 189 | /** 190 | * Removes the element. Opposite of render(). 191 | */ 192 | 193 | NProgress.remove = function() { 194 | $('html').removeClass('nprogress-busy'); 195 | $('#nprogress').remove(); 196 | }; 197 | 198 | /** 199 | * Checks if the progress bar is rendered. 200 | */ 201 | 202 | NProgress.isRendered = function() { 203 | return ($("#nprogress").length > 0); 204 | }; 205 | 206 | /** 207 | * Determine which positioning CSS rule to use. 208 | */ 209 | 210 | NProgress.getPositioningCSS = function() { 211 | // Sniff on document.body.style 212 | var bodyStyle = document.body.style; 213 | 214 | // Sniff prefixes 215 | var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' : 216 | ('MozTransform' in bodyStyle) ? 'Moz' : 217 | ('msTransform' in bodyStyle) ? 'ms' : 218 | ('OTransform' in bodyStyle) ? 'O' : ''; 219 | 220 | if (vendorPrefix + 'Perspective' in bodyStyle) { 221 | // Modern browsers with 3D support, e.g. Webkit, IE10 222 | return 'translate3d'; 223 | } else if (vendorPrefix + 'Transform' in bodyStyle) { 224 | // Browsers without 3D support, e.g. IE9 225 | return 'translate'; 226 | } else { 227 | // Browsers without translate() support, e.g. IE7-8 228 | return 'margin'; 229 | } 230 | }; 231 | 232 | /** 233 | * Helpers 234 | */ 235 | 236 | function clamp(n, min, max) { 237 | if (n < min) return min; 238 | if (n > max) return max; 239 | return n; 240 | } 241 | 242 | /** 243 | * (Internal) converts a percentage (`0..1`) to a bar translateX 244 | * percentage (`-100%..0%`). 245 | */ 246 | 247 | function toBarPerc(n) { 248 | return (-1 + n) * 100; 249 | } 250 | 251 | 252 | /** 253 | * (Internal) returns the correct CSS for changing the bar's 254 | * position given an n percentage, and speed and ease from Settings 255 | */ 256 | 257 | function barPositionCSS(n, speed, ease) { 258 | var barCSS; 259 | 260 | if (Settings.positionUsing === 'translate3d') { 261 | barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; 262 | } else if (Settings.positionUsing === 'translate') { 263 | barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; 264 | } else { 265 | barCSS = { 'margin-left': toBarPerc(n)+'%' }; 266 | } 267 | 268 | barCSS.transition = 'all '+speed+'ms '+ease; 269 | 270 | return barCSS; 271 | } 272 | 273 | return NProgress; 274 | }); 275 | 276 | -------------------------------------------------------------------------------- /template_packages/Writer/assets/js/scripts.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | 3 | /* ============================================================ */ 4 | /* Responsive Videos */ 5 | /* ============================================================ */ 6 | 7 | $(".post-content").fitVids(); 8 | 9 | /* ============================================================ */ 10 | /* Scroll To Top */ 11 | /* ============================================================ */ 12 | 13 | $('.js-jump-top').on('click', function(e) { 14 | e.preventDefault(); 15 | 16 | $('html, body').animate({'scrollTop': 0}); 17 | }); 18 | 19 | /* ============================================================ */ 20 | /* Ajax Loading */ 21 | /* ============================================================ */ 22 | 23 | var History = window.History; 24 | var loading = false; 25 | var showIndex = false; 26 | var $ajaxContainer = $('#ajax-container'); 27 | var $latestPost = $('#latest-post'); 28 | var $postIndex = $('#post-index'); 29 | 30 | // Initially hide the index and show the latest post 31 | $latestPost.show(); 32 | $postIndex.hide(); 33 | 34 | // Show the index if the url has "page" in it (a simple 35 | // way of checking if we're on a paginated page.) 36 | if (window.location.pathname.indexOf('page') === 1) { 37 | $latestPost.hide(); 38 | $postIndex.show(); 39 | } 40 | 41 | // Check if history is enabled for the browser 42 | if ( ! History.enabled) { 43 | return false; 44 | } 45 | 46 | History.Adapter.bind(window, 'statechange', function() { 47 | var State = History.getState(); 48 | 49 | // Get the requested url and replace the current content 50 | // with the loaded content 51 | $.get(State.url, function(result) { 52 | var $html = $(result); 53 | var $newContent = $('#ajax-container', $html).contents(); 54 | 55 | $('html, body').animate({'scrollTop': 0}); 56 | 57 | $ajaxContainer.fadeOut(500, function() { 58 | $latestPost = $newContent.filter('#latest-post'); 59 | $postIndex = $newContent.filter('#post-index'); 60 | 61 | if (showIndex === true) { 62 | $latestPost.hide(); 63 | } else { 64 | $latestPost.show(); 65 | $postIndex.hide(); 66 | } 67 | 68 | // Re run fitvid.js 69 | $newContent.fitVids(); 70 | 71 | $ajaxContainer.html($newContent); 72 | $ajaxContainer.fadeIn(500); 73 | 74 | NProgress.done(); 75 | 76 | loading = false; 77 | showIndex = false; 78 | }); 79 | }); 80 | }); 81 | 82 | $('body').on('click', '.js-ajax-link, .pagination a', function(e) { 83 | e.preventDefault(); 84 | 85 | if (loading === false) { 86 | var currentState = History.getState(); 87 | var url = $(this).attr('href'); 88 | var title = $(this).attr('title') || null; 89 | 90 | // If the requested url is not the current states url push 91 | // the new state and make the ajax call. 92 | // currentState.url.replace(/\/$/, ""), use relative path instead, sometimes, both http & https work together. 93 | if (url !== currentState.url.replace(/https?:\/\/.*?\//, "/")) { 94 | loading = true; 95 | 96 | // Check if we need to show the post index after we've 97 | // loaded the new content 98 | if ($(this).hasClass('js-show-index') || $(this).parent('.pagination').length > 0) { 99 | showIndex = true; 100 | } 101 | 102 | NProgress.start(); 103 | 104 | History.pushState({}, title, url); 105 | } else { 106 | // Swap in the latest post or post index as needed 107 | if ($(this).hasClass('js-show-index')) { 108 | $('html, body').animate({'scrollTop': 0}); 109 | 110 | NProgress.start(); 111 | 112 | $latestPost.fadeOut(300, function() { 113 | $postIndex.fadeIn(300); 114 | NProgress.done(); 115 | }); 116 | } else { 117 | $('html, body').animate({'scrollTop': 0}); 118 | 119 | NProgress.start(); 120 | 121 | $postIndex.fadeOut(300, function() { 122 | $latestPost.fadeIn(300); 123 | NProgress.done(); 124 | }); 125 | } 126 | } 127 | } 128 | }); 129 | 130 | }); 131 | -------------------------------------------------------------------------------- /template_packages/Writer/index+post+markdown+tags.jade: -------------------------------------------------------------------------------- 1 | html 2 | mixin detail_article(post) 3 | article.post-container 4 | header.post-header 5 | h1.post-title= post.title 6 | p.post-data 7 | time(datetime=post.date.isoformat()) Published {{ post.date.format('%B %d, %Y') }} 8 | .post-content 9 | | {{ post.content }} 10 | if post.tags 11 | p.post-tags 12 | span Tagged: 13 | | {{ post.tags.join(" ") }} 14 | 15 | head 16 | meta(http-equiv="X-UA-Compatible", content="IE=edge,chrome=1") 17 | title= site.title or post.title 18 | meta(name="description", content=site.raw_content.escaped) 19 | meta(name="HandheldFriendly", content="True") 20 | meta(name="MobileOptimized", content="320") 21 | meta(name="viewport", content="width=device-width, initial-scale=1.0") 22 | +load("/template/assets/css", ('normalize.css', 'nprogress.css', 'style.scss')) 23 | +load("//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300&subset=latin,cyrillic-ext,latin-ext,cyrillic") 24 | +load("fonts") 25 | body 26 | if request.url_without_host.startswith('/?') 27 | site_url = request.url_without_host 28 | else 29 | site_url = '/' 30 | #wrapper 31 | header.site-header 32 | .container 33 | .site-title-wrapper 34 | h1.site-title 35 | a.js-ajax-link(title=site.title, href=site_url)= site.title 36 | a.button-square(href="/feed") 37 | i.fa.fa-rss 38 | ul.site-nav 39 | li.site-nav-item 40 | a.js-ajax-link(href=site_url) Lastest Post 41 | li.site-nav-item 42 | a.js-ajax-link.js-show-index(href=site_url) Browser Posts 43 | if has("about.md") 44 | li.site-nav-item 45 | a.js-ajax-link(href="/about.md") About 46 | #ajax-container 47 | if request.path == '/' or request.path.startswith('/page/') or request.path.startswith('/tags/') 48 | if posts 49 | lastest_post = posts[0] 50 | #latest-post.container 51 | +detail_article(lastest_post) 52 | #post-index.container 53 | ol.post-list 54 | for post in posts 55 | li.post-stub 56 | a.js-ajax-link(title=post.title, href=post.url) 57 | h4.post-stub-title= post.title 58 | time(datetime=post.date.isoformat()) Published {{ post.date.format('%B %d, %Y') }} 59 | .post-navigation 60 | .nav.pagination(role="pagination") 61 | if pager.has_pre 62 | a.newer-posts(href=pager.pre_url) ← Newer Posts 63 | span.page-number Page {{pager.page}} of {{ pager.total_pages}} 64 | if pager.has_next 65 | a.older-posts(href=pager.next_url) Older Posts → 66 | else 67 | .container 68 | +detail_article(post) 69 | footer.footer 70 | .container 71 | .site-title-wrapper 72 | h1.site-title 73 | a.js-ajax-link(title=site.title, href=site_url)= site.title 74 | a.button-square.button-jump-top.js-jump-top(href="#") 75 | i.fa.fa-angle-up 76 | p.footer-copyright 77 | | © {{ get_now().year }} / Published with FarBox 78 | a(href="http://jollygoodthemes.com/", target=="_blank") by roryg 79 | a(href="https://github.com/BuildFarBox/farboxwriter", target=="_blank") Codes 80 | a(href="/template") CloneTemplate 81 | 82 | 83 | +load('jquery') 84 | +load('/template/assets/js',('jquery.history.js','nprogress.js','jquery.fitvids.js','scripts.js')) 85 | -------------------------------------------------------------------------------- /template_packages/Writer/interface.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Site", 4 | "title_zh_cn": "网站设置", 5 | "auto_extends": true, 6 | "groups": [ 7 | { 8 | "title": "Site Info", 9 | "title_zh_cn": "网站信息", 10 | "cells": [ 11 | { 12 | "parts_per_line": 2, 13 | "parts": [ 14 | { 15 | "key": "title", 16 | "title": "Site Title", 17 | "title_zh_cn": "网站标题", 18 | "default_value": "My Site", 19 | "model": "text" 20 | } 21 | ] 22 | }, 23 | { 24 | "parts_per_line": 1, 25 | "parts":[ 26 | { 27 | "title": "Site Description", 28 | "title_zh_cn": "网站描述", 29 | "key": "raw_content", 30 | "model":"textarea" 31 | } 32 | ] 33 | } 34 | ] 35 | }, 36 | { 37 | "title": "Contents Display", 38 | "title_zh_cn": "内容显示", 39 | "cells":[ 40 | { 41 | "parts_per_line": 3, 42 | "parts":[ 43 | { 44 | "key": "posts_per_page", 45 | "title": "Posts per Page", 46 | "title_zh_cn": "每页显示日志数", 47 | "default_value": 3 48 | }, 49 | { 50 | "key": "post_content_type", 51 | "title": "Post Content Type", 52 | "title_zh_cn": "正文格式", 53 | "model": "select", 54 | "default_value": "markdown", 55 | "options": [ 56 | { 57 | "value": "markdown", 58 | "title": "Markdown" 59 | }, 60 | { 61 | "value": "plain", 62 | "title": "Plain Text with Images" 63 | } 64 | ], 65 | "options_zh_cn": [ 66 | { 67 | "value": "markdown", 68 | "title": "Markdown" 69 | }, 70 | { 71 | "value": "plain", 72 | "title": "普通文本+图片" 73 | } 74 | ] 75 | }, 76 | { 77 | "key": "post_paragraph_indent", 78 | "title": "Paragraph Text Indent", 79 | "title_zh_cn": "段落首行缩进", 80 | "model": "select", 81 | "default_value": "no", 82 | "options": [ 83 | { 84 | "value": "no", 85 | "title": "No indent" 86 | }, 87 | { 88 | "value": "hard", 89 | "title": "2 Letters Indent Every Line" 90 | }, 91 | { 92 | "value": "yes", 93 | "title": "2 Letters Indent Every Paragraph" 94 | } 95 | 96 | ], 97 | "options_zh_cn": [ 98 | { 99 | "value": "no", 100 | "title": "不缩进" 101 | }, 102 | { 103 | "value": "hard", 104 | "title": "每行缩进2字" 105 | }, 106 | { 107 | "value": "yes", 108 | "title": "每段缩进2字" 109 | } 110 | ] 111 | } 112 | ] 113 | } 114 | ] 115 | 116 | } 117 | ] 118 | } 119 | ] -------------------------------------------------------------------------------- /template_packages/Yukina/404.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | | Page not found 4 | block content 5 | article.post 6 | header.entry-header 7 | h1.entry-title Oh, darn, nothing here! 8 | .entry-content 9 | p It looks like this page has gone to page heaven. Try clicking the site title to go back home. -------------------------------------------------------------------------------- /template_packages/Yukina/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /template_packages/Yukina/README.markdown: -------------------------------------------------------------------------------- 1 | Theme Name: Yukina 2 | Original Author: imzoke 3 | Original Author URI: http://imzoke.com/ 4 | Description: A simple Pelican theme for simple humans who simply want to write. 5 | License: MIT -------------------------------------------------------------------------------- /template_packages/Yukina/base.jade: -------------------------------------------------------------------------------- 1 | html 2 | head 3 | load('/template/css/basic.css /template/css/style.css') 4 | title 5 | block title 6 | site.title 7 | meta(name="description", content=site.raw_content) 8 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 9 | meta(content="yes", name="apple-mobile-web-app-capable") 10 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 11 | meta(content="telephone=no", name="format-detection") 12 | body 13 | #wrapper.site 14 | .site-header 15 | header#masthead.banner 16 | h1.site-title 17 | a(href="/")= site.configs.author or site.title 18 | p.site-description= site.configs.subtitle 19 | #main.site-main 20 | #primary.content-area 21 | #content.site-content(role="main") 22 | block content 23 | 24 | #footer 25 | span Powered by 26 | a(href='http://www.farbox.com') FarBox -------------------------------------------------------------------------------- /template_packages/Yukina/css/basic.css: -------------------------------------------------------------------------------- 1 | 2 | /* =Reset 3 | -------------------------------------------------------------- */ 4 | 5 | html, body, div, span, applet, object, iframe, 6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 7 | a, abbr, acronym, address, big, cite, code, 8 | del, dfn, em, font, ins, kbd, q, s, samp, 9 | small, strike, strong, sub, sup, tt, var, 10 | dl, dt, dd, ol, ul, li, 11 | fieldset, form, label, legend, 12 | table, caption, tbody, tfoot, thead, tr, th, td { 13 | border: 0; 14 | font-family: inherit; 15 | font-size: 100%; 16 | font-style: inherit; 17 | font-weight: inherit; 18 | margin: 0; 19 | outline: 0; 20 | padding: 0; 21 | vertical-align: baseline; 22 | } 23 | html { 24 | font-size: 62.5%; 25 | overflow-y: scroll; 26 | -webkit-text-size-adjust: 100%; 27 | -ms-text-size-adjust: 100%; 28 | } 29 | body { 30 | background: #fff; 31 | } 32 | article, 33 | aside, 34 | details, 35 | figcaption, 36 | figure, 37 | footer, 38 | header, 39 | nav, 40 | section { 41 | display: block; 42 | } 43 | ol, ul { 44 | list-style: none; 45 | } 46 | table { 47 | border-collapse: separate; 48 | border-spacing: 0; 49 | } 50 | caption, th, td { 51 | font-weight: normal; 52 | text-align: left; 53 | } 54 | blockquote:before, blockquote:after, 55 | q:before, q:after { 56 | content: ""; 57 | } 58 | blockquote, q { 59 | quotes: "" ""; 60 | } 61 | a:focus { 62 | outline: thin dotted; 63 | } 64 | a:hover, 65 | a:active { 66 | outline: 0; 67 | } 68 | a img { 69 | border: 0; 70 | } 71 | 72 | 73 | /* =Global 74 | ----------------------------------------------- */ 75 | 76 | body, 77 | button, 78 | input, 79 | select, 80 | textarea { 81 | color: #404040; 82 | font-family: sans-serif; 83 | font-size: 16px; 84 | font-size: 1.6rem; 85 | line-height: 1.5; 86 | } 87 | 88 | /* Headings */ 89 | h1,h2,h3,h4,h5,h6 { 90 | clear: both; 91 | } 92 | hr { 93 | background-color: #ccc; 94 | border: 0; 95 | height: 1px; 96 | margin-bottom: 1.5em; 97 | } 98 | 99 | 100 | 101 | /* Text elements */ 102 | p { 103 | margin-bottom: 1.5em; 104 | } 105 | ul, ol { 106 | margin: 0 0 1.5em 3em; 107 | } 108 | ul { 109 | list-style: disc; 110 | } 111 | ol { 112 | list-style: decimal; 113 | } 114 | li > ul, 115 | li > ol { 116 | margin-bottom: 0; 117 | margin-left: 1.5em; 118 | } 119 | dt { 120 | font-weight: bold; 121 | } 122 | dd { 123 | margin: 0 1.5em 1.5em; 124 | } 125 | b, strong { 126 | font-weight: bold; 127 | } 128 | dfn, cite, em, i { 129 | font-style: italic; 130 | } 131 | blockquote { 132 | margin: 0 1.5em; 133 | } 134 | address { 135 | margin: 0 0 1.5em; 136 | } 137 | 138 | abbr, acronym { 139 | border-bottom: 1px dotted #666; 140 | cursor: help; 141 | } 142 | mark, ins { 143 | background: #fff9c0; 144 | text-decoration: none; 145 | } 146 | sup, 147 | sub { 148 | font-size: 75%; 149 | height: 0; 150 | line-height: 0; 151 | position: relative; 152 | vertical-align: baseline; 153 | } 154 | sup { 155 | bottom: 1ex; 156 | } 157 | sub { 158 | top: .5ex; 159 | } 160 | small { 161 | font-size: 75%; 162 | } 163 | big { 164 | font-size: 125%; 165 | } 166 | figure { 167 | margin: 0; 168 | } 169 | table { 170 | margin: 0 0 1.5em; 171 | width: 100%; 172 | } 173 | th { 174 | font-weight: bold; 175 | } 176 | img { 177 | height: auto; 178 | max-width: 100%; 179 | -webkit-border-radius: 5px; 180 | -moz-border-radius: 5px; 181 | border-radius: 5px; 182 | } 183 | button, 184 | input, 185 | select, 186 | textarea { 187 | font-size: 100%; 188 | margin: 0; 189 | vertical-align: baseline; 190 | *vertical-align: middle; 191 | } 192 | button, 193 | input { 194 | line-height: normal; 195 | } 196 | button, 197 | html input[type="button"], 198 | input[type="reset"], 199 | input[type="submit"] { 200 | border: 1px solid #ccc; 201 | border-color: #ccc #ccc #bbb #ccc; 202 | border-radius: 3px; 203 | background: #e6e6e6; 204 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), inset 0 15px 17px rgba(255, 255, 255, 0.5), inset 0 -5px 12px rgba(0, 0, 0, 0.05); 205 | color: rgba(0, 0, 0, .8); 206 | cursor: pointer; 207 | -webkit-appearance: button; 208 | font-size: 12px; 209 | font-size: 1.2rem; 210 | line-height: 1; 211 | padding: .6em 1em .4em; 212 | } 213 | button:hover, 214 | html input[type="button"]:hover, 215 | input[type="reset"]:hover, 216 | input[type="submit"]:hover { 217 | border-color: #ccc #bbb #aaa #bbb; 218 | 219 | } 220 | button:focus, 221 | html input[type="button"]:focus, 222 | input[type="reset"]:focus, 223 | input[type="submit"]:focus, 224 | button:active, 225 | html input[type="button"]:active, 226 | input[type="reset"]:active, 227 | input[type="submit"]:active { 228 | border-color: #aaa #bbb #bbb #bbb; 229 | } 230 | input[type="checkbox"], 231 | input[type="radio"] { 232 | box-sizing: border-box; 233 | padding: 0; 234 | } 235 | input[type="search"] { 236 | -webkit-appearance: textfield; 237 | -webkit-box-sizing: content-box; 238 | -moz-box-sizing: content-box; 239 | box-sizing: content-box; 240 | } 241 | input[type="search"]::-webkit-search-decoration { 242 | -webkit-appearance: none; 243 | } 244 | button::-moz-focus-inner, 245 | input::-moz-focus-inner { 246 | border: 0; 247 | padding: 0; 248 | } 249 | input[type="text"], 250 | input[type="email"], 251 | input[type="password"], 252 | input[type="search"], 253 | textarea { 254 | color: #666; 255 | border: 1px solid #ccc; 256 | border-radius: 3px; 257 | } 258 | input[type="text"]:focus, 259 | input[type="email"]:focus, 260 | input[type="password"]:focus, 261 | input[type="search"]:focus, 262 | textarea:focus { 263 | color: #111; 264 | } 265 | input[type="text"], 266 | input[type="email"], 267 | input[type="password"], 268 | input[type="search"] { 269 | padding: 3px; 270 | } 271 | textarea { 272 | overflow: auto; 273 | padding-left: 3px; 274 | vertical-align: top; 275 | width: 98%; 276 | } 277 | 278 | 279 | 280 | /*pygments*/ 281 | table.codehilitetable{ 282 | border:none; 283 | margin: 0; 284 | } 285 | 286 | 287 | .codehilitetable td{ 288 | border: none; 289 | padding: 0; 290 | } 291 | 292 | /* monokai */ 293 | .codehilite{ 294 | background: #272822; 295 | color: #f8f8f2; 296 | font-size: 16px; 297 | font-family: Monaco, "Ubuntu Mono", "Droid Sans Mono", Consolas, serif; 298 | -moz-border-radius:5px; 299 | -webkit-border-radius:5px; 300 | -o-border-radius:5px; 301 | border-radius:5px; 302 | } 303 | 304 | .codehilite pre{ 305 | background: #272822; 306 | } 307 | 308 | pre { 309 | font-family: Monaco, "Ubuntu Mono", "Droid Sans Mono", Consolas, serif; 310 | font-size: 16px; 311 | font-size: 1.6rem; 312 | line-height: 1.6; 313 | margin-bottom: 1.6em; 314 | padding: 1.6em; 315 | overflow: auto; 316 | max-width: 100%; 317 | background-color: #f3f4dd; 318 | border-radius:10px; 319 | } 320 | 321 | pre code{ 322 | background: transparent; 323 | font-weight: normal; 324 | color:#50535a; 325 | } 326 | 327 | code, kbd, tt, var { 328 | font-size: 16px; 329 | font-family: Monaco, "Ubuntu Mono", "Droid Sans Mono", Consolas, serif; 330 | } 331 | 332 | code{ 333 | display:inline; 334 | -moz-border-radius:5px; 335 | -webkit-border-radius:5px; 336 | -o-border-radius:5px; 337 | border-radius:5px; 338 | color:#111; 339 | word-break: break-all; 340 | word-wrap: break-word; 341 | font-weight: bold; 342 | } 343 | 344 | 345 | .hll { background-color: #49483e } 346 | 347 | .c { color: #75715e } /* Comment */ 348 | .err { color: #960050; background-color: #1e0010 } /* Error */ 349 | .k { color: #66d9ef } /* Keyword */ 350 | .l { color: #ae81ff } /* Literal */ 351 | .n { color: #f8f8f2 } /* Name */ 352 | .o { color: #f92672 } /* Operator */ 353 | .p { color: #f8f8f2 } /* Punctuation */ 354 | .cm { color: #75715e } /* Comment.Multiline */ 355 | .cp { color: #75715e } /* Comment.Preproc */ 356 | .c1 { color: #75715e } /* Comment.Single */ 357 | .cs { color: #75715e } /* Comment.Special */ 358 | .ge { font-style: italic } /* Generic.Emph */ 359 | .gs { font-weight: bold } /* Generic.Strong */ 360 | .kc { color: #66d9ef } /* Keyword.Constant */ 361 | .kd { color: #66d9ef } /* Keyword.Declaration */ 362 | .kn { color: #f92672 } /* Keyword.Namespace */ 363 | .kp { color: #66d9ef } /* Keyword.Pseudo */ 364 | .kr { color: #66d9ef } /* Keyword.Reserved */ 365 | .kt { color: #66d9ef } /* Keyword.Type */ 366 | .ld { color: #e6db74 } /* Literal.Date */ 367 | .m { color: #ae81ff } /* Literal.Number */ 368 | .s { color: #e6db74 } /* Literal.String */ 369 | .na { color: #a6e22e } /* Name.Attribute */ 370 | .nb { color: #f8f8f2 } /* Name.Builtin */ 371 | .nc { color: #a6e22e } /* Name.Class */ 372 | .no { color: #66d9ef } /* Name.Constant */ 373 | .nd { color: #a6e22e } /* Name.Decorator */ 374 | .ni { color: #f8f8f2 } /* Name.Entity */ 375 | .ne { color: #a6e22e } /* Name.Exception */ 376 | .nf { color: #a6e22e } /* Name.Function */ 377 | .nl { color: #f8f8f2 } /* Name.Label */ 378 | .nn { color: #f8f8f2 } /* Name.Namespace */ 379 | .nx { color: #a6e22e } /* Name.Other */ 380 | .py { color: #f8f8f2 } /* Name.Property */ 381 | .nt { color: #f92672 } /* Name.Tag */ 382 | .nv { color: #f8f8f2 } /* Name.Variable */ 383 | .ow { color: #f92672 } /* Operator.Word */ 384 | .w { color: #f8f8f2 } /* Text.Whitespace */ 385 | .mf { color: #ae81ff } /* Literal.Number.Float */ 386 | .mh { color: #ae81ff } /* Literal.Number.Hex */ 387 | .mi { color: #ae81ff } /* Literal.Number.Integer */ 388 | .mo { color: #ae81ff } /* Literal.Number.Oct */ 389 | .sb { color: #e6db74 } /* Literal.String.Backtick */ 390 | .sc { color: #e6db74 } /* Literal.String.Char */ 391 | .sd { color: #e6db74 } /* Literal.String.Doc */ 392 | .s2 { color: #e6db74 } /* Literal.String.Double */ 393 | .se { color: #ae81ff } /* Literal.String.Escape */ 394 | .sh { color: #e6db74 } /* Literal.String.Heredoc */ 395 | .si { color: #e6db74 } /* Literal.String.Interpol */ 396 | .sx { color: #e6db74 } /* Literal.String.Other */ 397 | .sr { color: #e6db74 } /* Literal.String.Regex */ 398 | .s1 { color: #e6db74 } /* Literal.String.Single */ 399 | .ss { color: #e6db74 } /* Literal.String.Symbol */ 400 | .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ 401 | .vc { color: #f8f8f2 } /* Name.Variable.Class */ 402 | .vg { color: #f8f8f2 } /* Name.Variable.Global */ 403 | .vi { color: #f8f8f2 } /* Name.Variable.Instance */ 404 | .il { color: #ae81ff } /* Literal.Number.Integer.Long */ 405 | 406 | 407 | 408 | 409 | /* for fb comment*/ 410 | 411 | #fb_comments_container{ 412 | width: 100%; 413 | overflow: hidden; 414 | margin: 20px 0 0 0; 415 | } 416 | 417 | #fb_comments { 418 | list-style-type: none; 419 | padding: 0; 420 | margin: 0; 421 | } 422 | 423 | #fb_comments h1{ 424 | font-size: 1.3em; 425 | } 426 | 427 | 428 | #fb_comments h2{ 429 | font-size: 1.2em; 430 | } 431 | 432 | 433 | #fb_comments h3{ 434 | font-size: 1.1em; 435 | } 436 | 437 | 438 | #fb_comments h4, #fb_comments h5, #fb_comments h6{ 439 | font-size: 1.3em; 440 | } 441 | 442 | 443 | 444 | 445 | #fb_comments .comment{ 446 | position: relative; 447 | padding: 25px 0; 448 | border-bottom: 1px solid rgba(150, 150, 150, 0.2); 449 | *border-bottom: 1px solid #f0f0f0; 450 | } 451 | 452 | #fb_comments .avatar{ 453 | position: absolute; 454 | top: 25px; 455 | left: 0; 456 | width:50px; 457 | float: left; 458 | } 459 | 460 | #fb_comments .avatar img{ 461 | width: 48px; 462 | border: none; 463 | border-radius: 5px; 464 | margin: 0; 465 | } 466 | 467 | 468 | #fb_comments .c_content{ 469 | margin-left: 70px; 470 | display: block; 471 | } 472 | 473 | 474 | #fb_comments .c_content p{ 475 | margin: 5px 0 15px 0; 476 | padding: 0; 477 | line-height: 1.8; 478 | } 479 | 480 | #fb_comments .author { 481 | line-height: 1.5em; 482 | margin: 0; 483 | padding: 0; 484 | } 485 | 486 | #fb_comments .author b{ 487 | color: #555; 488 | } 489 | 490 | #fb_comments .author small{ 491 | font-weight: normal; 492 | padding-left: 10px; 493 | font-size: 0.7em; 494 | color: #666; 495 | } 496 | 497 | #fb_comments .comment a{ 498 | text-decoration: none; 499 | } 500 | 501 | #fb_comments .comment a:hover{ 502 | text-decoration: underline; 503 | } 504 | 505 | 506 | #fb_new_comment{ 507 | padding-bottom: 50px; 508 | } 509 | 510 | 511 | #fb_new_comment textarea{ 512 | height: 80px; 513 | width: 98%; 514 | /*margin: 20px auto 0 auto;*/ 515 | padding: 5px; 516 | font-size: 1em; 517 | border: 1px solid rgba(150, 150, 150, 0.5); 518 | *border: 1px solid #a8a8a8; 519 | line-height: 1.5; 520 | } 521 | 522 | #fb_new_comment .comment_error{ 523 | color: red; 524 | text-align: center; 525 | display: block; 526 | } 527 | 528 | 529 | #fb_new_comment .c_button:hover { 530 | background: #E60900; 531 | color: #fff; 532 | text-decoration: none; 533 | } 534 | 535 | 536 | #fb_new_comment .c_button, #fb_new_comment #c_submit { 537 | margin-top: -5px; 538 | cursor: pointer; 539 | font-family: "Hiragino Sans GB", "Microsoft YaHei", sans-serif; 540 | font-size: 1em; 541 | line-height: 1.3em; 542 | letter-spacing: 1px; 543 | border-radius: 5px; 544 | padding: 5px 5px 2px 5px; 545 | } 546 | 547 | #fb_new_comment .input_body input{ 548 | border: 1px solid #ddd; 549 | padding: 5px; 550 | background: rgba(255,255,255,0.5); 551 | margin: 0 0 10px 0; 552 | } 553 | 554 | #fb_new_comment ul{ 555 | list-style: none; 556 | padding: 5px 0; 557 | margin: auto 0; 558 | } 559 | 560 | #fb_new_comment ul li{ 561 | float: left; 562 | margin-right:2.2%; 563 | /*for IE7*/ 564 | *margin-right: 22px; 565 | } 566 | 567 | #fb_new_comment .input_body ul li label{ 568 | line-height: 1em; 569 | } 570 | 571 | #fb_new_comment .input_body ul li input{ 572 | width: 100px; 573 | margin: 0 574 | } 575 | 576 | 577 | #SwfStore_farbox_0{ 578 | height: 0; 579 | overflow: hidden; 580 | } 581 | 582 | /*iphoneç«–*/ 583 | @media screen and (max-width: 320px){ 584 | #fb_comments .c_content{ 585 | margin-left: 57px; 586 | } 587 | } 588 | 589 | 590 | -------------------------------------------------------------------------------- /template_packages/Yukina/css/roboto-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Yukina/css/roboto-300.woff -------------------------------------------------------------------------------- /template_packages/Yukina/css/roboto-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFarBox/templates/da322774db5d19757f875e655004c2a269e489ec/template_packages/Yukina/css/roboto-700.woff -------------------------------------------------------------------------------- /template_packages/Yukina/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | /* Fonts */ 3 | @font-face { 4 | font-family: 'Roboto Slab'; 5 | font-style: normal; 6 | font-weight: 300; 7 | src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url("/template/css/roboto-300.woff") format('woff'); 8 | } 9 | @font-face { 10 | font-family: 'Roboto Slab'; 11 | font-style: normal; 12 | font-weight: 700; 13 | src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url("/template/css/roboto-700.woff") format('woff'); 14 | } 15 | 16 | 17 | /* Links */ 18 | a { 19 | color: royalblue; 20 | } 21 | a:visited { 22 | color: purple; 23 | } 24 | a:hover, 25 | a:focus, 26 | a:active { 27 | color: midnightblue; 28 | } 29 | 30 | 31 | 32 | /* Alignment */ 33 | .alignleft { 34 | display: inline; 35 | float: left; 36 | margin-right: 1.5em; 37 | } 38 | .alignright { 39 | display: inline; 40 | float: right; 41 | margin-left: 1.5em; 42 | } 43 | .aligncenter { 44 | clear: both; 45 | display: block; 46 | margin: 0 auto; 47 | } 48 | 49 | 50 | /* Text meant only for screen readers */ 51 | .screen-reader-text { 52 | clip: rect(1px, 1px, 1px, 1px); 53 | position: absolute !important; 54 | } 55 | 56 | .screen-reader-text:hover, 57 | .screen-reader-text:active, 58 | .screen-reader-text:focus { 59 | background-color: #f1f1f1; 60 | border-radius: 3px; 61 | box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); 62 | clip: auto !important; 63 | color: #21759b; 64 | display: block; 65 | font-size: 14px; 66 | font-weight: bold; 67 | height: auto; 68 | left: 5px; 69 | line-height: normal; 70 | padding: 15px 23px 14px; 71 | text-decoration: none; 72 | top: 5px; 73 | width: auto; 74 | z-index: 100000; /* Above WP toolbar */ 75 | } 76 | 77 | /* Clearing */ 78 | .clear:before, 79 | .clear:after, 80 | [class*="content"]:before, 81 | [class*="content"]:after, 82 | [class*="site"]:before, 83 | [class*="site"]:after { 84 | content: ''; 85 | display: table; 86 | } 87 | 88 | .clear:after, 89 | [class*="content"]:after, 90 | [class*="site"]:after { 91 | clear: both; 92 | } 93 | 94 | 95 | /* =Navigation NOT USED IN RIGHTER 96 | ----------------------------------------------- */ 97 | 98 | .site-content [class*="navigation"] { 99 | margin: 0 0 1.5em; 100 | overflow: hidden; 101 | } 102 | [class*="navigation"] .nav-previous { 103 | float: left; 104 | width: 50%; 105 | } 106 | [class*="navigation"] .nav-next { 107 | float: right; 108 | text-align: right; 109 | width: 50%; 110 | } 111 | 112 | 113 | 114 | /********** SPECIFIC STYLES 115 | ----------------------------------------------- **********/ 116 | 117 | 118 | /***** MAIN & TYPOGRAPHY *****/ 119 | 120 | body { 121 | font-family: 'Roboto Slab', serif; 122 | font-weight: 300; 123 | color: #666; 124 | font-size:16px; 125 | line-height: 2.1; 126 | } 127 | 128 | .entry-content a, .entry-content a:visited { 129 | color: #6b8bc1; 130 | text-decoration: none; 131 | } 132 | 133 | .entry-content a:hover, .entry-content a:visited:hover, .entry-content a:focus, .entry-content a:active { 134 | color: #666666; 135 | text-decoration: none; 136 | opacity: 1; 137 | border: none; 138 | } 139 | 140 | 141 | 142 | ul p, ol p{ 143 | overflow: visible; 144 | } 145 | 146 | ul p, ol p{ 147 | margin-bottom: 0.5em; 148 | } 149 | 150 | h1 { 151 | font-family: 'Roboto Slab', serif; 152 | font-weight: 700; 153 | font-size: 28px; 154 | font-size: 2.8rem; 155 | color: #444; 156 | } 157 | 158 | h2, h3, h4, h5, h6 { 159 | font-family: 'Roboto Slab', serif; 160 | font-weight: 700; 161 | color: #666; 162 | font-size: 17px; 163 | font-size: 1.7rem; 164 | } 165 | 166 | h2{ 167 | font-size: 20px; 168 | font-size: 2.0rem; 169 | } 170 | 171 | /***** SIDE HEADER AREA *****/ 172 | 173 | .site-header { 174 | display: block; 175 | position: fixed; 176 | top: 0; 177 | left: 0; 178 | height: 100%; 179 | width: 30%; 180 | max-width: 450px; 181 | background-color: #6b8bc1; 182 | color: #F4F9F6; 183 | z-index: 100; 184 | } 185 | 186 | header#masthead { 187 | bottom: 0; 188 | padding: 0 50px 50px 50px; 189 | position: absolute; 190 | } 191 | 192 | header#masthead h1 { 193 | padding: 0 0 10px 0; 194 | } 195 | 196 | header#masthead h1 a { 197 | position: relative; 198 | color: #F4F9F6; 199 | text-decoration: none; 200 | font-size: 40px; 201 | font-size: 4.0rem; 202 | line-height: 1.1; 203 | } 204 | header#masthead h1 a:hover { opacity: 0.9; } 205 | 206 | header#masthead h2 { 207 | color: #F4F9F6; 208 | font-weight: 300; 209 | font-size: 16px; 210 | font-size: 1.6rem; 211 | } 212 | 213 | 214 | /***** MAIN CONTENT & ARTICLES *****/ 215 | 216 | .site-main { 217 | background: #F4F9F6; 218 | } 219 | 220 | article h1.entry-title a, article h2.entry-title a { 221 | color: #444444; 222 | text-decoration: none; 223 | } 224 | 225 | article h1.entry-title a:visited, article h2.entry-title a:visited { 226 | color: #444444; 227 | text-decoration: none; 228 | } 229 | 230 | article h1.entry-title a:hover, article h2.entry-title a:hover { 231 | color: #666666; 232 | text-decoration: none; 233 | opacity: 1; 234 | } 235 | 236 | article h1.entry-title a:visited:hover, article h2.entry-title a:visited:hover { 237 | color: #666666; 238 | text-decoration: none; 239 | opacity: 1; 240 | } 241 | 242 | .content-area { 243 | display: block; 244 | position: absolute; 245 | left: 30%; 246 | top: 0; 247 | right: 0; 248 | overflow: auto; 249 | color: #666; 250 | } 251 | 252 | #primary { 253 | display: block; 254 | position: absolute; 255 | padding: 30px 85px 50px 85px; 256 | max-width: 1000px; 257 | } 258 | 259 | #footer{ 260 | text-align: center; 261 | font-size: 0.7em; 262 | margin-top: 30px; 263 | } 264 | 265 | #footer a{ 266 | text-decoration: none; 267 | margin: 0 10px; 268 | } 269 | 270 | article { 271 | padding: 25px 0; 272 | } 273 | 274 | article h1.entry-title, article h2.entry-title { 275 | border-bottom: 1px solid #F1F1F1; 276 | border-top: 1px solid #F1F1F1; 277 | margin-bottom: 15px; 278 | padding: 15px 0 15px 0; 279 | color: #333; 280 | font-size: 28px; 281 | font-size: 2.8rem; 282 | } 283 | .single article h1.entry-title { 284 | border-bottom: 1px solid #F1F1F1; 285 | border-top: none; 286 | margin-bottom: 20px; 287 | padding: 15px 0 15px 0; 288 | font-size: 3em; 289 | } 290 | 291 | #primary .entry-meta, #primary .entry-meta a { 292 | padding: 0; 293 | color: #999999; 294 | } 295 | .entry-meta a:hover { 296 | color: #999999; 297 | } 298 | 299 | article .entry-meta a, article .entry-meta a:visited { 300 | color: #999; 301 | text-decoration: none; 302 | } 303 | 304 | .entry-content, .entry-summary { 305 | margin: 1.5em 0 0 0; 306 | } 307 | 308 | 309 | #nav-below a, #nav-below a:visited { 310 | font-size: 14px; 311 | font-size: 1.4rem; 312 | color: #999999; 313 | text-decoration: none; 314 | } 315 | #nav-below a:hover { color: #444; } 316 | 317 | 318 | 319 | a.keep-reading { 320 | color: #6b8bc1; 321 | text-decoration: none; 322 | border: none; 323 | } 324 | 325 | a.keep-reading:visited { 326 | color: #6b8bc1; 327 | text-decoration: none; 328 | border: none; 329 | } 330 | 331 | a.keep-reading:hover { 332 | color: #666666; 333 | text-decoration: none; 334 | opacity: 1; 335 | border: none; 336 | } 337 | 338 | a.keep-reading:visited:hover { 339 | color: #666666; 340 | text-decoration: none; 341 | opacity: 1; 342 | border: none; 343 | } 344 | 345 | footer.entry-footer { 346 | margin-top: 10px; 347 | } 348 | 349 | 350 | /***** YUKINA FOOTER IS HIDDEN *****/ 351 | 352 | .site-footer { 353 | display: none; 354 | } 355 | 356 | footer#colophon { 357 | position: relative; 358 | width: 50%; 359 | margin: 0 auto; 360 | top: 40px; 361 | color: #F4F9F6; 362 | font-size: 14px; 363 | font-size: 1.4rem; 364 | } 365 | 366 | footer#colophon a { 367 | color: #F4F9F6; 368 | text-decoration: none; 369 | } 370 | 371 | /***** YUKINA OTHER STYLES *****/ 372 | 373 | blockquote { 374 | border-left: 5px solid #F1F1F1; 375 | padding-left: 25px; 376 | color: #999; 377 | } 378 | 379 | 380 | 381 | 382 | 383 | /********** YUKINA MOBILE SPECIFIC STYLES 384 | ----------------------------------------------- **********/ 385 | 386 | 387 | 388 | /***** YUKINA MOBILE TITLE HEADER AREA *****/ 389 | @media screen and (max-width: 900px){ 390 | .site-header { 391 | position: relative; 392 | display: block; 393 | height: auto; 394 | width: 100%; 395 | max-width: 100%; 396 | background-color: #6b8bc1; 397 | color: #F4F9F6; 398 | z-index: 100; 399 | } 400 | 401 | header#masthead { 402 | bottom: 0; 403 | padding: 15% 8%; 404 | position: relative; 405 | text-align: center; 406 | } 407 | 408 | header#masthead h1 { 409 | padding: 0 0 10px 0; 410 | } 411 | 412 | header#masthead h1 a { 413 | position: relative; 414 | color: #F4F9F6; 415 | text-decoration: none; 416 | font-size: 40px; 417 | font-size: 4.0rem; 418 | line-height: 1.1; 419 | } 420 | header#masthead h1 a:hover { opacity: 0.9; } 421 | 422 | header#masthead p { 423 | color: #F4F9F6; 424 | } 425 | 426 | /***** YUKINA MOBILE MAIN CONTENT & ARTICLES *****/ 427 | 428 | .site-main { 429 | display: block; 430 | position: relative; 431 | background: #F4F9F6; 432 | width: 100%; 433 | } 434 | 435 | .content-area h1 { 436 | color: #444; 437 | } 438 | 439 | .content-area { 440 | display: inline-block; 441 | position: relative; 442 | overflow: auto; 443 | color: #666; 444 | left: 0; 445 | } 446 | 447 | #primary { 448 | display: block; 449 | position: absolute; 450 | padding: 40px 40px 40px 40px; 451 | } 452 | 453 | article { 454 | padding: 50px 0 0 0; 455 | } 456 | 457 | article h1 { 458 | padding: 0 0 15px 0; 459 | } 460 | 461 | article h1 a { 462 | position: relative; 463 | text-decoration: none; 464 | color: #444; 465 | } 466 | article h1 a:hover { opacity: 0.9; } 467 | article h1 a:visited { color: #444; } 468 | 469 | article .entry-meta { 470 | padding: 0; 471 | } 472 | 473 | article .entry-meta a, article .entry-meta a:visited { 474 | color: #999; 475 | text-decoration: none; 476 | } 477 | 478 | 479 | .navigation-post a { 480 | color: #999; 481 | text-decoration: none; 482 | font-size: 14px; 483 | font-size: 1.4rem; 484 | } 485 | } 486 | 487 | @media screen and (max-width: 480px) { 488 | #primary { 489 | padding: 20px; 490 | } 491 | } 492 | 493 | 494 | ::selection { background: #999; color: #F4F9F6;} 495 | 496 | -------------------------------------------------------------------------------- /template_packages/Yukina/index.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block content 4 | for post in posts 5 | article.post.embed_editor_container 6 | header.entry-header 7 | h2.entry-title.embed_editor_title 8 | a(href=post.url)= post.title 9 | .entry-meta Posted on 10 | time.entry-date(datetime=post.date.isoformat())= post.date.format('%B %d, %Y') 11 | .entry-content= post.content.limit(250) 12 | p 13 | a(rel="nofollow", href=post.url) Keep reading... 14 | footer.entry-footer 15 | //paginator 16 | if paginator.has_pre or paginator.has_next 17 | nav#nav-below.navigation-paging(role="navigation") 18 | if paginator.has_next 19 | .nav-previous 20 | a(href=paginator.next_page_url) 21 | span.meta-nav ← 22 | | Older posts 23 | if paginator.has_pre 24 | .nav-next 25 | a(href=paginator.pre_page_url) Newer posts 26 | span.meta-nav → 27 | -------------------------------------------------------------------------------- /template_packages/Yukina/interface.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Site", 4 | "title_zh_cn": "网站设置", 5 | "auto_extends": true, 6 | "groups": [ 7 | { 8 | "title": "Site Info", 9 | "title_zh_cn": "网站信息", 10 | "cells": [ 11 | { 12 | "parts_per_line": 2, 13 | "parts": [ 14 | { 15 | "key": "title", 16 | "title": "Site Title", 17 | "title_zh_cn": "网站标题", 18 | "default_value": "My Site", 19 | "model": "text" 20 | }, 21 | { 22 | "key": "subtitle", 23 | "title": "Sub Title", 24 | "title_zh_cn": "副标题", 25 | "model": "text" 26 | } 27 | ] 28 | }, 29 | { 30 | "parts_per_line": 1, 31 | "parts":[ 32 | { 33 | "title": "Site Description", 34 | "title_zh_cn": "网站描述", 35 | "key": "raw_content", 36 | "model":"textarea" 37 | } 38 | ] 39 | } 40 | 41 | ] 42 | }, 43 | { 44 | "title": "Contents Display", 45 | "title_zh_cn": "内容显示", 46 | "cells":[ 47 | { 48 | "parts_per_line": 3, 49 | "parts":[ 50 | { 51 | "key": "posts_per_page", 52 | "title": "Posts per Page", 53 | "title_zh_cn": "每页显示日志数", 54 | "default_value": 3 55 | }, 56 | { 57 | "key": "post_content_type", 58 | "title": "Post Content Type", 59 | "title_zh_cn": "正文格式", 60 | "model": "select", 61 | "default_value": "markdown", 62 | "options": [ 63 | { 64 | "value": "markdown", 65 | "title": "Markdown" 66 | }, 67 | { 68 | "value": "plain", 69 | "title": "Plain Text with Images" 70 | } 71 | ], 72 | "options_zh_cn": [ 73 | { 74 | "value": "markdown", 75 | "title": "Markdown" 76 | }, 77 | { 78 | "value": "plain", 79 | "title": "普通文本+图片" 80 | } 81 | ] 82 | }, 83 | { 84 | "key": "post_paragraph_indent", 85 | "title": "Paragraph Text Indent", 86 | "title_zh_cn": "段落首行缩进", 87 | "model": "select", 88 | "default_value": "no", 89 | "options": [ 90 | { 91 | "value": "no", 92 | "title": "No indent" 93 | }, 94 | { 95 | "value": "hard", 96 | "title": "2 Letters Indent Every Line" 97 | }, 98 | { 99 | "value": "yes", 100 | "title": "2 Letters Indent Every Paragraph" 101 | } 102 | 103 | ], 104 | "options_zh_cn": [ 105 | { 106 | "value": "no", 107 | "title": "不缩进" 108 | }, 109 | { 110 | "value": "hard", 111 | "title": "每行缩进2字" 112 | }, 113 | { 114 | "value": "yes", 115 | "title": "每段缩进2字" 116 | } 117 | ] 118 | } 119 | ] 120 | } 121 | ] 122 | 123 | }, 124 | { 125 | "title": "Social Comments", 126 | "title_zh_cn": "第三方评论", 127 | "cells":[ 128 | { 129 | "parts_per_line": 2, 130 | "parts": [ 131 | { 132 | "key": "disqus", 133 | "title": "Disqus", 134 | "title_zh_cn": "Disqus", 135 | "model": "text", 136 | "default_value": "Disqus Shortname" 137 | }, 138 | { 139 | "key": "duoshuo", 140 | "title": "DuoShuo", 141 | "title_zh_cn": "多说", 142 | "model": "text", 143 | "default_value": "DuoShuo ID" 144 | } 145 | ] 146 | } 147 | ] 148 | } 149 | ] 150 | } 151 | ] -------------------------------------------------------------------------------- /template_packages/Yukina/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | block title 3 | post.title 4 | block content 5 | article.post.embed_editor_container 6 | header.entry-header 7 | h2.entry-title.embed_editor_title= post.title 8 | .entry-meta Posted on 9 | time.entry-date(datetime=post.date.isoformat())= post.date.format('%B %d, %Y') 10 | .entry-content= post.content 11 | footer.entry-footer 12 | include include/comments 13 | -------------------------------------------------------------------------------- /template_packages/default red/archive.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block content 4 | posts = get_data(type='post', limit=300, sort='desc') 5 | if request.args.use == 'tags' 6 | entries = posts.group('tags') 7 | else 8 | entries = posts.group('-date:year') 9 | ul.list_with_title 10 | for key, posts in entries 11 | li.listing_title= key 12 | ul.listing 13 | for post in posts 14 | li.listing_item 15 | span.date {{ post.date.format("%Y-%m-%d") }} 16 | a(href=post.url, title=post.title)= post.title 17 | 18 | .pager 19 | if pager.has_pre 20 | a.pre(href=pager.pre_url) Pre 21 | if pager.has_next 22 | a.next(href=pager.next_url) Next 23 | -------------------------------------------------------------------------------- /template_packages/default red/base.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | head 3 | title 4 | block title 5 | site.title 6 | load("fonts#4.0.3 /template/css/style.scss /template/css/basic.css") 7 | meta(content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", name="viewport") 8 | meta(content="yes", name="apple-mobile-web-app-capable") 9 | meta(content="black", name="apple-mobile-web-app-status-bar-style") 10 | meta(content="telephone=no", name="format-detection") 11 | block head 12 | 13 | body 14 | #header 15 | #nav 16 | a(href="/") Home 17 | a(href="/archive") Archive 18 | if has('categories') 19 | a(href="/categories") Categories 20 | if site.tags 21 | a(href="/archive?use=tags") Tags 22 | if has('links.md') 23 | a(href="/links.md") Links 24 | if has('about.md') 25 | a(href="/about.md") About 26 | 27 | #layout 28 | block content 29 | 30 | #footer 31 | .powered_by 32 | a(target='_blank', href='http://www.farbox.com/') Proudly Powered By FarBox.com 33 | span ©2012-2015 Z.R.E.Y Inc. 34 | a(href="/template") Clone Tempalte 35 | -------------------------------------------------------------------------------- /template_packages/default red/categories.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block title 4 | | Categories 5 | 6 | 7 | block content 8 | 9 | ul#categories 10 | for category in categories 11 | li 12 | a(href="/category/{{category.path}}") 13 | h3= category.title 14 | span {{category.posts_count}} Posts 15 | 16 | 17 | script(type="text/javascript") 18 | function auto_margin(){ 19 | var e = document.getElementById('categories'); 20 | e.style.marginLeft = 0; 21 | var width = document.width || document.body.clientWidth; 22 | if (e && width > 302){ 23 | e.style.marginLeft = ( width% 306) /2 + 'px'; 24 | } 25 | } 26 | auto_margin(); 27 | window.onresize = auto_margin; -------------------------------------------------------------------------------- /template_packages/default red/css/basic.css: -------------------------------------------------------------------------------- 1 | 2 | hr { 3 | margin: 2.2em 0; 4 | border-top: 1px dashed #d0d0d0; 5 | border-bottom: 1px dashed #f9f9f9; 6 | } 7 | 8 | h1, h2, h3{ 9 | font-weight: normal; 10 | color: #222222; 11 | } 12 | 13 | h4{ 14 | color: #222; 15 | } 16 | 17 | h1{ 18 | line-height: 1.5em; 19 | margin-top: 1.2em; 20 | } 21 | 22 | h2, h3{ 23 | line-height: 1.5em; 24 | margin-top: 1.5em; 25 | } 26 | 27 | h2 { 28 | font-size: 1.6em; 29 | } 30 | 31 | h3 { 32 | font-size: 1.2em 33 | } 34 | 35 | ul, ol { 36 | line-height: 2.1; 37 | } 38 | 39 | ul{ 40 | padding: 5px 38px; 41 | } 42 | 43 | ul p, ol p{ 44 | overflow: visible; 45 | } 46 | 47 | #content ul p, #content ol p{ 48 | overflow: visible; 49 | } 50 | 51 | #posts .post ul p, #posts .post ol p{ 52 | overflow: visible; 53 | } 54 | 55 | img{ 56 | border: none; 57 | } 58 | 59 | ul li{ 60 | padding: 0; 61 | margin: 0; 62 | line-height: 2.1em; 63 | } 64 | 65 | blockquote { 66 | border-left: 0.4em solid #DDD; 67 | margin: 15px 0 25px 0; 68 | padding: 0 15px; 69 | color: #777; 70 | } 71 | 72 | table { 73 | background-color: transparent; 74 | border-collapse: collapse; 75 | border-spacing: 0; 76 | border: 1px solid #dddddd; 77 | border-left: 0; 78 | margin: 20px 0; 79 | 80 | } 81 | 82 | 83 | th, td { 84 | border-left: 1px solid #dddddd; 85 | padding: 8px; 86 | line-height: 20px; 87 | text-align: left; 88 | vertical-align: top; 89 | border-top: 1px solid #dddddd; 90 | } 91 | 92 | 93 | .p_part { 94 | margin: 15px 0; 95 | } 96 | 97 | 98 | 99 | code{ 100 | border: 1px solid #e0e0e0; 101 | background: #F8F8F8; 102 | padding: 0 5px; 103 | margin: 0 2px; 104 | font-family: Menlo, monospace; 105 | } 106 | 107 | pre{ 108 | border: 1px solid #e0e0e0; 109 | margin: 1.2em -2px; 110 | padding: 15px 20px; 111 | font-size: 13px; 112 | font-family: Menlo, monospace; 113 | line-height: 1.8em; 114 | display: block; 115 | overflow: auto; 116 | background: #F8F8F8; 117 | letter-spacing: 0; 118 | } 119 | 120 | pre p { 121 | margin: 0; 122 | } 123 | 124 | pre br{ 125 | display: none; 126 | } 127 | 128 | pre code{ 129 | border:none; 130 | background: none; 131 | padding: 0; 132 | margin: 0; 133 | } 134 | 135 | 136 | blockquote { 137 | display: block; 138 | text-align: justify; 139 | border-left: 4px solid #eeeeee; 140 | margin: 1em 0; 141 | padding-left: 1.5em; 142 | } 143 | 144 | 145 | 146 | a{ 147 | color: #333; 148 | text-decoration: none; 149 | } 150 | 151 | p a{ 152 | border-bottom: 1px dashed; 153 | padding-bottom: 2px; 154 | } 155 | 156 | a:hover{ 157 | color: #E60900; 158 | } 159 | 160 | strong { 161 | color: #060606; 162 | font-weight: normal; 163 | font-size: 1.1em; 164 | } 165 | 166 | 167 | 168 | .error_page{ 169 | font-size: 14px; 170 | font-family: "Hiragino Sans GB", "Microsoft YaHei", sans-serif; 171 | color: #555555; 172 | width: 680px; 173 | margin: 0 auto; 174 | -webkit-text-size-adjust:none; 175 | } 176 | 177 | #error{ 178 | margin-top: 20px; 179 | } 180 | 181 | #error h1 { 182 | font-size: 2.0em; 183 | } 184 | 185 | #error p{ 186 | line-height: 3.0em; 187 | } 188 | 189 | #error .content{ 190 | margin: 30px 0 200px 0; 191 | line-height: 3em; 192 | } 193 | 194 | #error .links a{ 195 | margin-right: 50px; 196 | color: #E60900; 197 | 198 | } 199 | 200 | 201 | /* for markdown */ 202 | 203 | .toc{ 204 | background: #fafafa; 205 | border-radius: 5px; 206 | border: 1px solid #f0f0eb; 207 | margin: 27px 0 47px 0; 208 | padding: 0; 209 | } 210 | 211 | .toc ul{ 212 | padding: 5px 42px; 213 | } 214 | 215 | .toc ul li{ 216 | padding: 0; 217 | margin: 0; 218 | line-height: 2.1em; 219 | } 220 | 221 | 222 | 223 | /*pygments*/ 224 | table.codehilitetable{ 225 | border:none; 226 | margin: 0; 227 | } 228 | 229 | 230 | .codehilitetable td{ 231 | border: none; 232 | padding: 0; 233 | 234 | } 235 | .hll { background-color: #ffffcc } 236 | .c { color: #60a0b0; font-style: italic } /* Comment */ 237 | /* .err { border: 1px solid #FF0000 } /* Error */ 238 | .k { color: #007020; font-weight: bold } /* Keyword */ 239 | .o { color: #666666 } /* Operator */ 240 | .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ 241 | .cp { color: #007020 } /* Comment.Preproc */ 242 | .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ 243 | .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ 244 | .gd { color: #A00000 } /* Generic.Deleted */ 245 | .ge { font-style: italic } /* Generic.Emph */ 246 | .gr { color: #FF0000 } /* Generic.Error */ 247 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 248 | .gi { color: #00A000 } /* Generic.Inserted */ 249 | .go { color: #808080 } /* Generic.Output */ 250 | .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 251 | .gs { font-weight: bold } /* Generic.Strong */ 252 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 253 | .gt { color: #0040D0 } /* Generic.Traceback */ 254 | .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 255 | .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 256 | .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 257 | .kp { color: #007020 } /* Keyword.Pseudo */ 258 | .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 259 | .kt { color: #902000 } /* Keyword.Type */ 260 | .m { color: #40a070 } /* Literal.Number */ 261 | .s { color: #4070a0 } /* Literal.String */ 262 | .na { color: #4070a0 } /* Name.Attribute */ 263 | .nb { color: #007020 } /* Name.Builtin */ 264 | .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 265 | .no { color: #60add5 } /* Name.Constant */ 266 | .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 267 | .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 268 | .ne { color: #007020 } /* Name.Exception */ 269 | .nf { color: #06287e } /* Name.Function */ 270 | .nl { color: #002070; font-weight: bold } /* Name.Label */ 271 | .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 272 | .nt { color: #062873; font-weight: bold } /* Name.Tag */ 273 | .nv { color: #bb60d5 } /* Name.Variable */ 274 | .ow { color: #007020; font-weight: bold } /* Operator.Word */ 275 | .w { color: #bbbbbb } /* Text.Whitespace */ 276 | .mf { color: #40a070 } /* Literal.Number.Float */ 277 | .mh { color: #40a070 } /* Literal.Number.Hex */ 278 | .mi { color: #40a070 } /* Literal.Number.Integer */ 279 | .mo { color: #40a070 } /* Literal.Number.Oct */ 280 | .sb { color: #4070a0 } /* Literal.String.Backtick */ 281 | .sc { color: #4070a0 } /* Literal.String.Char */ 282 | .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 283 | .s2 { color: #4070a0 } /* Literal.String.Double */ 284 | .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 285 | .sh { color: #4070a0 } /* Literal.String.Heredoc */ 286 | .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 287 | .sx { color: #c65d09 } /* Literal.String.Other */ 288 | .sr { color: #235388 } /* Literal.String.Regex */ 289 | .s1 { color: #4070a0 } /* Literal.String.Single */ 290 | .ss { color: #517918 } /* Literal.String.Symbol */ 291 | .bp { color: #007020 } /* Name.Builtin.Pseudo */ 292 | .vc { color: #bb60d5 } /* Name.Variable.Class */ 293 | .vg { color: #bb60d5 } /* Name.Variable.Global */ 294 | .vi { color: #bb60d5 } /* Name.Variable.Instance */ 295 | .il { color: #40a070 } /* Literal.Number.Integer.Long */ 296 | 297 | 298 | 299 | 300 | /* for fb comment*/ 301 | 302 | #fb_comments_container{ 303 | width: 100%; 304 | overflow: hidden; 305 | margin: 20px 0 0 0; 306 | } 307 | 308 | #fb_comments { 309 | list-style-type: none; 310 | padding: 0; 311 | } 312 | 313 | #fb_comments h1{ 314 | font-size: 1.3em; 315 | } 316 | 317 | 318 | #fb_comments h2{ 319 | font-size: 1.2em; 320 | } 321 | 322 | 323 | #fb_comments h3{ 324 | font-size: 1.1em; 325 | } 326 | 327 | 328 | #fb_comments h4, #fb_comments h5, #fb_comments h6{ 329 | font-size: 1.3em; 330 | } 331 | 332 | 333 | 334 | 335 | #fb_comments .comment{ 336 | position: relative; 337 | padding: 25px 0; 338 | border-bottom: 1px solid rgba(150, 150, 150, 0.2); 339 | *border-bottom: 1px solid #f0f0f0; 340 | } 341 | 342 | #fb_comments .avatar{ 343 | position: absolute; 344 | top: 25px; 345 | left: 0; 346 | width:50px; 347 | float: left; 348 | } 349 | 350 | #fb_comments .avatar img{ 351 | width: 48px; 352 | border: none; 353 | border-radius: 5px; 354 | margin: 0; 355 | } 356 | 357 | 358 | #fb_comments .c_content{ 359 | margin-left: 70px; 360 | display: block; 361 | } 362 | 363 | 364 | #fb_comments .c_content p{ 365 | margin: 5px 0 15px 0; 366 | padding: 0; 367 | line-height: 1.8; 368 | } 369 | 370 | #fb_comments .author { 371 | line-height: 1.5em; 372 | margin: 0; 373 | padding: 0; 374 | } 375 | 376 | #fb_comments .author b{ 377 | color: #555; 378 | } 379 | 380 | #fb_comments .author small{ 381 | font-weight: normal; 382 | padding-left: 10px; 383 | font-size: 0.7em; 384 | color: #666; 385 | } 386 | 387 | #fb_new_comment{ 388 | padding-bottom: 50px; 389 | } 390 | 391 | 392 | #fb_new_comment textarea{ 393 | height: 80px; 394 | width: 98%; 395 | /*margin: 20px auto 0 auto;*/ 396 | padding: 5px; 397 | font-size: 1em; 398 | border: 1px solid rgba(150, 150, 150, 0.5); 399 | *border: 1px solid #a8a8a8; 400 | line-height: 1.5; 401 | } 402 | 403 | #fb_new_comment .comment_error{ 404 | color: red; 405 | text-align: center; 406 | display: block; 407 | } 408 | 409 | 410 | #fb_new_comment .c_button:hover { 411 | background: #E60900; 412 | color: #fff; 413 | text-decoration: none; 414 | } 415 | 416 | 417 | #fb_new_comment .c_button, #fb_new_comment #c_submit { 418 | margin-top: -5px; 419 | cursor: pointer; 420 | font-family: "Hiragino Sans GB", "Microsoft YaHei", sans-serif; 421 | font-size: 1em; 422 | line-height: 1.3em; 423 | letter-spacing: 1px; 424 | border-radius: 5px; 425 | padding: 5px 5px 2px 5px; 426 | } 427 | 428 | #fb_new_comment .input_body input{ 429 | border: 1px solid #ddd; 430 | padding: 5px; 431 | background: rgba(255,255,255,0.5); 432 | margin: 0 0 10px 0; 433 | } 434 | 435 | #fb_new_comment ul{ 436 | list-style: none; 437 | padding: 5px 0; 438 | margin: auto 0; 439 | } 440 | 441 | #fb_new_comment ul li{ 442 | float: left; 443 | margin-right:2.2%; 444 | /*for IE7*/ 445 | *margin-right: 22px; 446 | } 447 | 448 | #fb_new_comment .input_body ul li label{ 449 | line-height: 1em; 450 | } 451 | 452 | #fb_new_comment .input_body ul li input{ 453 | width: 100px; 454 | margin: 0 455 | } 456 | 457 | 458 | #SwfStore_farbox_0{ 459 | height: 0; 460 | overflow: hidden; 461 | } 462 | 463 | /*iphoneç«–*/ 464 | @media screen and (max-width: 320px){ 465 | #fb_comments .c_content{ 466 | margin-left: 57px; 467 | } 468 | } 469 | -------------------------------------------------------------------------------- /template_packages/default red/css/style.scss: -------------------------------------------------------------------------------- 1 | $main_color: #ca2f33; 2 | $nav_height: 50px; 3 | 4 | body { 5 | font-size: 14px; 6 | font-family: 'Georgia', "Hiragino Sans GB", serif; 7 | color: #555; 8 | padding: 0; 9 | margin: 0; 10 | -webkit-text-size-adjust: none; 11 | background: #fbfbfb; 12 | } 13 | 14 | #layout { 15 | width: 830px; 16 | margin: 0 auto; 17 | position: relative; 18 | } 19 | 20 | 21 | 22 | #header { 23 | background: $main_color; 24 | position: relative; 25 | height: $nav_height; 26 | margin: 0; 27 | padding: 0; 28 | 29 | #nav { 30 | line-height: $nav_height; 31 | font-size: 1em; 32 | padding: 0; 33 | position: absolute; 34 | right: 0; 35 | 36 | a { 37 | float: left; 38 | font-family: "Coda", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; 39 | text-decoration: none; 40 | color: #fff; 41 | padding: 1px 15px; 42 | 43 | &:hover, &.current { 44 | text-decoration: underline; 45 | } 46 | } 47 | 48 | } 49 | 50 | } 51 | 52 | #posts .post{ 53 | margin-bottom: 8em; 54 | } 55 | 56 | 57 | .post{ 58 | position: relative; 59 | margin: 2.5em 0 5em 0; 60 | letter-spacing: 1px; 61 | 62 | 63 | .title{ 64 | font-size: 2.2em; 65 | line-height: 1.35em; 66 | text-align: left; 67 | padding: 0.5em 0 ; 68 | border-bottom: 1px solid #f2f2f2; 69 | margin-bottom: 25px; 70 | 71 | a{ 72 | color: #333; 73 | 74 | &:hover{ 75 | color: $main_color; 76 | } 77 | } 78 | 79 | i{ 80 | font-size: 14px; 81 | padding-right: 5px; 82 | } 83 | } 84 | 85 | .post_body{ 86 | font-size: 16px; 87 | line-height: 1.85em; 88 | 89 | a{ 90 | color: #222; 91 | border-bottom: 1px dashed #999; 92 | 93 | &:hover{ 94 | color: $main_color; 95 | text-decoration: underline; 96 | border-bottom: none; 97 | } 98 | } 99 | } 100 | 101 | .info{ 102 | position: relative; 103 | margin-top: 20px; 104 | padding: 1.1em; 105 | border-top: 1px solid #eff3f4; 106 | border-bottom: 1px solid #eff3f4; 107 | font-size: 0.9em; 108 | line-height: 2em; 109 | 110 | span{ 111 | margin-right: 30px; 112 | i{ 113 | font-size: 10px; 114 | color: #666; 115 | padding-right: 3px; 116 | } 117 | } 118 | 119 | 120 | 121 | a{ 122 | 123 | 124 | &:hover{ 125 | i{ 126 | color:$main_color; 127 | } 128 | } 129 | 130 | } 131 | 132 | .tags{ 133 | a{ 134 | font-size: 0.9em; 135 | padding: 2px; 136 | margin-right: 5px; 137 | 138 | &:hover{ 139 | color: white; 140 | background: $main_color; 141 | } 142 | } 143 | } 144 | 145 | .read_more{ 146 | padding: 0; 147 | position: absolute; 148 | top:15px; 149 | right: 0; 150 | 151 | a{ 152 | color: $main_color; 153 | padding: 2px; 154 | &:hover{ 155 | color: white; 156 | background: $main_color; 157 | } 158 | } 159 | 160 | } 161 | } 162 | 163 | img{ 164 | max-width: 98%; 165 | display: block; 166 | margin: 1em auto 1.8em auto; 167 | border: 1px solid #ddd; 168 | padding: 5px; 169 | border-radius: 5px; 170 | } 171 | 172 | } 173 | 174 | 175 | /* for archive*/ 176 | .list_with_title { 177 | font-size: 16px; 178 | padding: 0; 179 | margin: 50px auto; 180 | 181 | //reset 182 | li { 183 | list-style-type: none; 184 | padding: 0; 185 | } 186 | 187 | .listing_title { 188 | font-weight: bold; 189 | line-height: 2.2em; 190 | margin: 50px 0 5px 0; 191 | font-size: 1.4em; 192 | text-align: center; 193 | border-bottom: 1px solid #ddd; 194 | } 195 | 196 | .listing { 197 | margin: 0; 198 | padding: 0; 199 | 200 | li.listing_item { 201 | line-height: 2.9em; 202 | border-bottom: 1px solid #ddd; 203 | position: relative; 204 | padding: 0 5px; 205 | text-align: left; 206 | font-weight: normal; 207 | *font-size: 16px; 208 | 209 | .date { 210 | position: absolute; 211 | right: 5px; 212 | color: #999999; 213 | font-size: 14px; 214 | } 215 | } 216 | } 217 | } 218 | 219 | 220 | 221 | 222 | /* paginator */ 223 | .pager { 224 | position: relative; 225 | height: 57px; 226 | margin: 150px 0 50px 0; 227 | 228 | 229 | 230 | a { 231 | color: #333; 232 | letter-spacing: 1px; 233 | font-size: 12px; 234 | line-height: 5.0; 235 | text-align: center; 236 | border: 1px solid #d3d3d3; 237 | 238 | /*for IE*/ 239 | *line-height: 1.8; 240 | line-height: 1.8 \9; 241 | 242 | // rounded 243 | width: 57px; 244 | height: 57px; 245 | -moz-border-radius: 28px; 246 | -webkit-border-radius: 28px; 247 | border-radius: 28px; 248 | display: block; 249 | 250 | width: expression('60px'); 251 | height: expression('20px'); 252 | 253 | &:hover { 254 | color: #fff; 255 | background: $main_color; 256 | } 257 | } 258 | 259 | .next { 260 | position: absolute; 261 | right: 0; 262 | } 263 | .pre { 264 | position: absolute; 265 | left: 0; 266 | } 267 | 268 | } 269 | 270 | 271 | //category 272 | 273 | #categories { 274 | list-style-type: none; 275 | display: inline-block; 276 | zoom: 1; 277 | *display: inline; 278 | clear: both; 279 | padding: 0; 280 | margin-top: 50px; 281 | 282 | li { 283 | float: left; 284 | position: relative; 285 | 286 | a { 287 | margin: 20px; 288 | width: 200px; 289 | float: left; 290 | height: 230px; 291 | background: #fff; 292 | border: 1px solid #c8c8c8; 293 | padding: 60px 30px; 294 | 295 | &:hover { 296 | border: 1px solid #b7b7b7; 297 | -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); 298 | -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); 299 | box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); 300 | 301 | h3 { 302 | padding-left: 2px; 303 | } 304 | 305 | } 306 | 307 | h3 { 308 | font-size: 1.3em; 309 | word-wrap: break-word; 310 | overflow: hidden; 311 | } 312 | span { 313 | color: #999; 314 | font-size: 0.8em; 315 | } 316 | 317 | } 318 | 319 | } 320 | } 321 | 322 | #footer { 323 | margin-top:50px; 324 | 325 | a { 326 | color: #666; 327 | font-size: 0.8em; 328 | &:hover { 329 | color: #E60900; 330 | text-decoration: underline; 331 | } 332 | } 333 | 334 | .powered_by { 335 | margin-bottom: 20px; 336 | text-align: center; 337 | font-size: 0.8em; 338 | 339 | span { 340 | font-size: 9px; 341 | padding: 0 15px; 342 | } 343 | } 344 | 345 | } 346 | 347 | 348 | 349 | 350 | .post a, .pager a{ 351 | text-decoration: none; 352 | -webkit-transition: 0.25s; 353 | -moz-transition: 0.25s; 354 | -o-transition: 0.25s; 355 | transition: 0.25s; 356 | } 357 | 358 | // 359 | 360 | 361 | /* Custom sizes 362 | ============================================================================================== */ 363 | 364 | @media screen and (max-width: 768px) { 365 | /* ipad 竖, iphone横 */ 366 | #layout{ 367 | width: 85%; 368 | } 369 | 370 | .post p{ 371 | line-height: 1.7em; 372 | } 373 | } 374 | 375 | 376 | @media screen and (max-width: 480px) { 377 | /* Add your styles for devices with a maximum width of 480 */ 378 | #layout{ 379 | width: 95%; 380 | } 381 | 382 | .pager{ 383 | margin-top: 20px; 384 | } 385 | 386 | .post { 387 | .post_body { 388 | line-height: 1.5em; 389 | } 390 | 391 | .title { 392 | font-size: 1.5em; 393 | font-weight: bold; 394 | 395 | i { 396 | font-size: 12px; 397 | } 398 | } 399 | 400 | } 401 | 402 | 403 | } 404 | 405 | 406 | @media screen and (max-width: 320px) { 407 | /* iphone –*/ 408 | #layout{ 409 | width: 92% 410 | } 411 | 412 | #nav a { 413 | padding: 1px 10px; 414 | } 415 | 416 | .list_with_title .date{ 417 | display: none; 418 | } 419 | 420 | .post{ 421 | margin: 5em 0; 422 | 423 | .post_body{ 424 | font-size: 14px; 425 | line-height: 1.3em; 426 | } 427 | 428 | .title{ 429 | font-size: 1.3em; 430 | font-weight: bold; 431 | } 432 | 433 | .info .read_more{ 434 | display: none; 435 | } 436 | 437 | } 438 | 439 | } 440 | 441 | 442 | 443 | 444 | 445 | 446 | @media screen and (min-width: 1240px) { 447 | #layout{ 448 | width: 900px; 449 | } 450 | 451 | } 452 | 453 | 454 | @media screen and (max-width: 860px) { 455 | #layout{ 456 | width: 90%; 457 | } 458 | 459 | } 460 | 461 | 462 | /* iPads (landscape) ----------- */ 463 | 464 | @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) { 465 | #layout { 466 | width: 75%; 467 | } 468 | } 469 | -------------------------------------------------------------------------------- /template_packages/default red/index+tags+category.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block title 4 | if request.path.startswith('/tags/') 5 | {{ " ".join(tags) }} 6 | elif request.path.startswith('/category/') 7 | category.title 8 | else 9 | site.title 10 | 11 | block content 12 | div#posts 13 | for post in posts 14 | .post 15 | h2.title 16 | a(href=post.url) 17 | i.fa.fa-leaf 18 | post.title 19 | .post_body= post.content.limit(250) 20 | .info 21 | span.date 22 | i.fa.fa-clock-o 23 | post.date 24 | span.visitors 25 | i.fa.fa-user 26 | post.visits 27 | if post.tags 28 | span.tags 29 | i.fa.fa-tags 30 | for tag in post.tags 31 | a(href="/tags/{{tag}}") {{tag}} 32 | .read_more 33 | a(href="{{post.url}}") >ReadMore 34 | 35 | .pager 36 | if pager.has_pre 37 | a.pre(href=pager.pre_url) Pre 38 | if pager.has_next 39 | a.next(href=pager.next_url) Next 40 | -------------------------------------------------------------------------------- /template_packages/default red/post.jade: -------------------------------------------------------------------------------- 1 | extends base 2 | 3 | block title 4 | post.title 5 | 6 | block content 7 | div.post.detail_post 8 | h2.title 9 | a(href=post.url) 10 | i.fa.fa-leaf 11 | post.title 12 | .post_body= post.content 13 | .info 14 | span.date 15 | i.fa.fa-clock-o 16 | post.date 17 | span.visitors 18 | i.fa.fa-user 19 | post.visits 20 | if post.tags 21 | span.tags 22 | i.fa.fa-tags 23 | for tag in post.tags 24 | a(href="/tags/{{tag}}") {{tag}} 25 | 26 | include include.comments 27 | --------------------------------------------------------------------------------