Compare commits
No commits in common. "deploy" and "main" have entirely different histories.
3
.editorconfig
Normal file
3
.editorconfig
Normal file
@ -0,0 +1,3 @@
|
||||
[*]
|
||||
indent_size = 2
|
||||
indent_style = space
|
41
.gitea/workflows/deploy.yaml
Normal file
41
.gitea/workflows/deploy.yaml
Normal file
@ -0,0 +1,41 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@v4
|
||||
with:
|
||||
token: '${{ secrets.btfash }}'
|
||||
submodules: true
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
- name: Build Link Index
|
||||
uses: https://github.com/jackyzha0/hugo-obsidian@v2.20
|
||||
with:
|
||||
index: true
|
||||
input: content
|
||||
output: assets/indices
|
||||
root: .
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: https://github.com/peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: '0.112.4'
|
||||
extended: true
|
||||
|
||||
- name: Build
|
||||
run: hugo --minify
|
||||
|
||||
- name: Deploy
|
||||
uses: https://github.com/peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITEA_TOKEN }}
|
||||
publish_dir: ./public
|
||||
publish_branch: deploy # deploying branch
|
||||
cname: tablet.sh
|
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
github: [64bitpandas]
|
32
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
32
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Something about Amethyst isn't working the way you expect
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea or improvement for Amethyst
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
39
.github/workflows/deploy.yaml
vendored
Normal file
39
.github/workflows/deploy.yaml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
name: Deploy to GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
- name: Build Link Index
|
||||
uses: jackyzha0/hugo-obsidian@v2.18
|
||||
with:
|
||||
index: true
|
||||
input: content
|
||||
output: assets/indices
|
||||
root: .
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: '0.96.0'
|
||||
extended: true
|
||||
|
||||
- name: Build
|
||||
run: hugo --minify
|
||||
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./public
|
||||
publish_branch: deploy # deploying branch
|
||||
cname: amethyst.bencuan.me
|
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
public/
|
||||
exampleSite/public/
|
||||
.DS_Store
|
||||
.hugo_build.lock
|
||||
.history/
|
||||
.vscode/
|
||||
!.gitkeep
|
50
.gitlab-ci.yml
Normal file
50
.gitlab-ci.yml
Normal file
@ -0,0 +1,50 @@
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none
|
||||
|
||||
include:
|
||||
- project: 'templates/hugo-obsidian'
|
||||
file: '/action.yml'
|
||||
inputs:
|
||||
index: "true"
|
||||
input: content
|
||||
output: assets/indices
|
||||
root: "."
|
||||
- local: "/.gitlab/hugo.template.yml"
|
||||
inputs:
|
||||
root: content
|
||||
theme: hugo-book
|
||||
|
||||
stages:
|
||||
- index
|
||||
- setup-hugo
|
||||
- deploy
|
||||
|
||||
deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
- shell
|
||||
script:
|
||||
- cp -r ${CI_PROJECT_DIR}/public/* ${DEPLOY_PATH}
|
||||
|
||||
clone:
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none
|
||||
stage: .pre
|
||||
tags:
|
||||
- shell
|
||||
before_script:
|
||||
- set -x
|
||||
- sed -E "s,git@(git.tablet.sh):,https://gitlab-ci-token:${CI_JOB_TOKEN}@\1/," -i .gitmodules
|
||||
##- git config --local submodule.content.url "https://deployer:${DEPLOY_TOKEN}@git.tablet.sh/the-btfash-foundation/tablet.sh"
|
||||
script:
|
||||
- git submodule sync
|
||||
- git remote -v
|
||||
- git submodule sync
|
||||
- git submodule status
|
||||
- git submodule update --remote --init --recursive
|
||||
- git submodule init
|
||||
- ls -l themes
|
||||
artifacts:
|
||||
paths:
|
||||
- content
|
||||
- themes
|
30
.gitlab/hugo.template.yml
Normal file
30
.gitlab/hugo.template.yml
Normal file
@ -0,0 +1,30 @@
|
||||
spec:
|
||||
inputs:
|
||||
theme:
|
||||
default: hugo-book
|
||||
root:
|
||||
default: content
|
||||
---
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
HUGO_ENV: production
|
||||
setup-hugo:
|
||||
tags:
|
||||
- docker
|
||||
stage: setup-hugo
|
||||
image: registry.gitlab.com/pages/hugo/hugo_extended:latest
|
||||
script:
|
||||
- cd ${CI_PROJECT_DIR}
|
||||
- ls -l $[[ inputs.root ]]
|
||||
- ls -l themes/$[[ inputs.theme ]]
|
||||
- hugo --minify -t $[[ inputs.theme ]] -c $[[ inputs.root ]]
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
|
||||
# runs:
|
||||
# using: 'node16'
|
||||
# main: 'lib/index.js'
|
||||
# branding:
|
||||
# icon: 'package'
|
||||
# color: 'yellow'
|
7
.gitmodules
vendored
Normal file
7
.gitmodules
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
[submodule "content"]
|
||||
path = content
|
||||
url = git@git.tablet.sh:the-btfash-foundation/tablet.sh
|
||||
|
||||
[submodule "theme"]
|
||||
path = themes/hugo-book
|
||||
url = https://github.com/alex-shpak/hugo-book.git
|
3
404.html
3
404.html
@ -1,3 +0,0 @@
|
||||
<!doctype html><html lang=en><head><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/404.html"><meta property="og:site_name" content="tablet's place. 🌸"><title>404 Page not found | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><style>.not-found{text-align:center}.not-found h1{margin:.25em 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=/>tablet's place. 🌸</a></h3></div></main></body></html>
|
1
CNAME
1
CNAME
@ -1 +0,0 @@
|
||||
tablet.sh
|
20
LICENSE
Normal file
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2022 Ben Cuan
|
||||
|
||||
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.
|
24
Makefile
Normal file
24
Makefile
Normal file
@ -0,0 +1,24 @@
|
||||
.DEFAULT_GOAL := serve
|
||||
|
||||
help: ## Show all Makefile targets
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
update: ## Update Quartz to the latest version on Github
|
||||
go install github.com/jackyzha0/hugo-obsidian@latest
|
||||
@git remote show upstream || (echo "remote 'upstream' not present, setting 'upstream'" && git remote add upstream https://github.com/jackyzha0/quartz.git)
|
||||
git fetch upstream
|
||||
git log --oneline --decorate --graph ..upstream/hugo
|
||||
git checkout -p upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data
|
||||
|
||||
update-force: ## Forcefully pull all changes and don't ask to patch
|
||||
go install github.com/jackyzha0/hugo-obsidian@latest
|
||||
@git remote show upstream || (echo "remote 'upstream' not present, setting 'upstream'" && git remote add upstream https://github.com/jackyzha0/quartz.git)
|
||||
git fetch upstream
|
||||
git checkout upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data
|
||||
|
||||
serve: ## Serve Quartz locally
|
||||
hugo-obsidian -input=content -output=assets/indices -index -root=.
|
||||
hugo server --enableGitInfo --minify --bind=$(or $(HUGO_BIND),0.0.0.0) --baseURL=$(or $(HUGO_BASEURL),http://localhost) --port=$(or $(HUGO_PORT),1313) --appendPort=$(or $(HUGO_APPENDPORT),true)
|
||||
|
||||
docker: ## Serve locally using Docker
|
||||
docker run -it --volume=$(shell pwd):/quartz -p 1313:1313 ghcr.io/jackyzha0/quartz:hugo
|
153
README.md
Normal file
153
README.md
Normal file
@ -0,0 +1,153 @@
|
||||
# Amethyst Hugo Theme
|
||||
|
||||
[![Hugo](https://img.shields.io/badge/hugo-0.96-blue.svg)](https://gohugo.io)
|
||||
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
|
||||
|
||||
Amethyst combines the navigational features of [hugo-book](https://github.com/alex-shpak/hugo-book) with the Obsidian integrations of [quartz](https://github.com/jackyzha0/quartz) to provide a hassle-free place to store and host personal notes or documentation.
|
||||
|
||||
![amethyst screenshot](content/setup/images/amethyst-screenshot.png)
|
||||
|
||||
## Features
|
||||
- Most of the features of the original themes (Quartz and Book)
|
||||
- Mobile-friendly
|
||||
- Multi-language support
|
||||
- Customizable
|
||||
- Dark Mode
|
||||
- LaTeX support
|
||||
- Obsidian-style back/forward links and page previews
|
||||
- Interactive graph view
|
||||
- Tab cards for practice problems
|
||||
|
||||
## Documentation
|
||||
If you just want to use Amethyst for your own notes hosting, go to [amethyst.bencuan.me](https://amethyst.bencuan.me) for a demo and documentation on how to use it.
|
||||
|
||||
Keep reading if you want to help develop Amethyst, or make changes to the code base for your own needs.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **Go 1.16 or higher**: [installation instructions](https://golang.org/doc/install)
|
||||
- **Hugo 0.93 or higher:** [installation instructions](https://gohugo.io/getting-started/installing/)
|
||||
- If installing on Ubuntu/Debian-based systems, this is a higher version than is available in apt at the time of writing. Install the extended version from the [releases page](https://github.com/gohugoio/hugo/releases) instead.
|
||||
- **Hugo-obsidian:** Run `go install github.com/jackyzha0/hugo-obsidian@latest`.
|
||||
- If you're getting a `command not found` error, [ensure that your PATH is configured properly so that binaries in the GOPATH can be executed](https://stackoverflow.com/questions/21001387/how-do-i-set-the-gopath-environment-variable-on-ubuntu-what-file-must-i-edit).
|
||||
|
||||
## Live Server
|
||||
|
||||
Start the live server using `make serve`. Content will be served to `localhost:1313` by default.
|
||||
|
||||
The server will need to be restarted to preview changes to navigation (internal links and sidebar menu).
|
||||
|
||||
## Configuration
|
||||
|
||||
### Site Configuration
|
||||
|
||||
Most configuration can be done by creating a `config.yaml` file in the root directory and editing the parameters. You can start by copying the example [here](https://github.com/64bitpandas/amethyst/blob/main/config.yaml).
|
||||
|
||||
Graph-specific configuration can be added to `data/graphConfig.yaml`. (Example [here](https://github.com/64bitpandas/amethyst/blob/main/data/graphConfig.yaml))
|
||||
|
||||
|
||||
### Multi-Language Support
|
||||
|
||||
Theme supports Hugo's [multilingual mode](https://gohugo.io/content-management/multilingual/), just follow configuration guide there. You can also tweak search indexing configuration per language in `i18n` folder.
|
||||
|
||||
### Page Configuration
|
||||
|
||||
You can specify additional params in the front matter of individual pages:
|
||||
|
||||
```toml
|
||||
# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs'
|
||||
type = 'docs'
|
||||
|
||||
# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set)
|
||||
weight = 10
|
||||
|
||||
# (Optional) Set to 'true' to mark page as flat section in file-tree menu (if BookMenuBundle not set)
|
||||
bookFlatSection = false
|
||||
|
||||
# (Optional) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
|
||||
bookCollapseSection = true
|
||||
|
||||
# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set)
|
||||
bookHidden = false
|
||||
|
||||
# (Optional) Set 'false' to hide ToC from page
|
||||
bookToC = true
|
||||
|
||||
# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages.
|
||||
bookComments = true
|
||||
|
||||
# (Optional) Set to 'false' to exclude page from search index.
|
||||
bookSearchExclude = true
|
||||
|
||||
# (Optional) Set explicit href attribute for this page in a menu (if BookMenuBundle not set)
|
||||
bookHref = ''
|
||||
```
|
||||
|
||||
### Partials
|
||||
|
||||
There are layout partials available for you to easily override components of the theme in `layouts/partials/`.
|
||||
|
||||
In addition to this, there are several empty partials you can override to easily add/inject code.
|
||||
|
||||
| Empty Partial | Placement |
|
||||
| -------------------------------------------------- | ------------------------------------------- |
|
||||
| `layouts/partials/docs/inject/head.html` | Before closing `<head>` tag |
|
||||
| `layouts/partials/docs/inject/body.html` | Before closing `<body>` tag |
|
||||
| `layouts/partials/docs/inject/footer.html` | After page footer content |
|
||||
| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `<nav>` menu block |
|
||||
| `layouts/partials/docs/inject/menu-after.html` | At the end of `<nav>` menu block |
|
||||
| `layouts/partials/docs/inject/content-before.html` | Before page content |
|
||||
| `layouts/partials/docs/inject/content-after.html` | After page content |
|
||||
| `layouts/partials/docs/inject/toc-before.html` | At the beginning of table of contents block |
|
||||
| `layouts/partials/docs/inject/toc-after.html` | At the end of table of contents block |
|
||||
|
||||
### Extra Customisation
|
||||
|
||||
| File | Description |
|
||||
| ------------------------ | ------------------------------------------------------------------------------------- |
|
||||
| `static/favicon.png` | Override default favicon |
|
||||
| `assets/_custom.scss` | Customise or override scss styles |
|
||||
| `assets/_variables.scss` | Override default SCSS variables |
|
||||
| `assets/_fonts.scss` | Replace default font with custom fonts (e.g. local files or remote like google fonts) |
|
||||
| `assets/_colors.scss` | Change the default color schemes |
|
||||
| `assets/mermaid.json` | Replace Mermaid initialization config |
|
||||
|
||||
### Plugins
|
||||
|
||||
There are a few features implemented as plugable `scss` styles. Usually these are features that don't make it to the core but can still be useful.
|
||||
|
||||
| Plugin | Description |
|
||||
| --------------------------------- | ----------------------------------------------------------- |
|
||||
| `assets/plugins/_numbered.scss` | Makes headings in markdown numbered, e.g. `1.1`, `1.2` |
|
||||
| `assets/plugins/_scrollbars.scss` | Overrides scrollbar styles to look similar across platforms |
|
||||
|
||||
To enable plugins, add `@import "plugins/{name}";` to `assets/_custom.scss` in your website root.
|
||||
|
||||
### Hugo Internal Templates
|
||||
|
||||
There are a few hugo templates inserted in `<head>`
|
||||
|
||||
- [Google Analytics](https://gohugo.io/templates/internal/#google-analytics)
|
||||
- [Open Graph](https://gohugo.io/templates/internal/#open-graph)
|
||||
|
||||
To disable Open Graph inclusion you can create your own empty file `\layouts\_internal\opengraph.html`.
|
||||
In fact almost empty not quite empty because an empty file looks like absent for HUGO. For example:
|
||||
```
|
||||
<!-- -->
|
||||
```
|
||||
|
||||
## Versioning
|
||||
|
||||
This theme follows a simple incremental versioning. e.g. `v1`, `v2` and so on. There might be breaking changes between versions.
|
||||
|
||||
If you want lower maintenance, use one of the released versions. If you want to live on the bleeding edge of changes, you can use the `main` branch and update your website when needed.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please make an issue or pull request if there are any changes you'd like to see.
|
||||
|
||||
## Credits
|
||||
|
||||
A large portion of Amethyst's code base can be derived from the following two projects. Original attribution goes to the creators of these projects; I just put them together, squashed all the bugs, and customized the styles to fit my needs for Amethyst.
|
||||
- [Hugo Book](https://github.com/alex-shpak/hugo-book)
|
||||
- [Quartz](https://github.com/jackyzha0/quartz)
|
10
archetypes/docs.md
Normal file
10
archetypes/docs.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
title: "{{ .Name | humanize | title }}"
|
||||
weight: 1
|
||||
# bookFlatSection: false
|
||||
# bookToc: true
|
||||
# bookHidden: false
|
||||
# bookCollapseSection: false
|
||||
# bookComments: false
|
||||
# bookSearchExclude: false
|
||||
---
|
6
archetypes/posts.md
Normal file
6
archetypes/posts.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "{{ .Name | humanize | title }}"
|
||||
date: {{ .Date }}
|
||||
# bookComments: false
|
||||
# bookSearchExclude: false
|
||||
---
|
10
archetypes/writing.md
Normal file
10
archetypes/writing.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
title: "{{ .Name | humanize | title }}"
|
||||
date: {{ .Date }}
|
||||
summary: ""
|
||||
words: 0
|
||||
type: writing
|
||||
fandom: ""
|
||||
# bookComments: false
|
||||
# bookSearchExclude: false
|
||||
---
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/animation/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Animation | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/animation/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Animation</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>
|
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/animation/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://tablet.sh/art/animation/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/comics/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Comics | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/comics/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Comics</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>
|
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/comics/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://tablet.sh/art/comics/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
|
@ -1,19 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="another given title lol"><meta property="og:description" content="this is a short summary. it’ll be kept short."><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/"><meta property="article:section" content="art"><meta property="article:published_time" content="2023-01-08T00:00:00+00:00"><meta property="article:modified_time" content="2023-01-08T00:00:00+00:00"><meta property="og:site_name" content="tablet's place. 🌸"><title>another given title lol | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content="this is a short summary. it’ll be kept short."><title>another given title lol</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/ class=active>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>another given title lol</h1><h1 id=another-given-title-lol>another given title lol
|
||||
<a class=anchor href=#another-given-title-lol>#</a></h1><p><img src=https://tablet.sh//img/1673214810.png width=auto alt=/img/1673214810.png></p><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#another-given-title-lol>another given title lol</a></li></ul></nav></div></aside></main></body></html>
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Diamond Head | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/drawings/diamond-head/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Diamond Head</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>
|
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/drawings/diamond-head/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/drawings/diamond-head/index.xml" rel="self" type="application/rss+xml"/><item><title>another given title lol</title><link>https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/</link><pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/</guid><description>this is a short summary. it&rsquo;ll be kept short.</description></item><item><title>title given to you</title><link>https://tablet.sh/art/drawings/diamond-head/title-given-to-you/</link><pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/drawings/diamond-head/title-given-to-you/</guid><description>a short summary?</description></item></channel></rss>
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="title given to you"><meta property="og:description" content="a short summary?"><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/title-given-to-you/"><meta property="article:section" content="art"><meta property="article:published_time" content="2023-01-05T00:00:00+00:00"><meta property="article:modified_time" content="2023-01-05T00:00:00+00:00"><meta property="og:site_name" content="tablet's place. 🌸"><title>title given to you | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content="a short summary?"><title>title given to you</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/ class=active>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>title given to you</h1><h1 id=title-given-to-you>title given to you
|
||||
<a class=anchor href=#title-given-to-you>#</a></h1><p><img src=https://tablet.sh//img/1672981700.png width=auto alt=/img/1672981700.png></p><hr><blockquote class=outline-callout><p>hi hello nice
|
||||
i want a thing</p></blockquote><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Thursday, 5 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#title-given-to-you>title given to you</a></li></ul></nav></div></aside></main></body></html>
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta http-equiv=refresh content="0; url='/art/drawings'"><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/drawings/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Drawings | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/drawings/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings class=active target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Drawings</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>
|
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/drawings/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/drawings/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
|
@ -1,20 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="✏ art"><meta property="og:description" content="Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/"><meta property="og:site_name" content="tablet's place. 🌸"><title>✏ art | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/index.xml title><meta charset=utf-8><meta name=description content><title>✏ art</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>✏ art</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>
|
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>✏ art on</title><link>https://tablet.sh/art/</link><description>Recent content in ✏ art on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://tablet.sh/art/test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/test/</guid><description> hello universe #</description></item></channel></rss>
|
@ -1,19 +0,0 @@
|
||||
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content=" hello universe # "><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/test/"><meta property="article:section" content="art"><meta property="og:site_name" content="tablet's place. 🌸"><title>Test | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content=" hello universe # "><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
|
||||
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
|
||||
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
|
||||
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
|
||||
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
|
||||
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
|
||||
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
|
||||
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"’":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
|
||||
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
|
||||
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/ class=active>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
|
||||
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
|
||||
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
|
||||
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Test</h1><h1 id=hello-universe>hello universe
|
||||
<a class=anchor href=#hello-universe>#</a></h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#hello-universe>hello universe</a></li></ul></nav></div></aside></main></body></html>
|
132
assets/_amethyst.scss
Normal file
132
assets/_amethyst.scss
Normal file
@ -0,0 +1,132 @@
|
||||
$header-height: 80px;
|
||||
|
||||
header {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
padding: 0px 80px;
|
||||
z-index: 9999;
|
||||
background-color: var(--header);
|
||||
margin: 0 !important;
|
||||
height: $header-height;
|
||||
}
|
||||
|
||||
.book-menu,
|
||||
.book-menu-content,
|
||||
.book-toc-content,
|
||||
.book-page {
|
||||
margin-top: $header-height;
|
||||
}
|
||||
|
||||
.book-header {
|
||||
display: flex;
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
#page-title a {
|
||||
color: var(--dark);
|
||||
}
|
||||
|
||||
@media screen and (max-width: $mobile-breakpoint) {
|
||||
.book-header {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
#page-title {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.menu-search {
|
||||
display: block;
|
||||
|
||||
#search-icon {
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
|
||||
header #search-icon {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: $mobile-breakpoint) {
|
||||
.book-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-search {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
header #search-icon {
|
||||
display: block;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.book-toc-content::-webkit-scrollbar,
|
||||
.book-menu-content::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
pre::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.book-toc-content::-webkit-scrollbar-thumb,
|
||||
.book-menu-content::-webkit-scrollbar-thumb {
|
||||
background: var(--scrollbar);
|
||||
border-radius: 8px;
|
||||
// box-shadow: inset 2px 2px 2px hsla(0,0%,100%,.25),inset -2px -2px 2px rgba(0,0,0,.25);
|
||||
}
|
||||
|
||||
.book-toc-content::-webkit-scrollbar-track,
|
||||
.book-menu-content::-webkit-scrollbar-track {
|
||||
// background: linear-gradient(90deg,#434343,#434343 1px,#111 0,#111);
|
||||
background-color: var(--scrollbar-track);
|
||||
}
|
||||
|
||||
.markdown h1,
|
||||
.markdown h2,
|
||||
.markdown h3 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: var(--title);
|
||||
font-size: 3rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.book-toc-content {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.book-menu-content a:hover,
|
||||
.book-toc-content a:hover {
|
||||
opacity: 100%;
|
||||
}
|
||||
|
||||
.book-menu-title {
|
||||
font-weight: bolder;
|
||||
color: var(--title);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.book-menu input.toggle+label::after {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
.book-menu input.toggle+label:hover {
|
||||
color: var(--secondary);
|
||||
}
|
||||
|
||||
.markdown-inner,
|
||||
.book-tabs {
|
||||
font-family: var(--font-body);
|
||||
color: var(--dark);
|
||||
}
|
34
assets/_colors.scss
Normal file
34
assets/_colors.scss
Normal file
@ -0,0 +1,34 @@
|
||||
:root {
|
||||
--light: #faf8f8;
|
||||
--dark: #141021;
|
||||
--secondary: #00e7e3;
|
||||
--tertiary: #ff85b6;
|
||||
--visited: #afbfc9;
|
||||
--primary: #00e7e3;
|
||||
--gray: #3f3f3f;
|
||||
--lightgray: #f0f0f0;
|
||||
--outlinegray: #dadada;
|
||||
--million-progress-bar-color: var(--secondary);
|
||||
--highlighted: #00e7e388;
|
||||
--header: #00e7e3d1;
|
||||
--title: #00e7e3
|
||||
--scrollbar: gray;
|
||||
--scrollbar-track: #DDD;
|
||||
}
|
||||
|
||||
[saved-theme="dark"] {
|
||||
--light: #1e1e21 !important;
|
||||
--dark: #f7f2fa !important;
|
||||
--secondary: #00e7e3 !important;
|
||||
--visited: #7cbbd0 !important;
|
||||
--tertiary: #ff85b6 !important;
|
||||
--primary: #00e7e3 !important;
|
||||
--gray: #d4d4d4 !important;
|
||||
--lightgray: #292633 !important;
|
||||
--outlinegray: #343434 !important;
|
||||
--highlighted: #00e7e388;
|
||||
--header: #00b3ba;
|
||||
--title: #74f4fd;
|
||||
--scrollbar: #00e7e3;
|
||||
--scrollbar-track: rgb(51, 51, 51);
|
||||
}
|
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: 65rem !default;
|
||||
|
||||
$header-height: 3.5rem !default;
|
||||
$menu-width: 16rem !default;
|
||||
$toc-width: 12rem !default;
|
||||
|
||||
$mobile-breakpoint: $menu-width + $body-min-width * 1.2 + $toc-width !default;
|
||||
|
||||
$hint-colors: (
|
||||
info: #6bf,
|
||||
warning: #fd6,
|
||||
danger: #f66,
|
||||
) !default;
|
||||
|
||||
// Themes: USE QUARTZ INSTEAD
|
||||
// @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: #84b2ff;
|
||||
// --color-visited-link: #b88dff;
|
||||
|
||||
// --body-background: #343a40;
|
||||
// --body-font-color: #e9ecef;
|
||||
|
||||
// --icon-filter: brightness(0) invert(1);
|
||||
|
||||
// --hint-color-info: #6bf;
|
||||
// --hint-color-warning: #fd6;
|
||||
// --hint-color-danger: #f66;
|
||||
// }
|
25
assets/_fonts.scss
Normal file
25
assets/_fonts.scss
Normal file
@ -0,0 +1,25 @@
|
||||
// Replace this with your own font imports!
|
||||
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=Source+Sans+Pro:wght@400;600&display=swap');
|
||||
|
||||
:root {
|
||||
--font-body: "BaBulletJournal", sans-serif;
|
||||
--font-header: "Braveheart";
|
||||
--font-mono: "PP Fraktion Mono", "Fira Code", monospace;
|
||||
font-synthesis: weight style small-caps;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: "Braveheart";
|
||||
src: url('fonts/Braveheart.ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "BaBulletJournal";
|
||||
src: url('fonts/BaBulletJournal.ttf');
|
||||
}
|
||||
@font-face {
|
||||
font-family: "AaBobble";
|
||||
src: url('fonts/AaBOBBLE_L.ttf');
|
||||
}
|
369
assets/_main.scss
Normal file
369
assets/_main.scss
Normal file
@ -0,0 +1,369 @@
|
||||
html {
|
||||
font-size: $font-size-base;
|
||||
scroll-behavior: smooth;
|
||||
touch-action: manipulation;
|
||||
& *::selection {
|
||||
background-color: rgb(133, 25, 81);
|
||||
border-radius: 1.5em;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
min-width: $body-min-width;
|
||||
color: var(--body-font-color);
|
||||
background: var(--body-background);
|
||||
|
||||
letter-spacing: 0.33px;
|
||||
font-weight: $body-font-weight;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
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 {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
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(--light);
|
||||
|
||||
@include fixed;
|
||||
}
|
||||
|
||||
a,
|
||||
label {
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
a.active {
|
||||
color: var(--tertiary);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
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 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;
|
||||
}
|
||||
}
|
206
assets/_markdown.scss
Normal file
206
assets/_markdown.scss
Normal file
@ -0,0 +1,206 @@
|
||||
@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 {
|
||||
-webkit-text-stroke: 2px currentColor;
|
||||
}
|
||||
h2 {
|
||||
-webkit-text-stroke: 1.7px currentColor;
|
||||
}
|
||||
|
||||
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: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
// &:visited {
|
||||
// color: var(--color-visited-link);
|
||||
// }
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0 $padding-4;
|
||||
background: var(--gray-200);
|
||||
border-radius: $border-radius;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
pre {
|
||||
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);
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-inline-start: $padding-16 * 2;
|
||||
}
|
||||
|
||||
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 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: none !important;
|
||||
font-family: var(--font-body);
|
||||
font-weight: bold;
|
||||
color: var(--dark);
|
||||
// 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;
|
||||
}
|
||||
}
|
113
assets/_shortcodes.scss
Normal file
113
assets/_shortcodes.scss
Normal file
@ -0,0 +1,113 @@
|
||||
.markdown {
|
||||
|
||||
// {{< expand "Label" "icon" >}}
|
||||
.book-expand {
|
||||
margin-top: $padding-16;
|
||||
margin-bottom: $padding-16;
|
||||
|
||||
border: 2px solid var(--secondary);
|
||||
border-radius: $border-radius;
|
||||
|
||||
overflow: hidden;
|
||||
|
||||
.book-expand-head {
|
||||
color: var(--secondary);
|
||||
font-family: var(--font-body);
|
||||
padding: $padding-8 $padding-16;
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.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(--dark);
|
||||
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(--dark);
|
||||
padding: $padding-16;
|
||||
display: none;
|
||||
}
|
||||
|
||||
input[type="radio"]:checked+label {
|
||||
border-bottom: $padding-1 * 2 solid var(--secondary);
|
||||
color: var(--secondary);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
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(--secondary);
|
||||
line-height: $padding-16 * 2;
|
||||
padding: 0 $padding-16;
|
||||
border: $padding-1 solid var(--secondary);
|
||||
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";
|
17
assets/book.scss
Normal file
17
assets/book.scss
Normal file
@ -0,0 +1,17 @@
|
||||
@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 "colors";
|
||||
@import "amethyst";
|
||||
@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);
|
||||
}
|
||||
});
|
||||
});
|
||||
})();
|
125
assets/indices/contentIndex.json
Normal file
125
assets/indices/contentIndex.json
Normal file
File diff suppressed because one or more lines are too long
46
assets/indices/linkIndex.json
Normal file
46
assets/indices/linkIndex.json
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"index": {
|
||||
"links": {
|
||||
"/portfolio/": [
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/animation",
|
||||
"text": "animation"
|
||||
},
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/storyboards",
|
||||
"text": "storyboarding"
|
||||
}
|
||||
]
|
||||
},
|
||||
"backlinks": {
|
||||
"/portfolio/animation": [
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/animation",
|
||||
"text": "animation"
|
||||
}
|
||||
],
|
||||
"/portfolio/storyboards": [
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/storyboards",
|
||||
"text": "storyboarding"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"links": [
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/animation",
|
||||
"text": "animation"
|
||||
},
|
||||
{
|
||||
"source": "/portfolio/",
|
||||
"target": "/portfolio/storyboards",
|
||||
"text": "storyboarding"
|
||||
}
|
||||
]
|
||||
}
|
15
assets/manifest.json
Normal file
15
assets/manifest.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "{{ .Site.Params.Title }}",
|
||||
"short_name": "{{ .Site.Params.Title }}",
|
||||
"start_url": "{{ "/" | relURL }}",
|
||||
"scope": "{{ "/" | relURL }}",
|
||||
"display": "standalone",
|
||||
"background_color": "#000000",
|
||||
"theme_color": "#000000",
|
||||
"icons": [
|
||||
{
|
||||
"src": "{{ "/favicon.png" | relURL }}",
|
||||
"sizes": "1024x1024"
|
||||
}
|
||||
]
|
||||
}
|
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 {
|
||||
@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 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);
|
||||
}
|
6
assets/quartz/js/callouts.js
Normal file
6
assets/quartz/js/callouts.js
Normal file
@ -0,0 +1,6 @@
|
||||
const addCollapsibleCallouts = () => {
|
||||
const collapsibleCallouts = document.querySelectorAll("blockquote.callout-collapsible");
|
||||
collapsibleCallouts.forEach(el => el.addEventListener('click', event => {
|
||||
event.currentTarget.classList.toggle("callout-collapsed");
|
||||
}));
|
||||
}
|
45
assets/quartz/js/clipboard.js
Normal file
45
assets/quartz/js/clipboard.js
Normal file
@ -0,0 +1,45 @@
|
||||
const svgCopy =
|
||||
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>';
|
||||
const svgCheck =
|
||||
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" fill="rgb(63, 185, 80)" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>';
|
||||
|
||||
|
||||
const addCopyButtons = () => {
|
||||
let els = document.getElementsByClassName("highlight");
|
||||
// for each highlight
|
||||
for (let i = 0; i < els.length; i++) {
|
||||
try {
|
||||
if (els[i].getElementsByClassName("clipboard-button").length) continue;
|
||||
|
||||
// find pre > code inside els[i]
|
||||
let codeBlocks = els[i].getElementsByTagName("code");
|
||||
|
||||
// line numbers are inside first code block
|
||||
let lastCodeBlock = codeBlocks[codeBlocks.length - 1];
|
||||
const button = document.createElement("button");
|
||||
button.className = "clipboard-button";
|
||||
button.type = "button";
|
||||
button.innerHTML = svgCopy;
|
||||
button.ariaLabel = "opy the shown code";
|
||||
// remove every second newline from lastCodeBlock.innerText
|
||||
button.addEventListener("click", () => {
|
||||
navigator.clipboard.writeText(lastCodeBlock.innerText.replace(/\n\n/g, "\n")).then(
|
||||
() => {
|
||||
button.blur();
|
||||
button.innerHTML = svgCheck;
|
||||
setTimeout(() => {
|
||||
button.innerHTML = svgCopy
|
||||
button.style.borderColor = ""
|
||||
}, 2000);
|
||||
},
|
||||
(error) => (button.innerHTML = "Error")
|
||||
);
|
||||
});
|
||||
// find chroma inside els[i]
|
||||
let chroma = els[i].getElementsByClassName("chroma")[0];
|
||||
els[i].insertBefore(button, chroma);
|
||||
} catch(error) {
|
||||
console.debug(error);
|
||||
}
|
||||
}
|
||||
}
|
17
assets/quartz/js/code-title.js
Normal file
17
assets/quartz/js/code-title.js
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
function addTitleToCodeBlocks() {
|
||||
const els = document.getElementsByClassName("highlight");
|
||||
for (let i = 0; i < els.length; i++) {
|
||||
try {
|
||||
if (els[i].title.length) {
|
||||
let div = document.createElement("div");
|
||||
if (els[i].getElementsByClassName("code-title").length) continue;
|
||||
div.textContent = els[i].title;
|
||||
div.classList.add("code-title")
|
||||
els[i].insertBefore(div, els[i].firstChild);
|
||||
}
|
||||
} catch (error) {
|
||||
console.debug(error);
|
||||
}
|
||||
}
|
||||
}
|
37
assets/quartz/js/darkmode.js
Normal file
37
assets/quartz/js/darkmode.js
Normal file
@ -0,0 +1,37 @@
|
||||
const userPref = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'
|
||||
const currentTheme = localStorage.getItem('theme') ?? userPref
|
||||
const syntaxTheme = document.querySelector("#theme-link");
|
||||
|
||||
|
||||
{{ $darkSyntax := resources.Get "quartz/styles/_dark_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }}
|
||||
{{ $lightSyntax := resources.Get "quartz/styles/_light_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }}
|
||||
|
||||
if (currentTheme) {
|
||||
document.documentElement.setAttribute('saved-theme', currentTheme);
|
||||
syntaxTheme.href = currentTheme === 'dark' ? '{{ $darkSyntax.Permalink }}' : '{{ $lightSyntax.Permalink }}';
|
||||
}
|
||||
|
||||
const switchTheme = (e) => {
|
||||
if (e.target.checked) {
|
||||
document.documentElement.setAttribute('saved-theme', 'dark');
|
||||
localStorage.setItem('theme', 'dark');
|
||||
syntaxTheme.href = '{{ $darkSyntax.Permalink }}';
|
||||
}
|
||||
else {
|
||||
document.documentElement.setAttribute('saved-theme', 'light')
|
||||
localStorage.setItem('theme', 'light')
|
||||
syntaxTheme.href = '{{ $lightSyntax.Permalink }}';
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// Darkmode toggle
|
||||
const toggleSwitch = document.querySelector('#darkmode-toggle')
|
||||
|
||||
// listen for toggle
|
||||
toggleSwitch.addEventListener('change', switchTheme, false)
|
||||
|
||||
if (currentTheme === 'dark') {
|
||||
toggleSwitch.checked = true
|
||||
}
|
||||
})
|
61
assets/quartz/js/full-text-search.js
Normal file
61
assets/quartz/js/full-text-search.js
Normal file
@ -0,0 +1,61 @@
|
||||
; (async function() {
|
||||
const encoder = (str) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])/)
|
||||
const contentIndex = new FlexSearch.Document({
|
||||
cache: true,
|
||||
charset: "latin:extra",
|
||||
optimize: true,
|
||||
index: [
|
||||
{
|
||||
field: "content",
|
||||
tokenize: "reverse",
|
||||
encode: encoder,
|
||||
},
|
||||
{
|
||||
field: "title",
|
||||
tokenize: "forward",
|
||||
encode: encoder,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
const { content } = await fetchData
|
||||
for (const [key, value] of Object.entries(content)) {
|
||||
contentIndex.add({
|
||||
id: key,
|
||||
title: value.title,
|
||||
content: removeMarkdown(value.content),
|
||||
})
|
||||
}
|
||||
|
||||
const formatForDisplay = (id) => ({
|
||||
id,
|
||||
url: id,
|
||||
title: content[id].title,
|
||||
content: content[id].content,
|
||||
})
|
||||
|
||||
registerHandlers((e) => {
|
||||
const term = e.target.value
|
||||
const searchResults = contentIndex.search(term, [
|
||||
{
|
||||
field: "content",
|
||||
limit: 10,
|
||||
},
|
||||
{
|
||||
field: "title",
|
||||
limit: 5,
|
||||
},
|
||||
])
|
||||
const getByField = (field) => {
|
||||
const results = searchResults.filter((x) => x.field === field)
|
||||
if (results.length === 0) {
|
||||
return []
|
||||
} else {
|
||||
return [...results[0].result]
|
||||
}
|
||||
}
|
||||
const allIds = new Set([...getByField("title"), ...getByField("content")])
|
||||
const finalResults = [...allIds].map(formatForDisplay)
|
||||
displayResults(term, finalResults, true)
|
||||
})
|
||||
})()
|
269
assets/quartz/js/graph.js
Normal file
269
assets/quartz/js/graph.js
Normal file
@ -0,0 +1,269 @@
|
||||
async function drawGraph(baseUrl, isHome, pathColors, graphConfig) {
|
||||
let {
|
||||
depth,
|
||||
enableDrag,
|
||||
enableLegend,
|
||||
enableZoom,
|
||||
opacityScale,
|
||||
scale,
|
||||
repelForce,
|
||||
fontSize} = graphConfig;
|
||||
|
||||
const container = document.getElementById("graph-container")
|
||||
const { index, links, content } = await fetchData
|
||||
|
||||
// Use .pathname to remove hashes / searchParams / text fragments
|
||||
const cleanUrl = window.location.origin + window.location.pathname
|
||||
|
||||
const curPage = cleanUrl.replace(/\/$/g, "").replace(baseUrl, "")
|
||||
|
||||
const parseIdsFromLinks = (links) => [
|
||||
...new Set(links.flatMap((link) => [link.source, link.target])),
|
||||
]
|
||||
|
||||
// Links is mutated by d3. We want to use links later on, so we make a copy and pass that one to d3
|
||||
// Note: shallow cloning does not work because it copies over references from the original array
|
||||
const copyLinks = JSON.parse(JSON.stringify(links))
|
||||
|
||||
const neighbours = new Set()
|
||||
const wl = [curPage || "/", "__SENTINEL"]
|
||||
if (depth >= 0) {
|
||||
while (depth >= 0 && wl.length > 0) {
|
||||
// compute neighbours
|
||||
const cur = wl.shift()
|
||||
if (cur === "__SENTINEL") {
|
||||
depth--
|
||||
wl.push("__SENTINEL")
|
||||
} else {
|
||||
neighbours.add(cur)
|
||||
const outgoing = index.links[cur] || []
|
||||
const incoming = index.backlinks[cur] || []
|
||||
wl.push(...outgoing.map((l) => l.target), ...incoming.map((l) => l.source))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
parseIdsFromLinks(copyLinks).forEach((id) => neighbours.add(id))
|
||||
}
|
||||
|
||||
const data = {
|
||||
nodes: [...neighbours].map((id) => ({ id })),
|
||||
links: copyLinks.filter((l) => neighbours.has(l.source) && neighbours.has(l.target)),
|
||||
}
|
||||
|
||||
const color = (d) => {
|
||||
if (d.id === curPage || (d.id === "/" && curPage === "")) {
|
||||
return "var(--g-node-active)"
|
||||
}
|
||||
|
||||
for (const pathColor of pathColors) {
|
||||
const path = Object.keys(pathColor)[0]
|
||||
const colour = pathColor[path]
|
||||
if (d.id.startsWith(path)) {
|
||||
return colour
|
||||
}
|
||||
}
|
||||
|
||||
return "var(--g-node)"
|
||||
}
|
||||
|
||||
const drag = (simulation) => {
|
||||
function dragstarted(event, d) {
|
||||
if (!event.active) simulation.alphaTarget(1).restart()
|
||||
d.fx = d.x
|
||||
d.fy = d.y
|
||||
}
|
||||
|
||||
function dragged(event, d) {
|
||||
d.fx = event.x
|
||||
d.fy = event.y
|
||||
}
|
||||
|
||||
function dragended(event, d) {
|
||||
if (!event.active) simulation.alphaTarget(0)
|
||||
d.fx = null
|
||||
d.fy = null
|
||||
}
|
||||
|
||||
const noop = () => {}
|
||||
return d3
|
||||
.drag()
|
||||
.on("start", enableDrag ? dragstarted : noop)
|
||||
.on("drag", enableDrag ? dragged : noop)
|
||||
.on("end", enableDrag ? dragended : noop)
|
||||
}
|
||||
|
||||
const height = Math.max(container.offsetHeight, isHome ? 500 : 250)
|
||||
const width = container.offsetWidth
|
||||
|
||||
const simulation = d3
|
||||
.forceSimulation(data.nodes)
|
||||
.force("charge", d3.forceManyBody().strength(-100 * repelForce))
|
||||
.force(
|
||||
"link",
|
||||
d3
|
||||
.forceLink(data.links)
|
||||
.id((d) => d.id)
|
||||
.distance(40),
|
||||
)
|
||||
.force("center", d3.forceCenter())
|
||||
|
||||
const svg = d3
|
||||
.select("#graph-container")
|
||||
.append("svg")
|
||||
.attr("width", width)
|
||||
.attr("height", height)
|
||||
.attr('viewBox', [-width / 2 / scale, -height / 2 / scale, width / scale, height / scale])
|
||||
|
||||
if (enableLegend) {
|
||||
const legend = [{ Current: "var(--g-node-active)" }, { Note: "var(--g-node)" }, ...pathColors]
|
||||
legend.forEach((legendEntry, i) => {
|
||||
const key = Object.keys(legendEntry)[0]
|
||||
const colour = legendEntry[key]
|
||||
svg
|
||||
.append("circle")
|
||||
.attr("cx", -width / 2 + 20)
|
||||
.attr("cy", height / 2 - 30 * (i + 1))
|
||||
.attr("r", 6)
|
||||
.style("fill", colour)
|
||||
svg
|
||||
.append("text")
|
||||
.attr("x", -width / 2 + 40)
|
||||
.attr("y", height / 2 - 30 * (i + 1))
|
||||
.text(key)
|
||||
.style("font-size", "15px")
|
||||
.attr("alignment-baseline", "middle")
|
||||
})
|
||||
}
|
||||
|
||||
// draw links between nodes
|
||||
const link = svg
|
||||
.append("g")
|
||||
.selectAll("line")
|
||||
.data(data.links)
|
||||
.join("line")
|
||||
.attr("class", "link")
|
||||
.attr("stroke", "var(--g-link)")
|
||||
.attr("stroke-width", 2)
|
||||
.attr("data-source", (d) => d.source.id)
|
||||
.attr("data-target", (d) => d.target.id)
|
||||
|
||||
// svg groups
|
||||
const graphNode = svg.append("g").selectAll("g").data(data.nodes).enter().append("g")
|
||||
|
||||
// calculate radius
|
||||
const nodeRadius = (d) => {
|
||||
const numOut = index.links[d.id]?.length || 0
|
||||
const numIn = index.backlinks[d.id]?.length || 0
|
||||
return 2 + Math.sqrt(numOut + numIn)
|
||||
}
|
||||
|
||||
// draw individual nodes
|
||||
const node = graphNode
|
||||
.append("circle")
|
||||
.attr("class", "node")
|
||||
.attr("id", (d) => d.id)
|
||||
.attr("r", nodeRadius)
|
||||
.attr("fill", color)
|
||||
.style("cursor", "pointer")
|
||||
.on("click", (_, d) => {
|
||||
// SPA navigation
|
||||
window.Million.navigate(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`), ".singlePage")
|
||||
})
|
||||
.on("mouseover", function (_, d) {
|
||||
d3.selectAll(".node").transition().duration(100).attr("fill", "var(--g-node-inactive)")
|
||||
|
||||
const neighbours = parseIdsFromLinks([
|
||||
...(index.links[d.id] || []),
|
||||
...(index.backlinks[d.id] || []),
|
||||
])
|
||||
const neighbourNodes = d3.selectAll(".node").filter((d) => neighbours.includes(d.id))
|
||||
const currentId = d.id
|
||||
window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`))
|
||||
const linkNodes = d3
|
||||
.selectAll(".link")
|
||||
.filter((d) => d.source.id === currentId || d.target.id === currentId)
|
||||
|
||||
// highlight neighbour nodes
|
||||
neighbourNodes.transition().duration(200).attr("fill", color)
|
||||
|
||||
// highlight links
|
||||
linkNodes.transition().duration(200).attr("stroke", "var(--g-link-active)")
|
||||
|
||||
const bigFont = fontSize*1.5
|
||||
|
||||
// show text for self
|
||||
d3.select(this.parentNode)
|
||||
.raise()
|
||||
.select("text")
|
||||
.transition()
|
||||
.duration(200)
|
||||
.attr('opacityOld', d3.select(this.parentNode).select('text').style("opacity"))
|
||||
.style('opacity', 1)
|
||||
.style('font-size', bigFont+'em')
|
||||
.attr('dy', d => nodeRadius(d) + 20 + 'px') // radius is in px
|
||||
})
|
||||
.on("mouseleave", function (_, d) {
|
||||
d3.selectAll(".node").transition().duration(200).attr("fill", color)
|
||||
|
||||
const currentId = d.id
|
||||
const linkNodes = d3
|
||||
.selectAll(".link")
|
||||
.filter((d) => d.source.id === currentId || d.target.id === currentId)
|
||||
|
||||
linkNodes.transition().duration(200).attr("stroke", "var(--g-link)")
|
||||
|
||||
d3.select(this.parentNode)
|
||||
.select("text")
|
||||
.transition()
|
||||
.duration(200)
|
||||
.style('opacity', d3.select(this.parentNode).select('text').attr("opacityOld"))
|
||||
.style('font-size', fontSize+'em')
|
||||
.attr('dy', d => nodeRadius(d) + 8 + 'px') // radius is in px
|
||||
})
|
||||
.call(drag(simulation))
|
||||
|
||||
// draw labels
|
||||
const labels = graphNode
|
||||
.append("text")
|
||||
.attr("dx", 0)
|
||||
.attr("dy", (d) => nodeRadius(d) + 8 + "px")
|
||||
.attr("text-anchor", "middle")
|
||||
.text((d) => content[d.id]?.title || d.id.replace("-", " "))
|
||||
.style('opacity', (opacityScale - 1) / 3.75)
|
||||
.style("pointer-events", "none")
|
||||
.style('font-size', fontSize+'em')
|
||||
.raise()
|
||||
.call(drag(simulation))
|
||||
|
||||
// set panning
|
||||
|
||||
if (enableZoom) {
|
||||
svg.call(
|
||||
d3
|
||||
.zoom()
|
||||
.extent([
|
||||
[0, 0],
|
||||
[width, height],
|
||||
])
|
||||
.scaleExtent([0.25, 4])
|
||||
.on("zoom", ({ transform }) => {
|
||||
link.attr("transform", transform)
|
||||
node.attr("transform", transform)
|
||||
const scale = transform.k * opacityScale;
|
||||
const scaledOpacity = Math.max((scale - 1) / 3.75, 0)
|
||||
labels.attr("transform", transform).style("opacity", scaledOpacity)
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
// progress the simulation
|
||||
simulation.on("tick", () => {
|
||||
link
|
||||
.attr("x1", (d) => d.source.x)
|
||||
.attr("y1", (d) => d.source.y)
|
||||
.attr("x2", (d) => d.target.x)
|
||||
.attr("y2", (d) => d.target.y)
|
||||
node.attr("cx", (d) => d.x).attr("cy", (d) => d.y)
|
||||
labels.attr("x", (d) => d.x).attr("y", (d) => d.y)
|
||||
})
|
||||
}
|
7
assets/quartz/js/menu-reset.js
Normal file
7
assets/quartz/js/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");
|
||||
})();
|
74
assets/quartz/js/popover.js
Normal file
74
assets/quartz/js/popover.js
Normal file
@ -0,0 +1,74 @@
|
||||
function htmlToElement(html) {
|
||||
const template = document.createElement("template")
|
||||
html = html.trim()
|
||||
template.innerHTML = html
|
||||
return template.content.firstChild
|
||||
}
|
||||
|
||||
function initPopover(baseURL, useContextualBacklinks) {
|
||||
const basePath = baseURL.replace(window.location.origin, "")
|
||||
fetchData.then(({ content }) => {
|
||||
const links = [...document.getElementsByClassName("internal-link")]
|
||||
links
|
||||
.filter(li => li.dataset.src || (li.dataset.idx && useContextualBacklinks))
|
||||
.forEach(li => {
|
||||
let el
|
||||
if (li.dataset.ctx) {
|
||||
const linkDest = content[li.dataset.src]
|
||||
const popoverElement = `<div class="popover">
|
||||
<h3>${linkDest.title}</h3>
|
||||
<p>${highlight(removeMarkdown(linkDest.content), li.dataset.ctx)}...</p>
|
||||
<p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p>
|
||||
</div>`
|
||||
el = htmlToElement(popoverElement)
|
||||
} else {
|
||||
const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")]
|
||||
if (linkDest) {
|
||||
let splitLink = li.href.split("#")
|
||||
let cleanedContent = removeMarkdown(linkDest.content)
|
||||
if (splitLink.length > 1) {
|
||||
let headingName = decodeURIComponent(splitLink[1]).replace(/\-/g, " ")
|
||||
let headingIndex = cleanedContent.toLowerCase().indexOf("<b>" + headingName + "</b>")
|
||||
cleanedContent = cleanedContent.substring(headingIndex, cleanedContent.length)
|
||||
}
|
||||
const popoverElement = `<div class="popover">
|
||||
<h3>${linkDest.title}</h3>
|
||||
<p>${cleanedContent.split(" ", 20).join(" ")}...</p>
|
||||
<p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p>
|
||||
</div>`
|
||||
el = htmlToElement(popoverElement)
|
||||
}
|
||||
}
|
||||
|
||||
if (el) {
|
||||
li.appendChild(el)
|
||||
if (LATEX_ENABLED) {
|
||||
renderMathInElement(el, {
|
||||
delimiters: [
|
||||
{ left: '$$', right: '$$', display: false },
|
||||
{ left: '$', right: '$', display: false },
|
||||
],
|
||||
throwOnError: false
|
||||
})
|
||||
}
|
||||
|
||||
li.addEventListener("mouseover", () => {
|
||||
// fix tooltip positioning
|
||||
window.FloatingUIDOM.computePosition(li, el, {
|
||||
middleware: [window.FloatingUIDOM.offset(10), window.FloatingUIDOM.inline(), window.FloatingUIDOM.shift()],
|
||||
}).then(({ x, y }) => {
|
||||
Object.assign(el.style, {
|
||||
left: `${x}px`,
|
||||
top: `${y}px`,
|
||||
})
|
||||
})
|
||||
|
||||
el.classList.add("visible")
|
||||
})
|
||||
li.addEventListener("mouseout", () => {
|
||||
el.classList.remove("visible")
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
26
assets/quartz/js/router.js
Normal file
26
assets/quartz/js/router.js
Normal file
@ -0,0 +1,26 @@
|
||||
import {
|
||||
apply,
|
||||
navigate,
|
||||
prefetch,
|
||||
router,
|
||||
} from "https://unpkg.com/million@1.11.5/dist/router.mjs"
|
||||
|
||||
export const attachSPARouting = (init, rerender) => {
|
||||
// Attach SPA functions to the global Million namespace
|
||||
window.Million = {
|
||||
apply,
|
||||
navigate,
|
||||
prefetch,
|
||||
router,
|
||||
}
|
||||
|
||||
const render = () => requestAnimationFrame(rerender)
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
apply((doc) => init(doc))
|
||||
init()
|
||||
router(".singlePage")
|
||||
render()
|
||||
})
|
||||
window.addEventListener("million:navigate", render)
|
||||
}
|
54
assets/quartz/js/semantic-search.js
Normal file
54
assets/quartz/js/semantic-search.js
Normal file
@ -0,0 +1,54 @@
|
||||
// Note: Currently, we use the REST API for Operand because of some unpkg/webpack issues.
|
||||
// In the future, we'd like to use the SDK (https://github.com/operandinc/typescript-sdk).
|
||||
// If someone knows how to do this w/o breaking the Operand typescript-sdk for npm users,
|
||||
// please let Morgan (@morgallant) and/or (@_jzhao) know! <3
|
||||
|
||||
const apiKey = "{{$.Site.params.search.operandApiKey}}"
|
||||
const indexId = "{{$.Site.params.search.operandIndexId}}"
|
||||
|
||||
function parseSearchResults(searchResults) {
|
||||
return searchResults.matches.map((m) => ({
|
||||
content: m.content,
|
||||
title: searchResults.objects[m.objectId].properties.properties._title.text,
|
||||
url: searchResults.objects[m.objectId].properties.properties._url.text,
|
||||
}))
|
||||
}
|
||||
|
||||
async function searchContents(query) {
|
||||
const result = await fetch("https://api.operand.ai/operand.v1.ObjectService/SearchWithin", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `${apiKey}`,
|
||||
"Operand-Index-ID": `${indexId}`,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: query,
|
||||
limit: 10,
|
||||
}),
|
||||
})
|
||||
if (result.ok) {
|
||||
return parseSearchResults(await result.json())
|
||||
} else {
|
||||
console.error(result)
|
||||
}
|
||||
}
|
||||
|
||||
function debounce(func, timeout = 200) {
|
||||
let timer
|
||||
return (...args) => {
|
||||
clearTimeout(timer)
|
||||
timer = setTimeout(() => {
|
||||
func.apply(this, args)
|
||||
}, timeout)
|
||||
}
|
||||
}
|
||||
|
||||
registerHandlers(
|
||||
debounce((e) => {
|
||||
let term = e.target.value
|
||||
if (term !== "") {
|
||||
searchContents(term).then((results) => displayResults(term, results))
|
||||
}
|
||||
}),
|
||||
)
|
7
assets/quartz/js/sw-register.js
Normal file
7
assets/quartz/js/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/quartz/js/sw.js
Normal file
55
assets/quartz/js/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));
|
||||
});
|
224
assets/quartz/js/util.js
Normal file
224
assets/quartz/js/util.js
Normal file
@ -0,0 +1,224 @@
|
||||
// code from https://github.com/danestves/markdown-to-text
|
||||
const removeMarkdown = (
|
||||
markdown,
|
||||
options = {
|
||||
listUnicodeChar: false,
|
||||
stripListLeaders: true,
|
||||
gfm: true,
|
||||
useImgAltText: false,
|
||||
preserveLinks: false,
|
||||
},
|
||||
) => {
|
||||
let output = markdown || ""
|
||||
output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, "")
|
||||
|
||||
try {
|
||||
if (options.stripListLeaders) {
|
||||
if (options.listUnicodeChar)
|
||||
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, options.listUnicodeChar + " $1")
|
||||
else output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, "$1")
|
||||
}
|
||||
if (options.gfm) {
|
||||
output = output
|
||||
.replace(/\n={2,}/g, "\n")
|
||||
.replace(/~{3}.*\n/g, "")
|
||||
.replace(/~~/g, "")
|
||||
.replace(/`{3}.*\n/g, "")
|
||||
}
|
||||
if (options.preserveLinks) {
|
||||
output = output.replace(/\[(.*?)\][\[\(](.*?)[\]\)]/g, "$1 ($2)")
|
||||
}
|
||||
output = output
|
||||
.replace(/<[^>]*>/g, "")
|
||||
.replace(/^[=\-]{2,}\s*$/g, "")
|
||||
.replace(/\[\^.+?\](\: .*?$)?/g, "")
|
||||
.replace(/(#{1,6})\s+(.+)\1?/g, "<b>$2</b>")
|
||||
.replace(/\s{0,2}\[.*?\]: .*?$/g, "")
|
||||
.replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? "$1" : "")
|
||||
.replace(/\[(.*?)\][\[\(].*?[\]\)]/g, "<a>$1</a>")
|
||||
.replace(/!?\[\[\S[^\[\]\|]*(?:\|([^\[\]]*))?\S\]\]/g, "<a>$1</a>")
|
||||
.replace(/^\s{0,3}>\s?/g, "")
|
||||
.replace(/(^|\n)\s{0,3}>\s?/g, "\n\n")
|
||||
.replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "")
|
||||
.replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2")
|
||||
.replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2")
|
||||
.replace(/(`{3,})(.*?)\1/gm, "$2")
|
||||
.replace(/`(.+?)`/g, "$1")
|
||||
.replace(/\n{2,}/g, "\n\n")
|
||||
.replace(/\[![a-zA-Z]+\][-\+]? /g, "")
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
return markdown
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
const highlight = (content, term) => {
|
||||
const highlightWindow = 20
|
||||
// try to find direct match first
|
||||
const directMatchIdx = content.indexOf(term)
|
||||
if (directMatchIdx !== -1) {
|
||||
const h = highlightWindow
|
||||
const before = content.substring(0, directMatchIdx).split(" ").slice(-h)
|
||||
const after = content
|
||||
.substring(directMatchIdx + term.length, content.length - 2)
|
||||
.split(" ")
|
||||
.slice(0, h)
|
||||
return (
|
||||
(before.length === h ? `...${before.join(" ")}` : before.join(" ")) +
|
||||
`<span class="search-highlight">${term}</span>` +
|
||||
after.join(" ")
|
||||
)
|
||||
}
|
||||
|
||||
const tokenizedTerm = term.split(/\s+/).filter((t) => t !== "")
|
||||
const splitText = content.split(/\s+/).filter((t) => t !== "")
|
||||
const includesCheck = (token) =>
|
||||
tokenizedTerm.some((term) => token.toLowerCase().startsWith(term.toLowerCase()))
|
||||
|
||||
const occurrencesIndices = splitText.map(includesCheck)
|
||||
|
||||
// calculate best index
|
||||
let bestSum = 0
|
||||
let bestIndex = 0
|
||||
for (let i = 0; i < Math.max(occurrencesIndices.length - highlightWindow, 0); i++) {
|
||||
const window = occurrencesIndices.slice(i, i + highlightWindow)
|
||||
const windowSum = window.reduce((total, cur) => total + cur, 0)
|
||||
if (windowSum >= bestSum) {
|
||||
bestSum = windowSum
|
||||
bestIndex = i
|
||||
}
|
||||
}
|
||||
|
||||
const startIndex = Math.max(bestIndex - highlightWindow, 0)
|
||||
const endIndex = Math.min(startIndex + 2 * highlightWindow, splitText.length)
|
||||
const mappedText = splitText
|
||||
.slice(startIndex, endIndex)
|
||||
.map((token) => {
|
||||
if (includesCheck(token)) {
|
||||
return `<span class="search-highlight">${token}</span>`
|
||||
}
|
||||
return token
|
||||
})
|
||||
.join(" ")
|
||||
.replaceAll('</span> <span class="search-highlight">', " ")
|
||||
return `${startIndex === 0 ? "" : "..."}${mappedText}${endIndex === splitText.length ? "" : "..."
|
||||
}`
|
||||
}
|
||||
|
||||
// Common utilities for search
|
||||
const resultToHTML = ({ url, title, content }) => {
|
||||
return `<button class="result-card" id="${url}">
|
||||
<h3>${title}</h3>
|
||||
<p>${content}</p>
|
||||
</button>`
|
||||
}
|
||||
|
||||
const redir = (id, term) => {
|
||||
const shouldTrim = PRODUCTION && SEARCH_ENABLED
|
||||
const baseURLPrefix = shouldTrim ? "" : BASE_URL.replace(/\/$/g, "")
|
||||
const urlString = `${baseURLPrefix}${id}#:~:text=${encodeURIComponent(term)}/`
|
||||
window.Million.navigate(
|
||||
new URL(urlString),
|
||||
".singlePage",
|
||||
)
|
||||
closeSearch()
|
||||
}
|
||||
|
||||
function openSearch() {
|
||||
const source = document.getElementById("search-bar")
|
||||
const results = document.getElementById("results-container")
|
||||
const searchContainer = document.getElementById("search-container")
|
||||
if (searchContainer.style.display === "none" || searchContainer.style.display === "") {
|
||||
source.value = ""
|
||||
results.innerHTML = ""
|
||||
searchContainer.style.display = "block"
|
||||
source.focus()
|
||||
} else {
|
||||
searchContainer.style.display = "none"
|
||||
}
|
||||
}
|
||||
|
||||
function closeSearch() {
|
||||
const searchContainer = document.getElementById("search-container")
|
||||
searchContainer.style.display = "none"
|
||||
}
|
||||
|
||||
const registerHandlers = (onInputFn) => {
|
||||
const source = document.getElementById("search-bar")
|
||||
const searchContainer = document.getElementById("search-container")
|
||||
let term
|
||||
source.addEventListener("keyup", (e) => {
|
||||
if (e.key === "Enter") {
|
||||
const anchor = document.getElementsByClassName("result-card")[0]
|
||||
redir(anchor.id, term)
|
||||
}
|
||||
})
|
||||
source.addEventListener("input", onInputFn)
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "k" && (event.ctrlKey || event.metaKey)) {
|
||||
event.preventDefault()
|
||||
openSearch()
|
||||
}
|
||||
if (event.key === "Escape") {
|
||||
event.preventDefault()
|
||||
closeSearch()
|
||||
}
|
||||
})
|
||||
|
||||
const searchButtons = document.getElementsByClassName("quartz-search")
|
||||
for (let searchButton of searchButtons) {
|
||||
|
||||
searchButton.addEventListener("click", (_) => {
|
||||
openSearch()
|
||||
})
|
||||
searchButton.addEventListener("keydown", (_) => {
|
||||
openSearch()
|
||||
})
|
||||
searchContainer.addEventListener("click", (_) => {
|
||||
closeSearch()
|
||||
})
|
||||
document.getElementById("search-space").addEventListener("click", (evt) => {
|
||||
evt.stopPropagation()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const displayResults = (term, finalResults, extractHighlight = false) => {
|
||||
const results = document.getElementById("results-container")
|
||||
if (finalResults.length === 0) {
|
||||
results.innerHTML = `<button class="result-card">
|
||||
<h3>No results.</h3>
|
||||
<p>Try another search term?</p>
|
||||
</button>`
|
||||
} else {
|
||||
results.innerHTML = finalResults
|
||||
.map((result) => {
|
||||
if (extractHighlight) {
|
||||
return resultToHTML({
|
||||
url: result.url,
|
||||
title: highlight(result.title, term),
|
||||
content: highlight(removeMarkdown(result.content), term)
|
||||
})
|
||||
} else {
|
||||
return resultToHTML(result)
|
||||
}
|
||||
}
|
||||
)
|
||||
.join("\n")
|
||||
if (LATEX_ENABLED) {
|
||||
renderMathInElement(results, {
|
||||
delimiters: [
|
||||
{ left: '$$', right: '$$', display: false },
|
||||
{ left: '$', right: '$', display: false },
|
||||
],
|
||||
throwOnError: false
|
||||
})
|
||||
}
|
||||
|
||||
const anchors = [...document.getElementsByClassName("result-card")]
|
||||
anchors.forEach((anchor) => {
|
||||
anchor.onclick = () => redir(anchor.id, term)
|
||||
})
|
||||
}
|
||||
}
|
170
assets/quartz/styles/_callouts.scss
Normal file
170
assets/quartz/styles/_callouts.scss
Normal file
@ -0,0 +1,170 @@
|
||||
:root {
|
||||
--callout-summary: #00b0ff;
|
||||
--callout-summary-accent: #7fd7ff;
|
||||
--callout-bug: #f50057;
|
||||
--callout-bug-accent: #ff7aa9;
|
||||
--callout-danger: #ff1744;
|
||||
--callout-danger-accent: #ff8aa1;
|
||||
--callout-example: #7c4dff;
|
||||
--callout-example-accent: #bda5ff;
|
||||
--callout-fail: #ff5252;
|
||||
--callout-fail-accent: #ffa8a8;
|
||||
--callout-info: #00b8d4;
|
||||
--callout-info-accent: #69ebff;
|
||||
--callout-note: #448aff;
|
||||
--callout-note-accent: #a1c4ff;
|
||||
--callout-question: #64dd17;
|
||||
--callout-question-accent: #b0f286;
|
||||
--callout-quote: #9e9e9e;
|
||||
--callout-quote-accent: #cecece;
|
||||
--callout-done: #00c853;
|
||||
--callout-done-accent: #63ffa4;
|
||||
--callout-important: #00bfa5;
|
||||
--callout-important-accent: #5fffe9;
|
||||
--callout-warning: #ff9100;
|
||||
--callout-warning-accent: #ffc87f;
|
||||
}
|
||||
|
||||
[saved-theme=dark] {
|
||||
--callout-summary: #00b0ff !important;
|
||||
--callout-summary-accent: #00587f !important;
|
||||
--callout-bug: #f50057 !important;
|
||||
--callout-bug-accent: #7a002b !important;
|
||||
--callout-danger: #ff1744 !important;
|
||||
--callout-danger-accent: #8b001a !important;
|
||||
--callout-example: #7c4dff !important;
|
||||
--callout-example-accent: #2b00a6 !important;
|
||||
--callout-fail: #ff5252 !important;
|
||||
--callout-fail-accent: #a80000 !important;
|
||||
--callout-info: #00b8d4 !important;
|
||||
--callout-info-accent: #005c6a !important;
|
||||
--callout-note: #448aff !important;
|
||||
--callout-note-accent: #003ca1 !important;
|
||||
--callout-question: #64dd17 !important;
|
||||
--callout-question-accent: #006429 !important;
|
||||
--callout-quote: #9e9e9e !important;
|
||||
--callout-quote-accent: #4f4f4f !important;
|
||||
--callout-done: #00c853 !important;
|
||||
--callout-done-accent: #006429 !important;
|
||||
--callout-important: #00bfa5 !important;
|
||||
--callout-important-accent: #005f52 !important;
|
||||
--callout-warning: #ff9100 !important;
|
||||
--callout-warning-accent: #7f4800 !important;
|
||||
}
|
||||
|
||||
blockquote.callout-collapsible {
|
||||
cursor: pointer;
|
||||
|
||||
&.callout-collapsible::after {
|
||||
content: '-';
|
||||
right: 6px;
|
||||
font-weight: bolder;
|
||||
font-family: Courier New, Courier, monospace;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote.callout-collapsed {
|
||||
& > p { border-bottom-right-radius: 5px !important; }
|
||||
padding-bottom: 0 !important;
|
||||
&::after {
|
||||
content: '+' !important;
|
||||
}
|
||||
& > *:not(:first-child) {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote[class*="-callout"] {
|
||||
margin-right: 0;
|
||||
border-radius: 5px;
|
||||
position: relative;
|
||||
padding-left: 0 !important;
|
||||
padding-bottom: 0.25em;
|
||||
color: var(--dark);
|
||||
background-color: var(--lightgray);
|
||||
border-left: 6px solid var(--primary) !important;
|
||||
& > p {
|
||||
border-top-right-radius: 5px;
|
||||
padding: 0.5em 1em;
|
||||
margin: 0;
|
||||
color: var(--gray);
|
||||
&:first-child {
|
||||
font-weight: 600;
|
||||
color: var(--dark);
|
||||
padding: 0.4em 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blockquote[class*="-callout"] > p:first-child::after, blockquote.callout-collapsible::after {
|
||||
display: inline-block;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
position: absolute;
|
||||
top: 0.4em;
|
||||
margin: 0.2em 0.4em;
|
||||
}
|
||||
|
||||
blockquote[class*="-callout"] > p:first-child {
|
||||
font-weight: bold;
|
||||
padding: 0.4em 35px;
|
||||
|
||||
&::after {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
$summary: summary, abstract, tldr;
|
||||
$bug: bug;
|
||||
$danger: danger, error;
|
||||
$example: example;
|
||||
$fail: fail, failure, missing;
|
||||
$info: info, todo;
|
||||
$note: note;
|
||||
$question: question, help, faq;
|
||||
$quote: quote, cite;
|
||||
$done: done, success, check;
|
||||
$important: important, tip, hint;
|
||||
$warning: warning, caution, attention;
|
||||
$types: $summary, $bug, $danger, $example, $fail, $info, $note, $question, $quote, $done, $important, $warning;
|
||||
$svgs: ();
|
||||
$svgs: map-merge($svgs, ($summary: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='book' class='svg-inline--callout-fa fa-book fa-w-14' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='currentColor' d='M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($bug: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='bug' class='svg-inline--callout-fa fa-bug fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($danger: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='bolt' class='svg-inline--callout-fa fa-bolt fa-w-10' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath fill='currentColor' d='M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($example: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='list-ol' class='svg-inline--callout-fa fa-list-ol fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($fail: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='times-circle' class='svg-inline--callout-fa fa-times-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($info: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='info-circle' class='svg-inline--callout-fa fa-info-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($note: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='pencil-alt' class='svg-inline--callout-fa fa-pencil-alt fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($question: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='question-circle' class='svg-inline--callout-fa fa-question-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($quote: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='quote-right' class='svg-inline--callout-fa fa-quote-right fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($done: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='check-circle' class='svg-inline--callout-fa fa-check-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($important: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='fire' class='svg-inline--callout-fa fa-fire fa-w-12' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath fill='currentColor' d='M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
$svgs: map-merge($svgs, ($warning: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='exclamation-triangle' class='svg-inline--callout-fa fa-exclamation-triangle fa-w-18' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath fill='currentColor' d='M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'%3E%3C/path%3E%3C/svg%3E")));
|
||||
|
||||
@function getstr($l) {
|
||||
$v: nth($l, 1);
|
||||
@return $v;
|
||||
}
|
||||
|
||||
@each $type in $types {
|
||||
@each $s in $type {
|
||||
blockquote.#{$s}-callout {
|
||||
border-left: 6px solid var(--callout-#{getstr($type)}) !important;
|
||||
& > p:first-child {
|
||||
background-color: var(--callout-#{getstr($type)}-accent) !important;
|
||||
&::after {
|
||||
content: '';
|
||||
-webkit-mask: map-get($svgs, $type);
|
||||
mask: map-get($svgs, $type);
|
||||
background-color: var(--callout-#{getstr($type)}) !important;
|
||||
-webkit-mask-size: contain;
|
||||
mask-size: contain;
|
||||
-webkit-mask-repeat: no-repeat;
|
||||
mask-repeat: no-repeat;
|
||||
-webkit-mask-position: center;
|
||||
mask-position: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
85
assets/quartz/styles/_dark_syntax.scss
Normal file
85
assets/quartz/styles/_dark_syntax.scss
Normal file
@ -0,0 +1,85 @@
|
||||
/* Background */ .bg { color: #f8f8f2; background-color: #282a36; }
|
||||
/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #282a36; }
|
||||
/* Other */ .chroma .x { }
|
||||
/* Error */ .chroma .err { }
|
||||
/* CodeLine */ .chroma .cl { }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
|
||||
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
|
||||
/* Line */ .chroma .line { display: flex; }
|
||||
/* Keyword */ .chroma .k { color: #ff79c6 }
|
||||
/* KeywordConstant */ .chroma .kc { color: #ff79c6 }
|
||||
/* KeywordDeclaration */ .chroma .kd { color: #8be9fd; font-style: italic }
|
||||
/* KeywordNamespace */ .chroma .kn { color: #ff79c6 }
|
||||
/* KeywordPseudo */ .chroma .kp { color: #ff79c6 }
|
||||
/* KeywordReserved */ .chroma .kr { color: #ff79c6 }
|
||||
/* KeywordType */ .chroma .kt { color: #8be9fd }
|
||||
/* Name */ .chroma .n { }
|
||||
/* NameAttribute */ .chroma .na { color: #50fa7b }
|
||||
/* NameBuiltin */ .chroma .nb { color: #8be9fd; font-style: italic }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { }
|
||||
/* NameClass */ .chroma .nc { color: #50fa7b }
|
||||
/* NameConstant */ .chroma .no { }
|
||||
/* NameDecorator */ .chroma .nd { }
|
||||
/* NameEntity */ .chroma .ni { }
|
||||
/* NameException */ .chroma .ne { }
|
||||
/* NameFunction */ .chroma .nf { color: #50fa7b }
|
||||
/* NameFunctionMagic */ .chroma .fm { }
|
||||
/* NameLabel */ .chroma .nl { color: #8be9fd; font-style: italic }
|
||||
/* NameNamespace */ .chroma .nn { }
|
||||
/* NameOther */ .chroma .nx { }
|
||||
/* NameProperty */ .chroma .py { }
|
||||
/* NameTag */ .chroma .nt { color: #ff79c6 }
|
||||
/* NameVariable */ .chroma .nv { color: #8be9fd; font-style: italic }
|
||||
/* NameVariableClass */ .chroma .vc { color: #8be9fd; font-style: italic }
|
||||
/* NameVariableGlobal */ .chroma .vg { color: #8be9fd; font-style: italic }
|
||||
/* NameVariableInstance */ .chroma .vi { color: #8be9fd; font-style: italic }
|
||||
/* NameVariableMagic */ .chroma .vm { }
|
||||
/* Literal */ .chroma .l { }
|
||||
/* LiteralDate */ .chroma .ld { }
|
||||
/* LiteralString */ .chroma .s { color: #f1fa8c }
|
||||
/* LiteralStringAffix */ .chroma .sa { color: #f1fa8c }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color: #f1fa8c }
|
||||
/* LiteralStringChar */ .chroma .sc { color: #f1fa8c }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color: #f1fa8c }
|
||||
/* LiteralStringDoc */ .chroma .sd { color: #f1fa8c }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color: #f1fa8c }
|
||||
/* LiteralStringEscape */ .chroma .se { color: #f1fa8c }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color: #f1fa8c }
|
||||
/* LiteralStringInterpol */ .chroma .si { color: #f1fa8c }
|
||||
/* LiteralStringOther */ .chroma .sx { color: #f1fa8c }
|
||||
/* LiteralStringRegex */ .chroma .sr { color: #f1fa8c }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color: #f1fa8c }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color: #f1fa8c }
|
||||
/* LiteralNumber */ .chroma .m { color: #bd93f9 }
|
||||
/* LiteralNumberBin */ .chroma .mb { color: #bd93f9 }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color: #bd93f9 }
|
||||
/* LiteralNumberHex */ .chroma .mh { color: #bd93f9 }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color: #bd93f9 }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color: #bd93f9 }
|
||||
/* LiteralNumberOct */ .chroma .mo { color: #bd93f9 }
|
||||
/* Operator */ .chroma .o { color: #ff79c6 }
|
||||
/* OperatorWord */ .chroma .ow { color: #ff79c6 }
|
||||
/* Punctuation */ .chroma .p { }
|
||||
/* Comment */ .chroma .c { color: #6272a4 }
|
||||
/* CommentHashbang */ .chroma .ch { color: #6272a4 }
|
||||
/* CommentMultiline */ .chroma .cm { color: #6272a4 }
|
||||
/* CommentSingle */ .chroma .c1 { color: #6272a4 }
|
||||
/* CommentSpecial */ .chroma .cs { color: #6272a4 }
|
||||
/* CommentPreproc */ .chroma .cp { color: #ff79c6 }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color: #ff79c6 }
|
||||
/* Generic */ .chroma .g { }
|
||||
/* GenericDeleted */ .chroma .gd { color: #ff5555 }
|
||||
/* GenericEmph */ .chroma .ge { text-decoration: underline }
|
||||
/* GenericError */ .chroma .gr { }
|
||||
/* GenericHeading */ .chroma .gh { font-weight: bold }
|
||||
/* GenericInserted */ .chroma .gi { color: #50fa7b; font-weight: bold }
|
||||
/* GenericOutput */ .chroma .go { color: #44475a }
|
||||
/* GenericPrompt */ .chroma .gp { }
|
||||
/* GenericStrong */ .chroma .gs { }
|
||||
/* GenericSubheading */ .chroma .gu { font-weight: bold }
|
||||
/* GenericTraceback */ .chroma .gt { }
|
||||
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
|
||||
/* TextWhitespace */ .chroma .w { }
|
85
assets/quartz/styles/_light_syntax.scss
Normal file
85
assets/quartz/styles/_light_syntax.scss
Normal file
@ -0,0 +1,85 @@
|
||||
/* Background */ .bg { color: #272822; background-color: #fafafa; }
|
||||
/* PreWrapper */ .chroma { color: #272822; background-color: #fafafa; }
|
||||
/* Other */ .chroma .x { }
|
||||
/* Error */ .chroma .err { }
|
||||
/* CodeLine */ .chroma .cl { }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
|
||||
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
|
||||
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
|
||||
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
|
||||
/* Line */ .chroma .line { display: flex; }
|
||||
/* Keyword */ .chroma .k { color: #00a8c8 }
|
||||
/* KeywordConstant */ .chroma .kc { color: #00a8c8 }
|
||||
/* KeywordDeclaration */ .chroma .kd { color: #00a8c8 }
|
||||
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
|
||||
/* KeywordPseudo */ .chroma .kp { color: #00a8c8 }
|
||||
/* KeywordReserved */ .chroma .kr { color: #00a8c8 }
|
||||
/* KeywordType */ .chroma .kt { color: #00a8c8 }
|
||||
/* Name */ .chroma .n { color: #111111 }
|
||||
/* NameAttribute */ .chroma .na { color: #75af00 }
|
||||
/* NameBuiltin */ .chroma .nb { color: #111111 }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { color: #111111 }
|
||||
/* NameClass */ .chroma .nc { color: #75af00 }
|
||||
/* NameConstant */ .chroma .no { color: #00a8c8 }
|
||||
/* NameDecorator */ .chroma .nd { color: #75af00 }
|
||||
/* NameEntity */ .chroma .ni { color: #111111 }
|
||||
/* NameException */ .chroma .ne { color: #75af00 }
|
||||
/* NameFunction */ .chroma .nf { color: #75af00 }
|
||||
/* NameFunctionMagic */ .chroma .fm { color: #111111 }
|
||||
/* NameLabel */ .chroma .nl { color: #111111 }
|
||||
/* NameNamespace */ .chroma .nn { color: #111111 }
|
||||
/* NameOther */ .chroma .nx { color: #75af00 }
|
||||
/* NameProperty */ .chroma .py { color: #111111 }
|
||||
/* NameTag */ .chroma .nt { color: #f92672 }
|
||||
/* NameVariable */ .chroma .nv { color: #111111 }
|
||||
/* NameVariableClass */ .chroma .vc { color: #111111 }
|
||||
/* NameVariableGlobal */ .chroma .vg { color: #111111 }
|
||||
/* NameVariableInstance */ .chroma .vi { color: #111111 }
|
||||
/* NameVariableMagic */ .chroma .vm { color: #111111 }
|
||||
/* Literal */ .chroma .l { color: #ae81ff }
|
||||
/* LiteralDate */ .chroma .ld { color: #d88200 }
|
||||
/* LiteralString */ .chroma .s { color: #d88200 }
|
||||
/* LiteralStringAffix */ .chroma .sa { color: #d88200 }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color: #d88200 }
|
||||
/* LiteralStringChar */ .chroma .sc { color: #d88200 }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color: #d88200 }
|
||||
/* LiteralStringDoc */ .chroma .sd { color: #d88200 }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color: #d88200 }
|
||||
/* LiteralStringEscape */ .chroma .se { color: #8045ff }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { color: #d88200 }
|
||||
/* LiteralStringInterpol */ .chroma .si { color: #d88200 }
|
||||
/* LiteralStringOther */ .chroma .sx { color: #d88200 }
|
||||
/* LiteralStringRegex */ .chroma .sr { color: #d88200 }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color: #d88200 }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color: #d88200 }
|
||||
/* LiteralNumber */ .chroma .m { color: #ae81ff }
|
||||
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
|
||||
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
|
||||
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
|
||||
/* Operator */ .chroma .o { color: #f92672 }
|
||||
/* OperatorWord */ .chroma .ow { color: #f92672 }
|
||||
/* Punctuation */ .chroma .p { color: #111111 }
|
||||
/* Comment */ .chroma .c { color: #75715e }
|
||||
/* CommentHashbang */ .chroma .ch { color: #75715e }
|
||||
/* CommentMultiline */ .chroma .cm { color: #75715e }
|
||||
/* CommentSingle */ .chroma .c1 { color: #75715e }
|
||||
/* CommentSpecial */ .chroma .cs { color: #75715e }
|
||||
/* CommentPreproc */ .chroma .cp { color: #75715e }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
|
||||
/* Generic */ .chroma .g { }
|
||||
/* GenericDeleted */ .chroma .gd { }
|
||||
/* GenericEmph */ .chroma .ge { font-style: italic }
|
||||
/* GenericError */ .chroma .gr { }
|
||||
/* GenericHeading */ .chroma .gh { }
|
||||
/* GenericInserted */ .chroma .gi { }
|
||||
/* GenericOutput */ .chroma .go { }
|
||||
/* GenericPrompt */ .chroma .gp { }
|
||||
/* GenericStrong */ .chroma .gs { font-weight: bold }
|
||||
/* GenericSubheading */ .chroma .gu { }
|
||||
/* GenericTraceback */ .chroma .gt { }
|
||||
/* GenericUnderline */ .chroma .gl { }
|
||||
/* TextWhitespace */ .chroma .w { }
|
615
assets/quartz/styles/base.scss
Normal file
615
assets/quartz/styles/base.scss
Normal file
@ -0,0 +1,615 @@
|
||||
// typography
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
&:lang(ar) {
|
||||
& p, & h1, & h2, & h3, article, header {
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
& footer > p {
|
||||
text-align: center !important;
|
||||
}
|
||||
}
|
||||
|
||||
.singlePage {
|
||||
padding: 4em 30vw;
|
||||
@media all and (max-width: 1200px) {
|
||||
padding: 25px 5vw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
background-color: var(--light);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, thead {
|
||||
font-family: var(--font-header);
|
||||
color: var(--dark);
|
||||
font-weight: revert;
|
||||
margin: 2rem 0 0;
|
||||
padding: 2rem auto 1rem;
|
||||
|
||||
&:hover > .hanchor {
|
||||
color: var(--secondary);
|
||||
}
|
||||
}
|
||||
|
||||
.hanchor {
|
||||
font-family: var(--font-header);
|
||||
opacity: 0.8;
|
||||
transition: color 0.3s ease;
|
||||
color: var(--dark);
|
||||
}
|
||||
|
||||
p, ul, text, a, tr, td, li, ol, ul {
|
||||
font-family: var(--font-body);
|
||||
color: var(--gray);
|
||||
fill: var(--gray);
|
||||
font-weight: normal;
|
||||
margin: revert;
|
||||
padding: revert;
|
||||
}
|
||||
|
||||
tbody, li, p {
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
.mainTOC {
|
||||
border-radius: 5px;
|
||||
padding: 0.75em 0;
|
||||
|
||||
& details {
|
||||
& summary {
|
||||
cursor: zoom-in;
|
||||
font-family: var(--font-header);
|
||||
color: var(--dark);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
&[open] summary {
|
||||
cursor: zoom-out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#TableOfContents > ol {
|
||||
counter-reset: section;
|
||||
margin-left: 0;
|
||||
padding-left: 1.5em;
|
||||
& > li {
|
||||
counter-increment: section;
|
||||
& > ol {
|
||||
counter-reset: subsection;
|
||||
& > li {
|
||||
counter-increment: subsection;
|
||||
&::marker {
|
||||
content: counter(section) "." counter(subsection) " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > li::marker {
|
||||
content: counter(section) " ";
|
||||
}
|
||||
|
||||
& > li::marker, & > li > ol > li::marker {
|
||||
font-family: var(--font-body);
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid var(--outlinegray);
|
||||
width: 100%;
|
||||
padding: 1.5em;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 0.2em 1em;
|
||||
border: 1px solid var(--outlinegray);
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
border-radius: 3px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
p > img + em {
|
||||
display: block;
|
||||
transform: translateY(-1em);
|
||||
}
|
||||
|
||||
sup {
|
||||
line-height: 0
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-left: 0;
|
||||
border-left: 3px solid var(--secondary);
|
||||
padding-left: 1em;
|
||||
transition: border-color 0.2s ease;
|
||||
}
|
||||
|
||||
.footnotes p {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
display: flex;
|
||||
margin-top: 2em;
|
||||
gap: 1.5em;
|
||||
justify-content: center;
|
||||
|
||||
.disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
& > li {
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
|
||||
& a {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
& a[href$="#"], &.active a {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
article {
|
||||
& > h1 {
|
||||
margin-top: 2em;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
& > .meta {
|
||||
margin: 0 0 1em 0;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
& a {
|
||||
font-weight: 600;
|
||||
|
||||
&.internal-link {
|
||||
text-decoration: none;
|
||||
background-color: transparentize(#8f9fa9, 0.85);
|
||||
padding: 0 0.1em;
|
||||
margin: auto -0.1em;
|
||||
border-radius: 3px;
|
||||
|
||||
&.broken {
|
||||
opacity: 0.5;
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& p {
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
}
|
||||
|
||||
.tags {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
|
||||
& .meta {
|
||||
margin: 1.5em 0;
|
||||
& > h1 {
|
||||
margin: 0;
|
||||
}
|
||||
& > p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
& > li {
|
||||
display: inline-block;
|
||||
margin: 0.4em 0.2em;
|
||||
}
|
||||
|
||||
& > li > a {
|
||||
border-radius: 8px;
|
||||
border: var(--outlinegray) 1px solid;
|
||||
padding: 0.2em 0.5em;
|
||||
&::before {
|
||||
content: "#";
|
||||
margin-right: 0.3em;
|
||||
color: var(--outlinegray);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.backlinks a {
|
||||
font-weight: 600;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
sup > a {
|
||||
text-decoration: none;
|
||||
padding: 0 0.1em 0 0.2em;
|
||||
}
|
||||
|
||||
#page-title {
|
||||
margin: 0;
|
||||
& > a {
|
||||
font-family: var(--font-header);
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s ease;
|
||||
color: var(--secondary);
|
||||
&:hover {
|
||||
color: var(--tertiary) !important;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: var(--font-mono);
|
||||
padding: 0.75em;
|
||||
border-radius: 3px;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.85em;
|
||||
padding: 0.15em 0.3em;
|
||||
border-radius: 5px;
|
||||
background: var(--lightgray);
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
0% {opacity:0;}
|
||||
100% {opacity:1;}
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 4em;
|
||||
text-align: center;
|
||||
& ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
margin: 2em auto;
|
||||
height: 1px;
|
||||
border: none;
|
||||
background-color: var(--outlinegray);
|
||||
}
|
||||
|
||||
.page-end {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 2em;
|
||||
|
||||
@media all and (max-width: 780px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
& > * {
|
||||
flex: 1 0 0;
|
||||
}
|
||||
|
||||
& > .backlinks-container {
|
||||
& > ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
& > li {
|
||||
margin: 0.5em 0;
|
||||
padding: 0.25em 1em;
|
||||
border: var(--outlinegray) 1px solid;
|
||||
border-radius: 5px
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& #graph-container {
|
||||
border: var(--outlinegray) 1px solid;
|
||||
border-radius: 5px;
|
||||
box-sizing: border-box;
|
||||
min-height: 250px;
|
||||
margin: 0.5em 0;
|
||||
|
||||
& > svg {
|
||||
margin-bottom: -5px;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.centered {
|
||||
margin-top: 30vh;
|
||||
}
|
||||
|
||||
.spacer {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
header, .menu-search {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin: 2em 1em 2em;
|
||||
|
||||
& > h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
& > nav {
|
||||
@media all and (max-width: 600px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#search-icon {
|
||||
background-color: var(--lightgray);
|
||||
border-radius: 4px;
|
||||
height: 2em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
& > p {
|
||||
display: inline;
|
||||
padding: 0 1.5em 0 2em;
|
||||
}
|
||||
}
|
||||
|
||||
& svg {
|
||||
cursor: pointer;
|
||||
width: 18px;
|
||||
min-width: 18px;
|
||||
margin: 0 0.5em;
|
||||
|
||||
&:hover .search-path {
|
||||
stroke: var(--tertiary);
|
||||
}
|
||||
|
||||
.search-path {
|
||||
stroke: var(--gray);
|
||||
stroke-width: 2px;
|
||||
transition: stroke 0.5s ease;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#search-container {
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100%;
|
||||
overflow: scroll;
|
||||
display: none;
|
||||
backdrop-filter: blur(4px);
|
||||
-webkit-backdrop-filter: blur(4px);
|
||||
|
||||
& > div {
|
||||
width: 50%;
|
||||
margin-top: 15vh;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
@media all and (max-width: 1200px) {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
& > * {
|
||||
width: 100%;
|
||||
border-radius: 4px;
|
||||
background: var(--light);
|
||||
box-shadow: 0 14px 50px rgba(27, 33, 48, 0.12), 0 10px 30px rgba(27, 33, 48, 0.16);
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
& > input {
|
||||
box-sizing: border-box;
|
||||
padding: 0.5em 1em;
|
||||
font-family: var(--font-body);
|
||||
color: var(--dark);
|
||||
font-size: 1.1em;
|
||||
border: 1px solid var(--outlinegray);
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
& > #results-container {
|
||||
& .result-card {
|
||||
padding: 1em;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s ease;
|
||||
border: 1px solid var(--outlinegray);
|
||||
border-bottom: none;
|
||||
width: 100%;
|
||||
|
||||
// normalize button props
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
text-transform: none;
|
||||
text-align: left;
|
||||
background: var(--light);
|
||||
outline: none;
|
||||
|
||||
&:hover, &:focus {
|
||||
background: rgba(180, 180, 180, 0.15);
|
||||
}
|
||||
|
||||
&:first-of-type {
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
border-bottom: 1px solid var(--outlinegray);
|
||||
}
|
||||
|
||||
& > h3, & > p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-highlight {
|
||||
background-color: #afbfc966;
|
||||
padding: 0.05em 0.2em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.section-ul {
|
||||
list-style: none;
|
||||
margin-top: 2em;
|
||||
padding-left: 0;
|
||||
|
||||
}
|
||||
|
||||
.section-li {
|
||||
margin-bottom: 1em;
|
||||
|
||||
& > .section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@media all and (max-width: 600px) {
|
||||
& .tags {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
& h3 > a {
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
& p {
|
||||
margin: 0;
|
||||
padding-right: 1em;
|
||||
flex-basis: 6em;
|
||||
}
|
||||
}
|
||||
|
||||
& h3 {
|
||||
opacity: 1;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
& .meta {
|
||||
opacity: 0.6;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes dropin {
|
||||
0% {
|
||||
display: none;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
1% {
|
||||
display: inline-block;
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
.popover {
|
||||
z-index: 999;
|
||||
position: absolute;
|
||||
width: 20rem;
|
||||
display: none;
|
||||
background-color: var(--light);
|
||||
padding: 1rem;
|
||||
margin: 1rem;
|
||||
border: 1px solid var(--outlinegray);
|
||||
border-radius: 5px;
|
||||
pointer-events: none;
|
||||
transition: opacity 0.2s ease, transform 0.2s ease;
|
||||
user-select: none;
|
||||
overflow-wrap: anywhere;
|
||||
box-shadow: 6px 6px 36px 0 rgba(0,0,0,0.25);
|
||||
|
||||
@media all and (max-width: 600px) {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&.visible {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
display: inline-block;
|
||||
animation: dropin 0.2s ease;
|
||||
}
|
||||
|
||||
& > h3 {
|
||||
font-size: 1rem;
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
& .meta {
|
||||
margin-top: 0.25rem;
|
||||
opacity: 0.5;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
& > p {
|
||||
margin: 0;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
|
||||
& > p, & > a {
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
|
||||
#contact_buttons ul {
|
||||
list-style-type: none;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
li a {
|
||||
padding: 0 1em;
|
||||
}
|
||||
}
|
||||
|
||||
mark {
|
||||
background-color: var(--highlighted);
|
||||
color: var(--gray);
|
||||
}
|
48
assets/quartz/styles/clipboard.scss
Normal file
48
assets/quartz/styles/clipboard.scss
Normal file
@ -0,0 +1,48 @@
|
||||
.clipboard-button {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
float: right;
|
||||
right: 0;
|
||||
top: 0;
|
||||
padding: 0.69em;
|
||||
margin: 0.5em;
|
||||
color: var(--outlinegray);
|
||||
border-color: var(--dark);
|
||||
background-color: var(--lightgray);
|
||||
filter: contrast(1.1);
|
||||
border: 2px solid;
|
||||
border-radius: 6px;
|
||||
font-size: 0.8em;
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
transition: 0.12s;
|
||||
|
||||
& > svg {
|
||||
fill: var(--light);
|
||||
filter: contrast(0.3);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
border-color: var(--primary);
|
||||
|
||||
& > svg {
|
||||
fill: var(--primary);
|
||||
}
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.highlight {
|
||||
position: relative;
|
||||
|
||||
&:hover > .clipboard-button {
|
||||
opacity: 1;
|
||||
transition: 0.2s;
|
||||
}
|
||||
}
|
||||
|
||||
|
20
assets/quartz/styles/code-title.scss
Normal file
20
assets/quartz/styles/code-title.scss
Normal file
@ -0,0 +1,20 @@
|
||||
.code-title {
|
||||
color: var(--primary) ;
|
||||
font-family: var(--font-mono);
|
||||
width: max-content;
|
||||
overflow-x: auto;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
font-weight: normal;
|
||||
line-height: 1em;
|
||||
position: relative;
|
||||
padding: 0.5em 0.6em 0.6em; // + 1.2 em
|
||||
max-width: calc(100% - 1.2em); // (-1.2 em) fits article width exactly
|
||||
margin-bottom: -0.2em;
|
||||
z-index: -1;
|
||||
border-top-left-radius: 0.3em;
|
||||
border-top-right-radius: 0.3em;
|
||||
font-size: 0.9em;
|
||||
background-color: var(--lightgray);
|
||||
filter: hue-rotate(-30deg) contrast(1.0) opacity(0.8);
|
||||
}
|
43
assets/quartz/styles/custom.scss
Normal file
43
assets/quartz/styles/custom.scss
Normal file
@ -0,0 +1,43 @@
|
||||
// Add your own CSS here!
|
||||
.tag-container {
|
||||
display: inline-flex;
|
||||
flex-wrap: wrap;
|
||||
& > .post-tag + .post-tag {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
font-size: 10px;
|
||||
}
|
||||
#tabs-post-meta {
|
||||
color: var(--gray) !important;
|
||||
user-select: none;
|
||||
font-size: 15px;
|
||||
font-family: "AaBobble";
|
||||
}
|
||||
.tags-heading h3 {
|
||||
margin: 0;
|
||||
margin-top: 0.8em;
|
||||
}
|
||||
.post-date {
|
||||
// margin: 1.7em 0;
|
||||
display: inline-block;
|
||||
}
|
||||
.small-caps {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.post-tag {
|
||||
display: inline-block;
|
||||
background-color: var(--secondary);
|
||||
border-radius: 25px;
|
||||
padding: 3px 7px;
|
||||
font-size: 12px;
|
||||
transition: box-shadow 300ms ease-out;
|
||||
&:hover {
|
||||
box-shadow: 3px 2px 0px #affffe;
|
||||
}
|
||||
a {
|
||||
color: #000;
|
||||
&:hover {
|
||||
text-shadow: 0px 1px 0px #000;
|
||||
}
|
||||
}
|
||||
}
|
44
assets/quartz/styles/darkmode.scss
Normal file
44
assets/quartz/styles/darkmode.scss
Normal file
@ -0,0 +1,44 @@
|
||||
.darkmode {
|
||||
float: right;
|
||||
// padding: 1em;
|
||||
min-width: 30px;
|
||||
position: relative;
|
||||
|
||||
@media all and (max-width: 450px) {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
& > .toggle {
|
||||
display: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
& svg {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
top: calc(50% - 10px);
|
||||
margin: 0 7px;
|
||||
fill: var(--gray);
|
||||
transition: opacity 0.1s ease;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle:checked ~ label {
|
||||
& > #dayIcon {
|
||||
opacity: 0;
|
||||
}
|
||||
& > #nightIcon {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle:not(:checked) ~ label {
|
||||
& > #dayIcon {
|
||||
opacity: 1;
|
||||
}
|
||||
& > #nightIcon {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
66
assets/quartz/styles/syntax.scss
Normal file
66
assets/quartz/styles/syntax.scss
Normal file
@ -0,0 +1,66 @@
|
||||
// Overrides
|
||||
/* Background */
|
||||
.chroma {
|
||||
overflow: hidden !important;
|
||||
background-color: var(--lightgray) !important;
|
||||
}
|
||||
|
||||
/* LineTable */
|
||||
.chroma .lntable {
|
||||
width: auto !important;
|
||||
overflow: auto !important;
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
/* LineHighlight */
|
||||
.chroma .hl {
|
||||
display: block !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
/* LineNumbersTable */
|
||||
.chroma .lnt {
|
||||
margin-right: 0.0em !important;
|
||||
padding: 0 0.0em 0 0.0em !important;
|
||||
}
|
||||
|
||||
/* LineNumbers */
|
||||
.chroma .ln {
|
||||
margin-right: 0.0em !important;
|
||||
padding: 0 0.0em 0 0.0em !important;
|
||||
}
|
||||
|
||||
/* GenericDeleted */
|
||||
.chroma .gd {
|
||||
color: #8b080b !important;
|
||||
}
|
||||
|
||||
/* GenericInserted */
|
||||
.chroma .gi {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
.lntd:first-of-type > .chroma {
|
||||
padding-right: 0 !important;
|
||||
}
|
||||
|
||||
.chroma code {
|
||||
font-family: var(--font-mono) !important;
|
||||
font-size: 0.85em !important;
|
||||
line-height: 2em !important;
|
||||
background: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.chroma {
|
||||
border-radius: 3px !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
pre.chroma {
|
||||
-moz-tab-size:4;-o-tab-size:4;tab-size:4;
|
||||
}
|
||||
|
||||
.katex {
|
||||
font-size: 1.1em !important;
|
||||
}
|
15
assets/search-data.json
Normal file
15
assets/search-data.json
Normal file
@ -0,0 +1,15 @@
|
||||
[
|
||||
{{- $pages := where .Site.Pages "Kind" "in" (slice "page" "section") -}}
|
||||
{{- $pages = where $pages "Params.booksearchexclude" "!=" true -}}
|
||||
{{- $pages = where $pages "Content" "not in" (slice nil "") -}}
|
||||
|
||||
{{ 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 -}}
|
||||
]
|
104
assets/search.js
Normal file
104
assets/search.js
Normal file
@ -0,0 +1,104 @@
|
||||
'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 }}, {
|
||||
doc: {
|
||||
id: 'id',
|
||||
field: ['title', 'content'],
|
||||
store: ['title', 'href', 'section']
|
||||
}
|
||||
});
|
||||
|
||||
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 = FlexSearch.create('balance', indexConfig);
|
||||
window.bookSearchIndex.add(pages);
|
||||
})
|
||||
.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, 10);
|
||||
searchHits.forEach(function (page) {
|
||||
const li = element('<li><a href></a><small></small></li>');
|
||||
const a = li.querySelector('a'), small = li.querySelector('small');
|
||||
|
||||
a.href = page.href;
|
||||
a.textContent = page.title;
|
||||
small.textContent = page.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));
|
||||
});
|
158
config.yaml
Normal file
158
config.yaml
Normal file
@ -0,0 +1,158 @@
|
||||
# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/theme/hugo-book/
|
||||
baseURL: https://tablet.sh/
|
||||
#
|
||||
|
||||
# Book configuration
|
||||
disablePathToLower: false
|
||||
enableGitInfo: true
|
||||
|
||||
# # Needed for mermaid/katex shortcodes
|
||||
markup:
|
||||
goldmark:
|
||||
renderer:
|
||||
unsafe: true
|
||||
tableOfContents:
|
||||
startLevel: 1
|
||||
|
||||
# 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
|
||||
|
||||
# Sidebar menu additional links
|
||||
menu:
|
||||
# before:
|
||||
# - name: "Sample"
|
||||
# url: "https://google.com"
|
||||
# weight: 10
|
||||
# after:
|
||||
# - name: "instagram"
|
||||
# url: "https://instagram.com/i.am.the.tablet"
|
||||
# weight: 10
|
||||
ignoreFiles: [
|
||||
"/content/templates/*"
|
||||
]
|
||||
taxonomies:
|
||||
tag: "tags"
|
||||
series: "series"
|
||||
|
||||
params:
|
||||
|
||||
name: The Tablet ❀ GamerGirlandCo (Corinthe)
|
||||
title: tablet's place. 🌸
|
||||
|
||||
# OPTIONAL: custom favicon location
|
||||
favicon: '/static/favicon.svg'
|
||||
|
||||
# whether to display on-hover link preview cards
|
||||
enableLinkPreview: true
|
||||
|
||||
# Enable rendering of LaTeX blocks
|
||||
# (surrounded by either single or double dollar signs)
|
||||
enableLatex: true
|
||||
|
||||
# whether to render titles for code blocks
|
||||
enableCodeBlockTitle: true
|
||||
|
||||
# whether to render copy buttons for code blocks
|
||||
enableCodeBlockCopy: true
|
||||
|
||||
# whether to render callouts
|
||||
enableCallouts: true
|
||||
|
||||
# Show footer, including backlinks and graph view
|
||||
enableFooter: false
|
||||
|
||||
# whether backlinks of pages should show the context in which
|
||||
# they were mentioned
|
||||
enableContextualBacklinks: true
|
||||
|
||||
# whether to show a section of recent notes on the home page
|
||||
enableRecentNotes: false
|
||||
|
||||
# whether to display an 'edit' button next to the last edited field
|
||||
# that links to github
|
||||
enableGitHubEdit: true
|
||||
|
||||
# whether to render mermaid diagrams
|
||||
enableMermaid: true
|
||||
|
||||
# Link to your Github repo
|
||||
GitHubLink: https://git.tablet.sh/tablet/amethyst
|
||||
|
||||
# Search (WIP)
|
||||
search:
|
||||
enableSemanticSearch: false
|
||||
operandApiKey: "REPLACE-WITH-YOUR-OPERAND-API-KEY"
|
||||
operandIndexId: "REPLACE-WITH-YOUR-OPERAND-INDEX-ID"
|
||||
|
||||
# Site description and title
|
||||
description: |
|
||||
Art, Metal, Code, and Creativity.
|
||||
hosted by Tablet !
|
||||
|
||||
|
||||
# Footer links
|
||||
links:
|
||||
- link_name: instagram
|
||||
link: https://instagram.com/i.am.the.tablet
|
||||
- link_name: say hi
|
||||
link: mailto:i.am.the.tablet@proton.me
|
||||
- link_name: and remember to stick it to Brian Tatler!
|
||||
link: https://git.tablet.sh/the-btfash-foundation
|
||||
|
||||
# (Optional, default true) Controls table of contents visibility on right side of pages.
|
||||
# Start and end levels can be controlled with markup.tableOfContents setting.
|
||||
# You can also specify this parameter per page in front matter.
|
||||
BookToC: true
|
||||
|
||||
# (Optional, default none) Set the path to a logo for the book. If the logo is
|
||||
# /static/logo.png then the path would be logo.png
|
||||
# BookLogo: /logo.png
|
||||
|
||||
# (Optional, default none) Set leaf bundle to render as side menu
|
||||
# When not specified file structure and weights will be used
|
||||
# BookMenuBundle: /menu
|
||||
|
||||
# (Optional, default docs) Specify root page to render child pages as menu.
|
||||
# Page is resoled by .GetPage function: https://gohugo.io/functions/getpage/
|
||||
# For backward compatibility you can set '*' to render all sections to menu. Acts same as '/'
|
||||
BookSection: "/"
|
||||
|
||||
# Set source repository location.
|
||||
# Used for 'Last Modified' and 'Edit this page' links.
|
||||
BookRepo: https://git.tablet.sh/the-btfash-foundation/tablet.sh
|
||||
|
||||
# (Optional, default 'commit') Specifies commit portion of the link to the page's last modified
|
||||
# commit hash for 'doc' page type.
|
||||
# Requires 'BookRepo' param.
|
||||
# Value used to construct a URL consisting of BookRepo/BookCommitPath/<commit-hash>
|
||||
# Github uses 'commit', Bitbucket uses 'commits'
|
||||
# BookCommitPath: commit
|
||||
|
||||
# Enable "Edit this page" links for 'doc' page type.
|
||||
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
|
||||
# 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: "Monday, 2 January 2006 @ 3:04:05PM"
|
||||
|
||||
|
||||
# (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: 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
|
||||
|
||||
# Don't change this
|
||||
enableSPA: false
|
||||
BookSearch: false
|
||||
BookServiceWorker: false
|
||||
BookPortableLinks: false
|
1
content
Submodule
1
content
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 6c8e433cb354daf893e78ce60dde7496c3cac5d1
|
38
data/graphConfig.yaml
Normal file
38
data/graphConfig.yaml
Normal file
@ -0,0 +1,38 @@
|
||||
# if true, a Global Graph will be shown on home page with full width, no backlink.
|
||||
# A different set of Local Graphs will be shown on sub pages.
|
||||
# if false, Local Graph will be default on every page as usual
|
||||
enableGlobalGraph: true
|
||||
|
||||
### Local Graph ###
|
||||
|
||||
localGraph:
|
||||
enableLegend: false
|
||||
enableDrag: true
|
||||
enableZoom: true
|
||||
depth: 1 # set to -1 to show full graph
|
||||
scale: 1.2
|
||||
repelForce: 2
|
||||
centerForce: 1
|
||||
linkDistance: 1
|
||||
fontSize: 0.6
|
||||
opacityScale: 3
|
||||
|
||||
### Global Graph ###
|
||||
|
||||
globalGraph:
|
||||
enableLegend: false
|
||||
enableDrag: true
|
||||
enableZoom: true
|
||||
depth: -1 # set to -1 to show full graph
|
||||
scale: 1.4
|
||||
repelForce: 1
|
||||
centerForce: 1
|
||||
linkDistance: 1
|
||||
fontSize: 0.5
|
||||
opacityScale: 3
|
||||
|
||||
### For all graphs ###
|
||||
|
||||
paths:
|
||||
- /moc: "#00e7e3"
|
||||
|
3
go.mod
Normal file
3
go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module github.com/64bitpandas/amethyst
|
||||
|
||||
go 1.16
|
14
i18n/am.yaml
Normal file
14
i18n/am.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: ፈልግ
|
||||
|
||||
- id: Edit this page
|
||||
translation: ይህንን ገጽ አስተካክል
|
||||
|
||||
- id: Last modified by
|
||||
translation: መጨረሻ የከለሰው ሰው
|
||||
|
||||
- id: Expand
|
||||
translation: አስፋ
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
14
i18n/bn.yaml
Normal file
14
i18n/bn.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: অনুসন্ধান
|
||||
|
||||
- id: Edit this page
|
||||
translation: এই পৃষ্ঠাটি সম্পাদনা করুন
|
||||
|
||||
- id: Last modified by
|
||||
translation: সর্বশেষ সম্পাদনা করেছেন
|
||||
|
||||
- id: Expand
|
||||
translation: বিস্তৃত করা
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
21
i18n/cn.yaml
Normal file
21
i18n/cn.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
# This should be removed in future, 'cn' is moved to `zh'
|
||||
- id: Search
|
||||
translation: 搜索
|
||||
|
||||
- id: Edit this page
|
||||
translation: 编辑本页
|
||||
|
||||
- id: Last modified by
|
||||
translation: 最后修改者
|
||||
|
||||
- id: Expand
|
||||
translation: 展开
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: |
|
||||
{
|
||||
encode: false,
|
||||
tokenize: function(str) {
|
||||
return str.replace(/[\x00-\x7F]/g, '').split('');
|
||||
}
|
||||
}
|
14
i18n/cs.yaml
Normal file
14
i18n/cs.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Vyhledávat
|
||||
|
||||
- id: Edit this page
|
||||
translation: Upravit tuto stránku
|
||||
|
||||
- id: Last modified by
|
||||
translation: Autor poslední změny
|
||||
|
||||
- id: Expand
|
||||
translation: Rozbalit
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
14
i18n/de.yaml
Normal file
14
i18n/de.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Suche
|
||||
|
||||
- id: Edit this page
|
||||
translation: Seite bearbeiten
|
||||
|
||||
- id: Last modified by
|
||||
translation: Zuletzt geändert von
|
||||
|
||||
- id: Expand
|
||||
translation: Erweitern
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
80
i18n/en.yaml
Normal file
80
i18n/en.yaml
Normal file
@ -0,0 +1,80 @@
|
||||
- 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 }'
|
||||
|
||||
- id: 404_message
|
||||
translation: "Hey! You look a little lost. This page doesn't exist (or may be private)."
|
||||
|
||||
- id: 404_back
|
||||
translation: "↳ Let's get you home."
|
||||
|
||||
- id: all_posts
|
||||
translation: "All {{.Title}}"
|
||||
|
||||
- id: last_updated
|
||||
translation: "Last updated"
|
||||
|
||||
- id: notes_count
|
||||
translation: "notes with this tag"
|
||||
|
||||
- id: first_10
|
||||
translation: "showing first 10 results"
|
||||
|
||||
- id: tag
|
||||
translation: "Tag"
|
||||
|
||||
- id: backlinks
|
||||
translation: "Backlinks"
|
||||
|
||||
- id: no_backlinks
|
||||
translation: "No backlinks found"
|
||||
|
||||
- id: home
|
||||
translation: "Home"
|
||||
|
||||
- id: light_mode
|
||||
translation: "Light Mode"
|
||||
|
||||
- id: dark_mode
|
||||
translation: "Dark Mode"
|
||||
|
||||
- id: edit_source
|
||||
translation: "Edit Source"
|
||||
|
||||
- id: interactive_graph
|
||||
translation: "Interactive Graph"
|
||||
|
||||
- id: search
|
||||
translation: "Search"
|
||||
|
||||
- id: search_icon
|
||||
translation: "Search Icon"
|
||||
|
||||
- id: icon_search
|
||||
translation: "Icon to open search"
|
||||
|
||||
- id: recent_notes
|
||||
translation: "Recent Notes"
|
||||
|
||||
- id: first_3_notes
|
||||
translation: "first 3 {{ .notes }}"
|
||||
|
||||
- id: search_for_something
|
||||
translation: "Search for something..."
|
||||
|
||||
- id: toc
|
||||
translation: "Table of Contents"
|
||||
|
||||
- id: copyright
|
||||
translation: "Made with <a href=\"https://github.com/64bitpandas/amethyst\">Amethyst</a>, © {{ .year }} {{ .name }}"
|
14
i18n/es.yaml
Normal file
14
i18n/es.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Buscar
|
||||
|
||||
- id: Edit this page
|
||||
translation: Editar esta página
|
||||
|
||||
- id: Last modified by
|
||||
translation: Última modificación por
|
||||
|
||||
- id: Expand
|
||||
translation: Expand
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
20
i18n/fa.yaml
Normal file
20
i18n/fa.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
- id: Search
|
||||
translation: جستجو
|
||||
|
||||
- id: Edit this page
|
||||
translation: این صفحه را ویرایش کنید
|
||||
|
||||
- id: Last modified by
|
||||
translation: آخرین بار ویرایش شده توسط
|
||||
|
||||
- id: Expand
|
||||
translation: بسط دادن
|
||||
|
||||
- id: Categories
|
||||
translation: دسته بندی ها
|
||||
|
||||
- id: Tags
|
||||
translation: تگ ها
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true, encode: false, rtl: true, split: /\s+/, tokenize: "forward"}'
|
14
i18n/fr.yaml
Normal file
14
i18n/fr.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Rechercher
|
||||
|
||||
- id: Edit this page
|
||||
translation: Modifier cette page
|
||||
|
||||
- id: Last modified by
|
||||
translation: Dernière modification par
|
||||
|
||||
- id: Expand
|
||||
translation: Développer
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
14
i18n/it.yaml
Normal file
14
i18n/it.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Cerca
|
||||
|
||||
- id: Edit this page
|
||||
translation: Modifica questa pagina
|
||||
|
||||
- id: Last modified by
|
||||
translation: Ultima modifica di
|
||||
|
||||
- id: Expand
|
||||
translation: Espandi
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
20
i18n/ja.yaml
Normal file
20
i18n/ja.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
- id: Search
|
||||
translation: 検索
|
||||
|
||||
- id: Edit this page
|
||||
translation: このページを編集する
|
||||
|
||||
- id: Last modified by
|
||||
translation: 最終更新者
|
||||
|
||||
- id: Expand
|
||||
translation: 展開
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: |
|
||||
{
|
||||
encode: false,
|
||||
tokenize: function(str) {
|
||||
return str.replace(/[\x00-\x7F]/g, '').split('');
|
||||
}
|
||||
}
|
21
i18n/jp.yaml
Normal file
21
i18n/jp.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
# This should be removed in future, 'jp' is moved to `ja'
|
||||
- id: Search
|
||||
translation: 検索
|
||||
|
||||
- id: Edit this page
|
||||
translation: このページを編集する
|
||||
|
||||
- id: Last modified by
|
||||
translation: 最終更新者
|
||||
|
||||
- id: Expand
|
||||
translation: 展開
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: |
|
||||
{
|
||||
encode: false,
|
||||
tokenize: function(str) {
|
||||
return str.replace(/[\x00-\x7F]/g, '').split('');
|
||||
}
|
||||
}
|
20
i18n/ko.yaml
Normal file
20
i18n/ko.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
- 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: |
|
||||
{
|
||||
encode: false,
|
||||
tokenize: function(str) {
|
||||
return str.replace(/[\x00-\x7F]/g, '').split('');
|
||||
}
|
||||
}
|
14
i18n/nb.yaml
Normal file
14
i18n/nb.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Søk
|
||||
|
||||
- id: Edit this page
|
||||
translation: Rediger denne siden
|
||||
|
||||
- id: Last modified by
|
||||
translation: Sist endret av
|
||||
|
||||
- id: Expand
|
||||
translation: Utvid
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
14
i18n/pt.yaml
Normal file
14
i18n/pt.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Buscar
|
||||
|
||||
- id: Edit this page
|
||||
translation: Editar página
|
||||
|
||||
- id: Last modified by
|
||||
translation: Última modificação por
|
||||
|
||||
- id: Expand
|
||||
translation: Expandir
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
14
i18n/ru.yaml
Normal file
14
i18n/ru.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Поиск
|
||||
|
||||
- id: Edit this page
|
||||
translation: Редактировать эту страницу
|
||||
|
||||
- id: Last modified by
|
||||
translation: Последнее изменение от
|
||||
|
||||
- id: Expand
|
||||
translation: Развернуть
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ split: /[^a-zа-яё0-9\w]/gi }'
|
14
i18n/sv.yaml
Normal file
14
i18n/sv.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- id: Search
|
||||
translation: Sök
|
||||
|
||||
- id: Edit this page
|
||||
translation: Redigera denna sida
|
||||
|
||||
- id: Last modified by
|
||||
translation: Senast modifierad av
|
||||
|
||||
- id: Expand
|
||||
translation: Expandera
|
||||
|
||||
- id: bookSearchConfig
|
||||
translation: '{ cache: true }'
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user