Import theme
This commit is contained in:
parent
51769fa6be
commit
c59ffbfeee
127 changed files with 13611 additions and 1 deletions
371
CHANGELOG.md
Normal file
371
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,371 @@
|
|||
# Changelog
|
||||
|
||||
## [1.18.0](https://github.com/lxndrblz/anatole/compare/v1.17.1...v1.18.0) (2025-09-20)
|
||||
|
||||
### Features
|
||||
|
||||
- update Mermaid diagrams to follow theme preference ([#576](https://github.com/lxndrblz/anatole/issues/576)) ([902d1bf](https://github.com/lxndrblz/anatole/commit/902d1bfcae166cf9b0350bb88810e3c0162430a3))
|
||||
- update npm packages to latest versions ([3632c0f](https://github.com/lxndrblz/anatole/commit/3632c0feaa1d2cd9a73cb294b06dbc952957908a))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- missing string and fixed translation in Spanish localization ([#577](https://github.com/lxndrblz/anatole/issues/577)) ([b0a42b1](https://github.com/lxndrblz/anatole/commit/b0a42b1bc2a8da25a3e8283f8ab7d59a65a293be))
|
||||
|
||||
## [1.17.1](https://github.com/lxndrblz/anatole/compare/v1.17.0...v1.17.1) (2025-06-22)
|
||||
|
||||
## [1.17.0](https://github.com/lxndrblz/anatole/compare/v1.16.2...v1.17.0) (2025-06-19)
|
||||
|
||||
### Features
|
||||
|
||||
- add license metadata ([#518](https://github.com/lxndrblz/anatole/issues/518)) ([f99b5b1](https://github.com/lxndrblz/anatole/commit/f99b5b1345968a5c160e8432f364f8dc36b78c80))
|
||||
- add support for Meta Pixel tracker ([#538](https://github.com/lxndrblz/anatole/issues/538)) ([513c2c2](https://github.com/lxndrblz/anatole/commit/513c2c23c92916191a56de17291c32a372e6661e))
|
||||
- localize table of contents title ([#557](https://github.com/lxndrblz/anatole/issues/557)) ([e875766](https://github.com/lxndrblz/anatole/commit/e875766eb844963b10b2be143f5c2c47084b13d2))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- clear warnings when previewing example site (hugo 0.144.2) ([#542](https://github.com/lxndrblz/anatole/issues/542)) ([5831d85](https://github.com/lxndrblz/anatole/commit/5831d852d14e2184f4cd4d2d5b78725f7a0a497c))
|
||||
- Error while running Devcontainer ([#567](https://github.com/lxndrblz/anatole/issues/567)) ([1b11f01](https://github.com/lxndrblz/anatole/commit/1b11f01e45343a440917e676763ab939a0437727))
|
||||
- fix partial handling for pagination ([b6cbc94](https://github.com/lxndrblz/anatole/commit/b6cbc945fe2c4167206883e7fb506e1e35125ac4)), closes [#551](https://github.com/lxndrblz/anatole/issues/551)
|
||||
- make setting 'contentratio' work again ([#560](https://github.com/lxndrblz/anatole/issues/560)) ([71f54e9](https://github.com/lxndrblz/anatole/commit/71f54e941b74122353d950c04c7afa1a7b887595))
|
||||
- planify post content on index ([#545](https://github.com/lxndrblz/anatole/issues/545)) ([e1aaaf7](https://github.com/lxndrblz/anatole/commit/e1aaaf7463756f65a866ff15f4c15e25b78c82fe))
|
||||
- theme switcher toggling incorrectly ([#553](https://github.com/lxndrblz/anatole/issues/553)) ([3683a0f](https://github.com/lxndrblz/anatole/commit/3683a0f2b6a0750f858afd4dd3e65bb9caf3ef5b))
|
||||
|
||||
## [1.16.2](https://github.com/lxndrblz/anatole/compare/v1.16.1...v1.16.2) (2025-01-03)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- broken rss feed ([#535](https://github.com/lxndrblz/anatole/issues/535)) ([1c6273e](https://github.com/lxndrblz/anatole/commit/1c6273e5c61c9a9e3d2aeb95317acea30f41e13d))
|
||||
|
||||
## [1.16.1](https://github.com/lxndrblz/anatole/compare/v1.16.0...v1.16.1) (2024-12-26)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- unsafe html warnings ([#531](https://github.com/lxndrblz/anatole/issues/531)) ([056ff32](https://github.com/lxndrblz/anatole/commit/056ff3230698a3bec8ab75897b2085032b513b3a))
|
||||
|
||||
## [1.16.0](https://github.com/lxndrblz/anatole/compare/v1.15.1...v1.16.0) (2024-11-17)
|
||||
|
||||
### Features
|
||||
|
||||
- add option to disable title capitalization on index ([#526](https://github.com/lxndrblz/anatole/issues/526)) ([9f214dc](https://github.com/lxndrblz/anatole/commit/9f214dc775456a34215de3acc1b34fa25b5eb4ed))
|
||||
|
||||
## [1.15.1](https://github.com/lxndrblz/anatole/compare/v1.15.0...v1.15.1) (2024-10-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- deprecation warnings ([#521](https://github.com/lxndrblz/anatole/issues/521)) ([98c88d0](https://github.com/lxndrblz/anatole/commit/98c88d0574cba5072c5fa11accf66776ea5d0cf9))
|
||||
|
||||
## [1.15.0](https://github.com/lxndrblz/anatole/compare/v1.14.0...v1.15.0) (2024-07-24)
|
||||
|
||||
### Features
|
||||
|
||||
- add config option to disable title capitalization ([#408](https://github.com/lxndrblz/anatole/issues/408)) ([297bcc8](https://github.com/lxndrblz/anatole/commit/297bcc825d97cad41359d047e02d310d3fcdf8a1))
|
||||
- add general styling for tables ([4eee0da](https://github.com/lxndrblz/anatole/commit/4eee0da80251b046049c3806da9ef4dc90be6a07))
|
||||
- implement multilingual portfolio data ([#481](https://github.com/lxndrblz/anatole/issues/481)) ([d500419](https://github.com/lxndrblz/anatole/commit/d500419b5b0ac464387df6226d0dd51721a3e976))
|
||||
- translate related posts header ([#473](https://github.com/lxndrblz/anatole/issues/473)) ([f8eda4a](https://github.com/lxndrblz/anatole/commit/f8eda4ac663328b89e8e99d3d5d18b815ccccee1))
|
||||
- update fontawesome version ([#508](https://github.com/lxndrblz/anatole/issues/508)) ([7a44369](https://github.com/lxndrblz/anatole/commit/7a44369734a6a2a37162da7c5321c4c8d0a84a43))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- deprecation warnings for recent Hugo versions ([#511](https://github.com/lxndrblz/anatole/issues/511)) ([4435557](https://github.com/lxndrblz/anatole/commit/4435557b80dd5b8f9ff5a391fb9a128254c13ffb))
|
||||
- remove decoration around backtick blocks ([#507](https://github.com/lxndrblz/anatole/issues/507)) ([ca04698](https://github.com/lxndrblz/anatole/commit/ca0469823bacccd11f571577ceeb17421b6e1b08))
|
||||
- resolve language params warning when using hugo v0.112+ ([#464](https://github.com/lxndrblz/anatole/issues/464)) ([9ac9117](https://github.com/lxndrblz/anatole/commit/9ac9117bccbd19ce4f7d602b9c12a2a38ca2e76d))
|
||||
- title in sidebar changing marging ([1ca7be2](https://github.com/lxndrblz/anatole/commit/1ca7be2ca23b7ac6809c3a3a013ce0c6d09ed1c6))
|
||||
|
||||
## [1.14.0](https://github.com/lxndrblz/anatole/compare/v1.12.0...v1.14.0) (2024-04-09)
|
||||
|
||||
### Features
|
||||
|
||||
- add descriptions to portfolio categories ([#494](https://github.com/lxndrblz/anatole/issues/494)) ([a0beb99](https://github.com/lxndrblz/anatole/commit/a0beb99691b4bfa97f8d7ea67efd9f233e5be369))
|
||||
- add giscus comments system ([#448](https://github.com/lxndrblz/anatole/issues/448)) ([bedc8f5](https://github.com/lxndrblz/anatole/commit/bedc8f56b595ed13db27b16c1e157149c4bedcac))
|
||||
- add Hungarian localization ([#434](https://github.com/lxndrblz/anatole/issues/434)) ([86586db](https://github.com/lxndrblz/anatole/commit/86586dbdde6cc9de3b3cd88ef4ca16acc5b9f25c))
|
||||
- add id.toml ([#417](https://github.com/lxndrblz/anatole/issues/417)) ([82847f7](https://github.com/lxndrblz/anatole/commit/82847f76262b2822edc8879a09983e192712eeab))
|
||||
- add matomo analytics support ([#500](https://github.com/lxndrblz/anatole/issues/500)) ([418c14e](https://github.com/lxndrblz/anatole/commit/418c14e4629693251bd2a7d6a9623e35d91e9d01)), closes [#411](https://github.com/lxndrblz/anatole/issues/411)
|
||||
- add support to provide custom tracker script name for Umami Analytics ([#418](https://github.com/lxndrblz/anatole/issues/418)) ([f6c9968](https://github.com/lxndrblz/anatole/commit/f6c9968ffd595e105d20f3f4aa80ded571f05abb))
|
||||
- enable 'pre' property in menu config file ([#381](https://github.com/lxndrblz/anatole/issues/381)) ([6deb26e](https://github.com/lxndrblz/anatole/commit/6deb26e699ceb1eb3d2d325689655bf0e06bb4bb))
|
||||
- hide sidebar on certain posts ([#439](https://github.com/lxndrblz/anatole/issues/439)) ([38de0c9](https://github.com/lxndrblz/anatole/commit/38de0c9dfe6bb598bef0effb980bd001553ef59c))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- remove async version of Google Analytics ([#498](https://github.com/lxndrblz/anatole/issues/498)) ([4d73eb5](https://github.com/lxndrblz/anatole/commit/4d73eb5d8be6dfc12cc6f4fe52df6ce492d5f1cf))
|
||||
- remove mixin to fix print layout ([#391](https://github.com/lxndrblz/anatole/issues/391)) ([7981438](https://github.com/lxndrblz/anatole/commit/7981438d6c1bd1513ff0f2faab88035c1ef116c2))
|
||||
- Resolve font sizing issue ([#451](https://github.com/lxndrblz/anatole/issues/451)) ([de7c5bb](https://github.com/lxndrblz/anatole/commit/de7c5bb037893effd996bc878ba123f4cccdb8cb))
|
||||
- tidy <head> elements ([#478](https://github.com/lxndrblz/anatole/issues/478)) ([5299af6](https://github.com/lxndrblz/anatole/commit/5299af67fe031e0028b8fc88b7221194deff2cf1)), closes [#477](https://github.com/lxndrblz/anatole/issues/477)
|
||||
- wordwrap in (un)ordered list ([#497](https://github.com/lxndrblz/anatole/issues/497)) ([61e2792](https://github.com/lxndrblz/anatole/commit/61e2792ebdb8a9a974b2c31991cb57502e2d0820)), closes [#496](https://github.com/lxndrblz/anatole/issues/496)
|
||||
|
||||
## [1.13.0](https://github.com/lxndrblz/anatole/compare/v1.12.0...v1.13.0) (2023-05-13)
|
||||
|
||||
### Features
|
||||
|
||||
- add Hungarian localization ([#434](https://github.com/lxndrblz/anatole/issues/434)) ([86586db](https://github.com/lxndrblz/anatole/commit/86586dbdde6cc9de3b3cd88ef4ca16acc5b9f25c))
|
||||
- add id.toml ([#417](https://github.com/lxndrblz/anatole/issues/417)) ([82847f7](https://github.com/lxndrblz/anatole/commit/82847f76262b2822edc8879a09983e192712eeab))
|
||||
- add support to provide custom tracker script name for Umami Analytics ([#418](https://github.com/lxndrblz/anatole/issues/418)) ([f6c9968](https://github.com/lxndrblz/anatole/commit/f6c9968ffd595e105d20f3f4aa80ded571f05abb))
|
||||
- enable 'pre' property in menu config file ([#381](https://github.com/lxndrblz/anatole/issues/381)) ([6deb26e](https://github.com/lxndrblz/anatole/commit/6deb26e699ceb1eb3d2d325689655bf0e06bb4bb))
|
||||
- hide sidebar on certain posts ([#439](https://github.com/lxndrblz/anatole/issues/439)) ([38de0c9](https://github.com/lxndrblz/anatole/commit/38de0c9dfe6bb598bef0effb980bd001553ef59c))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- remove mixin to fix print layout ([#391](https://github.com/lxndrblz/anatole/issues/391)) ([7981438](https://github.com/lxndrblz/anatole/commit/7981438d6c1bd1513ff0f2faab88035c1ef116c2))
|
||||
- Resolve font sizing issue ([#451](https://github.com/lxndrblz/anatole/issues/451)) ([de7c5bb](https://github.com/lxndrblz/anatole/commit/de7c5bb037893effd996bc878ba123f4cccdb8cb))
|
||||
|
||||
## [1.12.0](https://github.com/lxndrblz/anatole/compare/v1.11.0...v1.12.0) (2022-11-26)
|
||||
|
||||
### Features
|
||||
|
||||
- Add reCAPTCHA to the contact form ([#365](https://github.com/lxndrblz/anatole/issues/365)) ([06847f3](https://github.com/lxndrblz/anatole/commit/06847f35a19834ff26c60b691522107fa201a7a5))
|
||||
- add rel-me to social links ([#394](https://github.com/lxndrblz/anatole/issues/394)) ([210f632](https://github.com/lxndrblz/anatole/commit/210f6321cac602c948bc6c92344743e6d8cf4cfd))
|
||||
- added mermaid support for displaying diagrams ([#359](https://github.com/lxndrblz/anatole/issues/359)) ([d511a6f](https://github.com/lxndrblz/anatole/commit/d511a6f520bcc2ffab10ce009239904774ed6bb0))
|
||||
- added TR language ([#401](https://github.com/lxndrblz/anatole/issues/401)) ([b2faf30](https://github.com/lxndrblz/anatole/commit/b2faf30d428b37fb45025c08e3ef42eb2a3006f6))
|
||||
- localized dates ([#373](https://github.com/lxndrblz/anatole/issues/373)) ([c097ab9](https://github.com/lxndrblz/anatole/commit/c097ab90ab82e257d961b4122e690d25aeb1f6ea))
|
||||
- translate series label ([#372](https://github.com/lxndrblz/anatole/issues/372)) ([2fbe51c](https://github.com/lxndrblz/anatole/commit/2fbe51c98f2669eadeef8c1c2d00ee158d67a440))
|
||||
- trim the whitespace from the HTML meta tags ([#367](https://github.com/lxndrblz/anatole/issues/367)) ([6747495](https://github.com/lxndrblz/anatole/commit/67474957d7cfd7da342df3c4908b1162effc5e2d))
|
||||
- update Font Awesome and add Regular variant ([#375](https://github.com/lxndrblz/anatole/issues/375)) ([1d18d09](https://github.com/lxndrblz/anatole/commit/1d18d09bd63421735aff63f065ba36d4a41e6684))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- move theme class to root node to prevent white flash ([#392](https://github.com/lxndrblz/anatole/issues/392)) ([c36e1d8](https://github.com/lxndrblz/anatole/commit/c36e1d8fff70ab6a817e00aa053b996342554681))
|
||||
- prettier error with go template ([#398](https://github.com/lxndrblz/anatole/issues/398)) ([549a722](https://github.com/lxndrblz/anatole/commit/549a722314ac6d8397ffa1802426480641c92064))
|
||||
- properly escape title in schema ([#358](https://github.com/lxndrblz/anatole/issues/358)) ([c0c367c](https://github.com/lxndrblz/anatole/commit/c0c367c2de79783614b926a0661e287fc401af20))
|
||||
- resolve dependency conflict conventional changelog release it ([#388](https://github.com/lxndrblz/anatole/issues/388)) ([b86ecc7](https://github.com/lxndrblz/anatole/commit/b86ecc78a16aa7348fdc9c4175d3daca16bd4fe8))
|
||||
- update FA translation ([#400](https://github.com/lxndrblz/anatole/issues/400)) ([24afb94](https://github.com/lxndrblz/anatole/commit/24afb94d40460a32eef5b3458e73197eca89901e))
|
||||
|
||||
## [1.11.0](https://github.com/lxndrblz/anatole/compare/v1.10.0...v1.11.0) (2022-05-13)
|
||||
|
||||
### Features
|
||||
|
||||
- added support for navigation menu dropdown ([#344](https://github.com/lxndrblz/anatole/issues/344)) ([6c55d42](https://github.com/lxndrblz/anatole/commit/6c55d4282e1e460afb56a19e70058f05d738e85d))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- apply active class to submenu items ([#350](https://github.com/lxndrblz/anatole/issues/350)) ([ec5066b](https://github.com/lxndrblz/anatole/commit/ec5066bdb57e8927150cb9e1b37ad0cedb047716))
|
||||
- incorrect display of submenu items when multiple menu dropdowns are implemented ([#354](https://github.com/lxndrblz/anatole/issues/354)) ([1959fa6](https://github.com/lxndrblz/anatole/commit/1959fa6d400511da65044c29f1bc7c7030a31ca6)), closes [#352](https://github.com/lxndrblz/anatole/issues/352)
|
||||
- open social links in a new tab ([#353](https://github.com/lxndrblz/anatole/issues/353)) ([81c4208](https://github.com/lxndrblz/anatole/commit/81c4208b6778ad3a730f7f654106942a9a1e7ff9))
|
||||
|
||||
## [1.10.0](https://github.com/lxndrblz/anatole/compare/v1.9.0...v1.10.0) (2022-04-16)
|
||||
|
||||
### Features
|
||||
|
||||
- use front matter description as rss item description ([89c8c65](https://github.com/lxndrblz/anatole/commit/89c8c6558702bf29fc1b07137d29ce80ab06ed5f))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- loading the correct internal Google Analytics template for v4 token ([ec0175a](https://github.com/lxndrblz/anatole/commit/ec0175a4ed4131f4cf26d723c243d388b421d7eb)), closes [#339](https://github.com/lxndrblz/anatole/issues/339)
|
||||
- remove double h1 tags ([#347](https://github.com/lxndrblz/anatole/issues/347)) ([849a2f2](https://github.com/lxndrblz/anatole/commit/849a2f2d9bca2928df6e86e98576e4ec2988d65f))
|
||||
|
||||
## [1.9.0](https://github.com/lxndrblz/anatole/compare/v1.8.0...v1.9.0) (2022-03-27)
|
||||
|
||||
### Features
|
||||
|
||||
- add a notice shortcode ([212d6cc](https://github.com/lxndrblz/anatole/commit/212d6ccae4ac6a029352fba397219eaf1d30e623))
|
||||
- Add option to display related posts ([#300](https://github.com/lxndrblz/anatole/issues/300)) ([6ad4d7a](https://github.com/lxndrblz/anatole/commit/6ad4d7aea163240dbb76ed405125c7e3eeda2605))
|
||||
- add the option to hide the sidebar on post pages ([a9d3b1d](https://github.com/lxndrblz/anatole/commit/a9d3b1dd926dfc3ba5aacb0928b811fc318309e8))
|
||||
- added meta author HTML tag ([1a063c8](https://github.com/lxndrblz/anatole/commit/1a063c8d5dcf3f6960f9df1de465c832f51b6d53))
|
||||
- avoid wrapping text of navigation items ([4ba5593](https://github.com/lxndrblz/anatole/commit/4ba5593c7282720fed7fc0eada17c025cba4089f))
|
||||
- layout improvements for portfolio ([3685a7d](https://github.com/lxndrblz/anatole/commit/3685a7dfa6d3f62670f0d2cd57cc80dbfcca00fe))
|
||||
- set open graph meta tags without requiring series taxonomy ([579d768](https://github.com/lxndrblz/anatole/commit/579d7682f2c91dc7d36e5f028ee999e91c3e8265))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- enable sidebar by default ([36ea4a8](https://github.com/lxndrblz/anatole/commit/36ea4a8ca1e5d0abe795419dd0555ee0b1b583b5))
|
||||
- increase padding on the x-axis ([fbecf7f](https://github.com/lxndrblz/anatole/commit/fbecf7ff34a8435eb72479cdba59468c5863270e))
|
||||
- minify fontawesome files format to resolve integrity check errors ([#335](https://github.com/lxndrblz/anatole/issues/335)) ([0e03d3f](https://github.com/lxndrblz/anatole/commit/0e03d3fc86c1bcb7fa99c9a87a041643d71cb1e6))
|
||||
- mobile and ultrawide views ([799d134](https://github.com/lxndrblz/anatole/commit/799d134e57a67c477bcb455d5e4dbe97e3a65b90))
|
||||
- non styled summary ([f345853](https://github.com/lxndrblz/anatole/commit/f345853fe8d314f612e218e6c035d75271846eae))
|
||||
- refactor SCSS according to BEM standards ([342ffd3](https://github.com/lxndrblz/anatole/commit/342ffd371483bdba81ca130a18ec162378e53cae))
|
||||
- refactor sidebar SCSS ([14af37f](https://github.com/lxndrblz/anatole/commit/14af37f0df41a0abcd691bc3d2c759f74e5db42e))
|
||||
- removed obsolete css properties ([e985a59](https://github.com/lxndrblz/anatole/commit/e985a599598c12b344848850c6897bace6060e99))
|
||||
- show sidebar only on homepage ([3db4bb0](https://github.com/lxndrblz/anatole/commit/3db4bb0f8eb2f47076ec1858cb19cdf7148f07db))
|
||||
|
||||
### Reverts
|
||||
|
||||
- Revert "ci: temporarily invoke workflow for testing purposes" ([a6aa3e4](https://github.com/lxndrblz/anatole/commit/a6aa3e487419fab865c3ab3286eeefc49dc9e9f4))
|
||||
- Revert "ci: temporarily invoke workflow for testing purposes" ([b3011c1](https://github.com/lxndrblz/anatole/commit/b3011c10efc2344873bb85696854fbe6bcfc91e9))
|
||||
- Revert "ci: temporarily invoke workflow for testing purposes" ([1ff8217](https://github.com/lxndrblz/anatole/commit/1ff82174fb1bb6003725fe52f4c650eb807006e7))
|
||||
|
||||
## [1.8.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2022-03-10)
|
||||
|
||||
### Features
|
||||
|
||||
- add bottom spacing in case of row wraps ([a22f17c](https://github.com/lxndrblz/anatole/commit/a22f17ca78345ba84e45c9428ecb5ab1737172b1))
|
||||
- add padding to navbar burger ([d277672](https://github.com/lxndrblz/anatole/commit/d277672c66a58cdecc9aed61f77f28959ecaab7b)), closes [#308](https://github.com/lxndrblz/anatole/issues/308)
|
||||
- add size options to figure shortcode ([a8c3d31](https://github.com/lxndrblz/anatole/commit/a8c3d31a715db10885ffa84f79810899f2264856))
|
||||
- include credits to FontAwesome ([12ff26f](https://github.com/lxndrblz/anatole/commit/12ff26f433d1bcd2e5b1b130a44b087b298cc79f))
|
||||
- load fontawesome from local server ([2d0d448](https://github.com/lxndrblz/anatole/commit/2d0d448284c65746361730ca2c10185a616ca542)), closes [#299](https://github.com/lxndrblz/anatole/issues/299)
|
||||
- reduce size of big figure ([a7d4d91](https://github.com/lxndrblz/anatole/commit/a7d4d91b7a1d665832cecf2073354ca15fc8af2f))
|
||||
- style portfolio metadata as list with icon start adornments ([2b05b86](https://github.com/lxndrblz/anatole/commit/2b05b8608380133f5fc65e0aba2dba274eefc1a3))
|
||||
- title case headings on content pages respectively keep user formatting ([8dc415c](https://github.com/lxndrblz/anatole/commit/8dc415c97890e8264a17c35906f763447c571b6b))
|
||||
- title case portfolio headings ([278c146](https://github.com/lxndrblz/anatole/commit/278c1461e333cc7c0d63d7abaf4a35a6ba64fc69))
|
||||
- uppercase headings on overview pages ([c14fb1e](https://github.com/lxndrblz/anatole/commit/c14fb1e46cd2d37a0fa0256d27cf7dfb997bd6f7))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- [display] dark mode preference was not taken into account. ([57011f1](https://github.com/lxndrblz/anatole/commit/57011f1d2b04cc9032cedcd6af00301461725fa8))
|
||||
- chroma styling in post content ([923c738](https://github.com/lxndrblz/anatole/commit/923c738f9642fd3ff21c0463d70345ee62f52f3c))
|
||||
- increase padding slightly ([28a68e9](https://github.com/lxndrblz/anatole/commit/28a68e9cf80960ca1c54bef079bc004141beda7b))
|
||||
- w3c validator errors ([021c1e0](https://github.com/lxndrblz/anatole/commit/021c1e0e9bcb81ecb02182c587ad4d17b98f26f7)), closes [#309](https://github.com/lxndrblz/anatole/issues/309)
|
||||
|
||||
## [1.7.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2022-02-21)
|
||||
|
||||
### Features
|
||||
|
||||
- add makefile to generate resource folder ([0e610e4](https://github.com/lxndrblz/anatole/commit/0e610e4ba806b19a7aae01d5810691c0c6803b17))
|
||||
- added umami analytics ([#298](https://github.com/lxndrblz/anatole/issues/298)) ([a9cb563](https://github.com/lxndrblz/anatole/commit/a9cb5630a21a320d3d3c1afe3781fd289129273e))
|
||||
- added windows release target ([c4ac344](https://github.com/lxndrblz/anatole/commit/c4ac344e662445ea9f9752f7822b3d8bcb9f3cf0))
|
||||
- allow setting displayMode dark from params ([3be3958](https://github.com/lxndrblz/anatole/commit/3be3958812aff76710e17f58a370dd4601f061f8))
|
||||
- decrease border radius of thumbnail ([80598b5](https://github.com/lxndrblz/anatole/commit/80598b58c8330ef5b0013878355d374bc7098dca))
|
||||
- decrease font size h1; set font sizes if headings have nested a tags ([d2b4566](https://github.com/lxndrblz/anatole/commit/d2b4566616a5af9cad2e73676a622c6cf7c6812b))
|
||||
- decrease nav spacing ([0145c16](https://github.com/lxndrblz/anatole/commit/0145c1661d65ccd1a542092f75c2d84f544ea8cb))
|
||||
- increase font size of post title ([82b2cee](https://github.com/lxndrblz/anatole/commit/82b2cee0b41b72c73b853531c807df2115998879))
|
||||
- increase font size of sidebar title ([17b1b74](https://github.com/lxndrblz/anatole/commit/17b1b747a18d100267a0d9d04fcdb0881d25c1a2))
|
||||
- increase hero spacing on mobile ([94d6dac](https://github.com/lxndrblz/anatole/commit/94d6dacd133375300c44f50f99fa531686698983))
|
||||
- move info to post-meta and improve styles ([e17be94](https://github.com/lxndrblz/anatole/commit/e17be94391c5a232ac543f371b35ca6585786f36))
|
||||
- ported makefile to package.json script ([5bc180c](https://github.com/lxndrblz/anatole/commit/5bc180ccafbeb3d44d1f67e4e1fcc0b9b71ba3e3))
|
||||
- reduce border-radius ([08bc7f2](https://github.com/lxndrblz/anatole/commit/08bc7f227a82327ff15e5cac51c8bcf0b4778729))
|
||||
- reduce font size ([e92403b](https://github.com/lxndrblz/anatole/commit/e92403bff7ee9b0260e49ba915ebadf07c7978f0))
|
||||
- update screenshots ([b3c18d6](https://github.com/lxndrblz/anatole/commit/b3c18d68adccdd2728f040e4ddf0a3ffda2f0127))
|
||||
- url as link ([f6c8150](https://github.com/lxndrblz/anatole/commit/f6c81503e9f3e7f8f1b734295cbd9b51148d0153))
|
||||
- use standard font size for paragraphs ([951c109](https://github.com/lxndrblz/anatole/commit/951c109365d202d036fd58dc888f189fae660861))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- add back gen folder ([cc80d58](https://github.com/lxndrblz/anatole/commit/cc80d588e9b725a2d972d90cd2f9819a85d1b531))
|
||||
- add generated resources to example site to ensure compatibility ([6dd1953](https://github.com/lxndrblz/anatole/commit/6dd19537bea5b3e89ef6579cbecdf174dd52f2e4))
|
||||
- add optional shx for echo statement ([c62550d](https://github.com/lxndrblz/anatole/commit/c62550ddfb0c93fed5e9e6ebcfef0abe2b7a4607))
|
||||
- alert colours ([4a788a6](https://github.com/lxndrblz/anatole/commit/4a788a66ea204bd68a1c7ac389047cd8dee95079))
|
||||
- align nav border highlight ([74fb537](https://github.com/lxndrblz/anatole/commit/74fb537c21fb75e779baf338b78d75f094da394e))
|
||||
- color portfolio mobile ([9affb74](https://github.com/lxndrblz/anatole/commit/9affb74a24c5ab7bde6f99e4fc7eab5071ae3c19))
|
||||
- define img max width ([75e1630](https://github.com/lxndrblz/anatole/commit/75e1630bbd235082d5a1c20fc6c12ec5fef61730))
|
||||
- deprecation warning global assignments won't be able to declare new variables in future versions ([9e5d138](https://github.com/lxndrblz/anatole/commit/9e5d138e97cd119226049c02cc31d4ea903eb711))
|
||||
- duplicate footers ([fe660be](https://github.com/lxndrblz/anatole/commit/fe660be1ebd4b448375ba3b0695f44b62b92b217))
|
||||
- languageswitcher triangle alignment and mobile spacing ([0a690aa](https://github.com/lxndrblz/anatole/commit/0a690aa0dceed6a372443dd8398ffd08e2702932))
|
||||
- make sure tag text is also in lighter color ([6678874](https://github.com/lxndrblz/anatole/commit/66788744649fdf5313b2514f75644b2f12d07ba1))
|
||||
- make themeswitch functionable again ([72f09ca](https://github.com/lxndrblz/anatole/commit/72f09ca2a9dd93c6d94b32eb5e5a3ecb2dbcc733))
|
||||
- medium zoom ([94973bf](https://github.com/lxndrblz/anatole/commit/94973bf4d053ed0940b54f2c4d69cb404b48b4fd))
|
||||
- nonmatching div footer ([5c84ace](https://github.com/lxndrblz/anatole/commit/5c84ace36c5273bcd70094b7fcce5dc8b10b3a2a))
|
||||
- portfolio stacking ([1d65174](https://github.com/lxndrblz/anatole/commit/1d65174b2471915180e6416a13c48c974caa0a76))
|
||||
- redundant main.scss ([4c85c2a](https://github.com/lxndrblz/anatole/commit/4c85c2a733f5ec12bbeea084f5bc8e550ff2ffe7))
|
||||
- remove fixed width to enable class big ([6f74c37](https://github.com/lxndrblz/anatole/commit/6f74c378ec215e412e3a5499cc4362b130ebc10b))
|
||||
- remove obsolete file ([9d78804](https://github.com/lxndrblz/anatole/commit/9d7880414f15049d0457db96ef9d75cc034cf4b4))
|
||||
- remove obsolete post class ([4c14755](https://github.com/lxndrblz/anatole/commit/4c147555e11ef0544d1da27d84f3187471829f87))
|
||||
- remove unnecessary padding on mobile ([a5e341b](https://github.com/lxndrblz/anatole/commit/a5e341bfded6289c5c940fc0014e27cdb502df1d))
|
||||
- removed unused SCSS classes ([698f821](https://github.com/lxndrblz/anatole/commit/698f821f77f25d84ed2f97924a4180633711ee8c))
|
||||
- rtl and ltr mode ([76e9a77](https://github.com/lxndrblz/anatole/commit/76e9a7708e7e71ff50ec7cb26f83e48430cbc045))
|
||||
- sonarcloud bug border ([57fb870](https://github.com/lxndrblz/anatole/commit/57fb870be4acd12156fd2439c816c904b2ff676f))
|
||||
- sonarcloud bugs ([96a38bd](https://github.com/lxndrblz/anatole/commit/96a38bd67868305489659903568df29d159c872a))
|
||||
- sonarcloud bugs ([2be0e35](https://github.com/lxndrblz/anatole/commit/2be0e353567140abe9b566f6be8e286ade036e0f))
|
||||
- spacing of alert box ([161496d](https://github.com/lxndrblz/anatole/commit/161496d0608336e4d6a99938a02a5d749d4e0a42))
|
||||
- styling contact form ([00e408a](https://github.com/lxndrblz/anatole/commit/00e408a786552c0b252081626c162cd5a94622da))
|
||||
- typo pull request template ([6583837](https://github.com/lxndrblz/anatole/commit/658383730e7d6c4aa63b6fd679d2dc14e1d6d9e6))
|
||||
- use scss variable ([372e0ed](https://github.com/lxndrblz/anatole/commit/372e0ed628a741be0fae47dda6b7ed25e23f50a8))
|
||||
- various colors ([8249f80](https://github.com/lxndrblz/anatole/commit/8249f80b595f6d90b3b2239ed8eceb4ac0ac03c9))
|
||||
- width smaller than screen on archive page ([ddeacdd](https://github.com/lxndrblz/anatole/commit/ddeacdd16288dab570a165b942c8983cef919393))
|
||||
|
||||
### Reverts
|
||||
|
||||
- Revert "refactor: do not change link color on hover" ([6594cab](https://github.com/lxndrblz/anatole/commit/6594cabbb4be999a82c769b8ce7633267d26d3b0))
|
||||
|
||||
## [1.6.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2022-01-30)
|
||||
|
||||
### Features
|
||||
|
||||
- added a netlify.toml for demo site ([13bc907](https://github.com/lxndrblz/anatole/commit/13bc90740288e5bc7473f4f1642db4a9bac8bfd3))
|
||||
- added links to config and example site in readme ([#293](https://github.com/lxndrblz/anatole/issues/293)) ([9cf84d3](https://github.com/lxndrblz/anatole/commit/9cf84d343061064c203fdecb77558fe54e5b4ea4))
|
||||
- added links to demo site ([5294a0d](https://github.com/lxndrblz/anatole/commit/5294a0dfe44d15f0be60385c3db6cd0dded58cf5))
|
||||
- Added page title switcher ([#286](https://github.com/lxndrblz/anatole/issues/286)) ([789876a](https://github.com/lxndrblz/anatole/commit/789876a144c58cd4876913ac75c2024c643576a6))
|
||||
- Added Plausible Analytics ([#296](https://github.com/lxndrblz/anatole/issues/296)) ([b84efff](https://github.com/lxndrblz/anatole/commit/b84efff11943dc926d5e04892c215d5533dc4bc0))
|
||||
- added portfolio and projects page ([#272](https://github.com/lxndrblz/anatole/issues/272)) ([0d412d3](https://github.com/lxndrblz/anatole/commit/0d412d3a37f6317dd1a8b231444077fecbbf522c)), closes [#221](https://github.com/lxndrblz/anatole/issues/221)
|
||||
- include testing checklist ([2344d65](https://github.com/lxndrblz/anatole/commit/2344d6572d808468a63642355c072ea95cdd36c6))
|
||||
- old content warning ([#266](https://github.com/lxndrblz/anatole/issues/266)) ([33fe67a](https://github.com/lxndrblz/anatole/commit/33fe67a975fce9de03f9666bdbebe647721eb57d))
|
||||
- turn anatole theme into a hugo module ([#291](https://github.com/lxndrblz/anatole/issues/291)) ([fcbc65c](https://github.com/lxndrblz/anatole/commit/fcbc65c81ceb7ff31879e997026d79e5215f7b90))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- added English aria labels for prev/next pagination buttons ([#289](https://github.com/lxndrblz/anatole/issues/289)) ([c610dad](https://github.com/lxndrblz/anatole/commit/c610dadb1769c5ac8d6ec3e760b51931da52a0d7))
|
||||
- fixing typos ([99baec2](https://github.com/lxndrblz/anatole/commit/99baec23d388f6693495c90e864629bada902258))
|
||||
- image width portfolio ([af75745](https://github.com/lxndrblz/anatole/commit/af75745ecc1e54c93ffa9ebd6dd562f8c621f49c))
|
||||
- language dropdown styling ([#264](https://github.com/lxndrblz/anatole/issues/264)) ([e1817fe](https://github.com/lxndrblz/anatole/commit/e1817feceb8f1213f26c8018365e6ba14bb2fd64))
|
||||
- make canonical link absolute ([#273](https://github.com/lxndrblz/anatole/issues/273)) ([ef17749](https://github.com/lxndrblz/anatole/commit/ef17749c72806dd54b8d2a660ab8fe41c0aa83bb))
|
||||
- order of expiration note ([9dd94c2](https://github.com/lxndrblz/anatole/commit/9dd94c27bfe0239dae54b6ed32289c78ccc4b1a6)), closes [#285](https://github.com/lxndrblz/anatole/issues/285)
|
||||
- overlap on ultra wide screens ([#287](https://github.com/lxndrblz/anatole/issues/287)) ([69e2f1f](https://github.com/lxndrblz/anatole/commit/69e2f1f3bba2995bafb311ef439083873fdba92e))
|
||||
- redirect users to home page of current language ([#263](https://github.com/lxndrblz/anatole/issues/263)) ([fe9efda](https://github.com/lxndrblz/anatole/commit/fe9efda7969239dfd0f17ef00c0124ea8f68bf99))
|
||||
- remove padding in mobile view ([4558d20](https://github.com/lxndrblz/anatole/commit/4558d20053ac0c86ea4402c921a4f7f39a3b89de))
|
||||
- revert twitter example for backwards compatibility ([7d2af9a](https://github.com/lxndrblz/anatole/commit/7d2af9ad0b33b840e08d3d6cd430b193508fc6e1)), closes [#271](https://github.com/lxndrblz/anatole/issues/271)
|
||||
- show mouseover text for social links ([#265](https://github.com/lxndrblz/anatole/issues/265)) ([d8bfafc](https://github.com/lxndrblz/anatole/commit/d8bfafc28e1741169bc5189553afb6df3deabcfa))
|
||||
- twitter shortcode warning ([488c3e9](https://github.com/lxndrblz/anatole/commit/488c3e97ec95c7fdc00102290c8f30f8108d6c8c))
|
||||
|
||||
## [1.4.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-11-03)
|
||||
|
||||
### Features
|
||||
|
||||
- Added Formspree spam filtering ([#259](https://github.com/lxndrblz/anatole/issues/259)) ([0c9c5bc](https://github.com/lxndrblz/anatole/commit/0c9c5bc15caa6ebd9d5fa3227aaa62c761956109))
|
||||
- Added support for Google Fonts ([#255](https://github.com/lxndrblz/anatole/issues/255)) ([8d51b8b](https://github.com/lxndrblz/anatole/commit/8d51b8ba619af4504ad40386f6b452e50ec8a39b))
|
||||
- Improved Arabic support ([#249](https://github.com/lxndrblz/anatole/issues/249)) ([8ad28e8](https://github.com/lxndrblz/anatole/commit/8ad28e87167be8369f7b6ce2737a3cc6f5b9f9e3))
|
||||
- improved language dropdown menu ([#261](https://github.com/lxndrblz/anatole/issues/261)) ([045dabb](https://github.com/lxndrblz/anatole/commit/045dabb11992a0d77f404dd931cbb093f4e11b44)), closes [#169](https://github.com/lxndrblz/anatole/issues/169)
|
||||
- prettier pagination ([8a40abc](https://github.com/lxndrblz/anatole/commit/8a40abcc71a995b0de12d110428a46ed74a22d3f))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- adjusted stale bot to close only issues that are awaiting a reply ([2847365](https://github.com/lxndrblz/anatole/commit/284736548ad97e5d84026ff982bca3aa92f5df0d))
|
||||
- remove white color in syntax highlighting (dark mode) ([49de81b](https://github.com/lxndrblz/anatole/commit/49de81b2e2c921f752d8b1d261fe4c148a00c51e))
|
||||
|
||||
## [1.3.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-08-15)
|
||||
|
||||
### Features
|
||||
|
||||
- added schema.org structured data ([3ce92e4](https://github.com/lxndrblz/anatole/commit/3ce92e4534975918a3559ec4f77caf15c797d663))
|
||||
- Adding series to the theme ([d530d03](https://github.com/lxndrblz/anatole/commit/d530d03761514d90de059ca005063d447f50460c)), closes [#234](https://github.com/lxndrblz/anatole/issues/234)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- if condition with gtagId ([#230](https://github.com/lxndrblz/anatole/issues/230)) ([9c59364](https://github.com/lxndrblz/anatole/commit/9c59364e45baa0a744e411139d008998da95225e)), closes [#228](https://github.com/lxndrblz/anatole/issues/228)
|
||||
- organization name ([96483e4](https://github.com/lxndrblz/anatole/commit/96483e4b5a4f945d7e992c416761496b4ef15e8c))
|
||||
|
||||
## [1.2.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-07-04)
|
||||
|
||||
### Features
|
||||
|
||||
- added basic CSS for TOC ([4b11819](https://github.com/lxndrblz/anatole/commit/4b11819a89b7f43f66b13930c7555086459725a4))
|
||||
- gitalk comment ([92c37f1](https://github.com/lxndrblz/anatole/commit/92c37f1abcec54941ece965cb047cedda1b2e6a3))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Adjusted title of single.html to be a H1 header ([0ec60e9](https://github.com/lxndrblz/anatole/commit/0ec60e9678d5f049b687d1b753dd73c1a5107daa))
|
||||
- description in README file ([5303fca](https://github.com/lxndrblz/anatole/commit/5303fca371473037c783c6c45d778e5fd8be6bf4))
|
||||
- distorted print view ([8c36e9a](https://github.com/lxndrblz/anatole/commit/8c36e9a4a4f411758877742fc59c26fc15880295))
|
||||
- missed absolute fontsize ([3184d8f](https://github.com/lxndrblz/anatole/commit/3184d8f808db0a9e912507d537e61aa62ddb2b35))
|
||||
- Navigation Item Centering ([#219](https://github.com/lxndrblz/anatole/issues/219)) ([b4260d7](https://github.com/lxndrblz/anatole/commit/b4260d7c7f77d382fe2b98db411fa5f45870ff0b))
|
||||
- relative font sizes instead of px defined ([faf23c5](https://github.com/lxndrblz/anatole/commit/faf23c5219a152f99f2854a65348dcc8bc109877))
|
||||
- sidebar url ([9b1d6f8](https://github.com/lxndrblz/anatole/commit/9b1d6f8385faabb2e5d3a9c2d70a2b984ad0bf20))
|
||||
- updated gitalk tag to include integrity check ([548686a](https://github.com/lxndrblz/anatole/commit/548686af08f78aeda3b237ebe864ee809dda54b3))
|
||||
|
||||
## [1.1.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-06-20)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- correct typo ([3c730ae](https://github.com/lxndrblz/anatole/commit/3c730aeda3f67200fce5fcdaac666192f8cf8323))
|
||||
|
||||
## [1.0.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-05-08)
|
||||
|
||||
## [0.9.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-04-18)
|
||||
|
||||
### Reverts
|
||||
|
||||
- Revert "Fixes an issue where long links overflow page width" ([cbc272f](https://github.com/lxndrblz/anatole/commit/cbc272f46fe78b13e751030a2458f31afbfca213))
|
||||
|
||||
## [0.8.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-03-13)
|
||||
|
||||
## [0.7.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-03-03)
|
||||
|
||||
### Reverts
|
||||
|
||||
- Revert "Added reCAPTCHA to Formspree and support for Netlify forms" (#123) ([e325c1b](https://github.com/lxndrblz/anatole/commit/e325c1b2adbddb81c82d167e280ff3f673cf92d6)), closes [#123](https://github.com/lxndrblz/anatole/issues/123)
|
||||
- Revert "Added reCAPTCHA to Formspree and support for Netlify forms" ([efabd21](https://github.com/lxndrblz/anatole/commit/efabd21d92afd4d265adf2a490625cc994493656))
|
||||
- Revert "Revert "Merge branch 'post-thumbnail' of https://github.com/LucasVadilho/anatole into pr/72"" ([6752fb1](https://github.com/lxndrblz/anatole/commit/6752fb185e4ae9b87d90adaa70c8f81af43cdbdf))
|
||||
- Revert "Alternative suggestion" ([1306bb7](https://github.com/lxndrblz/anatole/commit/1306bb71e6e0333c1fd1995c65bb715367694004))
|
||||
|
||||
## [0.5.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2021-01-05)
|
||||
|
||||
## [0.3.0](https://github.com/lxndrblz/anatole/compare/v1.7.0...v1.8.0) (2020-10-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- fix white space in partials template ([a6a072f](https://github.com/lxndrblz/anatole/commit/a6a072f5165ae0aeaff3e381353fcc8d39d78835))
|
||||
20
LICENSE
Normal file
20
LICENSE
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2020 lxndrblz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
72
README.md
72
README.md
|
|
@ -1,2 +1,72 @@
|
|||
# anatole-porzh
|
||||
# Anatole Hugo Theme  [](https://www.conventionalcommits.org/) [](https://app.netlify.com/sites/anatole-demo/deploys)
|
||||
|
||||
Anatole is a beautiful minimalist two-column [hugo](https://gohugo.io/) theme based on farbox-theme-Anatole.
|
||||
|
||||

|
||||

|
||||
|
||||
## Demo
|
||||
|
||||
A live demo of the theme can be found under the following domain:
|
||||
[https://anatole-demo.netlify.app/](https://anatole-demo.netlify.app/)
|
||||
|
||||
## Features
|
||||
|
||||
Anatole's aims to be minimalistic and sleek but still brings some great functionality, including:
|
||||
|
||||
- Dark mode
|
||||
- Multilingual
|
||||
- RTL support
|
||||
- Portfolio (optional)
|
||||
- Post Thumbnails (optional)
|
||||
- 100⁄100 Google Lighthouse score
|
||||
- Analytics powered by Google Analytics, Simple Analytics and Umami (optional)
|
||||
- Comments powered by Disqus, Commento, Gitalk, Utteranc.es or Giscus (optional)
|
||||
- KaTeX support (optional)
|
||||
- Formspree Contact Form (optional)
|
||||
- Twitter Cards support
|
||||
- Open Graph support
|
||||
- Google Fonts support
|
||||
- Custom JavaScript and CSS (optional)
|
||||
- Compliant to strict CSP
|
||||
- Post Series
|
||||
- Mermaid diagram support (optional)
|
||||
|
||||
## Preview the Example Site
|
||||
|
||||
```shell
|
||||
git clone https://github.com/lxndrblz/anatole.git anatole
|
||||
cd anatole/exampleSite
|
||||
hugo server --themesDir ../..
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
🚧 The documentation has moved!
|
||||
|
||||
The latest documentation for the theme can be found within the [Wiki Tab on GitHub](https://github.com/lxndrblz/anatole/wiki).
|
||||
|
||||
## License
|
||||
|
||||
Anatole is licensed under the [MIT license](https://github.com/lxndrblz/anatole/blob/master/LICENSE).
|
||||
|
||||
## Contributions
|
||||
|
||||
This theme is maintained by its author [Alexander Bilz](https://github.com/lxndrblz) and with the help from these awesome [contributors](https://github.com/lxndrblz/anatole/graphs/contributors). All contributions (including features, translations, code cleanups, improved documentation & bugs reporting) are welcome.
|
||||
|
||||
Read the [guidelines](https://github.com/lxndrblz/anatole/blob/master/.github/CONTRIBUTING.md) for more information about contributing to this project.
|
||||
|
||||
## Sponsoring
|
||||
|
||||
If you like this theme, give it a star on GitHub, and consider supporting its development:
|
||||
|
||||
[](https://ko-fi.com/lxndrblz/)
|
||||
|
||||
## Special Thanks 🎁
|
||||
|
||||
- Go to [Cai Cai](https://github.com/hi-caicai), for the great Anatole [Farbox theme](https://github.com/hi-caicai/farbox-theme-Anatole) that formed the foundation for this theme.
|
||||
- Go to [Kareya Saleh](https://unsplash.com/photos/tLKOj6cNwe0) for providing the [profile picture](https://github.com/lxndrblz/anatole/blob/master/exampleSite/static/images/profile.jpg) used in the exampleSite.
|
||||
- Go to [Petri R](https://unsplash.com/photos/jLn20MzqfdE) for providing the [portfolio picture](https://github.com/lxndrblz/anatole/blob/master/exampleSite/static/images/portfolio/code.jpg) used in the exampleSite.
|
||||
- Go to [Ales Krivec](https://unsplash.com/photos/4miBe6zg5r0) for providing the thumbnail picture used in the exampleSite [image-test post](https://github.com/lxndrblz/anatole/blob/master/exampleSite/content/english/post/image-test.md).
|
||||
- Go to [Tobias Ahlin](https://github.com/tobiasahlin) for his [SpinKit](https://github.com/tobiasahlin/SpinKit) that is used in the exampleSite [redirect post](https://github.com/lxndrblz/anatole/blob/master/exampleSite/content/english/post/redirect.md).
|
||||
- Go to [FontAwseome](https://fontawesome.com/) for providing the icons used in this project.
|
||||
|
|
|
|||
8
archetypes/post.md
Normal file
8
archetypes/post.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
Description: ""
|
||||
Tags: []
|
||||
Categories: []
|
||||
DisableComments: false
|
||||
---
|
||||
3
assets/css/custom.css
Normal file
3
assets/css/custom.css
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.wrapper__main {
|
||||
max-width: 800px;
|
||||
}
|
||||
464
assets/css/markupHighlight.css
Normal file
464
assets/css/markupHighlight.css
Normal file
|
|
@ -0,0 +1,464 @@
|
|||
:root {
|
||||
/* Light -> monokailight */
|
||||
--chr-def-color: #272822;
|
||||
--chr-def-bg-color: #fafafa;
|
||||
--chr-err-color: #960050;
|
||||
--chr-err-bg-color: #960050;
|
||||
--chr-hl-bg-color: #ffffcc;
|
||||
--chr-lnt-color: #7f7f7f;
|
||||
--chr-ln-color: #7f7f7f;
|
||||
--chr-k-color: #00a8c8;
|
||||
--chr-kc-color: #00a8c8;
|
||||
--chr-kd-color: #00a8c8;
|
||||
--chr-kn-color: #f92672;
|
||||
--chr-kp-color: #00a8c8;
|
||||
--chr-kr-color: #00a8c8;
|
||||
--chr-kt-color: #00a8c8;
|
||||
--chr-na-color: #75af00;
|
||||
--chr-bp-color: #111111;
|
||||
--chr-nc-color: #75af00;
|
||||
--chr-no-color: #00a8c8;
|
||||
--chr-nd-color: #75af00;
|
||||
--chr-ni-color: #111111;
|
||||
--chr-ne-color: #75af00;
|
||||
--chr-nf-color: #75af00;
|
||||
--chr-fm-color: #111111;
|
||||
--chr-nl-color: #111111;
|
||||
--chr-nx-color: #75af00;
|
||||
--chr-py-color: #111111;
|
||||
--chr-nt-color: #f92672;
|
||||
--chr-vc-color: #111111;
|
||||
--chr-vg-color: #111111;
|
||||
--chr-vi-color: #111111;
|
||||
--chr-vm-color: #111111;
|
||||
--chr-l-color: #ae81ff;
|
||||
--chr-ld-color: #d88200;
|
||||
--chr-s-color: #d88200;
|
||||
--chr-sa-color: #d88200;
|
||||
--chr-sb-color: #d88200;
|
||||
--chr-sc-color: #d88200;
|
||||
--chr-dl-color: #d88200;
|
||||
--chr-sd-color: #d88200;
|
||||
--chr-s2-color: #d88200;
|
||||
--chr-se-color: #8045ff;
|
||||
--chr-sh-color: #d88200;
|
||||
--chr-si-color: #d88200;
|
||||
--chr-sx-color: #d88200;
|
||||
--chr-sr-color: #d88200;
|
||||
--chr-s1-color: #d88200;
|
||||
--chr-ss-color: #d88200;
|
||||
--chr-m-color: #ae81ff;
|
||||
--chr-mb-color: #ae81ff;
|
||||
--chr-mf-color: #ae81ff;
|
||||
--chr-mh-color: #ae81ff;
|
||||
--chr-mi-color: #ae81ff;
|
||||
--chr-il-color: #ae81ff;
|
||||
--chr-mo-color: #ae81ff;
|
||||
--chr-o-color: #f92672;
|
||||
--chr-ow-color: #f92672;
|
||||
--chr-p-color: #111111;
|
||||
--chr-c-color: #75715e;
|
||||
--chr-ch-color: #75715e;
|
||||
--chr-cm-color: #75715e;
|
||||
--chr-c1-color: #75715e;
|
||||
--chr-cs-color: #75715e;
|
||||
--chr-cp-color: #75715e;
|
||||
--chr-cpf-color: #75715e;
|
||||
}
|
||||
|
||||
:root.theme--dark {
|
||||
/* Dark -> monokai */
|
||||
--chr-def-color: #f8f8f2;
|
||||
--chr-def-bg-color: #272822;
|
||||
--chr-err-color: #960050;
|
||||
--chr-err-bg-color: #1e0010;
|
||||
--chr-hl-bg-color: #ffffcc;
|
||||
--chr-lnt-color: #7f7f7f;
|
||||
--chr-ln-color: #7f7f7f;
|
||||
--chr-k-color: #66d9ef;
|
||||
--chr-kc-color: #66d9ef;
|
||||
--chr-kd-color: #66d9ef;
|
||||
--chr-kn-color: #f92672;
|
||||
--chr-kp-color: #66d9ef;
|
||||
--chr-kr-color: #66d9ef;
|
||||
--chr-kt-color: #66d9ef;
|
||||
--chr-na-color: #a6e22e;
|
||||
--chr-nc-color: #a6e22e;
|
||||
--chr-no-color: #66d9ef;
|
||||
--chr-nd-color: #a6e22e;
|
||||
--chr-ne-color: #a6e22e;
|
||||
--chr-nf-color: #a6e22e;
|
||||
--chr-nx-color: #a6e22e;
|
||||
--chr-nt-color: #f92672;
|
||||
--chr-l-color: #ae81ff;
|
||||
--chr-ld-color: #e6db74;
|
||||
--chr-s-color: #e6db74;
|
||||
--chr-sa-color: #e6db74;
|
||||
--chr-sb-color: #e6db74;
|
||||
--chr-sc-color: #e6db74;
|
||||
--chr-dl-color: #e6db74;
|
||||
--chr-sd-color: #e6db74;
|
||||
--chr-s2-color: #e6db74;
|
||||
--chr-se-color: #ae81ff;
|
||||
--chr-sh-color: #e6db74;
|
||||
--chr-si-color: #e6db74;
|
||||
--chr-sx-color: #e6db74;
|
||||
--chr-sr-color: #e6db74;
|
||||
--chr-s1-color: #e6db74;
|
||||
--chr-ss-color: #e6db74;
|
||||
--chr-m-color: #ae81ff;
|
||||
--chr-mb-color: #ae81ff;
|
||||
--chr-mf-color: #ae81ff;
|
||||
--chr-mh-color: #ae81ff;
|
||||
--chr-mi-color: #ae81ff;
|
||||
--chr-il-color: #ae81ff;
|
||||
--chr-mo-color: #ae81ff;
|
||||
--chr-o-color: #f92672;
|
||||
--chr-ow-color: #f92672;
|
||||
--chr-p-color: #f8f8f2;
|
||||
--chr-c-color: #75715e;
|
||||
--chr-ch-color: #75715e;
|
||||
--chr-cm-color: #75715e;
|
||||
--chr-c1-color: #75715e;
|
||||
--chr-cs-color: #75715e;
|
||||
--chr-cp-color: #75715e;
|
||||
--chr-cpf-color: #75715e;
|
||||
--chr-gd-color: #f92672;
|
||||
--chr-gi-color: #a6e22e;
|
||||
--chr-gu-color: #75715e;
|
||||
}
|
||||
|
||||
/* Background */
|
||||
.chroma {
|
||||
direction: ltr;
|
||||
color: var(--chr-def-color);
|
||||
background-color: var(--chr-def-bg-color);
|
||||
}
|
||||
/* Other */
|
||||
.chroma .x {
|
||||
}
|
||||
/* Error */
|
||||
.chroma .err {
|
||||
color: var(--chr-err-color);
|
||||
background-color: var(--chr-err-bg-color);
|
||||
}
|
||||
/* LineTableTD */
|
||||
.chroma .lntd {
|
||||
vertical-align: top;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
/* LineTable */
|
||||
.chroma .lntable {
|
||||
border-spacing: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
width: auto;
|
||||
overflow: auto;
|
||||
display: block;
|
||||
}
|
||||
/* LineHighlight */
|
||||
.chroma .hl {
|
||||
display: block;
|
||||
width: 100%;
|
||||
background-color: var(--chr-hl-bg-color);
|
||||
}
|
||||
/* LineNumbersTable */
|
||||
.chroma .lnt {
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: var(--chr-lnt-color);
|
||||
}
|
||||
/* LineNumbers */
|
||||
.chroma .ln {
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
color: var(--chr-ln-color);
|
||||
}
|
||||
/* Keyword */
|
||||
.chroma .k {
|
||||
color: var(--chr-k-color);
|
||||
}
|
||||
/* KeywordConstant */
|
||||
.chroma .kc {
|
||||
color: var(--chr-kc-color);
|
||||
}
|
||||
/* KeywordDeclaration */
|
||||
.chroma .kd {
|
||||
color: var(--chr-kd-color);
|
||||
}
|
||||
/* KeywordNamespace */
|
||||
.chroma .kn {
|
||||
color: var(--chr-kn-color);
|
||||
}
|
||||
/* KeywordPseudo */
|
||||
.chroma .kp {
|
||||
color: var(--chr-kp-color);
|
||||
}
|
||||
/* KeywordReserved */
|
||||
.chroma .kr {
|
||||
color: var(--chr-kr-color);
|
||||
}
|
||||
/* KeywordType */
|
||||
.chroma .kt {
|
||||
color: var(--chr-kt-color);
|
||||
}
|
||||
/* Name */
|
||||
.chroma .n {
|
||||
color: var(--chr-n-color);
|
||||
}
|
||||
/* NameAttribute */
|
||||
.chroma .na {
|
||||
color: var(--chr-na-color);
|
||||
}
|
||||
/* NameBuiltin */
|
||||
.chroma .nb {
|
||||
color: var(--chr-nb-color);
|
||||
}
|
||||
/* NameBuiltinPseudo */
|
||||
.chroma .bp {
|
||||
color: var(--chr-bp-color);
|
||||
}
|
||||
/* NameClass */
|
||||
.chroma .nc {
|
||||
color: var(--chr-nc-color);
|
||||
}
|
||||
/* NameConstant */
|
||||
.chroma .no {
|
||||
color: var(--chr-no-color);
|
||||
}
|
||||
/* NameDecorator */
|
||||
.chroma .nd {
|
||||
color: var(--chr-nd-color);
|
||||
}
|
||||
/* NameEntity */
|
||||
.chroma .ni {
|
||||
color: var(--chr-ni-color);
|
||||
}
|
||||
/* NameException */
|
||||
.chroma .ne {
|
||||
color: var(--chr-ne-color);
|
||||
}
|
||||
/* NameFunction */
|
||||
.chroma .nf {
|
||||
color: var(--chr-nf-color);
|
||||
}
|
||||
/* NameFunctionMagic */
|
||||
.chroma .fm {
|
||||
color: var(--chr-fm-color);
|
||||
}
|
||||
/* NameLabel */
|
||||
.chroma .nl {
|
||||
color: var(--chr-nl-color);
|
||||
}
|
||||
/* NameNamespace */
|
||||
.chroma .nn {
|
||||
color: var(--chr-nn-color);
|
||||
}
|
||||
/* NameOther */
|
||||
.chroma .nx {
|
||||
color: var(--chr-nx-color);
|
||||
}
|
||||
/* NameProperty */
|
||||
.chroma .py {
|
||||
color: var(--chr-py-color);
|
||||
}
|
||||
/* NameTag */
|
||||
.chroma .nt {
|
||||
color: var(--chr-nt-color);
|
||||
}
|
||||
/* NameVariable */
|
||||
.chroma .nv {
|
||||
color: var(--chr-nv-color);
|
||||
}
|
||||
/* NameVariableClass */
|
||||
.chroma .vc {
|
||||
color: var(--chr-vc-color);
|
||||
}
|
||||
/* NameVariableGlobal */
|
||||
.chroma .vg {
|
||||
color: var(--chr-vg-color);
|
||||
}
|
||||
/* NameVariableInstance */
|
||||
.chroma .vi {
|
||||
color: var(--chr-vi-color);
|
||||
}
|
||||
/* NameVariableMagic */
|
||||
.chroma .vm {
|
||||
color: var(--chr-vm-color);
|
||||
}
|
||||
/* Literal */
|
||||
.chroma .l {
|
||||
color: var(--chr-l-color);
|
||||
}
|
||||
/* LiteralDate */
|
||||
.chroma .ld {
|
||||
color: var(--chr-ld-color);
|
||||
}
|
||||
/* LiteralString */
|
||||
.chroma .s {
|
||||
color: var(--chr-s-color);
|
||||
}
|
||||
/* LiteralStringAffix */
|
||||
.chroma .sa {
|
||||
color: var(--chr-sa-color);
|
||||
}
|
||||
/* LiteralStringBacktick */
|
||||
.chroma .sb {
|
||||
color: var(--chr-sb-color);
|
||||
}
|
||||
/* LiteralStringChar */
|
||||
.chroma .sc {
|
||||
color: var(--chr-sc-color);
|
||||
}
|
||||
/* LiteralStringDelimiter */
|
||||
.chroma .dl {
|
||||
color: var(--chr-dl-color);
|
||||
}
|
||||
/* LiteralStringDoc */
|
||||
.chroma .sd {
|
||||
color: var(--chr-sd-color);
|
||||
}
|
||||
/* LiteralStringDouble */
|
||||
.chroma .s2 {
|
||||
color: var(--chr-s2-color);
|
||||
}
|
||||
/* LiteralStringEscape */
|
||||
.chroma .se {
|
||||
color: var(--chr-se-color);
|
||||
}
|
||||
/* LiteralStringHeredoc */
|
||||
.chroma .sh {
|
||||
color: var(--chr-sh-color);
|
||||
}
|
||||
/* LiteralStringInterpol */
|
||||
.chroma .si {
|
||||
color: var(--chr-si-color);
|
||||
}
|
||||
/* LiteralStringOther */
|
||||
.chroma .sx {
|
||||
color: var(--chr-sx-color);
|
||||
}
|
||||
/* LiteralStringRegex */
|
||||
.chroma .sr {
|
||||
color: var(--chr-sr-color);
|
||||
}
|
||||
/* LiteralStringSingle */
|
||||
.chroma .s1 {
|
||||
color: var(--chr-s1-color);
|
||||
}
|
||||
/* LiteralStringSymbol */
|
||||
.chroma .ss {
|
||||
color: var(--chr-ss-color);
|
||||
}
|
||||
/* LiteralNumber */
|
||||
.chroma .m {
|
||||
color: var(--chr-m-color);
|
||||
}
|
||||
/* LiteralNumberBin */
|
||||
.chroma .mb {
|
||||
color: var(--chr-mb-color);
|
||||
}
|
||||
/* LiteralNumberFloat */
|
||||
.chroma .mf {
|
||||
color: var(--chr-mf-color);
|
||||
}
|
||||
/* LiteralNumberHex */
|
||||
.chroma .mh {
|
||||
color: var(--chr-mh-color);
|
||||
}
|
||||
/* LiteralNumberInteger */
|
||||
.chroma .mi {
|
||||
color: var(--chr-mi-color);
|
||||
}
|
||||
/* LiteralNumberIntegerLong */
|
||||
.chroma .il {
|
||||
color: var(--chr-il-color);
|
||||
}
|
||||
/* LiteralNumberOct */
|
||||
.chroma .mo {
|
||||
color: var(--chr-mo-color);
|
||||
}
|
||||
/* Operator */
|
||||
.chroma .o {
|
||||
color: var(--chr-o-color);
|
||||
}
|
||||
/* OperatorWord */
|
||||
.chroma .ow {
|
||||
color: var(--chr-ow-color);
|
||||
}
|
||||
/* Punctuation */
|
||||
.chroma .p {
|
||||
color: var(--chr-p-color);
|
||||
}
|
||||
/* Comment */
|
||||
.chroma .c {
|
||||
color: var(--chr-c-color);
|
||||
}
|
||||
/* CommentHashbang */
|
||||
.chroma .ch {
|
||||
color: var(--chr-ch-color);
|
||||
}
|
||||
/* CommentMultiline */
|
||||
.chroma .cm {
|
||||
color: var(--chr-cm-color);
|
||||
}
|
||||
/* CommentSingle */
|
||||
.chroma .c1 {
|
||||
color: var(--chr-c1-color);
|
||||
}
|
||||
/* CommentSpecial */
|
||||
.chroma .cs {
|
||||
color: var(--chr-cs-color);
|
||||
}
|
||||
/* CommentPreproc */
|
||||
.chroma .cp {
|
||||
color: var(--chr-cp-color);
|
||||
}
|
||||
/* CommentPreprocFile */
|
||||
.chroma .cpf {
|
||||
color: var(--chr-cpf-color);
|
||||
}
|
||||
/* Generic */
|
||||
.chroma .g {
|
||||
}
|
||||
/* GenericDeleted */
|
||||
.chroma .gd {
|
||||
}
|
||||
/* GenericEmph */
|
||||
.chroma .ge {
|
||||
font-style: italic;
|
||||
}
|
||||
/* GenericError */
|
||||
.chroma .gr {
|
||||
}
|
||||
/* GenericHeading */
|
||||
.chroma .gh {
|
||||
}
|
||||
/* GenericInserted */
|
||||
.chroma .gi {
|
||||
}
|
||||
/* GenericOutput */
|
||||
.chroma .go {
|
||||
}
|
||||
/* GenericPrompt */
|
||||
.chroma .gp {
|
||||
}
|
||||
/* GenericStrong */
|
||||
.chroma .gs {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* GenericSubheading */
|
||||
.chroma .gu {
|
||||
}
|
||||
/* GenericTraceback */
|
||||
.chroma .gt {
|
||||
}
|
||||
/* GenericUnderline */
|
||||
.chroma .gl {
|
||||
}
|
||||
/* TextWhitespace */
|
||||
.chroma .w {
|
||||
}
|
||||
85
assets/css/spinner.css
Normal file
85
assets/css/spinner.css
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
:root {
|
||||
--sk-size: 40px;
|
||||
--sk-color: #333;
|
||||
}
|
||||
|
||||
body.theme--dark {
|
||||
--sk-color: rgb(169, 169, 179);
|
||||
}
|
||||
|
||||
.sk-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 24px 0;
|
||||
}
|
||||
|
||||
.sk-fold {
|
||||
width: var(--sk-size);
|
||||
height: var(--sk-size);
|
||||
position: relative;
|
||||
transform: rotateZ(45deg);
|
||||
}
|
||||
|
||||
.sk-fold-cube {
|
||||
float: left;
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
position: relative;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.sk-fold-cube:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: var(--sk-color);
|
||||
animation: sk-fold 2.4s infinite linear both;
|
||||
transform-origin: 100% 100%;
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(2) {
|
||||
transform: scale(1.1) rotateZ(90deg);
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(4) {
|
||||
transform: scale(1.1) rotateZ(180deg);
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(3) {
|
||||
transform: scale(1.1) rotateZ(270deg);
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(2):before {
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(4):before {
|
||||
animation-delay: 0.6s;
|
||||
}
|
||||
|
||||
.sk-fold-cube:nth-child(3):before {
|
||||
animation-delay: 0.9s;
|
||||
}
|
||||
|
||||
@keyframes sk-fold {
|
||||
0%,
|
||||
10% {
|
||||
transform: perspective(140px) rotateX(-180deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
25%,
|
||||
75% {
|
||||
transform: perspective(140px) rotateX(0);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
90%,
|
||||
100% {
|
||||
transform: perspective(140px) rotateY(180deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
165
assets/fontawesome/LICENSE.txt
Normal file
165
assets/fontawesome/LICENSE.txt
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
Fonticons, Inc. (https://fontawesome.com)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Font Awesome Free License
|
||||
|
||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||
commercial projects, open source projects, or really almost whatever you want.
|
||||
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||
|
||||
The Font Awesome Free download is licensed under a Creative Commons
|
||||
Attribution 4.0 International License and applies to all icons packaged
|
||||
as SVG and JS file types.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Fonts: SIL OFL 1.1 License
|
||||
|
||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||
packaged as web and desktop font files.
|
||||
|
||||
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
|
||||
with Reserved Font Name: "Font Awesome".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
SIL OPEN FONT LICENSE
|
||||
Version 1.1 - 26 February 2007
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting — in part or in whole — any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||
|
||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||
non-icon files.
|
||||
|
||||
Copyright 2024 Fonticons, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Attribution
|
||||
|
||||
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||
Awesome Free files already contain embedded comments with sufficient
|
||||
attribution, so you shouldn't need to do anything additional when using these
|
||||
files normally.
|
||||
|
||||
We've kept attribution comments terse, so we ask that you do not actively work
|
||||
to remove them from files, especially code. They're a great way for folks to
|
||||
learn about Font Awesome.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Brand Icons
|
||||
|
||||
All brand icons are trademarks of their respective owners. The use of these
|
||||
trademarks does not indicate endorsement of the trademark holder by Font
|
||||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||
to represent the company, product, or service to which they refer.**
|
||||
9
assets/fontawesome/css/all.min.css
vendored
Normal file
9
assets/fontawesome/css/all.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
assets/fontawesome/css/brands.min.css
vendored
Normal file
6
assets/fontawesome/css/brands.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
9
assets/fontawesome/css/fontawesome.min.css
vendored
Normal file
9
assets/fontawesome/css/fontawesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
assets/fontawesome/css/regular.min.css
vendored
Normal file
6
assets/fontawesome/css/regular.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*!
|
||||
* Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
|
||||
6
assets/fontawesome/css/solid.min.css
vendored
Normal file
6
assets/fontawesome/css/solid.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*!
|
||||
* Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
|
||||
6
assets/fontawesome/css/svg-with-js.min.css
vendored
Normal file
6
assets/fontawesome/css/svg-with-js.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
assets/fontawesome/css/v4-font-face.min.css
vendored
Normal file
6
assets/fontawesome/css/v4-font-face.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*!
|
||||
* Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
|
||||
6
assets/fontawesome/css/v4-shims.min.css
vendored
Normal file
6
assets/fontawesome/css/v4-shims.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
assets/fontawesome/css/v5-font-face.min.css
vendored
Normal file
6
assets/fontawesome/css/v5-font-face.min.css
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*!
|
||||
* Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
* Copyright 2024 Fonticons, Inc.
|
||||
*/
|
||||
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}
|
||||
11
assets/js/anatole-header.js
Normal file
11
assets/js/anatole-header.js
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
|
||||
const nav = document.querySelector('nav');
|
||||
if (navbarBurgers.length < 1) return;
|
||||
navbarBurgers.forEach((navbarBurger) => {
|
||||
navbarBurger.addEventListener('click', () => {
|
||||
navbarBurger.classList.toggle('nav--active');
|
||||
nav.classList.toggle('nav--active');
|
||||
});
|
||||
});
|
||||
});
|
||||
55
assets/js/anatole-theme-switcher.js
Normal file
55
assets/js/anatole-theme-switcher.js
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
const getStoredThemeStyle = () => localStorage.getItem('theme');
|
||||
|
||||
const setThemeStyle = (style) => {
|
||||
localStorage.setItem('theme', style);
|
||||
const html = document.documentElement;
|
||||
const prevTheme = [...html.classList].find((c) => c.match(/theme--(light|dark)/));
|
||||
if (prevTheme) {
|
||||
html.classList.remove(prevTheme);
|
||||
}
|
||||
html.classList.add(`theme--${style}`);
|
||||
};
|
||||
|
||||
const setDarkTheme = () => {
|
||||
setThemeStyle('dark');
|
||||
};
|
||||
const setLightTheme = () => {
|
||||
setThemeStyle('light');
|
||||
};
|
||||
|
||||
const switchTheme = () => {
|
||||
const currThemeStyle = getStoredThemeStyle();
|
||||
switch (currThemeStyle) {
|
||||
case 'light':
|
||||
setDarkTheme();
|
||||
break;
|
||||
case 'dark':
|
||||
setLightTheme();
|
||||
break;
|
||||
default:
|
||||
setLightTheme();
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener(
|
||||
'DOMContentLoaded',
|
||||
() => {
|
||||
const themeSwitcher = document.querySelector('.themeswitch');
|
||||
themeSwitcher.addEventListener('click', switchTheme, false);
|
||||
},
|
||||
false,
|
||||
);
|
||||
|
||||
window
|
||||
.matchMedia('(prefers-color-scheme: dark)')
|
||||
.addEventListener('change', (e) => (e.matches ? setDarkTheme() : setLightTheme()), false);
|
||||
|
||||
const currThemeStyle = getStoredThemeStyle();
|
||||
if (currThemeStyle) {
|
||||
setThemeStyle(currThemeStyle);
|
||||
} else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
setDarkTheme();
|
||||
} else {
|
||||
setLightTheme();
|
||||
}
|
||||
507
assets/js/medium-zoom.js
Normal file
507
assets/js/medium-zoom.js
Normal file
|
|
@ -0,0 +1,507 @@
|
|||
/*!medium-zoom 1.0.5 | MIT License | https://github.com/francoischalifour/medium-zoom*/
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined'
|
||||
? (module.exports = factory())
|
||||
: typeof define === 'function' && define.amd
|
||||
? define(factory)
|
||||
: ((global = global || self), (global.mediumZoom = factory()));
|
||||
})(this, function () {
|
||||
'use strict';
|
||||
var _extends =
|
||||
Object.assign ||
|
||||
function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
var isSupported = function isSupported(node) {
|
||||
return node.tagName === 'IMG';
|
||||
};
|
||||
var isNodeList = function isNodeList(selector) {
|
||||
return NodeList.prototype.isPrototypeOf(selector);
|
||||
};
|
||||
var isNode = function isNode(selector) {
|
||||
return selector && selector.nodeType === 1;
|
||||
};
|
||||
var isSvg = function isSvg(image) {
|
||||
var source = image.currentSrc || image.src;
|
||||
return source.substr(-4).toLowerCase() === '.svg';
|
||||
};
|
||||
var getImagesFromSelector = function getImagesFromSelector(selector) {
|
||||
try {
|
||||
if (Array.isArray(selector)) {
|
||||
return selector.filter(isSupported);
|
||||
}
|
||||
if (isNodeList(selector)) {
|
||||
return [].slice.call(selector).filter(isSupported);
|
||||
}
|
||||
if (isNode(selector)) {
|
||||
return [selector].filter(isSupported);
|
||||
}
|
||||
if (typeof selector === 'string') {
|
||||
return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);
|
||||
}
|
||||
return [];
|
||||
} catch (err) {
|
||||
throw new TypeError(
|
||||
'The provided selector is invalid.\n' +
|
||||
'Expects a CSS selector, a Node element, a NodeList or an array.\n' +
|
||||
'See: https://github.com/francoischalifour/medium-zoom',
|
||||
);
|
||||
}
|
||||
};
|
||||
var createOverlay = function createOverlay() {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.classList.add('medium-zoom-overlay');
|
||||
return overlay;
|
||||
};
|
||||
var cloneTarget = function cloneTarget(template) {
|
||||
var _template$getBounding = template.getBoundingClientRect(),
|
||||
top = _template$getBounding.top,
|
||||
left = _template$getBounding.left,
|
||||
width = _template$getBounding.width,
|
||||
height = _template$getBounding.height;
|
||||
var clone = template.cloneNode();
|
||||
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||
var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
||||
clone.removeAttribute('id');
|
||||
clone.style.position = 'absolute';
|
||||
clone.style.top = top + scrollTop + 'px';
|
||||
clone.style.left = left + scrollLeft + 'px';
|
||||
clone.style.width = width + 'px';
|
||||
clone.style.height = height + 'px';
|
||||
clone.style.transform = '';
|
||||
return clone;
|
||||
};
|
||||
var createCustomEvent = function createCustomEvent(type, params) {
|
||||
var eventParams = _extends(
|
||||
{
|
||||
bubbles: false,
|
||||
cancelable: false,
|
||||
detail: undefined,
|
||||
},
|
||||
params,
|
||||
);
|
||||
if (typeof window.CustomEvent === 'function') {
|
||||
return new CustomEvent(type, eventParams);
|
||||
}
|
||||
var customEvent = document.createEvent('CustomEvent');
|
||||
customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);
|
||||
return customEvent;
|
||||
};
|
||||
var mediumZoom = function mediumZoom(selector) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var Promise =
|
||||
window.Promise ||
|
||||
function Promise(fn) {
|
||||
function noop() {}
|
||||
|
||||
fn(noop, noop);
|
||||
};
|
||||
var _handleClick = function _handleClick(event) {
|
||||
var target = event.target;
|
||||
if (target === overlay) {
|
||||
close();
|
||||
return;
|
||||
}
|
||||
if (images.indexOf(target) === -1) {
|
||||
return;
|
||||
}
|
||||
toggle({
|
||||
target: target,
|
||||
});
|
||||
};
|
||||
var _handleScroll = function _handleScroll() {
|
||||
if (isAnimating || !active.original) {
|
||||
return;
|
||||
}
|
||||
var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||
if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {
|
||||
setTimeout(close, 150);
|
||||
}
|
||||
};
|
||||
var _handleKeyUp = function _handleKeyUp(event) {
|
||||
var key = event.key || event.keyCode;
|
||||
if (key === 'Escape' || key === 'Esc' || key === 27) {
|
||||
close();
|
||||
}
|
||||
};
|
||||
var update = function update() {
|
||||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
var newOptions = options;
|
||||
if (options.container && options.container instanceof Object) {
|
||||
newOptions.container = _extends({}, zoomOptions.container, options.container);
|
||||
}
|
||||
if (options.template) {
|
||||
var template = isNode(options.template) ? options.template : document.querySelector(options.template);
|
||||
newOptions.template = template;
|
||||
}
|
||||
zoomOptions = _extends({}, zoomOptions, newOptions);
|
||||
images.forEach(function (image) {
|
||||
image.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:update', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
return zoom;
|
||||
};
|
||||
var clone = function clone() {
|
||||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
return mediumZoom(_extends({}, zoomOptions, options));
|
||||
};
|
||||
var attach = function attach() {
|
||||
for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {
|
||||
selectors[_key] = arguments[_key];
|
||||
}
|
||||
var newImages = selectors.reduce(function (imagesAccumulator, currentSelector) {
|
||||
return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
|
||||
}, []);
|
||||
newImages
|
||||
.filter(function (newImage) {
|
||||
return images.indexOf(newImage) === -1;
|
||||
})
|
||||
.forEach(function (newImage) {
|
||||
images.push(newImage);
|
||||
newImage.classList.add('medium-zoom-image');
|
||||
});
|
||||
eventListeners.forEach(function (_ref) {
|
||||
var type = _ref.type,
|
||||
listener = _ref.listener,
|
||||
options = _ref.options;
|
||||
newImages.forEach(function (image) {
|
||||
image.addEventListener(type, listener, options);
|
||||
});
|
||||
});
|
||||
return zoom;
|
||||
};
|
||||
var detach = function detach() {
|
||||
for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||||
selectors[_key2] = arguments[_key2];
|
||||
}
|
||||
if (active.zoomed) {
|
||||
close();
|
||||
}
|
||||
var imagesToDetach =
|
||||
selectors.length > 0
|
||||
? selectors.reduce(function (imagesAccumulator, currentSelector) {
|
||||
return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
|
||||
}, [])
|
||||
: images;
|
||||
imagesToDetach.forEach(function (image) {
|
||||
image.classList.remove('medium-zoom-image');
|
||||
image.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:detach', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
images = images.filter(function (image) {
|
||||
return imagesToDetach.indexOf(image) === -1;
|
||||
});
|
||||
return zoom;
|
||||
};
|
||||
var on = function on(type, listener) {
|
||||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
images.forEach(function (image) {
|
||||
image.addEventListener('medium-zoom:' + type, listener, options);
|
||||
});
|
||||
eventListeners.push({
|
||||
type: 'medium-zoom:' + type,
|
||||
listener: listener,
|
||||
options: options,
|
||||
});
|
||||
return zoom;
|
||||
};
|
||||
var off = function off(type, listener) {
|
||||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
images.forEach(function (image) {
|
||||
image.removeEventListener('medium-zoom:' + type, listener, options);
|
||||
});
|
||||
eventListeners = eventListeners.filter(function (eventListener) {
|
||||
return !(
|
||||
eventListener.type === 'medium-zoom:' + type && eventListener.listener.toString() === listener.toString()
|
||||
);
|
||||
});
|
||||
return zoom;
|
||||
};
|
||||
var open = function open() {
|
||||
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
||||
target = _ref2.target;
|
||||
var _animate = function _animate() {
|
||||
var container = {
|
||||
width: document.documentElement.clientWidth,
|
||||
height: document.documentElement.clientHeight,
|
||||
left: 0,
|
||||
top: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
};
|
||||
var viewportWidth = void 0;
|
||||
var viewportHeight = void 0;
|
||||
if (zoomOptions.container) {
|
||||
if (zoomOptions.container instanceof Object) {
|
||||
container = _extends({}, container, zoomOptions.container);
|
||||
viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;
|
||||
viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;
|
||||
} else {
|
||||
var zoomContainer = isNode(zoomOptions.container)
|
||||
? zoomOptions.container
|
||||
: document.querySelector(zoomOptions.container);
|
||||
var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(),
|
||||
_width = _zoomContainer$getBou.width,
|
||||
_height = _zoomContainer$getBou.height,
|
||||
_left = _zoomContainer$getBou.left,
|
||||
_top = _zoomContainer$getBou.top;
|
||||
container = _extends({}, container, {
|
||||
width: _width,
|
||||
height: _height,
|
||||
left: _left,
|
||||
top: _top,
|
||||
});
|
||||
}
|
||||
}
|
||||
viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;
|
||||
viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;
|
||||
var zoomTarget = active.zoomedHd || active.original;
|
||||
var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;
|
||||
var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;
|
||||
var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(),
|
||||
top = _zoomTarget$getBoundi.top,
|
||||
left = _zoomTarget$getBoundi.left,
|
||||
width = _zoomTarget$getBoundi.width,
|
||||
height = _zoomTarget$getBoundi.height;
|
||||
var scaleX = Math.min(naturalWidth, viewportWidth) / width;
|
||||
var scaleY = Math.min(naturalHeight, viewportHeight) / height;
|
||||
var scale = Math.min(scaleX, scaleY);
|
||||
var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;
|
||||
var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;
|
||||
var transform = 'scale(' + scale + ') translate3d(' + translateX + 'px, ' + translateY + 'px, 0)';
|
||||
active.zoomed.style.transform = transform;
|
||||
if (active.zoomedHd) {
|
||||
active.zoomedHd.style.transform = transform;
|
||||
}
|
||||
};
|
||||
return new Promise(function (resolve) {
|
||||
if (target && images.indexOf(target) === -1) {
|
||||
resolve(zoom);
|
||||
return;
|
||||
}
|
||||
var _handleOpenEnd = function _handleOpenEnd() {
|
||||
isAnimating = false;
|
||||
active.zoomed.removeEventListener('transitionend', _handleOpenEnd);
|
||||
active.original.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:opened', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
resolve(zoom);
|
||||
};
|
||||
if (active.zoomed) {
|
||||
resolve(zoom);
|
||||
return;
|
||||
}
|
||||
if (target) {
|
||||
active.original = target;
|
||||
} else if (images.length > 0) {
|
||||
var _images = images;
|
||||
active.original = _images[0];
|
||||
} else {
|
||||
resolve(zoom);
|
||||
return;
|
||||
}
|
||||
active.original.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:open', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||
isAnimating = true;
|
||||
active.zoomed = cloneTarget(active.original);
|
||||
document.body.appendChild(overlay);
|
||||
if (zoomOptions.template) {
|
||||
var template = isNode(zoomOptions.template)
|
||||
? zoomOptions.template
|
||||
: document.querySelector(zoomOptions.template);
|
||||
active.template = document.createElement('div');
|
||||
active.template.appendChild(template.content.cloneNode(true));
|
||||
document.body.appendChild(active.template);
|
||||
}
|
||||
document.body.appendChild(active.zoomed);
|
||||
window.requestAnimationFrame(function () {
|
||||
document.body.classList.add('medium-zoom--opened');
|
||||
});
|
||||
active.original.classList.add('medium-zoom-image--hidden');
|
||||
active.zoomed.classList.add('medium-zoom-image--opened');
|
||||
active.zoomed.addEventListener('click', close);
|
||||
active.zoomed.addEventListener('transitionend', _handleOpenEnd);
|
||||
if (active.original.getAttribute('data-zoom-src')) {
|
||||
active.zoomedHd = active.zoomed.cloneNode();
|
||||
active.zoomedHd.removeAttribute('srcset');
|
||||
active.zoomedHd.removeAttribute('sizes');
|
||||
active.zoomedHd.src = active.zoomed.getAttribute('data-zoom-src');
|
||||
active.zoomedHd.onerror = function () {
|
||||
clearInterval(getZoomTargetSize);
|
||||
console.warn('Unable to reach the zoom image target ' + active.zoomedHd.src);
|
||||
active.zoomedHd = null;
|
||||
_animate();
|
||||
};
|
||||
var getZoomTargetSize = setInterval(function () {
|
||||
if (active.zoomedHd.complete) {
|
||||
clearInterval(getZoomTargetSize);
|
||||
active.zoomedHd.classList.add('medium-zoom-image--opened');
|
||||
active.zoomedHd.addEventListener('click', close);
|
||||
document.body.appendChild(active.zoomedHd);
|
||||
_animate();
|
||||
}
|
||||
}, 10);
|
||||
} else if (active.original.hasAttribute('srcset')) {
|
||||
active.zoomedHd = active.zoomed.cloneNode();
|
||||
active.zoomedHd.removeAttribute('sizes');
|
||||
var loadEventListener = active.zoomedHd.addEventListener('load', function () {
|
||||
active.zoomedHd.removeEventListener('load', loadEventListener);
|
||||
active.zoomedHd.classList.add('medium-zoom-image--opened');
|
||||
active.zoomedHd.addEventListener('click', close);
|
||||
document.body.appendChild(active.zoomedHd);
|
||||
_animate();
|
||||
});
|
||||
} else {
|
||||
_animate();
|
||||
}
|
||||
});
|
||||
};
|
||||
var close = function close() {
|
||||
return new Promise(function (resolve) {
|
||||
if (isAnimating || !active.original) {
|
||||
resolve(zoom);
|
||||
return;
|
||||
}
|
||||
var _handleCloseEnd = function _handleCloseEnd() {
|
||||
active.original.classList.remove('medium-zoom-image--hidden');
|
||||
document.body.removeChild(active.zoomed);
|
||||
if (active.zoomedHd) {
|
||||
document.body.removeChild(active.zoomedHd);
|
||||
}
|
||||
document.body.removeChild(overlay);
|
||||
active.zoomed.classList.remove('medium-zoom-image--opened');
|
||||
if (active.template) {
|
||||
document.body.removeChild(active.template);
|
||||
}
|
||||
isAnimating = false;
|
||||
active.zoomed.removeEventListener('transitionend', _handleCloseEnd);
|
||||
active.original.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:closed', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
active.original = null;
|
||||
active.zoomed = null;
|
||||
active.zoomedHd = null;
|
||||
active.template = null;
|
||||
resolve(zoom);
|
||||
};
|
||||
isAnimating = true;
|
||||
document.body.classList.remove('medium-zoom--opened');
|
||||
active.zoomed.style.transform = '';
|
||||
if (active.zoomedHd) {
|
||||
active.zoomedHd.style.transform = '';
|
||||
}
|
||||
if (active.template) {
|
||||
active.template.style.transition = 'opacity 150ms';
|
||||
active.template.style.opacity = 0;
|
||||
}
|
||||
active.original.dispatchEvent(
|
||||
createCustomEvent('medium-zoom:close', {
|
||||
detail: {
|
||||
zoom: zoom,
|
||||
},
|
||||
}),
|
||||
);
|
||||
active.zoomed.addEventListener('transitionend', _handleCloseEnd);
|
||||
});
|
||||
};
|
||||
var toggle = function toggle() {
|
||||
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
||||
target = _ref3.target;
|
||||
if (active.original) {
|
||||
return close();
|
||||
}
|
||||
return open({
|
||||
target: target,
|
||||
});
|
||||
};
|
||||
var getOptions = function getOptions() {
|
||||
return zoomOptions;
|
||||
};
|
||||
var getImages = function getImages() {
|
||||
return images;
|
||||
};
|
||||
var getZoomedImage = function getZoomedImage() {
|
||||
return active.original;
|
||||
};
|
||||
var images = [];
|
||||
var eventListeners = [];
|
||||
var isAnimating = false;
|
||||
var scrollTop = 0;
|
||||
var zoomOptions = options;
|
||||
var active = {
|
||||
original: null,
|
||||
zoomed: null,
|
||||
zoomedHd: null,
|
||||
template: null,
|
||||
};
|
||||
if (Object.prototype.toString.call(selector) === '[object Object]') {
|
||||
zoomOptions = selector;
|
||||
} else if (selector || typeof selector === 'string') {
|
||||
attach(selector);
|
||||
}
|
||||
zoomOptions = _extends(
|
||||
{
|
||||
margin: 0,
|
||||
scrollOffset: 40,
|
||||
container: null,
|
||||
template: null,
|
||||
},
|
||||
zoomOptions,
|
||||
);
|
||||
var overlay = createOverlay();
|
||||
document.addEventListener('click', _handleClick);
|
||||
document.addEventListener('keyup', _handleKeyUp);
|
||||
document.addEventListener('scroll', _handleScroll);
|
||||
window.addEventListener('resize', close);
|
||||
var zoom = {
|
||||
open: open,
|
||||
close: close,
|
||||
toggle: toggle,
|
||||
update: update,
|
||||
clone: clone,
|
||||
attach: attach,
|
||||
detach: detach,
|
||||
on: on,
|
||||
off: off,
|
||||
getOptions: getOptions,
|
||||
getImages: getImages,
|
||||
getZoomedImage: getZoomedImage,
|
||||
};
|
||||
return zoom;
|
||||
};
|
||||
return mediumZoom;
|
||||
});
|
||||
|
||||
mediumZoom(document.querySelectorAll('div.post__content img'));
|
||||
29
assets/scss/main.scss
Normal file
29
assets/scss/main.scss
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
@use 'modules/variables' as *;
|
||||
@use 'modules/config';
|
||||
@use 'modules/color_theme';
|
||||
@use 'partials/hugo';
|
||||
@use 'partials/base';
|
||||
@use 'partials/layout/html';
|
||||
@use 'partials/layout/body';
|
||||
@use 'partials/layout/header';
|
||||
@use 'partials/layout/nav';
|
||||
@use 'partials/components/animated';
|
||||
@use 'partials/components/category';
|
||||
@use 'partials/components/tag';
|
||||
@use 'partials/components/wrapper';
|
||||
@use 'partials/components/sidebar';
|
||||
@use 'partials/components/footer';
|
||||
@use 'partials/components/pagination';
|
||||
@use 'partials/components/navbarburger';
|
||||
@use 'partials/components/comment';
|
||||
@use 'partials/components/optionswitch';
|
||||
@use 'partials/components/post';
|
||||
@use 'partials/components/alert';
|
||||
@use 'partials/components/portfolio';
|
||||
@use 'partials/components/page404';
|
||||
@use 'partials/components/archive';
|
||||
@use 'partials/components/notice';
|
||||
@use 'partials/vendors/mediumzoom';
|
||||
@use 'partials/vendors/contactform';
|
||||
@use 'partials/vendors/tableofcontents';
|
||||
@use 'partials/vendors/table';
|
||||
55
assets/scss/modules/_color_theme.scss
Normal file
55
assets/scss/modules/_color_theme.scss
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
@use 'modules/variables' as var;
|
||||
@use 'sass:map';
|
||||
|
||||
$themes: (
|
||||
light: (
|
||||
accent: var.$accent--lightmode,
|
||||
primary: var.$primary--lightmode,
|
||||
primary-light: var.$primary-light--lightmode,
|
||||
primary-lighter: var.$primary-lighter--lightmode,
|
||||
info: var.$info,
|
||||
shadow: var.$shadow--lightmode,
|
||||
border: 1px solid var.$primary-lighter--lightmode,
|
||||
alert: var.$warning,
|
||||
success: var.$success,
|
||||
warning: var.$warning,
|
||||
danger: var.$danger,
|
||||
),
|
||||
dark: (
|
||||
accent: var.$accent--darkmode,
|
||||
primary: var.$primary--darkmode,
|
||||
primary-light: var.$primary-light--darkmode,
|
||||
primary-lighter: var.$primary-lighter--darkmode,
|
||||
info: var.$info,
|
||||
shadow: var.$shadow--darkmode,
|
||||
border: 1px solid var.$primary-lighter--darkmode,
|
||||
alert: var.$warning,
|
||||
success: var.$success,
|
||||
warning: var.$warning,
|
||||
danger: var.$danger,
|
||||
),
|
||||
);
|
||||
|
||||
$theme-map: ();
|
||||
|
||||
@mixin themed() {
|
||||
@each $theme, $map in $themes {
|
||||
.theme--#{$theme} & {
|
||||
@each $key, $submap in $map {
|
||||
$value: map.get(map.get($themes, $theme), '#{$key}');
|
||||
$theme-map: map.merge(
|
||||
$theme-map,
|
||||
(
|
||||
$key: $value,
|
||||
)
|
||||
) !global;
|
||||
}
|
||||
@content;
|
||||
$theme-map: ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@function t($key) {
|
||||
@return map.get($theme-map, $key);
|
||||
}
|
||||
31
assets/scss/modules/_config.scss
Normal file
31
assets/scss/modules/_config.scss
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
@use 'hugo:vars' as hugo;
|
||||
|
||||
@mixin desktop {
|
||||
@media screen and (min-width: 961px) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin widescreen {
|
||||
@media screen and (min-width: 1921px) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin print {
|
||||
@media print {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin ltr {
|
||||
@if hugo.$text-direction == ltr {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin rtl {
|
||||
@if hugo.$text-direction == rtl {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
19
assets/scss/modules/_variables.scss
Normal file
19
assets/scss/modules/_variables.scss
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
$accent--lightmode: #fff;
|
||||
$primary--lightmode: #464646;
|
||||
$primary-light--lightmode: #9f9f9f;
|
||||
$primary-lighter--lightmode: #eeeeee;
|
||||
$shadow--lightmode: 0 8px 16px rgba(10, 10, 10, 0.1);
|
||||
|
||||
$accent--darkmode: #152028;
|
||||
$primary--darkmode: #eeeeee;
|
||||
$primary-light--darkmode: #9f9f9f;
|
||||
$primary-lighter--darkmode: #464646;
|
||||
$shadow--darkmode: 0 8px 16px rgba(226, 226, 226, 0.1);
|
||||
|
||||
$warning: #ffc107;
|
||||
$info: #6086b4;
|
||||
$success: #51d88a;
|
||||
$danger: #ef5753;
|
||||
|
||||
$thumbnail-height: 15em;
|
||||
$body-max-width: 1920px;
|
||||
18
assets/scss/partials/_base.scss
Normal file
18
assets/scss/partials/_base.scss
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
@use 'modules/config' as conf;
|
||||
@charset "UTF-8";
|
||||
|
||||
* {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
@include conf.ltr {
|
||||
font-family: 'PingHei', 'PingFang SC', 'Helvetica Neue', 'Work Sans', 'Hiragino Sans GB', sans-serif;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
font-family: 'Tajawal', sans-serif;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
36
assets/scss/partials/_hugo.scss
Normal file
36
assets/scss/partials/_hugo.scss
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
|
||||
&:hover {
|
||||
@include color.themed() {
|
||||
color: color.t('info');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding: 0 1em;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
|
||||
@include conf.ltr {
|
||||
border-left: color.t('border');
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
border-right: color.t('border');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.9em;
|
||||
}
|
||||
29
assets/scss/partials/components/_alert.scss
Normal file
29
assets/scss/partials/components/_alert.scss
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
.alert {
|
||||
padding: 1rem;
|
||||
border-style: solid;
|
||||
border-radius: 0.25rem;
|
||||
border-width: 2px;
|
||||
margin-top: 1rem;
|
||||
|
||||
@include color.themed() {
|
||||
border-color: color.t('alert');
|
||||
}
|
||||
|
||||
&__indicator {
|
||||
display: inline-block;
|
||||
border-radius: 9999px;
|
||||
padding: 0.5rem;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
text-align: center;
|
||||
font-weight: 800;
|
||||
margin-right: 0.75rem;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('accent');
|
||||
background-color: color.t('alert');
|
||||
}
|
||||
}
|
||||
}
|
||||
52
assets/scss/partials/components/_animated.scss
Normal file
52
assets/scss/partials/components/_animated.scss
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
.animated {
|
||||
transition: top 0.8s linear;
|
||||
animation-duration: 1s;
|
||||
-webkit-animation-duration: 1s;
|
||||
-moz-animation-duration: 1s;
|
||||
-ms-animation-duration: 1s;
|
||||
-o-animation-duration: 1s;
|
||||
-webkit-animation-name: fadeInDown;
|
||||
-moz-animation-name: fadeInDown;
|
||||
-o-animation-name: fadeInDown;
|
||||
animation-name: fadeInDown;
|
||||
|
||||
@-webkit-keyframes fadeInDown {
|
||||
0% {
|
||||
-webkit-transform: translateY(-20px);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes fadeInDown {
|
||||
0% {
|
||||
-moz-transform: translateY(-20px);
|
||||
}
|
||||
|
||||
100% {
|
||||
-moz-transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@-o-keyframes fadeInDown {
|
||||
0% {
|
||||
-o-transform: translateY(-20px);
|
||||
}
|
||||
|
||||
100% {
|
||||
-o-transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadeInDown {
|
||||
0% {
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
48
assets/scss/partials/components/_archive.scss
Normal file
48
assets/scss/partials/components/_archive.scss
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
.archive {
|
||||
margin: 30px;
|
||||
|
||||
&__heading {
|
||||
font-size: 2.4rem;
|
||||
font-weight: 600;
|
||||
line-height: 2.2em;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
}
|
||||
|
||||
&__list {
|
||||
padding: 0;
|
||||
|
||||
&-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 5px;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
&-date {
|
||||
text-align: right;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary-light');
|
||||
}
|
||||
}
|
||||
|
||||
&-title {
|
||||
display: inline-block;
|
||||
flex: 0.96;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
&:hover {
|
||||
@include color.themed() {
|
||||
color: color.t('info');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
23
assets/scss/partials/components/_category.scss
Normal file
23
assets/scss/partials/components/_category.scss
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.category {
|
||||
padding: 4px 6px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
font-size: 1.4rem;
|
||||
|
||||
@include color.themed() {
|
||||
border: color.t('border');
|
||||
background-color: color.t('primary-lighter');
|
||||
color: color.t('primary') !important;
|
||||
}
|
||||
|
||||
@include conf.ltr {
|
||||
margin: 5px 8px 5px 0;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin: 5px 0 5px 8px;
|
||||
}
|
||||
}
|
||||
6
assets/scss/partials/components/_comment.scss
Normal file
6
assets/scss/partials/components/_comment.scss
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
.comment {
|
||||
margin: 30px;
|
||||
.utterances {
|
||||
max-width: unset;
|
||||
}
|
||||
}
|
||||
47
assets/scss/partials/components/_footer.scss
Normal file
47
assets/scss/partials/components/_footer.scss
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
@use 'modules/config' as conf;
|
||||
|
||||
.footer {
|
||||
$font-size-footer: 1.4rem;
|
||||
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
padding-bottom: 20px;
|
||||
flex: 0;
|
||||
position: relative;
|
||||
|
||||
&__list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&__item {
|
||||
font-size: $font-size-footer;
|
||||
|
||||
&:not(:first-of-type)::before {
|
||||
content: '\00B7';
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: $font-size-footer;
|
||||
}
|
||||
}
|
||||
|
||||
&__sidebar {
|
||||
display: none;
|
||||
|
||||
@include conf.desktop {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
&__base {
|
||||
@include conf.desktop {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
43
assets/scss/partials/components/_navbarburger.scss
Normal file
43
assets/scss/partials/components/_navbarburger.scss
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.navbar-burger {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 3.25rem;
|
||||
position: relative;
|
||||
width: 3.25rem;
|
||||
margin-left: auto;
|
||||
padding: 6px;
|
||||
&__line {
|
||||
display: block;
|
||||
height: 1px;
|
||||
left: calc(50% - 8px);
|
||||
position: absolute;
|
||||
transform-origin: center;
|
||||
transition-duration: 86ms;
|
||||
transition-property: background-color, opacity, transform;
|
||||
transition-timing-function: ease-out;
|
||||
width: 16px;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('primary');
|
||||
}
|
||||
|
||||
&:nth-child(1) {
|
||||
top: calc(50% - 6px);
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
top: calc(50% - 1px);
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
top: calc(50% + 4px);
|
||||
}
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
48
assets/scss/partials/components/_notice.scss
Normal file
48
assets/scss/partials/components/_notice.scss
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
@use 'sass:color' as color;
|
||||
@use 'modules/color_theme' as colorTheme;
|
||||
@use 'modules/variables' as var;
|
||||
|
||||
.notice {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@include colorTheme.themed() {
|
||||
background-color: color.mix(colorTheme.t('info'), colorTheme.t('accent'), 40%);
|
||||
}
|
||||
|
||||
&--update {
|
||||
@include colorTheme.themed() {
|
||||
background-color: color.mix(colorTheme.t('success'), colorTheme.t('accent'), 40%);
|
||||
}
|
||||
}
|
||||
|
||||
&--warning {
|
||||
@include colorTheme.themed() {
|
||||
background-color: color.mix(colorTheme.t('danger'), colorTheme.t('accent'), 40%);
|
||||
}
|
||||
}
|
||||
|
||||
&__title {
|
||||
background-color: colorTheme.t('info');
|
||||
align-self: flex-end;
|
||||
font-weight: 300;
|
||||
letter-spacing: 0.025em;
|
||||
padding: 0.2rem 0.5rem 0.2rem 0.5rem;
|
||||
|
||||
@include colorTheme.themed() {
|
||||
color: colorTheme.t('accent');
|
||||
}
|
||||
|
||||
&--update {
|
||||
background-color: colorTheme.t('success');
|
||||
}
|
||||
|
||||
&--warning {
|
||||
background-color: colorTheme.t('danger');
|
||||
}
|
||||
}
|
||||
|
||||
&__content {
|
||||
padding: 8px 8px 1rem 1rem;
|
||||
}
|
||||
}
|
||||
84
assets/scss/partials/components/_optionswitch.scss
Normal file
84
assets/scss/partials/components/_optionswitch.scss
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.optionswitch {
|
||||
position: relative;
|
||||
|
||||
&__label {
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
&__list {
|
||||
display: none;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
|
||||
@include conf.desktop {
|
||||
border-radius: 5px;
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
|
||||
@include color.themed() {
|
||||
background: color.t('primary-lighter');
|
||||
box-shadow: color.t('shadow');
|
||||
}
|
||||
}
|
||||
|
||||
&-item {
|
||||
background: transparent;
|
||||
display: block;
|
||||
line-height: 1;
|
||||
bottom: 0;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
padding-top: 24px;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
padding: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__triangle {
|
||||
display: none;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
border-radius: 2px 0px 0px 0px;
|
||||
height: 14px;
|
||||
left: calc(50% / 2);
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
transform: rotate(45deg) translateY(0px) translatex(10px);
|
||||
width: 14px;
|
||||
|
||||
@include color.themed() {
|
||||
background: color.t('primary-lighter');
|
||||
box-shadow: color.t('shadow');
|
||||
border-color: color.t('primary-lighter');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__picker {
|
||||
&:checked {
|
||||
~ .optionswitch {
|
||||
&__list {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&__triangle {
|
||||
@include conf.desktop {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
4
assets/scss/partials/components/_page404.scss
Normal file
4
assets/scss/partials/components/_page404.scss
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.page_404 {
|
||||
text-align: center;
|
||||
padding-top: 50px;
|
||||
}
|
||||
25
assets/scss/partials/components/_pagination.scss
Normal file
25
assets/scss/partials/components/_pagination.scss
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
.pagination {
|
||||
margin: 30px;
|
||||
padding: 0px 0 56px 0;
|
||||
text-align: center;
|
||||
|
||||
&__list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 13px;
|
||||
|
||||
&-item {
|
||||
margin: 0 2px 0 2px;
|
||||
display: inline;
|
||||
line-height: 1;
|
||||
text-decoration: none;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
188
assets/scss/partials/components/_portfolio.scss
Normal file
188
assets/scss/partials/components/_portfolio.scss
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.portfolio {
|
||||
position: relative;
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
padding-bottom: 0px;
|
||||
padding-top: 48px;
|
||||
|
||||
@include conf.desktop {
|
||||
padding: 48px;
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 10%;
|
||||
left: 10%;
|
||||
bottom: 10%;
|
||||
right: 10%;
|
||||
background: transparent;
|
||||
border-radius: 0.5em;
|
||||
|
||||
@include conf.desktop {
|
||||
@include color.themed() {
|
||||
border: color.t('border');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__title {
|
||||
letter-spacing: 1px;
|
||||
font-size: 2.6rem;
|
||||
line-height: 1;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
&__image {
|
||||
max-width: 100%;
|
||||
min-width: 100%;
|
||||
box-shadow: color.t('shadow');
|
||||
overflow: hidden;
|
||||
transition: box-shadow 0.3s ease;
|
||||
object-fit: cover;
|
||||
border-bottom: 0px;
|
||||
display: block;
|
||||
position: relative;
|
||||
|
||||
&-wrapper {
|
||||
display: block;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
&--right,
|
||||
&--left {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
width: calc(100% - 64px);
|
||||
padding: 32px 32px 0px 32px;
|
||||
max-width: inherit;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
width: 60%;
|
||||
object-fit: contain;
|
||||
max-width: none;
|
||||
border-radius: 0.5em;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&--left {
|
||||
@include conf.desktop {
|
||||
margin-right: auto;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&--right {
|
||||
@include conf.desktop {
|
||||
margin-right: 0;
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__description {
|
||||
padding: 32px;
|
||||
position: relative;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
padding: 48px;
|
||||
border-radius: 0.5em;
|
||||
|
||||
@include color.themed() {
|
||||
box-shadow: color.t('shadow');
|
||||
}
|
||||
}
|
||||
|
||||
&--left,
|
||||
&--right {
|
||||
margin-top: -24px;
|
||||
|
||||
@include color.themed() {
|
||||
border-bottom: color.t('border');
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
@include color.themed() {
|
||||
background: color.t('primary-lighter');
|
||||
}
|
||||
border-bottom: 0px;
|
||||
width: 60%;
|
||||
margin-top: -48px;
|
||||
}
|
||||
}
|
||||
|
||||
&--right {
|
||||
@include conf.desktop {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
row-gap: 0.8rem;
|
||||
|
||||
&-item {
|
||||
&:not(:last-child) {
|
||||
margin-right: 1.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__button {
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
outline: 0;
|
||||
background: transparent;
|
||||
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
font-style: normal;
|
||||
border-radius: 999em;
|
||||
padding: 10px;
|
||||
|
||||
@include color.themed() {
|
||||
border: 1px solid color.t('primary-light');
|
||||
color: color.t('info');
|
||||
}
|
||||
|
||||
&:hover {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
outline: 0px;
|
||||
background: transparent;
|
||||
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
border-radius: 999em;
|
||||
}
|
||||
|
||||
&-wrapper {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
234
assets/scss/partials/components/_post.scss
Normal file
234
assets/scss/partials/components/_post.scss
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
@use 'modules/variables' as var;
|
||||
|
||||
.post {
|
||||
margin: 30px;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
|
||||
&__meta {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
&-item {
|
||||
&:not(:last-child) {
|
||||
margin-right: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
&-icon {
|
||||
@include conf.ltr {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin-left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
&-text {
|
||||
&:not(:last-child) {
|
||||
@include conf.ltr {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__thumbnail {
|
||||
width: 100%;
|
||||
height: var.$thumbnail-height;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
|
||||
&-wrapper {
|
||||
border-radius: 2px;
|
||||
width: 100%;
|
||||
margin-bottom: 1em;
|
||||
overflow: hidden;
|
||||
transition: box-shadow 0.3s ease;
|
||||
|
||||
@include color.themed() {
|
||||
box-shadow: color.t('shadow');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__content {
|
||||
a {
|
||||
@include color.themed() {
|
||||
color: color.t('info');
|
||||
}
|
||||
}
|
||||
|
||||
.chroma {
|
||||
@include color.themed() {
|
||||
background-color: color.t('primary-lighter');
|
||||
display: block;
|
||||
border-bottom: 1px solid color.t('primary-lighter');
|
||||
}
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
overflow-x: auto;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('primary-lighter');
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
$font-size-h1: 3.6rem;
|
||||
|
||||
font-size: $font-size-h1;
|
||||
letter-spacing: 1px;
|
||||
line-height: 1;
|
||||
|
||||
a {
|
||||
font-size: $font-size-h1;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
$font-size-h2: 2.4rem;
|
||||
|
||||
font-size: $font-size-h2;
|
||||
font-weight: 600;
|
||||
letter-spacing: 1px;
|
||||
line-height: 1;
|
||||
|
||||
a {
|
||||
font-size: $font-size-h2;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
$font-size-h3: 2rem;
|
||||
|
||||
font-size: $font-size-h3;
|
||||
font-weight: 600;
|
||||
letter-spacing: 1px;
|
||||
line-height: 1;
|
||||
|
||||
a {
|
||||
font-size: $font-size-h3;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
line-height: 1.9em;
|
||||
font-weight: 400;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
figure {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
|
||||
&.big {
|
||||
max-width: 87.5%;
|
||||
}
|
||||
|
||||
&.medium {
|
||||
max-width: 75%;
|
||||
}
|
||||
|
||||
&.small {
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
&.tiny {
|
||||
max-width: 25%;
|
||||
}
|
||||
|
||||
&.right {
|
||||
@include conf.desktop {
|
||||
max-width: 50%;
|
||||
|
||||
@include conf.ltr {
|
||||
float: right;
|
||||
margin: 0 0 0 1.5em;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
float: left;
|
||||
margin: 0 1.5em 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.left {
|
||||
@include conf.desktop {
|
||||
max-width: 50%;
|
||||
|
||||
@include conf.ltr {
|
||||
float: left;
|
||||
margin-right: 1.5em;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
float: right;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__footer {
|
||||
padding: 12px 0;
|
||||
|
||||
@include color.themed() {
|
||||
border-bottom: color.t('border');
|
||||
}
|
||||
|
||||
&-date {
|
||||
font-size: 1.4rem;
|
||||
|
||||
@include conf.ltr {
|
||||
margin-right: 10px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin-left: 10px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
81
assets/scss/partials/components/_sidebar.scss
Normal file
81
assets/scss/partials/components/_sidebar.scss
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.sidebar {
|
||||
margin-top: 40px;
|
||||
|
||||
@include conf.desktop {
|
||||
z-index: 2;
|
||||
position: fixed;
|
||||
height: 100%;
|
||||
margin-top: 0;
|
||||
width: inherit;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@include color.themed() {
|
||||
@include conf.ltr {
|
||||
margin-right: 4px;
|
||||
border-right: color.t('border');
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin-left: 4px;
|
||||
border-left: color.t('border');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__content {
|
||||
@include conf.desktop {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
&__list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
text-align: center;
|
||||
|
||||
&-item {
|
||||
display: inline;
|
||||
padding: 0 4px;
|
||||
line-height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&__introduction {
|
||||
top: 40%;
|
||||
text-align: center;
|
||||
|
||||
&-description {
|
||||
margin: 0 1em;
|
||||
}
|
||||
|
||||
&-profileimage {
|
||||
width: 127px;
|
||||
height: 127px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
&-title {
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
letter-spacing: 2px;
|
||||
line-height: 1;
|
||||
margin: 1em;
|
||||
|
||||
a {
|
||||
font-size: 3.2rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
23
assets/scss/partials/components/_tag.scss
Normal file
23
assets/scss/partials/components/_tag.scss
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.tag {
|
||||
display: inline-block;
|
||||
font-size: 1.4rem;
|
||||
|
||||
@include color.themed() {
|
||||
color: color.t('primary-light');
|
||||
}
|
||||
|
||||
@include conf.ltr {
|
||||
margin: 5px 8px 5px 0;
|
||||
}
|
||||
|
||||
@include conf.rtl {
|
||||
margin: 5px 0 5px 8px;
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: '#';
|
||||
}
|
||||
}
|
||||
4
assets/scss/partials/components/_themeswitch.scss
Normal file
4
assets/scss/partials/components/_themeswitch.scss
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.themeswitch {
|
||||
margin-top: -5px;
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
59
assets/scss/partials/components/_wrapper.scss
Normal file
59
assets/scss/partials/components/_wrapper.scss
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
@use 'hugo:vars' as hugo;
|
||||
@use 'modules/config' as conf;
|
||||
@use 'modules/variables' as var;
|
||||
|
||||
.wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@include conf.desktop {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
@include conf.widescreen {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&__main {
|
||||
width: 100%;
|
||||
|
||||
@include conf.desktop {
|
||||
width: hugo.$content-ratio;
|
||||
}
|
||||
|
||||
@include conf.widescreen {
|
||||
width: hugo.$content-ratio-wide;
|
||||
}
|
||||
|
||||
&--fullscreen {
|
||||
margin-top: 20px;
|
||||
|
||||
@include conf.desktop {
|
||||
width: 100%;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
@include conf.widescreen {
|
||||
width: var.$body-max-width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__sidebar {
|
||||
width: 100%;
|
||||
padding: 16px 0;
|
||||
|
||||
@include conf.desktop {
|
||||
width: hugo.$sidebar_ratio;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@include conf.widescreen {
|
||||
width: hugo.$sidebar_ratio_wide;
|
||||
}
|
||||
|
||||
&--hidden {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
assets/scss/partials/layout/_body.scss
Normal file
11
assets/scss/partials/layout/_body.scss
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
.body {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
// work around to style body
|
||||
@include color.themed() {
|
||||
color: color.t('primary');
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
}
|
||||
24
assets/scss/partials/layout/_header.scss
Normal file
24
assets/scss/partials/layout/_header.scss
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.header {
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
|
||||
@include conf.desktop {
|
||||
position: sticky;
|
||||
|
||||
@include color.themed() {
|
||||
border-bottom: color.t('border');
|
||||
}
|
||||
}
|
||||
|
||||
@include conf.print {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
4
assets/scss/partials/layout/_html.scss
Normal file
4
assets/scss/partials/layout/_html.scss
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.html {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-size: 62.5%;
|
||||
}
|
||||
77
assets/scss/partials/layout/_nav.scss
Normal file
77
assets/scss/partials/layout/_nav.scss
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
@use 'modules/config' as conf;
|
||||
|
||||
.nav {
|
||||
$py-desktop: 24px;
|
||||
|
||||
display: none;
|
||||
|
||||
@include conf.desktop {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
&__list {
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('primary-lighter');
|
||||
}
|
||||
|
||||
@include conf.desktop {
|
||||
display: flex;
|
||||
padding: $py-desktop 30px;
|
||||
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
}
|
||||
|
||||
&--end {
|
||||
flex-shrink: 1;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
|
||||
&-item {
|
||||
padding: 16px 0;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
|
||||
@include conf.desktop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
|
||||
&:not(:last-child) {
|
||||
@include conf.ltr {
|
||||
padding-right: 20px;
|
||||
}
|
||||
@include conf.rtl {
|
||||
padding-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__link {
|
||||
&--active {
|
||||
padding-bottom: $py-desktop;
|
||||
|
||||
@include conf.desktop {
|
||||
@include color.themed() {
|
||||
border-bottom: 1px solid color.t('primary');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--active {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
65
assets/scss/partials/vendors/_contactform.scss
vendored
Normal file
65
assets/scss/partials/vendors/_contactform.scss
vendored
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* (CONTACT) FORM */
|
||||
@use 'modules/color_theme' as color;
|
||||
|
||||
.contact-form {
|
||||
margin-top: 30px;
|
||||
}
|
||||
.form-style {
|
||||
width: 100%;
|
||||
}
|
||||
.form-style ul {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.form-style ul li {
|
||||
@include color.themed() {
|
||||
background-color: color.t('accent');
|
||||
color: color.t('primary');
|
||||
}
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
min-height: 35px;
|
||||
}
|
||||
.form-style ul li .field-style {
|
||||
@include color.themed() {
|
||||
border: color.t('border');
|
||||
background-color: color.t('accent');
|
||||
color: color.t('primary');
|
||||
}
|
||||
box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
|
||||
padding: 8px;
|
||||
outline: none;
|
||||
font-family: inherit;
|
||||
}
|
||||
.form-style ul li .field-style:focus {
|
||||
box-shadow: 0 0 5px;
|
||||
border: 1px solid;
|
||||
}
|
||||
.form-style ul li .field-split {
|
||||
width: 49%;
|
||||
}
|
||||
.form-style ul li .field-full {
|
||||
width: 100%;
|
||||
}
|
||||
.form-style ul li input.align-left {
|
||||
float: left;
|
||||
}
|
||||
.form-style ul li input.align-right {
|
||||
float: right;
|
||||
}
|
||||
.form-style ul li textarea {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.form-style ul li input[type='button'],
|
||||
.form-style ul li input[type='submit'] {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
width: 100%;
|
||||
}
|
||||
/* (CONTACT) FORM END */
|
||||
39
assets/scss/partials/vendors/_mediumzoom.scss
vendored
Normal file
39
assets/scss/partials/vendors/_mediumzoom.scss
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
.medium-zoom-overlay {
|
||||
@include color.themed() {
|
||||
background: color.t('accent');
|
||||
}
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
transition: opacity 300ms;
|
||||
will-change: opacity;
|
||||
}
|
||||
|
||||
.medium-zoom--opened .medium-zoom-overlay {
|
||||
cursor: pointer;
|
||||
cursor: zoom-out;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.medium-zoom-image {
|
||||
cursor: pointer;
|
||||
cursor: zoom-in;
|
||||
transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.medium-zoom-image--hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.medium-zoom-image--opened {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
cursor: zoom-out;
|
||||
will-change: transform;
|
||||
}
|
||||
20
assets/scss/partials/vendors/_table.scss
vendored
Normal file
20
assets/scss/partials/vendors/_table.scss
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
@use 'modules/color_theme' as color;
|
||||
|
||||
table {
|
||||
display: table;
|
||||
width: 80%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
tr {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
display: table-cell;
|
||||
padding: 8px;
|
||||
@include color.themed() {
|
||||
border: color.t('border');
|
||||
}
|
||||
}
|
||||
25
assets/scss/partials/vendors/_tableofcontents.scss
vendored
Normal file
25
assets/scss/partials/vendors/_tableofcontents.scss
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
@use 'modules/variables' as var;
|
||||
|
||||
#TableOfContents {
|
||||
display: block;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#TableOfContents ul {
|
||||
list-style: none;
|
||||
line-height: 1.9em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#TableOfContents > ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#TableOfContents li a {
|
||||
display: inherit;
|
||||
color: var.$info;
|
||||
}
|
||||
|
||||
#TableOfContents li a:hover {
|
||||
display: inherit;
|
||||
}
|
||||
3
go.mod
Normal file
3
go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
module github.com/lxndrblz/anatole
|
||||
|
||||
go 1.12
|
||||
55
i18n/ar.toml
Normal file
55
i18n/ar.toml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
[category]
|
||||
other = "التصنيفات"
|
||||
|
||||
[tag]
|
||||
other = "الإشارات"
|
||||
|
||||
[reading_time]
|
||||
one = "دقيقة للقراءة"
|
||||
two = "دقيقتان للقراءة"
|
||||
other = "{{ .Count }} دقائق للقراءة"
|
||||
|
||||
[page_not_found]
|
||||
other = "لم يتم العثور على الصفحة"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "عذرا, الصفحة غير موجودة"
|
||||
|
||||
[head_back]
|
||||
other = "يمكنك العودة <a href=\"{{ . }}\">للصفحة الرئيسية</a>."
|
||||
|
||||
[comments]
|
||||
other = "تعليقات"
|
||||
|
||||
[send]
|
||||
other = "أرسل"
|
||||
|
||||
[read_more]
|
||||
other = "اقرأ المزيد"
|
||||
|
||||
[name]
|
||||
other = "الاسم"
|
||||
|
||||
[email]
|
||||
other = "البريد الالكتروني"
|
||||
|
||||
[message]
|
||||
other = "الرسالة"
|
||||
|
||||
[warning]
|
||||
other = "تحذير"
|
||||
|
||||
[info]
|
||||
other = "حول"
|
||||
|
||||
[update]
|
||||
other = "تحديث"
|
||||
|
||||
[series_posts]
|
||||
other = "المشاركات في هذه السلسلة"
|
||||
|
||||
[related_posts]
|
||||
other = "مشاركات مماثلة"
|
||||
|
||||
[toc]
|
||||
other = "جدول المحتويات"
|
||||
58
i18n/de.toml
Normal file
58
i18n/de.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "Kategorie"
|
||||
|
||||
[tag]
|
||||
other = "Tag"
|
||||
|
||||
[reading_time]
|
||||
one = "{{ .Count }} Minute zum Lesen"
|
||||
other = "{{ .Count }} Minuten zum Lesen"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Warnung: Dieser Beitrag ist über einen {{ .Count }} Tag alt. Die Information kann veraltet sein."
|
||||
other = "Warnung: Dieser Beitrag ist über {{ .Count }} Tage alt. Die Informationen können veraltet sein."
|
||||
|
||||
[page_not_found]
|
||||
other = "Seite nicht gefunden"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Tut mir leid, diese Seite existiert leider nicht."
|
||||
|
||||
[head_back]
|
||||
other = "Du kannst hier zurück zur <a href=\"{{ . }}\">Startseite</a>."
|
||||
|
||||
[comments]
|
||||
other = "Kommentare"
|
||||
|
||||
[send]
|
||||
other = "Senden"
|
||||
|
||||
[read_more]
|
||||
other = "weiterlesen"
|
||||
|
||||
[name]
|
||||
other = "Name"
|
||||
|
||||
[email]
|
||||
other = "E-Mail Adresse"
|
||||
|
||||
[message]
|
||||
other = "Nachricht"
|
||||
|
||||
[warning]
|
||||
other = "Warnung"
|
||||
|
||||
[info]
|
||||
other = "Info"
|
||||
|
||||
[update]
|
||||
other = "Aktualisierung"
|
||||
|
||||
[series_posts]
|
||||
other = "Beiträge in dieser Serie"
|
||||
|
||||
[related_posts]
|
||||
other = "Ähnliche Beiträge"
|
||||
|
||||
[toc]
|
||||
other = "Inhaltsverzeichnis"
|
||||
54
i18n/dk.toml
Normal file
54
i18n/dk.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "Kategori"
|
||||
|
||||
[tag]
|
||||
other = "mærkat"
|
||||
|
||||
[reading_time]
|
||||
one = "et minuts læsetid"
|
||||
other = "{{ .Count }}-minutters læsetid"
|
||||
|
||||
[page_not_found]
|
||||
other = "Side ikke fundet"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Beklager, denne side eksisterer ikke"
|
||||
|
||||
[head_back]
|
||||
other = "Returner til <a href=\"{{ . }}\">homepage</a>."
|
||||
|
||||
[comments]
|
||||
other = "kommentar"
|
||||
|
||||
[send]
|
||||
other = "Sende"
|
||||
|
||||
[read_more]
|
||||
other = "Læs mere"
|
||||
|
||||
[name]
|
||||
other = "Navn"
|
||||
|
||||
[email]
|
||||
other = "e-mail-adresse"
|
||||
|
||||
[message]
|
||||
other = "besked"
|
||||
|
||||
[warning]
|
||||
other = "Advarsel"
|
||||
|
||||
[info]
|
||||
other = "Om"
|
||||
|
||||
[update]
|
||||
other = "Opdatering"
|
||||
|
||||
[series_posts]
|
||||
other = "Indlæg i denne serie"
|
||||
|
||||
[related_posts]
|
||||
other = "lignende indlæg"
|
||||
|
||||
[toc]
|
||||
other = "Indholdsfortegnelse"
|
||||
58
i18n/en.toml
Normal file
58
i18n/en.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "category"
|
||||
|
||||
[tag]
|
||||
other = "tag"
|
||||
|
||||
[reading_time]
|
||||
one = "One-minute read"
|
||||
other = "{{ .Count }}-minute read"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Warning: This post is over {{ .Count }} day old. The information may be out of date."
|
||||
other = "Warning: This post is over {{ .Count }} days old. The information may be out of date."
|
||||
|
||||
[page_not_found]
|
||||
other = "Page Not Found"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Sorry, this page does not exist."
|
||||
|
||||
[head_back]
|
||||
other = "You can head back to <a href=\"{{ . }}\">homepage</a>."
|
||||
|
||||
[comments]
|
||||
other = "comments"
|
||||
|
||||
[send]
|
||||
other = "Send"
|
||||
|
||||
[read_more]
|
||||
other = "Read more"
|
||||
|
||||
[name]
|
||||
other = "Name"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Message"
|
||||
|
||||
[warning]
|
||||
other = "Warning"
|
||||
|
||||
[info]
|
||||
other = "Info"
|
||||
|
||||
[update]
|
||||
other = "Update"
|
||||
|
||||
[series_posts]
|
||||
other = "Posts in this series"
|
||||
|
||||
[related_posts]
|
||||
other = "Related Posts"
|
||||
|
||||
[toc]
|
||||
other = "Table of contents"
|
||||
58
i18n/es.toml
Normal file
58
i18n/es.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "categoría"
|
||||
|
||||
[tag]
|
||||
other = "etiqueta"
|
||||
|
||||
[reading_time]
|
||||
one = "1 minuto de lectura"
|
||||
other = "{{ .Count }} minutos de lectura"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Atención: Este artículo se publicó hace más de {{ .Count }} días. La información podría estar desactualizada."
|
||||
other = "Atención: Este artículo se publicó hace más de {{ .Count }} días. La información podría estar desactualizada."
|
||||
|
||||
[page_not_found]
|
||||
other = "Página no encontrada"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Disculpa, la página no existe."
|
||||
|
||||
[head_back]
|
||||
other = "Puedes regresar a la <a href=\"{{ . }}\">página inicial</a>."
|
||||
|
||||
[comments]
|
||||
other = "comentarios"
|
||||
|
||||
[send]
|
||||
other = "Enviar"
|
||||
|
||||
[read_more]
|
||||
other = "Leer más"
|
||||
|
||||
[name]
|
||||
other = "Nombre"
|
||||
|
||||
[email]
|
||||
other = "Correo electrónico"
|
||||
|
||||
[message]
|
||||
other = "Mensaje"
|
||||
|
||||
[warning]
|
||||
other = "Advertencia"
|
||||
|
||||
[info]
|
||||
other = "Información"
|
||||
|
||||
[update]
|
||||
other = "Actualizar"
|
||||
|
||||
[series_posts]
|
||||
other = "Publicaciones en esta serie"
|
||||
|
||||
[related_posts]
|
||||
other = "Publicaciones similares"
|
||||
|
||||
[toc]
|
||||
other = "Índice"
|
||||
58
i18n/fa.toml
Normal file
58
i18n/fa.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "دستهبندی"
|
||||
|
||||
[tag]
|
||||
other = "برچسب"
|
||||
|
||||
[reading_time]
|
||||
one = "یک دقیقه زمان مطالعه"
|
||||
other = "{{ .Count }}-دقیقه زمان مطالعه"
|
||||
|
||||
[old_content_warning]
|
||||
one = "اخطار: این پست بیش از {{ .Count }} روز سن دارد. اطلاعات پست ممکن است بروز نباشد."
|
||||
other = "اخطار: این پست بیش از {{ .Count }} روز سن دارد. اطلاعات پست ممکن است بروز نباشد."
|
||||
|
||||
[page_not_found]
|
||||
other = "صفحه پیدا نشد"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "با عرض معذرت، این صفحه موجود نمیباشد."
|
||||
|
||||
[head_back]
|
||||
other = "شما میتوانید برگردید به <a href=\"{{ . }}\">صفحه اصلی</a>."
|
||||
|
||||
[comments]
|
||||
other = "نظرات"
|
||||
|
||||
[send]
|
||||
other = "ارسال"
|
||||
|
||||
[read_more]
|
||||
other = "ادامه خواندن"
|
||||
|
||||
[name]
|
||||
other = "نام"
|
||||
|
||||
[email]
|
||||
other = "پست الکترونیک"
|
||||
|
||||
[message]
|
||||
other = "پیام"
|
||||
|
||||
[warning]
|
||||
other = "هشدار"
|
||||
|
||||
[info]
|
||||
other = "درباره"
|
||||
|
||||
[update]
|
||||
other = "به روز رسانی"
|
||||
|
||||
[series_posts]
|
||||
other = "پست های این مجموعه"
|
||||
|
||||
[related_posts]
|
||||
other = "پست های مشابه"
|
||||
|
||||
[toc]
|
||||
other = "فهرست مطالب"
|
||||
54
i18n/fi.toml
Normal file
54
i18n/fi.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "kategoria"
|
||||
|
||||
[tag]
|
||||
other = "merkki"
|
||||
|
||||
[reading_time]
|
||||
one = "Yksi lukuminuutti"
|
||||
other = "{{ .Count }} lukuminuuttia"
|
||||
|
||||
[page_not_found]
|
||||
other = "Sivua ei löydetty"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Valitettavasti tätä sivua ei ole olemassa."
|
||||
|
||||
[head_back]
|
||||
other = "Voit palata takaisin <a href=\"{{ . }}\">kotisivulle</a>."
|
||||
|
||||
[comments]
|
||||
other = "kommentit"
|
||||
|
||||
[send]
|
||||
other = "Lähetä"
|
||||
|
||||
[read_more]
|
||||
other = "Jatka lukemista"
|
||||
|
||||
[name]
|
||||
other = "Nimi"
|
||||
|
||||
[email]
|
||||
other = "Sähköposti"
|
||||
|
||||
[message]
|
||||
other = "Viesti"
|
||||
|
||||
[warning]
|
||||
other = "Varoitus"
|
||||
|
||||
[info]
|
||||
other = "Tietoja"
|
||||
|
||||
[update]
|
||||
other = "Päivitys"
|
||||
|
||||
[series_posts]
|
||||
other = "Viestit tässä sarjassa"
|
||||
|
||||
[related_posts]
|
||||
other = "Vastaavia viestejä"
|
||||
|
||||
[toc]
|
||||
other = "Sisällysluettelo"
|
||||
54
i18n/fr.toml
Normal file
54
i18n/fr.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "catégorie"
|
||||
|
||||
[tag]
|
||||
other = "tag"
|
||||
|
||||
[reading_time]
|
||||
one = "Une minute de lecture"
|
||||
other = "{{ .Count }} minutes de lecture"
|
||||
|
||||
[page_not_found]
|
||||
other = "Page Non Trouvée"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Désolé, cette page n'existe pas."
|
||||
|
||||
[head_back]
|
||||
other = "Vous pouvez revenir à <a href=\"{{ . }}\">l'accueil</a>."
|
||||
|
||||
[comments]
|
||||
other = "commentaire"
|
||||
|
||||
[send]
|
||||
other = "Envoyer"
|
||||
|
||||
[read_more]
|
||||
other = "continuer la lecture"
|
||||
|
||||
[name]
|
||||
other = "Nom"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Message"
|
||||
|
||||
[warning]
|
||||
other = "Attention"
|
||||
|
||||
[info]
|
||||
other = "À propos"
|
||||
|
||||
[update]
|
||||
other = "mettre à jour"
|
||||
|
||||
[series_posts]
|
||||
other = "Articles dans cette série"
|
||||
|
||||
[related_posts]
|
||||
other = "Messages similaires"
|
||||
|
||||
[toc]
|
||||
other = "Table des matières"
|
||||
58
i18n/hu.toml
Normal file
58
i18n/hu.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "kategória"
|
||||
|
||||
[tag]
|
||||
other = "cimke"
|
||||
|
||||
[reading_time]
|
||||
one = "Egyperces olvasmány"
|
||||
other = "{{ .Count }} perces olvasmány"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Figyelem: Ez a bejegyzés több, mint {{ .Count }} napja készült. A benne szereplő információ elavult lehet."
|
||||
other = "Figyelem: Ez a bejegyzés több, mint {{ .Count }} napja készült. A benne szereplő információ elavult lehet."
|
||||
|
||||
[page_not_found]
|
||||
other = "Az oldal nem található"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Sajnos az oldal nem létezik."
|
||||
|
||||
[head_back]
|
||||
other = "Visszatérés a <a href=\"{{ . }}\">főoldalra</a>."
|
||||
|
||||
[comments]
|
||||
other = "hozzászólások"
|
||||
|
||||
[send]
|
||||
other = "Küldés"
|
||||
|
||||
[read_more]
|
||||
other = "Tovább"
|
||||
|
||||
[name]
|
||||
other = "Név"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Üzenet"
|
||||
|
||||
[warning]
|
||||
other = "Figyelmeztetés"
|
||||
|
||||
[info]
|
||||
other = "Információ"
|
||||
|
||||
[update]
|
||||
other = "Újdonság"
|
||||
|
||||
[series_posts]
|
||||
other = "További bejegyzések a cikksorozatban"
|
||||
|
||||
[related_posts]
|
||||
other = "Hasonló hozzászólások"
|
||||
|
||||
[toc]
|
||||
other = "Tartalomjegyzék"
|
||||
58
i18n/id.toml
Normal file
58
i18n/id.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "kategori"
|
||||
|
||||
[tag]
|
||||
other = "label"
|
||||
|
||||
[reading_time]
|
||||
one = "satu menit membaca"
|
||||
other = "{{ .Count }} menit membaca"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Peringatan: postingan ini berumur lebih dari {{ .Count }} hari. Informasi nya mungkin sudah kadaluwarsa ."
|
||||
other = "Peringatan: postingan ini berumur lebih dari {{ .Count }} hari. Informasi nya mungkin sudah kadaluwarsa ."
|
||||
|
||||
[page_not_found]
|
||||
other = "Halaman tidak ditemukan."
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Maaf, halaman ini tidak tersedia."
|
||||
|
||||
[head_back]
|
||||
other = "Anda dapat kembali ke <a href=\"{{ . }}\">beranda</a>."
|
||||
|
||||
[comments]
|
||||
other = "Komentar"
|
||||
|
||||
[send]
|
||||
other = "Kirim"
|
||||
|
||||
[read_more]
|
||||
other = "Baca selengkapnya"
|
||||
|
||||
[name]
|
||||
other = "Nama"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Pesan"
|
||||
|
||||
[warning]
|
||||
other = "Peringatan"
|
||||
|
||||
[info]
|
||||
other = "Info"
|
||||
|
||||
[update]
|
||||
other = "Update"
|
||||
|
||||
[series_posts]
|
||||
other = "Posting dalam seri ini"
|
||||
|
||||
[related_posts]
|
||||
other = "Postingan serupa"
|
||||
|
||||
[toc]
|
||||
other = "Daftar isi"
|
||||
54
i18n/it.toml
Normal file
54
i18n/it.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "categoria"
|
||||
|
||||
[tag]
|
||||
other = "tag"
|
||||
|
||||
[reading_time]
|
||||
one = "Tempo di lettura: un minuto."
|
||||
other = "Tempo di lettura: {{ .Count }} minuti."
|
||||
|
||||
[page_not_found]
|
||||
other = "Pagina non trovata"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Spiacente, questa pagina non esiste."
|
||||
|
||||
[head_back]
|
||||
other = "Puoi tornare alla <a href=\"{{ . }}\">homepage</a>."
|
||||
|
||||
[comments]
|
||||
other = "commenti"
|
||||
|
||||
[send]
|
||||
other = "Invia"
|
||||
|
||||
[read_more]
|
||||
other = "Continua a leggere"
|
||||
|
||||
[name]
|
||||
other = "Nome"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Messaggio"
|
||||
|
||||
[warning]
|
||||
other = "Avviso"
|
||||
|
||||
[info]
|
||||
other = "Informazioni"
|
||||
|
||||
[update]
|
||||
other = "Aggiorna"
|
||||
|
||||
[series_posts]
|
||||
other = "Messaggi di questa serie"
|
||||
|
||||
[related_posts]
|
||||
other = "Post simili"
|
||||
|
||||
[toc]
|
||||
other = "Indice dei contenuti"
|
||||
54
i18n/ja.toml
Normal file
54
i18n/ja.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "カテゴリー"
|
||||
|
||||
[tag]
|
||||
other = "タグ"
|
||||
|
||||
[reading_time]
|
||||
one = "読む時間 1 分間"
|
||||
other = "読む時間 {{ .Count }} 分間"
|
||||
|
||||
[page_not_found]
|
||||
other = "ページが見つかりません。"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "指定されたページは存在しません。"
|
||||
|
||||
[head_back]
|
||||
other = "<a href=\"{{ . }}\">ホーム</a>に戻る。"
|
||||
|
||||
[comments]
|
||||
other = "コメント"
|
||||
|
||||
[send]
|
||||
other = "送信"
|
||||
|
||||
[read_more]
|
||||
other = "もっと読む"
|
||||
|
||||
[name]
|
||||
other = "お名前"
|
||||
|
||||
[email]
|
||||
other = "メールアドレス"
|
||||
|
||||
[message]
|
||||
other = "メッセージ"
|
||||
|
||||
[warning]
|
||||
other = "警告"
|
||||
|
||||
[info]
|
||||
other = "概要"
|
||||
|
||||
[update]
|
||||
other = "更新"
|
||||
|
||||
[series_posts]
|
||||
other = "このシリーズの投稿"
|
||||
|
||||
[related_posts]
|
||||
other = "同様の投稿"
|
||||
|
||||
[toc]
|
||||
other = "目次"
|
||||
58
i18n/ko.toml
Normal file
58
i18n/ko.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "분류"
|
||||
|
||||
[tag]
|
||||
other = "태그"
|
||||
|
||||
[reading_time]
|
||||
one = "읽는 시간 1분"
|
||||
other = "읽는 시간 {{ .Count }}분"
|
||||
|
||||
[old_content_warning]
|
||||
one = "경고: 이 글이 작성된 지 하루가 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다."
|
||||
other = "경고: 이 글이 작성된 지 {{ .Count }}일이 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다."
|
||||
|
||||
[page_not_found]
|
||||
other = "페이지를 찾을 수 없음"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "죄송하지만, 이 페이지는 존재하지 않습니다."
|
||||
|
||||
[head_back]
|
||||
other = "<a href=\"{{ . }}\">홈페이지</a>로 돌아가실 수 있습니다."
|
||||
|
||||
[comments]
|
||||
other = "댓글"
|
||||
|
||||
[send]
|
||||
other = "보내기"
|
||||
|
||||
[read_more]
|
||||
other = "더 읽기"
|
||||
|
||||
[name]
|
||||
other = "이름"
|
||||
|
||||
[email]
|
||||
other = "이메일"
|
||||
|
||||
[message]
|
||||
other = "메시지"
|
||||
|
||||
[warning]
|
||||
other = "경고"
|
||||
|
||||
[info]
|
||||
other = "경고"
|
||||
|
||||
[update]
|
||||
other = "업데이트"
|
||||
|
||||
[series_posts]
|
||||
other = "이 시리즈의 게시물"
|
||||
|
||||
[related_posts]
|
||||
other = "비슷한 게시물"
|
||||
|
||||
[toc]
|
||||
other = "목차"
|
||||
58
i18n/pt-PT.toml
Normal file
58
i18n/pt-PT.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "categoria"
|
||||
|
||||
[tag]
|
||||
other = "etiqueta"
|
||||
|
||||
[reading_time]
|
||||
one = "Tempo de leitura: 1 minuto"
|
||||
other = "Tempo de leitura: {{ .Count }} minutos"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Aviso: Este artigo tem mais de {{ .Count }} dia. Poderá estar desatualizado."
|
||||
other = "Aviso: Este artigo tem mais de {{ .Count }} dias. Poderá estar desatualizado."
|
||||
|
||||
[page_not_found]
|
||||
other = "Página não encontrada"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Desculpe, esta página não existe."
|
||||
|
||||
[head_back]
|
||||
other = "Retornar à <a href=\"{{ . }}\">página inicial</a>."
|
||||
|
||||
[comments]
|
||||
other = "comentários"
|
||||
|
||||
[send]
|
||||
other = "Enviar"
|
||||
|
||||
[read_more]
|
||||
other = "Ler mais"
|
||||
|
||||
[name]
|
||||
other = "Nome"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Mensagem"
|
||||
|
||||
[warning]
|
||||
other = "Aviso"
|
||||
|
||||
[info]
|
||||
other = "Sobre"
|
||||
|
||||
[update]
|
||||
other = "Atualizar"
|
||||
|
||||
[series_posts]
|
||||
other = "Postagens nesta série"
|
||||
|
||||
[related_posts]
|
||||
other = "Posts semelhantes"
|
||||
|
||||
[toc]
|
||||
other = "Índice"
|
||||
54
i18n/pt-br.toml
Normal file
54
i18n/pt-br.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "categoria"
|
||||
|
||||
[tag]
|
||||
other = "etiqueta"
|
||||
|
||||
[reading_time]
|
||||
one = "Tempo de leitura: 1 minuto"
|
||||
other = "Tempo de leitura: {{ .Count }} minutos"
|
||||
|
||||
[page_not_found]
|
||||
other = "Página não encontrada"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Desculpa, esta página não existe."
|
||||
|
||||
[head_back]
|
||||
other = "Retornar à <a href=\"{{ . }}\">página inicial</a>."
|
||||
|
||||
[comments]
|
||||
other = "comentários"
|
||||
|
||||
[send]
|
||||
other = "Enviar"
|
||||
|
||||
[read_more]
|
||||
other = "continue lendo"
|
||||
|
||||
[name]
|
||||
other = "Nome"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[message]
|
||||
other = "Mensagem"
|
||||
|
||||
[warning]
|
||||
other = "Aviso"
|
||||
|
||||
[info]
|
||||
other = "Sobre"
|
||||
|
||||
[update]
|
||||
other = "Atualizar"
|
||||
|
||||
[series_posts]
|
||||
other = "Postagens nesta série"
|
||||
|
||||
[related_posts]
|
||||
other = "Postagens semelhantes"
|
||||
|
||||
[toc]
|
||||
other = "Tabela de conteúdo"
|
||||
58
i18n/tr.toml
Normal file
58
i18n/tr.toml
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[category]
|
||||
other = "Kategori"
|
||||
|
||||
[tag]
|
||||
other = "Etiket"
|
||||
|
||||
[reading_time]
|
||||
one = "Bir dakikalık okuma"
|
||||
other = "{{ .Count }}-dakikalık okuma"
|
||||
|
||||
[old_content_warning]
|
||||
one = "Uyarı: Bu gönderi en fazla {{ .Count }} gün eski. Bilgiler eski olabilir."
|
||||
other = "Uyarı: Bu gönderi en fazla {{ .Count }} gün eski. Bilgiler eski olabilir."
|
||||
|
||||
[page_not_found]
|
||||
other = "Sayfa bulunamadı"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "Üzgünüz, bu sayfa mevcut değil."
|
||||
|
||||
[head_back]
|
||||
other = "<a href=\"{{ . }}\">ana sayfaya</a> geri dönebilirsiniz."
|
||||
|
||||
[comments]
|
||||
other = "Yorumlar"
|
||||
|
||||
[send]
|
||||
other = "gönder"
|
||||
|
||||
[read_more]
|
||||
other = "Devamını oku"
|
||||
|
||||
[name]
|
||||
other = "Isim"
|
||||
|
||||
[email]
|
||||
other = "e-posta"
|
||||
|
||||
[message]
|
||||
other = "Mesaj"
|
||||
|
||||
[warning]
|
||||
other = "Uyarı"
|
||||
|
||||
[info]
|
||||
other = "Bilgi"
|
||||
|
||||
[update]
|
||||
other = "Güncelleme"
|
||||
|
||||
[series_posts]
|
||||
other = "Bu serideki gönderiler"
|
||||
|
||||
[related_posts]
|
||||
other = "Benzer gönderiler"
|
||||
|
||||
[toc]
|
||||
other = "İçindekiler tablosu"
|
||||
54
i18n/zh-cn.toml
Executable file
54
i18n/zh-cn.toml
Executable file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "分类"
|
||||
|
||||
[tag]
|
||||
other = "标签"
|
||||
|
||||
[reading_time]
|
||||
one = "阅读时间 1 分钟"
|
||||
other = "阅读时间 {{ .Count }} 分钟"
|
||||
|
||||
[page_not_found]
|
||||
other = "页面未找到"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "抱歉,此页面不存在"
|
||||
|
||||
[head_back]
|
||||
other = "返回<a href=\"{{ . }}\">首页</a>."
|
||||
|
||||
[comments]
|
||||
other = "评论"
|
||||
|
||||
[send]
|
||||
other = "发送"
|
||||
|
||||
[read_more]
|
||||
other = "继续阅读"
|
||||
|
||||
[name]
|
||||
other = "姓名"
|
||||
|
||||
[email]
|
||||
other = "电子邮件"
|
||||
|
||||
[message]
|
||||
other = "信息"
|
||||
|
||||
[warning]
|
||||
other = "警告"
|
||||
|
||||
[info]
|
||||
other = "关于"
|
||||
|
||||
[update]
|
||||
other = "更新"
|
||||
|
||||
[series_posts]
|
||||
other = "这个系列的帖子"
|
||||
|
||||
[related_posts]
|
||||
other = "类似的帖子"
|
||||
|
||||
[toc]
|
||||
other = "目录"
|
||||
54
i18n/zh-tw.toml
Normal file
54
i18n/zh-tw.toml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[category]
|
||||
other = "分類"
|
||||
|
||||
[tag]
|
||||
other = "標籤"
|
||||
|
||||
[reading_time]
|
||||
one = "閱讀時間 1 分鐘"
|
||||
other = "閱讀時間 {{ .Count }} 分鐘"
|
||||
|
||||
[page_not_found]
|
||||
other = "找不到頁面"
|
||||
|
||||
[page_does_not_exist]
|
||||
other = "此頁面不存在"
|
||||
|
||||
[head_back]
|
||||
other = "返回 <a href=\"{{ . }}\">首頁</a>."
|
||||
|
||||
[comments]
|
||||
other = "註解"
|
||||
|
||||
[send]
|
||||
other = "發送"
|
||||
|
||||
[read_more]
|
||||
other = "繼續閱讀"
|
||||
|
||||
[name]
|
||||
other = "名稱"
|
||||
|
||||
[email]
|
||||
other = "電子郵件"
|
||||
|
||||
[message]
|
||||
other = "消息"
|
||||
|
||||
[warning]
|
||||
other = "警告"
|
||||
|
||||
[info]
|
||||
other = "關於"
|
||||
|
||||
[update]
|
||||
other = "關於"
|
||||
|
||||
[series_posts]
|
||||
other = "這個系列的帖子"
|
||||
|
||||
[related_posts]
|
||||
other = "類似的帖子"
|
||||
|
||||
[toc]
|
||||
other = "目錄"
|
||||
BIN
images/lighthouse.png
Normal file
BIN
images/lighthouse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
images/screenshot.png
Normal file
BIN
images/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
BIN
images/screenshot_dark.png
Normal file
BIN
images/screenshot_dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 180 KiB |
BIN
images/tn.png
Normal file
BIN
images/tn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 103 KiB |
8
layouts/404.html
Normal file
8
layouts/404.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{{ define "main" }}
|
||||
<div class="page_404">
|
||||
<h1>404</h1>
|
||||
<h2>{{ i18n "page_not_found" }}</h2>
|
||||
<p>{{ i18n "page_does_not_exist" }}</p>
|
||||
<p>{{ i18n "head_back" .Site.BaseURL | safeHTML }}</p>
|
||||
</div>
|
||||
{{ end }}
|
||||
4
layouts/_default/_markup/render-codeblock-mermaid.html
Normal file
4
layouts/_default/_markup/render-codeblock-mermaid.html
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<div class="mermaid">
|
||||
{{- .Inner | safeHTML }}
|
||||
</div>
|
||||
{{ .Page.Store.Set "hasMermaid" true }}
|
||||
9
layouts/_default/_markup/render-passthrough.html
Normal file
9
layouts/_default/_markup/render-passthrough.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{{- $opts := dict "output" "htmlAndMathml" "displayMode" (eq .Type "block") }}
|
||||
{{- with try (transform.ToMath .Inner $opts) }}
|
||||
{{- with .Err }}
|
||||
{{ errorf "Unable to render mathematical markup to HTML using the transform.ToMath function. The KaTeX display engine threw the following error: %s: see %s." . $.Position }}
|
||||
{{- else }}
|
||||
{{- .Value }}
|
||||
{{- $.Page.Store.Set "hasMath" true }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
42
layouts/_default/baseof.html
Normal file
42
layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<!doctype html>
|
||||
<html
|
||||
dir="{{ .Site.Language.LanguageDirection | default "ltr" }}"
|
||||
lang="{{- site.Language.Lang -}}"
|
||||
data-theme="{{- .Site.Params.displayMode -}}"
|
||||
{{ if eq .Site.Params.displayMode "dark" }}
|
||||
class="html theme--dark"
|
||||
{{ else }}
|
||||
class="html theme--light"
|
||||
{{ end }}
|
||||
>
|
||||
{{- partial "head.html" . -}}
|
||||
<body class="body">
|
||||
<div class="wrapper">
|
||||
<aside
|
||||
{{ if (and (or (eq .Site.Params.hidesidebar true) (eq .Params.hidesidebar true)) (not .IsHome)) }}
|
||||
class="wrapper__sidebar wrapper__sidebar--hidden"
|
||||
{{ else }}
|
||||
class="wrapper__sidebar"
|
||||
{{ end }}
|
||||
>
|
||||
{{- partial "sidebar.html" . -}}
|
||||
</aside>
|
||||
<main
|
||||
{{ if (and (or (eq .Site.Params.hidesidebar true) (eq .Params.hidesidebar true)) (not .IsHome)) }}
|
||||
class="wrapper__main wrapper__main--fullscreen"
|
||||
{{ else }}
|
||||
class="wrapper__main"
|
||||
{{ end }}
|
||||
>
|
||||
<header class="header">{{ partial "navbar.html" . }}</header>
|
||||
{{- block "main" . }}{{- end }}
|
||||
</main>
|
||||
</div>
|
||||
|
||||
{{- partial "footer.html" (dict "context" . "footerClassModifier" "base") -}}
|
||||
|
||||
{{- if (eq .Site.Params.simpleAnalytics.enable true) -}}
|
||||
{{- partial "analytics/simpleanalytics.html" . -}}
|
||||
{{- end -}}
|
||||
</body>
|
||||
</html>
|
||||
42
layouts/_default/list.html
Normal file
42
layouts/_default/list.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
{{ define "main" }}
|
||||
<div
|
||||
class="archive {{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
{{ range .Data.Pages.GroupByDate "2006" }}
|
||||
<div class="archive__heading">{{ .Key }}</div>
|
||||
{{ range .Pages }}
|
||||
<ul class="archive__list">
|
||||
<li class="archive__list-item">
|
||||
{{ if (eq .Site.Params.disableArchiveTitleStyling true) }}
|
||||
<a class="archive__list-title" href="{{ .RelPermalink }}" title="{{ .Title }}">{{ .Title }}</a>
|
||||
{{ else }}
|
||||
<a class="archive__list-title" href="{{ .RelPermalink }}" title="{{ .Title }}">{{ upper .Title }}</a>
|
||||
{{ end }}
|
||||
<div class="archive__list-date">
|
||||
{{ if isset .Site.Params "listdateformat" }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format .Site.Params.listDateFormat .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format .Site.Params.listDateFormat }}
|
||||
{{ end }}
|
||||
|
||||
{{ else }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format "Jan 2" .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format "Jan 2" }}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
45
layouts/_default/rss.xml
Normal file
45
layouts/_default/rss.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{{- $pctx := . -}}
|
||||
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
|
||||
{{- $pages := slice -}}
|
||||
{{- if or $.IsHome $.IsSection -}}
|
||||
{{- $pages = $pctx.RegularPages -}}
|
||||
{{- else -}}
|
||||
{{- $pages = $pctx.Pages -}}
|
||||
{{- end -}}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit -}}
|
||||
{{- if ge $limit 1 -}}
|
||||
{{- $pages = $pages | first $limit -}}
|
||||
{{- end -}}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
|
||||
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
|
||||
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
|
||||
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
|
||||
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" -}}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end -}}
|
||||
{{ range $pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
{{ if eq .Site.Params.rssFullContent true }}
|
||||
<description>{{ .Content | html }}</description>
|
||||
{{ else if .Description }}
|
||||
<description>{{ .Description }}</description>
|
||||
{{ else }}
|
||||
<description>{{ .Summary | html }}</description>
|
||||
{{ end }}
|
||||
</item>
|
||||
{{ end }}
|
||||
</channel>
|
||||
</rss>
|
||||
117
layouts/_default/single.html
Normal file
117
layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
{{ define "main" }}
|
||||
<div
|
||||
class="post {{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
{{ if .Params.thumbnail }}
|
||||
<div class="post__thumbnail-wrapper">
|
||||
<img class="post__thumbnail" src="{{ .Params.thumbnail | relURL }}" alt="Thumbnail image" />
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="post__content">
|
||||
{{ if (eq .Site.Params.disableTitleCapitalization true) }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ else }}
|
||||
<h1>{{ title .Title }}</h1>
|
||||
{{ end }}
|
||||
{{ if or (eq .Type "post") (eq .Type .Site.Params.postSectionName) }}
|
||||
<ul class="post__meta">
|
||||
<li class="post__meta-item">
|
||||
<em class="fas fa-calendar-day post__meta-icon"></em>
|
||||
<span class="post__meta-text"
|
||||
>{{ if isset .Site.Params "singledateformat" }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format .Site.Params.singleDateFormat .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format .Site.Params.singleDateFormat }}
|
||||
{{ end }}
|
||||
|
||||
{{ else }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format "Mon, Jan 2, 2006" .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format "Mon, Jan 2, 2006" }}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
</span>
|
||||
</li>
|
||||
<li class="post__meta-item">
|
||||
<em class="fas fa-stopwatch post__meta-icon"></em>
|
||||
<span class="post__meta-text">{{ i18n "reading_time" .ReadingTime }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
{{ end }}
|
||||
|
||||
{{- partial "expirationnote.html" . -}}
|
||||
|
||||
{{- if (eq .Params.toc true) -}}
|
||||
{{- partial "toc.html" . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ .Content }}
|
||||
|
||||
{{- if isset .Params "series" -}}
|
||||
{{- partial "series.html" . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if (eq .Site.Params.relatedPosts true) -}}
|
||||
{{- partial "related.html" . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if (eq .Params.contact true) -}}
|
||||
{{- partial "contact.html" . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if (eq .Site.Params.mermaid.enable true) -}}
|
||||
{{- partial "mermaid.html" . -}}
|
||||
{{- end -}}
|
||||
</div>
|
||||
<div class="post__footer">
|
||||
{{ with .Page.Params.Categories }}
|
||||
{{ partial "taxonomy/categories.html" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Page.Params.Tags }}
|
||||
{{ partial "taxonomy/tags.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{ if and (or (eq .Type "post") (eq .Type .Site.Params.postSectionName)) (ne .Page.Params.disableComments true) }}
|
||||
{{- if .Site.Config.Services.Disqus.Shortname -}}
|
||||
<div id="comment">
|
||||
<h2>{{ i18n "comments" }}</h2>
|
||||
{{ template "_internal/disqus.html" . }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- if .Site.Params.utterances.repo -}}
|
||||
<div id="comment">
|
||||
<h2>{{ i18n "comments" }}</h2>
|
||||
{{ partial "comments/utterances.html" . }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- if .Site.Params.giscus.repo -}}
|
||||
<div id="comment">
|
||||
<h2>{{ i18n "comments" }}</h2>
|
||||
{{ partial "comments/giscus.html" . }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- if .Site.Params.CommentoURL -}}
|
||||
<div id="comment">
|
||||
<h2>{{ i18n "comments" }}</h2>
|
||||
{{ partial "comments/commento.html" . }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- if .Site.Params.gitalk.repo -}}
|
||||
<div id="comment">
|
||||
<h2>{{ i18n "comments" }}</h2>
|
||||
{{ partial "comments/gitalk.html" . }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
101
layouts/index.html
Normal file
101
layouts/index.html
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
{{ define "main" }}
|
||||
<div
|
||||
class="post {{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
<div class="post__content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
|
||||
<!-- (Optional) Home
|
||||
-- on top of `mainSections` content (aka posts) ;
|
||||
-- as declared in content/_index.md
|
||||
|
||||
One can set `mainSections = [""]` and have the content/_index.md specified here
|
||||
-->
|
||||
</div>
|
||||
|
||||
{{ if .Params.mainSectionsTitle }}
|
||||
<div
|
||||
class="post {{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
<div class="post__content">
|
||||
<h2>{{ .Params.mainSectionsTitle }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
|
||||
{{ range $paginator.Pages }}
|
||||
<div
|
||||
class="post {{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
{{ if .Params.thumbnail }}
|
||||
<div class="post__thumbnail-wrapper">
|
||||
<a href="{{ .RelPermalink }}">
|
||||
<img class="post__thumbnail" src="{{ .Params.thumbnail | relURL }}" alt="Thumbnail image" loading="lazy" />
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="post__content">
|
||||
{{ if (eq .Site.Params.disableTitleCapitalization true) }}
|
||||
<h3><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
|
||||
{{ else }}
|
||||
<h3><a href="{{ .RelPermalink }}">{{ upper .Title }}</a></h3>
|
||||
{{ end }}
|
||||
{{ if .Site.Params.fullPostContent }}
|
||||
<p>{{ .Content | safeHTML | plainify }}</p>
|
||||
{{ else }}
|
||||
<p>{{ .Summary | safeHTML | plainify }}</p>
|
||||
{{ end }}
|
||||
<!-- add read more -->
|
||||
{{- if and (.Truncated) (.Site.Params.readMore) -}}
|
||||
<a href="{{ .RelPermalink }}">{{ i18n "read_more" }}</a>
|
||||
{{- end -}}
|
||||
</div>
|
||||
|
||||
<!-- -->
|
||||
<div class="post__footer">
|
||||
<em class="fas fa-calendar-day"></em>
|
||||
<span class="post__footer-date"
|
||||
>{{ if isset .Site.Params "indexdateformat" }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format .Site.Params.indexDateFormat .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format .Site.Params.indexDateFormat }}
|
||||
{{ end }}
|
||||
|
||||
{{ else }}
|
||||
{{ if .Site.Params.localizedDates }}
|
||||
{{ time.Format "Mon, Jan 2, 2006" .Date }}
|
||||
{{ else }}
|
||||
{{ .Date.Format "Mon, Jan 2, 2006" }}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}</span
|
||||
>
|
||||
{{ with .Page.Params.Categories }}
|
||||
{{ partial "taxonomy/categories.html" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Page.Params.Tags }}
|
||||
{{ partial "taxonomy/tags.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="pagination">
|
||||
{{ partial "pagination.html" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
17
layouts/partials/analytics/matomo.html
Normal file
17
layouts/partials/analytics/matomo.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!-- Piwik/Matomo -->
|
||||
{{ with .Site.Params.Matomo }}
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//{{ .instance }}/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '{{ .siteId }}']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
{{ end }}
|
||||
22
layouts/partials/analytics/meta.html
Normal file
22
layouts/partials/analytics/meta.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<!-- Meta -->
|
||||
{{ with .Site.Params.meta }}
|
||||
<script>
|
||||
!function(f,b,e,v,n,t,s)
|
||||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||||
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
||||
'https://connect.facebook.net/en_US/fbevents.js');
|
||||
fbq('init', '{{ .pixelId }}');
|
||||
fbq('track', 'PageView');
|
||||
</script>
|
||||
<noscript
|
||||
><img
|
||||
height="1"
|
||||
width="1"
|
||||
style="display:none"
|
||||
src="https://www.facebook.com/tr?id={{ .pixelId }}&ev=PageView&noscript=1"
|
||||
/></noscript>
|
||||
{{ end }}
|
||||
6
layouts/partials/analytics/plausible.html
Normal file
6
layouts/partials/analytics/plausible.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<script
|
||||
async
|
||||
defer
|
||||
data-domain="{{ .Site.Params.plausibleAnalytics.domain }}"
|
||||
src="{{ .Site.Params.plausibleAnalytics.serverURL | default "https://plausible.io" }}/js/plausible.js"
|
||||
></script>
|
||||
7
layouts/partials/analytics/simpleanalytics.html
Normal file
7
layouts/partials/analytics/simpleanalytics.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{{ with .Site.Params.simpleAnalytics.customUrl }}
|
||||
<script async defer src="{{ . | relURL }}/latest.js"></script>
|
||||
<noscript><img src="{{ . | relURL }}/noscript.gif" alt="" /></noscript>
|
||||
{{ else }}
|
||||
<script async defer src=" https://scripts.simpleanalyticscdn.com/latest.js"></script>
|
||||
<noscript><img src="https://queue.simpleanalyticscdn.com/noscript.gif" alt="" /></noscript>
|
||||
{{ end }}
|
||||
6
layouts/partials/analytics/umami.html
Normal file
6
layouts/partials/analytics/umami.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<script
|
||||
async
|
||||
defer
|
||||
src="https://{{ .Site.Params.umami.serverURL }}/{{ .Site.Params.umami.trackerScriptName | default "umami.js" }}"
|
||||
data-website-id="{{ .Site.Params.umami.id }}"
|
||||
></script>
|
||||
3
layouts/partials/comments/commento.html
Normal file
3
layouts/partials/comments/commento.html
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<div id="commento"></div>
|
||||
<script defer src="{{ .Site.Params.CommentoURL }}"></script>
|
||||
<noscript>Please enable JavaScript to load the comments.</noscript>
|
||||
45
layouts/partials/comments/giscus.html
Normal file
45
layouts/partials/comments/giscus.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<script>
|
||||
const getStoredTheme = () => localStorage.getItem("theme") === "dark" ? "dark" : "light";
|
||||
|
||||
const setGiscusTheme = () => {
|
||||
const sendMessage = (message) => {
|
||||
const iframe = document.querySelector('iframe.giscus-frame');
|
||||
if (iframe) {
|
||||
iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');
|
||||
}
|
||||
}
|
||||
sendMessage({ setConfig: { theme: getStoredTheme() } })
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const giscusAttributes = {
|
||||
"src": "https://giscus.app/client.js",
|
||||
"data-repo": "{{ .Site.Params.giscus.repo }}",
|
||||
"data-repo-id": "{{ .Site.Params.giscus.repoID }}",
|
||||
"data-category": "{{ .Site.Params.giscus.category }}",
|
||||
"data-category-id": "{{ .Site.Params.giscus.categoryID }}",
|
||||
"data-mapping": "{{ .Site.Params.giscus.mapping | default "pathname" }}",
|
||||
"data-strict": "{{ .Site.Params.giscus.strict | default "0" }}",
|
||||
"data-reactions-enabled": "{{ .Site.Params.giscus.reactionsEnabled | default "1" }}",
|
||||
"data-emit-metadata": "{{ .Site.Params.giscus.emitMetadata | default "0" }}",
|
||||
"data-input-position": "{{ .Site.Params.giscus.inputPosition | default "bottom" }}",
|
||||
"data-theme": getStoredTheme(),
|
||||
"data-lang": "{{ .Site.Params.giscus.lang | default "en" }}",
|
||||
"data-loading": "{{ .Site.Params.giscus.loading | default "lazy" }}",
|
||||
"crossorigin": "anonymous",
|
||||
"async": "",
|
||||
};
|
||||
|
||||
// Dynamically create script tag.
|
||||
const giscusScript = document.createElement("script");
|
||||
Object.entries(giscusAttributes).forEach(
|
||||
([key, value]) => giscusScript.setAttribute(key, value));
|
||||
document.getElementById("comment").appendChild(giscusScript);
|
||||
|
||||
// Update giscus theme when the theme switcher is clicked.
|
||||
const themeSwitcher = document.querySelector(".themeswitch");
|
||||
if (themeSwitcher) {
|
||||
themeSwitcher.addEventListener("click", setGiscusTheme);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
33
layouts/partials/comments/gitalk.html
Normal file
33
layouts/partials/comments/gitalk.html
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<div id="gitalk-container"></div>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/gitalk/1.7.2/gitalk.min.css"
|
||||
integrity="sha512-0hsIlRjJbiUWaKMhXXNDmjWI2qPvUlhNBLHMhqeF5jIma+bedec27N5FoT2JEeHz5TUmOGCsm1Y89EsX/P0wOg=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"
|
||||
/>
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/gitalk/1.7.2/gitalk.min.js"
|
||||
integrity="sha512-EcTCcXV46teiNwe0VcnM5A038tcY+BaQYO4nW6Gh2i7v4/HjBVg7xx3+JBLl9WofDds//INJAiEGAtdgr8PWyA=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"
|
||||
></script>
|
||||
<script>
|
||||
const gitalk = new Gitalk({
|
||||
clientID: '{{ .Site.Params.Gitalk.clientID }}',
|
||||
clientSecret: '{{ .Site.Params.Gitalk.clientSecret }}',
|
||||
repo: '{{ .Site.Params.Gitalk.repo }}',
|
||||
owner: '{{ .Site.Params.Gitalk.owner }}',
|
||||
admin: ['{{ .Site.Params.Gitalk.admin }}'],
|
||||
id: location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false, // Facebook-like distraction free mode
|
||||
});
|
||||
(function () {
|
||||
if (['localhost', '127.0.0.1'].indexOf(window.location.hostname) != -1) {
|
||||
document.getElementById('gitalk-container').innerHTML =
|
||||
'Gitalk comments not available by default when the website is previewed locally.';
|
||||
return;
|
||||
}
|
||||
gitalk.render('gitalk-container');
|
||||
})();
|
||||
</script>
|
||||
11
layouts/partials/comments/utterances.html
Normal file
11
layouts/partials/comments/utterances.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<script
|
||||
src="https://utteranc.es/client.js"
|
||||
repo="{{ .Site.Params.utterances.repo }}"
|
||||
issue-term="{{ .Site.Params.utterances.issueTerm }}"
|
||||
theme="{{ .Site.Params.utterances.theme }}"
|
||||
{{ with .Site.Params.utterances.label }}
|
||||
label="{{ . }}"
|
||||
{{ end }}
|
||||
crossorigin="anonymous"
|
||||
async
|
||||
></script>
|
||||
28
layouts/partials/contact.html
Normal file
28
layouts/partials/contact.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
<div class="contact-form">
|
||||
<form class="form-style" method="POST" action="{{ .Site.Params.contactFormAction }}" data-toggle="validator">
|
||||
<ul>
|
||||
<li>
|
||||
<label for="username">{{ i18n "name" }}</label>
|
||||
<input class="field-style field-full" type="text" name="username" id="username" placeholder="{{ i18n "name" }}" required>
|
||||
</li>
|
||||
<li>
|
||||
<label for="email">{{ i18n "email" }}</label>
|
||||
<input class="field-style field-full" type="email" id="email" name="email" placeholder="{{i18n "email" }}" required>
|
||||
</li>
|
||||
<li>
|
||||
<label for="message">{{ i18n "message" }}</label>
|
||||
<textarea class="field-style" name="message" id="message" rows="6" placeholder="{{ i18n "message" }}"></textarea>
|
||||
</li>
|
||||
<li>
|
||||
<div class="g-recaptcha" data-sitekey="{{ .Site.Params.contactFormReCaptcha }}"></div>
|
||||
</li>
|
||||
<li>
|
||||
<input class="field-style" type="submit" value="{{ i18n "send" }}" />
|
||||
</li>
|
||||
<li>
|
||||
<input type="text" name="_gotcha" style="display:none" />
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
20
layouts/partials/expirationnote.html
Normal file
20
layouts/partials/expirationnote.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{{- if (eq .Site.Params.oldContentWarning true) -}}
|
||||
{{- $ageDays := div (sub now.Unix .Date.Unix) 86400 -}}
|
||||
{{- $duration := .Site.Params.oldContentDuration -}}
|
||||
|
||||
{{- if and (ne .Type "post") (ne .Type .Site.Params.postSectionName) -}}
|
||||
{{- $duration = 0 -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if (isset .Params "old_content_duration") -}}
|
||||
{{- $duration = .Params.old_content_duration -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if and (gt $ageDays $duration) (ne $duration 0) -}}
|
||||
<div class="alert">
|
||||
<div class="alert__indicator">!</div>
|
||||
{{ i18n "old_content_warning" (dict "Count" $duration) }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
|
||||
{{- end -}}
|
||||
35
layouts/partials/footer.html
Normal file
35
layouts/partials/footer.html
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<footer class="footer footer__{{ .footerClassModifier }}">
|
||||
<ul class="footer__list">
|
||||
<li class="footer__item">
|
||||
©
|
||||
{{ if isset .context.Site.Params "copyright" }}
|
||||
{{ replace .context.Site.Params.copyright "{{ YEAR }}" (now.Format "2006") | markdownify }}
|
||||
{{ else }}
|
||||
{{ .context.Site.Params.author }}
|
||||
{{ now.Format "2006" }}
|
||||
{{ end }}
|
||||
- {{ .context.Site.Params.hosting }}
|
||||
</li>
|
||||
{{ range .context.Site.Menus.footer }}
|
||||
<li class="footer__item">
|
||||
<a
|
||||
class="link"
|
||||
href="{{ .URL }}"
|
||||
{{ if strings.HasPrefix .URL "http" }}
|
||||
target="_blank" rel="noopener noreferrer"
|
||||
{{ end }}
|
||||
title="{{ .Title }}"
|
||||
>
|
||||
{{ .Name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</footer>
|
||||
{{- partial "medium-zoom.html" .context -}}
|
||||
{{- if (hasPrefix .context.Site.Config.Services.GoogleAnalytics.ID "G-") -}}
|
||||
{{- template "_internal/google_analytics.html" .context -}}
|
||||
{{- end -}}
|
||||
{{- if and (hugo.IsProduction) (.context.Site.Params.gtagId) -}}
|
||||
{{ partial "google-analytics-gtag-async.html" .context }}
|
||||
{{- end -}}
|
||||
10
layouts/partials/google-analytics-gtag-async.html
Normal file
10
layouts/partials/google-analytics-gtag-async.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ .Site.Params.gtagId }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{ .Site.Params.gtagId }}');
|
||||
</script>
|
||||
255
layouts/partials/head.html
Normal file
255
layouts/partials/head.html
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>
|
||||
{{ if (eq .Site.Params.reversepagetitle true) }}
|
||||
{{ with .Title }}
|
||||
{{ . }} |
|
||||
{{ end }}
|
||||
{{- .Site.Params.author -}}
|
||||
{{ else }}
|
||||
{{- .Site.Params.author -}}{{ with .Title }}
|
||||
|
|
||||
{{ . }}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
|
||||
</title>
|
||||
|
||||
<!-- Meta -->
|
||||
{{- hugo.Generator -}}
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover" />
|
||||
<meta name="author" content="{{ .Site.Params.author }}" />
|
||||
<meta
|
||||
name="description"
|
||||
content="{{ if .Params.description }}
|
||||
{{- .Params.description -}}
|
||||
{{ else }}
|
||||
{{- .Site.Params.description -}}
|
||||
{{ end }}"
|
||||
/>
|
||||
{{ if .Params.redirectUrl }}
|
||||
<meta http-equiv="refresh" content="1; url={{ .Params.redirectUrl }}" />
|
||||
{{ end }}
|
||||
{{- if .Site.Params.googleSiteVerify }}
|
||||
<meta name="google-site-verification" content="{{ .Site.Params.googleSiteVerify }}" />
|
||||
{{- end -}}
|
||||
|
||||
|
||||
<!-- CSS -->
|
||||
{{ $contentRatio := or site.Params.contentratio 0.6 -}}
|
||||
{{ $languageDirection := or site.Language.LanguageDirection "ltr" -}}
|
||||
{{ $vars := dict
|
||||
"text_direction" $languageDirection
|
||||
"content_ratio" (printf "%f%%" (mul $contentRatio 100))
|
||||
"sidebar_ratio" (printf "%f%%" (mul (sub 1.0 $contentRatio) 100))
|
||||
"content_ratio_wide" (printf "%f%%" (mul 0.8 (mul $contentRatio 100)))
|
||||
"sidebar_ratio_wide" (printf "%f%%" (mul 0.8 (mul (sub 1.0 $contentRatio) 100)))
|
||||
-}}
|
||||
{{ $options := dict
|
||||
"transpiler" "dartsass"
|
||||
"vars" $vars
|
||||
"targetPath" (printf "css/anatole%s.css" (cond (eq site.Language.LanguageDirection "") "" (printf ".%s" site.Language.LanguageDirection)))
|
||||
-}}
|
||||
{{ with resources.Get "scss/main.scss" -}}
|
||||
{{ if hugo.IsProduction -}}
|
||||
{{ with . | toCSS $options | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" />
|
||||
{{ end -}}
|
||||
{{ else -}}
|
||||
{{ with . | toCSS $options }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" />
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $markupHighlightStyle := resources.Get "css/markupHighlight.css" | resources.Minify | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $markupHighlightStyle.RelPermalink }}"
|
||||
integrity="{{ $markupHighlightStyle.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{ range .Site.Params.customCss }}
|
||||
{{ $minstyles := resources.Get . }}
|
||||
{{ $styles := $minstyles | resources.Minify | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $styles.RelPermalink }}"
|
||||
integrity="{{ $styles.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
media="screen"
|
||||
/>
|
||||
{{ end }}
|
||||
{{ $style := resources.Get "fontawesome/css/fontawesome.min.css" | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $style.RelPermalink }}"
|
||||
integrity="{{ $style.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{ $style := resources.Get "fontawesome/css/solid.min.css" | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $style.RelPermalink }}"
|
||||
integrity="{{ $style.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{ $style := resources.Get "fontawesome/css/regular.min.css" | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $style.RelPermalink }}"
|
||||
integrity="{{ $style.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{ $style := resources.Get "fontawesome/css/brands.min.css" | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $style.RelPermalink }}"
|
||||
integrity="{{ $style.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{ if .Params.redirectUrl }}
|
||||
{{ $style := resources.Get "css/spinner.css" | resources.Minify | resources.Fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ $style.RelPermalink }}"
|
||||
integrity="{{ $style.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
type="text/css"
|
||||
/>
|
||||
{{- end -}}
|
||||
{{ if .Site.Params.googleFonts }}
|
||||
{{ $baseUrl := "https://fonts.googleapis.com/css2?family=" }}
|
||||
{{ $fontParam := delimit .Site.Params.googleFonts "&family=" }}
|
||||
{{ $url := printf "%s" "&display=swap" | printf "%s%s" $fontParam | printf "%s%s" $baseUrl | printf "%s" }}
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="{{ $url }}" rel="stylesheet" />
|
||||
{{- end -}}
|
||||
|
||||
|
||||
<!-- Favicons -->
|
||||
<link rel="shortcut icon" href="{{ .Site.Params.favicon | relURL }}favicon.ico" type="image/x-icon" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ .Site.Params.favicon | relURL }}apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ .Site.Params.favicon | relURL }}favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ .Site.Params.favicon | relURL }}favicon-16x16.png" />
|
||||
|
||||
<link rel="canonical" href="{{ .Permalink }}" />
|
||||
<!-- License -->
|
||||
{{- with .Site.Params.license -}}
|
||||
<link rel="license" href="{{ . }}" />
|
||||
{{- end -}}
|
||||
|
||||
|
||||
<!-- RSS -->
|
||||
{{ with .OutputFormats.Get "rss" -}}
|
||||
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .RelPermalink $.Site.Title | safeHTML }}
|
||||
{{ end -}}
|
||||
|
||||
|
||||
<!-- JavaScript -->
|
||||
{{ $anatoleHeader := resources.Get "js/anatole-header.js" }}
|
||||
{{ $secureHeaderJS := $anatoleHeader | resources.Minify | resources.Fingerprint }}
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="{{ $secureHeaderJS.RelPermalink }}"
|
||||
integrity="{{ $secureHeaderJS.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
|
||||
{{ if not .Site.Params.disableThemeSwitcher }}
|
||||
{{ $anatoleThemeSwitcher := resources.Get "js/anatole-theme-switcher.js" }}
|
||||
{{ $secureThemeSwitcherJS := $anatoleThemeSwitcher | resources.Minify | resources.Fingerprint }}
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="{{ $secureThemeSwitcherJS.RelPermalink }}"
|
||||
integrity="{{ $secureThemeSwitcherJS.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
{{ end }}
|
||||
|
||||
{{- $js := "" -}}
|
||||
{{- range .Site.Params.customJs -}}
|
||||
{{- if or (in . "http://") (in . "https://") -}}
|
||||
<script src="{{ . | relURL }}"></script>
|
||||
{{- else -}}
|
||||
{{- $customJS := resources.Get . -}}
|
||||
{{- if $customJS -}}
|
||||
{{- if eq $js "" -}}
|
||||
{{- $js = $customJS -}}
|
||||
{{- else -}}
|
||||
{{- $js = slice $js $customJS | resources.Concat "js/custom.js" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- end -}}
|
||||
|
||||
{{- end -}}
|
||||
|
||||
{{- end -}}
|
||||
|
||||
{{- if ne $js "" -}}
|
||||
{{- $secureJS := $js | resources.Minify | resources.Fingerprint -}}
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="{{ $secureJS.RelPermalink }}"
|
||||
integrity="{{ $secureJS.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
{{- end -}}
|
||||
|
||||
{{ if and hugo.IsProduction .Site.Params.plausibleAnalytics .Site.Params.plausibleAnalytics.domain }}
|
||||
{{- partial "analytics/plausible" . -}}
|
||||
{{ end }}
|
||||
|
||||
{{ if and hugo.IsProduction .Site.Params.umami.serverURL .Site.Params.umami.id }}
|
||||
{{- partial "analytics/umami" . -}}
|
||||
{{ end }}
|
||||
|
||||
{{ if and hugo.IsProduction .Site.Params.Matomo.instance .Site.Params.Matomo.siteId }}
|
||||
{{- partial "analytics/matomo" . -}}
|
||||
{{ end }}
|
||||
|
||||
{{ if and hugo.IsProduction .Site.Params.meta.pixelId }}
|
||||
{{- partial "analytics/meta.html" . -}}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Twitter Cards -->
|
||||
{{ template "_internal/twitter_cards.html" . }}
|
||||
|
||||
|
||||
<!-- Open Graph -->
|
||||
{{ template "_internal/opengraph.html" . }}
|
||||
|
||||
|
||||
<!-- Schema.org-->
|
||||
{{ partial "schema.html" . }}
|
||||
|
||||
|
||||
<!-- KaTeX-->
|
||||
{{ $noop := .WordCount }}
|
||||
{{ if .Page.Store.Get "hasMath" }}
|
||||
{{ $katex_css_url := printf "https://cdn.jsdelivr.net/npm/katex@latest/dist/katex%s.css" (cond hugo.IsProduction ".min" "") -}}
|
||||
{{ with try (resources.GetRemote $katex_css_url) -}}
|
||||
{{ with .Err -}}
|
||||
{{ errorf "Could not retrieve KaTeX css file from CDN. Reason: %s." . -}}
|
||||
{{ else with.Value -}}
|
||||
{{ with resources.Copy (printf "css/katex%s.css" (cond hugo.IsProduction ".min" "")) . }}
|
||||
{{ $secureCSS := . | resources.Fingerprint "sha512" -}}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{- .RelPermalink -}}"
|
||||
integrity="{{- $secureCSS.Data.Integrity -}}"
|
||||
crossorigin="anonymous"
|
||||
/>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
</head>
|
||||
11
layouts/partials/medium-zoom.html
Normal file
11
layouts/partials/medium-zoom.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{{ $enableMediumZoom := default true (.Site.Params.enableMediumZoom) }}
|
||||
{{- if eq $enableMediumZoom true -}}
|
||||
{{ $js := resources.Get "js/medium-zoom.js" }}
|
||||
{{ $secureJS := $js | resources.Minify | resources.Fingerprint }}
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="{{ $secureJS.RelPermalink }}"
|
||||
integrity="{{ $secureJS.Data.Integrity }}"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
{{- end -}}
|
||||
7
layouts/partials/mermaid.html
Normal file
7
layouts/partials/mermaid.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{{ if .Page.Store.Get "hasMermaid" }}
|
||||
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||
<script>
|
||||
const mermaidtheme = getStoredThemeStyle() === 'dark' ? 'dark' : 'base';
|
||||
mermaid.initialize({ startOnLoad: true, theme: mermaidtheme });
|
||||
</script>
|
||||
{{ end }}
|
||||
112
layouts/partials/navbar.html
Normal file
112
layouts/partials/navbar.html
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
<div
|
||||
class="{{ with .Site.Params.doNotLoadAnimations }}
|
||||
.
|
||||
{{ else }}
|
||||
animated fadeInDown
|
||||
{{ end }}"
|
||||
>
|
||||
<a role="button" class="navbar-burger" data-target="navMenu" aria-label="menu" aria-expanded="false">
|
||||
<span aria-hidden="true" class="navbar-burger__line"></span>
|
||||
<span aria-hidden="true" class="navbar-burger__line"></span>
|
||||
<span aria-hidden="true" class="navbar-burger__line"></span>
|
||||
</a>
|
||||
<nav class="nav">
|
||||
<ul class="nav__list" id="navMenu">
|
||||
{{ $url := .RelPermalink }}
|
||||
{{ range $menuId, $menuItem := .Site.Menus.main }}
|
||||
{{ $active := eq $url $menuItem.URL }}
|
||||
{{ if $menuItem.HasChildren }}
|
||||
|
||||
<li class="nav__list-item">
|
||||
<div class="optionswitch">
|
||||
<input class="optionswitch__picker" type="checkbox" id="{{ $menuId }}" hidden />
|
||||
|
||||
{{ $labelClass := "optionswitch__label" }}
|
||||
{{ range $menuItem.Children }}
|
||||
{{ if eq $url .URL }}
|
||||
{{ $labelClass = "optionswitch__label nav__link--active" }}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
|
||||
|
||||
<label class="{{ $labelClass }}" for="{{ $menuId }}"
|
||||
>{{ $menuItem.Name }} <i class="fa fa-angle-down" aria-hidden="true"></i
|
||||
></label>
|
||||
|
||||
<div class="optionswitch__triangle"></div>
|
||||
<ul class="optionswitch__list">
|
||||
{{ range $menuItem.Children }}
|
||||
<li class="optionswitch__list-item">
|
||||
{{ .Pre }}
|
||||
<a
|
||||
href="{{ .URL }}"
|
||||
{{ if strings.HasPrefix .URL "http" }}
|
||||
target="_blank" rel="noopener noreferrer"
|
||||
{{ end }}
|
||||
title="{{ .Title }}"
|
||||
>{{ .Name }}</a
|
||||
>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
{{ else }}
|
||||
<li class="nav__list-item">
|
||||
{{ .Pre }}
|
||||
<a
|
||||
{{ if $active }}
|
||||
class="nav__link--active"
|
||||
{{ end }}
|
||||
href="{{ .URL }}"
|
||||
{{ if strings.HasPrefix .URL "http" }}
|
||||
target="_blank" rel="noopener noreferrer"
|
||||
{{ end }}
|
||||
title="{{ .Title }}"
|
||||
>{{ $menuItem.Name }}</a
|
||||
>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
</ul>
|
||||
<ul class="nav__list nav__list--end">
|
||||
{{ if and .IsTranslated hugo.IsMultilingual }}
|
||||
<li class="nav__list-item">
|
||||
<div class="optionswitch">
|
||||
<input class="optionswitch__picker" type="checkbox" id="languagepicker" hidden />
|
||||
<label class="optionswitch__label" for="languagepicker"
|
||||
>{{ .Site.Language.LanguageName }} <i class="fa fa-angle-down" aria-hidden="true"></i
|
||||
></label>
|
||||
<div class="optionswitch__triangle"></div>
|
||||
<ul class="optionswitch__list">
|
||||
{{ range $.Translations }}
|
||||
<li class="optionswitch__list-item">
|
||||
<a href="{{ .RelPermalink }}" title="{{ .Language.LanguageName }}"
|
||||
><span
|
||||
{{ if eq . $.Site.Language }}
|
||||
class="active"
|
||||
{{ end }}
|
||||
aria-label="{{ i18n "ariaLanguage" }}{{ .Language.LanguageName }}"
|
||||
>{{ .Language.LanguageName }}</span
|
||||
>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ if not .Site.Params.disableThemeSwitcher }}
|
||||
<li class="nav__list-item">
|
||||
<div class="themeswitch">
|
||||
<a title="Switch Theme">
|
||||
<i class="fas fa-adjust fa-fw" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
45
layouts/partials/pagination.html
Normal file
45
layouts/partials/pagination.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{{ if gt .Paginator.TotalPages 1 }}
|
||||
<ul class="pagination__list">
|
||||
{{ $.Scratch.Set "hasPrevDots" false }}
|
||||
{{ $.Scratch.Set "hasNextDots" false }}
|
||||
{{ if .Paginator.HasPrev }}
|
||||
<li class="pagination__list-item">
|
||||
<a class="page-link" href="{{ .Paginator.Prev.URL }}">
|
||||
<i class="fa fa-angle-left" aria-label="Previous"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ range .Paginator.Pagers }}
|
||||
{{ if eq . $.Paginator }}
|
||||
<li class="pagination__list-item">
|
||||
<span class="page-link current">
|
||||
{{- .PageNumber -}}
|
||||
</span>
|
||||
</li>
|
||||
{{ else if or (or (eq . $.Paginator.First) (eq . $.Paginator.Prev)) (or (eq . $.Paginator.Next) (eq . $.Paginator.Last )) }}
|
||||
<li class="pagination__list-item">
|
||||
<a class="page-link" href="{{ .URL }}">
|
||||
{{- .PageNumber -}}
|
||||
</a>
|
||||
</li>
|
||||
{{ else }}
|
||||
{{ if and (not ($.Scratch.Get "hasPrevDots")) (lt .PageNumber $.Paginator.PageNumber) }}
|
||||
{{ $.Scratch.Set "hasPrevDots" true }}
|
||||
<span class="page-link dots">…</span>
|
||||
{{ else if and (not ($.Scratch.Get "hasNextDots")) (gt .PageNumber $.Paginator.PageNumber) }}
|
||||
{{ $.Scratch.Set "hasNextDots" true }}
|
||||
<span class="page-link dots">…</span>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
{{ if .Paginator.HasNext }}
|
||||
<li class="pagination__list-item">
|
||||
<a class="page-link" href="{{ .Paginator.Next.URL }}">
|
||||
<i class="fa fa-angle-right" aria-label="Next"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue