jekyll-theme-chirpy 5.6.1 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/_data/locales/ar.yml +5 -7
- data/_data/locales/bg-BG.yml +1 -3
- data/_data/locales/cs-CZ.yml +5 -7
- data/_data/locales/de-DE.yml +1 -3
- data/_data/locales/el-GR.yml +6 -8
- data/_data/locales/en.yml +5 -7
- data/_data/locales/es-ES.yml +2 -4
- data/_data/locales/fi-FI.yml +5 -7
- data/_data/locales/fr-FR.yml +0 -2
- data/_data/locales/hu-HU.yml +4 -6
- data/_data/locales/id-ID.yml +1 -3
- data/_data/locales/it-IT.yml +5 -8
- data/_data/locales/ko-KR.yml +3 -5
- data/_data/locales/my-MM.yml +1 -3
- data/_data/locales/pt-BR.yml +1 -3
- data/_data/locales/ru-RU.yml +1 -3
- data/_data/locales/sl-SI.yml +91 -0
- data/_data/locales/sv-SE.yml +91 -0
- data/_data/locales/tr-TR.yml +1 -3
- data/_data/locales/uk-UA.yml +1 -3
- data/_data/locales/vi-VN.yml +2 -3
- data/_data/locales/zh-CN.yml +3 -5
- data/_data/locales/zh-TW.yml +83 -0
- data/_data/{assets/cross_origin.yml → origin/cors.yml} +12 -12
- data/_includes/comments/giscus.html +39 -31
- data/_includes/datetime.html +10 -6
- data/_includes/footer.html +24 -26
- data/_includes/head.html +9 -9
- data/_includes/js-selector.html +44 -27
- data/_includes/jsdelivr-combine.html +0 -6
- data/_includes/lang.html +8 -0
- data/_includes/mermaid.html +28 -29
- data/_includes/metadata-hook.html +1 -0
- data/_includes/mode-toggle.html +44 -21
- data/_includes/{assets-origin.html → origin-type.html} +5 -4
- data/_includes/post-nav.html +27 -20
- data/_includes/post-paginator.html +13 -12
- data/_includes/post-sharing.html +21 -13
- data/_includes/read-time.html +17 -10
- data/_includes/refactor-content.html +31 -27
- data/_includes/related-posts.html +35 -34
- data/_includes/search-loader.html +23 -24
- data/_includes/search-results.html +3 -4
- data/_includes/sidebar.html +50 -52
- data/_includes/toc.html +2 -5
- data/_includes/topbar.html +47 -47
- data/_includes/trending-tags.html +13 -17
- data/_includes/update-list.html +13 -14
- data/_layouts/archives.html +5 -3
- data/_layouts/categories.html +97 -77
- data/_layouts/category.html +10 -8
- data/_layouts/default.html +34 -29
- data/_layouts/home.html +35 -18
- data/_layouts/page.html +38 -33
- data/_layouts/post.html +17 -15
- data/_layouts/tag.html +10 -8
- data/_layouts/tags.html +4 -5
- data/_sass/addon/commons.scss +260 -439
- data/_sass/addon/module.scss +18 -8
- data/_sass/addon/syntax.scss +42 -41
- data/_sass/addon/variables.scss +8 -11
- data/_sass/colors/dark-syntax.scss +1 -0
- data/_sass/colors/dark-typography.scss +16 -24
- data/_sass/colors/light-syntax.scss +3 -3
- data/_sass/colors/light-typography.scss +16 -15
- data/_sass/jekyll-theme-chirpy.scss +14 -19
- data/_sass/layout/categories.scss +20 -4
- data/_sass/layout/home.scss +111 -94
- data/_sass/layout/post.scss +35 -32
- data/assets/404.html +3 -1
- data/assets/css/style.scss +1 -7
- data/assets/feed.xml +1 -1
- data/assets/js/dist/categories.min.js +2 -2
- data/assets/js/dist/commons.min.js +2 -2
- data/assets/js/dist/home.min.js +6 -0
- data/assets/js/dist/misc.min.js +2 -2
- data/assets/js/dist/page.min.js +2 -2
- data/assets/js/dist/post.min.js +2 -2
- metadata +11 -5
- /data/_data/{assets/self_host.yml → origin/basic.yml} +0 -0
data/_includes/mode-toggle.html
CHANGED
@@ -1,14 +1,22 @@
|
|
1
|
-
<!--
|
2
|
-
Switch the mode between dark and light.
|
3
|
-
-->
|
1
|
+
<!-- Switch the mode between dark and light. -->
|
4
2
|
|
5
3
|
<script type="text/javascript">
|
6
4
|
class ModeToggle {
|
7
|
-
static get MODE_KEY() {
|
8
|
-
|
9
|
-
|
10
|
-
static get
|
11
|
-
|
5
|
+
static get MODE_KEY() {
|
6
|
+
return 'mode';
|
7
|
+
}
|
8
|
+
static get MODE_ATTR() {
|
9
|
+
return 'data-mode';
|
10
|
+
}
|
11
|
+
static get DARK_MODE() {
|
12
|
+
return 'dark';
|
13
|
+
}
|
14
|
+
static get LIGHT_MODE() {
|
15
|
+
return 'light';
|
16
|
+
}
|
17
|
+
static get ID() {
|
18
|
+
return 'mode-toggle';
|
19
|
+
}
|
12
20
|
|
13
21
|
constructor() {
|
14
22
|
if (this.hasMode) {
|
@@ -45,17 +53,29 @@
|
|
45
53
|
});
|
46
54
|
} /* constructor() */
|
47
55
|
|
48
|
-
get sysDarkPrefers() {
|
56
|
+
get sysDarkPrefers() {
|
57
|
+
return window.matchMedia('(prefers-color-scheme: dark)');
|
58
|
+
}
|
49
59
|
|
50
|
-
get isSysDarkPrefer() {
|
60
|
+
get isSysDarkPrefer() {
|
61
|
+
return this.sysDarkPrefers.matches;
|
62
|
+
}
|
51
63
|
|
52
|
-
get isDarkMode() {
|
64
|
+
get isDarkMode() {
|
65
|
+
return this.mode === ModeToggle.DARK_MODE;
|
66
|
+
}
|
53
67
|
|
54
|
-
get isLightMode() {
|
68
|
+
get isLightMode() {
|
69
|
+
return this.mode === ModeToggle.LIGHT_MODE;
|
70
|
+
}
|
55
71
|
|
56
|
-
get hasMode() {
|
72
|
+
get hasMode() {
|
73
|
+
return this.mode != null;
|
74
|
+
}
|
57
75
|
|
58
|
-
get mode() {
|
76
|
+
get mode() {
|
77
|
+
return sessionStorage.getItem(ModeToggle.MODE_KEY);
|
78
|
+
}
|
59
79
|
|
60
80
|
/* get the current mode on screen */
|
61
81
|
get modeStatus() {
|
@@ -67,26 +87,29 @@
|
|
67
87
|
}
|
68
88
|
|
69
89
|
setDark() {
|
70
|
-
|
90
|
+
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
|
71
91
|
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
|
72
92
|
}
|
73
93
|
|
74
94
|
setLight() {
|
75
|
-
|
95
|
+
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
|
76
96
|
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
|
77
97
|
}
|
78
98
|
|
79
99
|
clearMode() {
|
80
|
-
|
100
|
+
document.documentElement.removeAttribute(ModeToggle.MODE_ATTR);
|
81
101
|
sessionStorage.removeItem(ModeToggle.MODE_KEY);
|
82
102
|
}
|
83
103
|
|
84
104
|
/* Notify another plugins that the theme mode has changed */
|
85
105
|
notify() {
|
86
|
-
window.postMessage(
|
87
|
-
|
88
|
-
|
89
|
-
|
106
|
+
window.postMessage(
|
107
|
+
{
|
108
|
+
direction: ModeToggle.ID,
|
109
|
+
message: this.modeStatus
|
110
|
+
},
|
111
|
+
'*'
|
112
|
+
);
|
90
113
|
}
|
91
114
|
|
92
115
|
flipMode() {
|
@@ -1,12 +1,13 @@
|
|
1
|
-
{% comment %} Site static assets origin {% endcomment %}
|
2
|
-
|
1
|
+
{% comment %} Site static assets origin type {% endcomment %}
|
2
|
+
|
3
|
+
{% assign type = 'cors' %}
|
3
4
|
|
4
5
|
{% if site.assets.self_host.enabled %}
|
5
6
|
{% if site.assets.self_host.env %}
|
6
7
|
{% if site.assets.self_host.env == jekyll.environment %}
|
7
|
-
{% assign
|
8
|
+
{% assign type = 'basic' %}
|
8
9
|
{% endif %}
|
9
10
|
{% else %}
|
10
|
-
{% assign
|
11
|
+
{% assign type = 'basic' %}
|
11
12
|
{% endif %}
|
12
13
|
{% endif %}
|
data/_includes/post-nav.html
CHANGED
@@ -1,30 +1,37 @@
|
|
1
|
-
<!--
|
2
|
-
Navigation buttons at the bottom of the post.
|
3
|
-
-->
|
1
|
+
<!-- Navigation buttons at the bottom of the post. -->
|
4
2
|
|
5
3
|
<div class="post-navigation d-flex justify-content-between">
|
6
4
|
{% if page.previous.url %}
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
<a
|
6
|
+
href="{{ site.baseurl }}{{ page.previous.url }}"
|
7
|
+
class="btn btn-outline-primary"
|
8
|
+
prompt="{{ site.data.locales[include.lang].post.button.previous }}"
|
9
|
+
>
|
10
|
+
<p>{{ page.previous.title }}</p>
|
11
|
+
</a>
|
11
12
|
{% else %}
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
<div
|
14
|
+
class="btn btn-outline-primary disabled"
|
15
|
+
prompt="{{ site.data.locales[include.lang].post.button.previous }}"
|
16
|
+
>
|
17
|
+
<p>-</p>
|
18
|
+
</div>
|
16
19
|
{% endif %}
|
17
20
|
|
18
21
|
{% if page.next.url %}
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
<a
|
23
|
+
href="{{ site.baseurl }}{{page.next.url}}"
|
24
|
+
class="btn btn-outline-primary"
|
25
|
+
prompt="{{ site.data.locales[include.lang].post.button.next }}"
|
26
|
+
>
|
27
|
+
<p>{{ page.next.title }}</p>
|
28
|
+
</a>
|
23
29
|
{% else %}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
30
|
+
<div
|
31
|
+
class="btn btn-outline-primary disabled"
|
32
|
+
prompt="{{ site.data.locales[include.lang].post.button.next }}"
|
33
|
+
>
|
34
|
+
<p>-</p>
|
35
|
+
</div>
|
28
36
|
{% endif %}
|
29
|
-
|
30
37
|
</div>
|
@@ -1,13 +1,11 @@
|
|
1
|
-
<!--
|
2
|
-
The paginator for post list on HomgPage.
|
3
|
-
-->
|
1
|
+
<!-- The paginator for post list on HomgPage. -->
|
4
2
|
|
5
|
-
<ul class="pagination align-items-center mt-4
|
3
|
+
<ul class="pagination align-items-center mt-4 mb-1 ps-lg-2">
|
6
4
|
<!-- left arrow -->
|
7
5
|
{% if paginator.previous_page %}
|
8
6
|
{% assign prev_url = paginator.previous_page_path | relative_url %}
|
9
7
|
{% else %}
|
10
|
-
{% assign prev_url =
|
8
|
+
{% assign prev_url = '#' %}
|
11
9
|
{% endif %}
|
12
10
|
|
13
11
|
<li class="page-item {% unless paginator.previous_page %}disabled{% endunless %}">
|
@@ -21,7 +19,6 @@
|
|
21
19
|
{% assign right_ellipsis = false %}
|
22
20
|
|
23
21
|
{% for i in (1..paginator.total_pages) %}
|
24
|
-
|
25
22
|
{% assign pre = paginator.page | minus: 1 %}
|
26
23
|
{% assign next = paginator.page | plus: 1 %}
|
27
24
|
{% assign pre_less = pre | minus: 1 %}
|
@@ -37,7 +34,7 @@
|
|
37
34
|
{% assign show = true %}
|
38
35
|
{% endif %}
|
39
36
|
{% else %}
|
40
|
-
{% if i == 1 or i == paginator.total_pages%}
|
37
|
+
{% if i == 1 or i == paginator.total_pages %}
|
41
38
|
{% assign show = true %}
|
42
39
|
{% elsif i >= pre and i <= next %}
|
43
40
|
{% assign show = true %}
|
@@ -47,7 +44,12 @@
|
|
47
44
|
{% if show %}
|
48
45
|
<!-- show number -->
|
49
46
|
<li class="page-item {% if i == paginator.page %} active{% endif %}">
|
50
|
-
<a
|
47
|
+
<a
|
48
|
+
class="page-link btn-box-shadow"
|
49
|
+
href="{% if i > 1 %}{{ site.paginate_path | replace: ':num', i | relative_url }}{% else %}{{ '/' | relative_url }}{% endif %}"
|
50
|
+
>
|
51
|
+
{{- i -}}
|
52
|
+
</a>
|
51
53
|
</li>
|
52
54
|
{% else %}
|
53
55
|
<!-- hide number -->
|
@@ -63,7 +65,6 @@
|
|
63
65
|
{% assign right_ellipsis = true %}
|
64
66
|
{% endif %}
|
65
67
|
{% endif %}
|
66
|
-
|
67
68
|
{% endfor %}
|
68
69
|
|
69
70
|
<!-- mobile pagination -->
|
@@ -76,7 +77,7 @@
|
|
76
77
|
{% if paginator.next_page_path %}
|
77
78
|
{% assign next_url = paginator.next_page_path | relative_url %}
|
78
79
|
{% else %}
|
79
|
-
{% assign next_url =
|
80
|
+
{% assign next_url = '#' %}
|
80
81
|
{% endif %}
|
81
82
|
|
82
83
|
<li class="page-item {% unless paginator.next_page_path %}disabled{% endunless %}">
|
@@ -84,5 +85,5 @@
|
|
84
85
|
<i class="fas fa-angle-right"></i>
|
85
86
|
</a>
|
86
87
|
</li>
|
87
|
-
|
88
|
-
|
88
|
+
</ul>
|
89
|
+
<!-- .pagination -->
|
data/_includes/post-sharing.html
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
-
<!--
|
2
|
-
Post sharing snippet
|
3
|
-
-->
|
1
|
+
<!-- Post sharing snippet -->
|
4
2
|
|
5
3
|
<div class="share-wrapper">
|
6
|
-
<span class="share-label text-muted
|
4
|
+
<span class="share-label text-muted me-1">{{ site.data.locales[include.lang].post.share }}</span>
|
7
5
|
<span class="share-icons">
|
8
6
|
{% capture title %}{{ page.title }} - {{ site.title }}{% endcapture %}
|
9
7
|
{% assign title = title | uri_escape %}
|
@@ -11,17 +9,27 @@
|
|
11
9
|
|
12
10
|
{% for share in site.data.share.platforms %}
|
13
11
|
{% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
<a
|
13
|
+
href="{{ link }}"
|
14
|
+
data-bs-toggle="tooltip"
|
15
|
+
data-bs-placement="top"
|
16
|
+
title="{{ share.type }}"
|
17
|
+
target="_blank"
|
18
|
+
rel="noopener"
|
19
|
+
aria-label="{{ share.type }}"
|
20
|
+
>
|
21
|
+
<i class="fa-fw {{ share.icon }}"></i>
|
22
|
+
</a>
|
18
23
|
{% endfor %}
|
19
24
|
|
20
|
-
<i
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
<i
|
26
|
+
id="copy-link"
|
27
|
+
class="fa-fw fas fa-link small"
|
28
|
+
data-bs-toggle="tooltip"
|
29
|
+
data-bs-placement="top"
|
30
|
+
title="{{ site.data.locales[include.lang].post.button.share_link.title }}"
|
31
|
+
data-title-succeed="{{ site.data.locales[include.lang].post.button.share_link.succeed }}"
|
32
|
+
>
|
24
33
|
</i>
|
25
|
-
|
26
34
|
</span>
|
27
35
|
</div>
|
data/_includes/read-time.html
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
<!--
|
2
|
-
Calculate the post's reading time, and display the word count in tooltip
|
3
|
-
-->
|
1
|
+
<!-- Calculate the post's reading time, and display the word count in tooltip -->
|
4
2
|
|
5
|
-
{% assign words = include.content | strip_html | number_of_words:
|
3
|
+
{% assign words = include.content | strip_html | number_of_words: 'auto' %}
|
6
4
|
|
7
|
-
<!-- words per minute
|
5
|
+
<!-- words per minute -->
|
8
6
|
|
9
7
|
{% assign wpm = 180 %}
|
10
8
|
{% assign min_time = 1 %}
|
@@ -16,15 +14,24 @@
|
|
16
14
|
{% endunless %}
|
17
15
|
|
18
16
|
{% capture read_prompt %}
|
19
|
-
{{- site.data.locales[
|
17
|
+
{{- site.data.locales[include.lang].post.read_time.prompt -}}
|
20
18
|
{% endcapture %}
|
21
19
|
|
22
20
|
<!-- return element -->
|
23
|
-
<span
|
24
|
-
|
25
|
-
|
21
|
+
<span
|
22
|
+
class="readtime"
|
23
|
+
data-bs-toggle="tooltip"
|
24
|
+
data-bs-placement="bottom"
|
25
|
+
title="{{ words }} {{ site.data.locales[include.lang].post.words }}"
|
26
|
+
>
|
27
|
+
<em>
|
28
|
+
{{- read_time -}}
|
29
|
+
{{ ' ' }}
|
30
|
+
{{- site.data.locales[include.lang].post.read_time.unit -}}
|
31
|
+
</em>
|
26
32
|
{%- if include.prompt -%}
|
27
33
|
{%- assign _prompt_words = read_prompt | number_of_words: 'auto' -%}
|
28
|
-
{%- unless _prompt_words > 1 -%}{{
|
34
|
+
{%- unless _prompt_words > 1 -%}{{ ' ' }}{%- endunless -%}
|
35
|
+
{{ read_prompt }}
|
29
36
|
{%- endif -%}
|
30
37
|
</span>
|
@@ -1,6 +1,4 @@
|
|
1
|
-
<!--
|
2
|
-
Refactor the HTML structure.
|
3
|
-
-->
|
1
|
+
<!-- Refactor the HTML structure -->
|
4
2
|
|
5
3
|
{% assign _content = include.content %}
|
6
4
|
|
@@ -44,7 +42,6 @@
|
|
44
42
|
{% endif %}
|
45
43
|
|
46
44
|
<!-- images -->
|
47
|
-
|
48
45
|
{% assign IMG_TAG = '<img ' %}
|
49
46
|
|
50
47
|
{% if _content contains IMG_TAG %}
|
@@ -94,9 +91,9 @@
|
|
94
91
|
{% continue %}
|
95
92
|
{% endunless %}
|
96
93
|
|
97
|
-
{% assign _pair = _attr |
|
94
|
+
{% assign _pair = _attr | split: '="' %}
|
98
95
|
{% capture _key %}{{ _pair | first }}{% endcapture %}
|
99
|
-
{% capture _value %}{{ _pair | last }}{% endcapture %}
|
96
|
+
{% capture _value %}{{ _pair | last | remove: '"' }}{% endcapture %}
|
100
97
|
|
101
98
|
{% case _key %}
|
102
99
|
{% when 'width' %}
|
@@ -110,7 +107,6 @@
|
|
110
107
|
{% when 'class' %}
|
111
108
|
{% assign _class = _value %}
|
112
109
|
{% endcase %}
|
113
|
-
|
114
110
|
{% endfor %}
|
115
111
|
|
116
112
|
<!-- take out classes -->
|
@@ -162,28 +158,37 @@
|
|
162
158
|
<!-- Bypass the HTML-proofer test -->
|
163
159
|
{% assign _left = _left | append: ' data-proofer-ignore' %}
|
164
160
|
|
165
|
-
|
166
|
-
{% assign _parent = _right | slice: 1, 4 %}
|
167
|
-
|
168
|
-
{% if _parent == '</a>' %}
|
169
|
-
<!-- add class to exist <a> tag -->
|
170
|
-
{% assign _size = _img_content | size | minus: 1 %}
|
171
|
-
{% capture _class %}
|
172
|
-
class="img-link{% unless _lqip %} shimmer{% endunless %}"
|
173
|
-
{% endcapture %}
|
174
|
-
{% assign _img_content = _img_content | slice: 0, _size | append: _class | append: '>' %}
|
175
|
-
|
176
|
-
{% else %}
|
161
|
+
{% if page.layout == 'home' %}
|
177
162
|
<!-- create the image wrapper -->
|
178
163
|
{%- capture _wrapper_start -%}
|
179
|
-
<
|
164
|
+
<div class="preview-img {{ _class | strip }}">
|
180
165
|
{%- endcapture -%}
|
181
166
|
{% assign _img_content = _img_content | append: _wrapper_start %}
|
182
|
-
{% assign _right = _right | prepend: '></
|
167
|
+
{% assign _right = _right | prepend: '></div' %}
|
168
|
+
|
169
|
+
{% else %}
|
170
|
+
<!-- make sure the `<img>` is wrapped by `<a>` -->
|
171
|
+
{% assign _parent = _right | slice: 1, 4 %}
|
172
|
+
|
173
|
+
{% if _parent == '</a>' %}
|
174
|
+
<!-- add class to exist <a> tag -->
|
175
|
+
{% assign _size = _img_content | size | minus: 1 %}
|
176
|
+
{% capture _class %}
|
177
|
+
class="img-link{% unless _lqip %} shimmer{% endunless %}"
|
178
|
+
{% endcapture %}
|
179
|
+
{% assign _img_content = _img_content | slice: 0, _size | append: _class | append: '>' %}
|
180
|
+
{% else %}
|
181
|
+
<!-- create the image wrapper -->
|
182
|
+
{%- capture _wrapper_start -%}
|
183
|
+
<a href="{{ _final_src | default: _src }}" class="popup img-link {{ _class }}">
|
184
|
+
{%- endcapture -%}
|
185
|
+
{% assign _img_content = _img_content | append: _wrapper_start %}
|
186
|
+
{% assign _right = _right | prepend: '></a' %}
|
187
|
+
{% endif %}
|
183
188
|
{% endif %}
|
184
189
|
|
185
190
|
<!-- combine -->
|
186
|
-
{% assign _img_content = _img_content | append: IMG_TAG | append: _left | append: _right %}
|
191
|
+
{% assign _img_content = _img_content | append: debug | append: IMG_TAG | append: _left | append: _right %}
|
187
192
|
|
188
193
|
{% endfor %}
|
189
194
|
|
@@ -210,11 +215,11 @@
|
|
210
215
|
|
211
216
|
{% if _left contains 'file="' %}
|
212
217
|
{% assign _label_text = _left | split: 'file="' | last | split: '"' | first %}
|
213
|
-
{% assign _label_icon = 'far fa-file-code' %}
|
218
|
+
{% assign _label_icon = 'far fa-file-code fa-fw' %}
|
214
219
|
{% else %}
|
215
220
|
{% assign _lang = _left | split: 'language-' | last | split: ' ' | first %}
|
216
221
|
{% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %}
|
217
|
-
{% assign _label_icon = 'fas fa-code small' %}
|
222
|
+
{% assign _label_icon = 'fas fa-code fa-fw small' %}
|
218
223
|
{% endif %}
|
219
224
|
|
220
225
|
{% capture _label %}
|
@@ -225,7 +230,7 @@
|
|
225
230
|
| append: '<div class="code-header">'
|
226
231
|
| append: _label
|
227
232
|
| append: '<button aria-label="copy" data-title-succeed="'
|
228
|
-
| append: site.data.locales[
|
233
|
+
| append: site.data.locales[include.lang].post.button.copy_code.succeed
|
229
234
|
| append: '"><i class="far fa-clipboard"></i></button></div>'
|
230
235
|
| append: '<div class="highlight"><code>'
|
231
236
|
%}
|
@@ -262,7 +267,7 @@
|
|
262
267
|
|
263
268
|
{% assign left = snippet | split: mark_end | first %}
|
264
269
|
{% assign right = snippet | slice: left.size, snippet.size %}
|
265
|
-
{% assign left = left | replace_first: '">', '"><span class="
|
270
|
+
{% assign left = left | replace_first: '">', '"><span class="me-2">' | append: '</span>' %}
|
266
271
|
|
267
272
|
{% assign _new_content = _new_content | append: mark_start
|
268
273
|
| append: left | append: anchor | append: right
|
@@ -278,5 +283,4 @@
|
|
278
283
|
{% assign _content = _heading_content %}
|
279
284
|
|
280
285
|
<!-- return -->
|
281
|
-
|
282
286
|
{{ _content }}
|
@@ -1,20 +1,20 @@
|
|
1
1
|
<!--
|
2
|
-
|
3
|
-
|
2
|
+
Recommend the other 3 posts according to the tags and categories of the current post,
|
3
|
+
if the number is not enough, use the other latest posts to supplement.
|
4
4
|
-->
|
5
5
|
|
6
|
-
<!-- The total size of related posts
|
6
|
+
<!-- The total size of related posts -->
|
7
7
|
{% assign TOTAL_SIZE = 3 %}
|
8
8
|
|
9
|
-
<!-- An random integer that bigger than 0
|
9
|
+
<!-- An random integer that bigger than 0 -->
|
10
10
|
{% assign TAG_SCORE = 1 %}
|
11
11
|
|
12
|
-
<!-- Equals to TAG_SCORE / {max_categories_hierarchy}
|
12
|
+
<!-- Equals to TAG_SCORE / {max_categories_hierarchy} -->
|
13
13
|
{% assign CATEGORY_SCORE = 0.5 %}
|
14
14
|
|
15
|
-
{% assign SEPARATOR =
|
15
|
+
{% assign SEPARATOR = ':' %}
|
16
16
|
|
17
|
-
{% assign score_list =
|
17
|
+
{% assign score_list = '' | split: '' %}
|
18
18
|
{% assign last_index = site.posts.size | minus: 1 %}
|
19
19
|
|
20
20
|
{% for i in (0..last_index) %}
|
@@ -42,11 +42,9 @@
|
|
42
42
|
{% capture score_item %}{{ score }}{{ SEPARATOR }}{{ i }}{% endcapture %}
|
43
43
|
{% assign score_list = score_list | push: score_item %}
|
44
44
|
{% endif %}
|
45
|
-
|
46
45
|
{% endfor %}
|
47
46
|
|
48
|
-
|
49
|
-
{% assign index_list = "" | split: "" %}
|
47
|
+
{% assign index_list = '' | split: '' %}
|
50
48
|
|
51
49
|
{% if score_list.size > 0 %}
|
52
50
|
{% assign score_list = score_list | sort | reverse %}
|
@@ -56,13 +54,13 @@
|
|
56
54
|
{% endfor %}
|
57
55
|
{% endif %}
|
58
56
|
|
59
|
-
<!-- Fill with the other newlest posts
|
57
|
+
<!-- Fill with the other newlest posts -->
|
60
58
|
{% assign less = TOTAL_SIZE | minus: index_list.size %}
|
61
59
|
|
62
60
|
{% if less > 0 %}
|
63
61
|
{% for i in (0..last_index) %}
|
64
62
|
{% assign post = site.posts[i] %}
|
65
|
-
{% if post.url != page.url
|
63
|
+
{% if post.url != page.url %}
|
66
64
|
{% capture cur_index %}{{ i }}{% endcapture %}
|
67
65
|
{% unless index_list contains cur_index %}
|
68
66
|
{% assign index_list = index_list | push: cur_index %}
|
@@ -77,27 +75,30 @@
|
|
77
75
|
|
78
76
|
{% if index_list.size > 0 %}
|
79
77
|
<div id="related-posts" class="mb-2 mb-sm-4">
|
80
|
-
<h3 class="pt-2 mb-4
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
{%
|
85
|
-
|
86
|
-
|
87
|
-
<
|
88
|
-
<
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
<
|
93
|
-
|
94
|
-
|
95
|
-
|
78
|
+
<h3 class="pt-2 mb-4 ms-1" data-toc-skip>
|
79
|
+
{{ site.data.locales[include.lang].post.relate_posts }}
|
80
|
+
</h3>
|
81
|
+
<div class="row row-cols-1 row-cols-md-2 row-cols-xl-3 g-4 mb-4">
|
82
|
+
{% for entry in index_list %}
|
83
|
+
{% assign index = entry | plus: 0 %}
|
84
|
+
{% assign post = site.posts[index] %}
|
85
|
+
<div class="col">
|
86
|
+
<a href="{{ post.url | relative_url }}" class="card post-preview h-100">
|
87
|
+
<div class="card-body">
|
88
|
+
{% include datetime.html date=post.date class="small" lang=include.lang %}
|
89
|
+
<h4 class="pt-0 my-2" data-toc-skip>{{ post.title }}</h4>
|
90
|
+
<div class="text-muted small">
|
91
|
+
<p>
|
92
|
+
{% include no-linenos.html content=post.content %}
|
93
|
+
{{ content | markdownify | strip_html | truncate: 200 | escape }}
|
94
|
+
</p>
|
95
|
+
</div>
|
96
96
|
</div>
|
97
|
-
</
|
98
|
-
</
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
</div>
|
97
|
+
</a>
|
98
|
+
</div>
|
99
|
+
{% endfor %}
|
100
|
+
</div>
|
101
|
+
<!-- .card-deck -->
|
102
|
+
</div>
|
103
|
+
<!-- #related-posts -->
|
103
104
|
{% endif %}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
-->
|
5
5
|
|
6
6
|
{% capture result_elem %}
|
7
|
-
<div class="
|
7
|
+
<div class="px-1 px-sm-2 px-lg-4 px-xl-0">
|
8
8
|
<a href="{url}">{title}</a>
|
9
9
|
<div class="post-meta d-flex flex-column flex-sm-row text-muted mt-1 mb-1">
|
10
10
|
{categories}
|
@@ -14,33 +14,32 @@
|
|
14
14
|
</div>
|
15
15
|
{% endcapture %}
|
16
16
|
|
17
|
-
{% capture not_found %}<p class="mt-5">{{ site.data.locales[
|
18
|
-
|
19
|
-
<script src="{{ site.data.assets[origin].search.js | relative_url }}"></script>
|
17
|
+
{% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
|
20
18
|
|
21
19
|
<script>
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
if (
|
31
|
-
|
32
|
-
|
33
|
-
|
20
|
+
/* Note: dependent library will be loaded in `js-selector.html` */
|
21
|
+
SimpleJekyllSearch({
|
22
|
+
searchInput: document.getElementById('search-input'),
|
23
|
+
resultsContainer: document.getElementById('search-results'),
|
24
|
+
json: '{{ '/assets/js/data/search.json' | relative_url }}',
|
25
|
+
searchResultTemplate: '{{ result_elem | strip_newlines }}',
|
26
|
+
noResultsText: '{{ not_found }}',
|
27
|
+
templateMiddleware: function(prop, value, template) {
|
28
|
+
if (prop === 'categories') {
|
29
|
+
if (value === '') {
|
30
|
+
return `${value}`;
|
31
|
+
} else {
|
32
|
+
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
|
33
|
+
}
|
34
34
|
}
|
35
|
-
}
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
if (prop === 'tags') {
|
37
|
+
if (value === '') {
|
38
|
+
return `${value}`;
|
39
|
+
} else {
|
40
|
+
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
|
41
|
+
}
|
42
42
|
}
|
43
43
|
}
|
44
|
-
}
|
45
|
-
});
|
44
|
+
});
|
46
45
|
</script>
|
@@ -1,8 +1,7 @@
|
|
1
|
-
<!--
|
2
|
-
|
3
|
-
-->
|
1
|
+
<!-- The Search results -->
|
2
|
+
|
4
3
|
<div id="search-result-wrapper" class="d-flex justify-content-center unloaded">
|
5
|
-
<div class="col-
|
4
|
+
<div class="col-11 post-content">
|
6
5
|
<div id="search-hints">
|
7
6
|
{% include trending-tags.html %}
|
8
7
|
</div>
|