jekyll-theme-chirpy-g 1.0.2

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 (144) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +61 -0
  4. data/_data/locales/ar.yml +91 -0
  5. data/_data/locales/bg-BG.yml +81 -0
  6. data/_data/locales/cs-CZ.yml +89 -0
  7. data/_data/locales/de-DE.yml +87 -0
  8. data/_data/locales/el-GR.yml +91 -0
  9. data/_data/locales/en.yml +91 -0
  10. data/_data/locales/es-ES.yml +77 -0
  11. data/_data/locales/fa-IR.yaml +91 -0
  12. data/_data/locales/fi-FI.yml +90 -0
  13. data/_data/locales/fr-FR.yml +77 -0
  14. data/_data/locales/hu-HU.yml +92 -0
  15. data/_data/locales/id-ID.yml +77 -0
  16. data/_data/locales/it-IT.yml +90 -0
  17. data/_data/locales/ko-KR.yml +84 -0
  18. data/_data/locales/my-MM.yml +77 -0
  19. data/_data/locales/nl-NL.yml +90 -0
  20. data/_data/locales/pt-BR.yml +77 -0
  21. data/_data/locales/ru-RU.yml +87 -0
  22. data/_data/locales/sl-SI.yml +91 -0
  23. data/_data/locales/sv-SE.yml +91 -0
  24. data/_data/locales/th.yml +91 -0
  25. data/_data/locales/tr-TR.yml +77 -0
  26. data/_data/locales/uk-UA.yml +77 -0
  27. data/_data/locales/vi-VN.yml +76 -0
  28. data/_data/locales/zh-CN.yml +83 -0
  29. data/_data/locales/zh-TW.yml +83 -0
  30. data/_data/origin/basic.yml +39 -0
  31. data/_data/origin/cors.yml +54 -0
  32. data/_includes/analytics/cloudflare.html +6 -0
  33. data/_includes/analytics/fathom.html +6 -0
  34. data/_includes/analytics/goatcounter.html +6 -0
  35. data/_includes/analytics/google.html +13 -0
  36. data/_includes/analytics/matomo.html +13 -0
  37. data/_includes/analytics/umami.html +6 -0
  38. data/_includes/comment.html +5 -0
  39. data/_includes/comments/disqus.html +57 -0
  40. data/_includes/comments/giscus.html +55 -0
  41. data/_includes/comments/utterances.html +38 -0
  42. data/_includes/datetime.html +20 -0
  43. data/_includes/embed/audio.html +35 -0
  44. data/_includes/embed/bilibili.html +9 -0
  45. data/_includes/embed/twitch.html +8 -0
  46. data/_includes/embed/video.html +59 -0
  47. data/_includes/embed/youtube.html +9 -0
  48. data/_includes/favicons.html +19 -0
  49. data/_includes/footer.html +49 -0
  50. data/_includes/head.html +126 -0
  51. data/_includes/js-selector.html +86 -0
  52. data/_includes/jsdelivr-combine.html +26 -0
  53. data/_includes/lang.html +10 -0
  54. data/_includes/language-alias.html +70 -0
  55. data/_includes/media-url.html +37 -0
  56. data/_includes/metadata-hook.html +1 -0
  57. data/_includes/notification.html +24 -0
  58. data/_includes/origin-type.html +13 -0
  59. data/_includes/pageviews/goatcounter.html +21 -0
  60. data/_includes/post-description.html +25 -0
  61. data/_includes/post-nav.html +34 -0
  62. data/_includes/post-paginator.html +91 -0
  63. data/_includes/post-sharing.html +52 -0
  64. data/_includes/read-time.html +37 -0
  65. data/_includes/refactor-content.html +255 -0
  66. data/_includes/related-posts.html +94 -0
  67. data/_includes/search-loader.html +49 -0
  68. data/_includes/search-results.html +10 -0
  69. data/_includes/sidebar.html +97 -0
  70. data/_includes/toc-status.html +10 -0
  71. data/_includes/toc.html +9 -0
  72. data/_includes/topbar.html +77 -0
  73. data/_includes/trending-tags.html +46 -0
  74. data/_includes/update-list.html +40 -0
  75. data/_layouts/archives.html +35 -0
  76. data/_layouts/categories.html +138 -0
  77. data/_layouts/category.html +24 -0
  78. data/_layouts/compress.html +10 -0
  79. data/_layouts/default.html +86 -0
  80. data/_layouts/graph.html +8 -0
  81. data/_layouts/home.html +122 -0
  82. data/_layouts/page.html +20 -0
  83. data/_layouts/post.html +179 -0
  84. data/_layouts/tag.html +23 -0
  85. data/_layouts/tags.html +22 -0
  86. data/_sass/abstracts/_breakpoints.scss +73 -0
  87. data/_sass/abstracts/_index.scss +4 -0
  88. data/_sass/abstracts/_mixins.scss +80 -0
  89. data/_sass/abstracts/_placeholders.scss +160 -0
  90. data/_sass/abstracts/_variables.scss +30 -0
  91. data/_sass/base/_base.scss +476 -0
  92. data/_sass/base/_index.scss +4 -0
  93. data/_sass/base/_reset.scss +41 -0
  94. data/_sass/base/_syntax.scss +253 -0
  95. data/_sass/base/_typography.scss +266 -0
  96. data/_sass/components/_buttons.scss +51 -0
  97. data/_sass/components/_index.scss +2 -0
  98. data/_sass/components/_popups.scss +172 -0
  99. data/_sass/layout/_footer.scss +36 -0
  100. data/_sass/layout/_index.scss +4 -0
  101. data/_sass/layout/_panel.scss +70 -0
  102. data/_sass/layout/_sidebar.scss +258 -0
  103. data/_sass/layout/_topbar.scss +86 -0
  104. data/_sass/main.bundle.scss +2 -0
  105. data/_sass/main.scss +4 -0
  106. data/_sass/pages/_archives.scss +140 -0
  107. data/_sass/pages/_categories.scss +82 -0
  108. data/_sass/pages/_category-tag.scss +63 -0
  109. data/_sass/pages/_graph.scss +51 -0
  110. data/_sass/pages/_home.scss +173 -0
  111. data/_sass/pages/_index.scss +8 -0
  112. data/_sass/pages/_post.scss +498 -0
  113. data/_sass/pages/_search.scss +184 -0
  114. data/_sass/pages/_tags.scss +23 -0
  115. data/_sass/themes/_dark.scss +318 -0
  116. data/_sass/themes/_light.scss +330 -0
  117. data/assets/404.html +14 -0
  118. data/assets/css/jekyll-theme-chirpy-g.scss +10 -0
  119. data/assets/feed.xml +54 -0
  120. data/assets/img/favicons/android-chrome-192x192.png +0 -0
  121. data/assets/img/favicons/android-chrome-512x512.png +0 -0
  122. data/assets/img/favicons/apple-touch-icon.png +0 -0
  123. data/assets/img/favicons/browserconfig.xml +13 -0
  124. data/assets/img/favicons/favicon-16x16.png +0 -0
  125. data/assets/img/favicons/favicon-32x32.png +0 -0
  126. data/assets/img/favicons/favicon.ico +0 -0
  127. data/assets/img/favicons/mstile-150x150.png +0 -0
  128. data/assets/img/favicons/site.webmanifest +26 -0
  129. data/assets/js/data/graph.json +14 -0
  130. data/assets/js/data/mathjax.js +25 -0
  131. data/assets/js/data/search.json +20 -0
  132. data/assets/js/data/swconf.js +47 -0
  133. data/assets/js/dist/app.min.js +7 -0
  134. data/assets/js/dist/categories.min.js +4 -0
  135. data/assets/js/dist/commons.min.js +4 -0
  136. data/assets/js/dist/graph.min.js +4 -0
  137. data/assets/js/dist/home.min.js +4 -0
  138. data/assets/js/dist/misc.min.js +4 -0
  139. data/assets/js/dist/page.min.js +4 -0
  140. data/assets/js/dist/post.min.js +4 -0
  141. data/assets/js/dist/sw.min.js +7 -0
  142. data/assets/js/dist/theme.min.js +4 -0
  143. data/assets/robots.txt +10 -0
  144. metadata +286 -0
