jekyll-text-theme 1.4.3 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -6
- data/_data/locale.yml +21 -3
- data/_data/variables.yml +31 -0
- data/_includes/{blog → components}/article-data.html +4 -2
- data/_includes/{info → components}/follow-me.html +1 -1
- data/_includes/{blog → components}/footer.html +1 -1
- data/_includes/components/header.html +42 -0
- data/_includes/{blog → components}/license.html +0 -0
- data/_includes/{blog → components}/tags.html +5 -6
- data/_includes/icon/clear.svg +3 -0
- data/_includes/icon/link.svg +1 -0
- data/_includes/icon/omit.svg +1 -0
- data/_includes/icon/search.svg +3 -0
- data/_includes/icon/{mail.svg → social/mail.svg} +0 -0
- data/_includes/scripts/all.html +244 -0
- data/_includes/scripts/common.html +30 -0
- data/_includes/scripts/data.html +27 -0
- data/_includes/scripts/home.html +26 -0
- data/_includes/scripts/page-post.html +32 -0
- data/_includes/scripts/post.html +183 -0
- data/_includes/scripts/utils.html +180 -0
- data/_includes/snippets/get-lang.html +2 -2
- data/_includes/snippets/get-sources.html +5 -0
- data/_includes/utils/chart.html +17 -0
- data/_includes/utils/comment-disqus.html +0 -3
- data/_includes/utils/comment-gitalk.html +15 -12
- data/_includes/utils/google-analytics.html +6 -8
- data/_includes/utils/mathjax.html +10 -4
- data/_includes/utils/mermaid.html +5 -4
- data/_layouts/all.html +10 -131
- data/_layouts/base.html +38 -0
- data/_layouts/error-404.html +1 -1
- data/_layouts/home.html +81 -68
- data/_layouts/page.html +3 -3
- data/_layouts/post.html +32 -172
- data/_sass/animate/_fade-in-down.scss +10 -0
- data/_sass/animate/_fade-in.scss +8 -0
- data/_sass/colors/{_colors.chocolate.scss → _chocolate.scss} +9 -3
- data/_sass/colors/{_colors.dark.scss → _dark.scss} +10 -3
- data/_sass/colors/{_colors.default.scss → _default.scss} +10 -4
- data/_sass/colors/{_colors.forest.scss → _forest.scss} +9 -3
- data/_sass/colors/{_colors.ocean.scss → _ocean.scss} +9 -3
- data/_sass/colors/{_colors.orange.scss → _orange.scss} +9 -3
- data/_sass/common/_classes.scss +15 -0
- data/_sass/{settings → common}/_highlighting.scss +0 -12
- data/_sass/common/_reset.scss +171 -0
- data/_sass/common/_variables.scss +64 -0
- data/_sass/common/classes/_animation.scss +4 -0
- data/_sass/common/classes/_clearfix.scss +7 -0
- data/_sass/{mixins → common/classes}/_flex.scss +0 -0
- data/_sass/common/classes/_link.scss +161 -0
- data/_sass/common/classes/_media.scss +18 -0
- data/_sass/common/classes/_shadow.scss +14 -0
- data/_sass/common/classes/_shape.scss +19 -0
- data/_sass/common/classes/_space.scss +40 -0
- data/_sass/common/classes/_split-line.scss +24 -0
- data/_sass/common/classes/_transform.scss +4 -0
- data/_sass/common/classes/_transition.scss +4 -0
- data/_sass/common/classes/_user-select.scss +6 -0
- data/_sass/common/components/_button.scss +72 -0
- data/_sass/components/_article.content.extra.scss +41 -0
- data/_sass/components/_article.content.scss +127 -69
- data/_sass/components/_article.data.scss +11 -11
- data/_sass/components/_follow-me.scss +27 -34
- data/_sass/components/_footer.scss +4 -4
- data/_sass/components/_header.scss +35 -22
- data/_sass/components/_license.scss +7 -7
- data/_sass/components/_main.scss +23 -0
- data/_sass/components/_pagination.scss +12 -0
- data/_sass/components/_tags.scss +30 -15
- data/_sass/components/_toc.scss +32 -19
- data/_sass/layout/_all.scss +82 -0
- data/_sass/layout/_default.scss +19 -0
- data/_sass/{blog/_page.error-404.scss → layout/_error-404.scss} +1 -1
- data/_sass/layout/_home.scss +61 -0
- data/_sass/layout/_post.scss +80 -0
- data/assets/css/blog.scss +29 -34
- data/assets/images/logo/logo.svg +1 -1
- metadata +56 -38
- data/_includes/blog/header.html +0 -56
- data/_layouts/blog-base.html +0 -36
- data/_layouts/blog-default.html +0 -7
- data/_sass/base/_animate.scss +0 -19
- data/_sass/base/_base.scss +0 -83
- data/_sass/base/_image&icon.scss +0 -23
- data/_sass/base/_links.scss +0 -73
- data/_sass/base/_text.scss +0 -56
- data/_sass/blog/_layout.base.scss +0 -3
- data/_sass/blog/_layout.default.scss +0 -21
- data/_sass/blog/_layout.post.scss +0 -68
- data/_sass/blog/_page.all.scss +0 -35
- data/_sass/blog/_page.index.scss +0 -50
- data/_sass/components/_wrapper.scss +0 -29
- data/_sass/mixins/_link.scss +0 -67
- data/_sass/mixins/_media.scss +0 -12
- data/_sass/mixins/_prefix.scss +0 -14
- data/_sass/mixins/_shape.scss +0 -19
- data/_sass/settings/_base.scss +0 -12
- data/_sass/settings/_colors.scss +0 -9
- data/_sass/settings/_font.scss +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb89dc720f2e68655d150b10f7fb344b63ab461e
|
4
|
+
data.tar.gz: 89cc55c17ce994c93f655cdee03d873cfda5fc34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb737051b2a6a944797be9c0d7e93db7beb512768f4dbbcb460bad57a19d2f5959efd9e843cd11d06cce5ad0a5e8fbfcd41f243e504015bce12e3ffe22b2a13a
|
7
|
+
data.tar.gz: d0cba3d8ccf1fe07c48f3d2bfeed33cdb6e38f7e7599dafa1d6b2f44e325c45d6cc429ec23ab234ccabfe6824f186c9326af6dd6f298dd3816e48a5fcaf04739
|
data/README.md
CHANGED
@@ -4,13 +4,11 @@
|
|
4
4
|
[![license](https://img.shields.io/github/license/kitian616/jekyll-TeXt-theme.svg)](https://github.com/kitian616/jekyll-TeXt-theme/blob/master/LICENSE)
|
5
5
|
[![Travis](https://img.shields.io/travis/kitian616/jekyll-TeXt-theme.svg)](https://travis-ci.org/kitian616/jekyll-TeXt-theme)
|
6
6
|
|
7
|
-
**==> [English (Beta)](https://github.com/kitian616/jekyll-TeXt-theme/blob/master/README-en.md) <==**
|
8
|
-
|
9
7
|
![TeXt Theme](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/TeXt-home.png)
|
10
8
|
|
11
9
|
![TeXt Theme Details](https://raw.githubusercontent.com/kitian616/jekyll-TeXt-theme/master/screenshots/TeXt-details.png)
|
12
10
|
|
13
|
-
|
11
|
+
[Demo](https://tianqi.name/jekyll-TeXt-theme/) | [English (Beta)](https://github.com/kitian616/jekyll-TeXt-theme/blob/master/README-en.md)
|
14
12
|
|
15
13
|
TeXt is a succinct theme for blogging.
|
16
14
|
|
@@ -20,8 +18,9 @@ TeXt 是针对博客的一款简洁的主题,它虽然简洁但并不简单。
|
|
20
18
|
|
21
19
|
- 响应式
|
22
20
|
- 分页([jekyll-paginate](https://github.com/jekyll/jekyll-paginate))
|
23
|
-
-
|
21
|
+
- 文章目录
|
24
22
|
- 文章标签
|
23
|
+
- 搜索(标题)
|
25
24
|
- 阅读次数统计([LeanCloud](https://leancloud.cn/))
|
26
25
|
- Emoji([Jemoji](https://github.com/jekyll/jemoji))
|
27
26
|
- 评论([Disqus](https://disqus.com/), [gitalk](https://gitalk.github.io/))
|
@@ -32,6 +31,7 @@ TeXt 是针对博客的一款简洁的主题,它虽然简洁但并不简单。
|
|
32
31
|
- Color Theme
|
33
32
|
- 数学公式([MathJax](https://www.mathjax.org/))
|
34
33
|
- 流程图, 序列图,甘特图([mermaid](https://mermaidjs.github.io/))
|
34
|
+
- 柱状图,折线图,饼图,雷达图([chartjs](http://www.chartjs.org/))
|
35
35
|
- RSS([jekyll-feed](https://github.com/jekyll/jekyll-feed))
|
36
36
|
- 多语言支持(English | 简体中文 | 繁體中文)
|
37
37
|
|
@@ -111,7 +111,7 @@ bundle exec jekyll serve -H 0.0.0.0
|
|
111
111
|
|
112
112
|
### Color Theme
|
113
113
|
|
114
|
-
颜色主题位于文件夹 ./\_sass/colors 中,修改 ./\
|
114
|
+
颜色主题位于文件夹 ./\_sass/colors 中,修改 ./\_config.yml 中的 text_color_theme 项为以下值即可更换颜色主题,默认主题为 default。
|
115
115
|
|
116
116
|
| `default` | `dark` | `forest` |
|
117
117
|
| --- | --- | --- |
|
@@ -171,10 +171,11 @@ bundle exec jekyll serve -H 0.0.0.0
|
|
171
171
|
| --- | --- | --- |
|
172
172
|
| key | | 评论系统和阅读量统计使用的文章标识符,如果未设置则评论和统计无效。可用字符集:`字母`、`数字` 及 `- _ : .` |
|
173
173
|
| lang | en/zh/zh-Hans/zh-Hant | 该文章的语言,其优先级高于 ./\_config.yml 中设置的值 |
|
174
|
-
| picture_frame | shadow | 该文章的图片框样式,如果为 `shadow` 则图片带有阴影边框 |
|
175
174
|
| modify_date | | 该文章的修改时间,不影响首页文章排序(`date` 代表发表时间,会影响文章排序) |
|
176
175
|
| comment | true/false | 该文章是否能够评论,默认为 true(当然你也可以通过不设置 key 来实现,但是这样的话统计也失效了) |
|
177
176
|
| mathjax | true/false | 该文章是否需要使用 MathJax 公式,默认为 false(此时只会在该文章页面中解析 MathJax 公式。当然你也可以配置 _config.yml 中的 `mathjax` 项为 true,让网站全局支持 MathJax 公式) |
|
177
|
+
| mermaid | true/false | 该文章是否需要使用 Mermaid 绘制流程图 |
|
178
|
+
| chart | true/false | 该文章是否需要使用 Chart 绘制图标 |
|
178
179
|
|
179
180
|
### 其他资源
|
180
181
|
|
data/_data/locale.yml
CHANGED
@@ -5,7 +5,7 @@ NAV:
|
|
5
5
|
zh-Hans: "主页"
|
6
6
|
zh-Hant: "主頁"
|
7
7
|
ALL:
|
8
|
-
en: "
|
8
|
+
en: "Archive"
|
9
9
|
zh: "归档"
|
10
10
|
zh-Hans: "归档"
|
11
11
|
zh-Hant: "歸檔"
|
@@ -21,7 +21,11 @@ READMORE:
|
|
21
21
|
zh-Hans: "点我阅读更多..."
|
22
22
|
zh-Hant: "「點我閱讀更多」"
|
23
23
|
|
24
|
-
|
24
|
+
VIEWS:
|
25
|
+
en: "views"
|
26
|
+
zh: "阅读"
|
27
|
+
zh-Hans: "阅读"
|
28
|
+
zh-Hant: "閱讀"
|
25
29
|
|
26
30
|
LAST_UPDATED:
|
27
31
|
en: "Last updated"
|
@@ -29,6 +33,18 @@ LAST_UPDATED:
|
|
29
33
|
zh-Hans: "更新于"
|
30
34
|
zh-Hant: "更新於"
|
31
35
|
|
36
|
+
PREVIOUS:
|
37
|
+
en: "PREVIOUS"
|
38
|
+
zh: "上篇"
|
39
|
+
zh-Hans: "上篇"
|
40
|
+
zh-Hant: "上篇"
|
41
|
+
|
42
|
+
NEXT:
|
43
|
+
en: "NEXT"
|
44
|
+
zh: "下篇"
|
45
|
+
zh-Hans: "下篇"
|
46
|
+
zh-Hant: "下篇"
|
47
|
+
|
32
48
|
ARTICLE_DATE_FORMAT:
|
33
49
|
en: "%b %d, %Y"
|
34
50
|
zh: "%Y年 %m月%d日"
|
@@ -75,4 +91,6 @@ EMAIL_ME:
|
|
75
91
|
en: "Send me Email."
|
76
92
|
zh: "给我发邮件。"
|
77
93
|
zh-Hans: "给我发邮件。"
|
78
|
-
zh-Hant: "給我發郵件。"
|
94
|
+
zh-Hant: "給我發郵件。"
|
95
|
+
|
96
|
+
COPYRIGHT_DATES: "2018"
|
data/_data/variables.yml
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
default:
|
2
|
+
text_color_theme: default
|
3
|
+
paths:
|
4
|
+
base: /
|
5
|
+
home: /
|
6
|
+
all: /all.html
|
7
|
+
rss: /feed.xml
|
8
|
+
lang: zh
|
9
|
+
sources: bootcss
|
10
|
+
toc:
|
11
|
+
selectors: 'h1,h2,h3'
|
12
|
+
|
13
|
+
sources:
|
14
|
+
bootcss:
|
15
|
+
jquery: 'https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js'
|
16
|
+
leancloud_js_sdk: '//cdn1.lncld.net/static/js/3.4.1/av-min.js'
|
17
|
+
chart: 'https://cdn.bootcss.com/Chart.js/2.7.1/Chart.bundle.min.js'
|
18
|
+
gitalk:
|
19
|
+
js: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.js'
|
20
|
+
css: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.css'
|
21
|
+
mathjax: 'https://cdn.bootcss.com/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML'
|
22
|
+
mermaid: 'https://cdn.bootcss.com/mermaid/7.1.2/mermaid.min.js'
|
23
|
+
unpkg:
|
24
|
+
jquery: 'https://unpkg.com/jquery@3.3.1/dist/jquery.min.js'
|
25
|
+
leancloud_js_sdk: '//cdn1.lncld.net/static/js/3.4.1/av-min.js'
|
26
|
+
chart: 'https://unpkg.com/chart.js@2.7.1/dist/Chart.min.js'
|
27
|
+
gitalk:
|
28
|
+
js: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.min.js'
|
29
|
+
css: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.css'
|
30
|
+
mathjax: 'https://unpkg.com/mathjax@2.7.3/unpacked/MathJax.js?config=TeX-MML-AM_CHTML'
|
31
|
+
mermaid: 'https://unpkg.com/mermaid@7.1.2/dist/mermaid.min.js'
|
@@ -15,7 +15,7 @@
|
|
15
15
|
{%- assign cur_page = page -%}
|
16
16
|
{%- endif -%}
|
17
17
|
{%- if cur_page.tags[0] -%}
|
18
|
-
<ul class="
|
18
|
+
<ul class="tag-wrapper">
|
19
19
|
{%- if site.paths.all -%}
|
20
20
|
{%- assign all_path = site.paths.all -%}
|
21
21
|
{%- else -%}
|
@@ -33,9 +33,11 @@
|
|
33
33
|
{%- endif -%}
|
34
34
|
<div class="other-wrapper">
|
35
35
|
{%- if site.leancloud.app_id and site.leancloud.app_key and site.leancloud.app_class -%}
|
36
|
+
{%- assign __locale = site.data.locale.VIEWS } -%}
|
37
|
+
{%- include snippets/locale-to-string.html -%}
|
36
38
|
<div class="view-wrapper">
|
37
39
|
<span class="article-view" id="post-key-{{ cur_page.key }}">0
|
38
|
-
</span>
|
40
|
+
</span> {{ __return }}
|
39
41
|
</div>
|
40
42
|
{%- endif -%}
|
41
43
|
<div class="date-wrapper">
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="follow-me">
|
2
2
|
{%- assign __locale = site.data.locale.FOLLOW_ME -%}
|
3
3
|
{%- include snippets/locale-to-string.html -%}
|
4
|
-
<ul
|
4
|
+
<ul itemscope itemtype="http://schema.org/Person">
|
5
5
|
<meta itemprop="name" content="{{ site.author.name }}">
|
6
6
|
<link itemprop="url" href="{{ '/' | prepend: site.url }}">
|
7
7
|
{%- if site.author.weibo -%}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="m-page-footer js-page-footer">
|
2
2
|
<div class="main">
|
3
|
-
<aside> {%- include
|
3
|
+
<aside> {%- include components/follow-me.html -%} </aside>
|
4
4
|
<footer class="site-info">
|
5
5
|
<p>© {{ site.title }} {{ site.data.locale.COPYRIGHT_DATES }}</p>
|
6
6
|
<p>Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<header class="m-page-header">
|
2
|
+
<div class="main clearfix">
|
3
|
+
<div class='site-logo'>
|
4
|
+
{%- include logo/logo.svg -%}
|
5
|
+
{%- assign __path = site.paths.base | default: site.data.variables.default.paths.base -%}
|
6
|
+
{%- include snippets/get-nav-url.html -%}
|
7
|
+
{%- if site.title -%}
|
8
|
+
<a title="{%- if site.description -%}{{ site.description }}{%- endif -%}" href="{{ __return }}">{{ site.title }}</a>
|
9
|
+
{%- endif -%}
|
10
|
+
</div>
|
11
|
+
<nav>
|
12
|
+
<ul>
|
13
|
+
{%- assign __path = site.paths.home | default: site.data.variables.default.paths.home -%}
|
14
|
+
{%- include snippets/get-nav-url.html -%}
|
15
|
+
{%- assign href = __return -%}
|
16
|
+
{%- assign __locale = site.data.locale.NAV.HOME -%}
|
17
|
+
{%- include snippets/locale-to-string.html -%}
|
18
|
+
<li><a href="{{ href }}">{{ __return }}</a></li>
|
19
|
+
{%- assign __path = site.paths.all | default: site.data.variables.default.paths.all -%}
|
20
|
+
{%- include snippets/get-nav-url.html -%}
|
21
|
+
{%- assign href = __return -%}
|
22
|
+
{%- assign __locale = site.data.locale.NAV.ALL -%}
|
23
|
+
{%- include snippets/locale-to-string.html -%}
|
24
|
+
<li><a href="{{ href }}">{{ __return }}</a></li>
|
25
|
+
{%- for list in site.nav_lists -%}
|
26
|
+
{%- assign __path = list.url -%}
|
27
|
+
{%- include snippets/get-nav-url.html -%}
|
28
|
+
{%- assign href = __return -%}
|
29
|
+
{%- assign __locale = list.titles -%}
|
30
|
+
{%- include snippets/locale-to-string.html -%}
|
31
|
+
<li><a href="{{ href }}">{%- if list.title -%}{{ list.title }}{%- else -%}{{ __return }}{%- endif -%}</a></li>
|
32
|
+
{%- endfor -%}
|
33
|
+
{%- assign __path = site.paths.rss | default: site.data.variables.default.paths.rss -%}
|
34
|
+
{%- include snippets/get-nav-url.html -%}
|
35
|
+
{%- assign href = __return -%}
|
36
|
+
{%- assign __locale = site.data.locale.NAV.RSS -%}
|
37
|
+
{%- include snippets/locale-to-string.html -%}
|
38
|
+
<li><a type="application/rss+xml" href="{{ href }}">{{ __return }}</a></li>
|
39
|
+
</ul>
|
40
|
+
</nav>
|
41
|
+
</div>
|
42
|
+
</header>
|
File without changes
|
@@ -15,11 +15,11 @@
|
|
15
15
|
{%- if gap_size < 1 -%}
|
16
16
|
{%- assign gap_size = 1 -%}
|
17
17
|
{%- endif -%}
|
18
|
-
<div class="m-tags">
|
19
|
-
<ul
|
18
|
+
<div class="m-tags js-tags">
|
19
|
+
<ul>
|
20
20
|
<li>
|
21
|
-
<button type="button" class="js-article-tag js-tag-show-all all pill-button"
|
22
|
-
<div class="tag-count">{{ site.posts | size }}</div>
|
21
|
+
<button type="button" class="js-article-tag js-tag-show-all all pill-button inactive" data-encode="">
|
22
|
+
Show All<div class="tag-count">{{ site.posts | size }}</div>
|
23
23
|
</button>
|
24
24
|
</li>
|
25
25
|
{%- for tag in _tags -%}
|
@@ -43,8 +43,7 @@
|
|
43
43
|
{%- else -%}
|
44
44
|
{%- assign c_index = 4 -%}
|
45
45
|
{%- endif -%}
|
46
|
-
<li><button type="button" class="js-article-tag tag-{{ c_index }} pill-button"
|
47
|
-
data-tag="{{ tag[0] | strip | url_encode }}" onclick="tagSelect('{{ tag[0] | strip | url_encode }}')">
|
46
|
+
<li><button type="button" class="js-article-tag tag-{{ c_index }} pill-button inactive" data-encode="{{ tag[0] | strip | url_encode }}">
|
48
47
|
<span>{{ tag[0] | strip }}</span><div class="tag-count">{{ tag[1].size }}</div>
|
49
48
|
</button>
|
50
49
|
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg fill="#000000" width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg fill="#000000" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>
|
3
|
+
</svg>
|
File without changes
|
@@ -0,0 +1,244 @@
|
|
1
|
+
{%- include snippets/page-title.html -%}
|
2
|
+
{%- assign _title = __return -%}
|
3
|
+
{%- include snippets/get-sources.html -%}
|
4
|
+
{%- assign _sources = __return -%}
|
5
|
+
{%- assign __path = '/search.json' -%}
|
6
|
+
{%- include snippets/prepend-baseurl.html -%}
|
7
|
+
{%- assign _search_path = __return -%}
|
8
|
+
<script>
|
9
|
+
(function() {
|
10
|
+
function queryString() {
|
11
|
+
// This function is anonymous, is executed immediately and
|
12
|
+
// the return value is assigned to QueryString!
|
13
|
+
var i = 0,
|
14
|
+
queryObj = {},
|
15
|
+
pair;
|
16
|
+
var queryStr = window.location.search.substring(1);
|
17
|
+
var queryArr = queryStr.split('&');
|
18
|
+
for (i = 0; i < queryArr.length; i++) {
|
19
|
+
pair = queryArr[i].split('=');
|
20
|
+
// If first entry with this name
|
21
|
+
if (typeof queryObj[pair[0]] === 'undefined') {
|
22
|
+
queryObj[pair[0]] = pair[1];
|
23
|
+
// If second entry with this name
|
24
|
+
} else if (typeof queryObj[pair[0]] === 'string') {
|
25
|
+
queryObj[pair[0]] = [queryObj[pair[0]], pair[1]];
|
26
|
+
// If third or later entry with this name
|
27
|
+
} else {
|
28
|
+
queryObj[pair[0]].push(pair[1]);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
return queryObj;
|
32
|
+
}
|
33
|
+
|
34
|
+
function decodeUrl(str) {
|
35
|
+
return str ? decodeURIComponent(str.replace(/\+/g, '%20')) : '';
|
36
|
+
}
|
37
|
+
|
38
|
+
function memorize(f) {
|
39
|
+
var cache = {};
|
40
|
+
return function () {
|
41
|
+
var key = Array.prototype.join.call(arguments, ',');
|
42
|
+
if (key in cache) return cache[key];
|
43
|
+
else return cache[key] = f.apply(this, arguments);
|
44
|
+
};
|
45
|
+
};
|
46
|
+
function initData(json) {
|
47
|
+
var _data = JSON.parse(json), i, j, cur, _tags;
|
48
|
+
Object.keys(_data).forEach(function(year) {
|
49
|
+
for (i = 0; i < _data[year].length; i++) {
|
50
|
+
cur = _data[year][i], _tags = cur.tags;
|
51
|
+
cur.title = decodeUrl(cur.title);
|
52
|
+
if (_tags && _tags.length > 0) {
|
53
|
+
for (j = 0; j < _tags.length; j++) {
|
54
|
+
_tags[j] = decodeUrl(_tags[j]);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
});
|
59
|
+
return _data;
|
60
|
+
}
|
61
|
+
|
62
|
+
var setUrlQuery = (function() {
|
63
|
+
var baseUrl = window.location.href.split('?')[0];
|
64
|
+
return function(query) {
|
65
|
+
if (typeof query === 'string') {
|
66
|
+
window.history.replaceState(null, '', baseUrl + query);
|
67
|
+
} else {
|
68
|
+
window.history.replaceState(null, '', baseUrl);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
})();
|
72
|
+
|
73
|
+
var data = initData('{%- include scripts/data.html -%}');
|
74
|
+
|
75
|
+
var searchByTag = memorize(function(tag) {
|
76
|
+
var i, j, cur, _tags, _tag, _data = {};
|
77
|
+
Object.keys(data).forEach(function(year) {
|
78
|
+
for (i = 0; i < data[year].length; i++) {
|
79
|
+
cur = data[year][i], _tags = cur.tags;
|
80
|
+
if (_tags && _tags.length > 0) {
|
81
|
+
for (j = 0; j < _tags.length; j++) {
|
82
|
+
_tag = _tags[j];
|
83
|
+
if (_tag === tag) {
|
84
|
+
if (!_data[year]) {
|
85
|
+
_data[year] = []
|
86
|
+
}
|
87
|
+
_data[year].push(cur);
|
88
|
+
break;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
});
|
94
|
+
return _data;
|
95
|
+
});
|
96
|
+
|
97
|
+
var searchByQuery = function(query) {
|
98
|
+
var i, j, cur, _title, _data = { _: [] };
|
99
|
+
Object.keys(data).forEach(function(year) {
|
100
|
+
for (i = 0; i < data[year].length; i++) {
|
101
|
+
cur = data[year][i], _title = cur.title;
|
102
|
+
if (_title.toLowerCase().indexOf(query.toLowerCase()) >= 0) {
|
103
|
+
_data._.push(cur);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
});
|
107
|
+
return _data;
|
108
|
+
};
|
109
|
+
|
110
|
+
window.Lazyload.js('{{ _sources.jquery }}', function() {
|
111
|
+
var $root = $('.js-all');
|
112
|
+
var $searchBox = $('.js-search-box');
|
113
|
+
var $searchInput = $searchBox.children('input');
|
114
|
+
var $searchClear = $searchBox.children('.icon-clear');
|
115
|
+
var $tags = $('.js-tags');
|
116
|
+
var $articleTags = $('.js-article-tag');
|
117
|
+
var $tagShowAll = $('.js-tag-show-all');
|
118
|
+
var $result = $('.js-result');
|
119
|
+
var $lastFocusButton = null;
|
120
|
+
|
121
|
+
function addClass(dom, className) {
|
122
|
+
dom.hasClass(className) || dom.addClass(className);
|
123
|
+
}
|
124
|
+
function removeClass(dom, className) {
|
125
|
+
dom.hasClass(className) && dom.removeClass(className);
|
126
|
+
}
|
127
|
+
|
128
|
+
var renderHeading = memorize(function (year) {
|
129
|
+
return $('<h2 class="year">' + year + '</h2>');
|
130
|
+
});
|
131
|
+
var renderItem = memorize(function (key, title, date, url, tags) {
|
132
|
+
return $('<li><span class="date">' + date + '</span><a class="link" href="' + url + '">' + title + '</a></li>');
|
133
|
+
});
|
134
|
+
function render(data) {
|
135
|
+
var $dom = $('<div></div>'), $section, $ul, i, cur, date;
|
136
|
+
Object.keys(data).sort(function(a, b) {
|
137
|
+
return b.localeCompare(a);
|
138
|
+
}).forEach(function(year) {
|
139
|
+
$section = $('<section></section>'), $ul = $('<ul></ul>');
|
140
|
+
(year === '_') || $section.append(renderHeading(year));
|
141
|
+
for (i = 0; i < data[year].length; i++) {
|
142
|
+
cur = data[year][i];
|
143
|
+
$ul.append(renderItem(cur.key, cur.title, cur.date, cur.url, cur.tags));
|
144
|
+
}
|
145
|
+
$dom.append($section.append($ul));
|
146
|
+
})
|
147
|
+
return $dom;
|
148
|
+
}
|
149
|
+
|
150
|
+
function searchButtonsByTag(_tag/*raw tag*/) {
|
151
|
+
if (!_tag) {
|
152
|
+
return $tagShowAll;
|
153
|
+
}
|
154
|
+
var _buttons = $articleTags.filter('[data-encode="' + _tag + '"]');
|
155
|
+
if (_buttons.length === 0) {
|
156
|
+
return $tagShowAll;
|
157
|
+
}
|
158
|
+
return _buttons;
|
159
|
+
}
|
160
|
+
function buttonFoucs(target) {
|
161
|
+
if (target) {
|
162
|
+
addClass(target, 'focus');
|
163
|
+
$lastFocusButton && !$lastFocusButton.is(target) && removeClass($lastFocusButton, 'focus');
|
164
|
+
$lastFocusButton = target;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
function setIsSearch() {
|
169
|
+
addClass($root, 'search');
|
170
|
+
}
|
171
|
+
function setNotSearch() {
|
172
|
+
removeClass($root, 'search');
|
173
|
+
}
|
174
|
+
function setIsEmpty() {
|
175
|
+
removeClass($searchBox, 'not-empty');
|
176
|
+
}
|
177
|
+
function setNotEmpty() {
|
178
|
+
addClass($searchBox, 'not-empty');
|
179
|
+
}
|
180
|
+
function setSearchBoxVal(val) {
|
181
|
+
($searchInput.val() === val) || $searchInput.val(val);
|
182
|
+
}
|
183
|
+
function clearSearchBox() {
|
184
|
+
setSearchBoxVal(''); queryInput('');
|
185
|
+
}
|
186
|
+
|
187
|
+
function showAll() {
|
188
|
+
setNotSearch(); setIsEmpty(); buttonFoucs($tagShowAll); setUrlQuery();
|
189
|
+
$result.html(render(data));
|
190
|
+
}
|
191
|
+
function tagSelect(tag/*decode tag*/, target) {
|
192
|
+
var _data, _tag;
|
193
|
+
if (tag === '' || tag === undefined) {
|
194
|
+
showAll();
|
195
|
+
} else {
|
196
|
+
$result.html(render(searchByTag(tag)));
|
197
|
+
}
|
198
|
+
if (target) {
|
199
|
+
buttonFoucs(target);
|
200
|
+
_tag = target.data('encode');
|
201
|
+
if (_tag === '' || typeof _tag !== 'string') {
|
202
|
+
setUrlQuery();
|
203
|
+
} else {
|
204
|
+
setUrlQuery('?tag=' + _tag)
|
205
|
+
}
|
206
|
+
}
|
207
|
+
}
|
208
|
+
function queryInput(query) {
|
209
|
+
var _data;
|
210
|
+
if (query === '' || typeof query !== 'string') {
|
211
|
+
showAll();
|
212
|
+
} else {
|
213
|
+
$result.html(render(searchByQuery(query))); setIsSearch(); setNotEmpty(); setUrlQuery('?q=' + query);
|
214
|
+
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
(function() {
|
219
|
+
$articleTags.removeClass('inactive');
|
220
|
+
var query = queryString(), _tag = query.tag, _q = query.q;
|
221
|
+
if (_tag !== undefined) {
|
222
|
+
query.tag === undefined || (_tag = query.tag);
|
223
|
+
tagSelect(decodeUrl(_tag));
|
224
|
+
buttonFoucs(searchButtonsByTag(_tag));
|
225
|
+
} else if (_q !== undefined) {
|
226
|
+
queryInput(_q); setSearchBoxVal(_q);
|
227
|
+
} else {
|
228
|
+
showAll();
|
229
|
+
}
|
230
|
+
})();
|
231
|
+
|
232
|
+
$tags.on('click', 'button', function() {
|
233
|
+
tagSelect($(this).children('span').text(), $(this));
|
234
|
+
});
|
235
|
+
|
236
|
+
$searchInput.on('input', window.throttle(function() {
|
237
|
+
queryInput($(this).val());
|
238
|
+
}, 400));
|
239
|
+
$searchClear.on('click', function() {
|
240
|
+
clearSearchBox();
|
241
|
+
});
|
242
|
+
});
|
243
|
+
})();
|
244
|
+
</script>
|