aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Shpak <alex-shpak@users.noreply.github.com>2020-01-24 00:07:47 +0100
committerAlex Shpak <alex-shpak@users.noreply.github.com>2020-01-24 00:07:56 +0100
commitba5d38ad4427bcda21a4cc57689464ed58d8b9a0 (patch)
tree12964eb240f749baa7276369265c89a04765d14e
parent2acd6ab280390057bf6d68a801a1be0f09dbd0b9 (diff)
Rework of main template, adds options for more fine customisation
-rw-r--r--README.md8
-rw-r--r--archetypes/docs.md4
-rw-r--r--assets/_defaults.scss5
-rw-r--r--assets/_main.scss43
-rw-r--r--assets/_print.scss16
-rw-r--r--assets/_shortcodes.scss4
-rw-r--r--assets/_utils.scss6
-rw-r--r--exampleSite/config.toml8
-rw-r--r--exampleSite/config.yaml8
-rw-r--r--exampleSite/content/_index.md2
-rw-r--r--exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content2
-rw-r--r--exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json2
-rw-r--r--exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.content2
-rw-r--r--exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.json2
-rw-r--r--i18n/cn.yaml3
-rw-r--r--i18n/en.yaml3
-rw-r--r--i18n/es.yaml3
-rw-r--r--i18n/jp.yaml3
-rw-r--r--i18n/ko.yaml3
-rw-r--r--i18n/ru.yaml5
-rw-r--r--layouts/_default/baseof.html61
-rw-r--r--layouts/partials/docs/brand.html2
-rw-r--r--layouts/partials/docs/footer.html29
-rw-r--r--layouts/partials/docs/header.html11
-rw-r--r--layouts/partials/docs/menu.html6
-rw-r--r--layouts/partials/docs/mobile-header.html8
-rw-r--r--layouts/partials/docs/post-meta.html6
-rw-r--r--layouts/partials/docs/taxonomy.html2
-rw-r--r--layouts/partials/docs/toc.html11
-rw-r--r--layouts/shortcodes/expand.html2
-rw-r--r--static/svg/toc.svg1
31 files changed, 161 insertions, 110 deletions
diff --git a/README.md b/README.md
index f872c53..5ad9a19 100644
--- a/README.md
+++ b/README.md
@@ -200,7 +200,7 @@ bookCollapseSection = true
bookHidden = true
# (Optional) Set how many levels of ToC to show. use 'false' to hide ToC completely
-bookToC = 3
+bookToC = true
# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages.
bookComments = true
@@ -329,6 +329,12 @@ x = \begin{cases}
{{< /katex >}}
```
+## Versioning
+
+Theme follows 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.
+
## Contributing
### [Extra credits to contributors](https://github.com/alex-shpak/hugo-book/graphs/contributors)
diff --git a/archetypes/docs.md b/archetypes/docs.md
index 04a6fd8..7e5e24b 100644
--- a/archetypes/docs.md
+++ b/archetypes/docs.md
@@ -2,6 +2,8 @@
title: "{{ .Name | humanize | title }}"
weight: 1
# bookFlatSection: false
-# bookToc: 6
+# bookToc: true
# bookHidden: false
+# bookCollapseSection: false
+# bookComments: true
---
diff --git a/assets/_defaults.scss b/assets/_defaults.scss
index 354af74..af7aa24 100644
--- a/assets/_defaults.scss
+++ b/assets/_defaults.scss
@@ -31,15 +31,14 @@ $body-background: white !default;
$body-font-color: $gray-800 !default;
$body-font-weight: normal !default;
-$body-min-width: 20rem !default;
+$body-min-width: 25rem !default;
$container-max-width: 80rem !default;
$header-height: 3.5rem !default;
$menu-width: 16rem !default;
$toc-width: 16rem !default;
-$md-breakpoint: $menu-width + $body-min-width * 1.25 + $toc-width !default;
-$sm-breakpoint: $menu-width + $body-min-width !default;
+$mobile-breakpoint: $menu-width + $body-min-width + $toc-width !default;
// Hint colors
$hint-colors: (
diff --git a/assets/_main.scss b/assets/_main.scss
index 03bc298..1be9960 100644
--- a/assets/_main.scss
+++ b/assets/_main.scss
@@ -47,11 +47,6 @@ img {
vertical-align: baseline;
}
-main {
- display: flex;
- flex-direction: row-reverse;
-}
-
aside nav ul {
padding: 0;
margin: 0;
@@ -162,8 +157,12 @@ ul.pagination {
}
.book-header {
- margin-bottom: $padding-16;
display: none;
+ margin-bottom: $padding-16;
+
+ label {
+ line-height: 0;
+ }
}
.book-search {
@@ -230,7 +229,6 @@ ul.pagination {
}
.book-footer {
- display: flex;
padding-top: $padding-16;
font-size: $font-size-14;
@@ -272,7 +270,7 @@ ul.pagination {
}
img {
- opacity: .1;
+ opacity: 0.1;
}
li.active img {
@@ -298,46 +296,41 @@ ul.pagination {
// Responsive styles
aside nav,
.book-page,
+.book-header aside,
.markdown {
transition: 0.2s ease-in-out;
transition-property: transform, margin, opacity;
will-change: transform, margin;
}
-@media screen and (max-width: $md-breakpoint) {
+@media screen and (max-width: $mobile-breakpoint) {
.book-menu {
margin-left: -$menu-width;
font-size: $font-size-base;
}
+
.book-toc {
- margin-right: -$toc-width;
- font-size: $font-size-base;
+ display: none;
}
.book-header {
- display: flex;
+ display: block;
}
- #menu-control:checked ~ main {
- .book-menu #BookMenu,
+ #menu-control:checked + main {
+ .book-menu nav,
.book-page {
transform: translateX($menu-width);
}
+
+ .book-header aside,
.markdown {
opacity: 0.25;
}
- .book-header #menu-control {
- transform: rotate(90deg);
- }
}
- #toc-control:checked ~ main {
- aside #TableOfContents,
- .book-page {
- transform: translateX(-$menu-width);
- }
- .markdown {
- opacity: 0.25;
- }
+
+ #toc-control:checked + aside {
+ display: block;
}
}
diff --git a/assets/_print.scss b/assets/_print.scss
index 6acd75e..8ae2901 100644
--- a/assets/_print.scss
+++ b/assets/_print.scss
@@ -1,19 +1,17 @@
@media print {
.book-menu,
- .book-footer {
+ .book-footer,
+ .book-toc {
display: none;
}
- main {
+ .book-header,
+ .book-header aside {
display: block;
}
- .book-toc {
- flex: none;
-
- nav {
- position: relative;
- width: auto;
- }
+ main {
+ // Fix for https://bugzilla.mozilla.org/show_bug.cgi?id=939897
+ display: block !important;
}
}
diff --git a/assets/_shortcodes.scss b/assets/_shortcodes.scss
index 451f8b8..97b7dc3 100644
--- a/assets/_shortcodes.scss
+++ b/assets/_shortcodes.scss
@@ -77,8 +77,7 @@
> div {
margin: $padding-16 0;
- // max-width: 50%;
- min-width: $body-min-width * 0.66;
+ min-width: $body-min-width / 2;
padding: 0 $padding-16;
}
}
@@ -102,7 +101,6 @@ a.book-btn {
&.#{$name} {
border-left-color: $color;
background-color: rgba($color, 0.1);
- // background-color: $gray-100;
}
};
}
diff --git a/assets/_utils.scss b/assets/_utils.scss
index 175a4ad..6162aba 100644
--- a/assets/_utils.scss
+++ b/assets/_utils.scss
@@ -46,6 +46,12 @@
display: none;
}
+.clearfix::after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
@mixin spin($duration) {
animation: spin $duration ease infinite;
@keyframes spin {
diff --git a/exampleSite/config.toml b/exampleSite/config.toml
index 8fe0667..da06bec 100644
--- a/exampleSite/config.toml
+++ b/exampleSite/config.toml
@@ -37,10 +37,10 @@ enableGitInfo = true
weight = 3
[params]
- # (Optional, default 6) Set how many table of contents levels to be showed on page.
- # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)
- # You can also specify this parameter per page in front matter
- BookToC = 3
+ # (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
diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
index 8362ecb..0e56f53 100644
--- a/exampleSite/config.yaml
+++ b/exampleSite/config.yaml
@@ -35,10 +35,10 @@ languages:
weight: 3
params:
- # (Optional, default 6) Set how many table of contents levels to be showed on page.
- # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)
- # You can also specify this parameter per page in front matter
- BookToC: 3
+ # (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
diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md
index baffdb5..ba76b4d 100644
--- a/exampleSite/content/_index.md
+++ b/exampleSite/content/_index.md
@@ -3,6 +3,8 @@ title: Introduction
type: docs
---
+# Acerbo datus maxime
+
{{< columns >}}
## Astris ipse furtiva
diff --git a/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content b/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content
index 2891cf5..879fb90 100644
--- a/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content
+++ b/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content
@@ -1 +1 @@
-/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:1 1 auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.hidden{display:none}html{font-size:16px;letter-spacing:.33px;scroll-behavior:smooth}html,body{min-width:20rem;overflow-x:hidden}body{color:#343a40;background:#fff;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:#05b}a:visited{color:#8440f1}img{vertical-align:baseline}main{display:flex;flex-direction:row-reverse}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-left:1rem}.levels-1 ul ul,.levels-2 ul ul ul,.levels-3 ul ul ul ul,.levels-4 ul ul ul ul ul,.levels-5 ul ul ul ul ul ul,.levels-6 ul ul ul ul ul ul ul{display:none}ul.pagination{display:flex;justify-content:center;list-style-type:none}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:none}.book-brand{margin-top:0}.book-brand img{height:1.5em;width:auto;vertical-align:middle;margin-right:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a{color:inherit}.book-menu a.active{color:#05b}.book-section-flat{margin-bottom:2rem}.book-section-flat:not(:first-child){margin-top:2rem}.book-section-flat>a,.book-section-flat>span{font-weight:bolder}.book-section-flat>ul{padding-left:0}.book-page{min-width:20rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{margin-bottom:1rem;display:none}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search::after{display:block;content:"";clear:both}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:#f8f9fa;color:#343a40}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;margin:.5rem;right:0;top:0;width:1rem;height:1rem;border:1px solid transparent;border-top-color:#343a40;border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{display:flex;padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;margin-right:.5rem}.book-comments{margin-top:1rem}.book-languages{position:relative;overflow:visible;padding:1rem;margin:-1rem}.book-languages:hover .book-languages-list{display:block}.book-languages .book-languages-list{display:none;position:absolute;bottom:0;left:0;padding:.5rem 0;background:#fff;box-shadow:0 0 .25rem rgba(0,0,0,.1)}.book-languages .book-languages-list li{padding:.5rem 1rem;white-space:nowrap}.book-languages .book-languages-list img{opacity:.1}.book-languages .book-languages-list li.active img{opacity:1}.book-languages .book-languages-list a{color:inherit}.book-languages ul{margin:0;padding:0;list-style:none}.book-home{padding:1rem}aside nav,.book-page,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity;will-change:transform,margin}@media screen and (max-width:57rem){.book-menu{margin-left:-16rem;font-size:16px}.book-toc{margin-right:-16rem;font-size:16px}.book-header{display:flex}#menu-control:checked~main .book-menu #BookMenu,#menu-control:checked~main .book-page{transform:translateX(16rem)}#menu-control:checked~main .markdown{opacity:.25}#menu-control:checked~main .book-header #menu-control{transform:rotate(90deg)}#toc-control:checked~main aside #TableOfContents,#toc-control:checked~main .book-page{transform:translateX(-16rem)}#toc-control:checked~main .markdown{opacity:.25}}@media screen and (min-width:80rem){.book-page,.book-menu nav,.book-toc nav{padding:2rem 1rem}}@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"),url(fonts/roboto-v19-latin-300italic.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-regular.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-700.woff)format("woff")}@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"),url(fonts/roboto-mono-v6-latin-regular.woff)format("woff")}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer{display:none}main{display:block}.book-toc{flex:none}.book-toc nav{position:relative;width:auto}}.markdown{line-height:1.6em}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1em;margin-top:1.5em;margin-bottom:1rem}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown img{max-width:100%}.markdown code{padding:0 .25rem;background:#e9ecef;border-radius:.15rem;font-size:.875em}.markdown pre{padding:1rem;background:#f8f9fa;border-radius:.15rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-left:.25rem solid #e9ecef;border-radius:.15rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid #e9ecef}.markdown table tr:nth-child(2n){background:#f8f9fa}.markdown hr{height:1px;border:none;background:#e9ecef}.markdown ul,.markdown ol{padding-left:2rem}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-left:2rem}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-right:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-left:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden}.book-expand .book-expand-head{background:#f8f9fa;padding:.5rem 1rem;cursor:pointer}.book-expand .book-expand-content{display:none;padding:1rem}.book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden;display:flex;flex-wrap:wrap}.book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid #f8f9fa;padding:1rem;display:none}.book-tabs input[type=radio]:checked+label{border-bottom:1px solid #05b}.book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.book-columns{margin-left:-1rem;margin-right:-1rem}.book-columns>div{margin:1rem 0;min-width:13.2rem;padding:0 1rem}a.book-btn{display:inline-block;color:#05b!important;text-decoration:none!important;border:1px solid #05b;border-radius:.15rem;padding:.25rem 1rem;margin-top:.5rem;margin-bottom:.5rem;cursor:pointer}.book-hint.info{border-left-color:#6bf;background-color:rgba(102,187,255,.1)}.book-hint.warning{border-left-color:#fd6;background-color:rgba(255,221,102,.1)}.book-hint.danger{border-left-color:#f66;background-color:rgba(255,102,102,.1)} \ No newline at end of file
+/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:1 1 auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.hidden{display:none}.clearfix::after{content:"";display:table;clear:both}html{font-size:16px;letter-spacing:.33px;scroll-behavior:smooth}html,body{min-width:25rem;overflow-x:hidden}body{color:#343a40;background:#fff;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:#05b}a:visited{color:#8440f1}img{vertical-align:baseline}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-left:1rem}.levels-1 ul ul,.levels-2 ul ul ul,.levels-3 ul ul ul ul,.levels-4 ul ul ul ul ul,.levels-5 ul ul ul ul ul ul,.levels-6 ul ul ul ul ul ul ul{display:none}ul.pagination{display:flex;justify-content:center;list-style-type:none}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:none}.book-brand{margin-top:0}.book-brand img{height:1.5em;width:auto;vertical-align:middle;margin-right:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a{color:inherit}.book-menu a.active{color:#05b}.book-section-flat{margin-bottom:2rem}.book-section-flat:not(:first-child){margin-top:2rem}.book-section-flat>a,.book-section-flat>span{font-weight:bolder}.book-section-flat>ul{padding-left:0}.book-page{min-width:25rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{display:none;margin-bottom:1rem}.book-header label{line-height:0}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search::after{display:block;content:"";clear:both}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:#f8f9fa;color:#343a40}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;margin:.5rem;right:0;top:0;width:1rem;height:1rem;border:1px solid transparent;border-top-color:#343a40;border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;margin-right:.5rem}.book-comments{margin-top:1rem}.book-languages{position:relative;overflow:visible;padding:1rem;margin:-1rem}.book-languages:hover .book-languages-list{display:block}.book-languages .book-languages-list{display:none;position:absolute;bottom:0;left:0;padding:.5rem 0;background:#fff;box-shadow:0 0 .25rem rgba(0,0,0,.1)}.book-languages .book-languages-list li{padding:.5rem 1rem;white-space:nowrap}.book-languages .book-languages-list img{opacity:.1}.book-languages .book-languages-list li.active img{opacity:1}.book-languages .book-languages-list a{color:inherit}.book-languages ul{margin:0;padding:0;list-style:none}.book-home{padding:1rem}aside nav,.book-page,.book-header aside,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity;will-change:transform,margin}@media screen and (max-width:57rem){.book-menu{margin-left:-16rem;font-size:16px}.book-toc{display:none}.book-header{display:block}#menu-control:checked+main .book-menu nav,#menu-control:checked+main .book-page{transform:translateX(16rem)}#menu-control:checked+main .book-header aside,#menu-control:checked+main .markdown{opacity:.25}#toc-control:checked+aside{display:block}}@media screen and (min-width:80rem){.book-page,.book-menu nav,.book-toc nav{padding:2rem 1rem}}@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"),url(fonts/roboto-v19-latin-300italic.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-regular.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-700.woff)format("woff")}@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"),url(fonts/roboto-mono-v6-latin-regular.woff)format("woff")}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer,.book-toc{display:none}.book-header,.book-header aside{display:block}main{display:block!important}}.markdown{line-height:1.6em}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1em;margin-top:1.5em;margin-bottom:1rem}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown img{max-width:100%}.markdown code{padding:0 .25rem;background:#e9ecef;border-radius:.15rem;font-size:.875em}.markdown pre{padding:1rem;background:#f8f9fa;border-radius:.15rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-left:.25rem solid #e9ecef;border-radius:.15rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid #e9ecef}.markdown table tr:nth-child(2n){background:#f8f9fa}.markdown hr{height:1px;border:none;background:#e9ecef}.markdown ul,.markdown ol{padding-left:2rem}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-left:2rem}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-right:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-left:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden}.book-expand .book-expand-head{background:#f8f9fa;padding:.5rem 1rem;cursor:pointer}.book-expand .book-expand-content{display:none;padding:1rem}.book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden;display:flex;flex-wrap:wrap}.book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid #f8f9fa;padding:1rem;display:none}.book-tabs input[type=radio]:checked+label{border-bottom:1px solid #05b}.book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.book-columns{margin-left:-1rem;margin-right:-1rem}.book-columns>div{margin:1rem 0;min-width:12.5rem;padding:0 1rem}a.book-btn{display:inline-block;color:#05b!important;text-decoration:none!important;border:1px solid #05b;border-radius:.15rem;padding:.25rem 1rem;margin-top:.5rem;margin-bottom:.5rem;cursor:pointer}.book-hint.info{border-left-color:#6bf;background-color:rgba(102,187,255,.1)}.book-hint.warning{border-left-color:#fd6;background-color:rgba(255,221,102,.1)}.book-hint.danger{border-left-color:#f66;background-color:rgba(255,102,102,.1)} \ No newline at end of file
diff --git a/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json b/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json
index d6c7c09..a7f5f84 100644
--- a/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json
+++ b/exampleSite/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json
@@ -1 +1 @@
-{"Target":"book.min.327a7346ed65bd45e7889adff447f01f212a1b54dbf3c12139d26b63b077108f.css","MediaType":"text/css","Data":{"Integrity":"sha256-MnpzRu1lvUXniJrf9EfwHyEqG1Tb88EhOdJrY7B3EI8="}} \ No newline at end of file
+{"Target":"book.min.232a19b11d60be2ef65e25692295b4ba14eb16031dc765d576d62c9a1f4312e6.css","MediaType":"text/css","Data":{"Integrity":"sha256-IyoZsR1gvi72XiVpIpW0uhTrFgMdx2XVdtYsmh9DEuY="}} \ No newline at end of file
diff --git a/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.content b/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.content
index 4b30bb5..9ea1ba6 100644
--- a/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.content
+++ b/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.content
@@ -1 +1 @@
-/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:1 1 auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.hidden{display:none}html{font-size:16px;letter-spacing:.33px;scroll-behavior:smooth}html,body{min-width:20rem;overflow-x:hidden}body{color:#343a40;background:#fff;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:#05b}a:visited{color:#8440f1}img{vertical-align:baseline}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-left:1rem}.levels-1 ul ul,.levels-2 ul ul ul,.levels-3 ul ul ul ul,.levels-4 ul ul ul ul ul,.levels-5 ul ul ul ul ul ul,.levels-6 ul ul ul ul ul ul ul{display:none}ul.pagination{display:flex;justify-content:center;list-style-type:none}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:none}.book-brand{margin-top:0}.book-brand img{height:1.5em;width:auto;vertical-align:middle;margin-right:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a{color:inherit}.book-menu a.active{color:#05b}.book-section-flat{margin-bottom:2rem}.book-section-flat:not(:first-child){margin-top:2rem}.book-section-flat>a,.book-section-flat>span{font-weight:bolder}.book-section-flat>ul{padding-left:0}.book-page{min-width:20rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{margin-bottom:1rem;display:none}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search::after{display:block;content:"";clear:both}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:#f8f9fa;color:#343a40}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;margin:.5rem;right:0;top:0;width:1rem;height:1rem;border:1px solid transparent;border-top-color:#343a40;border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{display:flex;padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;margin-right:.5rem}#disqus_thread{padding-top:1rem}.book-languages{position:relative;overflow:visible;padding:1rem;margin:-1rem}.book-languages:hover .book-languages-list{display:block}.book-languages .book-languages-list{display:none;position:absolute;bottom:0;left:0;padding:.5rem 0;background:#fff;box-shadow:0 0 .25rem rgba(0,0,0,.1)}.book-languages .book-languages-list li{padding:.5rem 1rem;white-space:nowrap}.book-languages .book-languages-list img{opacity:.1}.book-languages .book-languages-list li.active img{opacity:1}.book-languages .book-languages-list a{color:inherit}.book-languages ul{margin:0;padding:0;list-style:none}.book-home{padding:1rem}aside nav,.book-page,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity;will-change:transform,margin}@media screen and (max-width:57rem){.book-menu{margin-left:-16rem;font-size:16px}.book-toc{margin-right:-16rem;font-size:16px}.book-header{display:flex}#menu-control:checked~main .book-menu #BookMenu,#menu-control:checked~main .book-page{transform:translateX(16rem)}#menu-control:checked~main .markdown{opacity:.25}#menu-control:checked~main .book-header #menu-control{transform:rotate(90deg)}#toc-control:checked~main aside #TableOfContents,#toc-control:checked~main .book-page{transform:translateX(-16rem)}#toc-control:checked~main .markdown{opacity:.25}}@media screen and (min-width:80rem){.book-page,.book-menu nav,.book-toc nav{padding:2rem 1rem}}@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"),url(fonts/roboto-v19-latin-300italic.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-regular.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-700.woff)format("woff")}@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"),url(fonts/roboto-mono-v6-latin-regular.woff)format("woff")}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer{display:none}main{flex-direction:column-reverse}.book-toc{flex:none}.book-toc nav{position:relative;width:auto}}.markdown{line-height:1.6em}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1em;margin-top:1.5em;margin-bottom:1rem}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown img{max-width:100%}.markdown code{padding:0 .25rem;background:#e9ecef;border-radius:.15rem;font-size:.875em}.markdown pre{padding:1rem;background:#f8f9fa;border-radius:.15rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-left:.25rem solid #e9ecef;border-radius:.15rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid #e9ecef}.markdown table tr:nth-child(2n){background:#f8f9fa}.markdown hr{height:1px;border:none;background:#e9ecef}.markdown ul,.markdown ol{padding-left:2rem}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-left:2rem}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-right:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-left:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden}.book-expand .book-expand-head{background:#f8f9fa;padding:.5rem 1rem;cursor:pointer}.book-expand .book-expand-content{display:none;padding:1rem}.book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden;display:flex;flex-wrap:wrap}.book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid #f8f9fa;padding:1rem;display:none}.book-tabs input[type=radio]:checked+label{border-bottom:1px solid #05b}.book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.book-columns{margin-left:-1rem;margin-right:-1rem}.book-columns>div{margin:1rem 0;min-width:13.2rem;padding:0 1rem}a.book-btn{display:inline-block;color:#05b!important;text-decoration:none!important;border:1px solid #05b;border-radius:.15rem;padding:.25rem 1rem;margin-top:.5rem;margin-bottom:.5rem;cursor:pointer}.book-hint.info{border-left-color:#6bf;background-color:rgba(102,187,255,.1)}.book-hint.warning{border-left-color:#fd6;background-color:rgba(255,221,102,.1)}.book-hint.danger{border-left-color:#f66;background-color:rgba(255,102,102,.1)} \ No newline at end of file
+/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:1 1 auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.hidden{display:none}.clearfix::after{content:"";display:table;clear:both}html{font-size:16px;letter-spacing:.33px;scroll-behavior:smooth}html,body{min-width:25rem;overflow-x:hidden}body{color:#343a40;background:#fff;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:#05b}a:visited{color:#8440f1}img{vertical-align:baseline}label{line-height:0}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-left:1rem}.levels-1 ul ul,.levels-2 ul ul ul,.levels-3 ul ul ul ul,.levels-4 ul ul ul ul ul,.levels-5 ul ul ul ul ul ul,.levels-6 ul ul ul ul ul ul ul{display:none}ul.pagination{display:flex;justify-content:center;list-style-type:none}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:none}.book-brand{margin-top:0}.book-brand img{height:1.5em;width:auto;vertical-align:middle;margin-right:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a{color:inherit}.book-menu a.active{color:#05b}.book-section-flat{margin-bottom:2rem}.book-section-flat:not(:first-child){margin-top:2rem}.book-section-flat>a,.book-section-flat>span{font-weight:bolder}.book-section-flat>ul{padding-left:0}.book-page{min-width:25rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{display:none;margin-bottom:1rem}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search::after{display:block;content:"";clear:both}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:#f8f9fa;color:#343a40}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;margin:.5rem;right:0;top:0;width:1rem;height:1rem;border:1px solid transparent;border-top-color:#343a40;border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;margin-right:.5rem}.book-comments{margin-top:1rem}.book-languages{position:relative;overflow:visible;padding:1rem;margin:-1rem}.book-languages:hover .book-languages-list{display:block}.book-languages .book-languages-list{display:none;position:absolute;bottom:0;left:0;padding:.5rem 0;background:#fff;box-shadow:0 0 .25rem rgba(0,0,0,.1)}.book-languages .book-languages-list li{padding:.5rem 1rem;white-space:nowrap}.book-languages .book-languages-list img{opacity:.1}.book-languages .book-languages-list li.active img{opacity:1}.book-languages .book-languages-list a{color:inherit}.book-languages ul{margin:0;padding:0;list-style:none}.book-home{padding:1rem}aside nav,.book-page,.book-header aside,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity;will-change:transform,margin}@media screen and (max-width:57rem){.book-menu{margin-left:-16rem;font-size:16px}.book-toc{display:none}.book-header{display:block}#menu-control:checked+main .book-menu nav,#menu-control:checked+main .book-page{transform:translateX(16rem)}#menu-control:checked+main .book-header aside,#menu-control:checked+main .markdown{opacity:.25}#toc-control:checked+aside{display:block}}@media screen and (min-width:80rem){.book-page,.book-menu nav,.book-toc nav{padding:2rem 1rem}}@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"),url(fonts/roboto-v19-latin-300italic.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-regular.woff)format("woff")}@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"),url(fonts/roboto-v19-latin-700.woff)format("woff")}@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"),url(fonts/roboto-mono-v6-latin-regular.woff)format("woff")}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer,.book-toc{display:none}.book-header,.book-header aside{display:block}main{display:block!important}}.markdown{line-height:1.6em}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1em;margin-top:1.5em;margin-bottom:1rem}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown img{max-width:100%}.markdown code{padding:0 .25rem;background:#e9ecef;border-radius:.15rem;font-size:.875em}.markdown pre{padding:1rem;background:#f8f9fa;border-radius:.15rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-left:.25rem solid #e9ecef;border-radius:.15rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid #e9ecef}.markdown table tr:nth-child(2n){background:#f8f9fa}.markdown hr{height:1px;border:none;background:#e9ecef}.markdown ul,.markdown ol{padding-left:2rem}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-left:2rem}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-right:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-left:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden}.book-expand .book-expand-head{background:#f8f9fa;padding:.5rem 1rem;cursor:pointer}.book-expand .book-expand-content{display:none;padding:1rem}.book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid #e9ecef;border-radius:.15rem;overflow:hidden;display:flex;flex-wrap:wrap}.book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid #f8f9fa;padding:1rem;display:none}.book-tabs input[type=radio]:checked+label{border-bottom:1px solid #05b}.book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.book-columns{margin-left:-1rem;margin-right:-1rem}.book-columns>div{margin:1rem 0;min-width:16.5rem;padding:0 1rem}a.book-btn{display:inline-block;color:#05b!important;text-decoration:none!important;border:1px solid #05b;border-radius:.15rem;padding:.25rem 1rem;margin-top:.5rem;margin-bottom:.5rem;cursor:pointer}.book-hint.info{border-left-color:#6bf;background-color:rgba(102,187,255,.1)}.book-hint.warning{border-left-color:#fd6;background-color:rgba(255,221,102,.1)}.book-hint.danger{border-left-color:#f66;background-color:rgba(255,102,102,.1)} \ No newline at end of file
diff --git a/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.json b/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.json
index 5cda449..f622696 100644
--- a/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.json
+++ b/exampleSite/resources/_gen/assets/scss/book/book.scss_50fc8c04e12a2f59027287995557ceff.json
@@ -1 +1 @@
-{"Target":"book.min.2f0632dc31655f852f191d7c354e584af6f6ca239af70afdd117bbe5950815b2.css","MediaType":"text/css","Data":{"Integrity":"sha256-LwYy3DFlX4UvGR18NU5YSvb2yiOa9wr90Re75ZUIFbI="}} \ No newline at end of file
+{"Target":"book.min.651109bd6f1663cae20024e8b68d60fd4127eade8c26dfdc236a797a99163647.css","MediaType":"text/css","Data":{"Integrity":"sha256-ZREJvW8WY8riACToto1g/UEn6t6MJt/cI2p5epkWNkc="}} \ No newline at end of file
diff --git a/i18n/cn.yaml b/i18n/cn.yaml
index c22d4cf..52e80c5 100644
--- a/i18n/cn.yaml
+++ b/i18n/cn.yaml
@@ -7,6 +7,9 @@
- id: Last modified by
translation: Last modified by
+- id: Expand
+ translation: Expand
+
- id: bookSearchConfig
translation: |
{
diff --git a/i18n/en.yaml b/i18n/en.yaml
index c5154df..94b9c77 100644
--- a/i18n/en.yaml
+++ b/i18n/en.yaml
@@ -7,5 +7,8 @@
- id: Last modified by
translation: Last modified by
+- id: Expand
+ translation: Expand
+
- id: bookSearchConfig
translation: '{ cache: true }'
diff --git a/i18n/es.yaml b/i18n/es.yaml
index 7c24154..db4da60 100644
--- a/i18n/es.yaml
+++ b/i18n/es.yaml
@@ -7,5 +7,8 @@
- id: Last modified by
translation: Última modificación por
+- id: Expand
+ translation: Expand
+
- id: bookSearchConfig
translation: '{ cache: true }'
diff --git a/i18n/jp.yaml b/i18n/jp.yaml
index bb9849b..5c1fdb0 100644
--- a/i18n/jp.yaml
+++ b/i18n/jp.yaml
@@ -7,6 +7,9 @@
- id: Last modified by
translation: Last modified by
+- id: Expand
+ translation: Expand
+
- id: bookSearchConfig
translation: |
{
diff --git a/i18n/ko.yaml b/i18n/ko.yaml
index bb9849b..5c1fdb0 100644
--- a/i18n/ko.yaml
+++ b/i18n/ko.yaml
@@ -7,6 +7,9 @@
- id: Last modified by
translation: Last modified by
+- id: Expand
+ translation: Expand
+
- id: bookSearchConfig
translation: |
{
diff --git a/i18n/ru.yaml b/i18n/ru.yaml
index 9501165..1e4d124 100644
--- a/i18n/ru.yaml
+++ b/i18n/ru.yaml
@@ -2,10 +2,13 @@
translation: Поиск
- id: Edit this page
- translation: Редактировать эту сраницу
+ translation: Редактировать
- id: Last modified by
translation: Last modified by
+- id: Expand
+ translation: Развернуть
+
- id: bookSearchConfig
translation: '{ split: /[^a-zа-яё0-9\w]/gi }'
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index a2eb80e..a9c4da1 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -7,24 +7,69 @@
</head>
<body>
- <input type="checkbox" class="hidden" id="toc-control" />
<input type="checkbox" class="hidden" id="menu-control" />
- <main class="container">
- {{ template "toc" . }}
+ <main class="container flex">
+ <aside class="book-menu">
+ {{ template "menu" . }} <!-- Left menu Content -->
+ </aside>
<div class="book-page">
- {{ partial "docs/mobile-header" . }}
- {{ template "main" . }}
- {{ partial "docs/footer" . }}
+ <header class="book-header">
+ {{ template "header" . }} <!-- Mobile layout header -->
+ </header>
+
+ {{ template "main" . }} <!-- Page Content -->
+
+ <footer class="book-footer">
+ {{ template "footer" . }} <!-- Footer under page content -->
+ {{ template "comments" . }} <!-- Comments block -->
+ </footer>
{{ partial "docs/inject/footer" . }}
</div>
- <aside class="book-menu fixed">
- {{ partial "docs/menu" . }}
+ {{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
+ <aside class="book-toc">
+ {{ template "toc" . }} <!-- Table of Contents -->
</aside>
+ {{ end }}
</main>
{{ partial "docs/inject/body" . }}
</body>
</html>
+
+{{ define "menu" }}
+ {{ partial "docs/menu" . }}
+{{ end }}
+
+{{ define "header" }}
+ {{ 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>
+ {{ end }}
+{{ end }}
+
+{{ define "footer" }}
+ {{ partial "docs/footer" . }}
+{{ end }}
+
+{{ define "comments" }}
+ {{ if and .Content (default true (default .Site.Params.BookComments .Params.BookComments)) }}
+ <div class="book-comments">
+ {{- partial "docs/comments" . -}}
+ </div>
+ {{ end }}
+{{ end }}
+
+{{ define "main" }}
+ {{ .Content }}
+{{ end }}
+
+{{ define "toc" }}
+ {{ .TableOfContents }}
+{{ end }}
diff --git a/layouts/partials/docs/brand.html b/layouts/partials/docs/brand.html
index 7d3ca3a..3fab74b 100644
--- a/layouts/partials/docs/brand.html
+++ b/layouts/partials/docs/brand.html
@@ -1,5 +1,5 @@
<h2 class="book-brand">
- <a href="{{ .Site.BaseURL }}">
+ <a href="{{ .Site.BaseURL | relLangURL }}">
{{- with .Site.Params.BookLogo -}}
<img src="{{ . | relURL }}" alt="Logo" />
{{- end -}}
diff --git a/layouts/partials/docs/footer.html b/layouts/partials/docs/footer.html
index 0665f86..f9ca80d 100644
--- a/layouts/partials/docs/footer.html
+++ b/layouts/partials/docs/footer.html
@@ -1,33 +1,24 @@
-<div class="book-footer justify-between">
- {{ if .Site.IsMultiLingual }}
+<div class="flex justify-between">
+{{ if .Site.IsMultiLingual }}
{{ partial "docs/languages" . }}
- {{ end }}
+{{ end }}
- {{ if and .GitInfo .Site.Params.BookRepo }}
- {{ with .GitInfo }}
+{{ if and .GitInfo .Site.Params.BookRepo }}
<div>
- {{ $date := .AuthorDate.Local.Format (default "January 2, 2006" $.Site.Params.BookDateFormat) }}
- <a class="flex align-center" href="{{ $.Site.Params.BookRepo }}/commit/{{ .Hash }}" title='{{ i18n "Last modified by" }} {{ .AuthorName }} | {{ $date }}' target="_blank">
+ {{ $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" />
<span>{{ $date }}</span>
</a>
</div>
- {{ end }}
- {{ end }}
+{{ end }}
- {{ if and .File .Site.Params.BookRepo .Site.Params.BookEditPath }}
+{{ 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">
+ <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" />
<span>{{ i18n "Edit this page" }}</span>
</a>
</div>
- {{ end }}
-
-</div>
-
-{{ if (default true (default .Site.Params.BookComments .Params.bookComments)) }}
-<div class="book-comments">
- {{ partial "docs/comments" . }}
-</div>
{{ end }}
+</div>
diff --git a/layouts/partials/docs/header.html b/layouts/partials/docs/header.html
new file mode 100644
index 0000000..23834df
--- /dev/null
+++ b/layouts/partials/docs/header.html
@@ -0,0 +1,11 @@
+<div class="flex align-center justify-between">
+ <label for="menu-control">
+ <img src="{{ "svg/menu.svg" | relURL }}" class="book-icon" alt="Menu" />
+ </label>
+
+ <strong>{{ partial "docs/title" . }}</strong>
+
+ <label for="toc-control">
+ <img src="{{ "svg/toc.svg" | relURL }}" class="book-icon" alt="Table of Contents" />
+ </label>
+</div>
diff --git a/layouts/partials/docs/menu.html b/layouts/partials/docs/menu.html
index 6e41096..0db676f 100644
--- a/layouts/partials/docs/menu.html
+++ b/layouts/partials/docs/menu.html
@@ -1,12 +1,12 @@
-<nav id="BookMenu">
+<nav>
{{ partial "docs/brand" . }}
{{ partial "docs/search" . }}
{{ partial "docs/inject/menu-before" . }}
{{ if .Site.Params.BookMenuBundle }}
- {{ partial "docs/menu-bundle" . }}
+ {{ partial "docs/menu-bundle" . }}
{{ else }}
- {{ partial "docs/menu-filetree" . }}
+ {{ partial "docs/menu-filetree" . }}
{{ end }}
{{ partial "docs/inject/menu-after" . }}
diff --git a/layouts/partials/docs/mobile-header.html b/layouts/partials/docs/mobile-header.html
deleted file mode 100644
index 4212a8e..0000000
--- a/layouts/partials/docs/mobile-header.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<header class="flex align-center justify-between book-header">
- <label id="menu-control" for="menu-control">
- <img src="{{ "svg/menu.svg" | relURL }}" class="book-icon" alt="Menu" />
- </label>
- <label id="toc-control" for="toc-control">
- <strong>{{ partial "docs/title" . }}</strong>
- </label>
-</header>
diff --git a/layouts/partials/docs/post-meta.html b/layouts/partials/docs/post-meta.html
index 41221c7..c68ea95 100644
--- a/layouts/partials/docs/post-meta.html
+++ b/layouts/partials/docs/post-meta.html
@@ -1,4 +1,4 @@
-{{ $dateFormat := default "January 2, 2006" .Site.Params.BookDateFormat }}
+{{ $dateFormat := (default "January 2, 2006" .Site.Params.BookDateFormat) }}
{{ if or .Date .Params.tags }}
<div>
{{ with .Date}}
@@ -6,10 +6,10 @@
{{ end }}
{{ range $term, $_ := .Site.Taxonomies }}
- {{ with $list := index $.Params $term }}
+ {{ with $list := $.Param $term }}
<div>
{{ range $n, $single := $list }}{{ if $n }}, {{ end }}
- {{ with $.Site.GetPage (printf "/%s/%s" $term $single | urlize) }}
+ {{- with $.Site.GetPage (printf "/%s/%s" $term $single | urlize) }}
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
{{- end }}
{{- end }}
diff --git a/layouts/partials/docs/taxonomy.html b/layouts/partials/docs/taxonomy.html
index db82e4c..2ebeb82 100644
--- a/layouts/partials/docs/taxonomy.html
+++ b/layouts/partials/docs/taxonomy.html
@@ -1,4 +1,3 @@
-<aside class="book-toc fixed">
<nav>
<ul>
{{ range $term, $_ := .Site.Taxonomies }}
@@ -17,4 +16,3 @@
{{ end }}
</ul>
</nav>
-</aside>
diff --git a/layouts/partials/docs/toc.html b/layouts/partials/docs/toc.html
index 79bfc0a..64546ec 100644
--- a/layouts/partials/docs/toc.html
+++ b/layouts/partials/docs/toc.html
@@ -1,10 +1 @@
-{{ $tocLevels := default (default 6 .Site.Params.BookToC) .Params.BookToC }}
-{{ if and $tocLevels .Page.TableOfContents }}
- <aside class="book-toc levels-{{$tocLevels}} fixed">
- {{ with .Page.TableOfContents }}
- <label id="toc-control" for="toc-control">
- {{ . }}
- </label>
- {{ end }}
- </aside>
-{{ end }}
+{{ .TableOfContents }}
diff --git a/layouts/shortcodes/expand.html b/layouts/shortcodes/expand.html
index 4519767..1c0cb6b 100644
--- a/layouts/shortcodes/expand.html
+++ b/layouts/shortcodes/expand.html
@@ -1,7 +1,7 @@
<div class="book-expand">
<label>
<div class="book-expand-head flex justify-between">
- <span>{{ default "Expand" (.Get 0) }}</span>
+ <span>{{ default (i18n "Expand") (.Get 0) }}</span>
<span>{{ default "↕" (.Get 1) }}</span>
</div>
<input type="checkbox" class="hidden" />
diff --git a/static/svg/toc.svg b/static/svg/toc.svg
new file mode 100644
index 0000000..1889904
--- /dev/null
+++ b/static/svg/toc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"/><path d="M0 0h24v24H0z" fill="none"/></svg> \ No newline at end of file