@@ -0,0 +1,59 @@
1
+ {% assign video_url = include.src %}
2
+ {% assign title = include.title %}
3
+ {% assign poster_url = include.poster %}
4
+ {% assign types = include.types | default: '' | strip | split: '|' %}
5
+
6
+ {% unless video_url contains '://' %}
7
+ {%- capture video_url -%}
8
+ {% include media-url.html src=video_url subpath=page.media_subpath %}
9
+ {%- endcapture -%}
10
+ {% endunless %}
11
+
12
+ {% if poster_url %}
13
+ {% unless poster_url contains '://' %}
14
+ {%- capture poster_url -%}
15
+ {% include media-url.html src=poster_url subpath=page.media_subpath %}
16
+ {%- endcapture -%}
17
+ {% endunless %}
18
+ {% assign poster = 'poster="' | append: poster_url | append: '"' %}
19
+ {% endif %}
20
+
21
+ {% assign attributes = 'controls' %}
22
+
23
+ {% if include.autoplay %}
24
+ {% assign attributes = attributes | append: ' ' | append: 'autoplay' %}
25
+ {% endif %}
26
+
27
+ {% if include.loop %}
28
+ {% assign attributes = attributes | append: ' ' | append: 'loop' %}
29
+ {% endif %}
30
+
31
+ {% if include.muted %}
32
+ {% assign attributes = attributes | append: ' ' | append: 'muted' %}
33
+ {% endif %}
34
+
35
+ <p>
36
+ <video class="embed-video file" {{ poster }} {{ attributes }}>
37
+ {% assign extension = video_url | split: '.' | last %}
38
+ {% assign types = extension | concat: types %}
39
+
40
+ {% assign ext_size = extension | size %}
41
+ {% assign src_size = video_url | size %}
42
+ {% assign slice_size = src_size | minus: ext_size %}
43
+
44
+ {% assign filepath = video_url | slice: 0, slice_size %}
45
+
46
+ {% for type in types %}
47
+ {% assign src = filepath | append: type %}
48
+ {% assign media_item = site.data.media | find: 'extension', type %}
49
+ {% assign mime_type = media_item.mime_type | default: type %}
50
+ <source src="{{ src }}" type="video/{{ mime_type }}">
51
+ {% endfor %}
52
+
53
+ Your browser does not support the video tag. Here is a
54
+ <a href="{{ video_url | strip }}">link to the video file</a> instead.
55
+ </video>
56
+ {% if title %}
57
+ <em>{{ title }}</em>
58
+ {% endif %}
59
+ </p>
@@ -0,0 +1,9 @@
1
+ <iframe
2
+ class="embed-video"
3
+ loading="lazy"
4
+ src="https://www.youtube.com/embed/{{ include.id }}"
5
+ title="YouTube video player"
6
+ frameborder="0"
7
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
8
+ allowfullscreen
9
+ ></iframe>
@@ -0,0 +1,19 @@
1
+ <!--
2
+ The Favicons for Web, Android, Microsoft, and iOS (iPhone and iPad) Apps
3
+ Generated by: https://realfavicongenerator.net/
4
+ -->
5
+
6
+ {% capture favicon_path %}{{ '/assets/img/favicons' | relative_url }}{% endcapture %}
7
+
8
+ <link rel="apple-touch-icon" sizes="180x180" href="{{ favicon_path }}/apple-touch-icon.png">
9
+ <link rel="icon" type="image/png" sizes="32x32" href="{{ favicon_path }}/favicon-32x32.png">
10
+ <link rel="icon" type="image/png" sizes="16x16" href="{{ favicon_path }}/favicon-16x16.png">
11
+ {% if site.pwa.enabled %}
12
+ <link rel="manifest" href="{{ favicon_path }}/site.webmanifest">
13
+ {% endif %}
14
+ <link rel="shortcut icon" href="{{ favicon_path }}/favicon.ico">
15
+ <meta name="apple-mobile-web-app-title" content="{{ site.title }}">
16
+ <meta name="application-name" content="{{ site.title }}">
17
+ <meta name="msapplication-TileColor" content="#da532c">
18
+ <meta name="msapplication-config" content="{{ favicon_path }}/browserconfig.xml">
19
+ <meta name="theme-color" content="#ffffff">
@@ -0,0 +1,49 @@
1
+ <!-- The Footer -->
2
+
3
+ <footer
4
+ aria-label="Site Info"
5
+ class="
6
+ d-flex flex-column justify-content-center text-muted
7
+ flex-lg-row justify-content-lg-between align-items-lg-center pb-lg-3
8
+ "
9
+ >
10
+ <p>
11
+ {{- '©' }}
12
+ <time>{{ 'now' | date: '%Y' }}</time>
13
+
14
+ {% if site.social.links %}
15
+ <a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>.
16
+ {% else %}
17
+ <em class="fst-normal">{{ site.social.name }}</em>.
18
+ {% endif %}
19
+
20
+ {% if site.data.locales[include.lang].copyright.brief %}
21
+ <span
22
+ data-bs-toggle="tooltip"
23
+ data-bs-placement="top"
24
+ title="{{ site.data.locales[include.lang].copyright.verbose }}"
25
+ >
26
+ {{- site.data.locales[include.lang].copyright.brief -}}
27
+ </span>
28
+ {% endif %}
29
+ </p>
30
+
31
+ <p>
32
+ {%- capture _platform -%}
33
+ <a href="https://jekyllrb.com" target="_blank" rel="noopener">Jekyll</a>
34
+ {%- endcapture -%}
35
+
36
+ {%- capture _theme -%}
37
+ <a
38
+ data-bs-toggle="tooltip"
39
+ data-bs-placement="top"
40
+ title="v{{ theme.version }}"
41
+ href="https://github.com/guillermodotn/jekyll-theme-chirpy-g"
42
+ target="_blank"
43
+ rel="noopener"
44
+ >ChirpyG</a>
45
+ {%- endcapture -%}
46
+
47
+ {{ site.data.locales[include.lang].meta | replace: ':PLATFORM', _platform | replace: ':THEME', _theme }}
48
+ </p>
49
+ </footer>
@@ -0,0 +1,126 @@
1
+ <head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3
+ <meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7">
4
+ <meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e">
5
+ <meta name="mobile-web-app-capable" content="yes">
6
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
7
+ <meta
8
+ name="viewport"
9
+ content="width=device-width, user-scalable=no initial-scale=1, shrink-to-fit=no, viewport-fit=cover"
10
+ >
11
+
12
+ {%- capture seo_tags -%}
13
+ {% seo title=false %}
14
+ {%- endcapture -%}
15
+
16
+ <!-- Setup Open Graph image -->
17
+
18
+ {% if page.image %}
19
+ {% assign src = page.image.path | default: page.image %}
20
+
21
+ {% unless src contains '://' %}
22
+ {%- capture img_url -%}
23
+ {% include media-url.html src=src subpath=page.media_subpath absolute=true %}
24
+ {%- endcapture -%}
25
+
26
+ {%- capture old_url -%}{{ src | absolute_url }}{%- endcapture -%}
27
+ {%- capture new_url -%}{{ img_url }}{%- endcapture -%}
28
+
29
+ {% assign seo_tags = seo_tags | replace: old_url, new_url %}
30
+ {% endunless %}
31
+
32
+ {% elsif site.social_preview_image %}
33
+ {%- capture img_url -%}
34
+ {% include media-url.html src=site.social_preview_image absolute=true %}
35
+ {%- endcapture -%}
36
+
37
+ {%- capture og_image -%}
38
+ <meta property="og:image" content="{{ img_url }}" />
39
+ {%- endcapture -%}
40
+
41
+ {%- capture twitter_image -%}
42
+ <meta name="twitter:card" content="summary_large_image" />
43
+ <meta property="twitter:image" content="{{ img_url }}" />
44
+ {%- endcapture -%}
45
+
46
+ {% assign old_meta_clip = '<meta name="twitter:card" content="summary" />' %}
47
+ {% assign new_meta_clip = og_image | append: twitter_image %}
48
+ {% assign seo_tags = seo_tags | replace: old_meta_clip, new_meta_clip %}
49
+ {% endif %}
50
+
51
+ {{ seo_tags }}
52
+
53
+ <title>
54
+ {%- unless page.layout == 'home' -%}
55
+ {{ page.title | append: ' | ' }}
56
+ {%- endunless -%}
57
+ {{ site.title }}
58
+ </title>
59
+
60
+ {% include_cached favicons.html %}
61
+
62
+ <!-- Resource Hints -->
63
+ {% unless site.assets.self_host.enabled %}
64
+ {% for hint in site.data.origin.cors.resource_hints %}
65
+ {% for link in hint.links %}
66
+ <link rel="{{ link.rel }}" href="{{ hint.url }}" {{ link.opts | join: ' ' }}>
67
+ {% endfor %}
68
+ {% endfor %}
69
+ {% endunless %}
70
+
71
+ <!-- Bootstrap -->
72
+ {% unless jekyll.environment == 'production' %}
73
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
74
+ {% endunless %}
75
+
76
+ <!-- Theme style -->
77
+ <link rel="stylesheet" href="{{ '/assets/css/:THEME.css' | replace: ':THEME', site.theme | relative_url }}">
78
+
79
+ <!-- Web Font -->
80
+ <link rel="stylesheet" href="{{ site.data.origin[type].webfonts | relative_url }}">
81
+
82
+ <!-- Font Awesome Icons -->
83
+ <link rel="stylesheet" href="{{ site.data.origin[type].fontawesome.css | relative_url }}">
84
+
85
+ <!-- 3rd-party Dependencies -->
86
+
87
+ {% if site.toc and page.toc %}
88
+ <link rel="stylesheet" href="{{ site.data.origin[type].toc.css | relative_url }}">
89
+ {% endif %}
90
+
91
+ {% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
92
+ <link rel="stylesheet" href="{{ site.data.origin[type]['lazy-polyfill'].css | relative_url }}">
93
+ {% endif %}
94
+
95
+ {% if page.layout == 'page' or page.layout == 'post' %}
96
+ <!-- Image Popup -->
97
+ <link rel="stylesheet" href="{{ site.data.origin[type].glightbox.css | relative_url }}">
98
+ {% endif %}
99
+
100
+ <!-- Scripts -->
101
+
102
+ <script src="{{ '/assets/js/dist/theme.min.js' | relative_url }}"></script>
103
+
104
+ {% include js-selector.html lang=lang %}
105
+
106
+ {% if jekyll.environment == 'production' %}
107
+ <!-- PWA -->
108
+ {% if site.pwa.enabled %}
109
+ <script
110
+ defer
111
+ src="{{ '/app.min.js' | relative_url }}?baseurl={{ site.baseurl | default: '' }}&register={{ site.pwa.cache.enabled }}"
112
+ ></script>
113
+ {% endif %}
114
+
115
+ <!-- Web Analytics -->
116
+ {% for analytics in site.analytics %}
117
+ {% capture str %}{{ analytics }}{% endcapture %}
118
+ {% assign platform = str | split: '{' | first %}
119
+ {% if site.analytics[platform].id and site.analytics[platform].id != empty %}
120
+ {% include analytics/{{ platform }}.html %}
121
+ {% endif %}
122
+ {% endfor %}
123
+ {% endif %}
124
+
125
+ {% include metadata-hook.html %}
126
+ </head>
@@ -0,0 +1,86 @@
1
+ <!-- JS selector for site. -->
2
+
3
+ <!-- commons -->
4
+
5
+ {% assign urls = site.data.origin[type].search.js %}
6
+
7
+ <!-- layout specified -->
8
+
9
+ {% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
10
+ {% assign urls = urls | append: ',' | append: site.data.origin[type]['lazy-polyfill'].js %}
11
+
12
+ {% unless page.layout == 'home' %}
13
+ <!-- image lazy-loading & popup & clipboard -->
14
+ {% assign urls = urls
15
+ | append: ','
16
+ | append: site.data.origin[type].glightbox.js
17
+ | append: ','
18
+ | append: site.data.origin[type].clipboard.js
19
+ %}
20
+ {% endunless %}
21
+ {% endif %}
22
+
23
+ {% if page.layout == 'home'
24
+ or page.layout == 'post'
25
+ or page.layout == 'archives'
26
+ or page.layout == 'category'
27
+ or page.layout == 'tag'
28
+ %}
29
+ {% assign locale = include.lang | split: '-' | first %}
30
+
31
+ {% assign urls = urls
32
+ | append: ','
33
+ | append: site.data.origin[type].dayjs.js.common
34
+ | append: ','
35
+ | append: site.data.origin[type].dayjs.js.locale
36
+ | replace: ':LOCALE', locale
37
+ | append: ','
38
+ | append: site.data.origin[type].dayjs.js.relativeTime
39
+ | append: ','
40
+ | append: site.data.origin[type].dayjs.js.localizedFormat
41
+ %}
42
+ {% endif %}
43
+
44
+ {% if page.content contains '<h2' or page.content contains '<h3' and site.toc and page.toc %}
45
+ {% assign urls = urls | append: ',' | append: site.data.origin[type].toc.js %}
46
+ {% endif %}
47
+
48
+ {% if page.mermaid %}
49
+ {% assign urls = urls | append: ',' | append: site.data.origin[type].mermaid.js %}
50
+ {% endif %}
51
+
52
+ {% include jsdelivr-combine.html urls=urls %}
53
+
54
+ {% case page.layout %}
55
+ {% when 'home', 'categories', 'post', 'page', 'graph' %}
56
+ {% assign js = page.layout %}
57
+ {% when 'archives', 'category', 'tag' %}
58
+ {% assign js = 'misc' %}
59
+ {% else %}
60
+ {% assign js = 'commons' %}
61
+ {% endcase %}
62
+
63
+ {% capture script %}/assets/js/dist/{{ js }}.min.js{% endcapture %}
64
+
65
+ <script defer src="{{ script | relative_url }}"></script>
66
+
67
+ {% if page.math %}
68
+ <!-- MathJax -->
69
+ <script async src="{{ '/assets/js/data/mathjax.js' | relative_url }}"></script>
70
+ <script async src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
71
+ <script id="MathJax-script" async src="{{ site.data.origin[type].mathjax.js | relative_url }}"></script>
72
+ {% endif %}
73
+
74
+ <!-- Pageviews -->
75
+ {% if page.layout == 'post' %}
76
+ {% assign provider = site.pageviews.provider %}
77
+
78
+ {% if provider and provider != empty %}
79
+ {% case provider %}
80
+ {% when 'goatcounter' %}
81
+ {% if site.analytics[provider].id != empty and site.analytics[provider].id %}
82
+ {% include pageviews/{{ provider }}.html %}
83
+ {% endif %}
84
+ {% endcase %}
85
+ {% endif %}
86
+ {% endif %}
@@ -0,0 +1,26 @@
1
+ {% assign urls = include.urls | split: ',' %}
2
+
3
+ {% assign combined_urls = null %}
4
+
5
+ {% assign domain = 'https://cdn.jsdelivr.net/' %}
6
+
7
+ {% for url in urls %}
8
+ {% if url contains domain %}
9
+ {% assign url_snippet = url | slice: domain.size, url.size %}
10
+
11
+ {% if combined_urls %}
12
+ {% assign combined_urls = combined_urls | append: ',' | append: url_snippet %}
13
+ {% else %}
14
+ {% assign combined_urls = domain | append: 'combine/' | append: url_snippet %}
15
+ {% endif %}
16
+
17
+ {% elsif url contains '//' %}
18
+ <script defer src="{{ url }}"></script>
19
+ {% else %}
20
+ <script defer src="{{ url | relative_url }}"></script>
21
+ {% endif %}
22
+ {% endfor %}
23
+
24
+ {% if combined_urls %}
25
+ <script defer src="{{ combined_urls }}"></script>
26
+ {% endif %}
@@ -0,0 +1,10 @@
1
+ {% comment %}
2
+ Detect appearance language and return it through variable "lang"
3
+ {% endcomment %}
4
+ {% if site.data.locales[page.lang] %}
5
+ {% assign lang = page.lang %}
6
+ {% elsif site.data.locales[site.lang] %}
7
+ {% assign lang = site.lang %}
8
+ {% else %}
9
+ {% assign lang = 'en' %}
10
+ {% endif %}
@@ -0,0 +1,70 @@
1
+ {% comment %}
2
+
3
+ Convert the alias of the syntax language to the official name
4
+
5
+ See: <https://github.com/rouge-ruby/rouge/wiki/List-of-supported-languages-and-lexers>
6
+
7
+ {% endcomment %}
8
+
9
+ {% assign _lang = include.language | default: '' %}
10
+
11
+ {% case _lang %}
12
+ {% when 'actionscript', 'as', 'as3' %}
13
+ {{ 'ActionScript' }}
14
+ {% when 'applescript' %}
15
+ {{ 'AppleScript' }}
16
+ {% when 'brightscript', 'bs', 'brs' %}
17
+ {{ 'BrightScript' }}
18
+ {% when 'cfscript', 'cfc' %}
19
+ {{ 'CFScript' }}
20
+ {% when 'coffeescript', 'coffee', 'coffee-script' %}
21
+ {{ 'CoffeeScript' }}
22
+ {% when 'cs', 'csharp' %}
23
+ {{ 'C#' }}
24
+ {% when 'erl' %}
25
+ {{ 'Erlang' }}
26
+ {% when 'graphql' %}
27
+ {{ 'GraphQL' }}
28
+ {% when 'haskell', 'hs' %}
29
+ {{ 'Haskell' }}
30
+ {% when 'javascript', 'js' %}
31
+ {{ 'JavaScript' }}
32
+ {% when 'make', 'mf', 'gnumake', 'bsdmake' %}
33
+ {{ 'Makefile' }}
34
+ {% when 'md', 'mkd' %}
35
+ {{ 'Markdown' }}
36
+ {% when 'm' %}
37
+ {{ 'Matlab' }}
38
+ {% when 'objective_c', 'objc', 'obj-c', 'obj_c', 'objectivec' %}
39
+ {{ 'Objective-C' }}
40
+ {% when 'perl', 'pl' %}
41
+ {{ 'Perl' }}
42
+ {% when 'php','php3','php4','php5' %}
43
+ {{ 'PHP' }}
44
+ {% when 'py' %}
45
+ {{ 'Python' }}
46
+ {% when 'rb' %}
47
+ {{ 'Ruby' }}
48
+ {% when 'rs','no_run','ignore','should_panic' %}
49
+ {{ 'Rust' }}
50
+ {% when 'bash', 'zsh', 'ksh', 'sh' %}
51
+ {{ 'Shell' }}
52
+ {% when 'st', 'squeak' %}
53
+ {{ 'Smalltalk' }}
54
+ {% when 'tex'%}
55
+ {{ 'TeX' }}
56
+ {% when 'latex' %}
57
+ {{ 'LaTex' }}
58
+ {% when 'ts', 'typescript' %}
59
+ {{ 'TypeScript' }}
60
+ {% when 'vb', 'visualbasic' %}
61
+ {{ 'Visual Basic' }}
62
+ {% when 'vue', 'vuejs' %}
63
+ {{ 'Vue.js' }}
64
+ {% when 'yml' %}
65
+ {{ 'YAML' }}
66
+ {% when 'css', 'html', 'scss', 'ssh', 'toml', 'xml', 'yaml', 'json' %}
67
+ {{ _lang | upcase }}
68
+ {% else %}
69
+ {{ _lang | capitalize }}
70
+ {% endcase %}
@@ -0,0 +1,37 @@
1
+ {%- comment -%}
2
+ Generate media resource final URL based on `site.cdn`, `page.media_subpath`
3
+
4
+ Arguments:
5
+ src - required, basic media resources path
6
+ subpath - optional, relative path of media resources
7
+ absolute - optional, boolean, if true, generate absolute URL
8
+
9
+ Return:
10
+ media resources URL
11
+ {%- endcomment -%}
12
+
13
+ {% assign url = include.src %}
14
+
15
+ {%- if url -%}
16
+ {% unless url contains ':' %}
17
+ {%- comment -%} Add media resources subpath prefix {%- endcomment -%}
18
+ {% assign url = include.subpath | default: '' | append: '/' | append: url %}
19
+
20
+ {%- comment -%} Prepend CND URL {%- endcomment -%}
21
+ {% if site.cdn %}
22
+ {% assign url = site.cdn | append: '/' | append: url %}
23
+ {% endif %}
24
+
25
+ {% assign url = url | replace: '///', '/' | replace: '//', '/' | replace: ':/', '://' %}
26
+
27
+ {% unless url contains '://' %}
28
+ {% if include.absolute %}
29
+ {% assign url = site.url | append: site.baseurl | append: url %}
30
+ {% else %}
31
+ {% assign url = site.baseurl | append: url %}
32
+ {% endif %}
33
+ {% endunless %}
34
+ {% endunless %}
35
+ {%- endif -%}
36
+
37
+ {{- url -}}
@@ -0,0 +1 @@
1
+ <!-- A placeholder to allow defining custom metadata -->
@@ -0,0 +1,24 @@
1
+ <aside
2
+ id="notification"
3
+ class="toast"
4
+ role="alert"
5
+ aria-live="assertive"
6
+ aria-atomic="true"
7
+ data-bs-animation="true"
8
+ data-bs-autohide="false"
9
+ >
10
+ <div class="toast-header">
11
+ <button
12
+ type="button"
13
+ class="btn-close ms-auto"
14
+ data-bs-dismiss="toast"
15
+ aria-label="Close"
16
+ ></button>
17
+ </div>
18
+ <div class="toast-body text-center pt-0">
19
+ <p class="px-2 mb-3">{{ site.data.locales[include.lang].notification.update_found }}</p>
20
+ <button type="button" class="btn btn-primary" aria-label="Update">
21
+ {{ site.data.locales[include.lang].notification.update }}
22
+ </button>
23
+ </div>
24
+ </aside>
@@ -0,0 +1,13 @@
1
+ {% comment %} Site static assets origin type {% endcomment %}
2
+
3
+ {% assign type = 'cors' %}
4
+
5
+ {% if site.assets.self_host.enabled %}
6
+ {% if site.assets.self_host.env %}
7
+ {% if site.assets.self_host.env == jekyll.environment %}
8
+ {% assign type = 'basic' %}
9
+ {% endif %}
10
+ {% else %}
11
+ {% assign type = 'basic' %}
12
+ {% endif %}
13
+ {% endif %}
@@ -0,0 +1,21 @@
1
+ <!-- Display GoatCounter pageviews -->
2
+ <script>
3
+ document.addEventListener('DOMContentLoaded', () => {
4
+ const pv = document.getElementById('pageviews');
5
+
6
+ if (pv !== null) {
7
+ const uri = location.pathname.replace(/\/$/, '');
8
+ const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
9
+
10
+ fetch(url)
11
+ .then((response) => response.json())
12
+ .then((data) => {
13
+ const count = data.count.replace(/\s/g, '');
14
+ pv.innerText = new Intl.NumberFormat().format(count);
15
+ })
16
+ .catch((error) => {
17
+ pv.innerText = '1';
18
+ });
19
+ }
20
+ });
21
+ </script>
@@ -0,0 +1,25 @@
1
+ {%- comment -%}
2
+ Get post description or generate it from the post content.
3
+ {%- endcomment -%}
4
+
5
+ {%- assign max_length = include.max_length | default: 200 -%}
6
+
7
+ {%- capture description -%}
8
+ {%- if post.description -%}
9
+ {{- post.description -}}
10
+ {%- else -%}
11
+ {% comment %}
12
+ Remove the line number of the code snippet.
13
+ {% endcomment %}
14
+ {% assign content = post.content %}
15
+
16
+ {% if content contains '<td class="rouge-gutter gl"><pre class="lineno">' %}
17
+ {% assign content = content | replace: '<td class="rouge-gutter gl"><pre class="lineno">', '<!-- <td class="rouge-gutter gl"><pre class="lineno">'%}
18
+ {% assign content = content | replace: '</td><td class="rouge-code">', '</td> --><td class="rouge-code">' %}
19
+ {% endif %}
20
+
21
+ {{- content | markdownify | strip_html | newline_to_br | replace: '<br />', ' ' | strip_newlines -}}
22
+ {%- endif -%}
23
+ {%- endcapture -%}
24
+
25
+ {{- description | strip | truncate: max_length | escape -}}
@@ -0,0 +1,34 @@
1
+ <!-- Navigation buttons at the bottom of the post. -->
2
+
3
+ <nav class="post-navigation d-flex justify-content-between" aria-label="Post Navigation">
4
+ {% assign previous = site.data.locales[include.lang].post.button.previous %}
5
+ {% assign next = site.data.locales[include.lang].post.button.next %}
6
+
7
+ {% if page.previous.url %}
8
+ <a
9
+ href="{{ site.baseurl }}{{ page.previous.url }}"
10
+ class="btn btn-outline-primary"
11
+ aria-label="{{ previous }}"
12
+ >
13
+ <p>{{ page.previous.title }}</p>
14
+ </a>
15
+ {% else %}
16
+ <div class="btn btn-outline-primary disabled" aria-label="{{ previous }}">
17
+ <p>-</p>
18
+ </div>
19
+ {% endif %}
20
+
21
+ {% if page.next.url %}
22
+ <a
23
+ href="{{ site.baseurl }}{{page.next.url}}"
24
+ class="btn btn-outline-primary"
25
+ aria-label="{{ next }}"
26
+ >
27
+ <p>{{ page.next.title }}</p>
28
+ </a>
29
+ {% else %}
30
+ <div class="btn btn-outline-primary disabled" aria-label="{{ next }}">
31
+ <p>-</p>
32
+ </div>
33
+ {% endif %}
34
+ </nav>