Compare commits

...

204 Commits
v7 ... master

Author SHA1 Message Date
Micah R Ledbetter 115a94122e
Add scrollbar-gutter: stable (#703) 2025-04-07 15:42:04 +02:00
sfavazza 8aa692f195
fix: correct hint shortcodes rendering in lists (#699)
Co-authored-by: Samuele Favazza <samuele.favazza@duagon.com>
2025-04-07 15:38:25 +02:00
gobai 44fa55ddde
fix: change article title from h2 to h1 in single.html (#694)
Signed-off-by: go-bai <599500688@qq.com>
2025-04-07 15:25:20 +02:00
Paweł Sobótka 95bef1b75f
i18n: Add Polish translations (#690)
This adds Polish (PL/🇵🇱) translations within i18n directory.
2025-04-07 15:17:44 +02:00
Vadim (vadcx) 6c86dcfdc6
Docs: Change tabs shortcode example to permit unsafe=false (#689)
The syntax of `{{% code %}}` only expects Markdown inside. That's why it
triggers unsafe warning, if used as a shortcode template.

Instead the only the top table shortcode should be used as
`{{< tabs >}}` to include the HTML, while the user may use only
`{{% tab "Name" %}}` inside and be happily restricted to Markdown.

https://gohugo.io/methods/page/rendershortcodes/#shortcode-notation
https://github.com/InfosecForActivistsTeam/infosec-activists/pull/45
2025-04-07 15:17:19 +02:00
Alex Shpak 645c868cec Hotfix: tabs: improve unique id serialization 2025-02-03 23:19:43 +01:00
ensag-dev fb701f6f7f
i18n: Create oc.yaml (#682) 2025-01-31 00:20:22 +01:00
Alex Shpak 4ebdff516a Add resources to gitignore 2025-01-31 00:10:01 +01:00
Alex Shpak fbb94a56b2 Remote resources folder, not needed for demo sites anymore 2025-01-31 00:09:43 +01:00
Alex Shpak 60f4c03b8b #672: Add tabs unique ID for nested tabs, uses .Ordinal by default 2025-01-30 22:03:07 +01:00
mvtango f889e52566
Three hugo deprecations (#664)
* as per deprecation note: ERROR deprecated: .Site.IsMultiLingual was deprecated in Hugo v0.124.0 and will be removed in Hugo 0.137.0. Use hugo.IsMultilingual instead.

* as per deprecation note: ERROR deprecated: .Site.IsMultiLingual was deprecated in Hugo v0.124.0 and will be removed in Hugo 0.137.0. Use hugo.IsMultilingual instead.

* deprecated: .Sites.First was deprecated in Hugo v0.127.0 and will be removed in a future release.

* as per deprecation note: ERROR deprecated: .Site.IsMultiLingual was deprecated in Hugo v0.124.0 and will be removed in Hugo 0.137.0. Use hugo.IsMultilingual instead.

* resources.ToCSS was deprecated in Hugo v0.128.0 and will be removed in a future release. Use css.Sass instead.

* ignore ressources from example site
2025-01-29 02:46:56 +01:00
Alex Shpak 7c78a39c53 Align spacings and colors in titles and buttons 2024-10-09 23:27:54 +02:00
Alex Shpak e4c062890b Switch to font-display: fallback to reduce flickering 2024-10-09 17:05:20 +02:00
Alex Shpak 2b7a0e87c3 Deprecate section shortcode 2024-10-08 15:50:46 +02:00
Alex Shpak f8a0e8976b Rewrite tabs shortcode to make them simpler 2024-10-08 15:49:39 +02:00
Alex Shpak 1bda9fb34d Introduce i18n shortcode to add translated strings to markdown pages 2024-10-08 13:57:33 +02:00
Alex Shpak 21e7727a0e Update generated styles 2024-10-04 15:35:43 +02:00
Alex Shpak a5fdf88017 let numbered plugin count nested headings 2024-10-04 15:35:02 +02:00
loikein 15c85acfcd
add number for mobile toc, fix order for nested titles (#555)
Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2024-10-04 15:32:07 +02:00
Alex Shpak d008a21049 Fix syntax in Katex markdown file 2024-10-04 13:41:30 +02:00
Alex Shpak 9cc0b0225d #422, add support for column ratios in shortcode 2024-10-04 13:36:14 +02:00
Alex Shpak 925dbd3b9f Breaking change: switch to '{{%' decorators in shortcodes to better support shortcode-in-shortcode 2024-10-04 11:29:44 +02:00
Alex Shpak 69886cc74b Update favicon, move to separate shortcode for customization 2024-10-04 10:59:28 +02:00
Alex Shpak e585c86a81 Update Roboto font and use optional swap 2024-10-03 13:59:55 +02:00
Alex Shpak 3f56e60b6d #414, Move commit and edit links to separate pertials to allow overwrites 2024-10-02 23:16:25 +02:00
Alex Shpak a424a062ca #489: use Rel or Permalink depending on if site is multihost 2024-10-02 16:34:48 +02:00
Alex Shpak 31662538df Remove deprecated bundle/leaf menu type 2024-10-02 16:14:53 +02:00
Alex Shpak 2f64607bc9 Update pos list styles, remove self link from post 2024-10-02 13:25:16 +02:00
Alex Shpak 35bf672b70 Use .InnerDeindent in inline shortcodes 2024-10-02 12:02:41 +02:00
Alex Shpak 2b7b9c3c79 #640: fix line number alignment in code block 2024-10-02 01:45:03 +02:00
anatawa12 657807f879
fix: hreflang for link rel=alternate uses site language code (#654) 2024-10-01 23:37:54 +02:00
Alex Shpak b655b0b7b7 Add horizontal spacing between buttons 2024-10-01 23:34:25 +02:00
Alex Shpak 55c4c45c74 Remove 'expand' shortcode, use 'details' instead 2024-10-01 23:28:57 +02:00
Alex Shpak 3f6dec2482 Bump KaTeX to 0.16.11 2024-10-01 22:50:27 +02:00
Alex Shpak e6d4fbc186 Upgarde mermaidjs to 11.2.1 2024-10-01 22:45:51 +02:00
FuadEfendi 94edf47a12
Fix for spaces being removed during "minify" build for "mermaid" snippet (#613)
"mindmap" style is not rendered correctly with "--minify"  because spaces are removed from final HTML
2024-10-01 22:24:24 +02:00
Rojax 8d56f3fe84
fix: Fixed edit page support for multilang books (#630) 2024-10-01 22:17:03 +02:00
Gram 460d44479b
Auto-generate ID for tabs (#649) 2024-10-01 22:14:16 +02:00
Alex Shpak b25c58878c Bump minimum version in readme to 0.134 2024-10-01 22:07:11 +02:00
Andreas Deininger e54cf3e6d1
Fix deprecation warnings, upgrade to hugo 0.134 (#653) 2024-10-01 21:52:34 +02:00
Michael Schmetter 3588e36948
Update README.md, fixing broken link (#655) 2024-10-01 21:51:36 +02:00
Daniël van de Giessen c19a0a60ff
Add Dutch translations (#631) 2024-09-02 15:03:12 +02:00
Leo Heitmann Ruiz 8e66fc7613
Fix link in README (#618) 2024-09-02 14:58:01 +02:00
Alex Shpak 7c26d9b8b7 Update minimum hugo version in README 2024-05-18 13:14:20 +02:00
Alex Shpak e104a11f42 #582, use time.Format for date formatting 2024-05-18 12:48:43 +02:00
Alex Shpak 90eab4a917 #591, hide search field if JS is not enabled 2024-05-18 12:44:13 +02:00
Alex Shpak ecbe879801 Set minimum hugo version to 0.124 2024-05-18 12:36:23 +02:00
Rajesh Duggal eff55ecd56
Change "config.toml" to "hugo.toml" in the README.md documentation (#596) 2024-05-18 12:32:29 +02:00
Eitan Adler 1c78b920b0
replace .Site.IsMultiLingual with hugo.IsMultilingual (#609)
# Problem

The warning
```
INFO  deprecated: .Site.IsMultiLingual was deprecated in Hugo v0.124.0
and will be removed in a future release. Use hugo.IsMultilingual
instead.``

shows up

# Solution

Follow the deprecation warning
2024-05-18 12:31:58 +02:00
wenbingzhang 1c42a96572
Replace flexsearch with fusejs (#600)
Co-authored-by: 张文兵 <wenbing@mgtv.com>
2024-05-18 12:29:55 +02:00
Essa Alshammri f8a0fc4e24
Add direction ltr to pre > code and highlight (#611)
* Add direction ltr to pre > code and highlight
* Add unicode-bidi: embed;
2024-04-13 11:19:59 +02:00
Leo Heitmann Ruiz 0baec34596
Use null alt text when icon is next to action (#610) 2024-04-13 11:18:14 +02:00
Leo Heitmann Ruiz 2dffe0bc7a
Make image path absolute (#593) 2024-03-11 14:12:18 +01:00
Leo Heitmann Ruiz da22a41f60
Update link to hugo themes (#590) 2024-03-11 14:11:32 +01:00
Alex Shpak a8b156250b #589, change hugo extended url 2024-03-11 13:42:39 +01:00
Alex Shpak a111041867 #583, fix katex and mermaid examples with raw html 2024-02-17 18:57:02 +01:00
Alex Shpak 01645fc56d #521: add canonical url to the header 2024-02-17 18:04:57 +01:00
Alex Shpak cba1eb611a Upgrade mermaidjs to 10.8.0 2024-02-17 17:36:33 +01:00
Andreas Deininger 5e15ddb4f4
Fix typos (#575) 2024-01-10 12:40:24 +01:00
Andreas Deininger 2d7ce27f77
Fix: make use of .Site.Params.BookFavicon (#576) 2024-01-10 12:39:18 +01:00
Alex Shpak 118997fa92 #524: Disable numbered plugin for non-article pages 2023-12-05 00:33:41 +01:00
李宗英 14e14f60ae
fix server worker is blocked (#565)
* fix server worker is blocked

* Also use relURL in manifest

---------

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2023-12-04 22:25:48 +01:00
Alex Shpak 3f1bcccbfb #543, Add summary param for section shortcode 2023-08-08 13:39:20 +02:00
auwsom e7155b473a
Themes dir correction and peaceiris deploy to GitHub Pages (#506)
* commit

* commit

* remove push to /public

---------

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2023-08-08 13:08:03 +02:00
Alex Shpak 16f6203f90 #455, add BookFavicon parameter 2023-08-08 12:40:46 +02:00
nobu1308 1cebd589f6
Update meta theme-color in html-head.html (#527)
theme-color that works in both light and dark mode
2023-08-08 12:10:07 +02:00
Miguel Pimentel 36a7e32815
Update es.yaml (#547)
Added translation for 'Expand'.
Should be 'Expandir' instead.
2023-08-08 12:09:31 +02:00
Alex Shpak d86d5e70c7 Reset generated CSS in example site 2023-04-24 15:41:11 +02:00
Alex Shpak 26fee5551f #528: hotfix for search, until we find a reason 2023-04-24 15:40:42 +02:00
Kanematsu Gaku 12de4671e3
Add "word-break" to list. (#534) 2023-04-24 13:07:08 +02:00
Kanematsu Gaku 9c8210d99b
Format CSS (#535) 2023-04-24 13:06:20 +02:00
Kenta Nakase 036e037a63
Update step for creating site from scratch to use content.en path (#508)
Co-authored-by: parroty <parroty@users.noreply.github.com>
Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2023-02-13 23:05:05 +01:00
Alex Shpak 61bb57f32e #496, update content folder name in readme 2023-02-13 22:23:42 +01:00
Gerasimos (Makis) Maropoulos d5b75f4fb3
README.md: fix link path to content.en (#497) 2022-11-11 11:08:54 +01:00
Alex Shpak 3d2bfec186 #445, Upgrade mermaid to 9.2.0 2022-11-03 00:28:15 +01:00
Alex Shpak 412f140762 Bump minimal hugo version to 0.79 2022-11-03 00:11:38 +01:00
Alex Shpak 1318a717ed #441, add menu.params.class support 2022-11-02 23:42:10 +01:00
Alex Shpak 9013a1f457 #352: move english content to content.en 2022-11-02 23:28:30 +01:00
Alex Shpak 6e1b44c4c4 #452: Put double comments on shortcodes 2022-11-02 23:09:40 +01:00
Mikey Lombardi (He/Him) 6090fddebd
(MAINT) Respect LinkTitle in page metadata (#483)
Prior to this commit, the partial for determining a page title used the
`Title` property of a page, if present, or humanized and titleized the
file name if not.

It did not use the `LinkTitle` property at all (defined in the
[front matter][01]). According to the [menu documentation][02]:

> The following order is used to determine an Identifier:
>
> `.Name > .LinkTitle > .Title`
>
> This means that `.Title` will be used unless `.LinkTitle is present,
> etc.

Similar, the documentation for [menu entry variables][03] states:

> The `name` key, if set for the menu entry, sets this value. If that
> key is not set, and if the menu entry is set in a page front-matter,
> this value defaults to the page's `.LinkTitle`.

Together, these imply that if `.LinkTitle` is specified, it should be
preferred over `.Title` for the generated nav menu.

[01]: https://gohugo.io/content-management/front-matter/
[02]: https://gohugo.io/content-management/menus/#nesting
[03]: https://gohugo.io/variables/menus/#menu-entry-variables
2022-10-05 10:01:03 +02:00
Dongliang Yin 317ccae23b
Remove left pagination spacing (#467) 2022-08-02 12:57:40 +02:00
Alexander Danilov c024538604
Ignore code block clicks with active selection (#448) 2022-07-04 08:55:54 +02:00
Alex Shpak 4ef38f3bbf Add .hugo_build.lock to .gitignore 2022-04-26 13:43:10 +02:00
Alex Shpak 1852b16d93 #440L Adjust bookHref, check .Content again, add redirect 2022-04-26 13:14:22 +02:00
Horea Christian c2014a08a5
Add BookHref, set explicit URL for the menu (#440) 2022-04-26 13:10:39 +02:00
Leone G faede5e749
Add Amharic language translations (#444) 2022-04-26 11:35:50 +02:00
Giuseppe Masino 98d19b8e95
Make menu entries' link relative (#421)
This change allows hugo to build pages correcly when
`canonifyURLs = false` and `relativeURLs = true`.
Otherwise the links on the menu will be canonicalized regardless of
configuration.
This results in broken sites in a number of situations, such as sites
served behind a reverse-proxy that don't want to account for the prefix
they're served under.
2022-02-18 17:35:02 +01:00
Andreas Deininger 5581ec0845
REDAME: Katex to KaTeX (#416) 2022-02-14 15:44:11 +01:00
Alex Shpak 3a65df3a76 #408, #410: Use LanguageCode in templates if specified 2022-01-13 19:20:02 +01:00
shawn.ye fb0863a27a
Prevent breaked-lines in <p> (#404) 2022-01-13 16:52:03 +01:00
Samuel Redai 2f60f0919f
Updating book to hugo-book in README (#394)
Looks like the path `/book/` in the readme should be `/hugo-book/`.
2021-12-01 10:43:39 +01:00
Alex Shpak 2e693816ae #385: Do not focus search field if current element has value 2021-11-19 14:24:28 +01:00
QIN2DIM c47eb7388a
Rename theme in readmin to hugo-book (#386)
* Update README.md
* Update README.md

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2021-11-19 13:33:01 +01:00
Alex Shpak 8bb6d7ebec #369, switch to google_analytics.html internal template 2021-10-19 22:05:41 +02:00
Nikolay Raspopov 6c3d1e942a
Removed extra Google Analitics include (#389)
It's already included via "docs/html-head" partial.
2021-10-19 21:56:36 +02:00
Jack Morgan 9d4916fcc2
Allow site title to be customised via parital (#384)
* Allow site title to be customised via parital
* Modify readme to highlight available partials
* Rename template for consistency
* Move title tags to head partial
2021-09-27 09:36:02 +02:00
xhdix f2fb37b1ad
add color-scheme to head-html (#387) 2021-09-26 21:47:58 +02:00
Alex Shpak d6087bd32d Add hugo init to install instructions 2021-09-11 21:27:19 +02:00
Alex Shpak 15ef744c94 Rollback flexsearch for now 2021-09-08 23:41:49 +02:00
Michael T Lombardi (He/Him) 6aef8ef1c7
(GH-375) Enable use as a hugo module (#376)
This commit does the minimal work to make the Book theme a functional
hugo module by adding the go.mod file and including instructions in
the project README for use.

Resolves #375
2021-09-07 22:05:33 +02:00
Alex Shpak a656d711bf Upgrade flexsearch and mermaid 2021-08-30 14:47:27 +02:00
Alex Shpak 0cde2e461d #370: Allow markdown in details shortcode, also change markdownify to RenderString in other shortcodes 2021-08-30 14:32:11 +02:00
Alex Shpak 4c1de2b3de #374: set auto height for images in markdown 2021-08-30 14:15:57 +02:00
Alex Shpak 26de844a19 #343, #165: Move lang selector to left menu 2021-08-18 11:12:58 +02:00
Alex Shpak 50147be131
Update README.md 2021-07-25 22:44:14 +02:00
Alex Shpak deb00bcad2
Update theme.toml 2021-07-25 22:41:58 +02:00
逊狼 92d97049cf
issues 362 (#364)
* 🐞 fix issues 352

Solve this problem:
https://github.com/alex-shpak/hugo-book/issues/352

The Reason:
https://github.com/gohugoio/hugo/issues/8688

* fix issues 362

https://github.com/alex-shpak/hugo-book/issues/362

* Revert "🐞 fix issues 352"

This reverts commit 58f8935d1e.

* Revert "Revert "🐞 fix issues 352""

This reverts commit fa0d46ccf5.

* fix issues 362

* Update columns.html

* Revert "Revert "Revert "🐞 fix issues 352"""

This reverts commit 79777a9e84.

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2021-07-20 16:20:43 +02:00
Marco Guerrini c4d69635af
Added italian translation (#356) 2021-07-01 11:26:02 +02:00
xhdix e939f40314
Add Farsi with support for search RTL texts (#350)
Farsi/Parsi/Persian
2021-06-21 21:11:36 +02:00
xhdix 0d2ed5586e
Change collapsed icon in menu for RTL pages (#354) 2021-06-21 20:18:14 +02:00
xhdix 379e311d7e
Fix menu not working in RTL menu (#349) 2021-06-08 10:08:46 +02:00
Nikolay Raspopov 4540d66e3b
Document removal of internal hugo templates (#345) 2021-05-27 09:11:13 +02:00
Alex Shpak fde10f1319 #285, skip integrity attribute if site is built without hostname 2021-05-21 00:50:38 +02:00
Alex Shpak f6e8d1b693 Add deprecation notice for menu bundle 2021-05-21 00:46:53 +02:00
Nikolay Raspopov 345cb5d947
Prefer existing and translated variant of home page (#342)
* Prefer existing and translated variant of home page as the site link in the menu header.
* More compact "cond"-version of fix.
2021-05-20 22:02:31 +02:00
Alex Shpak 553d378db3 Fix lighthouse remarks: icon sizes, noopener 2021-05-20 19:00:15 +02:00
Alex Shpak 195138cad0 Update roboto fonts 2021-05-20 11:28:51 +02:00
Alex Shpak 9b2e21f870 Refactor search, syntax error 2021-05-19 20:28:21 +02:00
Alex Shpak d7c644f0e7 Refactor search, prepare for pre-built indexing 2021-05-19 20:26:21 +02:00
Alex Shpak 843144dd85 Regression, fix menu reset script 2021-05-19 20:12:27 +02:00
Nikolay Raspopov 4d936a55d8
Fixed ineffective "disableHugoGeneratorInject" parameter (#337)
Fixed issue #336. HUGO does not use `{{ hugo.Generator }}` placeholder anymore.
2021-05-06 09:33:18 +02:00
Alex Shpak 6720168dd5 #281, Copy code block content on click 2021-05-03 23:52:00 +02:00
Alex Shpak 6a1932611c Update MermaidJS example 2021-05-03 23:14:20 +02:00
Alex Shpak e611f564bb Update archetypes 2021-05-03 23:06:43 +02:00
Alex Shpak f4a26ff3da Imporove sectiopn shortcode example 2021-05-03 22:59:33 +02:00
Alex Shpak 9e9c7d3403 Improve posts title rendering 2021-05-03 22:05:25 +02:00
Alex Shpak c197f3399b #286, Add ability to set image for posts 2021-05-03 21:47:19 +02:00
Pim Snel e0823c2138
collapsed menu right arrow, uncollapsed down arrow (#332) 2021-05-03 21:18:49 +02:00
Hsin-Hsiang Peng 51140a8026
add Traditional Chinese i18n translation (#335)
Add the Traditional Chinese i18n translation for language code "zh-TW".

Ref: https://discourse.gohugo.io/t/i18n-support-for-language-country-code/20303
2021-05-03 21:17:44 +02:00
Pim Snel 62004506e2
change master to github's new default main branch (#325) 2021-04-11 17:51:42 +02:00
Collin Brooks ba38e17b1b
Add custom commit path for last edited link (#319)
- A new `BookCommitPath` paramter was added that allows the 'commit'
   portion of the link to a page's last edited commit hash to be
   specified.
 - This is useful when github is not the default repository for a
   project.

Co-authored-by: Collin Brooks <cbrooks@sentryds.com>
2021-04-11 17:50:54 +02:00
Collin Brooks e2786374ad
Add documentation for mermaid init config override (#317)
* Add documentation for mermaid init config override
* Capitalize Mermaid

Co-authored-by: Collin Brooks <cbrooks@sentryds.com>
2021-04-11 17:49:09 +02:00
Abu Zafar 1e4bcc2cc3
Mj abuz patch 2 (#314)
* Create bn.yml

Adding Bengali (BN)

* Create _index.md

Bengali(BN)

* Rename bn.yml to bn.yaml

Typo Mistake
2021-03-08 12:27:50 +01:00
Caleb Jasik 9791db1ce7
Bug Fix: Empty .Site.Params.contentDir (#312)
* Bug Fix: Empty .Site.Params.contentDir

When .Site.Params.contentDir is left as the default: "content", calling .Site.Params.contentDir returns nothing, or maybe an empty string. To fix this, we set a default value for .Site.Params.contentDir to "content" and the url is built correctly.

* Use the `default` function instead of `or`

https://gohugo.io/functions/default/
2021-02-22 19:48:49 +01:00
Nikolay Raspopov 27c1791144
Let's enable markdown in the button title (#308)
Added " | markdownify" to the inner text of button.
2021-02-19 11:55:53 +01:00
Nikolay Raspopov cb57401039
Added default dir="ltr" (#307)
Added default (i.e. "ltr") value of "dir" attribute of "html" and "body" tags instead of empty.
2021-02-03 09:42:32 +01:00
Alex Shpak 60dfd9aa4b Set BookTranslatedOnly to false for example site 2021-01-29 10:54:35 +01:00
Alex Shpak d9fe59a6e9 Refactor aside menus, add extra wrapper 2021-01-26 22:20:30 +01:00
Tiger Oakes 012ccee53d
Add before and after partials for toc (#296)
Closes #257
2021-01-26 18:45:08 +01:00
Ayush Agarwal a12baf0e01
upgrade mermaidjs to v8.9.0 (#305)
this fixes the following issue
https://github.com/mermaid-js/mermaid/issues/1836

the sha256sum of mermaid.min.js downloaded from the following link as on
2021-01-26 09:36:19 UTC

https://unpkg.com/mermaid@8.9.0/dist/mermaid.min.js

is

910e77c953c7417fd61148fc61b175624001bdd3c6e977e228fcb30607f7bd42
2021-01-26 18:16:35 +01:00
Alex Ivanov c828c6660f
Add OnlyTranslated property (#303)
* Add OnlyTranslated property

Signed-off-by: Alex Ivanov <ai@contributor.pw>

* Add newlines

Signed-off-by: Alex Ivanov <ai@contributor.pw>

* rename property

Signed-off-by: Alex Ivanov <ai@contributor.pw>
2021-01-21 11:42:26 +01:00
Yağızhan e53a638b2c
Adding Turkish translations (#300)
* Create tr.yaml

* Update tr.yaml

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2020-12-23 11:51:50 +01:00
Shohei Ueda a486adf846
Add hugo.Generator (#290)
https://gohugo.io/functions/hugo
2020-11-14 21:40:16 +01:00
Shohei Ueda f66a45df04
Improve GitHub Actions workflow (#289)
- Use the strategy.matrix syntax
- Use peaceiris/actions-hugo: https://github.com/peaceiris/actions-hugo
2020-11-14 21:40:00 +01:00
Alex Shpak f9643aa6b7 Fix styles on flat and collapsed section 2020-09-22 10:33:14 +02:00
Alex Shpak 269e4de142 Set default value for color scheme to light 2020-09-22 09:37:53 +02:00
Alex Shpak b76bdd715b #242, Add bookSearchExclude frontmatter param 2020-09-15 00:17:28 +02:00
Alex Shpak 5cc3d6719c #231, Allow open collapsed menu without changing page 2020-09-14 22:45:58 +02:00
Alex Shpak 4e34988b5d #151, move SCSS vars to CSS vars, implement dark and light modes by browser preference 2020-09-14 00:02:55 +02:00
Ivan Cheban 6beca7928c
Update columns.md (#265)
sparator ↔️ separator
2020-08-19 20:22:25 +02:00
Alex Shpak 8f64ee74aa #204, Add mermaid config customization, upgrade mermaidjs 2020-08-16 18:57:43 +02:00
Marie-Helene Burle 796468766f
Many minor fixes in README.md (#258)
- fix path of `menu/index.md` to match that given in the ExampleSite
- fix typos
- fix grammar
- add missing articles
2020-07-29 13:37:55 +02:00
Greg Kitson 5eceee52ed
fix minor typo in README.md under Site Configuration (#254) 2020-07-23 11:18:18 +02:00
Nagidal e09fa6ec83
Corrected German translation (#253) 2020-07-21 12:09:53 +02:00
Nagidal a056627f4a
Added Czech translation (#251) 2020-07-21 12:09:11 +02:00
Alex Shpak e91fa9024b #243, Copy jp.yaml to ja.yaml 2020-07-15 20:51:11 +02:00
Alex Shpak 615400b3b7 Revert example site title 2020-07-07 23:07:28 +02:00
Alex Shpak bf93dafdfa Improve accessibility and keyboard navigation 2020-07-07 23:06:21 +02:00
Alex Shpak f416a71bf8 #236, #171 Add section to search results 2020-07-06 22:17:36 +02:00
Alex Shpak 05c6336d22 Remove test image from example site 2020-06-16 23:25:45 +02:00
Alex Shpak 8522638b1f Update generated content 2020-06-16 23:25:20 +02:00
Alex Shpak 9f58f3b667 Update figure styles in markdown 2020-06-16 23:24:48 +02:00
Ge "David" Feng c79ab9dbc0
Add image and figure shortcodes (#233)
* add image and figure shortcodes
* remove shortcodes, add css
2020-06-16 23:19:54 +02:00
Chris Mayo d3673e797b
Remove execute permission from favicon.png (#234) 2020-06-15 21:39:45 +02:00
Alex Shpak c5ae65bc13 Make medu slide over content 2020-06-13 18:19:58 +02:00
Alex Shpak 5f2cc877df #229: Add height to body, for sticky elements 2020-06-13 00:21:08 +02:00
Alex Shpak b8b7184e89 Add section shortcode, to render children 2020-05-31 00:18:25 +02:00
Alex Shpak aa7c486e76 Add anchors to headings 2020-05-30 23:22:51 +02:00
Vincent Vialard 1608ade3f4
- hide ToC icon in header if ToC not enabled (#225) 2020-05-25 22:40:54 +02:00
Justin d198d96b30
Enabling KaTex Instructions (#217)
* Enabling KaTex Instructions

This would have been really helpful if that was documented, many users aren't able to render the KaTex and aren't sure why/where to look
Also,  fixed spelling some spelling

* Update README.md

Co-authored-by: Alex Shpak <alex-shpak@users.noreply.github.com>
2020-05-22 10:35:31 +02:00
Alex Shpak 8edf0aab16 #215, Fix search spinner in RTL direction 2020-05-19 23:10:11 +02:00
Alex Shpak 65484b0f4c #215, Fix menu translateX for RTL (negative X) 2020-05-18 23:58:21 +02:00
Alex Shpak 71e55e59d1 Set minimum version to 0.68 2020-05-17 13:18:34 +02:00
Alex Shpak 92600f77fe #215, Add support for languageDirection param 2020-05-17 13:10:50 +02:00
Alex Shpak d5f55b4003
#220, Update 'BookEditPath' docs 2020-05-11 11:17:31 +02:00
Lars Tveito 31e642141f
Add Norwegian (bokmål) i18n translation (#219) 2020-05-11 11:13:10 +02:00
Alex Shpak a877c17dc1 Add precache to service worker 2020-05-01 17:45:23 +02:00
Alex Shpak e2ffa7b3ad Add manifest 2020-05-01 17:35:08 +02:00
Alex Shpak c672d64f12 Generate pages list in sw.js 2020-05-01 13:19:58 +02:00
Alex Shpak 9c5fc12dd8 Add build badge 2020-04-28 22:10:01 +02:00
Alex Shpak 2b430b0b41 #212, Fix use of IsAncestor after hugo breaking change 2020-04-28 22:00:24 +02:00
Alex Shpak 5be250b0e2 #207, Fix whitespaces again, in shortcodes inside shortcodes 2020-04-24 10:29:23 +02:00
Alex Shpak 7b18b077ee Add ukrainian translation 2020-04-21 23:53:58 +02:00
Alex Shpak 5ac8fe662a Add cn.yaml back for backward compatibility 2020-04-21 23:40:08 +02:00
Alex Shpak 821203777d Rename 'cn' locale to 'zh', cn code is unassigned 2020-04-21 23:38:30 +02:00
Alex Shpak 357de9eb39 #196, #201 Refactor numbered plugin. multilevel numbers in ToC 2020-04-21 23:25:36 +02:00
Alex Shpak 66968582ef #205, Add details shortcode 2020-04-21 22:30:00 +02:00
tyler71 b88d5f6b12
Edit this page content dir lang independent (#202)
#200
2020-04-16 17:40:17 +02:00
Alex Shpak 0f58a77354 404 Page redesign 2020-04-15 23:24:51 +02:00
Almir A. Braggio 7382758270
Adding portuguese i18n file (#199)
Co-authored-by: Almir Braggio <almir.braggio@pti.org.br>
2020-04-15 10:39:40 +02:00
Alex Shpak 94c8230e1e #197, Use RelPermalink to identify nested pages in collapsed menu 2020-04-14 22:56:31 +02:00
Alex Shpak 9719692512 Introduce serviceWorker, disabled by default 2020-04-12 20:50:03 +02:00
Alex Shpak e4e43bd9b1 Refactor KaTeX shortcode, remove whitespaces and fix font size 2020-04-11 20:05:43 +02:00
Alex Shpak d61558462f Revert config.toml sectin config 2020-04-11 14:37:47 +02:00
Alex Shpak 15339ab6a6 #157, Refactor side menu, simpler and renders all pages at root 2020-04-11 14:35:29 +02:00
Alex Shpak 8927a3c672 #162, Add docs/date partial, for date customization 2020-04-10 20:24:36 +02:00
Alex Shpak 6234f12654 Restrict visited link color to markdown only 2020-04-06 11:26:35 +02:00
Alex Shpak 1eeabcad67 #187, Use .Permalink for lang switch, align icons 2020-04-03 17:42:48 +02:00
Alex Shpak 6e146b1bf1 #188, Add hreflang metadata to html head 2020-04-02 22:47:36 +02:00
Alex Shpak b91e9eaea7 #186, Make title generation cross-platform 2020-03-31 23:29:21 +02:00
Alex Shpak a9867292af Fix current page highlight in new Hugo version 2020-03-30 18:00:15 +02:00
Alex Shpak 831e570f16 Fix mermaid scaling for flowchart 2020-03-30 17:59:29 +02:00
Eugene van der Merwe 3011d3351d
Added Dark Mode to features (#184)
Updated the list of features.
2020-03-28 21:24:59 +01:00
Alex Shpak 976f619b2f Update mermaid to 8.4.8, move KaTeX to static folder 2020-03-23 20:40:53 +01:00
211 changed files with 3836 additions and 1104 deletions

View File

@ -1,33 +1,34 @@
name: Build with Hugo
on: [push]
on: [push, pull_request]
jobs:
hugo-latest:
build:
runs-on: ubuntu-latest
strategy:
matrix:
hugo-version:
- 'latest'
- '0.134.2'
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v4
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Install Hugo
run: |
LATEST_VERSION=`curl --silent "https://api.github.com/repos/gohugoio/hugo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/'`
VERSION_NO_PREFIX=`echo $LATEST_VERSION | cut -c 2-`
wget "https://github.com/gohugoio/hugo/releases/download/$LATEST_VERSION/hugo_extended_${VERSION_NO_PREFIX}_Linux-64bit.deb" -O /tmp/hugo.deb
sudo dpkg -i /tmp/hugo.deb
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: ${{ matrix.hugo-version }}
extended: true
- name: Run Hugo
working-directory: exampleSite
run: hugo --themesDir ../..
hugo-minimum:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Install Hugo
run: |
wget "https://github.com/gohugoio/hugo/releases/download/v0.65.0/hugo_extended_0.65.0_Linux-64bit.deb" -O /tmp/hugo.deb
sudo dpkg -i /tmp/hugo.deb
# - name: Deploy
# uses: peaceiris/actions-gh-pages@v3
# with:
# github_token: ${{ secrets.GITHUB_TOKEN }}
# publish_dir: ./public
- name: Run Hugo
working-directory: exampleSite
run: hugo --themesDir ../..

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
public/
exampleSite/public/
.DS_Store
.hugo_build.lock
resources/

224
README.md
View File

@ -1,11 +1,12 @@
# Hugo Book Theme
[![Hugo](https://img.shields.io/badge/hugo-0.65-blue.svg)](https://gohugo.io)
[![Hugo](https://img.shields.io/badge/hugo-0.134-blue.svg)](https://gohugo.io)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
![Build with Hugo](https://github.com/alex-shpak/hugo-book/workflows/Build%20with%20Hugo/badge.svg)
### [Hugo](https://gohugo.io) documentation theme as simple as plain book
![Screenshot](https://github.com/alex-shpak/hugo-book/blob/master/images/screenshot.png)
![Screenshot](https://raw.githubusercontent.com/alex-shpak/hugo-book/master/images/screenshot.png)
- [Features](#features)
- [Requirements](#requirements)
@ -28,93 +29,83 @@
- Comments support
- Simple blog and taxonomy
- Primary features work without JavaScript
- Dark Mode
## Requirements
- Hugo 0.65 or higher
- Hugo extended version, read more [here](https://gohugo.io/news/0.48-relnotes/)
- Hugo 0.134 or higher
- Hugo extended version, [Installation Instructions](https://gohugo.io/installation/)
## Installation
### Install as git submodule
Navigate to your hugo project root and run:
```
git submodule add https://github.com/alex-shpak/hugo-book themes/book
git submodule add https://github.com/alex-shpak/hugo-book themes/hugo-book
```
Then run hugo (or set `theme = "book"`/`theme: book` in configuration file)
Then run hugo (or set `theme = "hugo-book"`/`theme: hugo-book` in configuration file)
```
hugo server --minify --theme book
hugo server --minify --theme hugo-book
```
### Install as hugo module
You can also add this theme as a Hugo module instead of a git submodule.
Start with initializing hugo modules, if not done yet:
```
hugo mod init github.com/repo/path
```
Navigate to your hugo project root and add [module] section to your `hugo.toml`:
```toml
[module]
[[module.imports]]
path = 'github.com/alex-shpak/hugo-book'
```
Then, to load/update the theme module and run hugo:
```sh
hugo mod get -u
hugo server --minify
```
### Creating site from scratch
Below is example how to create new site from scratch
Below is an example on how to create a new site from scratch:
```sh
hugo new site mydocs; cd mydocs
git init
git submodule add https://github.com/alex-shpak/hugo-book themes/book
cp -R themes/book/exampleSite/content .
git submodule add https://github.com/alex-shpak/hugo-book themes/hugo-book
cp -R themes/hugo-book/exampleSite/content.en/* ./content
```
```sh
hugo server --minify --theme book
hugo server --minify --theme hugo-book
```
## Menu
### File tree menu (default)
By default theme will render pages from `content/docs` section as menu in a tree structure.
You can set `title` and `weight` in front matter of pages to adjust order and titles in menu.
### Leaf bundle menu
You can also use leaf bundle and content of it's `index.md` as menu.
Given you have this file structure
```
├── content
│ ├── docs
│ │ ├── page-one.md
│ │ └── page-two.md
│ └── posts
│ ├── post-one.md
│ └── post-two.md
```
Create file `content/docs/menu/index.md` with content
```md
+++
headless = true
+++
- [Book Example]({{< relref "/docs/" >}})
- [Page One]({{< relref "/docs/page-one" >}})
- [Page Two]({{< relref "/docs/page-two" >}})
- [Blog]({{< relref "/posts" >}})
```
And Enable it by settings `BookMenuBundle: /menu` in Site configuration
- [Example menu](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/content/menu/index.md)
- [Example config file](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml)
- [Leaf bundles](https://gohugo.io/content-management/page-bundles/)
By default, the theme will render pages from the `content/docs` section as a menu in a tree structure.
You can set `title` and `weight` in the front matter of pages to adjust the order and titles in the menu, as well as other parameters to hide or alter urls in the menu. You can choose which folder to use for generating menu with `BookSection` configuration parameter.
## Blog
Simple blog supported for section `posts`.
Blog is not primary use case so book theme so it has only minimal features
A simple blog is supported in the section `posts`.
A blog is not the primary usecase of this theme, so it has only minimal features.
## Configuration
### Site Configuration
There are few configuration options you can add to your `config.toml` file.
You can also see `yaml` example [here](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml).
There are a few configuration options that you can add to your `hugo.toml` file.
You can also see the `yaml` example [here](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/hugo.yaml).
```toml
# (Optional) Set Google Analytics if you use it to track your website.
@ -135,46 +126,53 @@ enableGitInfo = true
# (Optional) Theme is intended for documentation use, therefore it doesn't render taxonomy.
# You can remove related files with config below
disableKinds = ['taxonomy', 'taxonomyTerm']
[params]
# (Optional, default light) Sets color theme: light, dark or auto.
# Theme 'auto' switches between dark and light modes based on browser/os preferences
BookTheme = 'light'
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
BookToC = true
# (Optional, default none) Set the path to a logo for the book. If the logo is
# /static/logo.png then the path would be 'logo.png'
BookLogo = 'logo.png'
# (Optional, default none) Set leaf bundle to render as side menu
# When not specified file structure and weights will be used
BookMenuBundle = '/menu'
# (Optional, default docs) Specify section of content to render as menu
# You can also set value to "*" to render all sections to menu
BookSection = 'docs'
# Set source repository location.
# Used for 'Last Modified' and 'Edit this page' links.
BookRepo = 'https://github.com/alex-shpak/hugo-book'
# Specifies commit portion of the link to the page's last modified commit hash for 'doc' page
# type.
# Required if 'BookRepo' param is set.
# Value used to construct a URL consisting of BookRepo/BookCommitPath/<commit-hash>
# Github uses 'commit', Bitbucket uses 'commits'
BookCommitPath = 'commit'
# Enable 'Edit this page' links for 'doc' page type.
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
# Path must point to 'content' directory of repo.
BookEditPath = 'edit/master/exampleSite/content'
# Path must point to the site directory.
BookEditPath = 'edit/master/exampleSite'
# (Optional, default January 2, 2006) Configure the date format used on the pages
# - In git information
# - In blog posts
BookDateFormat = 'Jan 2, 2006'
# (Optional, default true) Enables search function with flexsearch,
# Index is built on fly, therefore it might slowdown your website.
# Configuration for indexing can be adjusted in i18n folder per language.
BookSearch = true
# (Optional, default true) Enables comments template on pages
# By default partals/docs/comments.html includes Disqus template
# By default partials/docs/comments.html includes Disqus template
# See https://gohugo.io/content-management/comments/#configure-disqus
# Can be overwritten by same param in page frontmatter
BookComments = true
@ -184,51 +182,66 @@ disableKinds = ['taxonomy', 'taxonomyTerm']
# Portable links meant to work with text editors and let you write markdown without {{< relref >}} shortcode
# Theme will print warning if page referenced in markdown does not exists.
BookPortableLinks = true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables service worker that caches visited pages and resources for offline use.
BookServiceWorker = true
```
### Multi-Language Support
Theme supports Hugo's [multilingual mode](https://gohugo.io/content-management/multilingual/), just follow configuration guide there. You can also tweak search indexing configuration per language in `i18n` folder.
### Page Configuration
You can specify additional params per page in front matter
You can specify additional params in the front matter of individual pages:
```toml
# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs'
type = 'docs'
# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set)
# Set page weight to re-arrange items in file-tree menu.
weight = 10
# (Optional) Set to mark page as flat section in file-tree menu (if BookMenuBundle not set)
bookFlatSection = true
# (Optional) Set to 'true' to mark page as flat section in file-tree menu.
bookFlatSection = false
# (Optional, Experimental) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
# (Optional) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
bookCollapseSection = true
# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set)
bookHidden = true
# (Optional) Set true to hide page or section from side menu.
bookHidden = false
# (Optional) Set 'false' to hide ToC from page
bookToC = true
# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages.
bookComments = true
# (Optional) Set to 'false' to exclude page from search index.
bookSearchExclude = true
# (Optional) Set explicit href attribute for this page in a menu.
bookHref = ''
```
### Partials
There are few empty partials you can override in `layouts/partials/`
There are layout partials available for you to easily override components of the theme in `layouts/partials/`.
| Partial | Placement |
| -------------------------------------------------- | -------------------------------------- |
| `layouts/partials/docs/inject/head.html` | Before closing `<head>` tag |
| `layouts/partials/docs/inject/body.html` | Before closing `<body>` tag |
| `layouts/partials/docs/inject/footer.html` | After page footer content |
| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `<nav>` menu block |
| `layouts/partials/docs/inject/menu-after.html` | At the end of `<nav>` menu block |
| `layouts/partials/docs/inject/content-before.html` | Before page content |
| `layouts/partials/docs/inject/content-after.html` | After page content |
In addition to this, there are several empty partials you can override to easily add/inject code.
| Empty Partial | Placement |
| -------------------------------------------------- | ------------------------------------------- |
| `layouts/partials/docs/inject/head.html` | Before closing `<head>` tag |
| `layouts/partials/docs/inject/body.html` | Before closing `<body>` tag |
| `layouts/partials/docs/inject/footer.html` | After page footer content |
| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `<nav>` menu block |
| `layouts/partials/docs/inject/menu-after.html` | At the end of `<nav>` menu block |
| `layouts/partials/docs/inject/content-before.html` | Before page content |
| `layouts/partials/docs/inject/content-after.html` | After page content |
| `layouts/partials/docs/inject/toc-before.html` | At the beginning of table of contents block |
| `layouts/partials/docs/inject/toc-after.html` | At the end of table of contents block |
### Extra Customisation
@ -238,41 +251,56 @@ There are few empty partials you can override in `layouts/partials/`
| `assets/_custom.scss` | Customise or override scss styles |
| `assets/_variables.scss` | Override default SCSS variables |
| `assets/_fonts.scss` | Replace default font with custom fonts (e.g. local files or remote like google fonts) |
| `assets/mermaid.json` | Replace Mermaid initialization config |
### Plugins
There are few features implemented as plugable `scss` styles. Usually this are features that doesn't make it to the core but still might be useful.
There are a few features implemented as pluggable `scss` styles. Usually these are features that don't make it to the core but can still be useful.
| Plugin | Description |
| --------------------------------- | ----------------------------------------------------------- |
| `assets/plugins/_dark.scss` | Switches site to dark mode |
| `assets/plugins/_numbered.scss` | Makes headings in markdown numbered, e.g. `1.1`, `1.2` |
| `assets/plugins/_scrollbars.scss` | Overrides scrollbar styles to look similar across platforms |
To enable plugin add `@import "plugins/{name}";` to `assets/_custom.scss` in your website root. Exception is `_dark.scss` which contains only variables and should be added to `assets/_variables.scss`.
To enable plugins, add `@import "plugins/{name}";` to `assets/_custom.scss` in your website root.
### Hugo Internal Templates
There are few hugo tempaltes inserted in `<head>`
There are a few hugo templates inserted in `<head>`
- [Google Analytics](https://gohugo.io/templates/internal/#google-analytics)
- [Open Graph](https://gohugo.io/templates/internal/#open-graph)
To disable Open Graph inclusion you can create your own empty file `\layouts\_internal\opengraph.html`.
In fact almost empty not quite empty because an empty file looks like absent for HUGO. For example:
```
<!-- -->
```
## Shortcodes
- [Buttons](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/buttons/)
- [Columns](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/columns/)
- [Expand](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/expand/)
- [Hints](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/hints/)
- [KaTeX](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/katex/)
- [Mermaid](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/mermaid/)
- [Tabs](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/tabs/)
- [Buttons](https://hugo-book-demo.netlify.app/docs/shortcodes/buttons/)
- [Columns](https://hugo-book-demo.netlify.app/docs/shortcodes/columns/)
- [Details](https://hugo-book-demo.netlify.app/docs/shortcodes/details/)
- [Hints](https://hugo-book-demo.netlify.app/docs/shortcodes/hints/)
- [KaTeX](https://hugo-book-demo.netlify.app/docs/shortcodes/katex/)
- [Mermaid](https://hugo-book-demo.netlify.app/docs/shortcodes/mermaid/)
- [Tabs](https://hugo-book-demo.netlify.app/docs/shortcodes/tabs/)
By default, Goldmark trims unsafe outputs which might prevent some shortcodes from rendering. It is recommended to set `markup.goldmark.renderer.unsafe=true` if you encounter problems.
```toml
[markup.goldmark.renderer]
unsafe = true
```
If you are using `config.yaml` or `config.json`, consult the [configuration markup](https://gohugo.io/getting-started/configuration-markup/)
## Versioning
Theme follows simple incremental versioning. e.g. `v1`, `v2` and so on. There might be breaking changes between versions.
This theme follows a simple incremental versioning. e.g. `v1`, `v2` and so on. There might be breaking changes between versions.
If you want lower maintenance use one of released versions. If you want to live on the edge of changes you can use `master` branch and update your website when needed.
If you want lower maintenance, use one of the released versions. If you want to live on the bleeding edge of changes, you can use the `master` branch and update your website when needed.
## Contributing
@ -286,4 +314,4 @@ Primary goals are:
- Avoid interference with user-defined layouts.
- Avoid using JS if it can be solved by CSS.
Feel free to open issue if you missing some configuration or customisation option.
Feel free to open issues if you find missing configuration or customisation options.

View File

@ -5,5 +5,6 @@ weight: 1
# bookToc: true
# bookHidden: false
# bookCollapseSection: false
# bookComments: true
# bookComments: false
# bookSearchExclude: false
---

View File

@ -1,4 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
title: "{{ .Name | humanize | title }}"
date: {{ .Date }}
# bookComments: false
# bookSearchExclude: false
---

View File

@ -11,40 +11,55 @@ $font-size-16: 1rem !default;
$border-radius: $padding-4 !default;
// Grayscale
$white: #ffffff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
$gray-400: #ced4da !default;
$gray-500: #adb5bd !default;
$gray-600: #868e96 !default;
$gray-700: #495057 !default;
$gray-800: #343a40 !default;
$gray-900: #212529 !default;
$black: #000 !default;
$color-link: #05b !default;
$color-visited-link: #8440f1 !default;
$body-background: white !default;
$body-font-color: $black !default;
$body-font-weight: normal !default;
$body-min-width: 20rem !default;
$container-max-width: 80rem !default;
$header-height: 3.5rem !default;
$menu-width: 16rem !default;
$toc-width: 16rem !default;
$mobile-breakpoint: $menu-width + $body-min-width * 1.2 + $toc-width !default;
// Hint colors
$hint-colors: (
info: #6bf,
warning: #fd6,
danger: #f66
danger: #f66,
) !default;
$icon-filter: none !default;
// Themes
@mixin theme-light {
--gray-100: #f8f9fa;
--gray-200: #e9ecef;
--gray-500: #adb5bd;
--color-link: #0055bb;
--color-visited-link: #8440f1;
--body-background: white;
--body-font-color: black;
--icon-filter: none;
--hint-color-info: #6bf;
--hint-color-warning: #fd6;
--hint-color-danger: #f66;
}
@mixin theme-dark {
--gray-100: #494e54;
--gray-200: #5c6165;
--gray-500: #999d9f;
--color-link: #84b2ff;
--color-visited-link: #b88dff;
--body-background: #343a40;
--body-font-color: #e9ecef;
--icon-filter: brightness(0) invert(1);
--hint-color-info: #6bf;
--hint-color-warning: #fd6;
--hint-color-danger: #f66;
}

View File

@ -1,43 +1,28 @@
/* roboto-300italic - latin */
@font-face {
font-family: 'Roboto';
font-style: italic;
font-weight: 300;
font-display: swap;
src: local('Roboto Light Italic'), local('Roboto-LightItalic'),
url('fonts/roboto-v19-latin-300italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('fonts/roboto-v19-latin-300italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* roboto-regular - latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto'), local('Roboto-Regular'),
url('fonts/roboto-v19-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('fonts/roboto-v19-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
font-display: fallback;
src: url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* roboto-700 - latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Roboto Bold'), local('Roboto-Bold'),
url('fonts/roboto-v19-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('fonts/roboto-v19-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
font-display: fallback;
src: url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* roboto-mono-regular - latin */
@font-face {
font-family: 'Roboto Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: local('Roboto Mono'), local('RobotoMono-Regular'),
url('fonts/roboto-mono-v6-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('fonts/roboto-mono-v6-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
font-display: fallback;
src: url(https://fonts.gstatic.com/s/robotomono/v23/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW4AJi8SJQt.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
body {

View File

@ -1,22 +1,17 @@
html {
font-size: $font-size-base;
letter-spacing: 0.33px;
scroll-behavior: smooth;
touch-action: manipulation;
scrollbar-gutter: stable;
}
html,
body {
min-width: $body-min-width;
overflow-x: hidden;
}
body {
color: $body-font-color;
background: $body-background;
color: var(--body-font-color);
background: var(--body-background);
// letter-spacing: 0.33px;
font-weight: $body-font-weight;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@ -37,17 +32,17 @@ h5 {
a {
text-decoration: none;
color: $color-link;
&:visited {
color: $color-visited-link;
}
color: var(--color-link);
}
img {
vertical-align: baseline;
}
:focus {
@include outline;
}
aside nav ul {
padding: 0;
margin: 0;
@ -67,7 +62,7 @@ aside nav ul {
}
ul {
padding-left: $padding-16;
padding-inline-start: $padding-16;
}
}
@ -75,6 +70,7 @@ ul.pagination {
display: flex;
justify-content: center;
list-style-type: none;
padding-inline-start: 0px;
.page-item a {
padding: $padding-16;
@ -87,17 +83,23 @@ ul.pagination {
}
.book-icon {
filter: $icon-filter;
filter: var(--icon-filter);
}
a .book-icon {
height: 1em;
width: 1em;
margin-inline-end: .5em;
}
.book-brand {
margin-top: 0;
margin-bottom: $padding-16;
img {
height: 1.5em;
width: auto;
vertical-align: middle;
margin-right: $padding-8;
width: 1.5em;
margin-inline-end: $padding-8;
}
}
@ -105,43 +107,64 @@ ul.pagination {
flex: 0 0 $menu-width;
font-size: $font-size-14;
nav {
.book-menu-content {
width: $menu-width;
padding: $padding-16;
background: var(--body-background);
@include fixed;
}
a {
a,
label {
color: inherit;
cursor: pointer;
word-wrap: break-word;
}
a.active {
color: $color-link;
color: var(--color-link);
}
a.collapsed::after {
input.toggle + label + ul {
display: none;
}
input.toggle:checked + label + ul {
display: block;
}
input.toggle + label::after {
content: "";
position: absolute;
right: 0;
}
input.toggle:checked + label::after {
content: "";
}
}
// for RTL support
body[dir="rtl"] .book-menu {
input.toggle + label::after {
content: "";
}
input.toggle:checked + label::after {
content: "";
}
}
.book-section-flat {
margin-bottom: $padding-16 * 2;
&:not(:first-child) {
margin-top: $padding-16 * 2;
}
margin: $padding-16 * 2 0;
> a,
> span {
> span,
> label {
font-weight: bolder;
}
> ul {
padding-left: 0;
padding-inline-start: 0;
}
}
@ -152,7 +175,17 @@ ul.pagination {
}
.book-post {
margin-bottom: $padding-16 * 3;
margin-bottom: $padding-16 * 2;
.book-post-date img {
height: 1em;
width: 1em;
margin-inline-end: .5em;
}
.book-post-content > :first-child {
margin-top: $padding-16;
}
}
.book-header {
@ -162,6 +195,17 @@ ul.pagination {
label {
line-height: 0;
}
h3 {
overflow: hidden;
text-overflow: ellipsis;
margin: 0 $padding-16;
}
img.book-icon {
height: 1.5em;
width: 1.5em;
}
}
.book-search {
@ -169,12 +213,6 @@ ul.pagination {
margin: $padding-16 0;
border-bottom: 1px solid transparent;
&::after {
display: block;
content: "";
clear: both;
}
input {
width: 100%;
padding: $padding-8;
@ -182,8 +220,8 @@ ul.pagination {
border: 0;
border-radius: $border-radius;
background: $gray-100;
color: $body-font-color;
background: var(--gray-100);
color: var(--body-font-color);
&:required + .book-search-spinner {
display: block;
@ -192,26 +230,30 @@ ul.pagination {
.book-search-spinner {
position: absolute;
margin: $padding-8;
right: 0;
top: 0;
margin: $padding-8;
margin-inline-start: calc(100% - #{$padding-16 + $padding-8});
width: $padding-16;
height: $padding-16;
border: $padding-1 solid transparent;
border-top-color: $body-font-color;
border-top-color: var(--body-font-color);
border-radius: 50%;
@include spin(1s);
}
small {
opacity: 0.5;
}
}
.book-toc {
flex: 0 0 $toc-width;
font-size: $font-size-12;
nav {
.book-toc-content {
width: $toc-width;
padding: $padding-16;
@ -220,6 +262,7 @@ ul.pagination {
img {
height: 1em;
width: 1em;
}
nav > ul > li:first-child {
@ -230,11 +273,6 @@ ul.pagination {
.book-footer {
padding-top: $padding-16;
font-size: $font-size-14;
img {
height: 1em;
margin-right: $padding-8;
}
}
.book-comments {
@ -242,76 +280,34 @@ ul.pagination {
}
.book-languages {
position: relative;
overflow: visible;
padding: $padding-16;
margin: -$padding-16;
margin-block-end: $padding-16 * 2;
ul {
margin: 0;
padding: 0;
list-style: none;
li {
white-space: nowrap;
cursor: pointer;
}
padding-inline-start: 1.5em;
}
&:hover,
&:focus,
&:focus-within {
.book-languages-list {
display: block;
}
}
.book-languages-list {
display: none;
position: absolute;
bottom: 100%;
left: 0;
padding: $padding-8 0;
background: $body-background;
box-shadow: 0 0 $padding-4 rgba(0, 0, 0, 0.1);
li img {
opacity: 0.25;
}
li.active img,
li:hover img {
opacity: 1;
}
a {
color: inherit;
padding: $padding-8 $padding-16;
}
}
}
.book-home {
padding: $padding-16;
}
// Responsive styles
aside nav,
.book-menu-content,
.book-toc-content,
.book-page,
.book-header aside,
.markdown {
transition: 0.2s ease-in-out;
transition-property: transform, margin, opacity;
will-change: transform, margin;
transition-property: transform, margin, opacity, visibility;
will-change: transform, margin, opacity;
}
@media screen and (max-width: $mobile-breakpoint) {
#menu-control,
#toc-control {
display: inline;
}
.book-menu {
margin-left: -$menu-width;
font-size: $font-size-base;
visibility: hidden;
margin-inline-start: -$menu-width;
z-index: 1;
}
.book-toc {
@ -322,14 +318,21 @@ aside nav,
display: block;
}
#menu-control:checked + main {
.book-menu nav,
.book-page {
transform: translateX($menu-width);
#menu-control:focus ~ main label[for="menu-control"] {
@include outline;
}
#menu-control:checked ~ main {
.book-menu {
visibility: initial;
}
.book-header aside,
.markdown {
.book-menu .book-menu-content {
transform: translateX($menu-width);
box-shadow: 0 0 $padding-8 rgba(0, 0, 0, 0.1);
}
.book-page {
opacity: 0.25;
}
@ -343,16 +346,29 @@ aside nav,
}
}
#toc-control:checked + aside {
display: block;
#toc-control:focus ~ main label[for="toc-control"] {
@include outline;
}
#toc-control:checked ~ main {
.book-header aside {
display: block;
}
}
// for RTL support
body[dir="rtl"] #menu-control:checked ~ main {
.book-menu .book-menu-content {
transform: translateX(-$menu-width);
}
}
}
// Extra space for big screens
@media screen and (min-width: $container-max-width) {
.book-page,
.book-menu nav,
.book-toc nav {
.book-menu .book-menu-content,
.book-toc .book-toc-content {
padding: $padding-16 * 2 $padding-16;
}
}

View File

@ -1,33 +1,54 @@
@import 'variables';
@import "variables";
.markdown {
line-height: 1.6em;
line-height: 1.6;
// remove padding at the beginning of page
> :first-child {
margin-top: 0;
}
h1, h2, h3, h4, h5, h6 {
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
line-height: 1em;
line-height: 1;
margin-top: 1.5em;
margin-bottom: $padding-16;
a.anchor {
opacity: 0;
font-size: 0.75em;
vertical-align: middle;
text-decoration: none;
}
&:hover a.anchor,
a.anchor:focus {
opacity: initial;
}
}
h4, h5, h6 {
h4,
h5,
h6 {
font-weight: bolder;
}
h5 {
font-size: .875em;
font-size: 0.875em;
}
h6 {
font-size: .75em;
font-size: 0.75em;
}
b, optgroup, strong {
b,
optgroup,
strong {
font-weight: bolder;
}
@ -37,22 +58,30 @@
&:hover {
text-decoration: underline;
}
&:visited {
color: var(--color-visited-link);
}
}
img {
max-width: 100%;
height: auto;
}
code {
direction: ltr;
unicode-bidi: embed;
padding: 0 $padding-4;
background: $gray-200;
background: var(--gray-200);
border-radius: $border-radius;
font-size: .875em;
font-size: 0.875em;
}
pre {
direction: ltr;
unicode-bidi: embed;
padding: $padding-16;
background: $gray-100;
background: var(--gray-100);
border-radius: $border-radius;
overflow-x: auto;
@ -62,15 +91,23 @@
}
}
p {
word-wrap: break-word;
}
blockquote {
margin: $padding-16 0;
padding: $padding-8 $padding-16 $padding-8 ($padding-16 - $padding-4); //to keep total left space 16dp
border-left: $padding-4 solid $gray-200;
border-inline-start: $padding-4 solid var(--gray-200);
border-radius: $border-radius;
:first-child { margin-top: 0; }
:last-child { margin-bottom: 0; }
:first-child {
margin-top: 0;
}
:last-child {
margin-bottom: 0;
}
}
table {
@ -81,24 +118,27 @@
margin-top: $padding-16;
margin-bottom: $padding-16;
tr th, tr td {
tr th,
tr td {
padding: $padding-8 $padding-16;
border: $padding-1 solid $gray-200;
border: $padding-1 solid var(--gray-200);
}
tr:nth-child(2n) {
background: $gray-100;
background: var(--gray-100);
}
}
hr {
height: $padding-1;
border: none;
background: $gray-200;
background: var(--gray-200);
}
ul, ol {
padding-left: $padding-16 * 2;
ul,
ol {
padding-inline-start: $padding-16 * 2;
word-wrap: break-word;
}
dl {
@ -108,30 +148,65 @@
}
dd {
margin-left: $padding-16 * 2;
margin-inline-start: 0;
margin-bottom: $padding-16;
}
}
// Special case for highlighted code with line numbers
.highlight table tr {
td:nth-child(1) pre {
margin: 0;
padding-right: 0;
}
td:nth-child(2) pre {
margin: 0;
padding-left: 0;
.highlight {
direction: ltr;
unicode-bidi: embed;
border-radius: $border-radius;
overflow: hidden;
table tr {
td pre code > span {
display: flex;
}
td:nth-child(1) pre {
margin: 0;
padding-inline-end: 0;
}
td:nth-child(2) pre {
margin: 0;
padding-inline-start: 0;
}
}
}
details {
padding: $padding-16;
border: $padding-1 solid $gray-200;
border: $padding-1 solid var(--gray-200);
border-radius: $border-radius;
summary {
line-height: 1;
padding: $padding-16;
margin: -$padding-16;
cursor: pointer;
}
&[open] summary {
margin-bottom: 0;
}
}
figure {
margin: $padding-16 0;
figcaption p {
margin-top: 0;
}
}
}
.markdown-inner {
// Util class to remove extra margin in nested markdown content
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
}

View File

@ -1,109 +1,104 @@
.markdown-inner {
// Util class to remove extra margin in nested markdown content
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
}
.markdown {
// {{< expand "Label" "icon" >}}
.book-expand {
margin-top: $padding-16;
margin-bottom: $padding-16;
// {{< expand "Label" "icon" >}}
.book-expand {
margin-top: $padding-16;
margin-bottom: $padding-16;
border: $padding-1 solid var(--gray-200);
border-radius: $border-radius;
border: $padding-1 solid $gray-200;
border-radius: $border-radius;
overflow: hidden;
overflow: hidden;
.book-expand-head {
background: $gray-100;
padding: $padding-8 $padding-16;
cursor: pointer;
}
.book-expand-content {
display: none;
padding: $padding-16;
}
input[type="checkbox"]:checked + .book-expand-content {
display: block;
}
}
// {{< tabs >}}
.book-tabs {
margin-top: $padding-16;
margin-bottom: $padding-16;
border: $padding-1 solid $gray-200;
border-radius: $border-radius;
overflow: hidden;
display: flex;
flex-wrap: wrap;
label {
display: inline-block;
padding: $padding-8 $padding-16;
border-bottom: $padding-1 transparent;
cursor: pointer;
}
.book-tabs-content {
order: 999; //Move content blocks to the end
width: 100%;
border-top: $padding-1 solid $gray-100;
padding: $padding-16;
display: none;
}
input[type="radio"]:checked + label {
border-bottom: $padding-1 solid $color-link;
}
input[type="radio"]:checked + label + .book-tabs-content {
display: block;
}
}
// {{< columns >}}
.book-columns {
margin-left: -$padding-16;
margin-right: -$padding-16;
> div {
margin: $padding-16 0;
min-width: $body-min-width / 2;
padding: 0 $padding-16;
}
}
// {{< button >}}
a.book-btn {
display: inline-block;
font-size: $font-size-14;
color: $color-link;
line-height: $padding-16 * 2;
padding: 0 $padding-16;
border: $padding-1 solid $color-link;
border-radius: $border-radius;
cursor: pointer;
&:hover {
text-decoration: none;
}
}
// {{< hint >}}
.book-hint {
@each $name, $color in $hint-colors {
&.#{$name} {
border-left-color: $color;
background-color: rgba($color, 0.1);
.book-expand-head {
background: var(--gray-100);
padding: $padding-8 $padding-16;
cursor: pointer;
}
};
.book-expand-content {
display: none;
padding: $padding-16;
}
input[type="checkbox"]:checked + .book-expand-content {
display: block;
}
}
// {{< tabs >}}
.book-tabs {
margin-top: $padding-16;
margin-bottom: $padding-16;
border: $padding-1 solid var(--gray-200);
border-radius: $border-radius;
overflow: hidden;
display: flex;
flex-wrap: wrap;
label {
display: inline-block;
padding: $padding-8 $padding-16;
border-bottom: $padding-1 transparent;
cursor: pointer;
}
.book-tabs-content {
order: 999; //Move content blocks to the end
width: 100%;
border-top: $padding-1 solid var(--gray-100);
padding: $padding-16;
display: none;
}
input[type="radio"]:checked + label {
border-bottom: $padding-1 solid var(--color-link);
}
input[type="radio"]:checked + label + .book-tabs-content {
display: block;
}
input[type="radio"]:focus + label {
@include outline;
}
}
// {{< columns >}}
.book-columns {
margin-left: -$padding-16;
margin-right: -$padding-16;
> div {
margin: $padding-16 0;
min-width: $body-min-width * 0.66;
padding: 0 $padding-16;
}
}
// {{< button >}}
a.book-btn {
display: inline-block;
font-size: $font-size-14;
color: var(--color-link);
line-height: $padding-16 * 2;
padding: 0 $padding-16;
border: $padding-1 solid var(--color-link);
border-radius: $border-radius;
cursor: pointer;
&:hover {
text-decoration: none;
}
}
// {{< hint >}}
.book-hint {
@each $name, $color in $hint-colors {
&.#{$name} {
border-color: $color;
background-color: rgba($color, 0.1);
}
}
}
}

View File

@ -42,10 +42,30 @@
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-small {
font-size: .875em;
}
.hidden {
display: none;
}
input.toggle {
height: 0;
width: 0;
overflow: hidden;
opacity: 0;
position: absolute;
}
.clearfix::after {
content: "";
display: table;
@ -68,3 +88,9 @@
overflow-x: hidden;
overflow-y: auto;
}
@mixin outline {
outline-style: auto;
outline-color: currentColor;
outline-color: -webkit-focus-ring-color;
}

View File

@ -1,5 +1,6 @@
@import "defaults";
@import "variables";
@import "themes/{{ default "light" .Site.Params.BookTheme }}";
@import "normalize";
@import "utils";

24
assets/clipboard.js Normal file
View File

@ -0,0 +1,24 @@
(function () {
function select(element) {
const selection = window.getSelection();
const range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
document.querySelectorAll("pre code").forEach(code => {
code.addEventListener("click", function (event) {
if (window.getSelection().toString()) {
return;
}
select(code.parentElement);
if (navigator.clipboard) {
navigator.clipboard.writeText(code.parentElement.textContent);
}
});
});
})();

15
assets/manifest.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "{{ .Site.Title }}",
"short_name": "{{ .Site.Title }}",
"start_url": "{{ "./" | relURL }}",
"scope": "{{ "./" | relURL }}",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#000000",
"icons": [
{
"src": "{{ "./favicon.svg" | relURL }}",
"sizes": "512x512"
}
]
}

View File

@ -1,5 +1,5 @@
(function() {
var menu = document.querySelector("aside.book-menu nav");
var menu = document.querySelector("aside .book-menu-content");
addEventListener("beforeunload", function(event) {
localStorage.setItem("menu.scrollTop", menu.scrollTop);
});

6
assets/mermaid.json Normal file
View File

@ -0,0 +1,6 @@
{
"flowchart": {
"useMaxWidth":true
},
"theme": "default"
}

View File

@ -1,10 +0,0 @@
$gray-100: rgba(255, 255, 255, 0.1);
$gray-200: rgba(255, 255, 255, 0.2);
$body-background: #343a40;
$body-font-color: #e9ecef;
$color-link: #84b2ff;
$color-visited-link: #b88dff;
$icon-filter: brightness(0) invert(1);

View File

@ -1,23 +1,34 @@
.book-page {
.markdown {
@for $h from 1 through 6 {
> h#{$h} {
counter-increment: h#{$h};
counter-reset: h#{$h + 1};
$startLevel: 1;
$endLevel: 6;
$content: "";
@for $n from 1 through $h {
$content: $content + 'counter(h#{$n})"."';
}
.book-page .markdown.book-article {
@for $currentLevel from $startLevel through $endLevel {
h#{$currentLevel} {
counter-increment: h#{$currentLevel};
counter-reset: h#{$currentLevel + 1};
&::before {
content: unquote($content) " ";
}
$content: "";
@for $n from $startLevel through $currentLevel {
$content: $content + 'counter(h#{$n})"."';
}
&::before {
content: unquote($content) " ";
}
}
}
}
+ .book-toc nav ul {
list-style: decimal;
.book-toc nav#TableOfContents ul {
counter-reset: item;
li {
counter-increment: item;
&:before {
content: counters(item, ".") ". ";
float: left;
margin-inline-end: $padding-4;
}
}
}

View File

@ -12,15 +12,15 @@
}
:hover::-webkit-scrollbar-thumb {
background: $gray-500;
background: var(--gray-500);
}
// MS
body {
-ms-overflow-style: -ms-autohiding-scrollbar
-ms-overflow-style: -ms-autohiding-scrollbar;
}
// Future
.book-menu nav {
scrollbar-color: transparent $gray-500;
scrollbar-color: transparent var(--gray-500);
}

View File

@ -1,27 +0,0 @@
'use strict';
(function() {
const indexCfg = {{ with i18n "bookSearchConfig" }}
{{ . }};
{{ else }}
{};
{{ end }}
indexCfg.doc = {
id: 'id',
field: ['title', 'content'],
store: ['title', 'href'],
};
const index = FlexSearch.create('balance', indexCfg);
window.bookSearchIndex = index;
{{ range $index, $page := where .Site.Pages "Kind" "in" (slice "page" "section") }}
index.add({
'id': {{ $index }},
'href': '{{ $page.RelPermalink }}',
'title': {{ (partial "docs/title" $page) | jsonify }},
'content': {{ $page.Plain | jsonify }}
});
{{- end -}}
})();

17
assets/search-data.json Normal file
View File

@ -0,0 +1,17 @@
[
{{- $pages := where .Site.Pages "Kind" "in" (slice "page" "section") -}}
{{- $pages = where $pages "Params.bookSearchExclude" "!=" true -}}
{{/* Remove until we know why it does not work, see https://github.com/alex-shpak/hugo-book/issues/528 */}}
{{/*- $pages = where $pages "Content" "not in" (slice nil "") -*/}}
{{- $pages = where $pages "Content" "!=" "" -}}
{{ range $index, $page := $pages }}
{{ if gt $index 0}},{{end}} {
"id": {{ $index }},
"href": "{{ $page.RelPermalink }}",
"title": {{ (partial "docs/title" $page) | jsonify }},
"section": {{ (partial "docs/title" $page.Parent) | jsonify }},
"content": {{ $page.Plain | jsonify }}
}
{{- end -}}
]

View File

@ -1,31 +1,66 @@
'use strict';
{{ $searchDataFile := printf "%s.search-data.js" .Language.Lang }}
{{ $searchData := resources.Get "search-data.js" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify | resources.Fingerprint }}
{{ $searchDataFile := printf "%s.search-data.json" .Language.Lang }}
{{ $searchData := resources.Get "search-data.json" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify | resources.Fingerprint }}
{{ $searchConfig := i18n "bookSearchConfig" | default "{}" }}
(function () {
const searchDataURL = '{{ $searchData.RelPermalink }}';
const indexConfig = Object.assign({{ $searchConfig }}, {
includeScore: true,
useExtendedSearch: true,
fieldNormWeight: 1.5,
threshold: 0.2,
ignoreLocation: true,
keys: [
{
name: 'title',
weight: 0.7
},
{
name: 'content',
weight: 0.3
}
]
});
(function() {
const input = document.querySelector('#book-search-input');
const results = document.querySelector('#book-search-results');
if (!input) {
return
}
input.addEventListener('focus', init);
input.addEventListener('keyup', search);
document.addEventListener('keypress', focusSearchFieldOnKeyPress);
function focusSearchFieldOnKeyPress(e) {
/**
* @param {Event} event
*/
function focusSearchFieldOnKeyPress(event) {
if (event.target.value !== undefined) {
return;
}
if (input === document.activeElement) {
return;
}
const characterPressed = String.fromCharCode(e.charCode);
const characterPressed = String.fromCharCode(event.charCode);
if (!isHotkey(characterPressed)) {
return;
}
input.focus();
e.preventDefault();
event.preventDefault();
}
/**
* @param {String} character
* @returns {Boolean}
*/
function isHotkey(character) {
const dataHotkeys = input.getAttribute('data-hotkeys') || '';
return dataHotkeys.indexOf(character) >= 0;
@ -35,11 +70,13 @@
input.removeEventListener('focus', init); // init once
input.required = true;
loadScript('{{ "flexsearch.min.js" | relURL }}');
loadScript('{{ $searchData.RelPermalink }}', function() {
input.required = false;
search();
});
fetch(searchDataURL)
.then(pages => pages.json())
.then(pages => {
window.bookSearchIndex = new Fuse(pages, indexConfig);
})
.then(() => input.required = false)
.then(search);
}
function search() {
@ -51,25 +88,26 @@
return;
}
const searchHits = window.bookSearchIndex.search(input.value, 10);
searchHits.forEach(function(page) {
const li = document.createElement('li'),
a = li.appendChild(document.createElement('a'));
const searchHits = window.bookSearchIndex.search(input.value).slice(0,10);
searchHits.forEach(function (page) {
const li = element('<li><a href></a><small></small></li>');
const a = li.querySelector('a'), small = li.querySelector('small');
a.href = page.href;
a.textContent = page.title;
a.href = page.item.href;
a.textContent = page.item.title;
small.textContent = page.item.section;
results.appendChild(li);
});
}
function loadScript(src, callback) {
const script = document.createElement('script');
script.defer = true;
script.async = false;
script.src = src;
script.onload = callback;
document.head.appendChild(script);
/**
* @param {String} content
* @returns {Node}
*/
function element(content) {
const div = document.createElement('div');
div.innerHTML = content;
return div.firstChild;
}
})();

7
assets/sw-register.js Normal file
View File

@ -0,0 +1,7 @@
{{- $swJS := resources.Get "sw.js" | resources.ExecuteAsTemplate "sw.js" . -}}
if (navigator.serviceWorker) {
navigator.serviceWorker.register(
"{{ $swJS.RelPermalink }}",
{ scope: "{{ "./" | relURL }}" }
);
}

55
assets/sw.js Normal file
View File

@ -0,0 +1,55 @@
const cacheName = self.location.pathname
const pages = [
{{ if eq .Site.Params.BookServiceWorker "precache" }}
{{ range .Site.AllPages -}}
"{{ .RelPermalink }}",
{{ end -}}
{{ end }}
];
self.addEventListener("install", function (event) {
self.skipWaiting();
caches.open(cacheName).then((cache) => {
return cache.addAll(pages);
});
});
self.addEventListener("fetch", (event) => {
const request = event.request;
if (request.method !== "GET") {
return;
}
/**
* @param {Response} response
* @returns {Promise<Response>}
*/
function saveToCache(response) {
if (cacheable(response)) {
return caches
.open(cacheName)
.then((cache) => cache.put(request, response.clone()))
.then(() => response);
} else {
return response;
}
}
/**
* @param {Error} error
*/
function serveFromCache(error) {
return caches.open(cacheName).then((cache) => cache.match(request.url));
}
/**
* @param {Response} response
* @returns {Boolean}
*/
function cacheable(response) {
return response.type === "basic" && response.ok && !response.headers.has("Content-Disposition")
}
event.respondWith(fetch(request).then(saveToCache).catch(serveFromCache));
});

9
assets/themes/_auto.scss Normal file
View File

@ -0,0 +1,9 @@
:root {
@include theme-light;
}
@media (prefers-color-scheme: dark) {
:root {
@include theme-dark;
}
}

3
assets/themes/_dark.scss Normal file
View File

@ -0,0 +1,3 @@
:root {
@include theme-dark;
}

View File

@ -0,0 +1,3 @@
:root {
@include theme-light;
}

View File

@ -1,3 +1 @@
/* You can override SASS variables here. */
// @import "plugins/dark";

View File

@ -5,7 +5,7 @@ type: docs
# Acerbo datus maxime
{{< columns >}}
{{% columns %}}
## Astris ipse furtiva
Est in vagis et Pittheus tu arge accipiter regia iram vocatur nurus. Omnes ut
@ -19,7 +19,7 @@ modo arsit? Utinam rapta fiducia valuere litora _adicit cursu_, ad facies
Ea _furtique_ risere fratres edidit terrae magis. Colla tam mihi tenebat:
miseram excita suadent es pecudes iam. Concilio _quam_ velatus posset ait quod
nunc! Fragosis suae dextra geruntur functus vulgata.
{{< /columns >}}
{{% /columns %}}
## Tempora nisi nunc

View File

@ -0,0 +1,4 @@
---
bookCollapseSection: true
weight: 20
---

View File

@ -9,5 +9,5 @@ Buttons are styled links that can lead to local page or external link.
{{</* button href="https://github.com/alex-shpak/hugo-book" */>}}Contribute{{</* /button */>}}
```
{{< button relref="/" >}}Get Home{{< /button >}}
{{< button href="https://github.com/alex-shpak/hugo-book" >}}Contribute{{< /button >}}
{{<button relref="/">}}Get Home{{</button>}}
{{<button href="https://github.com/alex-shpak/hugo-book">}}Contribute{{</button>}}

View File

@ -0,0 +1,80 @@
# Columns
Columns help organize shorter pieces of content horizontally for readability.
## Example
```html
{{%/* columns [ratio="1:1"] [class="..."] */%}} <!-- begin columns block -->
# Left Content
Lorem markdownum insigne...
<---> <!-- magic separator, between columns -->
# Mid Content
Lorem markdownum insigne...
<---> <!-- magic separator, between columns -->
# Right Content
Lorem markdownum insigne...
{{%/* /columns */%}}
```
{{% columns %}}
### Left Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
<--->
### Mid Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter!
<--->
### Right Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{% /columns %}}
## Settings size ratio for columns
```html
{{%/* columns ratio="1:2" */%}} <!-- begin columns block -->
## x1 Column
Lorem markdownum insigne...
<---> <!-- magic separator, between columns -->
## x2 Column
Lorem markdownum insigne...
{{%/* /columns */%}}
```
{{% columns ratio="1:2" %}}
### x1 Column
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
<--->
### x2 Column
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter!
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{% /columns %}}

View File

@ -0,0 +1,22 @@
# Details
Details shortcode is a helper for `details` html5 element. It is going to replace `expand` shortcode.
## Example
```tpl
{{%/* details "Title" [open] */%}}
## Markdown content
Lorem markdownum insigne...
{{%/* /details */%}}
```
```tpl
{{%/* details title="Title" open=true */%}}
## Markdown content
Lorem markdownum insigne...
{{%/* /details */%}}
```
{{% details "Title" open %}}
## Markdown content
Lorem markdownum insigne...
{{% /details %}}

View File

@ -4,29 +4,29 @@ Hint shortcode can be used as hint/alerts/notification block.
There are 3 colors to choose: `info`, `warning` and `danger`.
```tpl
{{</* hint [info|warning|danger] */>}}
{{%/* hint [info|warning|danger] */%}}
**Markdown content**
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
{{</* /hint */>}}
{{%/* /hint */%}}
```
## Example
{{< hint info >}}
{{% hint info %}}
**Markdown content**
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
{{< /hint >}}
{{% /hint %}}
{{< hint warning >}}
{{% hint warning %}}
**Markdown content**
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
{{< /hint >}}
{{% /hint %}}
{{< hint danger >}}
{{% hint danger %}}
**Markdown content**
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
{{< /hint >}}
{{% /hint %}}

View File

@ -1,37 +1,31 @@
---
title: KaTeX
---
# KaTeX
KaTeX shortcode let you render math typesetting in markdown document. See [KaTeX](https://katex.org/)
## Example
{{< columns >}}
{{% columns %}}
```latex
{{</* katex [display] [class="text-center"] */>}}
x = \begin{cases}
a &\text{if } b \\
c &\text{if } d
\end{cases}
{{</* /katex */>}}
{{</* katex display=true >}}
f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
{{< /katex */>}}
```
<--->
{{< katex >}}
x = \begin{cases}
a &\text{if } b \\
c &\text{if } d
\end{cases}
{{< katex display=true >}}
f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
{{< /katex >}}
{{< /columns >}}
{{% /columns %}}
## Display Mode Example
Here is some inline example: {{< katex >}}\pi(x){{< /katex >}}, rendered in the same line. And below is `display` example, having `display: block`
{{< katex display >}}
x = \begin{cases}
a &\text{if } b \\
c &\text{if } d
\end{cases}
{{< katex display=true >}}
f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
{{< /katex >}}
Text continues here.

View File

@ -0,0 +1,42 @@
# Mermaid Chart
[MermaidJS](https://mermaid-js.github.io/) is library for generating svg charts and diagrams from text.
{{% hint info %}}
**Override Mermaid initialization config**
To override the [initialization config](https://mermaid-js.github.io/mermaid/#/Setup) for Mermaid,
create a `mermaid.json` file in your `assets` folder!
{{% /hint %}}
## Example
{{% columns %}}
```tpl
{{</* mermaid [class="..."] >}}
stateDiagram-v2
State1: The state with a note
note right of State1
Important information! You can write
notes.
end note
State1 --> State2
note left of State2 : This is the note to the left.
{{< /mermaid */>}}
```
<--->
{{<mermaid>}}
stateDiagram-v2
State1: The state with a note
note right of State1
Important information! You can write
notes.
end note
State1 --> State2
note left of State2 : This is the note to the left.
{{</mermaid>}}
{{% /columns %}}

View File

@ -0,0 +1,16 @@
---
bookCollapseSection: true
bookHidden: true
---
# Section
Section renders pages in section as definition list, using title and description. Optional param `summary` can be used to show or hide page summary
## Example
```tpl
{{</* section [summary] */>}}
```
{{<section summary>}}

View File

@ -0,0 +1,6 @@
# First page
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<!--more-->
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

View File

@ -0,0 +1,6 @@
# Second Page
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<!--more-->
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

View File

@ -3,17 +3,18 @@
Tabs let you organize content by context, for example installation instructions for each supported platform.
```tpl
{{</* tabs "uniqueid" */>}}
{{</* tab "MacOS" */>}} # MacOS Content {{</* /tab */>}}
{{</* tab "Linux" */>}} # Linux Content {{</* /tab */>}}
{{</* tab "Windows" */>}} # Windows Content {{</* /tab */>}}
{{</* tabs "id" */>}}
{{%/* tab "MacOS" */%}} # MacOS Content {{%/* /tab */%}}
{{%/* tab "Linux" */%}} # Linux Content {{%/* /tab */%}}
{{%/* tab "Windows" */%}} # Windows Content {{%/* /tab */%}}
{{</* /tabs */>}}
```
## Example
{{< tabs "uniqueid" >}}
{{< tab "MacOS" >}}
{{< tabs >}}
{{% tab "MacOS" %}}
# MacOS
This is tab **MacOS** content.
@ -22,10 +23,9 @@ Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{< /tab >}}
{{< tab "Linux" >}}
{{% /tab %}}
{{% tab "Linux" %}}
# Linux
This is tab **Linux** content.
@ -34,10 +34,9 @@ Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{< /tab >}}
{{< tab "Windows" >}}
{{% /tab %}}
{{% tab "Windows" %}}
# Windows
This is tab **Windows** content.
@ -46,5 +45,6 @@ Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{< /tab >}}
{{% /tab %}}
{{< /tabs >}}

View File

@ -0,0 +1,41 @@
---
title: Introduction
type: docs
---
# Example of RTL page
{{% columns %}}
## Astris ipse furtiva
Est in vagis et Pittheus tu arge accipiter regia iram vocatur nurus. Omnes ut
olivae sensit **arma sorori** deducit, inesset **crudus**, ego vetuere aliis,
modo arsit? Utinam rapta fiducia valuere litora _adicit cursu_, ad facies
<--->
## Suis quot vota
Ea _furtique_ risere fratres edidit terrae magis. Colla tam mihi tenebat:
miseram excita suadent es pecudes iam. Concilio _quam_ velatus posset ait quod
nunc! Fragosis suae dextra geruntur functus vulgata.
{{% /columns %}}
## Tempora nisi nunc
Lorem **markdownum** emicat gestu. Cannis sol pressit ducta. **Est** Idaei,
tremens ausim se tutaeque, illi ulnis hausit, sed, lumina cutem. Quae avis
sequens!
var panel = ram_design;
if (backup + system) {
file.readPoint = network_native;
sidebar_engine_device(cell_tftp_raster,
dual_login_paper.adf_vci.application_reader_design(
graphicsNvramCdma, lpi_footer_snmp, integer_model));
}
## Locis suis novi cum suoque decidit eadem
Idmoniae ripis, at aves, ali missa adest, ut _et autem_, et ab?

View File

@ -1,79 +0,0 @@
---
title: Введение
type: docs
---
# Стартовая страница на русском языке
{{< columns >}}
## Astris ipse furtiva
Est in vagis et Pittheus tu arge accipiter regia iram vocatur nurus. Omnes ut
olivae sensit **arma sorori** deducit, inesset **crudus**, ego vetuere aliis,
modo arsit? Utinam rapta fiducia valuere litora _adicit cursu_, ad facies
<--->
## Suis quot vota
Ea _furtique_ risere fratres edidit terrae magis. Colla tam mihi tenebat:
miseram excita suadent es pecudes iam. Concilio _quam_ velatus posset ait quod
nunc! Fragosis suae dextra geruntur functus vulgata.
{{< /columns >}}
## Tempora nisi nunc
Lorem **markdownum** emicat gestu. Cannis sol pressit ducta. **Est** Idaei,
tremens ausim se tutaeque, illi ulnis hausit, sed, lumina cutem. Quae avis
sequens!
var panel = ram_design;
if (backup + system) {
file.readPoint = network_native;
sidebar_engine_device(cell_tftp_raster,
dual_login_paper.adf_vci.application_reader_design(
graphicsNvramCdma, lpi_footer_snmp, integer_model));
}
public_keyboard_docking += error.controller_gibibyte_plug.ip(4,
asciiPetaflops, software(supercomputer_compatible_status + 4));
dynamic_disk.indexModeLaptop = bufferTftpReality;
var export_vlog_sequence = trinitron_flowchart + supercomputer_cluster_rj(
-1, toolbar_powerpoint_query, -2 / multiprocessing_impression);
## Locis suis novi cum suoque decidit eadem
Idmoniae ripis, at aves, ali missa adest, ut _et autem_, et ab? Venit spes
versus finis sermonibus patefecit murum nec est sine oculis. _Ille_ inmota
macies domoque caelestia cadit tantummodo scelus procul, corde!
1. Dolentem capi parte rostro alvum habentem pudor
2. Fulgentia sanguine paret
3. E punior consurgit lentus
4. Vox hasta eras micantes
## Facibus pharetrae indetonsusque indulsit sic incurrite foliis
Nefandam et prisci palmas! Blandita cutis flectitur montis macies, te _nati_
Latiis; turbaque inferias. Virginis tibi peracta avidusque facies caper nec, e
at ademptae, mira.
direct *= font(inputScareware(sliHome), crossplatform.byte(
ppl_encryption.excel_e_rte(integratedModelModifier), timeVirtual,
floating_speakers.media_printer(us, yahoo, primaryPhp)));
friendly_metal_flatbed(cd, isoPrimaryStorage(reader), dmaMirrored);
if (parse_flash_cron.metalGif(1, adServiceDevice, utility)) {
adf -= operation_cdma_samba;
imapGif.switch += torrent;
} else {
pmu.disk_captcha = digital_ppp_pci + recursionTransistor(5, dram);
ajax_service += grayscalePythonLock;
google_scroll_capacity = ftp + engine_dslam_sidebar / tape - 1;
}
drive_rw = zipTftp;
var suffix = software_router_extension.dimm_ddr(-5,
kernel_digital_minisite);
Vocavit toto; alas **mitis** maestus in liquidarum ab legi finitimosque dominam
tibi subitus; Orionis vertitur nota. Currere alti etiam seroque cernitis
innumeris miraturus amplectique collo sustinet quemque! Litora ante turba?

View File

@ -5,7 +5,7 @@ type: docs
# 中文索引页
{{< columns >}}
{{% columns %}}
## Astris ipse furtiva
Est in vagis et Pittheus tu arge accipiter regia iram vocatur nurus. Omnes ut
@ -19,7 +19,7 @@ modo arsit? Utinam rapta fiducia valuere litora _adicit cursu_, ad facies
Ea _furtique_ risere fratres edidit terrae magis. Colla tam mihi tenebat:
miseram excita suadent es pecudes iam. Concilio _quam_ velatus posset ait quod
nunc! Fragosis suae dextra geruntur functus vulgata.
{{< /columns >}}
{{% /columns %}}
## Tempora nisi nunc

View File

@ -1,23 +0,0 @@
---
bookCollapseSection: true
weight: 20
---
# Collapsed Level of Menu
## Cognita laeva illo fracta
Lorem markdownum pavent auras, surgit nunc cingentibus libet **Laomedonque que**
est. Pastor [An](http://est.org/ire.aspx) arbor filia foedat, ne [fugit
aliter](http://www.indiciumturbam.org/moramquid.php), per. Helicona illas et
callida neptem est *Oresitrophos* caput, dentibus est venit. Tenet reddite
[famuli](http://www.antro-et.net/) praesentem fortibus, quaeque vis foret si
frondes *gelidos* gravidae circumtulit [inpulit armenta
nativum](http://incurvasustulit.io/illi-virtute.html).
1. Te at cruciabere vides rubentis manebo
2. Maturuit in praetemptat ruborem ignara postquam habitasse
3. Subitarum supplevit quoque fontesque venabula spretis modo
4. Montis tot est mali quasque gravis
5. Quinquennem domus arsit ipse
6. Pellem turis pugnabant locavit

View File

@ -1,45 +0,0 @@
# Columns
Columns help organize shorter pieces of content horizontally for readability.
```html
{{</* columns */>}} <!-- begin columns block -->
# Left Content
Lorem markdownum insigne...
<---> <!-- magic sparator, between columns -->
# Mid Content
Lorem markdownum insigne...
<---> <!-- magic sparator, between columns -->
# Right Content
Lorem markdownum insigne...
{{</* /columns */>}}
```
## Example
{{< columns >}}
## Left Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
<--->
## Mid Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter!
<--->
## Right Content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{< /columns >}}

View File

@ -1,35 +0,0 @@
# Expand
Expand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by clicking on it.
## Example
### Default
```tpl
{{</* expand */>}}
## Markdown content
Lorem markdownum insigne...
{{</* /expand */>}}
```
{{< expand >}}
## Markdown content
Lorem markdownum insigne...
{{< /expand >}}
### With Custom Label
```tpl
{{</* expand "Custom Label" "..." */>}}
## Markdown content
Lorem markdownum insigne...
{{</* /expand */>}}
```
{{< expand "Custom Label" "..." >}}
## Markdown content
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
protulit, sed sed aere valvis inhaesuro Pallas animam: qui _quid_, ignes.
Miseratus fonte Ditis conubia.
{{< /expand >}}

View File

@ -1,38 +0,0 @@
# Mermaid Chart
[Mermaid](https://mermaidjs.github.io/) is library for generating svg charts and diagrams from text.
## Example
{{< columns >}}
```tpl
{{</* mermaid [class="text-center"]*/>}}
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
{{</* /mermaid */>}}
```
<--->
{{< mermaid >}}
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
{{< /mermaid >}}
{{< /columns >}}

View File

@ -1,22 +0,0 @@
---
headless: true
---
- [**Example Site**]({{< relref "/docs/example" >}})
- [Table of Contents]({{< relref "/docs/example/table-of-contents" >}})
- [With ToC]({{< relref "/docs/example/table-of-contents/with-toc" >}})
- [Without ToC]({{< relref "/docs/example/table-of-contents/without-toc" >}})
- [Collapsed]({{< relref "/docs/example/collapsed" >}})
- [3rd]({{< relref "/docs/example/collapsed/3rd-level" >}})
- [4th]({{< relref "/docs/example/collapsed/3rd-level/4th-level" >}})
<br />
- **Shortcodes**
- [Buttons]({{< relref "/docs/shortcodes/buttons" >}})
- [Columns]({{< relref "/docs/shortcodes/columns" >}})
- [Expand]({{< relref "/docs/shortcodes/expand" >}})
- [Hints]({{< relref "/docs/shortcodes/hints" >}})
- [Katex]({{< relref "/docs/shortcodes/katex" >}})
- [Mermaid]({{< relref "/docs/shortcodes/mermaid" >}})
- [Tabs]({{< relref "/docs/shortcodes/tabs" >}})
<br />

View File

@ -1,4 +1,4 @@
# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/theme/hugo-book/
# hugo server --minify --themesDir ../.. --baseURL=http://0.0.0.0:1313/theme/hugo-book/
baseURL = 'https://example.com/'
title = 'Hugo Book'
@ -23,17 +23,18 @@ enableGitInfo = true
[languages]
[languages.en]
languageName = 'English'
contentDir = 'content'
contentDir = 'content.en'
weight = 1
[languages.ru]
languageName = 'Russian'
contentDir = 'content.ru'
[languages.zh]
languageName = 'Chinese'
contentDir = 'content.zh'
weight = 2
[languages.cn]
languageName = 'Chinese'
contentDir = 'content.cn'
[languages.he]
languageName = 'Hebrew'
contentDir = 'content.he'
languageDirection = 'rtl'
weight = 3
[menu]
@ -45,40 +46,52 @@ enableGitInfo = true
[[menu.after]]
name = "Hugo Themes"
url = "https://themes.gohugo.io/hugo-book/"
url = "https://themes.gohugo.io/themes/hugo-book/"
weight = 20
[params]
# (Optional, default light) Sets color theme: light, dark or auto.
# Theme 'auto' switches between dark and light modes based on browser/os preferences
BookTheme = 'light'
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
BookToC = true
# (Optional, default none) Set the path to a logo for the book. If the logo is
# /static/logo.png then the path would be logo.png
# (Optional, default favicon.png) Set the path to a favicon file.
# If the favicon is /static/favicon.png then the path would be favicon.png
# BookFavicon = 'favicon.png'
# (Optional, default none) Set the path to a logo for the book.
# If the logo is /static/logo.png then the path would be logo.png
# BookLogo = 'logo.png'
# (Optional, default none) Set leaf bundle to render as side menu
# When not specified file structure and weights will be used
# BookMenuBundle = '/menu'
# (Optional, default docs) Specify section of content to render as menu
# You can also set value to '*' to render all sections to menu
# (Optional, default docs) Specify root page to render child pages as menu.
# Page is resoled by .GetPage function: https://gohugo.io/functions/getpage/
# For backward compatibility you can set '*' to render all sections to menu. Acts same as '/'
BookSection = 'docs'
# Set source repository location.
# Used for 'Last Modified' and 'Edit this page' links.
BookRepo = 'https://github.com/alex-shpak/hugo-book'
# (Optional, default 'commit') Specifies commit portion of the link to the page's last modified
# commit hash for 'doc' page type.
# Requires 'BookRepo' param.
# Value used to construct a URL consisting of BookRepo/BookCommitPath/<commit-hash>
# Github uses 'commit', Bitbucket uses 'commits'
# BookCommitPath = 'commit'
# Enable "Edit this page" links for 'doc' page type.
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
# Path must point to 'content' directory of repo.
BookEditPath = 'edit/master/exampleSite/content'
# Edit path must point to root directory of repo.
BookEditPath = 'edit/main/exampleSite'
# Configure the date format used on the pages
# - In git information
# - In blog posts
BookDateFormat = 'Jan 2, 2006'
BookDateFormat = 'January 2, 2006'
# (Optional, default true) Enables search function with flexsearch,
# Index is built on fly, therefore it might slowdown your website.
@ -96,3 +109,11 @@ enableGitInfo = true
# Portable links meant to work with text editors and let you write markdown without {{< relref >}} shortcode
# Theme will print warning if page referenced in markdown does not exists.
BookPortableLinks = true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables service worker that caches visited pages and resources for offline use.
BookServiceWorker = true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables a drop-down menu for translations only if a translation is present.
BookTranslatedOnly = false

View File

@ -1,4 +1,4 @@
# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/theme/hugo-book/
# hugo server --minify --themesDir ../.. --baseURL=http://0.0.0.0:1313/theme/hugo-book/
baseURL: https://example.com/
title: Hugo Book
@ -23,15 +23,16 @@ markup:
languages:
en:
languageName: English
contentDir: content
contentDir: content.en
weight: 1
ru:
languageName: Russian
contentDir: content.ru
weight: 2
cn:
zh:
languageName: Chinese
contentDir: content.cn
contentDir: content.zh
weight: 2
he:
languageName: Hebrew
contentDir: content.he
languageDirection: rtl
weight: 3
menu:
@ -41,40 +42,52 @@ menu:
url: "https://github.com/alex-shpak/hugo-book"
weight: 10
- name: "Hugo Themes"
url: "https://themes.gohugo.io/hugo-book/"
url: "https://themes.gohugo.io/themes/hugo-book/"
weight: 20
params:
# (Optional, default light) Sets color theme: light, dark or auto.
# Theme 'auto' switches between dark and light modes based on browser/os preferences
BookTheme: "light"
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
BookToC: true
# (Optional, default none) Set the path to a logo for the book. If the logo is
# /static/logo.png then the path would be logo.png
# (Optional, default favicon.png) Set the path to a favicon file.
# If the favicon is /static/favicon.png then the path would be favicon.png
# BookFavicon: "favicon.png"
# (Optional, default none) Set the path to a logo for the book.
# If the logo is /static/logo.png then the path would be logo.png
# BookLogo: /logo.png
# (Optional, default none) Set leaf bundle to render as side menu
# When not specified file structure and weights will be used
# BookMenuBundle: /menu
# (Optional, default docs) Specify section of content to render as menu
# You can also set value to '*' to render all sections to menu
# (Optional, default docs) Specify root page to render child pages as menu.
# Page is resoled by .GetPage function: https://gohugo.io/functions/getpage/
# For backward compatibility you can set '*' to render all sections to menu. Acts same as '/'
BookSection: docs
# Set source repository location.
# Used for 'Last Modified' and 'Edit this page' links.
BookRepo: https://github.com/alex-shpak/hugo-book
# (Optional, default 'commit') Specifies commit portion of the link to the page's last modified
# commit hash for 'doc' page type.
# Requires 'BookRepo' param.
# Value used to construct a URL consisting of BookRepo/BookCommitPath/<commit-hash>
# Github uses 'commit', Bitbucket uses 'commits'
# BookCommitPath: commit
# Enable "Edit this page" links for 'doc' page type.
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
# Path must point to 'content' directory of repo.
BookEditPath: edit/master/exampleSite/content
# Edit path must point to root directory of repo.
BookEditPath: edit/main/exampleSite
# Configure the date format used on the pages
# - In git information
# - In blog posts
BookDateFormat: "Jan 2, 2006"
BookDateFormat: "January 2, 2006"
# (Optional, default true) Enables search function with flexsearch,
# Index is built on fly, therefore it might slowdown your website.
@ -92,3 +105,11 @@ params:
# Portable links meant to work with text editors and let you write markdown without {{< relref >}} shortcode
# Theme will print warning if page referenced in markdown does not exists.
BookPortableLinks: true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables service worker that caches visited pages and resources for offline use.
BookServiceWorker: true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables a drop-down menu for translations only if a translation is present.
BookTranslatedOnly: false

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"Target":"book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css","MediaType":"text/css","Data":{"Integrity":"sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw="}}

View File

@ -1 +0,0 @@
{"Target":"book.min.63eb88daa545365405ecdbb21033286a325c60a36cfa6d22d21e7c3bc9286941.css","MediaType":"text/css","Data":{"Integrity":"sha256-Y+uI2qVFNlQF7NuyEDMoajJcYKNs+m0i0h58O8koaUE="}}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module github.com/alex-shpak/hugo-book
go 1.16

14
i18n/am.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: ፈልግ
- id: Edit this page
translation: ይህንን ገጽ አስተካክል
- id: Last modified by
translation: መጨረሻ የከለሰው ሰው
- id: Expand
translation: አስፋ
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/bn.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: অনুসন্ধান
- id: Edit this page
translation: এই পৃষ্ঠাটি সম্পাদনা করুন
- id: Last modified by
translation: সর্বশেষ সম্পাদনা করেছেন
- id: Expand
translation: বিস্তৃত করা
- id: bookSearchConfig
translation: '{ cache: true }'

View File

@ -1,3 +1,4 @@
# This should be removed in future, 'cn' is moved to `zh'
- id: Search
translation: 搜索

14
i18n/cs.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Vyhledávat
- id: Edit this page
translation: Upravit tuto stránku
- id: Last modified by
translation: Autor poslední změny
- id: Expand
translation: Rozbalit
- id: bookSearchConfig
translation: '{ cache: true }'

View File

@ -5,7 +5,7 @@
translation: Seite bearbeiten
- id: Last modified by
translation: Zuletzt geändert am
translation: Zuletzt geändert von
- id: Expand
translation: Erweitern

View File

@ -8,7 +8,7 @@
translation: Última modificación por
- id: Expand
translation: Expand
translation: Expandir
- id: bookSearchConfig
translation: '{ cache: true }'

20
i18n/fa.yaml Normal file
View File

@ -0,0 +1,20 @@
- id: Search
translation: جستجو
- id: Edit this page
translation: این صفحه را ویرایش کنید
- id: Last modified by
translation: آخرین بار ویرایش شده توسط
- id: Expand
translation: بسط دادن
- id: Categories
translation: دسته بندی ها
- id: Tags
translation: تگ ها
- id: bookSearchConfig
translation: '{ cache: true, encode: false, rtl: true, split: /\s+/, tokenize: "forward"}'

14
i18n/it.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Cerca
- id: Edit this page
translation: Modifica questa pagina
- id: Last modified by
translation: Ultima modifica di
- id: Expand
translation: Espandi
- id: bookSearchConfig
translation: '{ cache: true }'

20
i18n/ja.yaml Normal file
View File

@ -0,0 +1,20 @@
- id: Search
translation: 検索
- id: Edit this page
translation: このページを編集する
- id: Last modified by
translation: 最終更新者
- id: Expand
translation: 展開
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

View File

@ -1,3 +1,4 @@
# This should be removed in future, 'jp' is moved to `ja'
- id: Search
translation: 検索

14
i18n/nb.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Søk
- id: Edit this page
translation: Rediger denne siden
- id: Last modified by
translation: Sist endret av
- id: Expand
translation: Utvid
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/nl.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Zoeken
- id: Edit this page
translation: Bewerk deze pagina
- id: Last modified by
translation: Laatst gewijzigd door
- id: Expand
translation: Uitbreiden
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/oc.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Recercar
- id: Edit this page
translation: Modificar aquesta pagina
- id: Last modified by
translation: Darrièra modificacion per
- id: Expand
translation: Desplegar
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/pl.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Szukaj
- id: Edit this page
translation: Edytuj stronę
- id: Last modified by
translation: Ostatnia modyfikacja
- id: Expand
translation: Rozwiń
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/pt.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Buscar
- id: Edit this page
translation: Editar página
- id: Last modified by
translation: Última modificação por
- id: Expand
translation: Expandir
- id: bookSearchConfig
translation: '{ cache: true }'

View File

@ -2,10 +2,10 @@
translation: Поиск
- id: Edit this page
translation: Редактировать
translation: Редактировать эту страницу
- id: Last modified by
translation: Last modified by
translation: Последнее изменение от
- id: Expand
translation: Развернуть

14
i18n/tr.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Arama
- id: Edit this page
translation: Bu sayfayı düzenle
- id: Last modified by
translation: Son düzenleyen
- id: Expand
translation: Genişlet
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/uk.yaml Normal file
View File

@ -0,0 +1,14 @@
- id: Search
translation: Пошук
- id: Edit this page
translation: Редагувати цю сторінку
- id: Last modified by
translation: Остання зміна від
- id: Expand
translation: Розгорнути
- id: bookSearchConfig
translation: '{ split: /[^a-zа-яё0-9\w]/gi }'

20
i18n/zh-TW.yaml Normal file
View File

@ -0,0 +1,20 @@
- id: Search
translation: 搜索
- id: Edit this page
translation: 編輯頁面
- id: Last modified by
translation: 最後修改者
- id: Expand
translation: 展開
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

20
i18n/zh.yaml Normal file
View File

@ -0,0 +1,20 @@
- id: Search
translation: 搜索
- id: Edit this page
translation: 编辑本页
- id: Last modified by
translation: 最后修改者
- id: Expand
translation: 展开
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

View File

@ -4,18 +4,31 @@
<head>
{{ partial "docs/html-head" . }}
{{ partial "docs/inject/head" . }}
<style>
.not-found {
text-align: center;
}
.not-found h1 {
margin: .25em 0 0 0;
opacity: .25;
font-size: 40vmin;
}
</style>
</head>
<body>
<main class="flex justify-center">
<main class="flex justify-center not-found">
<div>
<h1>404 Not Found</h1>
<a href="{{ "/" | relURL }}">Go Home</a>
<h1>404</h1>
<h2>Page Not Found</h2>
<h3>
<a href="{{ .Site.Home.RelPermalink }}">{{ .Site.Title }}</a>
</h3>
</div>
</main>
{{ partial "docs/inject/body" . }}
{{ template "_internal/google_analytics_async.html" . }}
</body>
</html>
</html>

View File

@ -0,0 +1,4 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}">
{{ .Text | safeHTML }}
<a class="anchor" href="#{{ .Anchor | safeURL }}">#</a>
</h{{ .Level }}>

View File

@ -6,7 +6,7 @@
{{- define "portable-link" -}}
{{- $destination := .Destination }}
{{- $isRemote := or (in .Destination "://") (strings.HasPrefix .Destination "//") }}
{{- $isRemote := or (in .Destination ":") (strings.HasPrefix .Destination "//") }}
{{- if not $isRemote }}
{{- $url := urls.Parse .Destination }}
{{- $path := strings.TrimSuffix "/_index.md" $url.Path }}

View File

@ -1,16 +1,17 @@
<!DOCTYPE html>
<html lang="{{ .Site.Language.Lang }}">
<html lang="{{ default .Site.Language.Lang .Site.LanguageCode }}" dir="{{ default "ltr" .Site.Language.LanguageDirection }}">
<head>
{{ partial "docs/html-head" . }}
{{ partial "docs/inject/head" . }}
</head>
<body>
<input type="checkbox" class="hidden" id="menu-control" />
<body dir="{{ default "ltr" .Site.Language.LanguageDirection }}">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
{{ template "menu" . }} <!-- Left menu Content -->
<div class="book-menu-content">
{{ template "menu" . }} <!-- Left menu Content -->
</div>
</aside>
<div class="book-page">
@ -34,14 +35,15 @@
{{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
<aside class="book-toc">
{{ template "toc" . }} <!-- Table of Contents -->
<div class="book-toc-content">
{{ template "toc" . }} <!-- Table of Contents -->
</div>
</aside>
{{ end }}
</main>
{{ partial "docs/inject/body" . }}
</body>
</html>
{{ define "menu" }}
@ -52,10 +54,9 @@
{{ partial "docs/header" . }}
{{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
<input type="checkbox" class="hidden" id="toc-control" />
<aside class="hidden clearfix">
{{ template "toc" . }}
</aside>
<aside class="hidden clearfix">
{{ template "toc" . }}
</aside>
{{ end }}
{{ end }}
@ -72,7 +73,7 @@
{{ end }}
{{ define "main" }}
<article class="markdown">
<article class="markdown book-article">
{{- .Content -}}
</article>
{{ end }}

View File

@ -1,7 +1,7 @@
<h2 class="book-brand">
<a href="{{ .Site.BaseURL | relLangURL }}">
<a class="flex align-center" href="{{ cond (not .Site.Home.File) .Sites.Default.Home.RelPermalink .Site.Home.RelPermalink }}">
{{- with .Site.Params.BookLogo -}}
<img src="{{ . | relURL }}" alt="Logo" />
<img src="{{ . | relURL }}" alt="Logo" class="book-icon" />
{{- end -}}
<span>{{ .Site.Title }}</span>
</a>

View File

@ -0,0 +1,6 @@
<!--
Returns formatted date.
Usage: partial "docs/date" (dict "Date" .Date "Format" .Site.Params.BookDateFormat)
-->
{{- $format := default "January 2, 2006" .Format -}}
{{- return (time.Format $format .Date) -}}

View File

@ -1,13 +1,10 @@
<div class="flex justify-between">
{{ if .Site.IsMultiLingual }}
{{ partial "docs/languages" . }}
{{ end }}
<div class="flex flex-wrap justify-between">
{{ if and .GitInfo .Site.Params.BookRepo }}
<div>
{{ $date := .GitInfo.AuthorDate.Local.Format (default "January 2, 2006" .Site.Params.BookDateFormat) }}
<a class="flex align-center" href="{{ .Site.Params.BookRepo }}/commit/{{ .GitInfo.Hash }}" title='{{ i18n "Last modified by" }} {{ .GitInfo.AuthorName }} | {{ $date }}' target="_blank" rel="noopener">
<img src="{{ "svg/calendar.svg" | relURL }}" class="book-icon" alt="Calendar" />
{{- $date := partial "docs/date" (dict "Date" .GitInfo.AuthorDate.Local "Format" .Site.Params.BookDateFormat) -}}
<a class="flex align-center" href="{{ partial "docs/links/commit" . }}" title='{{ i18n "Last modified by" }} {{ .GitInfo.AuthorName }} | {{ $date }}' target="_blank" rel="noopener">
<img src="{{ "svg/calendar.svg" | relURL }}" class="book-icon" alt="" />
<span>{{ $date }}</span>
</a>
</div>
@ -15,10 +12,16 @@
{{ if and .File .Site.Params.BookRepo .Site.Params.BookEditPath }}
<div>
<a class="flex align-center" href="{{ .Site.Params.BookRepo }}/{{ .Site.Params.BookEditPath }}/{{ replace .File.Path "\\" "/" }}" target="_blank" rel="noopener">
<img src="{{ "svg/edit.svg" | relURL }}" class="book-icon" alt="Edit" />
<a class="flex align-center" href="{{ partial "docs/links/edit" . }}" target="_blank" rel="noopener">
<img src="{{ "svg/edit.svg" | relURL }}" class="book-icon" alt="" />
<span>{{ i18n "Edit this page" }}</span>
</a>
</div>
{{ end }}
</div>
{{ $script := resources.Get "clipboard.js" | resources.Minify }}
{{ with $script.Content }}
<script>{{ . | safeJS }}</script>
{{ end }}

View File

@ -3,9 +3,11 @@
<img src="{{ "svg/menu.svg" | relURL }}" class="book-icon" alt="Menu" />
</label>
<strong>{{ partial "docs/title" . }}</strong>
<h3>{{ partial "docs/title" . }}</h3>
<label for="toc-control">
{{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
<img src="{{ "svg/toc.svg" | relURL }}" class="book-icon" alt="Table of Contents" />
{{ end }}
</label>
</div>

View File

@ -0,0 +1 @@
<link rel="icon" href="{{ .Site.Params.BookFavicon | default "favicon.png" | relURL }}" >

View File

@ -0,0 +1 @@
{{ partial "docs/title" . }} | {{ .Site.Title -}}

View File

@ -1,26 +1,46 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="{{ default .Summary .Description }}">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark">
{{- with .Page.Params.BookHref -}}
<meta http-equiv="Refresh" content="0; url='{{ . }}'" />
{{- end -}}
{{- template "_internal/opengraph.html" . -}}
<title>{{ partial "docs/title" . }} | {{ .Site.Title -}}</title>
<link rel="icon" href="{{ "favicon.png" | relURL }}" type="image/x-icon">
<title>{{ partial "docs/html-head-title" . }}</title>
{{ partial "docs/html-head-favicon" . }}
{{- $manifest := resources.Get "manifest.json" | resources.ExecuteAsTemplate "manifest.json" . }}
<link rel="manifest" href="{{ $manifest.RelPermalink }}">
<link rel="canonical" href="{{ .Permalink }}">
{{- range .Translations }}
<link rel="alternate" hreflang="{{ default .Site.LanguageCode .Language.Lang }}" href="{{ .Permalink }}" title="{{ partial "docs/title" . }}">
{{- end -}}
<!-- Theme stylesheet, you can customize scss by creating `assets/custom.scss` in your website -->
{{- $styles := resources.Get "book.scss" | resources.ExecuteAsTemplate "book.scss" . | resources.ToCSS | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $styles.RelPermalink }}" integrity="{{ $styles.Data.Integrity }}">
{{- $styles := resources.Get "book.scss" | resources.ExecuteAsTemplate "book.scss" . | css.Sass | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $styles.RelPermalink }}" {{ template "integrity" $styles }}>
{{- if default true .Site.Params.BookSearch -}}
{{- $searchJSFile := printf "%s.search.js" .Language.Lang }}
{{- $searchJS := resources.Get "search.js" | resources.ExecuteAsTemplate $searchJSFile . | resources.Minify | resources.Fingerprint }}
<script defer src="{{ "fuse.min.js" | relURL }}"></script>
<script defer src="{{ $searchJS.RelPermalink }}" {{ template "integrity" $searchJS }}></script>
{{ end -}}
{{ if default true .Site.Params.BookSearch }}
{{- $searchJSFile := printf "%s.search.js" .Language.Lang -}}
{{- $searchJS := resources.Get "search.js" | resources.ExecuteAsTemplate $searchJSFile . | resources.Minify | resources.Fingerprint }}
<script defer src="{{ $searchJS.RelPermalink }}" integrity="{{ $searchJS.Data.Integrity }}"></script>
{{ end }}
{{- if .Site.Params.BookServiceWorker -}}
{{- $swJS := resources.Get "sw-register.js" | resources.ExecuteAsTemplate "sw.js" . | resources.Minify | resources.Fingerprint }}
<script defer src="{{ $swJS.RelPermalink }}" {{ template "integrity" $swJS }}></script>
{{ end -}}
{{- template "_internal/google_analytics_async.html" . -}}
{{- template "_internal/google_analytics.html" . -}}
<!-- RSS -->
{{ with .OutputFormats.Get "rss" -}}
{{- with .OutputFormats.Get "rss" -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
@ -28,3 +48,9 @@
Made with Book Theme
https://github.com/alex-shpak/hugo-book
{{ "-->" | safeHTML }}
{{- define "integrity" -}}
{{- if (urls.Parse .Permalink).Host -}}
integrity="{{ .Data.Integrity }}" crossorigin="anonymous"
{{- end -}}
{{- end -}}

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