Updated look and added content
This commit is contained in:
parent
17acb9ed12
commit
e35d2ea7a4
194 changed files with 4328 additions and 1454 deletions
20
LICENSE
Normal file
20
LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2024
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
README.md
13
README.md
|
@ -1,3 +1,12 @@
|
||||||
# [apotheke.earth](https://apotheke.earth)
|
# apothēke (n).
|
||||||
|
- [/a.po.tʰɛ̌ː.kɛː/] (αποθήκη)
|
||||||
|
|
||||||
the website serves as a repository of my brain.
|
### A place designated for storing or preserving items of value or importance.
|
||||||
|
|
||||||
|
I have an innate need to express the thoughts in my head.
|
||||||
|
|
||||||
|
Oftentimes I end upon conclusions that, in oral speech, am unable to express in a way that I find satisfactory. Also, due to the nature of dialogue, i.e. not a monologue, there is the propensity to diffuse the idea during a conversation; the need for a clarification of a definition might arise, or the disagreement for the use of a word which was picked for spurred rather than accuracy, etc, and in general there is no adequate space to fully expore a single idea in this process, as dialogue often is conductive to discussing and presenting a theme rather than a single subject contained within such a theme.
|
||||||
|
|
||||||
|
A friend pointed out that such an endeavour must be made in caution, I could, willingly or unwillingly, engage in this out of a feel of superiority, or rather a saviour complex of sorts. I do not feel like such is the case, it is however a possibility, people lie to themselves constantly and making a public statement carries the idea of believing that you are right. Nevertheless I feel like this is more of an outlet for my brain that exists publicly in the same sense that music or poetry exist publicly, not from a need to be correct, but from a need of self expression.
|
||||||
|
|
||||||
|
apothēke is therefore a project of self expression; or rather a showcase of my limited capability to understand the world.
|
||||||
|
|
20
archetypes/default.md
Executable file → Normal file
20
archetypes/default.md
Executable file → Normal file
|
@ -1,14 +1,10 @@
|
||||||
---
|
---
|
||||||
title: "Hello, world!"
|
title: "{{ .Name | humanize | title }}"
|
||||||
date: 2021-01-01
|
weight: 1
|
||||||
description: "A blog post"
|
# bookFlatSection: false
|
||||||
image: "/path/to/image.png"
|
# bookToc: true
|
||||||
type: "post"
|
# bookHidden: false
|
||||||
tags: ["blog"]
|
# bookCollapseSection: false
|
||||||
|
# bookComments: false
|
||||||
|
# bookSearchExclude: false
|
||||||
title: "Hello, world!"
|
|
||||||
image: "/path/to/image.png"
|
|
||||||
type: "page"
|
|
||||||
showTableOfContents: true
|
|
||||||
---
|
---
|
||||||
|
|
3
assets/_custom.scss
Normal file
3
assets/_custom.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/* You can add custom styles here. */
|
||||||
|
|
||||||
|
// @import "plugins/numbered";
|
66
assets/_defaults.scss
Normal file
66
assets/_defaults.scss
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
// Used in layout
|
||||||
|
$padding-1: 1px !default;
|
||||||
|
$padding-4: 0.25rem !default;
|
||||||
|
$padding-8: 0.5rem !default;
|
||||||
|
$padding-16: 1rem !default;
|
||||||
|
|
||||||
|
$font-size-base: 16px !default;
|
||||||
|
$font-size-12: 0.75rem !default;
|
||||||
|
$font-size-14: 0.875rem !default;
|
||||||
|
$font-size-16: 1rem !default;
|
||||||
|
|
||||||
|
$border-radius: $padding-4 !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: (
|
||||||
|
info: #6bf,
|
||||||
|
warning: #fd6,
|
||||||
|
danger: #f66,
|
||||||
|
) !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: rgba(255, 255, 255, 0.1);
|
||||||
|
--gray-200: rgba(255, 255, 255, 0.2);
|
||||||
|
--gray-500: rgba(255, 255, 255, 0.5);
|
||||||
|
|
||||||
|
--color-link: #f7f6f3;
|
||||||
|
--color-visited-link: #f7f6f3;
|
||||||
|
|
||||||
|
--body-background: #2D2A2E;
|
||||||
|
--body-font-color: #f7f6f3;
|
||||||
|
|
||||||
|
--icon-filter: brightness(0) invert(1);
|
||||||
|
|
||||||
|
--hint-color-info: #6bf;
|
||||||
|
--hint-color-warning: #fd6;
|
||||||
|
--hint-color-danger: #f66;
|
||||||
|
}
|
37
assets/_fonts.scss
Normal file
37
assets/_fonts.scss
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/* roboto-regular - latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'GFS Didot';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: local(''),
|
||||||
|
url('https://fonts.googleapis.com/css2?family=GFS+Didot&display=swap');
|
||||||
|
}
|
||||||
|
/* roboto-700 - latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'GFS Didot';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: local(''),
|
||||||
|
url('https://fonts.googleapis.com/css2?family=GFS+Didot&display=swap');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* roboto-mono-regular - latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Mono';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: local(''),
|
||||||
|
url('fonts/roboto-mono-v13-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
|
||||||
|
url('fonts/roboto-mono-v13-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'GFS Didot', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: 'Roboto Mono', monospace;
|
||||||
|
}
|
365
assets/_main.scss
Normal file
365
assets/_main.scss
Normal file
|
@ -0,0 +1,365 @@
|
||||||
|
html {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
touch-action: manipulation;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
min-width: $body-min-width;
|
||||||
|
color: var(--body-font-color);
|
||||||
|
background: var(--body-background);
|
||||||
|
margin-top: 40px;
|
||||||
|
|
||||||
|
letter-spacing: 0.33px;
|
||||||
|
font-weight: $body-font-weight;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
* {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 {
|
||||||
|
font-weight: $body-font-weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-link);
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
:focus {
|
||||||
|
@include outline;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside nav ul {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin: 1em 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #AC9C6D;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-inline-start: $padding-16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-inline-start: 0px;
|
||||||
|
|
||||||
|
.page-item a {
|
||||||
|
padding: $padding-16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: $container-max-width;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-icon {
|
||||||
|
filter: var(--icon-filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-brand {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: $padding-16;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 1.5em;
|
||||||
|
width: 1.5em;
|
||||||
|
margin-inline-end: $padding-8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-menu {
|
||||||
|
flex: 0 0 $menu-width;
|
||||||
|
font-size: $font-size-14;
|
||||||
|
|
||||||
|
.book-menu-content {
|
||||||
|
width: $menu-width;
|
||||||
|
padding: $padding-16;
|
||||||
|
background: var(--body-background);
|
||||||
|
|
||||||
|
@include fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
label {
|
||||||
|
color: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active {
|
||||||
|
color: var(--color-link);
|
||||||
|
}
|
||||||
|
|
||||||
|
input.toggle + label + ul {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.toggle:checked + label + ul {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.toggle + label::after {
|
||||||
|
content: "▸";
|
||||||
|
}
|
||||||
|
|
||||||
|
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: $padding-16 * 2 0;
|
||||||
|
|
||||||
|
> a,
|
||||||
|
> span,
|
||||||
|
> label {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
> ul {
|
||||||
|
padding-inline-start: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-page {
|
||||||
|
min-width: $body-min-width;
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: $padding-16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-post {
|
||||||
|
margin-bottom: $padding-16 * 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-header {
|
||||||
|
display: none;
|
||||||
|
margin-bottom: $padding-16;
|
||||||
|
|
||||||
|
label {
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.book-icon {
|
||||||
|
height: 1.5em;
|
||||||
|
width: 1.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-search {
|
||||||
|
position: relative;
|
||||||
|
margin: $padding-16 0;
|
||||||
|
border-bottom: 1px solid transparent;
|
||||||
|
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
padding: $padding-8;
|
||||||
|
|
||||||
|
border: 0;
|
||||||
|
border-radius: $border-radius;
|
||||||
|
|
||||||
|
background: var(--gray-100);
|
||||||
|
color: var(--body-font-color);
|
||||||
|
|
||||||
|
&:required + .book-search-spinner {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-search-spinner {
|
||||||
|
position: absolute;
|
||||||
|
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: 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;
|
||||||
|
|
||||||
|
.book-toc-content {
|
||||||
|
width: $toc-width;
|
||||||
|
padding: $padding-16;
|
||||||
|
|
||||||
|
@include fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav > ul > li:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-footer {
|
||||||
|
padding-top: $padding-16;
|
||||||
|
font-size: $font-size-14;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
margin-inline-end: $padding-8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-comments {
|
||||||
|
margin-top: $padding-16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-languages {
|
||||||
|
margin-block-end: $padding-16 * 2;
|
||||||
|
|
||||||
|
.book-icon {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
margin-inline-end: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-inline-start: 1.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Responsive styles
|
||||||
|
.book-menu-content,
|
||||||
|
.book-toc-content,
|
||||||
|
.book-page,
|
||||||
|
.book-header aside,
|
||||||
|
.markdown {
|
||||||
|
transition: 0.2s ease-in-out;
|
||||||
|
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 {
|
||||||
|
visibility: hidden;
|
||||||
|
margin-inline-start: -$menu-width;
|
||||||
|
font-size: $font-size-base;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-toc {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-header {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu-control:focus ~ main label[for="menu-control"] {
|
||||||
|
@include outline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu-control:checked ~ main {
|
||||||
|
.book-menu {
|
||||||
|
visibility: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-menu-overlay {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#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 .book-menu-content,
|
||||||
|
.book-toc .book-toc-content {
|
||||||
|
padding: $padding-16 * 2 $padding-16;
|
||||||
|
}
|
||||||
|
}
|
210
assets/_markdown.scss
Normal file
210
assets/_markdown.scss
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
@import "variables";
|
||||||
|
|
||||||
|
.markdown {
|
||||||
|
line-height: 1.6;
|
||||||
|
|
||||||
|
// remove padding at the beginning of page
|
||||||
|
> :first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-weight: normal;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 0.875em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
optgroup,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: underline;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #AC9C6D;
|
||||||
|
}
|
||||||
|
&:visited {
|
||||||
|
color: var(--color-visited-link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
direction: ltr;
|
||||||
|
unicode-bidi: embed;
|
||||||
|
padding: 0 $padding-4;
|
||||||
|
background: var(--gray-200);
|
||||||
|
border-radius: $border-radius;
|
||||||
|
font-size: 0.875em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
direction: ltr;
|
||||||
|
unicode-bidi: embed;
|
||||||
|
padding: $padding-16;
|
||||||
|
background: var(--gray-100);
|
||||||
|
border-radius: $border-radius;
|
||||||
|
overflow-x: auto;
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 0;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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-inline-start: $padding-4 solid var(--gray-200);
|
||||||
|
border-radius: $border-radius;
|
||||||
|
|
||||||
|
:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
overflow: auto;
|
||||||
|
display: block;
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-top: $padding-16;
|
||||||
|
margin-bottom: $padding-16;
|
||||||
|
|
||||||
|
tr th,
|
||||||
|
tr td {
|
||||||
|
padding: $padding-8 $padding-16;
|
||||||
|
border: $padding-1 solid var(--gray-200);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(2n) {
|
||||||
|
background: var(--gray-100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
height: $padding-1;
|
||||||
|
border: none;
|
||||||
|
background: var(--gray-200);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
padding-inline-start: $padding-16 * 2;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl {
|
||||||
|
dt {
|
||||||
|
font-weight: bolder;
|
||||||
|
margin-top: $padding-16;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-inline-start: 0;
|
||||||
|
margin-bottom: $padding-16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special case for highlighted code with line numbers
|
||||||
|
.highlight {
|
||||||
|
direction: ltr;
|
||||||
|
unicode-bidi: embed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight table tr {
|
||||||
|
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 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;
|
||||||
|
}
|
||||||
|
}
|
17
assets/_print.scss
Normal file
17
assets/_print.scss
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
@media print {
|
||||||
|
.book-menu,
|
||||||
|
.book-footer,
|
||||||
|
.book-toc {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-header,
|
||||||
|
.book-header aside {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
// Fix for https://bugzilla.mozilla.org/show_bug.cgi?id=939897
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
}
|
104
assets/_shortcodes.scss
Normal file
104
assets/_shortcodes.scss
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
.markdown {
|
||||||
|
// {{< expand "Label" "icon" >}}
|
||||||
|
.book-expand {
|
||||||
|
margin-top: $padding-16;
|
||||||
|
margin-bottom: $padding-16;
|
||||||
|
|
||||||
|
border: $padding-1 solid var(--gray-200);
|
||||||
|
border-radius: $border-radius;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.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 / 2;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
92
assets/_utils.scss
Normal file
92
assets/_utils.scss
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.toggle {
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearfix::after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin spin($duration) {
|
||||||
|
animation: spin $duration ease infinite;
|
||||||
|
@keyframes spin {
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fixed {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin outline {
|
||||||
|
outline-style: auto;
|
||||||
|
outline-color: currentColor;
|
||||||
|
outline-color: -webkit-focus-ring-color;
|
||||||
|
}
|
3
assets/_variables.scss
Normal file
3
assets/_variables.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/* You can override SASS variables here. */
|
||||||
|
|
||||||
|
// @import "plugins/dark";
|
15
assets/book.scss
Normal file
15
assets/book.scss
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
@import "defaults";
|
||||||
|
@import "variables";
|
||||||
|
@import "themes/{{ default "light" .Site.Params.BookTheme }}";
|
||||||
|
|
||||||
|
@import "normalize";
|
||||||
|
@import "utils";
|
||||||
|
@import "main";
|
||||||
|
@import "fonts";
|
||||||
|
@import "print";
|
||||||
|
|
||||||
|
@import "markdown";
|
||||||
|
@import "shortcodes";
|
||||||
|
|
||||||
|
// Custom defined styles
|
||||||
|
@import "custom";
|
24
assets/clipboard.js
Normal file
24
assets/clipboard.js
Normal 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
|
@ -1,92 +0,0 @@
|
||||||
:root {
|
|
||||||
--dark-primary-color: 45, 42, 46;
|
|
||||||
--dark-secondary-color: #665D40;
|
|
||||||
--dark-tertiary-color: #ac9c6d;
|
|
||||||
--dark-text-color: #f7f6f3;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
background-color: rgb(var(--dark-primary-color));
|
|
||||||
color: var(--dark-text-color);
|
|
||||||
fill: var(--dark-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
background-color: rgba(var(--dark-primary-color), 0.95);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-hamburger-list {
|
|
||||||
background: rgba(var(--dark-primary-color), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-links .nav-icons-divider {
|
|
||||||
color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover .feather-moon {
|
|
||||||
fill: var(--dark-text-color);
|
|
||||||
color: var(--dark-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons-list .social-icon,
|
|
||||||
.social-icons-list .social-icon a:visited {
|
|
||||||
fill: var(--dark-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons-list .social-icon a:hover {
|
|
||||||
fill: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-tags .post-tag:hover {
|
|
||||||
background-color: var(--dark-text-color);
|
|
||||||
color: rgb(var(--dark-primary-color));
|
|
||||||
}
|
|
||||||
|
|
||||||
.tags-list .post-tags .post-tag a .tag-posts-count {
|
|
||||||
background-color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.tags-list .post-tags .post-tag:hover a .tag-posts-count {
|
|
||||||
background-color: var(--dark-text-color);
|
|
||||||
color: rgb(var(--dark-primary-color));
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
border-top-color: var(--dark-header-bg-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
color: darkgrey;
|
|
||||||
border-left-color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
table thead {
|
|
||||||
background-color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
table td,
|
|
||||||
table th {
|
|
||||||
border-bottom-color: var(--dark-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
code,
|
|
||||||
pre {
|
|
||||||
background-color: var(--dark-secondary-color) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:not(pre) > code {
|
|
||||||
background-color: var(--dark-tertiary-color) !important;
|
|
||||||
color: var(--dark-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-shadow {
|
|
||||||
box-shadow: rgb(33, 38, 45) 0px -1px 0px 0px inset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow-logo {
|
|
||||||
background-color: var(--dark-secondary-color);
|
|
||||||
}
|
|
|
@ -1,683 +0,0 @@
|
||||||
:root {
|
|
||||||
--content-width: 1120px;
|
|
||||||
--container-width: 810px;
|
|
||||||
|
|
||||||
--light-primary-color: 247,246,243;
|
|
||||||
--light-secondary-color: #dddddd;
|
|
||||||
--light-tertiary-color: #272822;
|
|
||||||
--light-text-color: #4a5152;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: Lato;
|
|
||||||
font-weight: 400;
|
|
||||||
src: url("/fonts/Lato-Regular.ttf");
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: Lato;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url("/fonts/Lato-Bold.ttf");
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
background-color: rgb(var(--light-primary-color));
|
|
||||||
color: var(--light-text-color);
|
|
||||||
font-family: "GFS Didot";
|
|
||||||
font-size: 17.5px;
|
|
||||||
min-height: 100%;
|
|
||||||
position: relative;
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin-bottom: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chapter-title {
|
|
||||||
text-decoration: underline;
|
|
||||||
text-decoration-thickness: 2px;
|
|
||||||
text-decoration-color: #665d40;
|
|
||||||
text-underline-offset:35%;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is set in partials/head.html and is populated via config */
|
|
||||||
a:hover {
|
|
||||||
color: var(--accent-color);
|
|
||||||
fill: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
main#content {
|
|
||||||
margin: 90px auto 0;
|
|
||||||
width: var(--content-width);
|
|
||||||
}
|
|
||||||
|
|
||||||
main#content > .container {
|
|
||||||
margin: auto;
|
|
||||||
width: 75%;
|
|
||||||
max-width: var(--container-width);
|
|
||||||
}
|
|
||||||
|
|
||||||
.post.container {
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-toc {
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: inline-block;
|
|
||||||
padding-left: 50px;
|
|
||||||
vertical-align: top;
|
|
||||||
/* Would be 25% had there been no margins or border box on all inline blocks */
|
|
||||||
width: 24%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc {
|
|
||||||
position: fixed;
|
|
||||||
top: 80px;
|
|
||||||
bottom: 20px;
|
|
||||||
overflow-x: hidden;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li {
|
|
||||||
margin-top: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a.level-1 {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a.level-2 {
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a.level-3 {
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a.level-4 {
|
|
||||||
padding-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc ul li a.active {
|
|
||||||
color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
height: auto;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* HEADER */
|
|
||||||
.header {
|
|
||||||
background-color: rgba(var(--light-primary-color), 0.95);
|
|
||||||
color: inherit;
|
|
||||||
height: 50px;
|
|
||||||
left: 0;
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
transition: box-shadow 0.3s ease-in-out;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.header .header-nav {
|
|
||||||
height: 50px;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-nav .avatar {
|
|
||||||
border-radius: 18px;
|
|
||||||
float: left;
|
|
||||||
height: 100%;
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
.header-nav .avatar img {
|
|
||||||
border-radius: 100%;
|
|
||||||
display: block;
|
|
||||||
height: 38px;
|
|
||||||
margin-top: 5px;
|
|
||||||
overflow: hidden;
|
|
||||||
width: 38px;
|
|
||||||
}
|
|
||||||
.header-nav .nav-title {
|
|
||||||
display: inline-block;
|
|
||||||
height: 100%;
|
|
||||||
line-height: 50px;
|
|
||||||
padding-left: 15px;
|
|
||||||
}
|
|
||||||
.nav-title a {
|
|
||||||
height: 50px;
|
|
||||||
}
|
|
||||||
.header-nav .nav-links {
|
|
||||||
float: right;
|
|
||||||
line-height: 50px;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
.nav-links .nav-link {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 2px;
|
|
||||||
}
|
|
||||||
.nav-links .nav-link a {
|
|
||||||
display: block;
|
|
||||||
padding: 0 6px;
|
|
||||||
}
|
|
||||||
.nav-link a svg {
|
|
||||||
height: 20px;
|
|
||||||
margin: -3px auto;
|
|
||||||
stroke-width: 2;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
.nav-item a svg {
|
|
||||||
height: 20px;
|
|
||||||
margin: -3px auto;
|
|
||||||
stroke-width: 2;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
.nav-links .nav-link.icon a {
|
|
||||||
padding: 0 8px;
|
|
||||||
}
|
|
||||||
.nav-links .nav-icons-divider {
|
|
||||||
border-color: inherit;
|
|
||||||
border-left: 1.5px solid;
|
|
||||||
color: var(--light-secondary-color);
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
.nav-links .dark-theme-toggle:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover .feather-sun {
|
|
||||||
fill: black;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark-theme-toggle .feather {
|
|
||||||
height: 22px;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: round;
|
|
||||||
width: 22px;
|
|
||||||
}
|
|
||||||
#hamburger-menu-toggle {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#hamburger-menu-toggle .feather {
|
|
||||||
height: 24px;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: round;
|
|
||||||
width: 24px;
|
|
||||||
}
|
|
||||||
.nav-hamburger-list {
|
|
||||||
background: rgb(var(--light-primary-color));
|
|
||||||
border-bottom: solid 1.5px var(--light-secondary-color);
|
|
||||||
border-top: solid 1.5px var(--light-secondary-color);
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
text-align: center;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 5;
|
|
||||||
}
|
|
||||||
.nav-hamburger-list a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FOOTER */
|
|
||||||
.footer {
|
|
||||||
bottom: 0;
|
|
||||||
color: inherit;
|
|
||||||
left: 0;
|
|
||||||
margin-left: 30%;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 40px 0;
|
|
||||||
position: absolute;
|
|
||||||
text-align: center;
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer span {
|
|
||||||
display: block;
|
|
||||||
font-size: 0.85em;
|
|
||||||
font-weight: 300;
|
|
||||||
padding: 1px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** COMMON **/
|
|
||||||
.flex-break {
|
|
||||||
flex-basis: 100%;
|
|
||||||
height: 0;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.visibility-hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-shadow {
|
|
||||||
box-shadow: rgb(220, 220, 220) 0px 1px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TAGS */
|
|
||||||
.post-tags {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.post-tags .post-tag {
|
|
||||||
border: 1.5px solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
color: inherit;
|
|
||||||
display: inline-block;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.post-tags .post-tag:hover {
|
|
||||||
background-color: var(--light-text-color);
|
|
||||||
color: rgb(var(--light-primary-color));
|
|
||||||
}
|
|
||||||
.post-tag a {
|
|
||||||
color: inherit;
|
|
||||||
display: block;
|
|
||||||
padding: 6px 12px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* CODE BLOCKS */
|
|
||||||
code,
|
|
||||||
pre {
|
|
||||||
background-color: var(--light-tertiary-color);
|
|
||||||
box-sizing: border-box;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
font-size: 0.95rem;
|
|
||||||
overflow: auto;
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
box-decoration-break: clone;
|
|
||||||
word-wrap: break-word;
|
|
||||||
font-size: 0.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
:not(pre) > code {
|
|
||||||
background-color: var(--light-secondary-color) !important;
|
|
||||||
color: var(--light-text-color);
|
|
||||||
padding: 1px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre code {
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
border-left: 2px solid var(--light-secondary-color);
|
|
||||||
color: grey;
|
|
||||||
padding-left: 1rem;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
color: var(--light-secondary-color);
|
|
||||||
margin: 50px auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
margin: 30px 0;
|
|
||||||
text-align: left;
|
|
||||||
display: block;
|
|
||||||
overflow-x: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table thead {
|
|
||||||
background-color: var(--light-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
table td,
|
|
||||||
table th {
|
|
||||||
padding: 1.4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
table td {
|
|
||||||
border-bottom: 1px solid var(--light-secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* HOME PAGE */
|
|
||||||
.home-about {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img {
|
|
||||||
border-radius: 50%;
|
|
||||||
height: auto;
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Avatar sizes (default is M) - XS, S, M, L, XL */
|
|
||||||
.home-about .avatar img.size-xs {
|
|
||||||
height: 7rem;
|
|
||||||
width: 7rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img.size-s {
|
|
||||||
height: 9rem;
|
|
||||||
width: 9rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img.size-m {
|
|
||||||
height: 11rem;
|
|
||||||
width: 11rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img.size-l {
|
|
||||||
height: 13rem;
|
|
||||||
width: 13rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img.size-xl {
|
|
||||||
height: 15rem;
|
|
||||||
width: 15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about h1 {
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons .social-icons-list {
|
|
||||||
display: inline-block;
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons-list .social-icon {
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: inline-block;
|
|
||||||
fill: var(--light-text-color);
|
|
||||||
height: 24px;
|
|
||||||
margin: 0 6px;
|
|
||||||
width: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icon a svg path {
|
|
||||||
transition: fill 0.15s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.markdown-content {
|
|
||||||
line-height: 1.25;
|
|
||||||
width: 80%;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-posts {
|
|
||||||
margin: 0 auto;
|
|
||||||
padding-top: 10px;
|
|
||||||
width: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SINGLE */
|
|
||||||
.post [role="doc-subtitle"] {
|
|
||||||
font-size: 1.1em;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.post {
|
|
||||||
/* Prevent long strings from overflowing */
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
}
|
|
||||||
.post .post-date, .prev-post-date, .next-post-date {
|
|
||||||
color: gray;
|
|
||||||
}
|
|
||||||
.post .post-content {
|
|
||||||
line-height: 1.7;
|
|
||||||
margin-top: 50px;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
.post-content h1, .post-content h2, .post-content h3, .post-content h4 {
|
|
||||||
scroll-margin-top: 55px;
|
|
||||||
}
|
|
||||||
.post-content h1 {
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
||||||
.post-content h2 {
|
|
||||||
margin-top: 35px;
|
|
||||||
}
|
|
||||||
.post-content h3 {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
.post-content h4 {
|
|
||||||
margin-top: 25px;
|
|
||||||
}
|
|
||||||
.post-content h5 {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
.post-content img {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LIST */
|
|
||||||
.list-posts .list-title {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.list-posts .posts-year {
|
|
||||||
margin-top: 70px;
|
|
||||||
}
|
|
||||||
.list-posts .post-title {
|
|
||||||
margin: 15px 0 0 15px;
|
|
||||||
}
|
|
||||||
.list-posts a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.post-title .post-link,
|
|
||||||
.post-title .post-date {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chapter-title {
|
|
||||||
margin-bottom:1%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-title .post-link {
|
|
||||||
/* This magic number is the largest width that keeps the post-date div from
|
|
||||||
* causing the line to wrap with the longest possible date string
|
|
||||||
* "September 22, 2022"
|
|
||||||
*/
|
|
||||||
width: 73%;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags {
|
|
||||||
margin-top: 50px;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag {
|
|
||||||
margin: 2px 5px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag a {
|
|
||||||
border-radius: inherit;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag a div {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag a .tag-name {
|
|
||||||
padding: 5px 8px;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag a .tag-posts-count {
|
|
||||||
background-color: var(--light-secondary-color);
|
|
||||||
border-radius: inherit;
|
|
||||||
color: inherit;
|
|
||||||
opacity: 0.8;
|
|
||||||
padding: 6px;
|
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
}
|
|
||||||
.tags-list .post-tags .post-tag:hover a .tag-posts-count {
|
|
||||||
background-color: var(--light-text-color);
|
|
||||||
color: rgb(var(--light-primary-color));
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-404 {
|
|
||||||
margin-top: 125px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 1120px) {
|
|
||||||
main#content {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 820px) {
|
|
||||||
body {
|
|
||||||
font-size: 0.95rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-break {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about .avatar img {
|
|
||||||
border-radius: 50%;
|
|
||||||
height: 7rem;
|
|
||||||
width: 7rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-links .nav-link,
|
|
||||||
.nav-icons-divider {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hamburger-menu-toggle {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
main#content {
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0 1.5rem;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.markdown-content, .home-posts {
|
|
||||||
width: auto;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
main#content .container {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-about {
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toc {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.list-posts {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.list-posts .post-date {
|
|
||||||
color: gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
margin-left: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (min-width: 820px) {
|
|
||||||
.nav-hamburger-list {
|
|
||||||
visibility: hidden !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Accessibility*/
|
|
||||||
.sr-only {
|
|
||||||
position: absolute;
|
|
||||||
left: -10000px;
|
|
||||||
top: auto;
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prev-post {
|
|
||||||
float: left;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.next-post {
|
|
||||||
float: right;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prev-post, .next-post {
|
|
||||||
max-width: 33%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* back to top button */
|
|
||||||
.arrow-logo {
|
|
||||||
background-color: transparent;
|
|
||||||
border-radius: 50%;
|
|
||||||
bottom: 20px;
|
|
||||||
cursor: pointer;
|
|
||||||
display: none;
|
|
||||||
font-size: 24px;
|
|
||||||
padding: 10px;
|
|
||||||
padding-right: 8px;
|
|
||||||
position: fixed;
|
|
||||||
right: 20px;
|
|
||||||
z-index: 5;
|
|
||||||
background-color: var(--light-tertiary-color);
|
|
||||||
width: 25px;
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow-logo path{
|
|
||||||
fill: var(--light-secondary-color)
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow-logo:hover {
|
|
||||||
fill: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 600px) {
|
|
||||||
#btt-button {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
2
assets/css/normalize.min.css
vendored
2
assets/css/normalize.min.css
vendored
|
@ -1,2 +0,0 @@
|
||||||
/*! 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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-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}
|
|
||||||
/*# sourceMappingURL=normalize.min.css.map */
|
|
13
assets/js/feather-icons.min.js
vendored
13
assets/js/feather-icons.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,119 +0,0 @@
|
||||||
document.addEventListener('DOMContentLoaded', ready, false);
|
|
||||||
|
|
||||||
const THEME_PREF_STORAGE_KEY = "theme-preference";
|
|
||||||
const THEME_TO_ICON_CLASS = {
|
|
||||||
'dark': 'feather-moon',
|
|
||||||
'light':'feather-sun'
|
|
||||||
};
|
|
||||||
const THEME_TO_ICON_TEXT_CLASS = {
|
|
||||||
'dark': 'Dark mode',
|
|
||||||
'light':'Light mode'
|
|
||||||
};
|
|
||||||
let toggleIcon = '';
|
|
||||||
let darkThemeCss = '';
|
|
||||||
|
|
||||||
const HEADING_TO_TOC_CLASS = {
|
|
||||||
'H1': 'level-1',
|
|
||||||
'H2': 'level-2',
|
|
||||||
'H3': 'level-3',
|
|
||||||
'H4': 'level-4'
|
|
||||||
}
|
|
||||||
|
|
||||||
function ready() {
|
|
||||||
feather.replace({ 'stroke-width': 1, width: 20, height: 20 });
|
|
||||||
setThemeByUserPref();
|
|
||||||
|
|
||||||
if (document.querySelector('main#content > .container') !== null &&
|
|
||||||
document.querySelector('main#content > .container').classList.contains('post')) {
|
|
||||||
if (document.getElementById('TableOfContents') !== null) {
|
|
||||||
fixTocItemsIndent();
|
|
||||||
createScrollSpy();
|
|
||||||
} else {
|
|
||||||
document.querySelector('main#content > .container.post').style.display = "block";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Elements to inject
|
|
||||||
const svgsToInject = document.querySelectorAll('img.svg-inject');
|
|
||||||
// Do the injection
|
|
||||||
SVGInjector(svgsToInject);
|
|
||||||
|
|
||||||
document.getElementById('hamburger-menu-toggle').addEventListener('click', () => {
|
|
||||||
const hamburgerMenu = document.getElementsByClassName('nav-hamburger-list')[0]
|
|
||||||
if (hamburgerMenu.classList.contains('visibility-hidden')) {
|
|
||||||
hamburgerMenu.classList.remove('visibility-hidden');
|
|
||||||
} else {
|
|
||||||
hamburgerMenu.classList.add('visibility-hidden');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener('scroll', () => {
|
|
||||||
if (window.innerWidth <= 820) {
|
|
||||||
// For smaller screen, show shadow earlier
|
|
||||||
toggleHeaderShadow(50);
|
|
||||||
} else {
|
|
||||||
toggleHeaderShadow(100);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function fixTocItemsIndent() {
|
|
||||||
document.querySelectorAll('#TableOfContents a').forEach($tocItem => {
|
|
||||||
const itemId = $tocItem.getAttribute("href").substring(1)
|
|
||||||
$tocItem.classList.add(HEADING_TO_TOC_CLASS[document.getElementById(itemId).tagName]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createScrollSpy() {
|
|
||||||
var elements = document.querySelectorAll('#toc a');
|
|
||||||
document.addEventListener('scroll', function () {
|
|
||||||
elements.forEach(function (element) {
|
|
||||||
const boundingRect = document.getElementById(element.getAttribute('href').substring(1)).getBoundingClientRect();
|
|
||||||
if (boundingRect.top <= 55 && boundingRect.bottom >= 0) {
|
|
||||||
elements.forEach(function (elem) {
|
|
||||||
elem.classList.remove('active');
|
|
||||||
});
|
|
||||||
element.classList.add('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleHeaderShadow(scrollY) {
|
|
||||||
if (window.scrollY > scrollY) {
|
|
||||||
document.querySelectorAll('.header').forEach(function(item) {
|
|
||||||
item.classList.add('header-shadow')
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
document.querySelectorAll('.header').forEach(function(item) {
|
|
||||||
item.classList.remove('header-shadow')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setThemeByUserPref() {
|
|
||||||
darkThemeCss = document.getElementById("dark-theme");
|
|
||||||
const savedTheme = localStorage.getItem(THEME_PREF_STORAGE_KEY) ||
|
|
||||||
(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark': 'light');
|
|
||||||
const darkThemeToggles = document.querySelectorAll('.dark-theme-toggle');
|
|
||||||
setTheme(savedTheme, darkThemeToggles);
|
|
||||||
darkThemeToggles.forEach(el => el.addEventListener('click', toggleTheme, {capture: true}))
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTheme(event) {
|
|
||||||
toggleIcon = event.currentTarget.querySelector("a svg.feather");
|
|
||||||
if (toggleIcon.classList[1] === THEME_TO_ICON_CLASS.dark) {
|
|
||||||
setTheme('light', [event.currentTarget]);
|
|
||||||
} else if (toggleIcon.classList[1] === THEME_TO_ICON_CLASS.light) {
|
|
||||||
setTheme('dark', [event.currentTarget]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTheme(themeToSet, targets) {
|
|
||||||
localStorage.setItem(THEME_PREF_STORAGE_KEY, themeToSet);
|
|
||||||
darkThemeCss.disabled = themeToSet === 'light';
|
|
||||||
targets.forEach((target) => {
|
|
||||||
target.querySelector('a').innerHTML = feather.icons[THEME_TO_ICON_CLASS[themeToSet].split('-')[1]].toSvg();
|
|
||||||
target.querySelector("#dark-theme-toggle-screen-reader-target").textContent = [THEME_TO_ICON_TEXT_CLASS[themeToSet]];
|
|
||||||
});
|
|
||||||
}
|
|
9
assets/js/svg-injector.min.js
vendored
9
assets/js/svg-injector.min.js
vendored
|
@ -1,9 +0,0 @@
|
||||||
/**
|
|
||||||
* SVGInjector v1.1.3 - Fast, caching, dynamic inline SVG DOM injection library
|
|
||||||
* https://github.com/iconic/SVGInjector
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014-2015 Waybury <hello@waybury.com>
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
!function(t,e){"use strict";function r(t){t=t.split(" ");for(var e={},r=t.length,n=[];r--;)e.hasOwnProperty(t[r])||(e[t[r]]=1,n.unshift(t[r]));return n.join(" ")}var n="file:"===t.location.protocol,i=e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),o=Array.prototype.forEach||function(t,e){if(void 0===this||null===this||"function"!=typeof t)throw new TypeError;var r,n=this.length>>>0;for(r=0;n>r;++r)r in this&&t.call(e,this[r],r,this)},a={},l=0,s=[],u=[],c={},f=function(t){return t.cloneNode(!0)},p=function(t,e){u[t]=u[t]||[],u[t].push(e)},d=function(t){for(var e=0,r=u[t].length;r>e;e++)!function(e){setTimeout(function(){u[t][e](f(a[t]))},0)}(e)},v=function(e,r){if(void 0!==a[e])a[e]instanceof SVGSVGElement?r(f(a[e])):p(e,r);else{if(!t.XMLHttpRequest)return r("Browser does not support XMLHttpRequest"),!1;a[e]={},p(e,r);var i=new XMLHttpRequest;i.onreadystatechange=function(){if(4===i.readyState){if(404===i.status||null===i.responseXML)return r("Unable to load SVG file: "+e),n&&r("Note: SVG injection ajax calls do not work locally without adjusting security setting in your browser. Or consider using a local webserver."),r(),!1;if(!(200===i.status||n&&0===i.status))return r("There was a problem injecting the SVG: "+i.status+" "+i.statusText),!1;if(i.responseXML instanceof Document)a[e]=i.responseXML.documentElement;else if(DOMParser&&DOMParser instanceof Function){var t;try{var o=new DOMParser;t=o.parseFromString(i.responseText,"text/xml")}catch(l){t=void 0}if(!t||t.getElementsByTagName("parsererror").length)return r("Unable to parse SVG file: "+e),!1;a[e]=t.documentElement}d(e)}},i.open("GET",e),i.overrideMimeType&&i.overrideMimeType("text/xml"),i.send()}},h=function(e,n,a,u){var f=e.getAttribute("data-src")||e.getAttribute("src");if(!/\.svg/i.test(f))return void u("Attempted to inject a file with a non-svg extension: "+f);if(!i){var p=e.getAttribute("data-fallback")||e.getAttribute("data-png");return void(p?(e.setAttribute("src",p),u(null)):a?(e.setAttribute("src",a+"/"+f.split("/").pop().replace(".svg",".png")),u(null)):u("This browser does not support SVG and no PNG fallback was defined."))}-1===s.indexOf(e)&&(s.push(e),e.setAttribute("src",""),v(f,function(i){if("undefined"==typeof i||"string"==typeof i)return u(i),!1;var a=e.getAttribute("id");a&&i.setAttribute("id",a);var p=e.getAttribute("title");p&&i.setAttribute("title",p);var d=[].concat(i.getAttribute("class")||[],"injected-svg",e.getAttribute("class")||[]).join(" ");i.setAttribute("class",r(d));var v=e.getAttribute("style");v&&i.setAttribute("style",v);var h=[].filter.call(e.attributes,function(t){return/^data-\w[\w\-]*$/.test(t.name)});o.call(h,function(t){t.name&&t.value&&i.setAttribute(t.name,t.value)});var g,m,b,y,A,w={clipPath:["clip-path"],"color-profile":["color-profile"],cursor:["cursor"],filter:["filter"],linearGradient:["fill","stroke"],marker:["marker","marker-start","marker-mid","marker-end"],mask:["mask"],pattern:["fill","stroke"],radialGradient:["fill","stroke"]};Object.keys(w).forEach(function(t){g=t,b=w[t],m=i.querySelectorAll("defs "+g+"[id]");for(var e=0,r=m.length;r>e;e++){y=m[e].id,A=y+"-"+l;var n;o.call(b,function(t){n=i.querySelectorAll("["+t+'*="'+y+'"]');for(var e=0,r=n.length;r>e;e++)n[e].setAttribute(t,"url(#"+A+")")}),m[e].id=A}}),i.removeAttribute("xmlns:a");for(var x,S,k=i.querySelectorAll("script"),j=[],G=0,T=k.length;T>G;G++)S=k[G].getAttribute("type"),S&&"application/ecmascript"!==S&&"application/javascript"!==S||(x=k[G].innerText||k[G].textContent,j.push(x),i.removeChild(k[G]));if(j.length>0&&("always"===n||"once"===n&&!c[f])){for(var M=0,V=j.length;V>M;M++)new Function(j[M])(t);c[f]=!0}var E=i.querySelectorAll("style");o.call(E,function(t){t.textContent+=""}),e.parentNode.replaceChild(i,e),delete s[s.indexOf(e)],e=null,l++,u(i)}))},g=function(t,e,r){e=e||{};var n=e.evalScripts||"always",i=e.pngFallback||!1,a=e.each;if(void 0!==t.length){var l=0;o.call(t,function(e){h(e,n,i,function(e){a&&"function"==typeof a&&a(e),r&&t.length===++l&&r(l)})})}else t?h(t,n,i,function(e){a&&"function"==typeof a&&a(e),r&&r(1),t=null}):r&&r(0)};"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=g:"function"==typeof define&&define.amd?define(function(){return g}):"object"==typeof t&&(t.SVGInjector=g)}(window,document);
|
|
||||||
//# sourceMappingURL=svg-injector.map.js
|
|
15
assets/manifest.json
Normal file
15
assets/manifest.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
7
assets/menu-reset.js
Normal file
7
assets/menu-reset.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
(function() {
|
||||||
|
var menu = document.querySelector("aside .book-menu-content");
|
||||||
|
addEventListener("beforeunload", function(event) {
|
||||||
|
localStorage.setItem("menu.scrollTop", menu.scrollTop);
|
||||||
|
});
|
||||||
|
menu.scrollTop = localStorage.getItem("menu.scrollTop");
|
||||||
|
})();
|
6
assets/mermaid.json
Normal file
6
assets/mermaid.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"flowchart": {
|
||||||
|
"useMaxWidth":true
|
||||||
|
},
|
||||||
|
"theme": "default"
|
||||||
|
}
|
349
assets/normalize.css
vendored
Normal file
349
assets/normalize.css
vendored
Normal file
|
@ -0,0 +1,349 @@
|
||||||
|
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||||
|
|
||||||
|
/* Document
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the line height in all browsers.
|
||||||
|
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
line-height: 1.15; /* 1 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sections
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the margin in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the `main` element consistently in IE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
main {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the font size and margin on `h1` elements within `section` and
|
||||||
|
* `article` contexts in Chrome, Firefox, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in Firefox.
|
||||||
|
* 2. Show the overflow in Edge and IE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box; /* 1 */
|
||||||
|
height: 0; /* 1 */
|
||||||
|
overflow: visible; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-family: monospace, monospace; /* 1 */
|
||||||
|
font-size: 1em; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background on active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Remove the bottom border in Chrome 57-
|
||||||
|
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: none; /* 1 */
|
||||||
|
text-decoration: underline; /* 2 */
|
||||||
|
text-decoration: underline dotted; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace; /* 1 */
|
||||||
|
font-size: 1em; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||||
|
* all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the border on images inside links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Change the font styles in all browsers.
|
||||||
|
* 2. Remove the margin in Firefox and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: inherit; /* 1 */
|
||||||
|
font-size: 100%; /* 1 */
|
||||||
|
line-height: 1.15; /* 1 */
|
||||||
|
margin: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the overflow in IE.
|
||||||
|
* 1. Show the overflow in Edge.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input { /* 1 */
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||||
|
* 1. Remove the inheritance of text transform in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select { /* 1 */
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
[type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inner border and padding in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
border-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restore the focus styles unset by the previous rule.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button:-moz-focusring,
|
||||||
|
[type="button"]:-moz-focusring,
|
||||||
|
[type="reset"]:-moz-focusring,
|
||||||
|
[type="submit"]:-moz-focusring {
|
||||||
|
outline: 1px dotted ButtonText;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the padding in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
padding: 0.35em 0.75em 0.625em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the text wrapping in Edge and IE.
|
||||||
|
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||||
|
* 3. Remove the padding so developers are not caught out when they zero out
|
||||||
|
* `fieldset` elements in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
color: inherit; /* 2 */
|
||||||
|
display: table; /* 1 */
|
||||||
|
max-width: 100%; /* 1 */
|
||||||
|
padding: 0; /* 3 */
|
||||||
|
white-space: normal; /* 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the default vertical scrollbar in IE 10+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in IE 10.
|
||||||
|
* 2. Remove the padding in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="checkbox"],
|
||||||
|
[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the odd appearance in Chrome and Safari.
|
||||||
|
* 2. Correct the outline style in Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
outline-offset: -2px; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inner padding in Chrome and Safari on macOS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
* 2. Change font properties to `inherit` in Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
-webkit-appearance: button; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Interactive
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
details {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the correct display in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Misc
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
36
assets/plugins/_numbered.scss
Normal file
36
assets/plugins/_numbered.scss
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
$startLevel: 1;
|
||||||
|
$endLevel: 6;
|
||||||
|
|
||||||
|
.book-page .markdown.book-article {
|
||||||
|
@for $currentLevel from $startLevel through $endLevel {
|
||||||
|
> h#{$currentLevel} {
|
||||||
|
counter-increment: h#{$currentLevel};
|
||||||
|
counter-reset: h#{$currentLevel + 1};
|
||||||
|
|
||||||
|
$content: "";
|
||||||
|
@for $n from $startLevel through $currentLevel {
|
||||||
|
$content: $content + 'counter(h#{$n})"."';
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: unquote($content) " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-toc nav#TableOfContents ul {
|
||||||
|
li {
|
||||||
|
counter-increment: item;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
counter-reset: item;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: counters(item, ".") ". ";
|
||||||
|
float: left;
|
||||||
|
margin-inline-end: $padding-4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
assets/plugins/_scrollbars.scss
Normal file
26
assets/plugins/_scrollbars.scss
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
@import "defaults";
|
||||||
|
@import "variables";
|
||||||
|
|
||||||
|
// Webkit
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: $padding-8;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: transparent;
|
||||||
|
border-radius: $padding-8;
|
||||||
|
}
|
||||||
|
|
||||||
|
:hover::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--gray-500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MS
|
||||||
|
body {
|
||||||
|
-ms-overflow-style: -ms-autohiding-scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Future
|
||||||
|
.book-menu nav {
|
||||||
|
scrollbar-color: transparent var(--gray-500);
|
||||||
|
}
|
17
assets/search-data.json
Normal file
17
assets/search-data.json
Normal 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 -}}
|
||||||
|
]
|
113
assets/search.js
Normal file
113
assets/search.js
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
{{ $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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Event} event
|
||||||
|
*/
|
||||||
|
function focusSearchFieldOnKeyPress(event) {
|
||||||
|
if (event.target.value !== undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input === document.activeElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const characterPressed = String.fromCharCode(event.charCode);
|
||||||
|
if (!isHotkey(characterPressed)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} character
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
function isHotkey(character) {
|
||||||
|
const dataHotkeys = input.getAttribute('data-hotkeys') || '';
|
||||||
|
return dataHotkeys.indexOf(character) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
input.removeEventListener('focus', init); // init once
|
||||||
|
input.required = true;
|
||||||
|
|
||||||
|
fetch(searchDataURL)
|
||||||
|
.then(pages => pages.json())
|
||||||
|
.then(pages => {
|
||||||
|
window.bookSearchIndex = new Fuse(pages, indexConfig);
|
||||||
|
})
|
||||||
|
.then(() => input.required = false)
|
||||||
|
.then(search);
|
||||||
|
}
|
||||||
|
|
||||||
|
function search() {
|
||||||
|
while (results.firstChild) {
|
||||||
|
results.removeChild(results.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!input.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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.item.href;
|
||||||
|
a.textContent = page.item.title;
|
||||||
|
small.textContent = page.item.section;
|
||||||
|
|
||||||
|
results.appendChild(li);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
7
assets/sw-register.js
Normal 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
55
assets/sw.js
Normal 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
9
assets/themes/_auto.scss
Normal 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
3
assets/themes/_dark.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
:root {
|
||||||
|
@include theme-dark;
|
||||||
|
}
|
3
assets/themes/_light.scss
Normal file
3
assets/themes/_light.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
:root {
|
||||||
|
@include theme-light;
|
||||||
|
}
|
13
content/_index.md
Executable file → Normal file
13
content/_index.md
Executable file → Normal file
|
@ -1,4 +1,13 @@
|
||||||
|
---
|
||||||
|
title: home
|
||||||
|
type: docs
|
||||||
|
bookToc: false
|
||||||
|
---
|
||||||
|
|
||||||
|
<h1> apothēke (n). </h1>
|
||||||
|
|
||||||
# apothēke (n).
|
|
||||||
- [/a.po.tʰɛ̌ː.kɛː/] (αποθήκη)
|
- [/a.po.tʰɛ̌ː.kɛː/] (αποθήκη)
|
||||||
### A place designated for storing or preserving items of value or importance.
|
|
||||||
|
<h3>A place designated for storing or preserving items of value or importance.</h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
---
|
---
|
||||||
title: "about"
|
title: "about"
|
||||||
type: "peri"
|
bookToc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
I do not, and hopefully never will, claim to know the truth. In fact, I [claim the opposite](/theses/axioms/).
|
# about
|
||||||
|
|
||||||
|
I do not, and hopefully never will, claim to know the truth. In fact, I [claim the opposite]({{< relref "/theses/metaphysica/on logic/axioms" >}}).
|
||||||
|
|
||||||
## this project
|
## this project
|
||||||
|
I have an innate need to express the thoughts in my head.
|
||||||
|
|
||||||
apothēke is a showcase of my limited capability to understand the world.
|
Oftentimes I end upon conclusions that, in oral speech, am unable to express in a way that I find satisfactory. Also, due to the nature of dialogue, i.e. not a monologue, there is the propensity to diffuse the idea during a conversation; the need for a clarification of a definition might arise, or the disagreement for the use of a word which was picked for spurred rather than accuracy, etc, and in general there is no adequate space to fully expore a single idea in this process, as dialogue often is conductive to discussing and presenting a theme rather than a single subject contained within such a theme.
|
||||||
|
|
||||||
I will be wrong more times than not, and I am content with this.
|
A friend pointed out that such an endeavour must be made in caution, I could, willingly or unwillingly, engage in this out of a feel of superiority, or rather a saviour complex of sorts. I do not feel like such is the case, it is however a possibility, people lie to themselves constantly and making a public statement carries the idea of believing that you are right. Nevertheless I feel like this is more of an outlet for my brain that exists publicly in the same sense that music or poetry exist publicly, not from a need to be correct, but from a need of self expression.
|
||||||
|
|
||||||
|
apothēke is therefore a project of self expression; or rather a showcase of my limited capability to understand the world.
|
||||||
|
|
||||||
## language
|
## language
|
||||||
|
|
||||||
|
@ -19,7 +24,23 @@ Since this a public project, i.e. an express of opinion in a public forum, the a
|
||||||
|
|
||||||
## I, the person
|
## I, the person
|
||||||
|
|
||||||
Out of want to disinclude any bias that may arise from the connection between myself and my ideas, I try to maintain as much separation as possible between the metaphysical entity that is this project and my self.
|
Out of want to disinclude any bias that may arise from the connection between myself and my ideas, I try to maintain as much separation as possible between the metaphysical entity that is this project and my self. I do however feel like I need to give a proper introduction.
|
||||||
|
|
||||||
|
The [axiomatic system of faith](/theses/metaphysica/on-logic/axioms) that I choose to believe in is the dogma of the Orthodox Catholic Church, as it was established in the First Ecumenical Council of Nicaea.
|
||||||
|
|
||||||
|
This for most people who know me personally oftentimes comes as a surprise, especially to those that know me from a young age, during which I was an atheist; I rejected the axiomatic system I currently believe in, and I followed the system of "pure scientific truth", ignoring the gaps and weaknesses it presents.
|
||||||
|
|
||||||
|
The first cracks in my absolute devotion to science occurred during my first years in university, when I came into contact with friends which I will forever hold dear to my heart, as well as with various psychedelic substances, both of which caused me to reevaluate the relationship between faith and science. These substances (more on those in an upcoming corpus of text), created inside me a disruption on the idea of absoluteness of reality and of the nature of truth, and suggested to start from the beginning.
|
||||||
|
|
||||||
|
Through the above, I became exposed to new ideas, new means by which humans have interpreted nature throughout the millenia of human experience, and for years I delved into the different religions of humanity, as well as the philosophical ideas that rise from them.
|
||||||
|
|
||||||
|
These journeys, mental and physical, led me to many questions which no religion, philosophy, or axiomatic system could answer, except for the one I believe in now.
|
||||||
|
|
||||||
|
The fact that The God is, rather than not, and specifically as he is described in the Orthodox dogma, is a necessity for the system of reality, as I see it and understand it, to be self-consistent. Not only does it close the gaps that are left open by other axiomatic systems, but also eclipses and explains why these other systems occur.
|
||||||
|
|
||||||
|
Assuming someone knows, or is near to, the Truth, and modifies it, by removing sections, or by adding new ones, then they are able to create every "truthfull" system we have discovered as humans. As a result of these modifications though, it is impossible to trace back the original Truth, without the Truth itself, and the modifications and the modifiers become lost in history.
|
||||||
|
|
||||||
|
After all, the best lie is that which as much as possible contains the Truth, except for a single point, a detail that nobody can recognize as false, without first knowing the fullness of Truth.
|
||||||
|
|
||||||
## contact
|
## contact
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
title: "deloses"
|
|
||||||
type: "delosis"
|
|
||||||
---
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
---
|
|
||||||
title: "Evolutionary leftovers"
|
|
||||||
description: "A thesis on the societal role of men and women."
|
|
||||||
type: "delosis"
|
|
||||||
|
|
||||||
draft: true
|
|
||||||
---
|
|
||||||
|
|
||||||
It makes intuitive sense to consider an evolutionary process for society alongside the evolution of the human race and so, in order to figure out how the modern societal roles came to be, one must look at the societal roles of the past and move forwards in time to the present day.
|
|
||||||
|
|
||||||
The earliest one can go is around the birth of the anatomically modern humans, and the great migration out of Africa and into the rest of Afroeurasia, Oceania and the American continent.
|
|
||||||
|
|
||||||
From even back then, the societal roles were defined. In hunter-gatherer societies such as the ones of early humans, the male would traditionally go on long expeditions to hunt for meat, while the female would stay around a safe area, gathering herbs and tending to the young. The biology was also already emphasized at the time, with males already showing human male characteristics such as increased bone and muscle density. This means that one must explore even before that, and probably reach the time when the first social groups were formed with the intent of raising the young as tightly knit communities.
|
|
||||||
|
|
||||||
In such a scenario, the idea of a role distinction between biological genders starts to make sense.
|
|
||||||
|
|
||||||
Imagine a small group of ten males and ten females, living together and fending for themselves in a hostile environment. Now assume that all males but one die, leaving eleven members to the group, one male and ten females. Assuming a human gestation period of nine months, a year after the social group will have twenty one members, one male, ten female, and ten children.
|
|
||||||
|
|
||||||
Were the opposite to happen, one female left with ten males, a year after the group would have twelve members, ten male, one female, and one child.
|
|
||||||
|
|
||||||
From a biological and evolutionary standpoint therefore, there is a glaring distinction between the genders. Males are *expendable*, whilst females are not.
|
|
||||||
|
|
||||||
It makes sense in this situation to send the expendable males to hunt for food in a hostile environment, as their deaths are not as significant for the well being of the group as the death of a single female.
|
|
||||||
|
|
||||||
This however brought the caveat that women became indispencible to the group, meaning that the males, becoming stronger and more aggressive in time, could deprive females from their liberties, with the pretext of defending them from dangers, seen and unseen.
|
|
||||||
|
|
||||||
Once more complex societies started forming, and different smaller groups started to form bigger ones, this notion of protection then transformed from protecting the females from a hostile environment, to safeguarding the females from other members of other groups/tribes, since the hostile environment had been conquered. Around this idea we see the exact behaviour of cities being formed, which would frequently go to war with each other, with males being the warrior caste and the females being forced to stay at home, with strict societal rules and an expectation to care for the children. Once again, the same biological idea presents itself. Males are expendable, so females must sacrifice their liberties for the greater good.
|
|
||||||
|
|
||||||
Looking at the modern age, we see the same patterns emerge. In societies where life is still harsh and survival is not guaranteed, we still see harsh and strict codes of behaviour for women, under the pretext of protection, whilst for men we see their expendability.
|
|
||||||
|
|
||||||
In societies where the effort to fulfill basic needs becomes trivial, we see a more egalitarian approach. Since there is no seen or unseen threat to the well being of the group, males have less of a biological excuse to force their ideals on females, who in turn strive and demand the same liberties as males.
|
|
|
@ -1,23 +0,0 @@
|
||||||
---
|
|
||||||
title: "A proper introduction"
|
|
||||||
|
|
||||||
description: "Who am I? How did I get here?"
|
|
||||||
weight: 2
|
|
||||||
type: "delosis"
|
|
||||||
---
|
|
||||||
|
|
||||||
The axiomatic system of faith that I choose to believe in is the dogma of the Orthodox Catholic Church, as it was established in the First Ecumenical Council of Nicaea.
|
|
||||||
|
|
||||||
This for most people who know me personally oftentimes comes as a surprise, especially to those that know me from a young age, during which I was an atheist; I rejected the axiomatic system I currently believe in, and I followed the system of "pure scientific truth", ignoring the gaps and weaknesses it presents.
|
|
||||||
|
|
||||||
The first cracks in my absolute devotion to science occurred during my first years in university, when I came into contact with friends which I will forever hold dear to my heart, as well as with various psychedelic substances, both of which caused me to reevaluate the relationship between faith and science. The substances, psylocybin, lysergic acid diethylamide, and 2C-B, (in this order) created in me, or rather, forced me to demolish the idea of absoluteness of reality and of the nature of truth, and start from the beginning.
|
|
||||||
|
|
||||||
Through the above, I became exposed to new ideas, new means by which humans have interpreted nature throughout the millenia of human experience, and for years I delved into the different religions of humanity, as well as the philosophical ideas that rise from them.
|
|
||||||
|
|
||||||
These journeys, mental and physical, led me to many questions which no religion, philosophy, or axiomatic system could answer, except for the one I believe in now.
|
|
||||||
|
|
||||||
The fact that God is, rather than not, and specifically as he is described in the Orthodox dogma, is a necessity for the system of reality, as I see it and understand it, to be self-consistent. Not only does it close the gaps that are left open by other axiomatic systems, but also eclipses and explains why these other systems occur.
|
|
||||||
|
|
||||||
Assuming someone knows, or is near to, the Truth, and modifies it, by removing sections, or by adding new ones, then they are able to create every "truthfull" system we have discovered as humans. As a result of these modifications though, it is impossible to trace back the original Truth, without the Truth itself, and the modifications and the modifiers become lost in history.
|
|
||||||
|
|
||||||
After all, the best lie is that which wholly contains the Truth, except for a single point, a detail that nobody can recognize as false, without first knowing the Truth.
|
|
|
@ -1,10 +1,8 @@
|
||||||
---
|
---
|
||||||
title: "donations"
|
title: "donations"
|
||||||
type: "peri"
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# thank you for considering supporting
|
# thank you for considering supporting
|
||||||
Below exist some options
|
|
||||||
|
|
||||||
|Monero|Bitcoin|
|
|Monero|Bitcoin|
|
||||||
|:--:|:--:|
|
|:--:|:--:|
|
||||||
|
|
12
content/menu/_index.md
Normal file
12
content/menu/_index.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
headless: true
|
||||||
|
---
|
||||||
|
|
||||||
|
- [metaphysica]({{< relref "/theses/metaphysica" >}})
|
||||||
|
- [on logic]({{< relref "/theses/metaphysica/on logic" >}})
|
||||||
|
- [the nature of faith]({{< relref "/theses/metaphysica/on logic/axioms" >}})
|
||||||
|
- [concerning fallacies]({{< relref "/theses/metaphysica/on logic/fallacies" >}})
|
||||||
|
- [on free will]({{< relref "/theses/metaphysica/on free will" >}})
|
||||||
|
- [the existence of free will]({{< relref "/theses/metaphysica/on free will/existence" >}})
|
||||||
|
- [defining free will]({{< relref "/theses/metaphysica/on free will/definition" >}})
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
title: "theses"
|
|
||||||
type: "thesis"
|
|
||||||
---
|
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
title: "Defining free will"
|
|
||||||
chapter: "on free will"
|
|
||||||
section: 2
|
|
||||||
description: "Trying to define human behaviour"
|
|
||||||
|
|
||||||
weight: 5
|
|
||||||
type: "thesis"
|
|
||||||
draft: true
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
15
content/theses/metaphysica/_index.md
Normal file
15
content/theses/metaphysica/_index.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
title: "metaphysica"
|
||||||
|
---
|
||||||
|
|
||||||
|
# metaphysica
|
||||||
|
|
||||||
|
## introduction
|
||||||
|
'metaphysica' deals with the unseen, unverifiable, and infallible ideas and processes that I observe as influencing, or guiding, every day life.
|
||||||
|
|
||||||
|
This corpus is split into parts; the first part attempts to deconstruct logic, and the second one deals with free will. As more parts are written this page will expand to include them too.
|
||||||
|
|
||||||
|
## table of contents
|
||||||
|
1. [on logic]({{< relref "/theses/metaphysica/on logic" >}})
|
||||||
|
|
||||||
|
2. [on free will]({{< relref "/theses/metaphysica/on free will" >}})
|
17
content/theses/metaphysica/on free will/_index.md
Normal file
17
content/theses/metaphysica/on free will/_index.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: "on free will"
|
||||||
|
---
|
||||||
|
|
||||||
|
# on free will
|
||||||
|
|
||||||
|
## task
|
||||||
|
In this part, I attempt to present and prove free will as a mode of action. Multiple times throughout long discussions with others, and myself, I have run into issues pertaining to the definition and the idea that such a mode even exists.
|
||||||
|
|
||||||
|
Moreover, to be able to move ahead with discussing moral, societal, and human issues, I need to define free will, since, in every other mode of action, the aforementioned cannot exist; one needs to be able to *choose* in order to have a moral status, form relationships, and even define themselves.
|
||||||
|
|
||||||
|
Due to the infallible nature of free will, the discussion concerning the existence of free will leaves much to be desired; it is nevertheless important to the rest of the text.
|
||||||
|
|
||||||
|
## table of contents
|
||||||
|
1. [the existence of free will]({{< relref "/theses/metaphysica/on free will/existence" >}})
|
||||||
|
|
||||||
|
2. [defining free will]({{< relref "/theses/metaphysica/on free will/definition" >}})
|
18
content/theses/metaphysica/on free will/definition.md
Executable file
18
content/theses/metaphysica/on free will/definition.md
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
title: "defining free will"
|
||||||
|
---
|
||||||
|
# trying to define the modes of actions
|
||||||
|
<br />
|
||||||
|
If we accept [the idea of free will existing]({{< relref "/theses/metaphysica/on free will/existence" >}}), we should be able to define it, in order to be able to self reference and call upon to make use of this idea. This also helps in clarifying the meaning, which in everyday speech is muddled, much like most of language, due to the nature of communication (more on that at a later point).
|
||||||
|
|
||||||
|
Alongside free will, there are two more modes of behaviour in nature, determinism and pure randomness. Discussing these first is necessary to properly define free will, since these are directly observable in the outside world; free will is only directly observable in the inner state of the self, with the admission that others behave similarly.
|
||||||
|
|
||||||
|
The first term we will explore is determinism, the idea that things in nature behave in a predefined, preordained way. This mode of action is generally linked with non sentient or better yet non living things, such as rocks, metals, everyday objects that we make use of etc. By claiming that they move deterministically, we claim that there is, theoretically if not literally, a way by which we can obtain every single bit of information about the past and the future of the object under study, subject to an adequate amount of information about the current state. Here, by theoretically one can imply the existence of a perfect measurement device, that can give accurate measurements up to any level of significance one might care about. This does not guarantee absolute and complete knowledge of a system, but rather guarantees that the object in question behaves predictably, under a known or unknown set of laws, physical in nature. This means that a deterministic object cannot operate on its own, as it is fully under the influence and flow of the external world.
|
||||||
|
|
||||||
|
True randomness is the exact opposite. True randomness implies that under any circumstances, there does not exist a mechanism or set of predefined laws that we can use to guarantee that the outcome will be aligned with any prediction one might make. In this way, true randomness can only be partially predicted with the use of mechanisms that predict expected, or average behaviours, without the possibility to definitively correctly guess a single outcome. As a truly random behaviour cannot be dictated by external factors, since it would be just an extremely complex deterministic system, true randomness is not dictated by any factors.
|
||||||
|
|
||||||
|
Both of the above mechanisms appear to influence the individual. Determinism creeps in as pressure, both environmental and evolutionary, while truly random behaviour might manifest as a spontaneous, if instantaneous, change.
|
||||||
|
|
||||||
|
These however do not provide for a mechanism that allows for the individual to be influenced by their own inner state. Since deterministic behaviour has a set output for a given input, and random behaviour is nonsensical by definition, there needs to be a mechanism by which the person can, by observing and acting on themselves, change and manipulate a behaviour or outcome.
|
||||||
|
|
||||||
|
This mechanism is free will.
|
|
@ -1,18 +1,13 @@
|
||||||
---
|
---
|
||||||
title: "The existence of free will"
|
title: "the existence of free will"
|
||||||
chapter: "on free will"
|
|
||||||
section: 1
|
|
||||||
description: "Attempting to justify why we aren't souless automata"
|
|
||||||
|
|
||||||
weight: 4
|
|
||||||
type: "thesis"
|
|
||||||
---
|
---
|
||||||
|
# why we are rather than not
|
||||||
|
<br />
|
||||||
In order to define and then converse on ideas relating to free will, one must first convince themselves on its existence. Surely one can simply make a definition, as well as talk about the emergent system much like any other metaphysical structure, but for there to be a reason to do so, one must be able to argue for its existence.
|
In order to define and then converse on ideas relating to free will, one must first convince themselves on its existence. Surely one can simply make a definition, as well as talk about the emergent system much like any other metaphysical structure, but for there to be a reason to do so, one must be able to argue for its existence.
|
||||||
|
|
||||||
On this matter, there are many different arguments, however I will focus on the three that I find the strongest; this does not mean that one can prove existence, but these seem to strongly suggest and support that free will is indeed part of reality.
|
On this matter, there are many different arguments, however I will focus on the three that I find the strongest; this does not mean that one can prove existence, but these seem to strongly suggest and support that free will is indeed part of reality.
|
||||||
|
|
||||||
Before I express these arguments, I would like to take some time to explain why the existence of free will is an unprovable truth. Apart from the ideas discussed earlier [on logic](/theses/logic), and [on axioms](/theses/axioms), there is another reason, metaphysical in nature, and inseparable from the existence of the God.
|
Before I express these arguments, I would like to take some time to explain why the existence of free will is an unprovable truth. Apart from the ideas discussed earlier [on logical fallacies]({{< relref "/theses/metaphysica/on logic/fallacies" >}}), and [on axioms]({{< relref "/theses/metaphysica/on logic/axioms" >}}), there is another reason, metaphysical in nature, and inseparable from the existence of the God.
|
||||||
|
|
||||||
If one is to believe in a God that loves them fully and unconditionally, one must also believe that such a God would never force them to believe in Him; rather He would give them the option to choose to do so. In such a situation, any factual proof for the existence of God is unwanted, both by Him, and by any believer, since any such proof would ***force*** them to believe in Him, depriving them of the choice.
|
If one is to believe in a God that loves them fully and unconditionally, one must also believe that such a God would never force them to believe in Him; rather He would give them the option to choose to do so. In such a situation, any factual proof for the existence of God is unwanted, both by Him, and by any believer, since any such proof would ***force*** them to believe in Him, depriving them of the choice.
|
||||||
|
|
17
content/theses/metaphysica/on logic/_index.md
Normal file
17
content/theses/metaphysica/on logic/_index.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: "on logic"
|
||||||
|
---
|
||||||
|
|
||||||
|
# on logic
|
||||||
|
|
||||||
|
## task
|
||||||
|
In this part, I attempt to deconstruct logic; with one singular purpose, to prove that logic is not self consistent, and therefore fails the necessary condition set by logic itself for a mode of thinking to be useful. This is done since, if logic itself is paradoxically true and false at the same time, it probably does not exist.
|
||||||
|
|
||||||
|
This is beneficial, because with the existence of logic one is extremely limited to the ideas that they can discuss; truthfully one can only speak of mathematical concepts given that logic is the only way to approach reality.
|
||||||
|
|
||||||
|
To show that we can talk about the unobservable and infallible, I create a weak and a strong claim of axiomatic reliance. The weak claim deals with the nature of axioms as a matter of faith, whilst the strong claim deals with the axiomatic reality of all knowledge.
|
||||||
|
|
||||||
|
## table of contents
|
||||||
|
1. [the nature of faith]({{< relref "/theses/metaphysica/on logic/axioms" >}})
|
||||||
|
|
||||||
|
2. [concerning fallacies]({{< relref "/theses/metaphysica/on logic/fallacies" >}})
|
11
content/theses/axioms.md → content/theses/metaphysica/on logic/axioms.md
Executable file → Normal file
11
content/theses/axioms.md → content/theses/metaphysica/on logic/axioms.md
Executable file → Normal file
|
@ -1,13 +1,8 @@
|
||||||
---
|
---
|
||||||
title: "The nature of faith"
|
title: "the nature of faith"
|
||||||
chapter: "on logic"
|
|
||||||
section: 1
|
|
||||||
description: "A thesis on the axiomatic foundation of reality"
|
|
||||||
|
|
||||||
weight: 1
|
|
||||||
type: "thesis"
|
|
||||||
---
|
---
|
||||||
|
# a thesis on the axiomatic foundation of knowledge
|
||||||
|
<br />
|
||||||
The words "logic" and "knowledge" are often connected in the minds of humans. In the sciences, logic is used religiously, in an attempt to obtain knowledge, in the same way that it is used in religions.
|
The words "logic" and "knowledge" are often connected in the minds of humans. In the sciences, logic is used religiously, in an attempt to obtain knowledge, in the same way that it is used in religions.
|
||||||
|
|
||||||
In truth, logic is unable to lead to complete, general knowledge inside of a system, which fully describes the Truth.
|
In truth, logic is unable to lead to complete, general knowledge inside of a system, which fully describes the Truth.
|
|
@ -1,18 +1,13 @@
|
||||||
---
|
---
|
||||||
title: "Concerning logic"
|
title: "concerning fallacies"
|
||||||
chapter: "on logic"
|
|
||||||
section: 2
|
|
||||||
description: "Most appeals to logic are appeals to authority"
|
|
||||||
|
|
||||||
weight: 3
|
|
||||||
type: "thesis"
|
|
||||||
---
|
---
|
||||||
|
# most appeals to logic are appeals to authority
|
||||||
To conclude the [discussion on logic](/theses/axioms/), I would like to examine in depth the propagation of knowledge, in order to present the greatest result; the fact that most appeals to logic are themselves a logical fallacy.
|
<br />
|
||||||
|
To conclude the [discussion on logic](/theses/metaphysica/on-logic/axioms/), I would like to examine in depth the propagation of knowledge, in order to present the greatest result; the fact that most appeals to logic are themselves a logical fallacy.
|
||||||
|
|
||||||
Logical fallacies are, like all named things, characterizations; and they grant a person the ability to understand if a proposition is logically consistent in the broader system of an axiomatic system.
|
Logical fallacies are, like all named things, characterizations; and they grant a person the ability to understand if a proposition is logically consistent in the broader system of an axiomatic system.
|
||||||
|
|
||||||
The fallacy that is most worth discussing here is the one committed when appealing to an authority (*argentum ab auctoritate* in Latin), which states that such appeals to an authority should not and cannot stand as a logical argument. This is because every authoritative figure, being human, has the capacity to make mistakes, or to not express themselves in a perfect manner, or to even act maliciously. At the same time, every individual appealing to said authority might have misunderstood the content of the argument, or act maliciously for personal benefit.
|
The fallacy that is most worth discussing here is the one committed when appealing to an authority, which should not and cannot stand as a logical argument. This is because every authoritative figure, being human, has the capacity to make mistakes, or to not express themselves in a perfect manner, or to even act maliciously. At the same time, every individual appealing to said authority might have misunderstood the content of the argument, or act maliciously for personal benefit.
|
||||||
|
|
||||||
Besides, such techniques have been used countless times throughout history, in order to convince and manipulate individuals to surrender their liberties, their properties and themselves to others.
|
Besides, such techniques have been used countless times throughout history, in order to convince and manipulate individuals to surrender their liberties, their properties and themselves to others.
|
||||||
|
|
155
hugo.toml
Executable file → Normal file
155
hugo.toml
Executable file → Normal file
|
@ -1,74 +1,119 @@
|
||||||
baseURL = 'https://apotheke.earth/'
|
baseURL = 'https://apotheke.earth/'
|
||||||
|
languageCode = 'en-us'
|
||||||
title = 'apothēke'
|
title = 'apothēke'
|
||||||
|
|
||||||
languageCode = 'en-us'
|
# Book configuration
|
||||||
DefaultContentLanguage = "en"
|
disablePathToLower = false
|
||||||
pygmentsStyle = "monokai"
|
enableGitInfo = false
|
||||||
|
|
||||||
enableEmoji = false
|
# Needed for mermaid/katex shortcodes
|
||||||
enableRobotsTXT = true
|
[markup]
|
||||||
|
[markup.goldmark.renderer]
|
||||||
|
unsafe = true
|
||||||
|
|
||||||
[menu]
|
[markup.tableOfContents]
|
||||||
[[menu.main]]
|
startLevel = 1
|
||||||
url="/"
|
|
||||||
name="frontispiece"
|
# Multi-lingual mode config
|
||||||
|
# There are different options to translate files
|
||||||
|
# See https://gohugo.io/content-management/multilingual/#translation-by-filename
|
||||||
|
# And https://gohugo.io/content-management/multilingual/#translation-by-content-directory
|
||||||
|
|
||||||
|
[languages]
|
||||||
|
[languages.en]
|
||||||
|
languageName = 'English'
|
||||||
|
contentDir = 'content'
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[menu.main]]
|
[menu]
|
||||||
url="/about/"
|
|
||||||
name="about"
|
|
||||||
weight = 2
|
|
||||||
|
|
||||||
[[menu.main]]
|
# [[menu.before]]
|
||||||
url="/theses/"
|
# name = "home"
|
||||||
name="theses"
|
# url = "/"
|
||||||
weight = 3
|
# weight = 10
|
||||||
|
|
||||||
[[menu.main]]
|
[[menu.after]]
|
||||||
url="/deloses/"
|
name = "about"
|
||||||
name="deloses"
|
url = "/about"
|
||||||
weight = 4
|
weight = 10
|
||||||
|
[[menu.after]]
|
||||||
[[menu.main]]
|
name = "donate"
|
||||||
identifier = "rss"
|
url = "/donate"
|
||||||
pre = "<span data-feather='rss' />"
|
weight = 20
|
||||||
url = "/index.xml"
|
[[menu.after]]
|
||||||
weight = 7
|
name = "sr.ht"
|
||||||
[menu.main.params]
|
url = "https://git.sr.ht/~aethrvmn/apotheke.earth"
|
||||||
newPage = true
|
weight = 100
|
||||||
|
|
||||||
[sitemap]
|
|
||||||
changefreq = "monthly"
|
|
||||||
priority = 0.5
|
|
||||||
filename = "sitemap.xml"
|
|
||||||
|
|
||||||
[params]
|
[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 = 'auto'
|
||||||
|
|
||||||
ShowBackToTopButton=true
|
# (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 = false
|
||||||
|
|
||||||
# Accent color is displayed when you hover over <a> tags
|
# (Optional, default favicon.png) Set the path to a favicon file.
|
||||||
accentColor = "#AC9C6D"
|
# If the favicon is /static/favicon.png then the path would be favicon.png
|
||||||
|
BookFavicon = 'favicon.ico'
|
||||||
|
|
||||||
toctitle="table of contents"
|
# (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'
|
||||||
|
|
||||||
text_color = ""
|
# (Optional, default none) Set leaf bundle to render as side menu
|
||||||
author = ""
|
# When not specified file structure and weights will be used
|
||||||
favicon = ""
|
BookMenuBundle = '/menu'
|
||||||
site_logo = ""
|
|
||||||
|
|
||||||
customHeadHTML = '''
|
# (Optional, default docs) Specify root page to render child pages as menu.
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous">
|
# Page is resoled by .GetPage function: https://gohugo.io/functions/getpage/
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.js" integrity="sha384-X/XCfMm41VSsqRNQgDerQczD69XqmjOOOwYQvr/uuC+j4OPoNhVgjdGFwhvN02Ja" crossorigin="anonymous"></script>
|
# For backward compatibility you can set '*' to render all sections to menu. Acts same as '/'
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js" integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" crossorigin="anonymous"></script>
|
BookSection = 'theses'
|
||||||
'''
|
|
||||||
|
|
||||||
customFooterHTML= """
|
# Set source repository location.
|
||||||
<span style="margin-top:20px;padding-top:10px">
|
# Used for 'Last Modified' and 'Edit this page' links.
|
||||||
You can support this project by <a href="/donate">donating</a>
|
BookRepo = ''
|
||||||
</span>
|
|
||||||
"""
|
|
||||||
|
|
||||||
showPostsOnHomePage = "recent"
|
# (Optional, default 'commit') Specifies commit portion of the link to the page's last modified
|
||||||
togglePreviousAndNextButtons = "true"
|
# 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.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# (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
|
||||||
|
# See https://gohugo.io/content-management/comments/#configure-disqus
|
||||||
|
# Can be overwritten by same param in page frontmatter
|
||||||
|
BookComments = false
|
||||||
|
|
||||||
|
# /!\ This is an experimental feature, might be removed or changed at any time
|
||||||
|
# (Optional, experimental, default false) Enables portable links and link checks in markdown pages.
|
||||||
|
# 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
|
||||||
|
|
14
i18n/en.toml
14
i18n/en.toml
|
@ -1,14 +0,0 @@
|
||||||
[Recent]
|
|
||||||
other = 'decent'
|
|
||||||
[error404]
|
|
||||||
other = 'this page does not exist, go'
|
|
||||||
[home]
|
|
||||||
other = 'home'
|
|
||||||
[nothing]
|
|
||||||
other = 'nothing to see here, yet'
|
|
||||||
[previous]
|
|
||||||
other = 'previous'
|
|
||||||
[next]
|
|
||||||
other = 'next'
|
|
||||||
[tags]
|
|
||||||
other = 'tags'
|
|
14
i18n/en.yaml
Normal file
14
i18n/en.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
- id: Search
|
||||||
|
translation: Search
|
||||||
|
|
||||||
|
- id: Edit this page
|
||||||
|
translation: Edit this page
|
||||||
|
|
||||||
|
- id: Last modified by
|
||||||
|
translation: Last modified by
|
||||||
|
|
||||||
|
- id: Expand
|
||||||
|
translation: Expand
|
||||||
|
|
||||||
|
- id: bookSearchConfig
|
||||||
|
translation: '{ cache: true }'
|
34
layouts/404.html
Normal file
34
layouts/404.html
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ .Site.Language.Lang }}">
|
||||||
|
|
||||||
|
<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 not-found">
|
||||||
|
<div>
|
||||||
|
<h1>404</h1>
|
||||||
|
<h2>Page Not Found</h2>
|
||||||
|
<h3>
|
||||||
|
<a href="{{ .Site.Home.RelPermalink }}">{{ .Site.Title }}</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{{ partial "docs/inject/body" . }}
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
4
layouts/_default/_markup/render-heading.html
Normal file
4
layouts/_default/_markup/render-heading.html
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<h{{ .Level }} id="{{ .Anchor | safeURL }}">
|
||||||
|
{{ .Text | safeHTML }}
|
||||||
|
<a class="anchor" href="#{{ .Anchor | safeURL }}">#</a>
|
||||||
|
</h{{ .Level }}>
|
19
layouts/_default/_markup/render-image.html
Normal file
19
layouts/_default/_markup/render-image.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{{- if .Page.Site.Params.BookPortableLinks -}}
|
||||||
|
{{- template "portable-image" . -}}
|
||||||
|
{{- else -}}
|
||||||
|
<img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }}title="{{ . }}"{{ end }}/>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "portable-image" -}}
|
||||||
|
{{- $isRemote := or (in .Destination "://") (strings.HasPrefix .Destination "//") }}
|
||||||
|
{{- if not $isRemote }}
|
||||||
|
{{- $path := print .Page.File.Dir .Destination }}
|
||||||
|
{{- if strings.HasPrefix .Destination "/" }}
|
||||||
|
{{- $path = print "/static" .Destination }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if not (fileExists $path) }}
|
||||||
|
{{- warnf "Image '%s' not found in '%s'" .Destination .Page.File }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }}title="{{ . }}"{{ end }}/>
|
||||||
|
{{- end -}}
|
28
layouts/_default/_markup/render-link.html
Normal file
28
layouts/_default/_markup/render-link.html
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{{- if .Page.Site.Params.BookPortableLinks -}}
|
||||||
|
{{- template "portable-link" . -}}
|
||||||
|
{{- else -}}
|
||||||
|
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "portable-link" -}}
|
||||||
|
{{- $destination := .Destination }}
|
||||||
|
{{- $isRemote := or (in .Destination ":") (strings.HasPrefix .Destination "//") }}
|
||||||
|
{{- if not $isRemote }}
|
||||||
|
{{- $url := urls.Parse .Destination }}
|
||||||
|
{{- $path := strings.TrimSuffix "/_index.md" $url.Path }}
|
||||||
|
{{- $path = strings.TrimSuffix "/_index" $path }}
|
||||||
|
{{- $path = strings.TrimSuffix ".md" $path }}
|
||||||
|
{{- $page := .Page.GetPage $path }}
|
||||||
|
{{- if $page }}
|
||||||
|
{{- $destination = $page.RelPermalink }}
|
||||||
|
{{- if $url.Fragment }}
|
||||||
|
{{- $destination = print $destination "#" $url.Fragment }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if fileExists (print .Page.File.Dir .Destination) }}
|
||||||
|
<!-- Nothing -->
|
||||||
|
{{- else -}}
|
||||||
|
{{- warnf "Page '%s' not found in '%s'" .Destination .Page.File }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<a href="{{ $destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
|
||||||
|
{{- end -}}
|
|
@ -1,23 +1,83 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="{{ default .Site.Language.Lang .Site.LanguageCode }}" dir="{{ default "ltr" .Site.Language.LanguageDirection }}">
|
||||||
{{- $avatarImgSrc := .Site.Params.AvatarURL -}}
|
<head>
|
||||||
{{- if and (isset site.Params "avatarURL") (not (hasPrefix $avatarImgSrc "http")) -}}
|
{{ partial "docs/html-head" . }}
|
||||||
{{- $avatarImgSrc = (urls.JoinPath $.Site.BaseURL ($.Site.Params.AvatarURL | default "")) -}}
|
{{ partial "docs/inject/head" . }}
|
||||||
{{- end -}}
|
</head>
|
||||||
{{- .Scratch.Set "avatarImgSrc" $avatarImgSrc -}}
|
<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">
|
||||||
|
<div class="book-menu-content">
|
||||||
|
{{ template "menu" . }} <!-- Left menu Content -->
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
|
||||||
{{- partial "head.html" . -}}
|
<div class="book-page">
|
||||||
<body>
|
<header class="book-header">
|
||||||
<script type="text/javascript">
|
{{ template "header" . }} <!-- Mobile layout header -->
|
||||||
// Immediately set theme on page load
|
</header>
|
||||||
setThemeByUserPref();
|
|
||||||
</script>
|
{{ partial "docs/inject/content-before" . }}
|
||||||
{{- partial "header.html" . -}}
|
{{ template "main" . }} <!-- Page Content -->
|
||||||
<main id="content">
|
{{ partial "docs/inject/content-after" . }}
|
||||||
{{- block "main" . }}{{- end }}
|
|
||||||
|
<footer class="book-footer">
|
||||||
|
{{ template "footer" . }} <!-- Footer under page content -->
|
||||||
|
{{ partial "docs/inject/footer" . }}
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
{{ template "comments" . }} <!-- Comments block -->
|
||||||
|
|
||||||
|
<label for="menu-control" class="hidden book-menu-overlay"></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
|
||||||
|
<aside class="book-toc">
|
||||||
|
<div class="book-toc-content">
|
||||||
|
{{ template "toc" . }} <!-- Table of Contents -->
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
{{ end }}
|
||||||
</main>
|
</main>
|
||||||
{{- partial "footer.html" . -}}
|
|
||||||
</body>
|
{{ partial "docs/inject/body" . }}
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
{{ define "menu" }}
|
||||||
|
{{ partial "docs/menu" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "header" }}
|
||||||
|
{{ partial "docs/header" . }}
|
||||||
|
|
||||||
|
{{ if default true (default .Site.Params.BookToC .Params.BookToC) }}
|
||||||
|
<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" }}
|
||||||
|
<article class="markdown book-article">
|
||||||
|
{{- .Content -}}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "toc" }}
|
||||||
|
{{ partial "docs/toc" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
|
@ -1,9 +1 @@
|
||||||
{{ define "main" }}
|
{{ define "dummy" }}{{ end }}
|
||||||
{{ if eq .Type "thesis" }}
|
|
||||||
{{- partial "thesis-list.html" . -}}
|
|
||||||
{{ else if eq .Type "delosis" }}
|
|
||||||
{{- partial "delosis-list.html" . -}}
|
|
||||||
{{ else }}
|
|
||||||
{{- partial "404.html" . -}}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
|
@ -1,12 +1 @@
|
||||||
{{ define "main" }}
|
{{ define "dummy" }}{{ end }}
|
||||||
{{ if or (eq .Type "dilosis") (eq .Type "thesis") }}
|
|
||||||
{{- partial "keimeno.html" . -}}
|
|
||||||
{{- partial "toc.html" . -}}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ if eq .Type "peri" }}
|
|
||||||
{{- partial "peri.html" . -}}
|
|
||||||
{{- partial "toc.html" . -}}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
{{ define "main" }}
|
|
||||||
|
|
||||||
<div class ="markdown-content">
|
|
||||||
{{ readFile "_index.md" | markdownify }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="home-posts list-posts">
|
|
||||||
<h2> {{ .Site.Params.toctitle }} </h2>
|
|
||||||
|
|
||||||
{{- partial "thesis-list.html" . -}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ end }}
|
|
|
@ -1,19 +0,0 @@
|
||||||
{{ define "main"}}
|
|
||||||
|
|
||||||
<div class="text-404">
|
|
||||||
<h1 class="error-emoji"></h1>
|
|
||||||
<h2>
|
|
||||||
... {{ i18n "error404" . }} <a href="{{ .Site.BaseURL }}">{{ i18n "home" }}</a>
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
const errorEmojiContainer = document.getElementsByClassName('error-emoji')[0];
|
|
||||||
const emojiArray = [
|
|
||||||
'\\(o_o)/', '(o^^)o', '(˚Δ˚)b', '(^-^*)', '(≥o≤)', '(^_^)b', '(·_·)',
|
|
||||||
'(=\'X\'=)', '(>_<)', '(;-;)', '\\(^Д^)/',
|
|
||||||
];
|
|
||||||
const errorEmoji = emojiArray[Math.floor(Math.random() * emojiArray.length)];
|
|
||||||
errorEmojiContainer.appendChild(document.createTextNode(errorEmoji));
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{{ end }}
|
|
|
@ -1,9 +0,0 @@
|
||||||
<div class="container list-posts">
|
|
||||||
|
|
||||||
{{ $deloses := where .Site.Pages "Params.type" "delosis"}}
|
|
||||||
|
|
||||||
<h1 class="list-title">deloses</h1>
|
|
||||||
|
|
||||||
<h3 class="list-title">this is being written</h2>
|
|
||||||
|
|
||||||
</div>
|
|
8
layouts/partials/docs/brand.html
Normal file
8
layouts/partials/docs/brand.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<h2 class="book-brand">
|
||||||
|
<a class="flex align-center" href="{{ cond (not .Site.Home.File) .Sites.First.Home.RelPermalink .Site.Home.RelPermalink }}">
|
||||||
|
{{- with .Site.Params.BookLogo -}}
|
||||||
|
<img src="{{ . | relURL }}" alt="Logo" />
|
||||||
|
{{- end -}}
|
||||||
|
<span>{{ .Site.Title }}</span>
|
||||||
|
</a>
|
||||||
|
</h2>
|
2
layouts/partials/docs/comments.html
Normal file
2
layouts/partials/docs/comments.html
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<!-- This partial can be replaced to support other commenting engines -->
|
||||||
|
{{ template "_internal/disqus.html" . }}
|
6
layouts/partials/docs/date.html
Normal file
6
layouts/partials/docs/date.html
Normal 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) -}}
|
28
layouts/partials/docs/footer.html
Normal file
28
layouts/partials/docs/footer.html
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<div class="flex flex-wrap justify-between">
|
||||||
|
|
||||||
|
{{ if and .GitInfo .Site.Params.BookRepo }}
|
||||||
|
<div>
|
||||||
|
{{- $date := partial "docs/date" (dict "Date" .GitInfo.AuthorDate.Local "Format" .Site.Params.BookDateFormat) -}}
|
||||||
|
{{- $commitPath := default "commit" .Site.Params.BookCommitPath -}}
|
||||||
|
<a class="flex align-center" href="{{ .Site.Params.BookRepo }}/{{ $commitPath }}/{{ .GitInfo.Hash }}" 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>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if and .File .Site.Params.BookRepo .Site.Params.BookEditPath }}
|
||||||
|
<div>
|
||||||
|
<a class="flex align-center" href="{{ .Site.Params.BookRepo }}/{{ .Site.Params.BookEditPath }}/{{ .Site.Params.contentDir | default "content" }}/{{ replace .File.Path "\\" "/" }}" 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 }}
|
11
layouts/partials/docs/header.html
Normal file
11
layouts/partials/docs/header.html
Normal file
|
@ -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>
|
||||||
|
|
||||||
|
<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>
|
1
layouts/partials/docs/html-head-title.html
Normal file
1
layouts/partials/docs/html-head-title.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{ partial "docs/title" . }} | {{ .Site.Title -}}
|
60
layouts/partials/docs/html-head.html
Normal file
60
layouts/partials/docs/html-head.html
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<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/html-head-title" . }}</title>
|
||||||
|
|
||||||
|
{{- $manifest := resources.Get "manifest.json" | resources.ExecuteAsTemplate "manifest.json" . }}
|
||||||
|
<link rel="manifest" href="{{ $manifest.RelPermalink }}">
|
||||||
|
<link rel="icon" href="{{ .Site.Params.BookFavicon | default "favicon.png" | relURL }}" >
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
|
||||||
|
{{- range .Translations }}
|
||||||
|
<link rel="alternate" hreflang="{{ default .Language.Lang .Site.LanguageCode }}" href="{{ .Permalink }}" title="{{ partial "docs/title" . }}">
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<!-- GFS Didot font -->
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=GFS+Didot&display=swap" rel="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
<!-- 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 }}" {{ 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 .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.html" . -}}
|
||||||
|
|
||||||
|
<!-- RSS -->
|
||||||
|
{{- with .OutputFormats.Get "rss" -}}
|
||||||
|
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{ "<!--" | safeHTML }}
|
||||||
|
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 -}}
|
0
layouts/partials/docs/inject/body.html
Normal file
0
layouts/partials/docs/inject/body.html
Normal file
0
layouts/partials/docs/inject/content-after.html
Normal file
0
layouts/partials/docs/inject/content-after.html
Normal file
0
layouts/partials/docs/inject/content-before.html
Normal file
0
layouts/partials/docs/inject/content-before.html
Normal file
0
layouts/partials/docs/inject/footer.html
Normal file
0
layouts/partials/docs/inject/footer.html
Normal file
0
layouts/partials/docs/inject/head.html
Normal file
0
layouts/partials/docs/inject/head.html
Normal file
0
layouts/partials/docs/inject/menu-after.html
Normal file
0
layouts/partials/docs/inject/menu-after.html
Normal file
0
layouts/partials/docs/inject/menu-before.html
Normal file
0
layouts/partials/docs/inject/menu-before.html
Normal file
0
layouts/partials/docs/inject/toc-after.html
Normal file
0
layouts/partials/docs/inject/toc-after.html
Normal file
0
layouts/partials/docs/inject/toc-before.html
Normal file
0
layouts/partials/docs/inject/toc-before.html
Normal file
33
layouts/partials/docs/languages.html
Normal file
33
layouts/partials/docs/languages.html
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<!-- Merge home and current page translations -->
|
||||||
|
{{ $bookTranslatedOnly := default false .Site.Params.BookTranslatedOnly }}
|
||||||
|
{{ $translations := dict }}
|
||||||
|
{{ if (eq $bookTranslatedOnly false ) }}
|
||||||
|
{{ range .Site.Home.Translations }}
|
||||||
|
{{ $translations = merge $translations (dict .Language.Lang .) }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ range .Translations }}
|
||||||
|
{{ $translations = merge $translations (dict .Language.Lang .) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<ul class="book-languages">
|
||||||
|
<li>
|
||||||
|
<input type="checkbox" id="languages" class="toggle" />
|
||||||
|
<label for="languages" class="flex justify-between">
|
||||||
|
<a role="button" class="flex align-center">
|
||||||
|
<img src="{{ "svg/translate.svg" | relURL }}" class="book-icon" alt="Languages" />
|
||||||
|
{{ $.Site.Language.LanguageName }}
|
||||||
|
</a>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{{ range .Site.Languages }}{{ with index $translations .Lang }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .Permalink }}">
|
||||||
|
{{ .Language.LanguageName }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}{{ end }}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
5
layouts/partials/docs/menu-bundle.html
Normal file
5
layouts/partials/docs/menu-bundle.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ with .Site.GetPage .Site.Params.BookMenuBundle }}
|
||||||
|
{{- $href := printf "href=\"%s\"" $.RelPermalink -}}
|
||||||
|
{{- replace .Content $href (print $href "class=active") | safeHTML -}}
|
||||||
|
{{- warnf "Bundle menu mode is deprecated and will be removed" -}}
|
||||||
|
{{ end }}
|
49
layouts/partials/docs/menu-filetree.html
Normal file
49
layouts/partials/docs/menu-filetree.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{{ $bookSection := default "docs" .Site.Params.BookSection }}
|
||||||
|
{{ if eq $bookSection "*" }}
|
||||||
|
{{ $bookSection = "/" }}{{/* Backward compatibility */}}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ with .Site.GetPage $bookSection }}
|
||||||
|
{{ template "book-section-children" (dict "Section" . "CurrentPage" $) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "book-section-children" }}{{/* (dict "Section" .Section "CurrentPage" .CurrentPage) */}}
|
||||||
|
<ul>
|
||||||
|
{{ range (where .Section.Pages "Params.bookhidden" "ne" true) }}
|
||||||
|
{{ if .IsSection }}
|
||||||
|
<li {{- if .Params.BookFlatSection }} class="book-section-flat" {{ end -}}>
|
||||||
|
{{ template "book-page-link" (dict "Page" . "CurrentPage" $.CurrentPage) }}
|
||||||
|
{{ template "book-section-children" (dict "Section" . "CurrentPage" $.CurrentPage) }}
|
||||||
|
</li>
|
||||||
|
{{ else if and .IsPage .Content }}
|
||||||
|
<li>
|
||||||
|
{{ template "book-page-link" (dict "Page" . "CurrentPage" $.CurrentPage) }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "book-page-link" }}{{/* (dict "Page" .Page "CurrentPage" .CurrentPage) */}}
|
||||||
|
{{ $current := eq .CurrentPage .Page }}
|
||||||
|
{{ $ancestor := .Page.IsAncestor .CurrentPage }}
|
||||||
|
|
||||||
|
{{ if .Page.Params.BookCollapseSection }}
|
||||||
|
<input type="checkbox" id="section-{{ md5 .Page }}" class="toggle" {{ if or $current $ancestor }}checked{{ end }} />
|
||||||
|
<label for="section-{{ md5 .Page }}" class="flex justify-between">
|
||||||
|
<a {{ if .Page.Content }}href="{{ .Page.RelPermalink }}"{{ else }}role="button"{{ end }} class="{{ if $current }}active{{ end }}">
|
||||||
|
{{- partial "docs/title" .Page -}}
|
||||||
|
</a>
|
||||||
|
</label>
|
||||||
|
{{ else if .Page.Params.BookHref }}
|
||||||
|
<a href="{{ .Page.Params.BookHref }}" class="{{ if $current }}active{{ end }}" target="_blank" rel="noopener">
|
||||||
|
{{- partial "docs/title" .Page -}}
|
||||||
|
</a>
|
||||||
|
{{ else if .Page.Content }}
|
||||||
|
<a href="{{ .Page.RelPermalink }}" class="{{ if $current }}active{{ end }}">
|
||||||
|
{{- partial "docs/title" .Page -}}
|
||||||
|
</a>
|
||||||
|
{{ else }}
|
||||||
|
<span>{{- partial "docs/title" .Page -}}</span>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
28
layouts/partials/docs/menu-hugo.html
Normal file
28
layouts/partials/docs/menu-hugo.html
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<!--
|
||||||
|
This is template for hugo menus, accepts MenuEntity as context
|
||||||
|
https://gohugo.io/variables/menus/
|
||||||
|
-->
|
||||||
|
{{ if . }}
|
||||||
|
{{ template "book-menu-hugo" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "book-menu-hugo" }}
|
||||||
|
<ul>
|
||||||
|
{{ range . }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .URL }}" {{ with .Params.class }}class="{{ . }}"{{ end }} {{ if not .Page }}target="_blank" rel="noopener"{{ end }}>
|
||||||
|
{{- .Pre -}}
|
||||||
|
{{ with .Page }}
|
||||||
|
{{ partial "docs/title" .Page }}
|
||||||
|
{{ else }}
|
||||||
|
{{ .Name }}
|
||||||
|
{{ end }}
|
||||||
|
{{- .Post -}}
|
||||||
|
</a>
|
||||||
|
{{- with .Children }}
|
||||||
|
{{ template "book-menu-hugo" . }}
|
||||||
|
{{- end }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
25
layouts/partials/docs/menu.html
Normal file
25
layouts/partials/docs/menu.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<nav>
|
||||||
|
{{ partial "docs/brand" . }}
|
||||||
|
{{ partial "docs/search" . }}
|
||||||
|
|
||||||
|
|
||||||
|
{{ partial "docs/inject/menu-before" . }}
|
||||||
|
{{ partial "docs/menu-hugo" .Site.Menus.before }}
|
||||||
|
|
||||||
|
{{ if .Site.Params.BookMenuBundle }}
|
||||||
|
{{ partial "docs/menu-bundle" . }}
|
||||||
|
{{ else }}
|
||||||
|
{{ partial "docs/menu-filetree" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<div style="bottom:0; position:fixed;">
|
||||||
|
{{ partial "docs/menu-hugo" .Site.Menus.after }}
|
||||||
|
{{ partial "docs/inject/menu-after" . }}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Restore menu position as soon as possible to avoid flickering -->
|
||||||
|
{{ $script := resources.Get "menu-reset.js" | resources.Minify }}
|
||||||
|
{{ with $script.Content }}
|
||||||
|
<script>{{ . | safeJS }}</script>
|
||||||
|
{{ end }}
|
23
layouts/partials/docs/post-meta.html
Normal file
23
layouts/partials/docs/post-meta.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{{ with .Date }}
|
||||||
|
<h5>{{ partial "docs/date" (dict "Date" . "Format" $.Site.Params.BookDateFormat) }}</h5>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ range $taxonomy, $_ := .Site.Taxonomies }}
|
||||||
|
{{ with $terms := $.GetTerms $taxonomy }}
|
||||||
|
<div>
|
||||||
|
{{ range $n, $term := $terms }}{{ if $n }}, {{ end }}
|
||||||
|
<a href="{{ $term.RelPermalink }}">{{ $term.Title }}</a>
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if .Params.image }}
|
||||||
|
<p>
|
||||||
|
{{ with .Resources.GetMatch .Params.image }}
|
||||||
|
<img src={{ .RelPermalink }} />
|
||||||
|
{{ else }}
|
||||||
|
<img src={{ .Params.image | relURL }} />
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
8
layouts/partials/docs/search.html
Normal file
8
layouts/partials/docs/search.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{{ if default true .Site.Params.BookSearch }}
|
||||||
|
<div class="book-search hidden">
|
||||||
|
<input type="text" id="book-search-input" placeholder="{{ i18n "Search" }}" aria-label="{{ i18n "Search" }}" maxlength="64" data-hotkeys="s/" />
|
||||||
|
<div class="book-search-spinner hidden"></div>
|
||||||
|
<ul id="book-search-results"></ul>
|
||||||
|
</div>
|
||||||
|
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
|
||||||
|
{{ end }}
|
19
layouts/partials/docs/taxonomy.html
Normal file
19
layouts/partials/docs/taxonomy.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
{{ range $term, $_ := .Site.Taxonomies }}
|
||||||
|
{{ with $.Site.GetPage (printf "/%s" $term | urlize) }}
|
||||||
|
<li class="book-section-flat">
|
||||||
|
<strong>{{ .Title | title }}</strong>
|
||||||
|
<ul>
|
||||||
|
{{ range .Pages }}
|
||||||
|
<li class="flex justify-between">
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||||
|
<span>{{ len .Pages }}</span>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
17
layouts/partials/docs/title.html
Normal file
17
layouts/partials/docs/title.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<!--
|
||||||
|
Partial to generate page name from Title or File name.
|
||||||
|
Accepts Page as context
|
||||||
|
-->
|
||||||
|
{{ $title := "" }}
|
||||||
|
|
||||||
|
{{ if .LinkTitle }}
|
||||||
|
{{ $title = .LinkTitle }}
|
||||||
|
{{ else if .Title }}
|
||||||
|
{{ $title = .Title }}
|
||||||
|
{{ else if and .IsSection .File }}
|
||||||
|
{{ $title = path.Base .File.Dir | humanize | title }}
|
||||||
|
{{ else if and .IsPage .File }}
|
||||||
|
{{ $title = .File.BaseFileName | humanize | title }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ return $title }}
|
3
layouts/partials/docs/toc.html
Normal file
3
layouts/partials/docs/toc.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{{ partial "docs/inject/toc-before" . }}
|
||||||
|
{{ .TableOfContents }}
|
||||||
|
{{ partial "docs/inject/toc-after" . }}
|
|
@ -1,9 +0,0 @@
|
||||||
<footer class="footer">
|
|
||||||
<!-- Option for user to inject custom html -->
|
|
||||||
{{ if .Site.Params.CustomFooterHTML }}
|
|
||||||
{{ .Site.Params.CustomFooterHTML | safeHTML }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<span>© {{ now.Year }} </span>
|
|
||||||
</footer>
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
--accent-color: {{ .Site.Params.AccentColor | default "#FF4D4D" }};
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{{ $title := .Title | default .Site.Title }}
|
|
||||||
{{ $description := .Description | default .Site.Params.Description }}
|
|
||||||
{{ $image := .Params.image | default (.Scratch.Get "avatarImgSrc") }}
|
|
||||||
{{ $siteKeywords := .Site.Params.MetaKeywords | default (slice) }}
|
|
||||||
{{ $postKeywords := .Params.tags | default (slice) }}
|
|
||||||
{{ $keywords := union $siteKeywords $postKeywords }}
|
|
||||||
|
|
||||||
<!-- SEO titles & descriptions -->
|
|
||||||
{{ if .IsHome }}
|
|
||||||
<title>{{ lower .Site.Title }} | home</title>
|
|
||||||
{{else}}
|
|
||||||
<title> {{ lower .Site.Title }} | {{ lower $title}} </title>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<meta name="description" content="{{ $description }}">
|
|
||||||
<meta name="keywords" content='{{ delimit $keywords ", "}}'>
|
|
||||||
|
|
||||||
<meta property="og:url" content="{{ .Permalink }}">
|
|
||||||
<meta property="og:type" content="website">
|
|
||||||
<meta property="og:title" content="{{ $title }}">
|
|
||||||
<meta property="og:description" content="{{ $description }}">
|
|
||||||
<meta property="og:image" content="{{ absURL $image }}">
|
|
||||||
<meta property="og:image:secure_url" content="{{ absURL $image }}">
|
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
|
||||||
<meta name="twitter:title" content="{{ $title }}">
|
|
||||||
<meta name="twitter:description" content="{{ $description }}">
|
|
||||||
<meta property="twitter:domain" content="{{ .Permalink }}">
|
|
||||||
<meta property="twitter:url" content="{{ .Permalink }}">
|
|
||||||
<meta name="twitter:image" content="{{ absURL $image }}">
|
|
||||||
|
|
||||||
<!-- GFS Didot font -->
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=GFS+Didot&display=swap" rel="stylesheet" type="text/css">
|
|
||||||
|
|
||||||
<!-- SEO canonicals: helps Google understand your site better when using marketing campaign tagging etc -->
|
|
||||||
|
|
||||||
<link rel="canonical" href="{{ .Permalink }}" />
|
|
||||||
|
|
||||||
{{ $cssNormalize := resources.Get "css/normalize.min.css" }}
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{ $cssNormalize.RelPermalink }}" media="print">
|
|
||||||
|
|
||||||
{{ $cssMain := resources.Get "css/main.css" | minify }}
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{ $cssMain.RelPermalink }}">
|
|
||||||
|
|
||||||
{{ $cssDark := resources.Get "css/dark.css" | minify }}
|
|
||||||
<link id="dark-theme" rel="stylesheet" href="{{ $cssDark.RelPermalink }}">
|
|
||||||
|
|
||||||
{{ $jsBundle := resources.Match "js/**.js" | resources.Concat "js/bundle.js" | minify | resources.Fingerprint "sha256" }}
|
|
||||||
<script src="{{ $jsBundle.RelPermalink }}" integrity="{{ $jsBundle.Data.Integrity }}"></script>
|
|
||||||
|
|
||||||
<!-- Option for user to inject custom html -->
|
|
||||||
{{ if .Site.Params.CustomHeadHTML }}
|
|
||||||
{{ .Site.Params.CustomHeadHTML | safeHTML }}
|
|
||||||
{{ end }}
|
|
||||||
</head>
|
|
|
@ -1,52 +0,0 @@
|
||||||
<header class="header">
|
|
||||||
<nav class="header-nav">
|
|
||||||
|
|
||||||
<div class="nav-title">
|
|
||||||
<a class="nav-brand" href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="nav-links">
|
|
||||||
{{ range .Site.Menus.main }}
|
|
||||||
<div class="nav-link">
|
|
||||||
<a href="{{ .URL | absURL }}" {{- if .Params.NewPage -}}target="_blank"{{- end -}}>
|
|
||||||
{{- .Pre | safeHTML }} {{ .Name }} {{ .Post | safeHTML -}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<span class="nav-icons-divider"></span>
|
|
||||||
<div class="nav-link dark-theme-toggle">
|
|
||||||
<span id="dark-theme-toggle-screen-reader-target" class="sr-only"></span>
|
|
||||||
<a>
|
|
||||||
<span id="theme-toggle-icon" data-feather="moon"></span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="nav-link" id="hamburger-menu-toggle">
|
|
||||||
<span id="hamburger-menu-toggle-screen-reader-target" class="sr-only">menu</span>
|
|
||||||
<a>
|
|
||||||
<span data-feather="menu"></span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- For mobile -->
|
|
||||||
<ul class="nav-hamburger-list visibility-hidden">
|
|
||||||
{{ range .Site.Menus.main }}
|
|
||||||
<li class="nav-item">
|
|
||||||
<a href="{{ .URL | absURL }}" {{- if .Params.NewPage -}}target="_blank"{{- end -}}>
|
|
||||||
{{- .Pre | safeHTML }} {{ .Name }} {{ .Post | safeHTML -}}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
<li class="nav-item dark-theme-toggle">
|
|
||||||
<span id="dark-theme-toggle-screen-reader-target" class="sr-only">theme</span>
|
|
||||||
<a>
|
|
||||||
<span id="theme-toggle-icon" data-feather="moon"></span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</header>
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
<div class="post container">
|
|
||||||
|
|
||||||
<div class="post-header-section">
|
|
||||||
<h1>{{ .Title }}</h1>
|
|
||||||
<small role="doc-subtitle" class="chapter-title">{{ .Description }}</small>
|
|
||||||
</div>
|
|
||||||
<div class="post-content">
|
|
||||||
{{ .Content }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="prev-next">
|
|
||||||
{{ if eq .Site.Params.TogglePreviousAndNextButtons "true" }}
|
|
||||||
{{ if or .PrevInSection .NextInSection }}
|
|
||||||
{{ partial "prev-next.html" . }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
{{ if .Site.Params.ShowBackToTopButton }}
|
|
||||||
<svg id="btt-button" class="arrow-logo" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 384 512" onclick="topFunction()" title="Go to top">
|
|
||||||
<!-- Your arrow SVG path or elements go here -->
|
|
||||||
<path d="M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"/>
|
|
||||||
</svg>
|
|
||||||
<script>
|
|
||||||
let backToTopButton = document.getElementById("btt-button");
|
|
||||||
|
|
||||||
window.onscroll = function() {
|
|
||||||
scrollFunction()
|
|
||||||
};
|
|
||||||
|
|
||||||
function scrollFunction() {
|
|
||||||
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
|
|
||||||
backToTopButton.style.display = "block";
|
|
||||||
} else {
|
|
||||||
backToTopButton.style.display = "none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function topFunction() {
|
|
||||||
smoothScrollToTop();
|
|
||||||
}
|
|
||||||
|
|
||||||
function smoothScrollToTop() {
|
|
||||||
const scrollToTop = () => {
|
|
||||||
const c = document.documentElement.scrollTop || document.body.scrollTop;
|
|
||||||
if (c > 0) {
|
|
||||||
window.requestAnimationFrame(scrollToTop);
|
|
||||||
window.scrollTo(0, c - c / 8);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
scrollToTop();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{{ end }}
|
|
||||||
{{ if .Site.Params.CustomCommentHTML }}
|
|
||||||
<div id="comments">
|
|
||||||
{{ .Site.Params.CustomCommentHTML | safeHTML }}
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
<div class="post container">
|
|
||||||
|
|
||||||
<div class="post-header-section">
|
|
||||||
<h1>{{ .Title }}</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="post-content">
|
|
||||||
{{ .Content }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
{{ with .NextInSection }}
|
|
||||||
<div class="prev-post">
|
|
||||||
<a href="{{ .RelPermalink }}">
|
|
||||||
<p>
|
|
||||||
←
|
|
||||||
{{ i18n "previous" }}:
|
|
||||||
{{ .Title }}
|
|
||||||
</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ with .PrevInSection }}
|
|
||||||
<div class="next-post">
|
|
||||||
<p>
|
|
||||||
<a href="{{ .RelPermalink }}">
|
|
||||||
{{ i18n "next" }}:
|
|
||||||
{{ .Title }}
|
|
||||||
→
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
|
@ -1,28 +0,0 @@
|
||||||
<div class="container list-posts">
|
|
||||||
|
|
||||||
{{ $theses := where .Site.Pages "Params.type" "thesis" }}
|
|
||||||
|
|
||||||
{{ $ch1 := "on logic" }}
|
|
||||||
{{ $ch2 := "on free will"}}
|
|
||||||
|
|
||||||
{{ if eq .Title "theses" }}
|
|
||||||
<h1 class="list-title">{{ .Title }}</h1>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<h3 class="chapter-title">{{ lower $ch1 }}</h3>
|
|
||||||
|
|
||||||
{{ range (where $theses "Params.chapter" $ch1).ByParam "section" }}
|
|
||||||
<article class="post-title">
|
|
||||||
<a href="{{ .Permalink }}" class="post-link">{{ .Title }}</a>
|
|
||||||
</article>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<h3 class="chapter-title">{{ lower $ch2 }}</h3>
|
|
||||||
|
|
||||||
{{ range (where $theses "Params.chapter" $ch2).ByParam "section" }}
|
|
||||||
<article class="post-title">
|
|
||||||
<a href="{{ .Permalink }}" class="post-link">{{ .Title }}</a>
|
|
||||||
</article>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
</div>
|
|
|
@ -1,7 +0,0 @@
|
||||||
{{ if .Params.ShowTableOfContents }}
|
|
||||||
<aside class="post-toc">
|
|
||||||
<nav id="toc">
|
|
||||||
{{ .TableOfContents }}
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
{{ end }}
|
|
22
layouts/posts/list.html
Normal file
22
layouts/posts/list.html
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ range sort .Paginator.Pages }}
|
||||||
|
<article class="markdown book-post">
|
||||||
|
<h2>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ partial "docs/title.html" . }}</a>
|
||||||
|
</h2>
|
||||||
|
{{ partial "docs/post-meta" . }}
|
||||||
|
<p>
|
||||||
|
{{- .Summary -}}
|
||||||
|
{{ if .Truncated }}
|
||||||
|
<a href="{{ .RelPermalink }}">...</a>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ template "_internal/pagination.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "toc" }}
|
||||||
|
{{ partial "docs/taxonomy" . }}
|
||||||
|
{{ end }}
|
13
layouts/posts/single.html
Normal file
13
layouts/posts/single.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<article class="markdown book-post">
|
||||||
|
<h1>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ partial "docs/title.html" . }}</a>
|
||||||
|
</h1>
|
||||||
|
{{ partial "docs/post-meta" . }}
|
||||||
|
{{- .Content -}}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "toc" }}
|
||||||
|
{{ partial "docs/toc" . }}
|
||||||
|
{{ end }}
|
12
layouts/shortcodes/button.html
Normal file
12
layouts/shortcodes/button.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{ $ref := "" }}
|
||||||
|
{{ $target := "" }}
|
||||||
|
{{ with .Get "href" }}
|
||||||
|
{{ $ref = . }}
|
||||||
|
{{ $target = "_blank" }}
|
||||||
|
{{ end }}
|
||||||
|
{{ with .Get "relref" }}
|
||||||
|
{{ $ref = relref $ . }}
|
||||||
|
{{ end }}
|
||||||
|
<a {{ with $ref }} href="{{.}}" {{ end }} {{ with $target }} target="{{.}}" rel="noopener" {{ end }} class="book-btn{{ with .Get "class" }} {{ . }}{{ end }}">
|
||||||
|
{{ .Inner | .Page.RenderString }}
|
||||||
|
</a>
|
7
layouts/shortcodes/columns.html
Normal file
7
layouts/shortcodes/columns.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<div class="book-columns flex flex-wrap">
|
||||||
|
{{ range split .Inner "<--->" }}
|
||||||
|
<div class="flex-even markdown-inner">
|
||||||
|
{{ . | $.Page.RenderString }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue