jekyll-theme-chirpy 5.0.1 → 5.2.0

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -7
  3. data/_config.yml +38 -13
  4. data/_data/assets/cross_origin.yml +62 -0
  5. data/_data/assets/self_host.yml +51 -0
  6. data/_data/authors.yml +17 -0
  7. data/_data/locales/en.yml +12 -20
  8. data/_data/locales/es-ES.yml +79 -0
  9. data/_data/locales/fr-FR.yml +79 -0
  10. data/_data/locales/id-ID.yml +4 -16
  11. data/_data/locales/ko-KR.yml +4 -16
  12. data/_data/locales/my-MM.yml +79 -0
  13. data/_data/locales/pt-BR.yml +79 -0
  14. data/_data/locales/ru-RU.yml +79 -0
  15. data/_data/locales/uk-UA.yml +79 -0
  16. data/_data/locales/vi-VN.yml +77 -0
  17. data/_data/locales/zh-CN.yml +4 -16
  18. data/_data/share.yml +1 -1
  19. data/_includes/assets-origin.html +12 -0
  20. data/_includes/comments/giscus.html +56 -0
  21. data/_includes/comments/utterances.html +2 -2
  22. data/_includes/datetime.html +21 -0
  23. data/_includes/footer.html +5 -6
  24. data/_includes/head.html +62 -21
  25. data/_includes/js-selector.html +47 -11
  26. data/_includes/jsdelivr-combine.html +32 -0
  27. data/_includes/mermaid.html +3 -3
  28. data/_includes/mode-toggle.html +4 -3
  29. data/_includes/post-nav.html +4 -4
  30. data/_includes/post-paginator.html +2 -2
  31. data/_includes/post-sharing.html +3 -2
  32. data/_includes/refactor-content.html +62 -10
  33. data/_includes/related-posts.html +1 -4
  34. data/_includes/search-loader.html +1 -1
  35. data/_includes/sidebar.html +8 -8
  36. data/_includes/toc.html +1 -1
  37. data/_includes/topbar.html +3 -4
  38. data/_layouts/archives.html +15 -6
  39. data/_layouts/categories.html +25 -4
  40. data/_layouts/category.html +1 -3
  41. data/_layouts/default.html +23 -8
  42. data/_layouts/home.html +4 -8
  43. data/_layouts/page.html +11 -11
  44. data/_layouts/post.html +52 -44
  45. data/_layouts/tag.html +1 -3
  46. data/_layouts/tags.html +3 -1
  47. data/_sass/addon/commons.scss +241 -305
  48. data/_sass/addon/module.scss +33 -17
  49. data/_sass/addon/syntax.scss +38 -25
  50. data/_sass/addon/variables.scss +9 -9
  51. data/_sass/colors/dark-syntax.scss +1 -0
  52. data/_sass/colors/dark-typography.scss +10 -1
  53. data/_sass/colors/light-syntax.scss +6 -1
  54. data/_sass/colors/light-typography.scss +14 -1
  55. data/_sass/jekyll-theme-chirpy.scss +1 -1
  56. data/_sass/layout/post.scss +4 -7
  57. data/_tabs/about.md +2 -2
  58. data/assets/404.html +0 -17
  59. data/assets/js/data/search.json +6 -5
  60. data/assets/js/data/swcache.js +11 -20
  61. data/assets/js/dist/categories.min.js +2 -2
  62. data/assets/js/dist/commons.min.js +2 -2
  63. data/assets/js/dist/home.min.js +2 -2
  64. data/assets/js/dist/misc.min.js +6 -0
  65. data/assets/js/dist/page.min.js +2 -2
  66. data/assets/js/dist/post.min.js +2 -2
  67. data/assets/js/dist/pvreport.min.js +2 -2
  68. data/assets/js/pwa/app.js +55 -4
  69. data/assets/js/pwa/sw.js +42 -40
  70. data/assets/js/pwa/unregister.js +12 -0
  71. metadata +20 -7
  72. data/_includes/css-selector.html +0 -15
  73. data/_includes/no-zero-date.html +0 -13
  74. data/_includes/timeago.html +0 -26
@@ -7,14 +7,43 @@
7
7
  {% if page.layout == 'post' %}
8
8
  {% if site.google_analytics.pv.proxy_endpoint or site.google_analytics.pv.cache_path %}
9
9
  <!-- pv-report needs countup.js -->
10
- <script async src="https://cdn.jsdelivr.net/npm/countup.js@1.9.3/dist/countUp.min.js"></script>
10
+ <script async src="{{ site.data.assets[origin].countup.js | relative_url }}"></script>
11
11
  <script defer src="{{ '/assets/js/dist/pvreport.min.js' | relative_url }}"></script>
12
12
  {% endif %}
13
13
  {% endif %}
14
14
 
15
15
  {% if page.layout == 'post' or page.layout == 'page' %}
16
- <!-- image lazy-loading & popup -->
17
- <script src="https://cdn.jsdelivr.net/combine/npm/lozad/dist/lozad.min.js,npm/magnific-popup@1/dist/jquery.magnific-popup.min.js,npm/clipboard@2/dist/clipboard.min.js"></script>
16
+ <!-- image lazy-loading & popup & clipboard -->
17
+ {% assign _urls = site.data.assets[origin].magnific-popup.js
18
+ | append: ',' | append: site.data.assets[origin].lozad.js
19
+ | append: ',' | append: site.data.assets[origin].clipboard.js
20
+ %}
21
+
22
+ {% include jsdelivr-combine.html urls=_urls %}
23
+
24
+ {% endif %}
25
+
26
+ {% if page.layout == 'home'
27
+ or page.layout == 'post'
28
+ or page.layout == 'archives'
29
+ or page.layout == 'category'
30
+ or page.layout == 'tag' %}
31
+
32
+ {% if site.prefer_datetime_locale %}
33
+ {% assign locale = site.prefer_datetime_locale | downcase %}
34
+ {% else %}
35
+ {% assign locale = site.lang | split: '-' | first %}
36
+ {% endif %}
37
+
38
+ {% assign _urls = site.data.assets[origin].dayjs.js.common
39
+ | append: ',' | append: site.data.assets[origin].dayjs.js.locale
40
+ | replace: ':LOCALE', locale
41
+ | append: ',' | append: site.data.assets[origin].dayjs.js.relativeTime
42
+ | append: ',' | append: site.data.assets[origin].dayjs.js.localizedFormat
43
+ %}
44
+
45
+ {% include jsdelivr-combine.html urls=_urls %}
46
+
18
47
  {% endif %}
19
48
 
20
49
  {% if page.layout == 'home'
@@ -22,12 +51,16 @@
22
51
  or page.layout == 'post'
23
52
  or page.layout == 'page' %}
24
53
  {% assign type = page.layout %}
54
+ {% elsif page.layout == 'archives'
55
+ or page.layout == 'category'
56
+ or page.layout == 'tag' %}
57
+ {% assign type = "misc" %}
25
58
  {% else %}
26
59
  {% assign type = "commons" %}
27
60
  {% endif %}
28
61
 
29
- {% assign js = type | prepend: '/assets/js/dist/' | append: '.min.js' %}
30
- <script defer src="{{ js | relative_url }}"></script>
62
+ {% capture script %}/assets/js/dist/{{ type }}.min.js{% endcapture %}
63
+ <script defer src="{{ script | relative_url }}"></script>
31
64
 
32
65
  {% if page.math %}
33
66
  <!-- MathJax -->
@@ -46,22 +79,25 @@
46
79
  }
47
80
  };
48
81
  </script>
49
- <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
50
- <script type="text/javascript" id="MathJax-script" async
51
- src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
82
+ <script src="{{ site.data.assets[origin].polyfill.js | relative_url }}"></script>
83
+ <script id="MathJax-script" async src="{{ site.data.assets[origin].mathjax.js | relative_url }}">
52
84
  </script>
53
85
  {% endif %}
54
86
 
55
87
  <!-- commons -->
56
88
 
57
- <script src="https://cdn.jsdelivr.net/combine/npm/popper.js@1.16.1,npm/bootstrap@4/dist/js/bootstrap.min.js"></script>
89
+ <script src="{{ site.data.assets[origin].bootstrap.js | relative_url }}"></script>
58
90
 
59
91
  {% if jekyll.environment == 'production' %}
60
92
  <!-- PWA -->
61
- <script defer src="{{ '/app.js' | relative_url }}"></script>
93
+ {% if site.pwa.enabled %}
94
+ <script defer src="{{ '/app.js' | relative_url }}"></script>
95
+ {% else %}
96
+ <script defer src="{{ '/unregister.js' | relative_url }}"></script>
97
+ {% endif %}
62
98
 
63
99
  <!-- GA -->
64
- {% if site.google_analytics.id %}
100
+ {% if site.google_analytics.id != empty and site.google_analytics.id %}
65
101
  {% include google-analytics.html %}
66
102
  {% endif %}
67
103
 
@@ -0,0 +1,32 @@
1
+ {% assign urls = include.urls | split: ',' %}
2
+
3
+ {% assign combined_urls = nil %}
4
+
5
+ {% assign domain = 'https://cdn.jsdelivr.net/' %}
6
+
7
+ {% for url in urls %}
8
+
9
+ {% if url contains domain %}
10
+ {% assign url_snippet = url | slice: domain.size, url.size %}
11
+
12
+ {% if combined_urls %}
13
+ {% assign combined_urls = combined_urls | append: ',' | append: url_snippet %}
14
+ {% else %}
15
+ {% assign combined_urls = domain | append: 'combine/' | append: url_snippet %}
16
+ {% endif %}
17
+
18
+ {% elsif url contains '//' %}
19
+
20
+ <script src="{{ url }}"></script>
21
+
22
+ {% else %}
23
+
24
+ <script src="{{ url | relative_url }}"></script>
25
+
26
+ {% endif %}
27
+
28
+ {% endfor %}
29
+
30
+ {% if combined_urls %}
31
+ <script src="{{ combined_urls }}"></script>
32
+ {% endif %}
@@ -2,7 +2,7 @@
2
2
  mermaid-js loader
3
3
  -->
4
4
 
5
- <script src="https://cdn.jsdelivr.net/npm/mermaid@8/dist/mermaid.min.js"></script>
5
+ <script src="{{ site.data.assets[origin].mermaid.js | relative_url }}"></script>
6
6
 
7
7
  <script>
8
8
  $(function() {
@@ -33,8 +33,8 @@
33
33
 
34
34
  let initTheme = "default";
35
35
 
36
- if ($("html[mode=dark]").length > 0
37
- || ($("html[mode]").length == 0
36
+ if ($("html[data-mode=dark]").length > 0
37
+ || ($("html[data-mode]").length == 0
38
38
  && window.matchMedia("(prefers-color-scheme: dark)").matches ) ) {
39
39
  initTheme = "dark";
40
40
  }
@@ -5,6 +5,7 @@
5
5
  <script type="text/javascript">
6
6
  class ModeToggle {
7
7
  static get MODE_KEY() { return "mode"; }
8
+ static get MODE_ATTR() { return "data-mode"; }
8
9
  static get DARK_MODE() { return "dark"; }
9
10
  static get LIGHT_MODE() { return "light"; }
10
11
  static get ID() { return "mode-toggle"; }
@@ -70,17 +71,17 @@
70
71
  }
71
72
 
72
73
  setDark() {
73
- $('html').attr(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
74
+ $('html').attr(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
74
75
  sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
75
76
  }
76
77
 
77
78
  setLight() {
78
- $('html').attr(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
79
+ $('html').attr(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
79
80
  sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
80
81
  }
81
82
 
82
83
  clearMode() {
83
- $('html').removeAttr(ModeToggle.MODE_KEY);
84
+ $('html').removeAttr(ModeToggle.MODE_ATTR);
84
85
  sessionStorage.removeItem(ModeToggle.MODE_KEY);
85
86
  }
86
87
 
@@ -9,10 +9,10 @@
9
9
  <p>{{ page.previous.title }}</p>
10
10
  </a>
11
11
  {% else %}
12
- <span class="btn btn-outline-primary disabled"
12
+ <div class="btn btn-outline-primary disabled"
13
13
  prompt="{{ site.data.locales[lang].post.button.previous }}">
14
14
  <p>-</p>
15
- </span>
15
+ </div>
16
16
  {% endif %}
17
17
 
18
18
  {% if page.next.url %}
@@ -21,10 +21,10 @@
21
21
  <p>{{ page.next.title }}</p>
22
22
  </a>
23
23
  {% else %}
24
- <span class="btn btn-outline-primary disabled"
24
+ <div class="btn btn-outline-primary disabled"
25
25
  prompt="{{ site.data.locales[lang].post.button.next }}">
26
26
  <p>-</p>
27
- </span>
27
+ </div>
28
28
  {% endif %}
29
29
 
30
30
  </div>
@@ -2,7 +2,7 @@
2
2
  The paginator for post list on HomgPage.
3
3
  -->
4
4
 
5
- <ul class="pagination align-items-center mt-4 mb-0 pl-lg-2">
5
+ <ul class="pagination align-items-center mt-4 mb-5 pl-lg-2">
6
6
  <!-- left arrow -->
7
7
  {% if paginator.previous_page %}
8
8
  {% assign prev_url = paginator.previous_page_path | relative_url %}
@@ -47,7 +47,7 @@
47
47
  {% if show %}
48
48
  <!-- show number -->
49
49
  <li class="page-item {% if i == paginator.page %} active{% endif %}">
50
- <a class="page-link btn-box-shadow" href="{{ site.baseurl }}/{% if i > 1%}page{{ i }}/{% endif %}">{{ i }}</a>
50
+ <a class="page-link btn-box-shadow" href="{% if i > 1 %}{{ site.paginate_path | replace: ':num', i | relative_url }}{% else %}{{ '/' | relative_url }}{% endif %}">{{ i }}</a>
51
51
  </li>
52
52
  {% else %}
53
53
  <!-- hide number -->
@@ -6,7 +6,8 @@
6
6
  <span class="share-label text-muted mr-1">{{ site.data.locales[lang].post.share }}</span>
7
7
  <span class="share-icons">
8
8
  {% capture title %}{{ page.title }} - {{ site.title }}{% endcapture %}
9
- {% assign url = page.url | absolute_url %}
9
+ {% assign title = title | url_encode %}
10
+ {% assign url = page.url | absolute_url | url_encode %}
10
11
 
11
12
  {% for share in site.data.share.platforms %}
12
13
  {% assign link = share.link | replace: 'TITLE', title | replace: 'URL', url %}
@@ -19,7 +20,7 @@
19
20
  <i id="copy-link" class="fa-fw fas fa-link small"
20
21
  data-toggle="tooltip" data-placement="top"
21
22
  title="{{ site.data.locales[lang].post.button.share_link.title }}"
22
- title-succeed="{{ site.data.locales[lang].post.button.share_link.succeed }}">
23
+ data-title-succeed="{{ site.data.locales[lang].post.button.share_link.succeed }}">
23
24
  </i>
24
25
 
25
26
  </span>
@@ -9,10 +9,11 @@
9
9
  we suround the markdown table with `<div class="table-wrapper">` and `</div>`
10
10
  -->
11
11
 
12
- {% if _content contains '<table>' %}
12
+ {% if _content contains '<table' %}
13
13
  {% assign _content = _content
14
- | replace: '<table>', '<div class="table-wrapper"><table>'
14
+ | replace: '<table', '<div class="table-wrapper"><table'
15
15
  | replace: '</table>', '</table></div>'
16
+ | replace: '<code><div class="table-wrapper">', '<code>'
16
17
  | replace: '</table></div></code>', '</table></code>'
17
18
  %}
18
19
  {% endif %}
@@ -91,7 +92,11 @@
91
92
 
92
93
  <!-- Add CDN URL -->
93
94
  {% if site.img_cdn %}
94
- {% assign _src_prefix = site.img_cdn %}
95
+ {% if site.img_cdn contains '//' %}
96
+ {% assign _src_prefix = site.img_cdn %}
97
+ {% else %}
98
+ {% assign _src_prefix = site.img_cdn | relative_url %}
99
+ {% endif %}
95
100
  {% else %}
96
101
  {% assign _src_prefix = site.baseurl %}
97
102
  {% endif %}
@@ -165,13 +170,13 @@
165
170
  {% endif %}
166
171
 
167
172
  {% capture _label %}
168
- <span label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
173
+ <span data-label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
169
174
  {% endcapture %}
170
175
 
171
176
  {% assign _new_content = _new_content | append: _snippet
172
177
  | append: '<div class="code-header">'
173
178
  | append: _label
174
- | append: '<button aria-label="copy" title-succeed="'
179
+ | append: '<button aria-label="copy" data-title-succeed="'
175
180
  | append: site.data.locales[lang].post.button.copy_code.succeed
176
181
  | append: '"><i class="far fa-clipboard"></i></button></div>'
177
182
  | append: '<div class="highlight"><code>'
@@ -205,15 +210,14 @@
205
210
  {% endif %}
206
211
 
207
212
  {% assign id = snippet | split: '"' | first %}
208
- {% capture anchor %}<a href="#{{ id }}" class="anchor"><i class="fas fa-hashtag"></i></a>{% endcapture %}
213
+ {% capture anchor %}<a href="#{{ id }}" class="anchor text-muted"><i class="fas fa-hashtag"></i></a>{% endcapture %}
209
214
 
210
215
  {% assign left = snippet | split: mark_end | first %}
211
- {% assign _start_index = left | size %}
212
- {% assign _end_index = snippet | size | minus: 1 %}
213
- {% assign right = snippet | slice: _start_index, _end_index %}
216
+ {% assign right = snippet | slice: left.size, snippet.size %}
217
+ {% assign left = left | replace: '">', '"><span class="mr-2">' | append: '</span>' %}
214
218
 
215
219
  {% assign _new_content = _new_content | append: mark_start
216
- | append: left | append: anchor | append: mark_end | append: right
220
+ | append: left | append: anchor | append: right
217
221
  %}
218
222
 
219
223
  {% endfor %}
@@ -225,6 +229,54 @@
225
229
 
226
230
  {% assign _content = _heading_content %}
227
231
 
232
+ <!-- Wrap prompt element of blockquote with the <div> tag -->
233
+
234
+ {% assign blockquote_start = '<blockquote class=' %}
235
+ {% assign blockquote_end = '</blockquote>' %}
236
+ {% assign cls_prefix = 'prompt-' %}
237
+
238
+ {% if _content contains blockquote_start %}
239
+
240
+ {% assign _prompt_content = nil %}
241
+ {% assign _prompt_snippets = _content | split: blockquote_start %}
242
+
243
+ {% for _snippet in _prompt_snippets %}
244
+
245
+ {% if forloop.first %}
246
+ {% assign _prompt_content = _snippet %}
247
+ {% continue %}
248
+ {% endif %}
249
+
250
+ {% assign left = _snippet | split: blockquote_end | first %}
251
+ {% assign right = _snippet | slice: left.size, _snippet.size %}
252
+
253
+ {% assign cls_str = left | split: '>' | first %}
254
+ {% assign cls_array = cls_str | remove: '"' | split: ' ' %}
255
+ {% assign is_prompt = false %}
256
+
257
+ {% for cls in cls_array %}
258
+ {% if cls contains cls_prefix %}
259
+ {% assign is_prompt = true %}
260
+ {% break %}
261
+ {% endif %}
262
+ {% endfor %}
263
+
264
+ {% unless is_prompt %}
265
+ {% assign _prompt_content = _prompt_content | append: blockquote_start | append: _snippet %}
266
+ {% continue %}
267
+ {% endunless %}
268
+
269
+ {% assign left = left | slice: cls_str.size, left.size %}
270
+ {% assign left = cls_str | append: '><div' | append: left | append: '</div>' %}
271
+
272
+ {% assign _prompt_content = _prompt_content | append: blockquote_start | append: left | append: right %}
273
+
274
+ {% endfor %}
275
+
276
+ {% assign _content = _prompt_content %}
277
+
278
+ {% endif %}
279
+
228
280
  <!-- return -->
229
281
 
230
282
  {{ _content }}
@@ -60,7 +60,6 @@
60
60
  {% assign less = TOTAL_SIZE | minus: index_list.size %}
61
61
 
62
62
  {% if less > 0 %}
63
-
64
63
  {% for i in (0..last_index) %}
65
64
  {% assign post = site.posts[i] %}
66
65
  {% if post.url != page.url %}
@@ -74,10 +73,8 @@
74
73
  {% endunless %}
75
74
  {% endif %}
76
75
  {% endfor %}
77
-
78
76
  {% endif %}
79
77
 
80
-
81
78
  {% if index_list.size > 0 %}
82
79
  <div id="related-posts" class="mt-5 mb-2 mb-sm-4">
83
80
  <h3 class="pt-2 mt-1 mb-4 ml-1"
@@ -89,7 +86,7 @@
89
86
  <div class="card">
90
87
  <a href="{{ post.url | relative_url }}">
91
88
  <div class="card-body">
92
- {% include timeago.html date=post.date class="small" %}
89
+ {% include datetime.html date=post.date class="small" %}
93
90
  <h3 class="pt-0 mt-1 mb-3" data-toc-skip>{{ post.title }}</h3>
94
91
  <div class="text-muted small">
95
92
  <p>
@@ -16,7 +16,7 @@
16
16
 
17
17
  {% capture not_found %}<p class="mt-5">{{ site.data.locales[lang].search.no_results }}</p>{% endcapture %}
18
18
 
19
- <script src="https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js"></script>
19
+ <script src="{{ site.data.assets[origin].search.js | relative_url }}"></script>
20
20
 
21
21
  <script>
22
22
  SimpleJekyllSearch({
@@ -2,21 +2,21 @@
2
2
  The Side Bar
3
3
  -->
4
4
 
5
- <div id="sidebar" class="d-flex flex-column align-items-end" lang="{{lang}}">
5
+ <div id="sidebar" class="d-flex flex-column align-items-end">
6
6
  <div class="profile-wrapper text-center">
7
7
  <div id="avatar">
8
- <a href="{{ '/' | relative_url }}" alt="avatar" class="mx-auto">
9
- {% if site.avatar != '' and site.avatar %}
8
+ <a href="{{ '/' | relative_url }}" class="mx-auto">
9
+ {% if site.avatar != empty and site.avatar %}
10
10
  {% capture avatar_url %}
11
- {%- if site.avatar contains '://' -%}
11
+ {% if site.avatar contains '://' %}
12
12
  {{ site.avatar }}
13
- {%- elsif site.img_cdn != '' and site.img_cdn -%}
13
+ {% elsif site.img_cdn != empty and site.img_cdn %}
14
14
  {{ site.avatar | prepend: site.img_cdn }}
15
- {%- else -%}
15
+ {% else %}
16
16
  {{ site.avatar | relative_url }}
17
- {%- endif -%}
17
+ {% endif %}
18
18
  {% endcapture %}
19
- <img src="{{ avatar_url }}" alt="avatar" onerror="this.style.display='none'">
19
+ <img src="{{ avatar_url | strip }}" alt="avatar" onerror="this.style.display='none'">
20
20
  {% endif %}
21
21
  </a>
22
22
  </div>
data/_includes/toc.html CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  {% if enable_toc %}
9
9
  <!-- BS-toc.js will be loaded at medium priority -->
10
- <script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@1.0.1/dist/bootstrap-toc.min.js"></script>
10
+ <script src="{{ site.data.assets[origin].bootstrap-toc.js | relative_url }}"></script>
11
11
 
12
12
  <div id="toc-wrapper" class="pl-0 pr-4 mb-5">
13
13
  <div class="panel-heading pl-3 pt-2 mb-2">{{- site.data.locales[lang].panel.toc -}}</div>
@@ -2,8 +2,8 @@
2
2
  The Top Bar
3
3
  -->
4
4
 
5
- <div id="topbar-wrapper" class="row justify-content-center topbar-down">
6
- <div id="topbar" class="col-11 d-flex h-100 align-items-center justify-content-between">
5
+ <div id="topbar-wrapper">
6
+ <div id="topbar" class="container d-flex align-items-center justify-content-between h-100 pl-3 pr-3 pl-md-4 pr-md-4">
7
7
  <span id="breadcrumb">
8
8
 
9
9
  {% assign paths = page.url | split: '/' %}
@@ -50,7 +50,7 @@
50
50
  <div id="topbar-title">
51
51
  {% if page.layout == 'home' %}
52
52
  {{- site.data.locales[lang].title | default: site.title -}}
53
- {% elsif page.collection == 'tabs' or page.dynamic_title %}
53
+ {% elsif page.collection == 'tabs' or page.layout == 'page' %}
54
54
  {%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%}
55
55
  {{- site.data.locales[lang].tabs[tab_key] | default: page.title -}}
56
56
  {% else %}
@@ -63,7 +63,6 @@
63
63
  <i class="fas fa-search fa-fw"></i>
64
64
  <input class="form-control" id="search-input" type="search"
65
65
  aria-label="search" autocomplete="off" placeholder="{{ site.data.locales[lang].search.hint | capitalize }}...">
66
- <i class="fa fa-times-circle fa-fw" id="search-cleaner"></i>
67
66
  </span>
68
67
  <span id="search-cancel" >{{ site.data.locales[lang].search.cancel }}</span>
69
68
  </div>
@@ -5,8 +5,15 @@ layout: page
5
5
 
6
6
  {% include lang.html %}
7
7
 
8
- <div id="archives" class="pl-xl-2">
8
+ {% if site.prefer_datetime_locale == 'en' or lang == 'en' %}
9
+ {% assign df_strftime_m = '%b' %}
10
+ {% assign df_dayjs_m = 'MMM' %}
11
+ {% else %}
12
+ {% assign df_strftime_m = '/ %m' %}
13
+ {% assign df_dayjs_m = '/ MM' %}
14
+ {% endif %}
9
15
 
16
+ <div id="archives" class="pl-xl-2">
10
17
  {% for post in site.posts %}
11
18
  {% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
12
19
  {% capture pre_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
@@ -18,11 +25,13 @@ layout: page
18
25
  {% endif %}
19
26
  <li>
20
27
  <div>
21
- {% capture this_day %}{{ post.date | date: "%d" }}{% endcapture %}
22
- {% capture _mth_df %}{{ site.data.locales[lang].date_format.post.archive_month }}{% endcapture %}
23
- {% capture this_month %}{{ post.date | date: _mth_df }}{% endcapture %}
24
- <span class="date day">{{ this_day }}</span>
25
- <span class="date month small text-muted">{% include no-zero-date.html date_str=this_month %}</span>
28
+ {% assign ts = post.date | date: '%s' %}
29
+ <span class="date day" data-ts="{{ ts }}" data-df="DD">
30
+ {{ post.date | date: "%d" }}
31
+ </span>
32
+ <span class="date month small text-muted" data-ts="{{ ts }}" data-df="{{ df_dayjs_m }}">
33
+ {{ post.date | date: df_strftime_m }}
34
+ </span>
26
35
  <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
27
36
  </div>
28
37
  </li>
@@ -47,10 +47,24 @@ layout: page
47
47
  <span class="text-muted small font-weight-light">
48
48
  {% if sub_categories_size > 0 %}
49
49
  {{ sub_categories_size }}
50
- {{ site.data.locales[lang].categories.category_measure }},
50
+ {% if sub_categories_size > 1 %}
51
+ {{ site.data.locales[lang].categories.category_measure.plural
52
+ | default: site.data.locales[lang].categories.category_measure }}
53
+ {% else %}
54
+ {{ site.data.locales[lang].categories.category_measure.singular
55
+ | default: site.data.locales[lang].categories.category_measure }}
56
+ {% endif %},
57
+ {% endif %}
58
+
59
+ {{ top_posts_size }}
60
+
61
+ {% if top_posts_size > 1 %}
62
+ {{ site.data.locales[lang].categories.post_measure.plural
63
+ | default: site.data.locales[lang].categories.post_measure }}
64
+ {% else %}
65
+ {{ site.data.locales[lang].categories.post_measure.singular
66
+ | default: site.data.locales[lang].categories.post_measure }}
51
67
  {% endif %}
52
- {{ top_posts_size }}
53
- {{ site.data.locales[lang].categories.post_measure }}
54
68
  </span>
55
69
  </span>
56
70
 
@@ -83,7 +97,14 @@ layout: page
83
97
  {% assign posts_size = site.categories[sub_category] | size %}
84
98
  <span class="text-muted small font-weight-light">
85
99
  {{ posts_size }}
86
- {{ site.data.locales[lang].categories.post_measure }}
100
+
101
+ {% if posts_size > 1 %}
102
+ {{ site.data.locales[lang].categories.post_measure.plural
103
+ | default: site.data.locales[lang].categories.post_measure }}
104
+ {% else %}
105
+ {{ site.data.locales[lang].categories.post_measure.singular
106
+ | default: site.data.locales[lang].categories.post_measure }}
107
+ {% endif %}
87
108
  </span>
88
109
  </li>
89
110
  {% endfor %}
@@ -13,13 +13,11 @@ layout: page
13
13
  </h1>
14
14
 
15
15
  <ul class="post-content pl-0">
16
- {% assign post_df = site.data.locales[lang].date_format.post.long %}
17
-
18
16
  {% for post in page.posts %}
19
17
  <li class="d-flex justify-content-between pl-md-3 pr-md-3">
20
18
  <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
21
19
  <span class="dash flex-grow-1"></span>
22
- <span class="text-muted small">{{ post.date | date: post_df }}</span>
20
+ {% include datetime.html date=post.date wrap='span' class='text-muted small' %}
23
21
  </li>
24
22
  {% endfor %}
25
23
  </ul>
@@ -7,9 +7,11 @@ layout: compress
7
7
 
8
8
  {% include lang.html %}
9
9
 
10
+ {% include assets-origin.html %}
11
+
10
12
  {% capture prefer_mode %}
11
13
  {% if site.theme_mode %}
12
- mode="{{ site.theme_mode }}"
14
+ data-mode="{{ site.theme_mode }}"
13
15
  {% endif %}
14
16
  {% endcapture %}
15
17
 
@@ -17,18 +19,14 @@ layout: compress
17
19
 
18
20
  {% include head.html %}
19
21
 
20
- {% unless site.theme_mode %}
21
- {% include mode-toggle.html %}
22
- {% endunless %}
23
-
24
- <body data-spy="scroll" data-target="#toc">
22
+ <body data-spy="scroll" data-target="#toc" data-topbar-visible="true">
25
23
 
26
24
  {% include sidebar.html %}
27
25
 
28
26
  {% include topbar.html %}
29
27
 
30
- <div id="main-wrapper">
31
- <div id="main">
28
+ <div id="main-wrapper" class="d-flex justify-content-center">
29
+ <div id="main" class="container pl-xl-4 pr-xl-4">
32
30
 
33
31
  {{ content }}
34
32
 
@@ -50,6 +48,23 @@ layout: compress
50
48
  <i class="fas fa-angle-up"></i>
51
49
  </a>
52
50
 
51
+ {% if site.pwa.enabled %}
52
+ <div id="notification" class="toast" role="alert" aria-live="assertive" aria-atomic="true"
53
+ data-animation="true" data-autohide="false">
54
+ <div class="toast-header">
55
+ <button type="button" class="ml-2 ml-auto close" data-dismiss="toast" aria-label="Close">
56
+ <span aria-hidden="true">&times;</span>
57
+ </button>
58
+ </div>
59
+ <div class="toast-body text-center pt-0">
60
+ <p class="pl-2 pr-2 mb-3">{{ site.data.locales[lang].notification.update_found }}</p>
61
+ <button type="button" class="btn btn-primary" aria-label="Update">
62
+ {{ site.data.locales[lang].notification.update }}
63
+ </button>
64
+ </div>
65
+ </div>
66
+ {% endif %}
67
+
53
68
  {% include search-loader.html %}
54
69
 
55
70
  {% include js-selector.html %}