1
0
mirror of https://github.com/cotes2020/jekyll-theme-chirpy.git synced 2025-06-07 16:17:50 +00:00

Compare commits

...

130 Commits

Author SHA1 Message Date
Alexander Fuks
c706799f9b
fix: correct GoatCounter pageviews extraction (#2420) 2025-06-01 04:51:43 +08:00
Zakaria Fatahi
18c48b4c49
feat(i18n): add locale files for some rtl languages (#2415) 2025-05-22 01:06:12 +08:00
Nicolai Skødt Holmgaard
f5802b8a8a
feat(i18n): add Danish locale (#2410) 2025-05-22 01:03:29 +08:00
Cotes Chung
09948da235
Merge branch 'production' 2025-05-18 21:32:02 +08:00
semantic-release-bot
53770e4923 chore(release): 7.3.0
## [7.3.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.2.4...v7.3.0) (2025-05-18)

### Features

* **i18n:** add Catalan Spanish locale translation ([#2349](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2349)) ([167c98c](167c98c781))
* **i18n:** add Dutch locale ([#2076](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2076)) ([981ddba](981ddba30e))
* **i18n:** add Japanese locale ([#2295](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2295)) ([571c90f](571c90f130))
* **i18n:** add persian language ([#2238](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2238)) ([7d4d35c](7d4d35cd10))

### Bug Fixes

* avoid `mathjax` loading failure on page refresh ([#2389](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2389)) ([401e2af](401e2af0f8))
* improve accuracy of moving `img` element classes ([#2399](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2399)) ([d0f8f95](d0f8f9553e))
* prevent the search bar from moving when focused ([#2336](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2336)) ([f744929](f7449299e8))
* recognize global theme mode ([#2357](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2357)) ([7708adb](7708adbf30))
* **search:** avoid missing spaces between paragraphs in search results ([#2199](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2199)) ([0eb7efa](0eb7efa7f5))
* **ui:** fix incomplete border color on hover for tags ([#2359](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2359)) ([c626447](c62644759c))

### Improvements

* **seo:** improve accessibility and aligns with best practices ([#2289](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2289)) ([54d4d59](54d4d59d22))
2025-05-18 13:17:30 +00:00
Cotes Chung
d84b72706a
Merge branch 'master' into production 2025-05-18 21:16:09 +08:00
Cotes Chung
519e4f193a
chore: upgrade dependencies to the latest version (#2409) 2025-05-18 21:14:56 +08:00
Cotes Chung
d0f8f9553e
fix: improve accuracy of moving img element classes (#2399) 2025-05-11 22:19:18 +08:00
Cotes Chung
401e2af0f8
fix: avoid mathjax loading failure on page refresh (#2389) 2025-05-05 11:55:48 +08:00
Cotes Chung
ada38aad96
chore: avoid auto-formatting liquid and sass mixed code 2025-05-05 11:15:08 +08:00
Cotes Chung
61ae6cced8
chore(dev-deps): add eslint config file 2025-05-05 11:14:07 +08:00
Cotes Chung
9f38a2dead
refactor: move the path of theme.js 2025-05-03 16:18:52 +08:00
Cotes Chung
23d953c313
chore(deps): remove plugin jekyll-redirect-from
Discussed in #2313
2025-05-03 16:14:50 +08:00
iSpeakNerd
b48ea68bf7
chore: update linkedin sharing url (#2307) 2025-04-24 20:25:46 +08:00
László Várady
c62644759c
fix(ui): fix incomplete border color on hover for tags (#2359) 2025-04-24 20:23:43 +08:00
Cotes Chung
7708adbf30
fix: recognize global theme mode (#2357) 2025-04-16 18:08:43 +08:00
Delyn Choong
167c98c781
feat(i18n): add Catalan Spanish locale translation (#2349) 2025-04-13 22:16:47 +08:00
László Várady
f7449299e8
fix: prevent the search bar from moving when focused (#2336) 2025-04-07 19:36:32 +08:00
Alejandro
db40db6d3d
chore: add parameter in search-results.html (#2330) 2025-04-05 07:28:29 +08:00
nakamura
571c90f130
feat(i18n): add Japanese locale (#2295) 2025-03-29 03:54:54 +08:00
Türkalp Burak KAYRANCIOĞLU
54d4d59d22
perf(seo): improve accessibility and aligns with best practices (#2289) 2025-03-08 22:24:47 +08:00
Corey Goldberg
e3158642c3
docs: fix typo in 2019-08-08-write-a-new-post.md (#2281)
Signed-off-by: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com>
2025-03-05 05:06:37 +08:00
MasihGhaznavi
7d4d35cd10
feat(i18n): add persian language (#2238) 2025-02-09 14:28:39 +08:00
algorithmic-parallels
231956d77a
docs: using long form Jekyll subcommand (#2231) 2025-02-06 13:27:54 +08:00
Cotes Chung
0eb7efa7f5
fix(search): avoid missing spaces between paragraphs in search results (#2199)
- Use a common post-snippet for search results to avoid line break issues
- Reduce Jekyll include files to speed up the build
- Remove outdated key from search.json
2025-01-20 21:27:18 +08:00
semantic-release-bot
e44c048aef Merge branch 'production' 2024-12-21 19:22:37 +00:00
semantic-release-bot
5e41d874b3 chore(release): 7.2.4
## [7.2.4](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.2.3...v7.2.4) (2024-12-21)

### Bug Fixes

* toc not visible when switching from mobile to desktop mode ([#2139](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2139)) ([32051da](32051dad03))
* **ui:** left borderline of TOC is notched ([#2140](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2140)) ([8a4d0bc](8a4d0bc4ee))
2024-12-21 19:22:22 +00:00
Cotes Chung
774ee93d78
Release v7.2.4 (#2141) 2024-12-22 03:21:28 +08:00
Cotes Chung
8a4d0bc4ee
fix(ui): left borderline of TOC is notched (#2140) 2024-12-22 03:11:20 +08:00
Cotes Chung
1b93f6db9b
docs: update the setting name for the comments 2024-12-22 02:32:03 +08:00
Cotes Chung
32051dad03
fix: toc not visible when switching from mobile to desktop mode (#2139) 2024-12-22 02:29:29 +08:00
semantic-release-bot
c12875fdba Merge branch 'production' 2024-12-15 13:06:04 +00:00
semantic-release-bot
c174f62f26 chore(release): 7.2.3
## [7.2.3](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.2.2...v7.2.3) (2024-12-15)

### Bug Fixes

* refreshing mermaid theme may fail ([#2113](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2113)) ([2f00d41](2f00d41861))
* **ui:** gap between TOC entries is inconsistent ([#2119](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2119)) ([1b4e318](1b4e318dc1))
* **ui:** slow script loading hides TOC fade-up effect in desktop ([#2120](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2120)) ([e0c3faf](e0c3fafa47))
2024-12-15 13:05:48 +00:00
Cotes Chung
e741aa43cf
Merge branch 'hotfix/7.2.3' into production 2024-12-15 21:04:09 +08:00
Cotes Chung
e0c3fafa47
fix(ui): slow script loading hides TOC fade-up effect in desktop (#2120) 2024-12-15 14:51:51 +08:00
Cotes Chung
1b4e318dc1
fix(ui): gap between TOC entries is inconsistent (#2119)
In desktop mode, H2 and the first sub-level H3 in the TOC are too close.
2024-12-15 14:43:07 +08:00
Cotes Chung
2f00d41861
fix: refreshing mermaid theme may fail (#2113) 2024-12-12 01:24:37 +08:00
semantic-release-bot
f40fa6a13c Merge branch 'production' 2024-12-06 17:04:04 +00:00
semantic-release-bot
0360c9e90b chore(release): 7.2.2
## [7.2.2](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.2.1...v7.2.2) (2024-12-06)

### Bug Fixes

* js files in subdirectories are excluded from the site output ([#2101](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2101)) ([f55cc31](f55cc31dbd))
2024-12-06 17:03:47 +00:00
Cotes Chung
d87c2de675
Merge branch 'hotfix/7.2.2' into production 2024-12-07 00:57:46 +08:00
Cotes Chung
f55cc31dbd
fix: js files in subdirectories are excluded from the site output (#2101) 2024-12-07 00:55:47 +08:00
cheese
981ddba30e
feat(i18n): add Dutch locale (#2076) 2024-12-05 21:38:06 +08:00
semantic-release-bot
4925a58bf5 Merge branch 'production' 2024-12-05 13:34:00 +00:00
semantic-release-bot
7630356a94 chore(release): 7.2.1
## [7.2.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.2.0...v7.2.1) (2024-12-05)

### Bug Fixes

* **build:** exclude `purgecss.js` from output files ([#2090](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2090)) ([976e1a1](976e1a184b))
* correct the import condition for theme script ([#2075](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2075)) ([a16aa7d](a16aa7d41e))
* ensure pageviews are fetched after DOM is loaded ([#2071](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2071)) ([b4019f3](b4019f3517))
* **toc:** resume fade up animation in desktop mode ([#2085](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2085)) ([8280adb](8280adb901))
2024-12-05 13:33:44 +00:00
Cotes Chung
6c112c641a
Merge branch 'master' into production 2024-12-05 21:32:17 +08:00
Cotes Chung
976e1a184b
fix(build): exclude purgecss.js from output files (#2090) 2024-12-05 21:28:37 +08:00
Cotes Chung
7ea3545ba3
refactor: reduce the height of the TOC bottom overlay in desktop mode 2024-12-05 21:09:07 +08:00
Cotes Chung
8280adb901
fix(toc): resume fade up animation in desktop mode (#2085) 2024-12-03 22:41:28 +08:00
Cotes Chung
4180992272
style: add indentation to js code 2024-12-03 22:22:20 +08:00
Alexander Fuks
a16aa7d41e
fix: correct the import condition for theme script (#2075) 2024-12-01 04:34:12 +08:00
Cotes Chung
8e55e4dcb2
build: correct the js rollup watch path (#2074)
1. Correct the rollup watch path
2. Avoid registering watch listeners redundantly across multiple tasks
2024-12-01 04:20:47 +08:00
Alexander Fuks
b4019f3517
fix: ensure pageviews are fetched after DOM is loaded (#2071) 2024-11-30 23:07:53 +03:00
semantic-release-bot
2966fc174d Merge branch 'production' 2024-11-28 08:59:03 +00:00
semantic-release-bot
3df83fd0d9 chore(release): 7.2.0
## [7.2.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.1.1...v7.2.0) (2024-11-28)

### Features

* show toc on mobile screens ([#1964](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1964)) ([8a064a5](8a064a5e5a))
* support vertical scrolling for toc in desktop mode ([#2064](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2064)) ([5265b03](5265b03974))

### Bug Fixes

* pagination error when pinned posts exceed the page size ([#1965](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1965)) ([93f616b](93f616b25d))

### Improvements

* modular sass architecture ([#2052](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2052)) ([35c794c](35c794cf58))
* speed up page rendering and jekyll build process ([#2034](https://github.com/cotes2020/jekyll-theme-chirpy/issues/2034)) ([65f960c](65f960c31a))
2024-11-28 08:58:47 +00:00
Cotes Chung
82ba82e6da
Merge branch 'master' into production 2024-11-28 16:56:02 +08:00
Cotes Chung
5265b03974
feat: support vertical scrolling for toc in desktop mode (#2064) 2024-11-28 05:40:57 +08:00
Cotes Chung
11647697bb
build(deps): update dependencies version 2024-11-25 03:55:11 +08:00
Cotes Chung
5756b8fc26
build(deps-dev): upgrade dependencies
Close #2058
2024-11-25 00:19:56 +08:00
Cotes Chung
35c794cf58
perf: modular sass architecture (#2052)
- Modularized the Sass architecture to enhance code maintainability and reduce the output file size
- Replaced deprecated `@import` with `@use` / `@forward`
2024-11-25 00:05:28 +08:00
Cotes Chung
c69914effc
ci: avoid repeated runs of stylelint (#2057) 2024-11-24 04:33:46 +08:00
Cotes Chung
65f960c31a
perf: speed up page rendering and jekyll build process (#2034)
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Style Lint / stylelint (push) Has been cancelled
Lint Commit Messages / commitlint (push) Has been cancelled
Build and Deploy / build (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled
- Ensure inline scripts execute after the DOM has fully loaded.
- Use Rollup to bundle the theme-mode and Mermaid scripts, reducing the number of Jekyll include snippets.
2024-11-16 22:49:55 +08:00
Cotes Chung
d51345e297
ci: reduce unnecessary pr-filter runs (#2033)
- Checking the repository of the PR is more effective than checking the label to identify bot-initiated PRs
- This change also allows more flexible PR body definitions for developers with write access to the repository
2024-11-08 22:35:18 +08:00
Cotes Chung
2f844978aa
chore: change stale label to inactive 2024-11-08 22:15:31 +08:00
Supreeth Mysore Venkatesh
42dea8ee29
build(deps): update wdm gem version for compatibility (#2028) 2024-11-04 00:45:59 +08:00
Alexander Fuks
86b13c917f
chore: improve feed interoperability (#2024) 2024-11-01 14:39:03 +04:00
Cotes Chung
4ef3cd8efc
ci: improve workflow triggers (#2017)
- Unchain commit-lint and CI
  - Even if a commit does not meet the CI path filter, it still needs to lint the commit message.
- Unchain PR filter and CI
  - The CI workflow needs to be triggered when the commits in a pull request are modified.
- Allow manual publishing
  - Sometimes `semantic-release` will error out due to commit messages referencing discussions, but this does not affect the final RubyGems/GitHub Release. In such cases, manual triggering of the publish process is needed to complete the remaining publishing steps.
2024-10-29 22:56:32 +08:00
Cotes Chung
c7f967529c
ci: skip test for invalid PRs (#2013) 2024-10-26 16:58:07 +08:00
Cotes Chung
74ed06321c
ci: block invalid pull requests (#2010) 2024-10-25 19:48:11 +08:00
Cotes Chung
d4f7f39ece
refactor: simplify sidebar animation 2024-10-22 11:13:06 +08:00
Cotes Chung
c1bd9eb9ee
refactor: reduce duplicate scss 2024-10-20 13:52:42 +08:00
Cotes Chung
6f461132c0
refactor: improve toc popup module 2024-10-19 21:15:31 +08:00
Alexander Fuks
03e302cbf6
chore: close toc-popup gracefully with Esc key (#1990) 2024-10-14 01:16:25 +08:00
Alexander Fuks
8a064a5e5a
feat: show toc on mobile screens (#1964) 2024-10-11 22:32:10 +08:00
Bence Boros
740bd84c51
chore(i18n): update hungarian translation (#1976) 2024-10-01 23:19:39 +08:00
Cotes Chung
93f616b25d
fix: pagination error when pinned posts exceed the page size (#1965) 2024-09-26 22:30:56 +08:00
Alexander Fuks
e6b87d2811
chore: remove h1 element from site title (#1960) 2024-09-24 08:21:34 +08:00
semantic-release-bot
73749067c5 Merge branch 'production' 2024-09-23 11:56:46 +00:00
semantic-release-bot
fd0df8320f chore(release): 7.1.1
## [7.1.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.1.0...v7.1.1) (2024-09-23)

### Bug Fixes

* **i18n:** correct fr-FR translations ([#1949](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1949)) ([367262e](367262e74d))
* **pwa:** site baseurl not passed to `app.js` ([#1955](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1955)) ([5a63244](5a63244721))
2024-09-23 11:56:31 +00:00
Cotes Chung
fbcdf8ce85
Merge branch 'master' into production 2024-09-23 19:48:06 +08:00
Cotes Chung
fac6116af1
build(dev-deps): bump 7 dependencies versions 2024-09-23 19:41:28 +08:00
Cotes Chung
5a63244721
fix(pwa): site baseurl not passed to app.js (#1955) 2024-09-18 22:32:26 +08:00
Cotes Chung
3ab3b844d2
refactor: replace deprecated meta element
Replace `apple-mobile-web-app-capable` with `mobile-web-app-capable`
2024-09-18 21:41:08 +08:00
denis-games
367262e74d
fix(i18n): correct fr-FR translations (#1949)
Co-authored-by: Denis Jean <dj@denisjean.fr>
2024-09-16 20:38:46 +08:00
semantic-release-bot
cbc93193e1 Merge branch 'production' 2024-08-27 07:29:10 +00:00
semantic-release-bot
a784f0a0f9 chore(release): 7.1.0
## [7.1.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v7.0.1...v7.1.0) (2024-08-27)

### Features

* add Bluesky social links ([#1759](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1759)) ([0102aba](0102abae06))
* add Reddit social option ([#1836](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1836)) ([8673e13](8673e1335f))
* add Threads social links ([#1837](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1837)) ([e3a78b6](e3a78b6243))
* **analytics:** add fathom analytics ([#1913](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1913)) ([befc4ce](befc4ce9c5))
* **dev:** add vscode tasks ([#1843](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1843)) ([e4db1a1](e4db1a176f))
* **dev:** support vscode dev-container ([#1781](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1781)) ([1e3d4a6](1e3d4a6323))
* **ui:** improve block quote layout ([80bd792](80bd7928a0))
* **ui:** improve visibility of inline code ([#1831](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1831)) ([c876731](c876731901))
* **ui:** make `info-prompt` icon looks like the letter "i" ([#1835](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1835)) ([a07a57e](a07a57ec92))
* **ui:** set `<kbd>` font to 'Lato' ([64c7262](64c7262245))

### Bug Fixes

* adapt the giscus localization parameter ([#1810](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1810)) ([0709854](0709854dc8))
* avoid caching pageviews data ([#1849](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1849)) ([979f86c](979f86cf64))
* remove extra dual-mode images from lightbox ([#1883](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1883)) ([5c5910f](5c5910f1fc))
2024-08-27 07:28:55 +00:00
Cotes Chung
a2bf5dc58e
Merge branch 'master' into production 2024-08-27 15:22:53 +08:00
Cotes Chung
8b7dba71e3
docs: update tutorial and readme
Change Dev Containers logo in README:

Simple Icons has removed all Microsoft icons due to copyright restrictions, see <https://github.com/simple-icons/simple-icons/issues/11236>
2024-08-27 15:18:52 +08:00
Cotes Chung
fc3d101258
build: improve the JS build for PWA (#1923) 2024-08-26 16:49:48 +08:00
Cotes Chung
604e01eb36
chore(deps): correct Tocbot version number 2024-08-26 00:49:05 +08:00
Cotes Chung
31e19c6d0f
refactor(ui): standardize the border radius (#1920)
Impact:
- Increase the border radius of inline code and `<kbd>` tags
- Variable `$base-radius` renamed to `$radius-lg`
2024-08-25 18:17:38 +08:00
Cotes Chung
5f4dab1745
build: upgrade dependencies 2024-08-25 01:18:34 +08:00
Cotes Chung
8cfd721494
build(deps-dev): bump the dev-deps 2024-08-25 00:25:29 +08:00
Cotes Chung
64c7262245
feat(ui): set <kbd> font to 'Lato' 2024-08-25 00:12:28 +08:00
Cotes Chung
707a209424
refactor: improve heading layout 2024-08-25 00:12:00 +08:00
Cotes Chung
80bd7928a0
feat(ui): improve block quote layout 2024-08-24 22:27:35 +08:00
Julius Gamanyi
befc4ce9c5
feat(analytics): add fathom analytics (#1913) 2024-08-22 01:21:29 +08:00
Cotes Chung
bf6c996c4e
chore: move entries in git-ignore 2024-08-21 14:31:22 +08:00
Cotes Chung
99eaf6089e
chore: remove duplicate config 2024-08-21 14:28:57 +08:00
Cotes Chung
efd2941ce0
build: resume platform-specific dependencies 2024-08-21 14:28:14 +08:00
Cotes Chung
7f83c3d00d
refactor: improve the efficiency of GLightbox switching
Repeatedly using `GLightbox.destroy()` (>= 4 times) will cause `GLightbox` to fail to generate new objects
2024-08-20 00:04:09 +08:00
Cotes Chung
d74bfaeda2
chore(tools): improve the init-script 2024-08-19 05:10:34 +08:00
Andrew
23729c9c8f
refactor: update the sass mixed declarations (#1872)
See: https://sass-lang.com/d/mixed-decls
2024-08-19 05:10:34 +08:00
Cotes Chung
e347d0632f
build: update ruby version requirements
`html-proofer` 5.x requires Ruby `>= 3.1, < 4.0`
2024-08-19 05:10:33 +08:00
Cotes Chung
35fdea0c4f
docs: add devcontainers tutorial (#1844) 2024-08-19 05:10:33 +08:00
Cotes Chung
5c5910f1fc
fix: remove extra dual-mode images from lightbox (#1883) 2024-08-19 05:10:33 +08:00
Cotes Chung
b641b36480
ci: set node version to LTS
There are some problems with the latest version.

See: https://github.com/cotes2020/jekyll-theme-chirpy/actions/runs/9977150040
2024-07-18 01:20:17 +08:00
Alexander Fuks
979f86cf64
fix: avoid caching pageviews data (#1849) 2024-07-17 23:32:48 +08:00
Cotes Chung
8c30f0a9c3
build(dev): support for running tasks in macOS 2024-07-12 02:03:52 +08:00
Alexander Fuks
e4db1a176f
feat(dev): add vscode tasks (#1843) 2024-07-11 04:22:37 +08:00
Daniel Singleton
e3a78b6243
feat: add Threads social links (#1837) 2024-07-06 04:53:02 +08:00
Daniel Singleton
8673e1335f
feat: add Reddit social option (#1836) 2024-07-05 20:03:01 +08:00
Cotes Chung
a07a57ec92
feat(ui): make info-prompt icon looks like the letter "i" (#1835) 2024-07-04 02:21:22 +08:00
dependabot[bot]
db9e58bab2
build(deps-dev): bump the dev-deps group with 3 updates (#1824)
Updates the requirements on [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core), [@babel/plugin-transform-class-properties](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-properties) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) to permit the latest version.

Updates `@babel/core` to 7.24.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.7/packages/babel-core)

Updates `@babel/plugin-transform-class-properties` to 7.24.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.7/packages/babel-plugin-transform-class-properties)

Updates `@babel/preset-env` to 7.24.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.7/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  dependency-group: dev-deps
- dependency-name: "@babel/plugin-transform-class-properties"
  dependency-type: direct:development
  dependency-group: dev-deps
- dependency-name: "@babel/preset-env"
  dependency-type: direct:development
  dependency-group: dev-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-04 01:49:30 +08:00
Cotes Chung
e6532ad864
refactor: fix typos in locale variable
statment -> statement
2024-07-04 01:42:29 +08:00
Cotes Chung
fbba0a4204
chore: fix typos in project files and docs 2024-07-02 08:44:07 +08:00
Cotes Chung
c876731901
feat(ui): improve visibility of inline code (#1831) 2024-07-01 07:02:36 +08:00
Cotes Chung
9ca7519239
docs: unify the style of badges 2024-06-27 05:30:53 +08:00
Cotes Chung
0709854dc8
fix: adapt the giscus localization parameter (#1810) 2024-06-16 22:25:41 +08:00
Cotes Chung
f1d35832f4
build(devcontainer): add omz plugins & verify extension signature
VSCode fixed signature validation hangs in v1.90
2024-06-08 00:54:15 +08:00
Cotes Chung
cf853f14e4
chore: upgrade husky v9 settings 2024-06-07 19:27:54 +08:00
Cotes Chung
7ca9c59784
build(deps-dev): remove package rollup-plugin-license (#1796)
The `rollup-plugin-license` has been using too many deprecated dependencies, so it is necessary to remove it.

As an alternative, this changes uses Rollup `output.banner` to insert copyright information. Since `terser` runs after `output`, it is not possible to insert the Front Matter defining permlink for `sw.js` through the same way (Jekyll Front Matter is YAML rather than JS, which would cause errors with terser).

Therefore, _Jekyll Collection_ is now used to add permlink to `sw.js`, with the collection named `app`, and the directory placed in `_app`. This directory is not tracked by git, but it will be included when building the gem.
2024-06-05 23:51:10 +08:00
Cotes Chung
250880c088
docs: change ordering of badges 2024-06-05 01:12:25 +08:00
Cotes Chung
88b844ce80
build(deps): improve dependency grouping 2024-06-04 19:26:33 +08:00
Cotes Chung
3b46629dc0
build(deps-dev): bump the npm group across 1 directory with 8 updates
Updates the requirements on [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core), [@babel/plugin-transform-class-properties](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-properties), [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env), [conventional-changelog-conventionalcommits](https://github.com/conventional-changelog/conventional-changelog/tree/HEAD/packages/conventional-changelog-conventionalcommits), [rollup](https://github.com/rollup/rollup), [rollup-plugin-license](https://github.com/mjeanroy/rollup-plugin-license), [semantic-release](https://github.com/semantic-release/semantic-release) and [stylelint](https://github.com/stylelint/stylelint) to permit the latest version.

Updates `@babel/core` to 7.24.6
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.6/packages/babel-core)

Updates `@babel/plugin-transform-class-properties` to 7.24.6
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.6/packages/babel-plugin-transform-class-properties)

Updates `@babel/preset-env` to 7.24.6
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.6/packages/babel-preset-env)

Updates `conventional-changelog-conventionalcommits` from 7.0.2 to 8.0.0
- [Release notes](https://github.com/conventional-changelog/conventional-changelog/releases)
- [Changelog](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-conventionalcommits/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/conventional-changelog/commits/conventional-changelog-conventionalcommits-v8.0.0/packages/conventional-changelog-conventionalcommits)

Updates `rollup` to 4.18.0
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.17.2...v4.18.0)

Updates `rollup-plugin-license` to 3.4.0
- [Changelog](https://github.com/mjeanroy/rollup-plugin-license/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mjeanroy/rollup-plugin-license/compare/v3.3.1...v3.4.0)

Updates `semantic-release` from 23.1.1 to 24.0.0
- [Release notes](https://github.com/semantic-release/semantic-release/releases)
- [Commits](https://github.com/semantic-release/semantic-release/compare/v23.1.1...v24.0.0)

Updates `stylelint` to 16.6.1
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.5.0...16.6.1)
2024-06-04 01:36:27 +08:00
Cotes Chung
1e3d4a6323
feat(dev): support vscode dev-container (#1781) 2024-06-03 21:12:54 +08:00
Cotes Chung
1c5fa0880d
refactor: restore shell script extensions
Without an extension, the shell script configuration in `.gitattribute` will not work.
2024-06-01 04:15:09 +08:00
Cotes Chung
64ae7a3671
docs: correct markdown syntax of tutorial (#1787) 2024-05-30 03:33:35 +08:00
Jason
0102abae06
feat: add Bluesky social links (#1759) 2024-05-18 19:05:09 +08:00
semantic-release-bot
6cb1a5ac52 Merge branch 'production' 2024-05-18 11:01:37 +00:00
semantic-release-bot
90a4cc76bb Merge branch 'production' 2024-05-11 07:30:47 +00:00
160 changed files with 4946 additions and 3265 deletions

View File

@ -0,0 +1,29 @@
{
"name": "Jekyll",
"image": "mcr.microsoft.com/devcontainers/jekyll:2-bullseye",
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "zsh"
},
"extensions": [
// Liquid tags auto-complete
"killalau.vscode-liquid-snippets",
// Liquid syntax highlighting and formatting
"Shopify.theme-check-vscode",
// Shell
"timonwong.shellcheck",
"mkhl.shfmt",
// Common formatter
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode",
"stylelint.vscode-stylelint",
"yzhang.markdown-all-in-one",
// Git
"mhutchie.git-graph"
]
}
}
}

View File

@ -0,0 +1,18 @@
#!/usr/bin/env bash
if [ -f package.json ]; then
bash -i -c "nvm install --lts && nvm install-latest-npm"
npm i
npm run build
fi
# Install dependencies for shfmt extension
curl -sS https://webi.sh/shfmt | sh &>/dev/null
# Add OMZ plugins
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
sed -i -E "s/^(plugins=\()(git)(\))/\1\2 zsh-syntax-highlighting zsh-autosuggestions\3/" ~/.zshrc
# Avoid git log use less
echo -e "\nunset LESS" >>~/.zshrc

View File

@ -8,11 +8,10 @@ updates:
directory: "/"
versioning-strategy: increase
groups:
npm:
update-types:
- "major"
- "minor"
- "patch"
prod-deps:
dependency-type: production
dev-deps:
dependency-type: development
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
@ -23,3 +22,7 @@ updates:
- "major"
schedule:
interval: "weekly"
- package-ecosystem: "devcontainers"
directory: "/"
schedule:
interval: weekly

View File

@ -2,13 +2,12 @@ name: CD
on:
push:
branches:
- production
tags-ignore:
- "**"
branches: [production]
tags-ignore: ["**"]
jobs:
release:
if: ${{ ! startsWith(github.event.head_commit.message, 'chore(release)') }}
permissions:
contents: write
issues: write
@ -24,7 +23,7 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: latest
node-version: lts/*
- run: npm install
- run: npx semantic-release

View File

@ -1,17 +1,25 @@
name: "CI"
name: CI
on:
push:
branches:
- "master"
- "hotfix/**"
- master
- "hotfix/*"
paths-ignore:
- ".github/**"
- "!.github/workflows/ci.yml"
- ".gitignore"
- .gitignore
- "docs/**"
- "README.md"
- "LICENSE"
- README.md
- LICENSE
pull_request:
paths-ignore:
- ".github/**"
- "!.github/workflows/ci.yml"
- .gitignore
- "docs/**"
- README.md
- LICENSE
jobs:
build:
@ -36,10 +44,10 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: latest
node-version: lts/*
- name: Build Assets
run: npm i && npm run build
- name: Test Site
run: bash tools/test
run: bash tools/test.sh

View File

@ -1,5 +1,11 @@
name: Lint Commit Messages
on: pull_request
on:
push:
branches:
- master
- "hotfix/*"
pull_request:
jobs:
commitlint:

25
.github/workflows/pr-filter.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: PR Filter
on:
pull_request_target:
types: [opened, reopened]
jobs:
check-template:
if: github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Check PR Content
id: intercept
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const script = require('.github/workflows/scripts/pr-filter.js');
await script({ github, context, core });

View File

@ -10,6 +10,7 @@ on:
required: true
BUILDER:
required: true
workflow_dispatch:
jobs:
launch:

36
.github/workflows/scripts/pr-filter.js vendored Normal file
View File

@ -0,0 +1,36 @@
function hasTypes(markdown) {
return /## Type of change/.test(markdown) && /-\s\[x\]/i.test(markdown);
}
function hasDescription(markdown) {
return (
/## Description/.test(markdown) &&
!/## Description\s*\n\s*(##|\s*$)/.test(markdown)
);
}
module.exports = async ({ github, context, core }) => {
const pr = context.payload.pull_request;
const body = pr.body === null ? '' : pr.body;
const markdown = body.replace(/<!--[\s\S]*?-->/g, '');
const action = context.payload.action;
const isValid =
markdown !== '' && hasTypes(markdown) && hasDescription(markdown);
if (!isValid) {
await github.rest.pulls.update({
...context.repo,
pull_number: pr.number,
state: 'closed'
});
await github.rest.issues.createComment({
...context.repo,
issue_number: pr.number,
body: `Oops, it seems you've ${action} an invalid pull request. No worries, we'll close it for you.`
});
core.setFailed('PR content does not meet template requirements.');
}
};

View File

@ -9,7 +9,7 @@ permissions:
pull-requests: write
env:
STALE_LABEL: stale
STALE_LABEL: inactive
EXEMPT_LABELS: "pending,planning,in progress"
MESSAGE: >
This conversation has been automatically marked as stale because it has not had recent activity.

View File

@ -1,23 +0,0 @@
name: "Style Lint"
on:
push:
branches: ["master", "hotfix/**"]
paths: ["_sass/**/*.scss"]
pull_request:
paths: ["_sass/**/*.scss"]
jobs:
stylelint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: latest
- run: npm i
- run: npm test

5
.gitignore vendored
View File

@ -17,10 +17,11 @@ package-lock.json
# IDE configurations
.idea
.vscode
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
!.vscode/tasks.json
# Misc
_sass/dist
_sass/vendors
assets/js/dist

5
.husky/commit-msg Executable file → Normal file
View File

@ -1,4 +1 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit ${1}
npx --no -- commitlint --edit $1

31
.stylelintrc.json Normal file
View File

@ -0,0 +1,31 @@
{
"ignoreFiles": ["_sass/vendors/**"],
"extends": "stylelint-config-standard-scss",
"rules": {
"no-descending-specificity": null,
"shorthand-property-no-redundant-values": null,
"at-rule-no-vendor-prefix": null,
"property-no-vendor-prefix": null,
"selector-no-vendor-prefix": null,
"value-no-vendor-prefix": null,
"color-function-notation": "legacy",
"alpha-value-notation": "number",
"selector-not-notation": "simple",
"color-hex-length": "long",
"declaration-block-single-line-max-declarations": 3,
"scss/operator-no-newline-after": null,
"rule-empty-line-before": [
"always",
{
"ignore": ["after-comment", "first-nested"]
}
],
"value-keyword-case": [
"lower",
{
"ignoreProperties": ["/^\\$/"]
}
],
"media-feature-range-notation": "prefix"
}
}

View File

@ -1,13 +1,3 @@
{
"recommendations": [
// Liquid tags auto-complete
"killalau.vscode-liquid-snippets",
// Liquid syntax highlighting and formatting
"Shopify.theme-check-vscode",
// Common formatter
"esbenp.prettier-vscode",
"foxundermoon.shell-format",
"stylelint.vscode-stylelint",
"yzhang.markdown-all-in-one"
]
"recommendations": ["ms-vscode-remote.remote-containers"]
}

11
.vscode/settings.json vendored
View File

@ -2,7 +2,6 @@
// Prettier
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"prettier.trailingComma": "none",
// Shopify Liquid
"files.associations": {
"*.html": "liquid"
@ -15,13 +14,17 @@
"editor.defaultFormatter": "Shopify.theme-check-vscode"
},
"[shellscript]": {
"editor.defaultFormatter": "foxundermoon.shell-format"
"editor.defaultFormatter": "mkhl.shfmt"
},
// Disable vscode built-in stylelint
"css.validate": false,
"scss.validate": false,
"less.validate": false,
// Stylint extension settings
"stylelint.snippet": ["css", "less", "postcss", "scss"],
"stylelint.validate": ["css", "less", "postcss", "scss"]
"stylelint.snippet": ["css", "scss"],
"stylelint.validate": ["css", "scss"],
// Run tasks in macOS
"terminal.integrated.profiles.osx": {
"zsh": { "path": "/bin/zsh", "args": ["-l", "-i"] }
}
}

64
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,64 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Jekyll Server",
"type": "shell",
"command": "./tools/run.sh",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"detail": "Runs the Jekyll server with live reload."
},
{
"label": "Build Jekyll Site",
"type": "shell",
"command": "./tools/test.sh",
"group": {
"kind": "build"
},
"problemMatcher": [],
"detail": "Build the Jekyll site for production."
},
{
"label": "Build JS (watch)",
"type": "shell",
"command": "npm run watch:js",
"group": {
"kind": "build"
},
"problemMatcher": [],
"detail": "Build JS files in watch mode."
},
{
"label": "Build CSS",
"type": "shell",
"command": "npm run build:css",
"group": {
"kind": "build"
},
"problemMatcher": [],
"detail": "Build CSS files."
},
{
"label": "Build JS & CSS",
"type": "shell",
"command": "npm run build",
"group": {
"kind": "build"
},
"problemMatcher": [],
"detail": "Build JS & CSS for production."
},
{
"label": "Run Jekyll Server + Build JS (watch)",
"dependsOn": ["Run Jekyll Server", "Build JS (watch)"],
"group": {
"kind": "build"
},
"detail": "Runs both the Jekyll server with live reload and build JS files in watch mode."
}
]
}

View File

@ -4,6 +4,11 @@ source "https://rubygems.org"
gemspec
group :test do
gem "html-proofer", "~> 5.0"
gem "html-proofer", "~> 5.0", group: :test
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end
gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]

View File

@ -6,11 +6,11 @@
A minimal, responsive, and feature-rich Jekyll theme for technical writing.
[![Gem Version](https://img.shields.io/gem/v/jekyll-theme-chirpy?color=brightgreen)][gem]&nbsp;
[![CI](https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml/badge.svg?branch=master&event=push)][ci]&nbsp;
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/4e556876a3c54d5e8f2d2857c4f43894)][codacy]&nbsp;
[![GitHub license](https://img.shields.io/github/license/cotes2020/jekyll-theme-chirpy.svg)][license]&nbsp;
[![996.icu](https://img.shields.io/badge/link-996.icu-%23FF4D5B.svg)](https://996.icu)
[![CI](https://img.shields.io/github/actions/workflow/status/cotes2020/jekyll-theme-chirpy/ci.yml?logo=github)][ci]&nbsp;
[![Codacy Badge](https://img.shields.io/codacy/grade/4e556876a3c54d5e8f2d2857c4f43894?logo=codacy)][codacy]&nbsp;
[![GitHub license](https://img.shields.io/github/license/cotes2020/jekyll-theme-chirpy?color=goldenrod)][license]&nbsp;
[![Gem Version](https://img.shields.io/gem/v/jekyll-theme-chirpy?&logo=RubyGems&logoColor=ghostwhite&label=gem&color=orange)][gem]&nbsp;
[![Open in Dev Containers](https://img.shields.io/badge/Dev_Containers-Open-deepskyblue?logo=linuxcontainers)][open-container]
[**Live Demo** →][demo]
@ -72,6 +72,7 @@ This project is published under [MIT License][license].
[ci]: https://github.com/cotes2020/jekyll-theme-chirpy/actions/workflows/ci.yml?query=event%3Apush+branch%3Amaster
[codacy]: https://app.codacy.com/gh/cotes2020/jekyll-theme-chirpy/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade
[license]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/LICENSE
[open-container]: https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/cotes2020/jekyll-theme-chirpy
[jekyllrb]: https://jekyllrb.com/
[clipartmax]: https://www.clipartmax.com/middle/m2i8b1m2K9Z5m2K9_ant-clipart-childrens-ant-cute/
[demo]: https://cotes2020.github.io/chirpy-demo/

View File

@ -16,20 +16,20 @@ timezone: Asia/Shanghai
title: Chirpy # the main title
tagline: A text-focused Jekyll theme # it will display as the sub-title
tagline: A text-focused Jekyll theme # it will display as the subtitle
description: >- # used by seo meta and the atom feed
A minimal, responsive and feature-rich Jekyll theme for technical writing.
# Fill in the protocol & hostname for your site.
# e.g. 'https://username.github.io', note that it does not end with a '/'.
# E.g. 'https://username.github.io', note that it does not end with a '/'.
url: ""
github:
username: github_username # change to your github username
username: github_username # change to your GitHub username
twitter:
username: twitter_username # change to your twitter username
username: twitter_username # change to your Twitter username
social:
# Change to your full name.
@ -38,8 +38,8 @@ social:
email: example@domain.com # change to your email address
links:
# The first element serves as the copyright owner's link
- https://twitter.com/username # change to your twitter homepage
- https://github.com/username # change to your github homepage
- https://twitter.com/username # change to your Twitter homepage
- https://github.com/username # change to your GitHub homepage
# Uncomment below to add more social links
# - https://www.facebook.com/username
# - https://www.linkedin.com/in/username
@ -70,8 +70,10 @@ analytics:
domain: # fill in your Matomo domain
cloudflare:
id: # fill in your Cloudflare Web Analytics token
fathom:
id: # fill in your Fathom Site ID
# Pageviews settings
# Page views settings
pageviews:
provider: # now only supports 'goatcounter'
@ -83,8 +85,8 @@ pageviews:
#
# Available options:
#
# light - Use the light color scheme
# dark - Use the dark color scheme
# light Use the light color scheme
# dark Use the dark color scheme
#
theme_mode: # [light | dark]
@ -106,7 +108,7 @@ social_preview_image: # string, local or CORS resources
toc: true
comments:
# Global switch for the post comment system. Keeping it empty means disabled.
# Global switch for the post-comment system. Keeping it empty means disabled.
provider: # [disqus | utterances | giscus]
# The provider options are as follows:
disqus:
@ -136,9 +138,9 @@ assets:
env: # [development | production]
pwa:
enabled: true # the option for PWA feature (installable)
enabled: true # The option for PWA feature (installable)
cache:
enabled: true # the option for PWA offline cache
enabled: true # The option for PWA offline cache
# Paths defined here will be excluded from the PWA cache.
# Usually its value is the `baseurl` of another website that
# shares the same domain name as the current website.
@ -190,10 +192,6 @@ defaults:
values:
layout: page
permalink: /:title/
- scope:
path: assets/js/dist
values:
swcache: true
sass:
style: compressed
@ -214,8 +212,9 @@ exclude:
- tools
- README.md
- LICENSE
- purgecss.js
- "*.config.js"
- package*.json
- "package*.json"
jekyll-archives:
enabled: [categories, tags]

View File

@ -26,3 +26,15 @@
# - type: stack-overflow
# icon: 'fab fa-stack-overflow'
# url: '' # Fill with your stackoverflow homepage
#
# - type: bluesky
# icon: 'fa-brands fa-bluesky'
# url: '' # Fill with your Bluesky profile link
#
# - type: reddit
# icon: 'fa-brands fa-reddit'
# url: '' # Fill with your Reddit profile link
#
# - type: threads
# icon: 'fa-brands fa-threads'
# url: '' # Fill with your Threads profile link

View File

@ -43,7 +43,7 @@ copyright:
meta: باستخدام :PLATFORM السمة :THEME
not_found:
statment: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
statement: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة.
notification:
update_found: يتوفر اصدار جديد للمحتوى.

View File

@ -43,7 +43,7 @@ copyright:
meta: Създадено чрез :PLATFORM и :THEME тема
not_found:
statment: Съжалявам, но на този URL адрес няма налично съдържание.
statement: Съжалявам, но на този URL адрес няма налично съдържание.
notification:
update_found: Налична е нова версия на съдържанието.

84
_data/locales/ca-ES.yml Normal file
View File

@ -0,0 +1,84 @@
# The layout text of site
# ----- Commons label -----
layout:
post: Entrada
category: Categoria
tag: Etiqueta
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: Inici
categories: Categories
tags: Etiquetes
archives: Arxiu
about: Sobre
# the text displayed in the search bar & search results
search:
hint: Cercar
cancel: Cancel·lar
no_results: Ups! No s'han trobat resultats.
panel:
lastmod: Actualitzat recentment
trending_tags: Etiquetes populars
toc: Taula de continguts
copyright:
# Shown at the bottom of the post
license:
template: Aquesta entrada està llicenciada sota :LICENSE_NAME per l'autor.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: Alguns drets reservats.
verbose: >-
Excepte que s'indiqui explícitament, les entrades d'aquest blog estan llicenciades
sota la llicència Creative Commons Attribution 4.0 International (CC BY 4.0) per l'autor.
meta: Fet amb :PLATFORM utilitzant el tema :THEME
not_found:
statement: Ho sentim, hem perdut aquesta URL o apunta a alguna cosa que no existeix.
notification:
update_found: Hi ha una nova versió de contingut disponible.
update: Actualitzar
# ----- Posts related labels -----
post:
written_by: Per
posted: Publicat
updated: Actualitzat
words: paraules
pageview_measure: visites
read_time:
unit: min
prompt: " de lectura"
relate_posts: Entrades relacionades
share: Compartir
button:
next: Següent
previous: Anterior
copy_code:
succeed: Copiat!
share_link:
title: Copiar enllaç
succeed: Enllaç copiat!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%Y/%m/%d"
dayjs: "YYYY/MM/DD"
# categories page
categories:
category_measure: categories
post_measure: entrades

View File

@ -43,7 +43,7 @@ copyright:
meta: Použití :PLATFORM s motivem :THEME
not_found:
statment: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje.
statement: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje.
notification:
update_found: Je k dispozici nová verze obsahu.

86
_data/locales/da-DK.yml Normal file
View File

@ -0,0 +1,86 @@
# The layout text of site
# ----- Commons label -----
layout:
post: Opslag
category: Kategori
tag: Tag
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: Hjem
categories: Kategorier
tags: Tags
archives: Arkiv
about: Om siden
# the text displayed in the search bar & search results
search:
hint: søg
cancel: Afbryd
no_results: Ups! Ingen resultater fundet.
panel:
lastmod: Senest opdateret
trending_tags: Populære tags
toc: Indhold
copyright:
# Shown at the bottom of the post
license:
template: Dette opslag er licenseret under :LICENSE_NAME af forfatteren.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: Nogle rettigheder forbeholdes.
verbose: >-
Medmindre andet er angivet, er opslag på denne side beskyttet
under Creative Commons Attribution 4.0 International (CC BY 4.0) licensen af forfatteren.
# meta: Using the :THEME theme for :PLATFORM.
not_found:
statement: Beklager, vi har malpaceret denne URL, eller den peger på et sted, som ikke findes.
notification:
update_found: En ny version af indholdet er fundet!
update: Opdater
# ----- Posts related labels -----
post:
written_by: Af
posted: Udgivet
updated: Opdateret
words: ord
pageview_measure: visninger
read_time:
unit: min
prompt: læsetid
relate_posts: Læs videre
share: Del
button:
next: Nyere
previous: Ældre
copy_code:
succeed: Kopieret!
share_link:
title: Kopier link
succeed: Link kopieret!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%Y/%m/%d"
dayjs: "YYYY/MM/DD"
# categories page
categories:
category_measure:
singular: kategori
plural: kategorier
post_measure: opslag

View File

@ -42,7 +42,7 @@ copyright:
meta: Powered by :PLATFORM with :THEME theme
not_found:
statment: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource.
statement: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource.
notification:
update_found: Eine neue Version ist verfügbar.
@ -76,7 +76,7 @@ df:
post:
strftime: "%d.%m.%Y"
dayjs: "DD.MM.YYYY"
# categories page
categories:
category_measure:

90
_data/locales/dv‑MV.yml Normal file
View File

@ -0,0 +1,90 @@
# The layout text of site in Dhivehi (Maldives)
# ----- Commons label -----
layout:
post: ޕޯސްޓް
category: ނަތީޖާ
tag: ޓެގް
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: ހުންނަ
categories: ނަތީޖާތައް
tags: ޓެގްތައް
archives: އާރޗިވްސް
about: އިންސާން
# the text displayed in the search bar & search results
search:
hint: ސާރޗް
cancel: ކެންސަލް
no_results: އޮޕްސް! އެއްވެސް ނުފެނުނީ.
panel:
lastmod: އާދަމާ އޮޕްޑޭޓްކުރި
trending_tags: މަރާހު ޓެގްތައް
toc: ކޮންޓެންސް
copyright:
# Shown at the bottom of the post
license:
template: މި ޕޯސްޓް :LICENSE_NAME އިން ލައިސަންސްކުރާ ނުވަތަ މުޤައްރާއަށް.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: އެކީ ބާރަށް ހުށަހަޅާ.
verbose: >-
އަދި އެ ރަނގަޅުގައި ނުލާހެވެސް، މި ސައިޓުގެ ޕޯސްޓްތައް
މުޤައްރާއަށް Creative Commons Attribution 4.0 International (CC BY 4.0) ލައިސަންސްކުރަނީ.
meta: :PLATFORM އަށް :THEME ތީމް ބަލާލާށެވެ.
not_found:
statement: ސޯރީ، މި ޔޫ.އާރއެލް މަށެވެއްނެ ނުވަތަ އެކަމެއް ނުވެއެވެ.
notification:
update_found: ޔޫ ވާރޝަން ހުރިހާ.
update: އޮޕްޑޭޓް
# ----- Posts related labels -----
post:
written_by: ލެކްއޯލް
posted: ޕޯސްޓްކުރެވި
updated: އޮޕްޑޭޓްކުރެވި
words: ބަސް
pageview_measure: ބަނޑުކުރާ
read_time:
unit: މިނެޓް
prompt: އިސްކާރު
relate_posts: އެއްޗެހި ފަހުރަށްދަން
share: ސެއާރް
button:
next: އަދާވަނަ
previous: ކޮނޯނި
copy_code:
succeed: ކޮޕީ ކުރެވި!
share_link:
title: ލިންކް ކޮޕީ ކުރު
succeed: ލިންކް ހަދަންކުރެވި!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%b %e, %Y"
dayjs: "ll"
archives:
strftime: "%b"
dayjs: "MMM"
categories:
category_measure:
singular: ނަތީޖާ
plural: ނަތީޖާތައް
post_measure:
singular: ޕޯސްޓް
plural: ޕޯސްޓްތައް

View File

@ -43,7 +43,7 @@ copyright:
meta: Αξιοποιώντας την :PLATFORM theme :THEME
not_found:
statment: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει.
statement: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει.
notification:
update_found: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου.

View File

@ -43,7 +43,7 @@ copyright:
meta: Using the :THEME theme for :PLATFORM.
not_found:
statment: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
statement: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
notification:
update_found: A new version of content is available.

View File

@ -43,7 +43,7 @@ copyright:
meta: Hecho con :PLATFORM usando el tema :THEME
not_found:
statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
statement: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe.
notification:
update_found: Hay una nueva versión de contenido disponible.

91
_data/locales/fa-IR.yml Normal file
View File

@ -0,0 +1,91 @@
# The layout text of site
# ----- Commons label -----
layout:
post: پست
category: دسته‌بندی
tag: برچسب
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: خانه
categories: دسته‌بندی‌ها
tags: برچسب‌ها
archives: آرشیو
about: درباره
# the text displayed in the search bar & search results
search:
hint: جستجو
cancel: لغو
no_results: متأسفیم! هیچ نتیجه‌ای یافت نشد.
panel:
lastmod: آخرین به‌روزرسانی
trending_tags: برچسب‌های پرطرفدار
toc: فهرست مطالب
copyright:
# Shown at the bottom of the post
license:
template: این پست تحت مجوز :LICENSE_NAME توسط نویسنده منتشر شده است.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: برخی حقوق محفوظ است.
verbose: >-
به‌جز مواردی که خلاف آن ذکر شده باشد، محتوای پست‌های این وبلاگ
تحت مجوز Creative Commons Attribution 4.0 International (CC BY 4.0) توسط نویسنده منتشر شده‌اند.
meta: با استفاده از قالب :THEME برای :PLATFORM
not_found:
statement: متأسفیم، لینک زیر معتبر نیست یا به صفحه‌ای که وجود ندارد اشاره می‌کند.
notification:
update_found: نسخه جدیدی از محتوا موجود است.
update: به‌روزرسانی
# ----- Posts related labels -----
post:
written_by: نوشته شده توسط
posted: منتشر شده
updated: به‌روزرسانی شده
words: کلمه
pageview_measure: بازدید
read_time:
unit: "دقیقه "
prompt: " زمان مطالعه"
relate_posts: بیشتر بخوانید
share: اشتراک‌گذاری
button:
next: جدیدتر
previous: قدیمی‌تر
copy_code:
succeed: کپی شد!
share_link:
title: کپی لینک
succeed: لینک با موفقیت کپی شد!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%b %e, %Y"
dayjs: "ll"
archives:
strftime: "%b"
dayjs: "MMM"
# categories page
categories:
category_measure:
singular: دسته‌بندی
plural: دسته‌بندی‌
post_measure:
singular: پست
plural: پست‌

View File

@ -42,7 +42,7 @@ copyright:
meta: Käytetään :PLATFORM iä Teema :THEME
not_found:
statment: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä.
statement: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä.
notification:
update_found: Uusi versio sisällöstä on saatavilla.

View File

@ -14,7 +14,7 @@ tabs:
categories: Catégories
tags: Tags
archives: Archives
about: A propos de
about: À propos
# the text displayed in the search bar & search results
search:
@ -32,18 +32,18 @@ copyright:
license:
template: Cet article est sous licence :LICENSE_NAME par l'auteur.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
link: https://creativecommons.org/licenses/by/4.0/deed.fr
# Displayed in the footer
brief: Certains droits réservés.
verbose: >-
Sauf mention contraire, les articles de ce site sont publiés sous licence
Sauf mention contraire, les articles de ce site sont publiés
sous la licence Creative Commons Attribution 4.0 International (CC BY 4.0) par l'auteur.
meta: Propulsé par :PLATFORM avec le thème :THEME
not_found:
statment: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas.
statement: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas.
notification:
update_found: Une nouvelle version du contenu est disponible.

View File

@ -14,24 +14,23 @@ tabs:
categories: Kategóriák
tags: Címkék
archives: Archívum
about: Rólam
about: Bemutatkozás
# the text displayed in the search bar & search results
search:
hint: keresés
cancel: Mégse
no_results: Oops! Nincs találat a keresésre.
no_results: Hoppá! Nincs találat a keresésre.
panel:
lastmod: Legutóbb frissítve
trending_tags: Népszerű Címkék
toc: Tartalom
links: Blog linkek
copyright:
# Shown at the bottom of the post
license:
template: A bejegyzés :LICENSE_NAME licenccel rendelkezik.
template: A bejegyzést a szerző :LICENSE_NAME licenc alatt engedélyezte.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
@ -42,10 +41,10 @@ copyright:
Creative Commons Attribution 4.0 International (CC BY 4.0) licenccel rendelkeznek,
hacsak másképp nincs jelezve.
meta: Készítve :PLATFORM motorral :THEME témával
meta: Készítve :THEME témával a :PLATFORM platformra.
not_found:
statment: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat.
statement: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat.
notification:
update_found: Elérhető a tartalom új verziója.
@ -73,7 +72,21 @@ post:
title: Link másolása
succeed: Link sikeresen másolva!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%Y. %B. %e."
dayjs: "YYYY. MMMM D."
archives:
strftime: "%B"
dayjs: "MMM"
# categories page
categories:
category_measure: kategória
post_measure: bejegyzés
category_measure:
singular: kategória
plural: kategória
post_measure:
singular: bejegyzés
plural: bejegyzés

View File

@ -43,7 +43,7 @@ copyright:
meta: Didukung oleh :PLATFORM dengan tema :THEME
not_found:
statment: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
statement: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada.
notification:
update_found: Versi konten baru tersedia.

View File

@ -42,7 +42,7 @@ copyright:
meta: Servizio offerto da :PLATFORM con tema :THEME
not_found:
statment: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente.
statement: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente.
notification:
update_found: Nuova versione del contenuto disponibile.

84
_data/locales/ja-JP.yml Normal file
View File

@ -0,0 +1,84 @@
# The layout text of site
# ----- Commons label -----
layout:
post: 投稿
category: カテゴリー
tag: タグ
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: ホーム
categories: カテゴリー
tags: タグ
archives: アーカイブ
about: このサイトについて
# the text displayed in the search bar & search results
search:
hint: 検索
cancel: キャンセル
no_results: 該当なし
panel:
lastmod: 最近更新された投稿
trending_tags: トレンドのタグ
toc: コンテンツ
copyright:
# Shown at the bottom of the post
license:
template: この投稿は投稿者によって :LICENSE_NAME の下でライセンスされています。
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: Some rights reserved.
verbose: >-
Except where otherwise noted, the blog posts on this site are licensed
under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author.
meta: :PLATFORM 用の :THEME を使用しています。
not_found:
statement: このURLは存在しないものを指し示しています。
notification:
update_found: 新しいバージョンが利用可能です。
update: 更新
# ----- Posts related labels -----
post:
written_by: 投稿者
posted: 投稿日
updated: 更新日
words:
pageview_measure: 回閲覧
read_time:
unit:
prompt: で読めます
relate_posts: さらに読む
share: シェア
button:
next:
previous:
copy_code:
succeed: コピーしました
share_link:
title: リンクをコピー
succeed: リンクをコピーしました
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%Y/%m/%d"
dayjs: "YYYY/MM/DD"
# categories page
categories:
category_measure: カテゴリー
post_measure: 投稿

View File

@ -43,7 +43,7 @@ copyright:
meta: Powered by :PLATFORM with :THEME theme
not_found:
statment: 해당 URL은 존재하지 않습니다.
statement: 해당 URL은 존재하지 않습니다.
notification:
update_found: 새 버전의 콘텐츠를 사용할 수 있습니다.

91
_data/locales/ku-IQ.yml Normal file
View File

@ -0,0 +1,91 @@
# The layout text of site in Kurdish (Sorani)
# ----- Commons label -----
layout:
post: بابەت
category: هاوپۆل
tag: تاگ
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: سەرەکی
categories: هاوپۆلەکان
tags: تاگەکان
archives: ئەرشیف
about: دەربارە
# the text displayed in the search bar & search results
search:
hint: گەڕان
cancel: هەڵوەشاندنەوە
no_results: ببوورە! هیچ ئەنجامێک نەدۆزرایەوە.
panel:
lastmod: دوایین نوێکردنەوەکان
trending_tags: تاگە باوەکان
toc: ناوەڕۆک
copyright:
# Shown at the bottom of the post
license:
template: ئەم بابەتە لەلایەن نووسەرەوە بە مۆڵەتی :LICENSE_NAME بڵاوکراوەتەوە.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: هەندێک مافی پارێزراوە.
verbose: >-
تەنها لەو شوێنانەی کە بە پێچەوانەوە ئاماژەی پێدراوە، بابەتەکانی بڵۆگ لەم سایتەدا
لەژێر مۆڵەتی Creative Commons Attribution 4.0 International (CC BY 4.0) لەلایەن نووسەرەوە مۆڵەتیان پێدراوە.
meta: بە بەکارهێنانی :PLATFORM لەگەڵ ڕووکاری :THEME
not_found:
statement: ببوورە، ئەم بەستەرە نادۆزرێتەوە یان ئاماژە بە شتێک دەکات کە بوونی نییە.
notification:
update_found: وەشانێکی نوێی ناوەڕۆک بەردەستە.
update: نوێکردنەوە
# ----- Posts related labels -----
post:
written_by: نووسەر
posted: بڵاوکراوەتەوە
updated: نوێکراوەتەوە
words: وشە
pageview_measure: بینین
read_time:
unit: خولەک
prompt: خوێندنەوە
relate_posts: بابەتی پەیوەندیدار
share: بڵاوکردنەوە
button:
next: نوێتر
previous: کۆنتر
copy_code:
succeed: کۆپی کرا!
share_link:
title: کۆپی بەستەر
succeed: بەستەر بە سەرکەوتوویی کۆپی کرا!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%d %b, %Y"
dayjs: "DD MMM, YYYY"
archives:
strftime: "%b"
dayjs: "MMM"
# categories page
categories:
category_measure:
singular: هاوپۆل
plural: هاوپۆل
post_measure:
singular: بابەت
plural: بابەت

View File

@ -43,7 +43,7 @@ copyright:
meta: Powered by :PLATFORM with :THEME theme
not_found:
statment: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
statement: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။
notification:
update_found: အကြောင်းအရာဗားရှင်းအသစ်ကို ရနိုင်ပါပြီ။

90
_data/locales/nl-NL.yml Normal file
View File

@ -0,0 +1,90 @@
# The layout text of site
# ----- Commons label -----
layout:
post: Post
category: Categorie
tag: Tag
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: Startpagina
categories: Categorieën
tags: Tags
archives: Archief
about: Over
# the text displayed in the search bar & search results
search:
hint: Zoek
cancel: Annuleer
no_results: Oops! Geen resultaat gevonden.
panel:
lastmod: Recent Bijgewerkt
trending_tags: Trending Tags
toc: Inhoud
copyright:
# Shown at the bottom of the post
license:
template: Alle posts zijn onder :LICENSE_NAME gepubliceerd door de auteur.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: Sommige rechten voorbehouden.
verbose: >-
Tenzij anders vermeld, alle posts zijn onder de
Creative Commons Attribution 4.0 International (CC BY 4.0) gepubliceerd door de auteur.
meta: Gebruikt :THEME
not_found:
statement: Sorry, we hebben de URL verkeerd geplaatst of hij verwijst naar iets dat niet bestaat.
notification:
update_found: Nieuwe versie van inhoud beschikbaar.
update: Update
# ----- Posts related labels -----
post:
written_by: Door
posted: Posted
updated: Bijgewerkt
words: woorden
pageview_measure: Gelezen
read_time:
unit: min
prompt: lees
relate_posts: Verder Lezen
share: Deel
button:
next: Volgende
previous: Vorige
copy_code:
succeed: Gekopieerd!
share_link:
title: Link kopiëren
succeed: Succesvol gekopieerd!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%b %e, %Y"
dayjs: "ll"
archives:
strftime: "%b"
dayjs: "MMM"
# categories page
categories:
category_measure:
singular: categorie
plural: categorieën
post_measure:
singular: post
plural: posts

90
_data/locales/ps‑AF.yml Normal file
View File

@ -0,0 +1,90 @@
# The layout text of site in Pashto (Afghanistan)
# ----- Commons label -----
layout:
post: لیکنه
category: وېشنيزه
tag: ټګ
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: کورپاڼه
categories: وېشنيزې
tags: ټګونه
archives: آرشيف
about: په اړه
# the text displayed in the search bar & search results
search:
hint: لټون
cancel: لغوه
no_results: ها! هېڅ پایله ونه موندل شوه.
panel:
lastmod: وروستی تازه
trending_tags: مشهور ټګونه
toc: منځپانګه
copyright:
# Shown at the bottom of the post
license:
template: دا لیکنه د :LICENSE_NAME جواز لاندې د لیکوال له خوا خپره شوې ده.
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: ځینې حقونه خوندي دي.
verbose: >-
تر هغه ځایه چې بل ډول نه وي یاد شوي، د دې سایټ لیکنې
د لیکوال له خوا د کریټېو کامنز د انتساب 4.0 نړیوال (CC BY 4.0) جواز لاندې خپرېږي.
meta: د :PLATFORM لپاره د :THEME موضوع کاروي.
not_found:
statement: بښنه غواړو، دغه URL ناسم دی یا هغه څه ته اشاره کوي چې شتون نه لري.
notification:
update_found: نوې نسخه شتون لري.
update: تازه
# ----- Posts related labels -----
post:
written_by: لیکوال
posted: خپره شوې
updated: تازه شوې
words: کلمې
pageview_measure: کتنې
read_time:
unit: دقیقې
prompt: لوستل
relate_posts: نوره لوستنه
share: شریکول
button:
next: نوی
previous: زوړ
copy_code:
succeed: کاپي شو!
share_link:
title: لینک کاپي کړئ
succeed: لینک بریالي کاپي شو!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%b %e, %Y"
dayjs: "ll"
archives:
strftime: "%b"
dayjs: "MMM"
categories:
category_measure:
singular: وېشنيزه
plural: وېشنيزې
post_measure:
singular: لیکنه
plural: لیکنې

View File

@ -43,7 +43,7 @@ copyright:
meta: Feito com :PLATFORM usando o tema :THEME
not_found:
statment: Desculpe, a página não foi encontrada.
statement: Desculpe, a página não foi encontrada.
notification:
update_found: Uma nova versão do conteúdo está disponível.

View File

@ -42,7 +42,7 @@ copyright:
meta: Использует тему :THEME для :PLATFORM
not_found:
statment: Извините, мы перепутали URL-адрес или он указывает на что-то несуществующее.
statement: Извините, мы перепутали URL-адрес или он указывает на что-то несуществующее.
notification:
update_found: Доступна новая версия контента.
@ -76,7 +76,7 @@ df:
post:
strftime: "%d.%m.%Y"
dayjs: "DD.MM.YYYY"
# categories page
categories:
category_measure:

View File

@ -43,7 +43,7 @@ copyright:
meta: Uporabljena :PLATFORM tema :THEME #Using the :PLATFORM theme :THEME
not_found:
statment: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
statement: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.
notification:
update_found: Novejša različica vsebine je na voljo. #A new version of content is available.

View File

@ -43,7 +43,7 @@ copyright:
meta: Byggd med :PLATFORM och temat :THEME
not_found:
statment: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns.
statement: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns.
notification:
update_found: Det finns en ny version av innehållet.

View File

@ -43,7 +43,7 @@ copyright:
meta: กำลังใช้ธีมของ :PLATFORM ชื่อ :THEME
not_found:
statment: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่
statement: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่
notification:
update_found: มีเวอร์ชันใหม่ของเนื้อหา

View File

@ -43,7 +43,7 @@ copyright:
meta: :PLATFORM ve :THEME teması
not_found:
statment: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor.
statement: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor.
notification:
update_found: İçeriğin yeni bir sürümü mevcut.

View File

@ -43,7 +43,7 @@ copyright:
meta: Powered by :PLATFORM with :THEME theme
not_found:
statment: Вибачте, це посилання вказує на ресурс, що не існує.
statement: Вибачте, це посилання вказує на ресурс, що не існує.
notification:
update_found: Доступна нова версія вмісту.

90
_data/locales/ur-PK.yml Normal file
View File

@ -0,0 +1,90 @@
# The layout text of site in Urdu (Pakistan)
# ----- Commons label -----
layout:
post: تحریر
category: زمرہ
tag: ٹیگ
# The tabs of sidebar
tabs:
# format: <filename_without_extension>: <value>
home: گھر
categories: زمروں
tags: ٹیگز
archives: محفوظات
about: تعارف
# the text displayed in the search bar & search results
search:
hint: تلاش
cancel: منسوخ
no_results: اوہ! کوئی نتیجہ نہیں ملا۔
panel:
lastmod: حال ہی میں اپ ڈیٹ
trending_tags: مقبول ٹیگز
toc: مواد
copyright:
# Shown at the bottom of the post
license:
template: یہ تحریر :LICENSE_NAME کے تحت مصنف کی جانب سے لائسنس یافتہ ہے۔
name: CC BY 4.0
link: https://creativecommons.org/licenses/by/4.0/
# Displayed in the footer
brief: کچھ حقوق محفوظ ہیں۔
verbose: >-
جب تک کہ دوسری صورت میں ذکر نہ ہو، اس سائٹ کی تحریریں
مصنف کی جانب سے تخلیقی العام انتساب 4.0 بین الاقوامی (CC BY 4.0) لائسنس کے تحت دستیاب ہیں۔
meta: :PLATFORM کے لیے :THEME تھیم استعمال کیا جا رہا ہے۔
not_found:
statement: معذرت، یہ URL غلط ہے یا جس چیز کی طرف اشارہ کر رہا ہے وہ موجود نہیں۔
notification:
update_found: نیا مواد دستیاب ہے۔
update: اپ ڈیٹ
# ----- Posts related labels -----
post:
written_by: از
posted: شائع شدہ
updated: اپ ڈیٹ شدہ
words: لفظ
pageview_measure: مشاہدات
read_time:
unit: منٹ
prompt: پڑھیں
relate_posts: مزید مطالعہ
share: شیئر
button:
next: نیا
previous: پرانا
copy_code:
succeed: کاپی ہو گیا!
share_link:
title: لنک کاپی کریں
succeed: لنک کامیابی سے کاپی ہو گیا!
# Date time format.
# See: <http://strftime.net/>, <https://day.js.org/docs/en/display/format>
df:
post:
strftime: "%b %e, %Y"
dayjs: "ll"
archives:
strftime: "%b"
dayjs: "MMM"
categories:
category_measure:
singular: زمرہ
plural: زمروں
post_measure:
singular: تحریر
plural: تحریریں

View File

@ -42,7 +42,7 @@ copyright:
meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME
not_found:
statment: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại.
statement: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại.
notification:
update_found: Đã có phiên bản mới của nội dung.

View File

@ -42,7 +42,7 @@ copyright:
meta: 本站采用 :PLATFORM 主题 :THEME
not_found:
statment: 抱歉,我们放错了该 URL或者它指向了不存在的内容。
statement: 抱歉,我们放错了该 URL或者它指向了不存在的内容。
notification:
update_found: 发现新版本的内容。

View File

@ -42,7 +42,7 @@ copyright:
meta: 本網站使用 :PLATFORM 產生,採用 :THEME 主題
not_found:
statment: 抱歉,您可能正在存取一個已被移動的 URL或者它從未存在。
statement: 抱歉,您可能正在存取一個已被移動的 URL或者它從未存在。
notification:
update_found: 發現新版本更新。

View File

@ -20,9 +20,9 @@ mermaid:
dayjs:
js:
common: /assets/lib/dayjs/dayjs.min.js
locale: /assets/lib/dayjs/locale/en.min.js
relativeTime: /assets/lib/dayjs/plugin/relativeTime.min.js
localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.min.js
locale: /assets/lib/dayjs/locale/en.js
relativeTime: /assets/lib/dayjs/plugin/relativeTime.js
localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.js
glightbox:
css: /assets/lib/glightbox/glightbox.min.css

View File

@ -20,24 +20,24 @@ webfonts: https://fonts.googleapis.com/css2?family=Lato:wght@300;400&family=Sour
# Libraries
toc:
css: https://cdn.jsdelivr.net/npm/tocbot@4.27.20/dist/tocbot.min.css
js: https://cdn.jsdelivr.net/npm/tocbot@4.27.20/dist/tocbot.min.js
css: https://cdn.jsdelivr.net/npm/tocbot@4.32.2/dist/tocbot.min.css
js: https://cdn.jsdelivr.net/npm/tocbot@4.32.2/dist/tocbot.min.js
fontawesome:
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css
css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.7.1/css/all.min.css
search:
js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js
mermaid:
js: https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.min.js
js: https://cdn.jsdelivr.net/npm/mermaid@11.4.0/dist/mermaid.min.js
dayjs:
js:
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/dayjs.min.js
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/locale/:LOCALE.min.js
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/plugin/relativeTime.min.js
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.11/plugin/localizedFormat.min.js
common: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/dayjs.min.js
locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/locale/:LOCALE.js
relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/plugin/relativeTime.js
localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.13/plugin/localizedFormat.js
glightbox:
css: https://cdn.jsdelivr.net/npm/glightbox@3.3.0/dist/css/glightbox.min.css

View File

@ -18,7 +18,7 @@ platforms:
#
# - type: Linkedin
# icon: "fab fa-linkedin"
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
# link: "https://www.linkedin.com/feed/?shareActive=true&shareUrl=URL"
#
# - type: Weibo
# icon: "fab fa-weibo"
@ -36,3 +36,15 @@ platforms:
# link: "https://fosstodon.org/"
# - label: photog.social
# link: "https://photog.social/"
#
# - type: Bluesky
# icon: "fa-brands fa-bluesky"
# link: "https://bsky.app/intent/compose?text=TITLE%20URL"
#
# - type: Reddit
# icon: "fa-brands fa-square-reddit"
# link: "https://www.reddit.com/submit?url=URL&title=TITLE"
#
# - type: Threads
# icon: "fa-brands fa-square-threads"
# link: "https://www.threads.net/intent/post?text=TITLE%20URL"

View File

@ -4,4 +4,3 @@
src="https://static.cloudflareinsights.com/beacon.min.js"
data-cf-beacon='{"token": "{{ site.analytics.cloudflare.id }}"}'
></script>
<!-- End Cloudflare Web Analytics -->

View File

@ -0,0 +1,6 @@
<!-- Fathom -->
<script
src="https://cdn.usefathom.com/script.js"
data-site="{{ site.analytics.fathom.id }}"
defer
></script>

View File

@ -1,7 +1,7 @@
<!-- Global site tag (gtag.js) - Google Analytics -->
<script defer src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.id }}"></script>
<script>
document.addEventListener('DOMContentLoaded', function (event) {
document.addEventListener('DOMContentLoaded', () => {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);

View File

@ -1,14 +1,13 @@
<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
<script>
document.addEventListener('DOMContentLoaded', () => {
var _paq = (window._paq = window._paq || []);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
var u="//{{ site.analytics.matomo.domain }}/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', {{ site.analytics.matomo.id }}]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
});
</script>
<!-- End Matomo Code -->

View File

@ -1,38 +1,25 @@
<!-- The Disqus lazy loading. -->
<div id="disqus_thread">
<p class="text-center text-muted small">Comments powered by <a href="https://disqus.com/">Disqus</a>.</p>
</div>
<script type="text/javascript">
<script>
var disqus_config = function () {
this.page.url = '{{ page.url | absolute_url }}';
this.page.identifier = '{{ page.url }}';
};
{%- comment -%} Lazy loading {%- endcomment -%}
var disqus_observer = new IntersectionObserver(
function (entries) {
if (entries[0].isIntersecting) {
(function () {
var d = document,
s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
function addDisqus() {
let disqusThread = document.createElement('div');
let paragraph = document.createElement('p');
disqus_observer.disconnect();
}
},
{ threshold: [0] }
);
disqusThread.id = 'disqus_thread';
paragraph.className = 'text-center text-muted small';
paragraph.innerHTML = 'Comments powered by <a href="https://disqus.com/">Disqus</a>.';
disqusThread.appendChild(paragraph);
disqus_observer.observe(document.getElementById('disqus_thread'));
const footer = document.querySelector('footer');
footer.insertAdjacentElement("beforebegin", disqusThread);
}
{%- comment -%} Auto switch theme {%- endcomment -%}
function reloadDisqus() {
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
function reloadDisqus(event) {
if (event.source === window && event.data && event.data.id === Theme.ID) {
{%- comment -%} Disqus hasn't been loaded {%- endcomment -%}
if (typeof DISQUS === 'undefined') {
return;
@ -44,7 +31,27 @@
}
}
if (document.getElementById('mode-toggle')) {
window.addEventListener('message', reloadDisqus);
addDisqus();
if (Theme.switchable) {
addEventListener('message', reloadDisqus);
}
{%- comment -%} Lazy loading {%- endcomment -%}
var disqusObserver = new IntersectionObserver(
function (entries) {
if (entries[0].isIntersecting) {
var d = document,
s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
disqusObserver.disconnect();
}
},
{ threshold: [0] }
);
disqusObserver.observe(document.getElementById('disqus_thread'));
</script>

View File

@ -1,20 +1,13 @@
<!-- https://giscus.app/ -->
<script type="text/javascript">
<script>
(function () {
const origin = 'https://giscus.app';
const lightTheme = 'light';
const darkTheme = 'dark_dimmed';
const themeMapper = Theme.getThemeMapper('light', 'dark_dimmed');
const initTheme = themeMapper[Theme.visualState];
let initTheme = lightTheme;
const html = document.documentElement;
if (
(html.hasAttribute('data-mode') &&
html.getAttribute('data-mode') === 'dark') ||
(!html.hasAttribute('data-mode') &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
initTheme = darkTheme;
let lang = '{{ site.comments.giscus.lang | default: lang }}';
{%- comment -%} https://github.com/giscus/giscus/tree/main/locales {%- endcomment -%}
if (lang.length > 2 && !lang.startsWith('zh')) {
lang = lang.slice(0, 2);
}
let giscusAttributes = {
@ -29,36 +22,33 @@
'data-emit-metadata': '0',
'data-theme': initTheme,
'data-input-position': '{{ site.comments.giscus.input_position | default: 'bottom' }}',
'data-lang': '{{ site.comments.giscus.lang | default: lang }}',
'data-lang': lang,
'data-loading': 'lazy',
crossorigin: 'anonymous',
async: ''
};
let giscusScript = document.createElement('script');
let giscusNode = document.createElement('script');
Object.entries(giscusAttributes).forEach(([key, value]) =>
giscusScript.setAttribute(key, value)
giscusNode.setAttribute(key, value)
);
document.getElementById('tail-wrapper').appendChild(giscusScript);
const $footer = document.querySelector('footer');
$footer.insertAdjacentElement("beforebegin", giscusNode);
addEventListener('message', (event) => {
if (
event.source === window &&
event.data &&
event.data.direction === ModeToggle.ID
) {
{%- comment -%} global theme mode changed {%- endcomment -%}
const mode = event.data.message;
const theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
if (event.source === window && event.data && event.data.id === Theme.ID) {
const newTheme = themeMapper[Theme.visualState];
const message = {
setConfig: {
theme: theme
theme: newTheme
}
};
const giscus = document.getElementsByClassName('giscus-frame')[0].contentWindow;
giscus.postMessage({ giscus: message }, origin);
const giscus =
document.getElementsByClassName('giscus-frame')[0].contentWindow;
giscus.postMessage({ giscus: message }, 'https://giscus.app');
}
});
})();

View File

@ -1,49 +1,38 @@
<!-- https://utteranc.es/ -->
<script
src="https://utteranc.es/client.js"
repo="{{ site.comments.utterances.repo }}"
issue-term="{{ site.comments.utterances.issue_term }}"
crossorigin="anonymous"
async
></script>
<script type="text/javascript">
<script>
(function () {
const origin = 'https://utteranc.es';
const lightTheme = 'github-light';
const darkTheme = 'github-dark';
let initTheme = lightTheme;
const html = document.documentElement;
const themeMapper = Theme.getThemeMapper('github-light', 'github-dark');
const initTheme = themeMapper[Theme.visualState];
if (
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
initTheme = darkTheme;
}
let script = document.createElement('script');
script.src = 'https://utteranc.es/client.js';
script.setAttribute('repo', '{{ site.comments.utterances.repo }}');
script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term }}');
script.setAttribute('theme', initTheme);
script.crossOrigin = 'anonymous';
script.async = true;
const $footer = document.querySelector('footer');
$footer.insertAdjacentElement('beforebegin', script);
addEventListener('message', (event) => {
let theme;
let newTheme;
{%- comment -%} credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347> {%- endcomment -%}
if (event.origin === origin) {
{%- comment -%} page initial {%- endcomment -%}
theme = initTheme;
} else if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
{%- comment -%} global theme mode changed {%- endcomment -%}
const mode = event.data.message;
theme = mode === ModeToggle.DARK_MODE ? darkTheme : lightTheme;
} else {
return;
{%- comment -%}
Credit to <https://github.com/utterance/utterances/issues/170#issuecomment-594036347>
{%- endcomment -%}
if (event.source === window && event.data && event.data.id === Theme.ID) {
newTheme = themeMapper[Theme.visualState];
const message = {
type: 'set-theme',
theme: newTheme
};
const utterances = document.querySelector('.utterances-frame').contentWindow;
utterances.postMessage(message, origin);
}
const message = {
type: 'set-theme',
theme: theme
};
const utterances = document.getElementsByClassName('utterances-frame')[0].contentWindow;
utterances.postMessage(message, origin);
});
})();
</script>

View File

@ -2,7 +2,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f7f7f7">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#1b1b1e">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta
name="viewport"
@ -70,7 +70,7 @@
<!-- Bootstrap -->
{% unless jekyll.environment == 'production' %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/css/bootstrap.min.css">
{% endunless %}
<!-- Theme style -->
@ -97,11 +97,30 @@
<link rel="stylesheet" href="{{ site.data.origin[type].glightbox.css | relative_url }}">
{% endif %}
<!-- JavaScript -->
<!-- Scripts -->
{% unless site.theme_mode %}
{% include mode-toggle.html %}
{% endunless %}
<script src="{{ '/assets/js/dist/theme.min.js' | relative_url }}"></script>
{% include js-selector.html lang=lang %}
{% if jekyll.environment == 'production' %}
<!-- PWA -->
{% if site.pwa.enabled %}
<script
defer
src="{{ '/app.min.js' | relative_url }}?baseurl={{ site.baseurl | default: '' }}&register={{ site.pwa.cache.enabled }}"
></script>
{% endif %}
<!-- Web Analytics -->
{% for analytics in site.analytics %}
{% capture str %}{{ analytics }}{% endcapture %}
{% assign platform = str | split: '{' | first %}
{% if site.analytics[platform].id and site.analytics[platform].id != empty %}
{% include analytics/{{ platform }}.html %}
{% endif %}
{% endfor %}
{% endif %}
{% include metadata-hook.html %}
</head>

View File

@ -6,8 +6,6 @@
<!-- layout specified -->
{% assign js_dist = '/assets/js/dist/' %}
{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %}
{% assign urls = urls | append: ',' | append: site.data.origin[type]['lazy-polyfill'].js %}
@ -62,13 +60,14 @@
{% assign js = 'commons' %}
{% endcase %}
{% capture script %}{{ js_dist }}{{ js }}.min.js{% endcapture %}
<script src="{{ script | relative_url }}"></script>
{% capture script %}/assets/js/dist/{{ js }}.min.js{% endcapture %}
<script defer src="{{ script | relative_url }}"></script>
{% if page.math %}
<!-- MathJax -->
<script src="{{ '/assets/js/data/mathjax.js' | relative_url }}"></script>
<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
<script async src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="{{ site.data.origin[type].mathjax.js | relative_url }}"></script>
{% endif %}
@ -85,23 +84,3 @@
{% endcase %}
{% endif %}
{% endif %}
{% if page.mermaid %}
{% include mermaid.html %}
{% endif %}
{% if jekyll.environment == 'production' %}
<!-- PWA -->
{% if site.pwa.enabled %}
<script defer src="{{ 'app.min.js' | prepend: js_dist | relative_url }}"></script>
{% endif %}
<!-- Web Analytics -->
{% for analytics in site.analytics %}
{% capture str %}{{ analytics }}{% endcapture %}
{% assign type = str | split: '{' | first %}
{% if site.analytics[type].id and site.analytics[type].id != empty %}
{% include analytics/{{ type }}.html %}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -1,6 +1,6 @@
{% assign urls = include.urls | split: ',' %}
{% assign combined_urls = nil %}
{% assign combined_urls = null %}
{% assign domain = 'https://cdn.jsdelivr.net/' %}
@ -15,12 +15,12 @@
{% endif %}
{% elsif url contains '//' %}
<script src="{{ url }}"></script>
<script defer src="{{ url }}"></script>
{% else %}
<script src="{{ url | relative_url }}"></script>
<script defer src="{{ url | relative_url }}"></script>
{% endif %}
{% endfor %}
{% if combined_urls %}
<script src="{{ combined_urls }}"></script>
<script defer src="{{ combined_urls }}"></script>
{% endif %}

View File

@ -1,62 +0,0 @@
<!-- mermaid-js loader -->
<script type="text/javascript">
function updateMermaid(event) {
if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
const mode = event.data.message;
if (typeof mermaid === 'undefined') {
return;
}
let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
let config = { theme: expectedTheme };
{%- comment -%}
Re-render the SVG <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344>
{%- endcomment -%}
const mermaidList = document.getElementsByClassName('mermaid');
[...mermaidList].forEach((elem) => {
const svgCode = elem.previousSibling.children.item(0).innerHTML;
elem.innerHTML = svgCode;
elem.removeAttribute('data-processed');
});
mermaid.initialize(config);
mermaid.init(undefined, '.mermaid');
}
}
(function () {
let initTheme = 'default';
const html = document.documentElement;
if (
(html.hasAttribute('data-mode') && html.getAttribute('data-mode') === 'dark') ||
(!html.hasAttribute('data-mode') && window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
initTheme = 'dark';
}
let mermaidConf = {
theme: initTheme {%- comment -%} <default | dark | forest | neutral> {%- endcomment -%}
};
{%- comment -%} Create mermaid tag {%- endcomment -%}
const basicList = document.getElementsByClassName('language-mermaid');
[...basicList].forEach((elem) => {
const svgCode = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('d-none');
{%- comment -%} create mermaid node {%- endcomment -%}
let mermaid = document.createElement('pre');
mermaid.classList.add('mermaid');
const text = document.createTextNode(svgCode);
mermaid.appendChild(text);
backup.after(mermaid);
});
mermaid.initialize(mermaidConf);
window.addEventListener('message', updateMermaid);
})();
</script>

View File

@ -1,116 +0,0 @@
<!-- Switch the mode between dark and light. -->
<script type="text/javascript">
class ModeToggle {
static get MODE_KEY() {
return 'mode';
}
static get MODE_ATTR() {
return 'data-mode';
}
static get DARK_MODE() {
return 'dark';
}
static get LIGHT_MODE() {
return 'light';
}
static get ID() {
return 'mode-toggle';
}
constructor() {
let self = this;
{%- comment -%} always follow the system prefers {%- endcomment -%}
this.sysDarkPrefers.addEventListener('change', () => {
if (self.hasMode) {
self.clearMode();
}
self.notify();
});
if (!this.hasMode) {
return;
}
if (this.isDarkMode) {
this.setDark();
} else {
this.setLight();
}
}
get sysDarkPrefers() {
return window.matchMedia('(prefers-color-scheme: dark)');
}
get isPreferDark() {
return this.sysDarkPrefers.matches;
}
get isDarkMode() {
return this.mode === ModeToggle.DARK_MODE;
}
get hasMode() {
return this.mode != null;
}
get mode() {
return sessionStorage.getItem(ModeToggle.MODE_KEY);
}
{%- comment -%} get the current mode on screen {%- endcomment -%}
get modeStatus() {
if (this.hasMode) {
return this.mode;
} else {
return this.isPreferDark ? ModeToggle.DARK_MODE : ModeToggle.LIGHT_MODE;
}
}
setDark() {
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.DARK_MODE);
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE);
}
setLight() {
document.documentElement.setAttribute(ModeToggle.MODE_ATTR, ModeToggle.LIGHT_MODE);
sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE);
}
clearMode() {
document.documentElement.removeAttribute(ModeToggle.MODE_ATTR);
sessionStorage.removeItem(ModeToggle.MODE_KEY);
}
{%- comment -%}
Notify another plugins that the theme mode has changed
{%- endcomment -%}
notify() {
window.postMessage(
{
direction: ModeToggle.ID,
message: this.modeStatus
},
'*'
);
}
flipMode() {
if (this.hasMode) {
this.clearMode();
} else {
if (this.isPreferDark) {
this.setLight();
} else {
this.setDark();
}
}
this.notify();
}
}
const modeToggle = new ModeToggle();
</script>

View File

@ -1,10 +0,0 @@
{% comment %}
Remove the line number of the code snippet.
{% endcomment %}
{% assign content = include.content %}
{% if content contains '<td class="rouge-gutter gl"><pre class="lineno">' %}
{% assign content = content | replace: '<td class="rouge-gutter gl"><pre class="lineno">', '<!-- <td class="rouge-gutter gl"><pre class="lineno">'%}
{% assign content = content | replace: '</td><td class="rouge-code">', '</td> --><td class="rouge-code">' %}
{% endif %}

View File

@ -1,19 +1,21 @@
<!-- Display GoatCounter pageviews -->
<script>
let pv = document.getElementById('pageviews');
document.addEventListener('DOMContentLoaded', () => {
const pv = document.getElementById('pageviews');
if (pv !== null) {
const uri = location.pathname.replace(/\/$/, '');
const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
if (pv !== null) {
const uri = location.pathname.replace(/\/$/, '');
const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
fetch(url)
.then((response) => response.json())
.then((data) => {
const count = data.count.replace(/\s/g, '');
pv.innerText = new Intl.NumberFormat().format(count);
})
.catch((error) => {
pv.innerText = '1';
});
}
fetch(url)
.then((response) => response.json())
.then((data) => {
const count = data.count.replace(/\D/g, '');
pv.innerText = new Intl.NumberFormat().format(count);
})
.catch((error) => {
pv.innerText = '1';
});
}
});
</script>

View File

@ -8,8 +8,17 @@
{%- if post.description -%}
{{- post.description -}}
{%- else -%}
{%- include no-linenos.html content=post.content -%}
{{- content | markdownify | strip_html -}}
{% comment %}
Remove the line number of the code snippet.
{% endcomment %}
{% assign content = post.content %}
{% if content contains '<td class="rouge-gutter gl"><pre class="lineno">' %}
{% assign content = content | replace: '<td class="rouge-gutter gl"><pre class="lineno">', '<!-- <td class="rouge-gutter gl"><pre class="lineno">'%}
{% assign content = content | replace: '</td><td class="rouge-code">', '</td> --><td class="rouge-code">' %}
{% endif %}
{{- content | markdownify | strip_html | newline_to_br | replace: '<br />', ' ' | strip_newlines -}}
{%- endif -%}
{%- endcapture -%}

View File

@ -88,9 +88,41 @@
{% endfor %}
<!-- take out classes -->
{% assign _wrapper_class = '' %}
{% if _class %}
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
{% assign _left = _left | remove: _old_class %}
{% assign _remain = _class %}
{% assign _class_array = _class | split: ' ' %}
{% for c in _class_array %}
{% assign _pick = false %}
{% case c %}
{% when 'preview-img', 'normal', 'left', 'right', 'light', 'dark' %}
{% assign _pick = true %}
{% else %}
{% if c contains '-' %}
{% assign start = c | split: '-' | first %}
{% if start == 'w' %}
{% assign _pick = true %}
{% endif %}
{% endif %}
{% endcase %}
{% if _pick %}
{% assign _remain = _remain | remove: c | strip %}
{% assign _wrapper_class = _wrapper_class | append: ' ' | append: c %}
{% endif %}
{% endfor %}
{% unless _wrapper_class == '' %}
{% capture _old_class %}class="{{ _class }}"{% endcapture %}
{% assign _left = _left | remove: _old_class %}
{% unless _remain == '' %}
{% capture _new_class %}class="{{ _remain }}"{% endcapture %}
{% assign _left = _left | append: _new_class %}
{% endunless %}
{% endunless %}
{% endif %}
{% assign _final_src = null %}
@ -110,7 +142,7 @@
{% if _lqip %}
{% assign _lazyload = false %}
{% assign _class = _class | append: ' blur' %}
{% assign _wrapper_class = _wrapper_class | append: ' blur' %}
{% unless _lqip contains 'data:' %}
{% assign _lqip_alt = 'lqip="' | append: _path_prefix %}
@ -121,7 +153,7 @@
{% assign _left = _left | replace: 'src=', 'data-src=' | replace: ' lqip=', ' data-lqip="true" src=' %}
{% else %}
{% assign _class = _class | append: ' shimmer' %}
{% assign _wrapper_class = _wrapper_class | append: ' shimmer' %}
{% endif %}
<!-- lazy-load images -->
@ -153,8 +185,8 @@
{% assign _wrapper_start = _final_src
| default: _src
| prepend: '<a href="'
| append: '" class="popup img-link '
| append: _class
| append: '" class="popup img-link'
| append: _wrapper_class
| append: '">'
%}

View File

@ -12,36 +12,38 @@
{tags}
</div>
</header>
<p>{snippet}</p>
<p>{content}</p>
</article>
{% endcapture %}
{% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
<script>
{%- comment -%} Note: dependent library will be loaded in `js-selector.html` {%- endcomment -%}
SimpleJekyllSearch({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('search-results'),
json: '{{ '/assets/js/data/search.json' | relative_url }}',
searchResultTemplate: '{{ result_elem | strip_newlines }}',
noResultsText: '{{ not_found }}',
templateMiddleware: function(prop, value, template) {
if (prop === 'categories') {
if (value === '') {
return `${value}`;
} else {
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
{% comment %} Note: dependent library will be loaded in `js-selector.html` {% endcomment %}
document.addEventListener('DOMContentLoaded', () => {
SimpleJekyllSearch({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('search-results'),
json: '{{ '/assets/js/data/search.json' | relative_url }}',
searchResultTemplate: '{{ result_elem | strip_newlines }}',
noResultsText: '{{ not_found }}',
templateMiddleware: function(prop, value, template) {
if (prop === 'categories') {
if (value === '') {
return `${value}`;
} else {
return `<div class="me-sm-4"><i class="far fa-folder fa-fw"></i>${value}</div>`;
}
}
}
if (prop === 'tags') {
if (value === '') {
return `${value}`;
} else {
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
if (prop === 'tags') {
if (value === '') {
return `${value}`;
} else {
return `<div><i class="fa fa-tag fa-fw"></i>${value}</div>`;
}
}
}
}
});
});
</script>

View File

@ -3,7 +3,7 @@
<div id="search-result-wrapper" class="d-flex justify-content-center d-none">
<div class="col-11 content">
<div id="search-hints">
{% include_cached trending-tags.html %}
{% include_cached trending-tags.html lang=include.lang %}
</div>
<div id="search-results" class="d-flex flex-wrap justify-content-center text-muted mt-3"></div>
</div>

View File

@ -11,9 +11,7 @@
{%- endif -%}
</a>
<h1 class="site-title">
<a href="{{ '/' | relative_url }}">{{ site.title }}</a>
</h1>
<a class="site-title d-block" href="{{ '/' | relative_url }}">{{ site.title }}</a>
<p class="site-subtitle fst-italic mb-0">{{ site.tagline }}</p>
</header>
<!-- .profile-wrapper -->

10
_includes/toc-status.html Normal file
View File

@ -0,0 +1,10 @@
{% comment %}
Determine TOC state and return it through variable "enable_toc"
{% endcomment %}
{% assign enable_toc = false %}
{% if site.toc and page.toc %}
{% if page.content contains '<h2' or page.content contains '<h3' %}
{% assign enable_toc = true %}
{% endif %}
{% endif %}

View File

@ -1,13 +1,9 @@
{% assign enable_toc = false %}
{% if site.toc and page.toc %}
{% if page.content contains '<h2' or page.content contains '<h3' %}
{% assign enable_toc = true %}
{% endif %}
{% endif %}
{% include toc-status.html %}
{% if enable_toc %}
<section id="toc-wrapper" class="d-none ps-0 pe-4">
<h2 class="panel-heading ps-3 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2>
<div class="toc-border-cover z-3"></div>
<section id="toc-wrapper" class="invisible position-sticky ps-0 pe-4 pb-4">
<h2 class="panel-heading ps-3 pb-2 mb-0">{{- site.data.locales[include.lang].panel.toc -}}</h2>
<nav id="toc"></nav>
</section>
{% endif %}

View File

@ -1,6 +1,6 @@
<!-- The Top Bar -->
<header id="topbar-wrapper" aria-label="Top Bar">
<header id="topbar-wrapper" class="flex-shrink-0" aria-label="Top Bar">
<div
id="topbar"
class="d-flex align-items-center justify-content-between px-lg-3 h-100"
@ -40,7 +40,7 @@
</nav>
<!-- endof #breadcrumb -->
<button type="button" id="sidebar-trigger" class="btn btn-link">
<button type="button" id="sidebar-trigger" class="btn btn-link" aria-label="Sidebar">
<i class="fas fa-bars fa-fw"></i>
</button>
@ -55,7 +55,7 @@
{% endif %}
</div>
<button type="button" id="search-trigger" class="btn btn-link">
<button type="button" id="search-trigger" class="btn btn-link" aria-label="Search">
<i class="fas fa-search fa-fw"></i>
</button>

View File

@ -1 +0,0 @@
Chirpy v<%= pkg.version %> | © 2019 <%= pkg.author %> | <%= pkg.license %> Licensed | <%= pkg.homepage %>

View File

@ -1,5 +1,5 @@
import { basic, initSidebar, initTopbar } from './modules/layouts';
import { categoryCollapse } from './modules/plugins';
import { categoryCollapse } from './modules/components';
basic();
initSidebar();

View File

@ -1,5 +1,5 @@
import { basic, initSidebar, initTopbar } from './modules/layouts';
import { initLocaleDatetime, loadImg } from './modules/plugins';
import { initLocaleDatetime, loadImg } from './modules/components';
loadImg();
initLocaleDatetime();

View File

@ -1,5 +1,5 @@
import { basic, initSidebar, initTopbar } from './modules/layouts';
import { initLocaleDatetime } from './modules/plugins';
import { initLocaleDatetime } from './modules/components';
initSidebar();
initTopbar();

View File

@ -3,4 +3,8 @@ export { initClipboard } from './components/clipboard';
export { loadImg } from './components/img-loading';
export { imgPopup } from './components/img-popup';
export { initLocaleDatetime } from './components/locale-datetime';
export { toc } from './components/toc';
export { initToc } from './components/toc';
export { loadMermaid } from './components/mermaid';
export { modeWatcher } from './components/mode-toggle';
export { back2top } from './components/back-to-top';
export { loadTooptip } from './components/tooltip-loader';

View File

@ -4,12 +4,47 @@
* Dependencies: https://github.com/biati-digital/glightbox
*/
const IMG_CLASS = 'popup';
const lightImages = '.popup:not(.dark)';
const darkImages = '.popup:not(.light)';
let selector = lightImages;
function updateImages(current, reverse) {
if (selector === lightImages) {
selector = darkImages;
} else {
selector = lightImages;
}
if (reverse === null) {
reverse = GLightbox({ selector: `${selector}` });
}
[current, reverse] = [reverse, current];
}
export function imgPopup() {
if (document.getElementsByClassName(IMG_CLASS).length === 0) {
if (document.querySelector('.popup') === null) {
return;
}
GLightbox({ selector: `.${IMG_CLASS}` });
const hasDualImages = !(
document.querySelector('.popup.light') === null &&
document.querySelector('.popup.dark') === null
);
if (Theme.visualState === Theme.DARK) {
selector = darkImages;
}
let current = GLightbox({ selector: `${selector}` });
if (hasDualImages && Theme.switchable) {
let reverse = null;
window.addEventListener('message', (event) => {
if (event.source === window && event.data && event.data.id === Theme.ID) {
updateImages(current, reverse);
}
});
}
}

View File

@ -0,0 +1,60 @@
/**
* Mermaid-js loader
*/
const MERMAID = 'mermaid';
const themeMapper = Theme.getThemeMapper('default', 'dark');
function refreshTheme(event) {
if (event.source === window && event.data && event.data.id === Theme.ID) {
// Re-render the SVG <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344>
const mermaidList = document.getElementsByClassName(MERMAID);
[...mermaidList].forEach((elem) => {
const svgCode = elem.previousSibling.children.item(0).textContent;
elem.textContent = svgCode;
elem.removeAttribute('data-processed');
});
const newTheme = themeMapper[Theme.visualState];
mermaid.initialize({ theme: newTheme });
mermaid.init(null, `.${MERMAID}`);
}
}
function setNode(elem) {
const svgCode = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('d-none');
// Create mermaid node
const mermaid = document.createElement('pre');
mermaid.classList.add(MERMAID);
const text = document.createTextNode(svgCode);
mermaid.appendChild(text);
backup.after(mermaid);
}
export function loadMermaid() {
if (
typeof mermaid === 'undefined' ||
typeof mermaid.initialize !== 'function'
) {
return;
}
const initTheme = themeMapper[Theme.visualState];
let mermaidConf = {
theme: initTheme
};
const basicList = document.getElementsByClassName('language-mermaid');
[...basicList].forEach(setNode);
mermaid.initialize(mermaidConf);
if (Theme.switchable) {
window.addEventListener('message', refreshTheme);
}
}

View File

@ -0,0 +1,15 @@
/**
* Add listener for theme mode toggle
*/
const $toggle = document.getElementById('mode-toggle');
export function modeWatcher() {
if (!$toggle) {
return;
}
$toggle.addEventListener('click', () => {
Theme.flip();
});
}

View File

@ -1,14 +0,0 @@
/**
* Add listener for theme mode toggle
*/
const toggle = document.getElementById('mode-toggle');
export function modeWatcher() {
if (!toggle) {
return;
}
toggle.addEventListener('click', () => {
modeToggle.flipMode();
});
}

View File

@ -1,5 +1,5 @@
/**
* This script make #search-result-wrapper switch to unloaded or shown automatically.
* This script make #search-result-wrapper switch to unload or shown automatically.
*/
const btnSbTrigger = document.getElementById('sidebar-trigger');

View File

@ -1,27 +0,0 @@
/**
* Expand or close the sidebar in mobile screens.
*/
const ATTR_DISPLAY = 'sidebar-display';
class SidebarUtil {
static isExpanded = false;
static toggle() {
if (SidebarUtil.isExpanded === false) {
document.body.setAttribute(ATTR_DISPLAY, '');
} else {
document.body.removeAttribute(ATTR_DISPLAY);
}
SidebarUtil.isExpanded = !SidebarUtil.isExpanded;
}
}
export function sidebarExpand() {
document
.getElementById('sidebar-trigger')
.addEventListener('click', SidebarUtil.toggle);
document.getElementById('mask').addEventListener('click', SidebarUtil.toggle);
}

View File

@ -1,15 +1,36 @@
export function toc() {
if (document.querySelector('main h2, main h3')) {
// see: https://github.com/tscanlin/tocbot#usage
tocbot.init({
tocSelector: '#toc',
contentSelector: '.content',
ignoreSelector: '[data-toc-skip]',
headingSelector: 'h2, h3, h4',
orderedList: false,
scrollSmooth: false
});
import { TocMobile as mobile } from './toc/toc-mobile';
import { TocDesktop as desktop } from './toc/toc-desktop';
document.getElementById('toc-wrapper').classList.remove('d-none');
const desktopMode = matchMedia('(min-width: 1200px)');
function refresh(e) {
if (e.matches) {
if (mobile.popupOpened) {
mobile.hidePopup();
}
desktop.refresh();
} else {
mobile.refresh();
}
}
function init() {
if (document.querySelector('main>article[data-toc="true"]') === null) {
return;
}
// Avoid create multiple instances of Tocbot. Ref: <https://github.com/tscanlin/tocbot/issues/203>
if (desktopMode.matches) {
desktop.init();
} else {
mobile.init();
}
const $tocWrapper = document.getElementById('toc-wrapper');
$tocWrapper.classList.remove('invisible');
desktopMode.onchange = refresh;
}
export { init as initToc };

View File

@ -0,0 +1,20 @@
export class TocDesktop {
/* Tocbot options Ref: https://github.com/tscanlin/tocbot#usage */
static options = {
tocSelector: '#toc',
contentSelector: '.content',
ignoreSelector: '[data-toc-skip]',
headingSelector: 'h2, h3, h4',
orderedList: false,
scrollSmooth: false,
headingsOffset: 16 * 2 // 2rem
};
static refresh() {
tocbot.refresh(this.options);
}
static init() {
tocbot.init(this.options);
}
}

View File

@ -0,0 +1,125 @@
/**
* TOC button, topbar and popup for mobile devices
*/
const $tocBar = document.getElementById('toc-bar');
const $soloTrigger = document.getElementById('toc-solo-trigger');
const $triggers = document.getElementsByClassName('toc-trigger');
const $popup = document.getElementById('toc-popup');
const $btnClose = document.getElementById('toc-popup-close');
const SCROLL_LOCK = 'overflow-hidden';
const CLOSING = 'closing';
export class TocMobile {
static #invisible = true;
static #barHeight = 16 * 3; // 3rem
static options = {
tocSelector: '#toc-popup-content',
contentSelector: '.content',
ignoreSelector: '[data-toc-skip]',
headingSelector: 'h2, h3, h4',
orderedList: false,
scrollSmooth: false,
collapseDepth: 4,
headingsOffset: this.#barHeight
};
static initBar() {
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
$tocBar.classList.toggle('invisible', entry.isIntersecting);
});
},
{ rootMargin: `-${this.#barHeight}px 0px 0px 0px` }
);
observer.observe($soloTrigger);
this.#invisible = false;
}
static listenAnchors() {
const $anchors = document.getElementsByClassName('toc-link');
[...$anchors].forEach((anchor) => {
anchor.onclick = () => this.hidePopup();
});
}
static refresh() {
if (this.#invisible) {
this.initComponents();
}
tocbot.refresh(this.options);
this.listenAnchors();
}
static get popupOpened() {
return $popup.open;
}
static showPopup() {
this.lockScroll(true);
$popup.showModal();
const activeItem = $popup.querySelector('li.is-active-li');
activeItem.scrollIntoView({ block: 'center' });
}
static hidePopup() {
$popup.toggleAttribute(CLOSING);
$popup.addEventListener(
'animationend',
() => {
$popup.toggleAttribute(CLOSING);
$popup.close();
},
{ once: true }
);
this.lockScroll(false);
}
static lockScroll(enable) {
document.documentElement.classList.toggle(SCROLL_LOCK, enable);
document.body.classList.toggle(SCROLL_LOCK, enable);
}
static clickBackdrop(event) {
if ($popup.hasAttribute(CLOSING)) {
return;
}
const rect = event.target.getBoundingClientRect();
if (
event.clientX < rect.left ||
event.clientX > rect.right ||
event.clientY < rect.top ||
event.clientY > rect.bottom
) {
this.hidePopup();
}
}
static initComponents() {
this.initBar();
[...$triggers].forEach((trigger) => {
trigger.onclick = () => this.showPopup();
});
$popup.onclick = (e) => this.clickBackdrop(e);
$btnClose.onclick = () => this.hidePopup();
$popup.oncancel = (e) => {
e.preventDefault();
this.hidePopup();
};
}
static init() {
tocbot.init(this.options);
this.listenAnchors();
this.initComponents();
}
}

View File

@ -1,7 +1,7 @@
import { back2top } from '../components/back-to-top';
import { loadTooptip } from '../components/tooltip-loader';
import { back2top, loadTooptip, modeWatcher } from '../components';
export function basic() {
modeWatcher();
back2top();
loadTooptip();
}

View File

@ -1,7 +1,19 @@
import { modeWatcher } from '../components/mode-watcher';
import { sidebarExpand } from '../components/sidebar';
const ATTR_DISPLAY = 'sidebar-display';
const $sidebar = document.getElementById('sidebar');
const $trigger = document.getElementById('sidebar-trigger');
const $mask = document.getElementById('mask');
class SidebarUtil {
static #isExpanded = false;
static toggle() {
this.#isExpanded = !this.#isExpanded;
document.body.toggleAttribute(ATTR_DISPLAY, this.#isExpanded);
$sidebar.classList.toggle('z-2', this.#isExpanded);
$mask.classList.toggle('d-none', !this.#isExpanded);
}
}
export function initSidebar() {
modeWatcher();
sidebarExpand();
$trigger.onclick = $mask.onclick = () => SidebarUtil.toggle();
}

View File

@ -1,9 +1,15 @@
import { basic, initSidebar, initTopbar } from './modules/layouts';
import { loadImg, imgPopup, initClipboard } from './modules/plugins';
import {
loadImg,
imgPopup,
initClipboard,
loadMermaid
} from './modules/components';
loadImg();
imgPopup();
initSidebar();
initTopbar();
initClipboard();
loadMermaid();
basic();

View File

@ -1,17 +1,20 @@
import { basic, initSidebar, initTopbar } from './modules/layouts';
import { basic, initTopbar, initSidebar } from './modules/layouts';
import {
loadImg,
imgPopup,
initLocaleDatetime,
initClipboard,
toc
} from './modules/plugins';
initToc,
loadMermaid
} from './modules/components';
loadImg();
toc();
initToc();
imgPopup();
initSidebar();
initLocaleDatetime();
initClipboard();
initTopbar();
loadMermaid();
basic();

View File

@ -1,3 +0,0 @@
---
permalink: /:basename
---

View File

@ -1,15 +1,19 @@
import { pwa, baseurl } from '../../_config.yml';
import Toast from 'bootstrap/js/src/toast';
if ('serviceWorker' in navigator) {
if (pwa.enabled) {
const swUrl = `${baseurl}/sw.min.js`;
// Get Jekyll config from URL parameters
const src = new URL(document.currentScript.src);
const register = src.searchParams.get('register');
const baseUrl = src.searchParams.get('baseurl');
if (register) {
const swUrl = `${baseUrl}/sw.min.js`;
const notification = document.getElementById('notification');
const btnRefresh = notification.querySelector('.toast-body>button');
const popupWindow = Toast.getOrCreateInstance(notification);
navigator.serviceWorker.register(swUrl).then((registration) => {
// In case the user ignores the notification
// Restore the update window that was last manually closed by the user
if (registration.waiting) {
popupWindow.show();
}

Some files were not shown because too many files have changed in this diff Show More