├── 404.jade
├── README.md
├── archive.jade
├── base.jade
├── index+tags.jade
├── index.jade
├── interface.json
├── mixins.jade
├── post+markdown+pages.jade
└── style
├── css
├── 404.scss
└── style.scss
├── images
├── 404.svg
├── mar.svg
├── star.svg
└── star2.svg
└── js
├── autoscroll.js
├── font.js
├── jquery-migrate-1.2.1.min.js
├── jquery.appear.js
└── menu.js
/404.jade:
--------------------------------------------------------------------------------
1 | html
2 | head
3 | title Not Found
4 | +load('/template/style/css/404.scss')
5 | .page_404
6 | .page_404_part1
7 | img.animated.fadeInDown(src="/template/style/images/star2.svg")
8 | .page_404_part2
9 | img.animated.fadeInDown(src="/template/style/images/404.svg")
10 | .page_404_part3
11 | img.animated.fadeInDown(src="/template/style/images/mar.svg")
12 | +load('jquery')
13 | +load('/template/style/js/autoscroll.js')
14 | script
15 | $(function(){
16 | window.autoscroll.interval = 10;
17 | window.autoscroll.threshold = 50;
18 | window.autoscroll.velocity = 5;
19 | window.autoscroll.acceleration = 1;
20 | window.autoscroll.start();
21 | });
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # farbox-theme-cais
2 | This theme is desiged for FarBox,You can use it directly or modified it on FarBox
3 | 这是一款为Farbox设计的主题
4 |
5 | 
6 |
7 | 
8 | ### 快速使用
9 |
10 | 拷贝仓库最新的代码到你的Farbox博客template文件内
11 | 在后台设置相关参数,比如社交账号,博客主题等
12 |
13 | ### 说明
14 |
15 | - 主题默认使用了谷歌字体,如果加载速度不满意,请自行切换
16 | - About页面,是一个简单的demo,可以自由发挥
17 | - 默认分页加载文章,如果需要全部加载,请到后台系统设置文章数为一个比较大的数字,比如“9999”,这样分页按钮消失
18 | - 没有做IE一些老的浏览器的适配~
19 | - 第三方留言为disqus,如果需要请到disqus申请注册,不需要则注销
20 |
21 | ### 反馈
22 |
23 | 如果遇到问题,欢迎@我,或者提Issues给我~
24 |
25 | ### License
26 |
27 | cais is released under the MIT license.
28 |
--------------------------------------------------------------------------------
/archive.jade:
--------------------------------------------------------------------------------
1 | from mixins import make_pager
2 | extends base.jade
3 | block content
4 | .autopagerize_page_element:.content
5 | ul.list-with-title
6 | entries = get_data(type='post',limit=300, sort='desc').group('-date:year')
7 | for year, posts in entries
8 | div.listing-title= year
9 | ul.listing
10 | for post in posts
11 | .listing-item
12 | .listing-post
13 | a(href=post.url, title=post.title)= post.title
14 | div.post-time
15 | span.date= post.date.format("%m-%d")
16 | +make_pager('Prev', 'Next')
17 |
--------------------------------------------------------------------------------
/base.jade:
--------------------------------------------------------------------------------
1 | html
2 | +i18n('Home', '首页', 'zh_cn')
3 | +i18n('Albums', '相册', 'zh_cn')
4 | +i18n('Categories', '分类', 'zh_cn')
5 | +i18n('Archive', '归档', 'zh_cn')
6 | +i18n('Tags', '标签', 'zh_cn')
7 | +i18n('About', '关于', 'zh_cn')
8 | +i18n('Links', '友链', 'zh_cn')
9 | head
10 | meta(http-equiv="Content-Type", content="text/html; charset=UTF-8")
11 | block title
12 | title= post.title or site.title
13 | +mobile_meta()
14 | meta(name="author", content="CaiCai,hi@cai-cai.me")
15 | meta(name="keywords", content=site.configs.keywords.escaped)
16 | meta(name="description", content=site.raw_content.escaped)
17 | link(rel="stylesheet", type="text/css", href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&subset=latin,latin-ext")
18 | +load('font')
19 | +get_resource("blog_basic.css")
20 | +load('/template/style/css/style.scss')
21 | body
22 |
23 | // header starts
24 | if context_doc and context_doc.type=='post'
25 | .back-button
26 | button.btn(type=button,role="back",onclick="window.history.go(-1)") Back
27 | else
28 | .menu
29 | ul.btn-down
30 | li.animated.fadeInDown
31 | a(href="#", onmouseover="mopen('m1')", onmouseout="mclosetime()") Menu
32 | #m1(onmouseover="mcancelclosetime()", onmouseout="mclosetime()")
33 | a(href="/")= _('Home')
34 | if has('images')
35 | a(href='/album')= _('Albums')
36 | if not has('posts')
37 | +redirect('/album')
38 | a(href="/archive")= _('Archive')
39 | pages = get_data(status='pages', type='post', limit=5, with_page=False, sort='position')
40 | for page_p in pages
41 | a(href="/{{page_p.path}}")= _(page_p.filename.split('.')[0].title())
42 | .header
43 | .logo-title
44 | .title.animated.fadeInDown
45 | h1(title="")
46 | a(href="/") {{ site.title }}
47 | if site.raw_content
48 | .description.animated.fadeInDown
49 | p= '♥ %s ♥' % site.raw_content[:100]
50 |
51 | ul.social-links.animated.fadeInDown
52 | if site.configs.twitter
53 | li
54 | a(href="https://twitter.com/{{site.configs.twitter}}")
55 | i.fa.fa-twitter
56 | span Twitter
57 | if site.configs.instagram
58 | li
59 | a(href="http://instagram.com/{{site.configs.instagram}}")
60 | i.fa.fa-instagram
61 | span Instagram
62 | if site.configs.dribbble
63 | li
64 | a(href="https://dribbbble.com/{{site.configs.dribbble}}")
65 | i.fa.fa-dribbble
66 | span Dribbble
67 | if site.configs.weibo
68 | li
69 | a(href="http://weibo.com/{{site.configs.weibo}}")
70 | i.fa.fa-weibo
71 | span Weibo
72 |
73 |
74 | block content
75 |
76 |
77 | .footer
78 | a(target="_blank", href="http://{{request.domain}}")
79 | span All content copyright {{site.title}} © 2015 • All rights reserved.
80 | span Designed by
81 | a(href="https://www.caicai.me") CaiCai
82 | .by_farbox
83 | a(href="http://www.farbox.com", target="_blank") Proudly published with Farbox!
84 |
85 |
86 |
87 | +load('jquery')
88 | +load("/template/style/js/jquery-migrate-1.2.1.min.js")
89 | +load("/template/style/js/jquery.appear.js")
90 | +load("/template/style/js/menu.js")
--------------------------------------------------------------------------------
/index+tags.jade:
--------------------------------------------------------------------------------
1 | from mixins import make_post, make_pager
2 |
3 | extends base.jade
4 | block content
5 | .autopagerize_page_element:.content
6 | for post in posts
7 | +make_post(post, is_detail=False)
8 | +make_pager('Older Posts', 'Newer Posts')
9 |
--------------------------------------------------------------------------------
/index.jade:
--------------------------------------------------------------------------------
1 | from mixins import make_post, make_pager
2 |
3 | extends base.jade
4 | block content
5 | .autopagerize_page_element:.content
6 | for post in posts
7 | +make_post(post, is_detail=False)
8 | +make_pager('Older Posts', 'Newer Posts')
9 |
--------------------------------------------------------------------------------
/interface.json:
--------------------------------------------------------------------------------
1 | [
2 | {},
3 | {},
4 | {},
5 | {},
6 | {
7 | "title": "Extra",
8 | "title_zh_cn": "更多",
9 | "icon": "align-justify",
10 | "groups":[
11 | {
12 | "title": "My Social",
13 | "title_zh_cn": "我的社交",
14 | "cells":[
15 | {
16 | "parts_per_line": 4,
17 | "parts":[
18 | {
19 | "key": "weibo",
20 | "title": "Weibo",
21 | "title_zh_cn": "微博",
22 | "placeholder": "WeiBo ID",
23 | "model": "text"
24 | },
25 | {
26 | "key": "twitter",
27 | "title": "Twitter",
28 | "placeholder": "Twitter ID",
29 | "model": "text"
30 | }
31 | ,
32 | {
33 | "key": "instagram",
34 | "title": "Instagram",
35 | "placeholder": "Instagram ID",
36 | "model": "text"
37 | }
38 | ,
39 | {
40 | "key": "dribbble",
41 | "title": "Dribbble",
42 | "placeholder": "Dribbble ID",
43 | "model": "text"
44 | }
45 | ]
46 | }
47 | ]
48 |
49 |
50 |
51 | }
52 | ]
53 | }
54 | ]
--------------------------------------------------------------------------------
/mixins.jade:
--------------------------------------------------------------------------------
1 | mixin make_post(post, is_detail=False)
2 | .post
3 | .post-title
4 | h3
5 | if is_detail
6 | a= post.title
7 | else
8 | a(href="{{post.url}}")= post.title
9 | if is_detail
10 | .post-content= post.content
11 | else
12 | .post-content= post.content.limit(200).no_pic
13 | .post-footer:.meta
14 | .info
15 | i.fa.fa-clock-o
16 | span.date= post.date.format("%Y-%m-%d")
17 | if site.configs.disqus
18 | i.fa.fa-comment-o
19 | a(href="{{post.url}}#disqus_thread") Comments
20 | .like-reblog-buttons
21 | .reblog-button
22 | a(href="javascript:void((function(s,d,e){try{}catch(e){}var f='http://service.weibo.com/share/share.php?',u=d.location.href,p=['url=',e(u),'&title=',e(d.title),'&appkey=2924220432'].join('');function a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=620,height=450,left=',(s.width-620)/2,',top=',(s.height-450)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})(screen,document,encodeURIComponent));")
23 | i.fa.fa-plus
24 |
25 | mixin make_pager(pre_text, next_text)
26 | .pagination
27 | ul.clearfix
28 | if paginator.has_next
29 | li.next.pagbuttons
30 | a.btn(role="navigation",href="{{ paginator.next_page_url}}")= next_text
31 |
32 | if paginator.has_previous
33 | li.pre.pagbuttons
34 | a.btn(role="navigation",href="{{ paginator.previous_page_url }}")= pre_text
--------------------------------------------------------------------------------
/post+markdown+pages.jade:
--------------------------------------------------------------------------------
1 | from mixins import make_post
2 |
3 | extends base.jade
4 | block content
5 | .autopagerize_page_element:.content:.post-page
6 | +make_post(post, is_detail=True)
7 | include include/comments
8 |
--------------------------------------------------------------------------------
/style/css/404.scss:
--------------------------------------------------------------------------------
1 |
2 | .page_404 {
3 | width: 100%;
4 | height: 200000px;
5 | background-image: url(/template/style/images/star.svg);
6 |
7 | .page_404_part1 {
8 | margin: 0 auto;
9 | width: 100%;
10 | text-align: center;
11 | padding-top: 100px;
12 |
13 | img {
14 | width: 3%;
15 |
16 | }
17 | }
18 |
19 | .page_404_part2 {
20 | margin: 0 auto;
21 | width: 100%;
22 | text-align: center;
23 | padding-top: 100px;
24 | img {
25 |
26 | width: 20%;
27 |
28 | }
29 | }
30 |
31 | .page_404_part3 {
32 | margin: 0 auto;
33 | width: 100%;
34 | text-align: center;
35 | bottom: 0;
36 | padding-top: 198696px;
37 |
38 | img {
39 | width: 30%;
40 | }
41 | }
42 |
43 | }
--------------------------------------------------------------------------------
/style/css/style.scss:
--------------------------------------------------------------------------------
1 | /*basic styles starts*/
2 | html {
3 | background-color: #fff;
4 | -webkit-font-smoothing: antialiased;
5 | }
6 |
7 | body {
8 | color: rgba(0, 0, 0, 0.6);
9 | font-family: 'Open Sans', sans-serif;
10 | font-size: 15px;
11 | width: 100%;
12 | margin: 0 auto 30px auto;
13 | background-color: #fff;
14 |
15 | }
16 | p {
17 | line-height: 1.9em;
18 | font-weight: 400;
19 | }
20 |
21 | a {
22 | text-decoration: none;
23 | }
24 |
25 | a:link, a:visited {
26 | opacity: 1;
27 | -webkit-transition: all .15s linear;
28 | -moz-transition: all .15s linear;
29 | -o-transition: all .15s linear;
30 | -ms-transition: all .15s linear;
31 | transition: all .15s linear;
32 | color: #424242;
33 |
34 | }
35 |
36 | a:hover, a:active {
37 | color: #555;
38 |
39 | }
40 |
41 | /*basic styles ends*/
42 |
43 |
44 |
45 | /*animation starts*/
46 |
47 | .animated {
48 | -webkit-animation-fill-mode: both;
49 | -moz-animation-fill-mode: both;
50 | -ms-animation-fill-mode: both;
51 | -o-animation-fill-mode: both;
52 | animation-fill-mode: both;
53 | -webkit-animation-duration: 1s;
54 | -moz-animation-duration: 1s;
55 | -ms-animation-duration: 1s;
56 | -o-animation-duration: 1s;
57 | animation-duration: 1s;
58 | }
59 |
60 | .animated.hinge {
61 | -webkit-animation-duration: 1s;
62 | -moz-animation-duration: 1s;
63 | -ms-animation-duration: 1s;
64 | -o-animation-duration: 1s;
65 | animation-duration: 1s;
66 | }
67 |
68 | @-webkit-keyframes fadeInDown {
69 | 0% {
70 | opacity: 0;
71 | -webkit-transform: translateY(-20px);
72 | }
73 |
74 | 100% {
75 | opacity: 1;
76 | -webkit-transform: translateY(0);
77 | }
78 | }
79 |
80 | @-moz-keyframes fadeInDown {
81 | 0% {
82 | opacity: 0;
83 | -moz-transform: translateY(-20px);
84 | }
85 |
86 | 100% {
87 | opacity: 1;
88 | -moz-transform: translateY(0);
89 | }
90 | }
91 |
92 | @-o-keyframes fadeInDown {
93 | 0% {
94 | opacity: 0;
95 | -o-transform: translateY(-20px);
96 | }
97 |
98 | 100% {
99 | opacity: 1;
100 | -o-transform: translateY(0);
101 | }
102 | }
103 |
104 | @keyframes fadeInDown {
105 | 0% {
106 | opacity: 0;
107 | transform: translateY(-20px);
108 | }
109 |
110 | 100% {
111 | opacity: 1;
112 | transform: translateY(0);
113 | }
114 | }
115 |
116 | .fadeInDown {
117 | -webkit-animation-name: fadeInDown;
118 | -moz-animation-name: fadeInDown;
119 | -o-animation-name: fadeInDown;
120 | animation-name: fadeInDown;
121 | }
122 |
123 | /*animation ends*/
124 |
125 |
126 |
127 |
128 | .content {
129 | max-width: 700px;
130 | padding: 0px 20px;
131 | height: auto;
132 | margin: 0 auto;
133 | }
134 |
135 | .list_with_title .container{
136 | width: 720px;
137 | margin: 0 auto;
138 | }
139 | .header {
140 | width: 720px;
141 | padding: 100px 0;
142 | margin: 0 auto;
143 | -webkit-background-size: cover;
144 | background-size: cover;
145 |
146 | .logo-title{
147 | text-align: center;
148 | padding: 0 20px;
149 |
150 |
151 | .description {
152 | padding: 20px 5px 0px 5px;
153 | font-size: 14px;
154 | color: #565654;
155 | }
156 |
157 |
158 | .logo {
159 | margin: 0 auto;
160 | }
161 |
162 | .title{
163 | h1 {
164 | text-transform: uppercase;
165 | font-size: 4rem;
166 | font-weight: bold;
167 | letter-spacing: 5px;
168 | line-height: 1;
169 | margin:0;
170 | }
171 |
172 | a {
173 | text-decoration: none;
174 | color: #000;
175 | font-size: 4rem;
176 | font-weight: bold;
177 | }
178 | }
179 |
180 | }
181 |
182 | .social-links {
183 | list-style: none;
184 | padding: 0;
185 | font-size: 14px;
186 | text-align: center;
187 |
188 | i{
189 | margin-right: 3px;
190 | }
191 |
192 | li {
193 | display: inline;
194 | padding: 0 4px;
195 | line-height: 0;
196 | }
197 |
198 | a {
199 | color: #565654;
200 | }
201 | }
202 | }
203 |
204 |
205 |
206 | .post-page {
207 | padding-top: 100px;
208 | }
209 |
210 |
211 | .post {
212 | background-color: #FFF;
213 | margin-top: 30px;
214 |
215 | .post-title{
216 | h1 {
217 | text-transform: uppercase;
218 | font-size: 20px;
219 | letter-spacing: 5px;
220 | line-height: 1;
221 | }
222 |
223 | h2 {
224 | text-transform: uppercase;
225 | letter-spacing: 1px;
226 | font-size: 2.5rem;
227 | line-height: 1;
228 | font-weight: 600;
229 | color: #5f5f5f;
230 | padding-bottom: 10px;
231 |
232 | }
233 |
234 | h3 {
235 | text-transform: uppercase;
236 | letter-spacing: 1px;
237 | line-height: 1;
238 | font-weight: 600;
239 | color: #5f5f5f;
240 | padding-bottom: 10px;
241 |
242 | }
243 |
244 | a {
245 | text-decoration: none;
246 | letter-spacing: 1px;
247 | color: #5f5f5f;
248 |
249 | }
250 | }
251 |
252 | .post-content{
253 | a {
254 | text-decoration: none;
255 | letter-spacing: 1px;
256 | color: #3CBD10;
257 | }
258 | }
259 |
260 | .post-footer {
261 | padding: 0 0 60px 0;
262 | border-bottom: 1px solid #f2f2f2;
263 |
264 |
265 | .meta {
266 | max-width: 100%;
267 | height: 25px;
268 | color: #bbbbbb;
269 |
270 | .info {
271 | float: left;
272 | font-size: 12px;
273 | .date{
274 | margin-right: 5px;
275 | }
276 | }
277 |
278 | a {
279 | text-decoration: none;
280 | color: #bbbbbb;
281 | }
282 | i{
283 | margin-right: 3px;
284 | }
285 | }
286 |
287 |
288 |
289 | .tags{
290 | padding-bottom: 15px;
291 | font-size: 13px;
292 |
293 | ul {
294 | list-style-type: none;
295 | display: inline;
296 | margin: 0;
297 | padding: 0;
298 |
299 | li {
300 | list-style-type: none;
301 | margin: 0;
302 | padding-right: 5px;
303 | display: inline;
304 | }
305 | }
306 |
307 | a{
308 | text-decoration: none;
309 | color: rgba(0, 0, 0, 0.44);
310 | font-weight: 400;
311 |
312 | &:hover{
313 | text-decoration: none;
314 | }
315 | }
316 | }
317 | }
318 |
319 |
320 | }
321 |
322 |
323 |
324 |
325 | .pagination {
326 | padding: 15px 0 40px 0;
327 | border-bottom: 1px solid #f2f2f2;
328 |
329 | ul {
330 | list-style: none;
331 | margin: 0;
332 | padding: 0;
333 | height: 13px;
334 |
335 | li {
336 | margin: 0 2px 0 2px;
337 | display: inline;
338 | line-height: 1;
339 |
340 | a {
341 | text-decoration: none;
342 | }
343 | }
344 | }
345 |
346 | .pre {
347 | float: left;
348 | }
349 |
350 | .next {
351 | float: right;
352 | }
353 | }
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 | .like-reblog-buttons {
363 | float: right;
364 | }
365 |
366 | .like-button {
367 | float: right;
368 | padding: 0 0 0 10px;
369 | }
370 |
371 | .reblog-button {
372 | float: right;
373 | padding: 0;
374 | }
375 |
376 | #install-btn {
377 | position: fixed;
378 | bottom: 0px;
379 | right: 6px
380 | }
381 |
382 | #disqus_thread {
383 | padding: 30px 0;
384 | border-bottom: 1px solid #f2f2f2;
385 | }
386 |
387 | .footer {
388 | clear: both;
389 | max-width: 700px;
390 | text-align: center;
391 | font-size: 10px;
392 | padding-top: 60px;
393 | margin: 0 auto;
394 |
395 | a {
396 | color: #A6A6A6;
397 | margin-left: 3px;
398 | }
399 | span{
400 | margin-right: 3px;
401 | }
402 | .by_farbox{
403 | margin-top: 30px;
404 | }
405 | }
406 |
407 |
408 |
409 |
410 | /*for archive*/
411 | .list-with-title{
412 | font-size: 14px;
413 | margin: 0;
414 | padding: 0;
415 |
416 | li {
417 | list-style-type: none;
418 | padding: 0;
419 | }
420 |
421 | .listing-title {
422 | font-size: 24px;
423 | color: #666666;
424 | font-weight: bold;
425 | padding-top: 10px;
426 | line-height: 2.2em;
427 | }
428 | .listing{
429 | margin: 0 0 50px 0;
430 | padding: 0;
431 |
432 |
433 | .listing-post {
434 | padding-bottom: 5px;
435 |
436 | .post-time {
437 | float: right;
438 | color: #C5C5C5;
439 | }
440 |
441 | a {
442 | color: #8F8F8F;
443 |
444 | &:hover{
445 | color: #3CBD10;
446 | }
447 | }
448 |
449 | }
450 | }
451 | }
452 |
453 |
454 | /* 评论样式 */
455 |
456 | .comment-count {
457 | color: #666;
458 | }
459 |
460 | .tab-community {
461 | color: #666;
462 | }
463 |
464 | .read_more {
465 | font-size: 14px;
466 | }
467 |
468 | .back-button {
469 | padding-top: 30px;
470 | max-width: 100px;
471 | padding-left: 40px;
472 | float: left;
473 | }
474 |
475 | /* 按钮样式 */
476 | a.btn {
477 | color: #868686;
478 | font-weight: 400;
479 |
480 | }
481 |
482 | .btn {
483 | display: inline-block;
484 | position: relative;
485 | outline: 0;
486 | color: rgba(0, 0, 0, 0.44);
487 | background: rgba(0, 0, 0, 0);
488 | font-size: 14px;
489 | text-align: center;
490 | text-decoration: none;
491 | cursor: pointer;
492 | border: 1px solid rgba(0, 0, 0, 0.15);
493 | white-space: nowrap;
494 | font-weight: 400;
495 | font-style: normal;
496 | border-radius: 999em;
497 | }
498 |
499 | .btn:hover {
500 | display: inline-block;
501 | position: relative;
502 | outline: 0px;
503 | color: #3CBD10;
504 | background: rgba(0, 0, 0, 0);
505 | font-size: 14px;
506 | text-align: center;
507 | text-decoration: none;
508 | cursor: pointer;
509 | border: 1px solid #3CBD10;
510 | white-space: nowrap;
511 | font-weight: 400;
512 | font-style: normal;
513 | border-radius: 999em;
514 | }
515 |
516 | [role="back"] {
517 | padding: 0.5em 1.25em;
518 | line-height: 1.666em;
519 | }
520 |
521 | [role="home"] {
522 | padding: 0.5em 1.25em;
523 | line-height: 1.666em;
524 | }
525 |
526 | [role="navigation"] {
527 | padding: 0.5em 1.25em;
528 | line-height: 1.666em;
529 | }
530 |
531 | [role="tags"] {
532 | padding: 6px 12px;
533 | }
534 |
535 | /* Menu样式 */
536 | .menu {
537 | float: right;
538 | padding-top: 30px;
539 |
540 | .btn-down{
541 | margin: 0px;
542 | li {
543 | list-style: none;
544 | width: 100px;
545 |
546 | a {
547 | display: inline-block;
548 | position: relative;
549 | padding: 0.5em 1.25em;
550 | outline: 0;
551 | color: rgba(0, 0, 0, 0.44);
552 | background: rgba(0, 0, 0, 0);
553 | font-size: 14px;
554 | text-align: center;
555 | text-decoration: none;
556 | cursor: pointer;
557 | border: 1px solid rgba(0, 0, 0, 0.15);
558 | white-space: nowrap;
559 | font-weight: 400;
560 | font-style: normal;
561 | border-radius: 999em;
562 | margin-top: 5px;
563 |
564 | &:hover{
565 | position: relative;
566 | padding: 0.5em 1.25em;
567 | outline: 0;
568 | color: #fff;
569 | background: #3CBD10;
570 | font-size: 14px;
571 | text-align: center;
572 | text-decoration: none;
573 | cursor: pointer;
574 | border: 1px solid rgba(0, 0, 0, 0.15);
575 | white-space: nowrap;
576 | font-weight: 400;
577 | font-style: normal;
578 | border-radius: 999em;
579 | margin-top: 5px;
580 | }
581 | }
582 |
583 | }
584 | }
585 |
586 | .btn-down div {
587 | position: absolute;
588 | visibility: hidden;
589 | width: 100px;
590 | float: right;
591 |
592 | }
593 |
594 | }
595 |
596 |
597 | @media screen and (max-width: 900px) {
598 | .header {
599 | }
600 |
601 | .content{
602 | margin-top: 100px;
603 | }
604 |
605 | .menu{
606 | position: absolute;
607 | top: 0;
608 | right: 0;
609 | padding-top: 15px;
610 |
611 | .btn-down li a{
612 | background: #fff;
613 | }
614 | }
615 |
616 | .post {
617 | margin-top: 40px;
618 | }
619 |
620 | .post-footer {
621 | padding-bottom: 30px;
622 | }
623 |
624 | }
625 |
626 |
627 |
--------------------------------------------------------------------------------
/style/images/404.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/style/images/mar.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/style/images/star.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/style/images/star2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/style/js/autoscroll.js:
--------------------------------------------------------------------------------
1 | /*
2 | * # AutoScroll 1.1.1
3 | *
4 | * http://github.com/withassociates/autoscroll.js
5 | *
6 | * Simplest possible autoscrolling library.
7 | * Creates a top-level instance to start/stop the behaviour.
8 | *
9 | * ## Usage
10 | *
11 | * window.autoscroll.start();
12 | * window.autoscroll.stop();
13 | *
14 | * ## Settings & Defaults
15 | *
16 | * window.autoscroll.interval = 1000 / 60
17 | * window.autoscroll.threshold = 50
18 | * window.autoscroll.velocity = 2
19 | * window.autoscroll.acceleration = 0.01
20 | *
21 | * ## Dependencies
22 | *
23 | * * jQuery ~> 1.5.2
24 | *
25 | * ## Contributors
26 | *
27 | * * jamie@withassociates.com
28 | *
29 | * Licensed under the terms of the MIT license.
30 | */
31 |
32 | (function($) {
33 |
34 | // class AutoScroll
35 | var AutoScroll = function() {
36 | var self = this;
37 | self.version = '1.1.1';
38 |
39 | // starts autoscroll listening for events and performing scrolling
40 | self.start = function() {
41 | if (self.running) return;
42 | reset();
43 | listen();
44 | update();
45 | self.running = true;
46 | }
47 |
48 | // shuts down autoscroll
49 | self.stop = function() {
50 | if (!self.running) return;
51 | clearTimeout(timeout);
52 | stopListening();
53 | self.running = false;
54 | }
55 |
56 | // defaults
57 | self.interval = 1000 / 60;
58 | self.threshold = 50;
59 | self.velocity = 2;
60 | self.acceleration = 0.01;
61 |
62 | // private properties
63 | var mouseNow,
64 | reset,
65 | scrollingUp,
66 | scrollingDown,
67 | timeout,
68 | viewportNow,
69 | pageNow,
70 | whenScrollingStarted,
71 | $window = $(window),
72 | $document = $(document);
73 |
74 | // private methods
75 | var checkTop,
76 | checkBottom,
77 | listen,
78 | stopListening,
79 | onMouseMove,
80 | onResize,
81 | update,
82 | velocity,
83 | triggerMouseMove;
84 |
85 | onMouseMove = function(event) {
86 | mouseNow = {
87 | pageX: event.pageX,
88 | pageY: event.pageY,
89 | x: event.pageX - $window.scrollLeft(),
90 | y: event.pageY - $window.scrollTop()
91 | };
92 | }
93 |
94 | onResize = function() {
95 | viewportNow = {
96 | width: $window.width(),
97 | height: $window.height()
98 | };
99 | pageNow = {
100 | width: $('body').outerWidth(),
101 | height: $('body').outerHeight()
102 | }
103 | $('body > *').each(function() {
104 | pageNow.height = Math.max(pageNow.height, $(this).outerHeight());
105 | });
106 | }
107 |
108 | checkTop = function() {
109 | var isPastThreshold = mouseNow.y < self.threshold,
110 | isAtMin = $window.scrollTop() <= 0;
111 |
112 | if (isPastThreshold && !isAtMin) {
113 | if (!scrollingUp) {
114 | scrollingUp = true;
115 | whenScrollingStarted = new Date();
116 | }
117 | var v = velocity();
118 | $window.scrollTop($window.scrollTop() - v);
119 | triggerMouseMove(0, -v);
120 | } else {
121 | scrollingUp = false;
122 | }
123 | }
124 |
125 | checkBottom = function() {
126 | var isPastThreshold = mouseNow.y > viewportNow.height - self.threshold,
127 | isAtMax = $window.scrollTop() >= pageNow.height - $window.height();
128 |
129 | if (isPastThreshold && !isAtMax) {
130 | if (!scrollingDown) {
131 | scrollingDown = true;
132 | whenScrollingStarted = new Date();
133 | }
134 | var v = velocity();
135 | $window.scrollTop($window.scrollTop() + v);
136 | triggerMouseMove(0, v);
137 | } else {
138 | scrollingDown = false;
139 | }
140 | }
141 |
142 | velocity = function() {
143 | var now = new Date(),
144 | time = now - whenScrollingStarted;
145 |
146 | return Math.round(self.velocity + (self.acceleration * time));
147 | }
148 |
149 | triggerMouseMove = function(dx, dy) {
150 | $document.trigger($.Event('mousemove', {
151 | pageX: mouseNow.pageX + dx,
152 | pageY: mouseNow.pageY + dy
153 | }));
154 | }
155 |
156 | update = function() {
157 | if (mouseNow) {
158 | checkTop();
159 | checkBottom();
160 | }
161 | timeout = setTimeout(update, self.interval);
162 | }
163 |
164 | reset = function() {
165 | delete mouseNow;
166 | delete scrollingUp;
167 | delete scrollingDown;
168 | delete whenScrollingStarted;
169 | }
170 |
171 | listen = function() {
172 | $document.bind('mousemove', onMouseMove);
173 | $document.bind('resize', onResize);
174 | onResize();
175 | }
176 |
177 | stopListening = function() {
178 | $document.unbind('mousemove', onMouseMove);
179 | $document.unbind('resize', onResize);
180 | }
181 |
182 | }
183 |
184 | // Create top-level instance
185 | // We don't want more than one, so we can lose the constructor after this.
186 | window.autoscroll = new AutoScroll();
187 |
188 | })(jQuery);
189 |
--------------------------------------------------------------------------------
/style/js/font.js:
--------------------------------------------------------------------------------
1 | WebFontConfig = {
2 | google: { families: [ 'Open+Sans:700italic,400,300,800,700,600:cyrillic-ext,latin,latin-ext' ] }
3 | };
4 | (function() {
5 | var wf = document.createElement('script');
6 | wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
7 | '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
8 | wf.type = 'text/javascript';
9 | wf.async = 'true';
10 | var s = document.getElementsByTagName('script')[0];
11 | s.parentNode.insertBefore(wf, s);
12 | })();
--------------------------------------------------------------------------------
/style/js/jquery-migrate-1.2.1.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
2 | jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window);
--------------------------------------------------------------------------------
/style/js/jquery.appear.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery appear plugin
3 | *
4 | * Copyright (c) 2012 Andrey Sidorov
5 | * licensed under MIT license.
6 | *
7 | * https://github.com/morr/jquery.appear/
8 | *
9 | * Version: 0.3.3
10 | */
11 | (function($) {
12 | var selectors = [];
13 |
14 | var check_binded = false;
15 | var check_lock = false;
16 | var defaults = {
17 | interval: 250,
18 | force_process: false
19 | }
20 | var $window = $(window);
21 |
22 | var $prior_appeared;
23 |
24 | function process() {
25 | check_lock = false;
26 | for (var index = 0; index < selectors.length; index++) {
27 | var $appeared = $(selectors[index]).filter(function() {
28 | return $(this).is(':appeared');
29 | });
30 |
31 | $appeared.trigger('appear', [$appeared]);
32 |
33 | if ($prior_appeared) {
34 | var $disappeared = $prior_appeared.not($appeared);
35 | $disappeared.trigger('disappear', [$disappeared]);
36 | }
37 | $prior_appeared = $appeared;
38 | }
39 | }
40 |
41 | // "appeared" custom filter
42 | $.expr[':']['appeared'] = function(element) {
43 | var $element = $(element);
44 | if (!$element.is(':visible')) {
45 | return false;
46 | }
47 |
48 | var window_left = $window.scrollLeft();
49 | var window_top = $window.scrollTop();
50 | var offset = $element.offset();
51 | var left = offset.left;
52 | var top = offset.top;
53 |
54 | if (top + $element.height() >= window_top &&
55 | top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() &&
56 | left + $element.width() >= window_left &&
57 | left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) {
58 | return true;
59 | } else {
60 | return false;
61 | }
62 | }
63 |
64 | $.fn.extend({
65 | // watching for element's appearance in browser viewport
66 | appear: function(options) {
67 | var opts = $.extend({}, defaults, options || {});
68 | var selector = this.selector || this;
69 | if (!check_binded) {
70 | var on_check = function() {
71 | if (check_lock) {
72 | return;
73 | }
74 | check_lock = true;
75 |
76 | setTimeout(process, opts.interval);
77 | };
78 |
79 | $(window).scroll(on_check).resize(on_check);
80 | check_binded = true;
81 | }
82 |
83 | if (opts.force_process) {
84 | setTimeout(process, opts.interval);
85 | }
86 | selectors.push(selector);
87 | return $(selector);
88 | }
89 | });
90 |
91 | $.extend({
92 | // force elements's appearance check
93 | force_appear: function() {
94 | if (check_binded) {
95 | process();
96 | return true;
97 | };
98 | return false;
99 | }
100 | });
101 | })(jQuery);
--------------------------------------------------------------------------------
/style/js/menu.js:
--------------------------------------------------------------------------------
1 | // Copyright 2006-2007 javascript-array.com
2 |
3 | var timeout = 800;
4 | var closetimer = 0;
5 | var ddmenuitem = 0;
6 |
7 | // open hidden layer
8 | function mopen(id)
9 | {
10 | // cancel close timer
11 | mcancelclosetime();
12 |
13 | // close old layer
14 | if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
15 |
16 | // get new layer and show it
17 | ddmenuitem = document.getElementById(id);
18 | ddmenuitem.style.visibility = 'visible';
19 |
20 | }
21 | // close showed layer
22 | function mclose()
23 | {
24 | if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
25 | }
26 |
27 | // go close timer
28 | function mclosetime()
29 | {
30 | closetimer = window.setTimeout(mclose, timeout);
31 | }
32 |
33 | // cancel close timer
34 | function mcancelclosetime()
35 | {
36 | if(closetimer)
37 | {
38 | window.clearTimeout(closetimer);
39 | closetimer = null;
40 | }
41 | }
42 |
43 | // close layer when click-out
44 | document.onclick = mclose;
--------------------------------------------------------------------------------