forked from mirrors/hugo-theme-terminal
Compare commits
241 Commits
Author | SHA1 | Date | |
---|---|---|---|
8dee69d6f1 | |||
77db977cbb | |||
21cdda5eab | |||
bc8a948e9e | |||
4cfc615c58 | |||
630b79d3d3 | |||
078ea12d61 | |||
799ade2a15 | |||
a28d372103 | |||
84915ed87c | |||
48a59f7148 | |||
5a7235247c | |||
9cbdf7f76b | |||
8ef529a191 | |||
578cff2c4a | |||
cddbfdb6c8 | |||
52455fceeb | |||
ef0ab18dd9 | |||
788ab99b3d | |||
1e9ebfa7a0 | |||
4a26bc11a8 | |||
a44ecc8816 | |||
7e552cfc27 | |||
b824cb3172 | |||
7ebc190fa0 | |||
f501aea6c4 | |||
6978547538 | |||
1cfe36806b | |||
a318e42764 | |||
1610962731 | |||
e65726ee5a | |||
eb64ae3fd1 | |||
b868b1d08b | |||
d7e289572a | |||
b257fa2699 | |||
aad3300fb5 | |||
ce78519623 | |||
48846331ee | |||
e0213b0d4e | |||
7b430aaaca | |||
065f1a9f1e | |||
c98dfa6452 | |||
379dccdabc | |||
6f09541f75 | |||
60b9f3f4db | |||
32bac37f22 | |||
55e8a45109 | |||
9d458d193f | |||
1b3daa8aec | |||
993f39f58d | |||
6ad2d19be8 | |||
ded26b695f | |||
26acce9de7 | |||
2d6da429ad | |||
f90f088661 | |||
9ecbdfdb53 | |||
53b0ba4b1c | |||
4d31894966 | |||
f8743050da | |||
2f07661d54 | |||
df1fcb5b4e | |||
38b7e2d71a | |||
b396c7267f | |||
71b2d5731d | |||
f07873df21 | |||
2c980592fb | |||
c3cc15b3fb | |||
411fade4c6 | |||
0f3c3ce5a2 | |||
757870fc9f | |||
8c8b04f619 | |||
384671e682 | |||
14414168d7 | |||
1eb3288a62 | |||
9facb58364 | |||
a3dd8c11f0 | |||
cc1553f7ff | |||
b11b5bf012 | |||
1d8c831af4 | |||
e77948f3cd | |||
a634663b48 | |||
bfc300f4c8 | |||
553c9a0616 | |||
bf96fb25be | |||
b41381ea93 | |||
8b1529f4bb | |||
9833384a7b | |||
5737d557f4 | |||
466cd49b25 | |||
a9365185ba | |||
de6a660701 | |||
0b06a56093 | |||
be75e724a1 | |||
0c08f72167 | |||
bbaf93ff6f | |||
360673bedf | |||
2b0406b7a4 | |||
f851fbb769 | |||
fa5d7a4d42 | |||
49c865aee1 | |||
3dd3c40480 | |||
ae9c58f8e1 | |||
cd36a63fd0 | |||
e4b831ac6b | |||
c10d0fa757 | |||
25bae8dd53 | |||
cf980be3f4 | |||
f139a26426 | |||
7d58896abd | |||
1752bcca7d | |||
7773f26830 | |||
9fcd6f2e83 | |||
7eb29c4145 | |||
d2aba65c9a | |||
ec451ec43e | |||
ebf07a9cdd | |||
ca1cc0c391 | |||
b06ead7ef5 | |||
092dfc0601 | |||
3dd20f0986 | |||
ef0c8fef68 | |||
2383eeb774 | |||
67bb5735de | |||
61980c49d1 | |||
988d494e4b | |||
49c8fa1dae | |||
fe616cce37 | |||
e12f6caa63 | |||
aaaadafec9 | |||
9dd8459305 | |||
b4bf3b06c3 | |||
b4629bfaea | |||
89e499b402 | |||
6e3dff3351 | |||
58bfba3985 | |||
72673985a1 | |||
dc69c9059c | |||
30ad59dc69 | |||
8564ee33a1 | |||
175b1a7cb8 | |||
53a90e1e09 | |||
235f2a37ff | |||
2363670d7e | |||
e42dbd57ea | |||
2c5f161f65 | |||
ec4748863a | |||
de84c9b4c3 | |||
3032b81e82 | |||
8dc8e95747 | |||
fef6d938fd | |||
5092fa9a01 | |||
603898c30b | |||
a09a79ae4c | |||
3dd5709d70 | |||
24522eeec5 | |||
ce5fa4c87c | |||
090d7b2f19 | |||
5f53ba6b43 | |||
3c914ffcf7 | |||
229a3ead62 | |||
5e218c0b43 | |||
b09f2a4a14 | |||
194a49d39e | |||
220f8e590e | |||
3c4a093dbd | |||
0af87801a2 | |||
e446bafe36 | |||
e3e310b60d | |||
febf17a03d | |||
89f88607cc | |||
13aa8e777e | |||
2ff00f859a | |||
5f2dbe44e3 | |||
43a93652dd | |||
58c2d90f94 | |||
547a17a25f | |||
3882fb160a | |||
b0a8f3bd43 | |||
f3317dc327 | |||
feee0b5a1e | |||
58cf550908 | |||
30b7219a69 | |||
f0a5d6859e | |||
a5ef3ccc8b | |||
c3f51a4c11 | |||
60a15e7b38 | |||
1e46e9cdaf | |||
29200fe841 | |||
a6ca60fb7f | |||
4d71df019b | |||
480cb60150 | |||
78002c5029 | |||
4d617361a3 | |||
825fde486a | |||
28c44c93b1 | |||
9c4f402c4e | |||
12f249fd7c | |||
42eea54554 | |||
223b7536ce | |||
cb61741202 | |||
1756ef2edc | |||
d0284fd691 | |||
30d5681909 | |||
b572763b1f | |||
8e5c8d32dc | |||
bb344ddad7 | |||
08644e95c3 | |||
6856982e4a | |||
7ebb1d2776 | |||
54f156d2d5 | |||
0f2f3fc6be | |||
4a2f49d34b | |||
3523728e96 | |||
6a9b40ee12 | |||
4a20b34d61 | |||
85113381ea | |||
5685c97216 | |||
a749f3e3e6 | |||
b3437bc4dc | |||
654784a5c1 | |||
fae2e5f804 | |||
57b7a9cfc2 | |||
9f2097f3f0 | |||
a6f223f522 | |||
8710cb78b5 | |||
d20f756c21 | |||
3a7d4ad376 | |||
c3b01fb9ce | |||
0aae2e9ff4 | |||
4ade714a77 | |||
e679f013c1 | |||
eac693c55f | |||
cbe39af196 | |||
d75ae3fae8 | |||
e6be81c664 | |||
80fa802fa6 | |||
55b6d6bf28 | |||
8b264b8f51 | |||
983b497ec7 | |||
2266ddfdd4 | |||
b95bb4ac1d |
1
.husky/.gitignore
vendored
Normal file
1
.husky/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
_
|
4
.husky/pre-push
Executable file
4
.husky/pre-push
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
yarn build && git add . && git commit --amend --no-edit
|
@ -2,7 +2,6 @@ const url = require("postcss-url");
|
|||||||
const imports = require("postcss-import");
|
const imports = require("postcss-import");
|
||||||
const nested = require("postcss-nested");
|
const nested = require("postcss-nested");
|
||||||
const postCSSPresetEnv = require("postcss-preset-env");
|
const postCSSPresetEnv = require("postcss-preset-env");
|
||||||
const browsers = require("browserslist");
|
|
||||||
const cssnano = require("cssnano");
|
const cssnano = require("cssnano");
|
||||||
const color = require("postcss-color-mod-function");
|
const color = require("postcss-color-mod-function");
|
||||||
const mixins = require("postcss-mixins");
|
const mixins = require("postcss-mixins");
|
@ -16,6 +16,10 @@ eg:
|
|||||||
- John, a javascript developer.
|
- John, a javascript developer.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- **Social media icons** (https://github.com/...)
|
- **Portfolio** (https://github.com/Louisload/hugo-theme-terminal-portfolio)
|
||||||
- This is the biggest missing feature of the theme. But now it will help your audience reach you over the internet.
|
- Allows you to create a portfolio page (or several). Supports icons and subsections.
|
||||||
- John, a javascript developer.
|
- Luís Rodrigues Alves (Louisload), a game dev and musician.
|
||||||
|
|
||||||
|
- **Single Page Website** (https://github.com/justinnuwin/hugo-theme-terminal)
|
||||||
|
- A layout where the homepage can render lists of pages and the navigation menu can link to sections on the homepage.
|
||||||
|
- Justin Nguyen, software and hardware developer.
|
||||||
|
110
README.md
110
README.md
@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
### DEMO - https://hugo-terminal.now.sh/
|
### DEMO - https://hugo-terminal.now.sh/
|
||||||
|
|
||||||
<a href="https://www.buymeacoffee.com/panr" target="_blank"><img src="https://res.cloudinary.com/panr/image/upload/v1579374705/buymeacoffee_y6yvov.svg" alt="Buy Me A Coffee" ></a>
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
@ -20,24 +18,29 @@
|
|||||||
- [Found a bug?](#bug)
|
- [Found a bug?](#bug)
|
||||||
- [New cool idea or feature](#feature)
|
- [New cool idea or feature](#feature)
|
||||||
- [Terminal theme user?](#terminal-theme-user)
|
- [Terminal theme user?](#terminal-theme-user)
|
||||||
- [Sponsoring](#sponsoring)
|
|
||||||
- [Licence](#licence)
|
- [Licence](#licence)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **5 duetone themes**, depending on your preferences (orange is default, red, blue, green, pink)
|
- **5 duotone themes**, depending on your preferences (orange is default, red, blue, green, pink)
|
||||||
- [**Fira Code**](https://github.com/tonsky/FiraCode) as default monospaced font. It's gorgeous!
|
- [**Fira Code**](https://github.com/tonsky/FiraCode) as default monospaced font. It's gorgeous!
|
||||||
- **really nice duotone**, custom syntax highlighting based on [**PrismJS**](https://prismjs.com)
|
- **really nice duotone**, custom syntax highlighting based on [**PrismJS**](https://prismjs.com)
|
||||||
- fully responsive
|
- fully responsive
|
||||||
|
|
||||||
#### Built-in shortcodes
|
#### Built-in shortcodes
|
||||||
|
|
||||||
- **`image`** (prop required: **`src`**; props optional: **`alt`**, **`position`** (**left** is default | center | right), **`style`**)
|
- **`image`** (props required: **`src`**; props optional: **`alt`**, **`position`** (**left** is default | center | right), **`style`**)
|
||||||
- eg: `{{< image src="/img/hello.png" alt="Hello Friend" position="center" style="border-radius: 8px;" >}}`
|
- e.g.
|
||||||
|
```go
|
||||||
|
{{< image src="/img/hello.png" alt="Hello Friend" position="center" style="border-radius: 8px;" >}}
|
||||||
|
```
|
||||||
- **`figure`** (same as `image`, plus few optional props: **`caption`**, **`captionPosition`** (left | **center** is default | right), **`captionStyle`**)
|
- **`figure`** (same as `image`, plus few optional props: **`caption`**, **`captionPosition`** (left | **center** is default | right), **`captionStyle`**)
|
||||||
- eg: `{{< figure src="/img/hello.png" alt="Hello Friend" position="center" style="border-radius: 8px;" caption="Hello Friend!" captionPosition="right" captionStyle="color: red;" >}}`
|
- e.g.
|
||||||
- **`code`** (prop required: **`language`**; props optional: **`title`**, **`id`**, **`expand`** (default "△"), **`collapse`** (default "▽"), **`isCollapsed`**)
|
```go
|
||||||
- eg:
|
{{< figure src="/img/hello.png" alt="Hello Friend" position="center" style="border-radius: 8px;" caption="Hello Friend!" captionPosition="right" captionStyle="color: red;" >}}
|
||||||
|
```
|
||||||
|
- **`code`** (props required: **`language`**; props optional: **`title`**, **`id`**, **`expand`** (default "△"), **`collapse`** (default "▽"), **`isCollapsed`**)
|
||||||
|
- e.g.
|
||||||
```go
|
```go
|
||||||
{{< code language="css" title="Really cool snippet" id="1" expand="Show" collapse="Hide" isCollapsed="true" >}}
|
{{< code language="css" title="Really cool snippet" id="1" expand="Show" collapse="Hide" isCollapsed="true" >}}
|
||||||
pre {
|
pre {
|
||||||
@ -72,7 +75,7 @@ A custom syntax highlighting based on PrismJS. All you need to do is to wrap you
|
|||||||
```
|
```
|
||||||
````
|
````
|
||||||
|
|
||||||
**Supported languages**: bash/shell, css, clike, javascript, apacheconf, actionscript, applescript, c, csharp, cpp, coffeescript, ruby, csp, css-extras, diff, django, docker, elixir, elm, markup-templating, erlang, fsharp, flow, git, go, graphql, less, handlebars, haskell, http, java, json, kotlin, latex, markdown, makefile, objectivec, ocaml, perl, php, php-extras, r, sql, processing, scss, python, jsx, typescript, toml, reason, textile, rust, sass, stylus, scheme, pug, swift, yaml, haml, twig, tsx, vim, visual-basic, wasm.
|
**Supported languages**: actionscript, apacheconf, applescript, bash, c, clike, cmake, coffeescript, cpp, csharp, csp, css, css-extras, diff, django, docker, elixir, elm, erlang, flow, fsharp, git, go, graphql, haml, handlebars, haskell, http, java, javascript, json, jsx, kotlin, latex, less, llvm, makefile, markdown, markup, markup-templating, nasm, objectivec, ocaml, perl, php, php-extras, powershell, processing, pug, python, r, reason, ruby, rust, sass, scala, scheme, scss, sql, stylus, swift, textile, toml, tsx, twig, typescript, vim, visual-basic, wasm, yaml.
|
||||||
|
|
||||||
## How to start
|
## How to start
|
||||||
|
|
||||||
@ -81,29 +84,23 @@ You can download the theme manually by going to [https://github.com/panr/hugo-th
|
|||||||
You can also clone it directly to your Hugo folder:
|
You can also clone it directly to your Hugo folder:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/panr/hugo-theme-terminal.git themes/terminal
|
git clone -b webpack https://github.com/panr/hugo-theme-terminal.git themes/terminal
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't want to make any radical changes, it's the best option, because you can get new updates when they are available. You can also include it as a git submodule:
|
If you don't want to make any radical changes, it's the best option, because you can get new updates when they are available. You can also include it as a git submodule:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git submodule add https://github.com/panr/hugo-theme-terminal.git themes/terminal
|
git submodule add -b webpack -f https://github.com/panr/hugo-theme-terminal.git themes/terminal
|
||||||
```
|
```
|
||||||
|
|
||||||
|
⚠️ **The theme needs at least Hugo version 0.74.x**.
|
||||||
|
|
||||||
## How to run your site
|
## How to run your site
|
||||||
|
|
||||||
The theme is using [Hugo Pipes](https://gohugo.io/hugo-pipes/) to handle Javascript and PostCSS files. This setup **requires** following npm packages:
|
If you installed all needed `npm` dependencies, then you can run:
|
||||||
|
|
||||||
```
|
```
|
||||||
@babel/cli @babel/core @babel/preset-env browserslist clipboard cssnano postcss-cli postcss-import postcss-mixins postcss-nested postcss-preset-env postcss-url
|
hugo server -t terminal
|
||||||
```
|
|
||||||
|
|
||||||
Before you start, you have to install them (globally or locally).
|
|
||||||
|
|
||||||
Then:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ hugo server -t terminal
|
|
||||||
```
|
```
|
||||||
|
|
||||||
and go to `localhost:1313` in your browser. From now on all the changes you make will go live, so you don't need to refresh your browser every single time.
|
and go to `localhost:1313` in your browser. From now on all the changes you make will go live, so you don't need to refresh your browser every single time.
|
||||||
@ -138,18 +135,35 @@ paginate = 5
|
|||||||
# center theme with default width
|
# center theme with default width
|
||||||
centerTheme = false
|
centerTheme = false
|
||||||
|
|
||||||
# set a custom favicon (default is a `themeColor` square)
|
# if your resource directory contains an image called `cover.(jpg|png|webp)`,
|
||||||
# favicon = "favicon.ico"
|
# then the file will be used as a cover automatically.
|
||||||
|
# With this option you don't have to put the `cover` param in a front-matter.
|
||||||
|
autoCover = true
|
||||||
|
|
||||||
# set post to show the last updated
|
# set post to show the last updated
|
||||||
# If you use git, you can set `enableGitInfo` to `true` and then post will automatically get the last updated
|
# If you use git, you can set `enableGitInfo` to `true` and then post will automatically get the last updated
|
||||||
showLastUpdated = false
|
showLastUpdated = false
|
||||||
|
|
||||||
|
# set a custom favicon (default is a `themeColor` square)
|
||||||
|
# favicon = "favicon.ico"
|
||||||
|
|
||||||
# Provide a string as a prefix for the last update date. By default, it looks like this: 2020-xx-xx [Updated: 2020-xx-xx] :: Author
|
# Provide a string as a prefix for the last update date. By default, it looks like this: 2020-xx-xx [Updated: 2020-xx-xx] :: Author
|
||||||
# updatedDatePrefix = "Updated"
|
# updatedDatePrefix = "Updated"
|
||||||
|
|
||||||
# set all headings to their default size (depending on browser settings)
|
# set all headings to their default size (depending on browser settings)
|
||||||
# it's set to `true` by default
|
# oneHeadingSize = true # default
|
||||||
# oneHeadingSize = false
|
|
||||||
|
# whether to show a page's estimated reading time
|
||||||
|
# readingTime = false # default
|
||||||
|
|
||||||
|
# whether to show a table of contents
|
||||||
|
# can be overridden in a page's front-matter
|
||||||
|
# Toc = false # default
|
||||||
|
|
||||||
|
# set title for the table of contents
|
||||||
|
# can be overridden in a page's front-matter
|
||||||
|
# TocTitle = "Table of Contents" # default
|
||||||
|
|
||||||
|
|
||||||
[params.twitter]
|
[params.twitter]
|
||||||
# set Twitter handles for Twitter cards
|
# set Twitter handles for Twitter cards
|
||||||
@ -169,6 +183,8 @@ paginate = 5
|
|||||||
menuMore = "Show more"
|
menuMore = "Show more"
|
||||||
readMore = "Read more"
|
readMore = "Read more"
|
||||||
readOtherPosts = "Read other posts"
|
readOtherPosts = "Read other posts"
|
||||||
|
newerPosts = "Newer posts"
|
||||||
|
olderPosts = "Older posts"
|
||||||
missingContentMessage = "Page not found..."
|
missingContentMessage = "Page not found..."
|
||||||
missingBackButtonLabel = "Back to home page"
|
missingBackButtonLabel = "Back to home page"
|
||||||
|
|
||||||
@ -193,7 +209,7 @@ to `config.toml` file in your Hugo root directory and change params fields. In c
|
|||||||
|
|
||||||
## Post archetype
|
## Post archetype
|
||||||
|
|
||||||
See the basic `post` file params supported by the theme — https://github.com/panr/hugo-theme-terminal/blob/master/archetypes/posts.md
|
See the default `post` file params supported by the theme — https://github.com/panr/hugo-theme-terminal/blob/master/archetypes/posts.md
|
||||||
|
|
||||||
## Add-ons
|
## Add-ons
|
||||||
|
|
||||||
@ -203,7 +219,37 @@ See the basic `post` file params supported by the theme — https://github.com/p
|
|||||||
|
|
||||||
## How to (safely) edit the theme <a id="how-to-edit" />
|
## How to (safely) edit the theme <a id="how-to-edit" />
|
||||||
|
|
||||||
To change something in the theme, you have to go to `themes/terminal` and modify the files. You can also copy them (like `assets` folder) from the theme to your root directory and modify the files there (thanks to Hugo's lookup https://gohugo.io/templates/lookup-order). This will protect your changes from overriding when you update the theme.
|
If you have to override only some of the styles, you can do this easily by adding `static/style.css` in your root directory and point things you want to change.
|
||||||
|
|
||||||
|
To change something directly in the theme, you have to go to `themes/terminal` and modify the files.
|
||||||
|
|
||||||
|
First, you need to install Node dependencies. To do so, go to the theme directory (from your Hugo root directory):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd themes/terminal
|
||||||
|
```
|
||||||
|
|
||||||
|
then run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm i yarn
|
||||||
|
yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
After you modified the files you can run webpack in watch mode:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
or rebuild theme
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
To see the changes (remember to restart `hugo server`).
|
||||||
|
|
||||||
## Found a bug? <a id="bug" />
|
## Found a bug? <a id="bug" />
|
||||||
|
|
||||||
@ -230,14 +276,8 @@ Sounds OK? Cool, let's rock! 🤘
|
|||||||
|
|
||||||
I'd be happy to know more about you and what you are doing. If you want to share it, please make a contribution and [add your site to the list](https://github.com/panr/hugo-theme-terminal/blob/master/USERS.md)! 🤗
|
I'd be happy to know more about you and what you are doing. If you want to share it, please make a contribution and [add your site to the list](https://github.com/panr/hugo-theme-terminal/blob/master/USERS.md)! 🤗
|
||||||
|
|
||||||
## Sponsoring
|
|
||||||
|
|
||||||
If you like my work and want to support the development of the project, now you can! Just:
|
|
||||||
|
|
||||||
<a href="https://www.buymeacoffee.com/panr" target="_blank"><img src="https://res.cloudinary.com/panr/image/upload/v1579374705/buymeacoffee_y6yvov.svg" alt="Buy Me A Coffee" ></a>
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2019-2020 Radosław Kozieł ([@panr](https://twitter.com/panr))
|
Copyright © 2019-2022 Radosław Kozieł ([@panr](https://twitter.com/panr))
|
||||||
|
|
||||||
The theme is released under the MIT License. Check the [original theme license](https://github.com/panr/hugo-theme-terminal/blob/master/LICENSE.md) for additional licensing information.
|
The theme is released under the MIT License. Check the [original theme license](https://github.com/panr/hugo-theme-terminal/blob/master/LICENSE.md) for additional licensing information.
|
||||||
|
42
USERS.md
42
USERS.md
@ -22,7 +22,6 @@
|
|||||||
- https://security.jtang.dev **Jonathan Tang** (Student & Software Engineer)
|
- https://security.jtang.dev **Jonathan Tang** (Student & Software Engineer)
|
||||||
- https://andreacaravano.net **Andrea Caravano** (Student)
|
- https://andreacaravano.net **Andrea Caravano** (Student)
|
||||||
- https://dawsonverboven.com/ **Dawson Verboven** (Student & Software Developer)
|
- https://dawsonverboven.com/ **Dawson Verboven** (Student & Software Developer)
|
||||||
- https://www.rockyourcode.com **Sophia Brandt** (tax officer and hobby coder)
|
|
||||||
- https://qbunt.com **Jeremy Bunting** (Software Engineer)
|
- https://qbunt.com **Jeremy Bunting** (Software Engineer)
|
||||||
- https://smeik.org **Smeik** (Embedded Developer)
|
- https://smeik.org **Smeik** (Embedded Developer)
|
||||||
- https://code.willstocks.co.uk **Will Stocks** (Blogger & Developer)
|
- https://code.willstocks.co.uk **Will Stocks** (Blogger & Developer)
|
||||||
@ -30,14 +29,45 @@
|
|||||||
- https://m47r1x.github.io **Neo** (Citizen of Zion)
|
- https://m47r1x.github.io **Neo** (Citizen of Zion)
|
||||||
- https://bgameiro.me/ **Bernardo Gameiro** (Engineer Physicist student)
|
- https://bgameiro.me/ **Bernardo Gameiro** (Engineer Physicist student)
|
||||||
- https://return-to-libc.com/ **elraro** (Cyber Security Specialist)
|
- https://return-to-libc.com/ **elraro** (Cyber Security Specialist)
|
||||||
- https://waterloos.niflheimr.blue/ **niflheimr1011** (Aspiring Software Engineer)
|
- https://pablart.com/ **Pablo Diaz-Gutierrez** (Software Engineer, General Tinkerer)
|
||||||
|
- https://waterloos.niflheimr.blue/ **cindrmon** (Student and Aspiring Software Engineer)
|
||||||
- https://monocle.rpod.club/ **classx** (DevOps Engineer)
|
- https://monocle.rpod.club/ **classx** (DevOps Engineer)
|
||||||
- https://wjdevschool.com/ **Wojciech Bogócki** (Making Things & Teaching / W&J Dev School)
|
- https://wjdevschool.com/ **Wojciech Bogócki** (Making Things & Teaching / W&J Dev School)
|
||||||
- https://waterloos.niflheimr.blue/ **cindrmon** (Aspiring Software Engineer and Student)
|
- https://dongzhi.me **Joe** (Software Developer)
|
||||||
|
- https://isaes.com.tr/ **Isa Es** (Software Engineer)
|
||||||
|
- https://conight.com **Conight Wang** (Software Engineer)
|
||||||
|
- https://blog.m5e.de/ **Christoph Miksche** (Software Developer)
|
||||||
|
- https://mpostument.com/ **Maksym Postument** (DevOps Engineer)
|
||||||
|
- https://mathiejosh.xyz **Josh Mathie** (Electrical Engineering Technology Student/Sales and Engineering Tech)
|
||||||
|
- https://yuji.ne.jp/ **YUJI** (Student & Software Developer)
|
||||||
|
- https://blog.puvvadi.me **KD Puvvadi** (Software Dev & Cloud Orchestrator)
|
||||||
|
- https://hidden.land/ **Louisload** (Game Developer & Musician)
|
||||||
|
- https://linuxbase.nl **Michael Trip** (DevOps Engineer)
|
||||||
|
- https://markopolo123.github.io **Markopolo** (DevOps Engineer)
|
||||||
|
- https://openfoxblog.leven.dev/ **Damon Leven** (Student & Software Developer)
|
||||||
|
- https://blog.sethforprivacy.com **Seth For Privacy** (Security, privacy, and cryptocurrency writer, podcaster)
|
||||||
|
- https://thesprawl.city **crish** (Software and stuff)
|
||||||
|
- https://justinnuwin.com **Justin Nguyen** (Software & Hardware Developer)
|
||||||
|
- https://blog.woosal.com/ **Vusal Ismayilov** (Computer Engineering Student)
|
||||||
|
- https://itsembedded.com/ **Norbert Kremeris** (digital logic design and verification engineer)
|
||||||
|
- https://nereuxofficial.github.io **Nereuxofficial** (Software Developer & Student)
|
||||||
|
- https://biplav.xyz **Biplav's Blog** (Student)
|
||||||
|
- https://santiago.wtf **Nicholas Santiago** (DevOps Engineer)
|
||||||
|
- https://2200g.github.io/ **2200g** (Blogger/Student)
|
||||||
|
- https://cristiioan.me **Cristian Margine** (Student)
|
||||||
|
- https://they.mint.lgbt **Joey Aliaga** (Software Developer & Student)
|
||||||
|
- https://tatewilhelm.me **Tate Wilhelm** (Student, Programmer & Tinkerer)
|
||||||
|
- https://mikefoden.com **Mike Foden** (Software Developer)
|
||||||
|
- https://undemalum.github.io/portfolio/ **Mateusz Konat** (Student)
|
||||||
|
- https://ku0hn.radio **Ben Kuhn** (Ham Radio Operator, InfoSec Engineer, Tinkerer)
|
||||||
|
- https://bg117.xyz/projects **bg117** (Student and Hobby Programmer)
|
||||||
|
- https://www.grumpymetalguy.com **GrumpyMetalGuy** (General Grumper and Developer)
|
||||||
|
- https://blog.jontes.page **Jonte** (general tech geek)
|
||||||
|
- https://nazdarthegame.com/ **Michal Skoula** (Software Developer)
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
TEMPLATE:
|
TEMPLATE:
|
||||||
|
|
||||||
- https://radoslawkoziel.pl **Radek Kozieł** (Software Designer and Developer)
|
- https://radoslawkoziel.pl **Radek Kozieł** (Software Designer and Developer)
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
+++
|
+++
|
||||||
title = ""
|
title = "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||||
date = ""
|
date = "{{ .Date }}"
|
||||||
author = ""
|
author = ""
|
||||||
authorTwitter = "" #do not include @
|
authorTwitter = "" #do not include @
|
||||||
cover = ""
|
cover = ""
|
||||||
@ -8,4 +8,6 @@ tags = ["", ""]
|
|||||||
keywords = ["", ""]
|
keywords = ["", ""]
|
||||||
description = ""
|
description = ""
|
||||||
showFullContent = false
|
showFullContent = false
|
||||||
|
readingTime = false
|
||||||
|
hideComments = false
|
||||||
+++
|
+++
|
||||||
|
@ -15,12 +15,19 @@ a.button {
|
|||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-radius: 8px;
|
border-radius: 0;
|
||||||
border: 1px solid transparent;
|
border: 1px solid var(--accent);
|
||||||
|
background: var(--accent);
|
||||||
|
font: inherit;
|
||||||
|
font-weight: bold;
|
||||||
appearance: none;
|
appearance: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: color-mod(var(--accent) a(90%));
|
||||||
|
}
|
||||||
|
|
||||||
/* variants */
|
/* variants */
|
||||||
|
|
||||||
&.outline {
|
&.outline {
|
||||||
@ -34,20 +41,11 @@ a.button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.primary {
|
|
||||||
box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
box-shadow: 0 2px 6px rgba(50, 50, 93, .21), 0 1px 3px rgba(0, 0, 0, .08);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.link {
|
&.link {
|
||||||
background: none;
|
background: none;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* sizes */
|
/* sizes */
|
||||||
|
|
||||||
&.small {
|
&.small {
|
||||||
@ -64,6 +62,8 @@ a.read-more,
|
|||||||
a.read-more:hover,
|
a.read-more:hover,
|
||||||
a.read-more:active {
|
a.read-more:active {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
border: none;
|
||||||
|
color: var(--accent);
|
||||||
background: none;
|
background: none;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
|
font-display: swap;
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: url("../fonts/FiraCode-Regular.woff") format("woff");
|
src: url("../fonts/FiraCode-Regular.woff") format("woff");
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
|
font-display: swap;
|
||||||
font-family: 'Fira Code';
|
font-family: 'Fira Code';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
src: url("../fonts/FiraCode-Bold.woff") format("woff");
|
src: url("../fonts/FiraCode-Bold.woff") format("woff");
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
30
assets/css/form.css
Normal file
30
assets/css/form.css
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
input, textarea, select {
|
||||||
|
background: transparent;
|
||||||
|
color: var(--accent);
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 10px;
|
||||||
|
font: inherit;
|
||||||
|
appearance: none;
|
||||||
|
|
||||||
|
&:focus, :active {
|
||||||
|
border-color: var(--color);
|
||||||
|
outline: 1px solid var(--color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
background: var(--background);
|
||||||
|
|
||||||
|
option {
|
||||||
|
background: var(--background);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::placeholder {
|
||||||
|
color: color-mod(var(--accent) a(50%));
|
||||||
|
}
|
6
assets/css/gist.css
Normal file
6
assets/css/gist.css
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
body .gist .blob-num /* line numbers */,
|
||||||
|
body .gist .blob-code-inner
|
||||||
|
{
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
@ -47,7 +47,7 @@
|
|||||||
.menu {
|
.menu {
|
||||||
--shadow-color: color-mod(var(--background) a(80%));
|
--shadow-color: color-mod(var(--background) a(80%));
|
||||||
--shadow: 0 10px var(--shadow-color), -10px 10px var(--shadow-color), 10px 10px var(--shadow-color);
|
--shadow: 0 10px var(--shadow-color), -10px 10px var(--shadow-color), 10px 10px var(--shadow-color);
|
||||||
margin: 20px 0;
|
margin: 20px 1px;
|
||||||
|
|
||||||
@media (--phone) {
|
@media (--phone) {
|
||||||
@mixin menu;
|
@mixin menu;
|
||||||
|
@ -19,7 +19,7 @@ body {
|
|||||||
color: var(--color);
|
color: var(--color);
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
font-feature-settings: "liga", "tnum", "case", "calt", "zero", "ss01", "locl";
|
font-feature-settings: "liga", "tnum", "zero", "ss01", "locl";
|
||||||
font-variant-ligatures: contextual;
|
font-variant-ligatures: contextual;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
-webkit-text-size-adjust: 100%;
|
-webkit-text-size-adjust: 100%;
|
||||||
@ -128,7 +128,7 @@ figure {
|
|||||||
}
|
}
|
||||||
|
|
||||||
code, kbd {
|
code, kbd {
|
||||||
font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;
|
font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;
|
||||||
font-feature-settings: normal;
|
font-feature-settings: normal;
|
||||||
background: color-mod(var(--accent) a(20%));
|
background: color-mod(var(--accent) a(20%));
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
@ -147,7 +147,7 @@ pre {
|
|||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
padding: 20px 10px;
|
padding: 20px 10px;
|
||||||
margin: 40px 0;
|
margin: 40px 0;
|
||||||
font-size: .95rem;
|
font-size: .95rem !important;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
border-top: 1px solid rgba(255, 255, 255, .1);
|
border-top: 1px solid rgba(255, 255, 255, .1);
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, .1);
|
border-bottom: 1px solid rgba(255, 255, 255, .1);
|
||||||
@ -228,7 +228,7 @@ blockquote {
|
|||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
table-layout: fixed;
|
table-layout: auto;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 40px 0;
|
margin: 40px 0;
|
||||||
@ -247,7 +247,7 @@ th {
|
|||||||
|
|
||||||
ul,
|
ul,
|
||||||
ol {
|
ol {
|
||||||
margin-left: 30px;
|
margin-left: 22px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
@ -275,10 +275,18 @@ ol {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ol ol {
|
ol {
|
||||||
list-style-type: lower-alpha;
|
margin-left: 38px;
|
||||||
|
|
||||||
|
li {
|
||||||
|
counter-increment: li;
|
||||||
|
}
|
||||||
|
|
||||||
|
li:before {
|
||||||
|
content: counters(li, ".") " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mark {
|
mark {
|
||||||
@ -332,3 +340,7 @@ hr {
|
|||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
@ -1,19 +1,17 @@
|
|||||||
/* PrismJS 1.15.0
|
/* PrismJS 1.24.1
|
||||||
https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+c+csharp+bash+cpp+coffeescript+ruby+csp+css-extras+diff+django+docker+elixir+elm+markup-templating+erlang+fsharp+flow+git+go+graphql+less+handlebars+haskell+http+java+json+kotlin+latex+markdown+makefile+objectivec+ocaml+perl+php+php-extras+sql+processing+scss+python+jsx+typescript+reason+textile+rust+sass+stylus+scheme+pug+swift+yaml+haml+toml+twig+tsx+vim+visual-basic+wasm&plugins=line-numbers+toolbar+jsonp-highlight+command-line+copy-to-clipboard */
|
https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+bash+c+csharp+cpp+cmake+coffeescript+csp+css-extras+diff+django+docker+elixir+elm+erlang+fsharp+flow+git+go+graphql+haml+handlebars+haskell+http+java+json+kotlin+latex+less+llvm+makefile+markdown+markup-templating+nasm+objectivec+ocaml+perl+php+php-extras+powershell+processing+pug+python+r+jsx+tsx+reason+ruby+rust+sass+scss+scala+scheme+sql+stylus+swift+textile+toml+twig+typescript+vim+visual-basic+wasm+yaml&plugins=line-highlight+line-numbers+jsonp-highlight+highlight-keywords+command-line+toolbar+copy-to-clipboard */
|
||||||
/**
|
/**
|
||||||
* prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
|
* prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
|
||||||
* Based on https://github.com/chriskempson/tomorrow-theme
|
* Based on https://github.com/chriskempson/tomorrow-theme
|
||||||
* @author Rose Pritchard
|
* @author Rose Pritchard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
:root {
|
|
||||||
--code-margin: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code[class*="language-"],
|
code[class*="language-"],
|
||||||
pre[class*="language-"] {
|
pre[class*="language-"] {
|
||||||
|
color: #ccc;
|
||||||
background: none;
|
background: none;
|
||||||
font-family: inherit, monospace;
|
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||||
|
font-size: 1em;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
word-spacing: normal;
|
word-spacing: normal;
|
||||||
@ -21,30 +19,94 @@ pre[class*="language-"] {
|
|||||||
word-wrap: normal;
|
word-wrap: normal;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
|
||||||
tab-size: 2;
|
-moz-tab-size: 4;
|
||||||
|
-o-tab-size: 4;
|
||||||
|
tab-size: 4;
|
||||||
|
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
hyphens: none;
|
hyphens: none;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Code blocks */
|
/* Code blocks */
|
||||||
pre[class*="language-"] {
|
pre[class*="language-"] {
|
||||||
margin: 0;
|
padding: 1em;
|
||||||
padding: 0;
|
margin: .5em 0;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
:not(pre) > code[class*="language-"],
|
:not(pre) > code[class*="language-"],
|
||||||
pre[class*="language-"] {
|
pre[class*="language-"] {
|
||||||
border-radius: 0;
|
background: #2d2d2d;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inline code */
|
/* Inline code */
|
||||||
:not(pre) > code[class*="language-"] {
|
:not(pre) > code[class*="language-"] {
|
||||||
padding: .1em;
|
padding: .1em;
|
||||||
border-radius: 0;
|
border-radius: .3em;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.token.comment,
|
||||||
|
.token.block-comment,
|
||||||
|
.token.prolog,
|
||||||
|
.token.doctype,
|
||||||
|
.token.cdata {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.punctuation {
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.tag,
|
||||||
|
.token.attr-name,
|
||||||
|
.token.namespace,
|
||||||
|
.token.deleted {
|
||||||
|
color: #e2777a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.function-name {
|
||||||
|
color: #6196cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.boolean,
|
||||||
|
.token.number,
|
||||||
|
.token.function {
|
||||||
|
color: #f08d49;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.property,
|
||||||
|
.token.class-name,
|
||||||
|
.token.constant,
|
||||||
|
.token.symbol {
|
||||||
|
color: #f8c555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.selector,
|
||||||
|
.token.important,
|
||||||
|
.token.atrule,
|
||||||
|
.token.keyword,
|
||||||
|
.token.builtin {
|
||||||
|
color: #cc99cd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.string,
|
||||||
|
.token.char,
|
||||||
|
.token.attr-value,
|
||||||
|
.token.regex,
|
||||||
|
.token.variable {
|
||||||
|
color: #7ec699;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token.operator,
|
||||||
|
.token.entity,
|
||||||
|
.token.url {
|
||||||
|
color: #67cdcc;
|
||||||
|
}
|
||||||
|
|
||||||
.token.important,
|
.token.important,
|
||||||
.token.bold {
|
.token.bold {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -57,6 +119,81 @@ pre[class*="language-"] {
|
|||||||
cursor: help;
|
cursor: help;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.token.inserted {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[data-line] {
|
||||||
|
position: relative;
|
||||||
|
padding: 1em 0 1em 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-highlight {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: inherit 0;
|
||||||
|
margin-top: 1em; /* Same as .prism’s padding-top */
|
||||||
|
|
||||||
|
background: hsla(24, 20%, 50%,.08);
|
||||||
|
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
|
||||||
|
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
line-height: inherit;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
.line-highlight {
|
||||||
|
/*
|
||||||
|
* This will prevent browsers from replacing the background color with white.
|
||||||
|
* It's necessary because the element is layered on top of the displayed code.
|
||||||
|
*/
|
||||||
|
-webkit-print-color-adjust: exact;
|
||||||
|
color-adjust: exact;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-highlight:before,
|
||||||
|
.line-highlight[data-end]:after {
|
||||||
|
content: attr(data-start);
|
||||||
|
position: absolute;
|
||||||
|
top: .4em;
|
||||||
|
left: .6em;
|
||||||
|
min-width: 1em;
|
||||||
|
padding: 0 .5em;
|
||||||
|
background-color: hsla(24, 20%, 50%,.4);
|
||||||
|
color: hsl(24, 20%, 95%);
|
||||||
|
font: bold 65%/1.5 sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: .3em;
|
||||||
|
border-radius: 999px;
|
||||||
|
text-shadow: none;
|
||||||
|
box-shadow: 0 1px white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-highlight[data-end]:after {
|
||||||
|
content: attr(data-end);
|
||||||
|
top: auto;
|
||||||
|
bottom: .4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-numbers .line-highlight:before,
|
||||||
|
.line-numbers .line-highlight:after {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre[id].linkable-line-numbers span.line-numbers-rows {
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
pre[id].linkable-line-numbers span.line-numbers-rows > span:before {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {
|
||||||
|
background-color: rgba(128, 128, 128, .2);
|
||||||
|
}
|
||||||
|
|
||||||
pre[class*="language-"].line-numbers {
|
pre[class*="language-"].line-numbers {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: 3.8em;
|
padding-left: 3.8em;
|
||||||
@ -76,103 +213,27 @@ pre[class*="language-"].line-numbers > code {
|
|||||||
left: -3.8em;
|
left: -3.8em;
|
||||||
width: 3em; /* works for line-numbers below 1000 lines */
|
width: 3em; /* works for line-numbers below 1000 lines */
|
||||||
letter-spacing: -1px;
|
letter-spacing: -1px;
|
||||||
border-right: 1px solid color-mod(var(--accent) blend(#999 90%) a(20%));
|
border-right: 1px solid #999;
|
||||||
|
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.line-numbers-rows > span {
|
.line-numbers-rows > span {
|
||||||
pointer-events: none;
|
|
||||||
display: block;
|
|
||||||
counter-increment: linenumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
.line-numbers-rows > span:before {
|
|
||||||
content: counter(linenumber);
|
|
||||||
color: color-mod(var(--accent) blend(#999 90%) a(40%));
|
|
||||||
display: block;
|
|
||||||
padding-right: 0.8em;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.code-toolbar {
|
|
||||||
position: relative;
|
|
||||||
margin: var(--code-margin) 0;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid rgba(255, 255, 255, .1);
|
|
||||||
|
|
||||||
+ .code-toolbar,
|
|
||||||
+ .highlight,
|
|
||||||
+ .highlight .code-toolbar {
|
|
||||||
border-top: 0;
|
|
||||||
margin-top: calc(-1 * var(--code-margin));
|
|
||||||
}
|
|
||||||
|
|
||||||
pre, code {
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
display: block;
|
display: block;
|
||||||
color: inherit;
|
counter-increment: linenumber;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.highlight + .highlight .code-toolbar {
|
.line-numbers-rows > span:before {
|
||||||
border-top: 0;
|
content: counter(linenumber);
|
||||||
margin-top: calc(-1 * var(--code-margin));
|
color: #999;
|
||||||
}
|
display: block;
|
||||||
|
padding-right: 0.8em;
|
||||||
div.code-toolbar > .toolbar {
|
text-align: right;
|
||||||
position: absolute;
|
}
|
||||||
top: 10px;
|
|
||||||
right: 10px;
|
|
||||||
transition: opacity 0.3s ease-in-out;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar:hover > .toolbar {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar > .toolbar .toolbar-item {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar > .toolbar a {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar > .toolbar button {
|
|
||||||
background: none;
|
|
||||||
border: 0;
|
|
||||||
color: inherit;
|
|
||||||
font: inherit;
|
|
||||||
line-height: normal;
|
|
||||||
overflow: visible;
|
|
||||||
padding: 0;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar > .toolbar a,
|
|
||||||
div.code-toolbar > .toolbar button,
|
|
||||||
div.code-toolbar > .toolbar span {
|
|
||||||
color: #bbb;
|
|
||||||
font-size: .8em;
|
|
||||||
padding: 10px;
|
|
||||||
background: #f5f2f0;
|
|
||||||
background: rgba(224, 224, 224, 0.2);
|
|
||||||
box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-toolbar > .toolbar a:hover,
|
|
||||||
div.code-toolbar > .toolbar a:focus,
|
|
||||||
div.code-toolbar > .toolbar button:hover,
|
|
||||||
div.code-toolbar > .toolbar button:focus,
|
|
||||||
div.code-toolbar > .toolbar span:hover,
|
|
||||||
div.code-toolbar > .toolbar span:focus {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.command-line-prompt {
|
.command-line-prompt {
|
||||||
border-right: 1px solid #999;
|
border-right: 1px solid #999;
|
||||||
@ -182,10 +243,15 @@ div.code-toolbar > .toolbar span:focus {
|
|||||||
letter-spacing: -1px;
|
letter-spacing: -1px;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.command-line-prompt > span:before {
|
.command-line-prompt > span:before {
|
||||||
|
color: #999;
|
||||||
content: ' ';
|
content: ' ';
|
||||||
display: block;
|
display: block;
|
||||||
padding-right: 0.8em;
|
padding-right: 0.8em;
|
||||||
@ -202,3 +268,69 @@ div.code-toolbar > .toolbar span:focus {
|
|||||||
.command-line-prompt > span[data-prompt]:before {
|
.command-line-prompt > span[data-prompt]:before {
|
||||||
content: attr(data-prompt);
|
content: attr(data-prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.code-toolbar {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar {
|
||||||
|
position: absolute;
|
||||||
|
top: .3em;
|
||||||
|
right: .2em;
|
||||||
|
transition: opacity 0.3s ease-in-out;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar:hover > .toolbar {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Separate line b/c rules are thrown out if selector is invalid.
|
||||||
|
IE11 and old Edge versions don't support :focus-within. */
|
||||||
|
div.code-toolbar:focus-within > .toolbar {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > a {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > button {
|
||||||
|
background: none;
|
||||||
|
border: 0;
|
||||||
|
color: inherit;
|
||||||
|
font: inherit;
|
||||||
|
line-height: normal;
|
||||||
|
overflow: visible;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: none; /* for button */
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > a,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > button,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > span {
|
||||||
|
color: #bbb;
|
||||||
|
font-size: .8em;
|
||||||
|
padding: 0 .5em;
|
||||||
|
background: #f5f2f0;
|
||||||
|
background: rgba(224, 224, 224, 0.2);
|
||||||
|
box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
|
||||||
|
border-radius: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > a:hover,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > a:focus,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > button:hover,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > button:focus,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > span:hover,
|
||||||
|
div.code-toolbar > .toolbar > .toolbar-item > span:focus {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
@import 'font.css';
|
@import 'font.css';
|
||||||
@import 'buttons.css';
|
@import 'buttons.css';
|
||||||
|
@import 'form.css';
|
||||||
|
|
||||||
@import 'header.css';
|
@import 'header.css';
|
||||||
@import 'logo.css';
|
@import 'logo.css';
|
||||||
@ -14,3 +15,4 @@
|
|||||||
@import 'syntax.css';
|
@import 'syntax.css';
|
||||||
@import 'code.css';
|
@import 'code.css';
|
||||||
@import 'terms.css';
|
@import 'terms.css';
|
||||||
|
@import 'gist.css';
|
||||||
|
@ -14,8 +14,10 @@ code.language-scss,
|
|||||||
.token.statement,
|
.token.statement,
|
||||||
.token.regex,
|
.token.regex,
|
||||||
.token.atrule,
|
.token.atrule,
|
||||||
.token.number {
|
.token.number,
|
||||||
color: var(--accent);
|
.token.inserted,
|
||||||
|
.token.important {
|
||||||
|
color: var(--accent) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token.tag-id,
|
.token.tag-id,
|
||||||
@ -24,16 +26,25 @@ code.language-scss,
|
|||||||
.token.unit,
|
.token.unit,
|
||||||
.token.placeholder,
|
.token.placeholder,
|
||||||
.token.variable,
|
.token.variable,
|
||||||
.token.attr-name {
|
.token.tag,
|
||||||
color: color-mod(var(--accent) a(70%));
|
.token.attr-name,
|
||||||
|
.token.namespace,
|
||||||
|
.token.deleted,
|
||||||
|
.token.property,
|
||||||
|
.token.class-name,
|
||||||
|
.token.constant,
|
||||||
|
.token.symbol {
|
||||||
|
color: color-mod(var(--accent) a(70%)) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token.property,
|
.token.property,
|
||||||
.token.function,
|
.token.function,
|
||||||
|
.token.function-name,
|
||||||
|
.token.deleted,
|
||||||
code.language-javascript,
|
code.language-javascript,
|
||||||
code.language-html,
|
code.language-html,
|
||||||
.command-line-prompt > span:before {
|
.command-line-prompt > span:before {
|
||||||
color: color-mod(var(--accent) blend(#999 90%));
|
color: color-mod(var(--accent) blend(#999 90%)) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token.selector,
|
.token.selector,
|
||||||
@ -46,17 +57,23 @@ code.language-html,
|
|||||||
.token.prolog,
|
.token.prolog,
|
||||||
.token.doctype,
|
.token.doctype,
|
||||||
.token.cdata {
|
.token.cdata {
|
||||||
color: rgba(255, 255, 255, .3);
|
color: rgba(255, 255, 255, .3) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token.namespace {
|
.token.namespace {
|
||||||
opacity: .7;
|
opacity: .7 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre[data-line] {
|
pre[data-line] {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre[class*="language-"] {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.line-highlight {
|
.line-highlight {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
@ -97,3 +114,43 @@ pre[data-line] {
|
|||||||
.line-numbers .line-highlight:after {
|
.line-numbers .line-highlight:after {
|
||||||
content: none;
|
content: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--code-margin: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-toolbar {
|
||||||
|
position: relative;
|
||||||
|
margin: var(--code-margin) 0;
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px solid rgba(255, 255, 255, .1);
|
||||||
|
|
||||||
|
+ .code-toolbar,
|
||||||
|
+ .highlight,
|
||||||
|
+ .highlight .code-toolbar {
|
||||||
|
border-top: 0;
|
||||||
|
margin-top: calc(-1 * var(--code-margin));
|
||||||
|
}
|
||||||
|
|
||||||
|
pre, code {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
display: block;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .toolbar {
|
||||||
|
button {
|
||||||
|
font-size: .8em !important;
|
||||||
|
background: hsla(0,0%,87.8%,.2) !important;
|
||||||
|
color: #bbb !important;
|
||||||
|
box-shadow: 0 2px 0 0 rgba(0,0,0,.2) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
margin: 6px !important;
|
||||||
|
padding: 10px !important;
|
||||||
|
user-select:none
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -9,5 +9,5 @@
|
|||||||
--tabletWidth: (max-width: 900px);
|
--tabletWidth: (max-width: 900px);
|
||||||
}
|
}
|
||||||
|
|
||||||
@custom-media --phone (width < 684px);
|
@custom-media --phone (max-width: 684px);
|
||||||
@custom-media --tablet (width < 900px);
|
@custom-media --tablet (max-width: 900px);
|
||||||
|
BIN
assets/fonts/FiraCode-Bold.woff
Normal file
BIN
assets/fonts/FiraCode-Bold.woff
Normal file
Binary file not shown.
BIN
assets/fonts/FiraCode-Regular.woff
Normal file
BIN
assets/fonts/FiraCode-Regular.woff
Normal file
Binary file not shown.
@ -1,18 +1,23 @@
|
|||||||
const mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");
|
const mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");
|
||||||
const isMobile = () => window.matchMedia(mobileQuery).matches;
|
const isMobile = () => window.matchMedia(mobileQuery).matches;
|
||||||
|
|
||||||
if(!isMobile()) {
|
const languageSelector = document.querySelector(".language-selector-current");
|
||||||
languageSelector = document.querySelector(".language-selector-current");
|
const moreLanguagesContainer = document.querySelector(".language-selector__more");
|
||||||
moreLanguagesContainer = document.querySelector(".language-selector__more");
|
|
||||||
|
|
||||||
document.body.addEventListener("click", () => {
|
document.body.addEventListener("click", () => {
|
||||||
if (moreLanguagesContainer && !moreLanguagesContainer.classList.contains("hidden")) {
|
if (
|
||||||
moreLanguagesContainer.classList.add("hidden");
|
!isMobile() &&
|
||||||
|
moreLanguagesContainer &&
|
||||||
|
!moreLanguagesContainer.classList.contains("hidden")
|
||||||
|
) {
|
||||||
|
moreLanguagesContainer.classList.add("hidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
languageSelector &&
|
||||||
|
languageSelector.addEventListener("click", (e) => {
|
||||||
|
if (!isMobile()) {
|
||||||
|
e.stopPropagation();
|
||||||
|
moreLanguagesContainer.classList.toggle("hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
languageSelector && languageSelector.addEventListener("click", e => {
|
|
||||||
e.stopPropagation();
|
|
||||||
moreLanguagesContainer.classList.toggle("hidden");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
// Add your script here
|
|
File diff suppressed because one or more lines are too long
@ -4,7 +4,7 @@ theme = "hugo-theme-terminal"
|
|||||||
paginate = 5
|
paginate = 5
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
contentTypeName = "post"
|
contentTypeName = "posts"
|
||||||
themeColor = "orange"
|
themeColor = "orange"
|
||||||
showMenuItems = 2
|
showMenuItems = 2
|
||||||
fullWidthTheme = false
|
fullWidthTheme = false
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
{{ partial "head.html" . }}
|
{{ partial "head.html" . }}
|
||||||
</head>
|
</head>
|
||||||
<body class="{{- ( or .Params.color $.Site.Params.ThemeColor ) -}}">
|
<body class="{{- ( or .Params.color $.Site.Params.ThemeColor ) -}}">
|
||||||
{{ $container := cond $.Site.Params.FullWidthTheme "container full" (cond $.Site.Params.CenterTheme "container center" "container") }}
|
{{ $container := cond ($.Site.Params.FullWidthTheme | default false) "container full" (cond ($.Site.Params.CenterTheme | default false) "container center" "container") }}
|
||||||
|
|
||||||
<div class="{{- $container -}}{{- cond ($.Site.Params.oneHeadingSize | default true) " headings--one-size" "" }}">
|
<div class="{{- $container -}}{{- cond ($.Site.Params.oneHeadingSize | default true) " headings--one-size" "" }}">
|
||||||
|
|
||||||
|
@ -15,14 +15,16 @@
|
|||||||
{{ $paginator := .Paginate (where $PageContext.RegularPages "Type" $contentTypeName) }}
|
{{ $paginator := .Paginate (where $PageContext.RegularPages "Type" $contentTypeName) }}
|
||||||
|
|
||||||
{{ range $paginator.Pages }}
|
{{ range $paginator.Pages }}
|
||||||
<div class="post on-list">
|
<article class="post on-list">
|
||||||
<h1 class="post-title">
|
<h1 class="post-title">
|
||||||
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
|
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="post-meta">
|
<div class="post-meta">
|
||||||
<span class="post-date">
|
{{- with .Date }}
|
||||||
{{ .Date.Format "2006-01-02" }}
|
<time class="post-date">
|
||||||
</span>
|
{{ .Format "2006-01-02" }}
|
||||||
|
</time>
|
||||||
|
{{- end }}
|
||||||
{{ with .Params.Author }}
|
{{ with .Params.Author }}
|
||||||
<span class="post-author">:: {{ . }}</span>
|
<span class="post-author">:: {{ . }}</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@ -38,19 +40,17 @@
|
|||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if .Params.Cover }}
|
|
||||||
<img src="{{ .Params.Cover | absURL }}" class="post-cover" alt="{{ .Title | plainify | default " " }}" />
|
{{ partial "cover.html" . }}
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<div class="post-content">
|
<div class="post-content">
|
||||||
{{ if .Params.showFullContent }}
|
{{ if .Params.showFullContent }}
|
||||||
{{ .Content | markdownify }}
|
{{ .Content }}
|
||||||
{{ else if .Description }}
|
{{ else if .Description }}
|
||||||
{{ .Description | markdownify }}
|
{{ .Description | markdownify }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ if .Truncated }}
|
{{ .Summary | markdownify }}
|
||||||
{{ .Summary | markdownify }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -60,7 +60,7 @@
|
|||||||
href="{{.RelPermalink}}">{{ $.Site.Params.ReadMore }} →</a>
|
href="{{.RelPermalink}}">{{ $.Site.Params.ReadMore }} →</a>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ partial "pagination.html" . }}
|
{{ partial "pagination.html" . }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -5,15 +5,17 @@
|
|||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<div class="posts">
|
<div class="posts">
|
||||||
{{ range .Pages }}
|
{{ range .Paginator.Pages }}
|
||||||
<div class="post on-list">
|
<article class="post on-list">
|
||||||
<h1 class="post-title">
|
<h1 class="post-title">
|
||||||
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
|
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="post-meta">
|
<div class="post-meta">
|
||||||
<span class="post-date">
|
{{- with .Date }}
|
||||||
{{ .Date.Format "2006-01-02" }}
|
<time class="post-date">
|
||||||
</span>
|
{{ .Format "2006-01-02" }}
|
||||||
|
</time>
|
||||||
|
{{- end }}
|
||||||
{{ with .Params.Author }}
|
{{ with .Params.Author }}
|
||||||
<span class="post-author">:: {{ . }}</span>
|
<span class="post-author">:: {{ . }}</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@ -29,19 +31,16 @@
|
|||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if .Params.Cover }}
|
{{ partial "cover.html" . }}
|
||||||
<img src="{{ .Params.Cover | absURL }}" class="post-cover" alt="{{ .Title | plainify | default " " }}" />
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
|
|
||||||
<div class="post-content">
|
<div class="post-content">
|
||||||
{{ if .Params.showFullContent }}
|
{{ if .Params.showFullContent }}
|
||||||
{{ .Content | markdownify }}
|
{{ .Content }}
|
||||||
{{ else if .Description }}
|
{{ else if .Description }}
|
||||||
{{ .Description | markdownify }}
|
{{ .Description | markdownify }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ if .Truncated }}
|
{{ .Summary }}
|
||||||
{{ .Summary | markdownify }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -51,7 +50,7 @@
|
|||||||
href="{{.RelPermalink}}">{{ $.Site.Params.ReadMore }} →</a>
|
href="{{.RelPermalink}}">{{ $.Site.Params.ReadMore }} →</a>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ partial "pagination.html" . }}
|
{{ partial "pagination.html" . }}
|
||||||
</div>
|
</div>
|
||||||
|
40
layouts/_default/rss.xml
Normal file
40
layouts/_default/rss.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{{- $pctx := . -}}
|
||||||
|
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
|
||||||
|
{{- $pages := slice -}}
|
||||||
|
{{- if or $.IsHome $.IsSection -}}
|
||||||
|
{{- $pages = $pctx.RegularPages -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $pages = $pctx.Pages -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $limit := .Site.Config.Services.RSS.Limit -}}
|
||||||
|
{{- if ge $limit 1 -}}
|
||||||
|
{{- $pages = $pages | first $limit -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
|
||||||
|
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
|
||||||
|
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
|
||||||
|
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
|
||||||
|
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
|
||||||
|
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||||
|
{{- with .OutputFormats.Get "RSS" -}}
|
||||||
|
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||||
|
{{- end -}}
|
||||||
|
{{ range $pages }}
|
||||||
|
<item>
|
||||||
|
<title>{{ .Title }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||||
|
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
|
||||||
|
<guid>{{ .Permalink }}</guid>
|
||||||
|
<description>{{ .Summary | html }}</description>
|
||||||
|
<content>{{ .Content | html }}</content>
|
||||||
|
</item>
|
||||||
|
{{ end }}
|
||||||
|
</channel>
|
||||||
|
</rss>
|
@ -1,15 +1,21 @@
|
|||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<div class="post">
|
<article class="post">
|
||||||
<h1 class="post-title">
|
<h1 class="post-title">
|
||||||
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></h1>
|
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></h1>
|
||||||
<div class="post-meta">
|
<div class="post-meta">
|
||||||
{{ if .Params.Date }}
|
{{ if .Params.Date }}
|
||||||
<span class="post-date">
|
<span class="post-date">
|
||||||
{{ .Date.Format "2006-01-02" }} {{ if $.Site.Params.showLastUpdated }}[{{or $.Site.Params.updatedDatePrefix "Updated"}}: {{ .Lastmod.Format "2006-01-02" }}]{{ end }}
|
<time>{{ .Date.Format "2006-01-02" }}</time>
|
||||||
|
{{ if $.Site.Params.showLastUpdated }}
|
||||||
|
[{{or $.Site.Params.updatedDatePrefix "Updated"}}: <time>{{ .Lastmod.Format "2006-01-02" }}</time>]
|
||||||
|
{{ end }}
|
||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ with .Params.Author }}
|
{{ with .Params.Author }}
|
||||||
<span class="post-author">:: {{ . }}</span>
|
<span class="post-author">:: {{ . }}</span>
|
||||||
|
{{ end }}
|
||||||
|
{{ if and (.Param "readingTime") (eq (.Param "readingTime") true) }}
|
||||||
|
<span class="post-reading-time">:: {{ .ReadingTime }} min read ({{ .WordCount }} words)</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -20,21 +26,12 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
{{ partial "cover.html" . }}
|
||||||
|
|
||||||
{{ if .Params.Cover }}
|
{{ if (.Params.Toc | default .Site.Params.Toc) }}
|
||||||
<img src="{{ .Params.Cover | absURL }}" class="post-cover" alt="{{ .Title | plainify | default " " }}" />
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ if .Params.Toc }}
|
|
||||||
<div class="table-of-contents">
|
<div class="table-of-contents">
|
||||||
<h2>
|
<h2>
|
||||||
{{ if .Params.TocTitle }}
|
{{ (.Params.TocTitle | default .Site.Params.TocTitle) | default "Table of Contents" }}
|
||||||
{{ .Params.TocTitle }}
|
|
||||||
{{ else if $.Site.Params.TocTitle }}
|
|
||||||
{{ $.Site.Params.TocTitle }}
|
|
||||||
{{ else }}
|
|
||||||
Table of Contents
|
|
||||||
{{ end }}
|
|
||||||
</h2>
|
</h2>
|
||||||
{{ .TableOfContents }}
|
{{ .TableOfContents }}
|
||||||
</div>
|
</div>
|
||||||
@ -43,7 +40,7 @@
|
|||||||
<div class="post-content">
|
<div class="post-content">
|
||||||
{{- with .Content -}}
|
{{- with .Content -}}
|
||||||
<div>
|
<div>
|
||||||
{{ . | replaceRE "(<h[1-9] id=\"([^\"]+)\".+)(</h[1-9]+>)" `${1}<a href="#${2}" class="hanchor" ariaLabel="Anchor">⌗</a> ${3}` | safeHTML }}
|
{{ . | replaceRE "(<h[1-9] id=\"([^\"]+)\".+)(</h[1-9]+>)" `${1}<a href="#${2}" class="hanchor" aria-label="Anchor">⌗</a> ${3}` | safeHTML }}
|
||||||
</div>
|
</div>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</div>
|
</div>
|
||||||
@ -52,6 +49,8 @@
|
|||||||
{{ partial "posts_pagination.html" . }}
|
{{ partial "posts_pagination.html" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if not (.Params.hideComments | default false) }}
|
||||||
{{ partial "comments.html" . }}
|
{{ partial "comments.html" . }}
|
||||||
</div>
|
{{ end }}
|
||||||
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
24
layouts/partials/cover.html
Normal file
24
layouts/partials/cover.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{{- $cover := false -}}
|
||||||
|
{{- $autoCover := default $.Site.Params.autoCover false }}
|
||||||
|
|
||||||
|
{{- if index .Params "cover" -}}
|
||||||
|
{{- if .Resources.GetMatch .Params.Cover }}
|
||||||
|
{{- $cover = (.Resources.GetMatch .Params.Cover).RelPermalink -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $cover = absURL .Params.Cover -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else if $.Site.Params.AutoCover -}}
|
||||||
|
{{- if (not .Params.Cover) -}}
|
||||||
|
{{- if .Resources.GetMatch "cover.*" -}}
|
||||||
|
{{- $cover = (.Resources.GetMatch "cover.*").RelPermalink -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{if $cover -}}
|
||||||
|
<!-- Cover image found -->
|
||||||
|
<img src="{{ $cover }}"
|
||||||
|
class="post-cover"
|
||||||
|
alt="{{ .Title | plainify | default " " }}"
|
||||||
|
title="{{ .Params.CoverCredit |plainify|default "Cover Image" }}" />
|
||||||
|
{{- end }}
|
@ -3,22 +3,21 @@
|
|||||||
{{ if $.Site.Copyright }}
|
{{ if $.Site.Copyright }}
|
||||||
<div class="copyright copyright--user">
|
<div class="copyright copyright--user">
|
||||||
<span>{{ $.Site.Copyright | safeHTML }}</span>
|
<span>{{ $.Site.Copyright | safeHTML }}</span>
|
||||||
{{else}}
|
{{ else }}
|
||||||
<div class="copyright">
|
<div class="copyright">
|
||||||
<span>© {{ now.Year }} Powered by <a href="http://gohugo.io">Hugo</a></span>
|
<span>© {{ now.Year }} Powered by <a href="http://gohugo.io">Hugo</a></span>
|
||||||
{{end}}
|
{{ end }}
|
||||||
<span>:: Theme made by <a href="https://twitter.com/panr">panr</a></span>
|
<span>:: Theme made by <a href="https://twitter.com/panr">panr</a></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
{{ $js := resources.Get "js/main.js" | js.Build }}
|
<script src="{{ "assets/main.js" | absURL }}"></script>
|
||||||
{{ $js := resources.Get "js/prism.js" | js.Build }}
|
<script src="{{ "assets/prism.js" | absURL }}"></script>
|
||||||
{{ $opts := dict "noComments" true "minified" true "compact" true }}
|
|
||||||
{{ $menu := resources.Get "js/menu.js" | js.Build | babel $opts }}
|
{{ if $.Site.Params.showLanguageSelector }}
|
||||||
{{ $prism := resources.Get "js/prism.js" | js.Build | babel $opts }}
|
<script src="{{ "assets/languageSelector.js" | absURL }}"></script>
|
||||||
<script src="{{ $menu.Permalink }}"></script>
|
{{ end }}
|
||||||
<script src="{{ $prism.Permalink }}"></script>
|
|
||||||
|
|
||||||
<!-- Extended footer section-->
|
<!-- Extended footer section-->
|
||||||
{{ partial "extended_footer.html" . }}
|
{{ partial "extended_footer.html" . }}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="description" content="{{ if .IsHome }}{{ .Site.Params.Subtitle }}{{ else }}{{ .Summary | plainify }}{{ end }}" />
|
<meta name="description" content="{{ if .IsHome }}{{ $.Site.Params.Subtitle }}{{ else if .Description}}{{ .Description | plainify }}{{ else }}{{ .Summary | plainify }}{{ end }}" />
|
||||||
<meta name="keywords" content="{{ with .Params.Keywords }}{{ delimit . ", " }}{{ else }}{{ $.Site.Params.Keywords }}{{ end }}" />
|
<meta name="keywords" content="{{ with .Params.Keywords }}{{ delimit . ", " }}{{ else }}{{ $.Site.Params.Keywords }}{{ end }}" />
|
||||||
<meta name="robots" content="noodp" />
|
<meta name="robots" content="noodp" />
|
||||||
<link rel="canonical" href="{{ .Permalink }}" />
|
<link rel="canonical" href="{{ .Permalink }}" />
|
||||||
@ -8,15 +8,11 @@
|
|||||||
{{ template "_internal/google_analytics.html" . }}
|
{{ template "_internal/google_analytics.html" . }}
|
||||||
|
|
||||||
<!-- Theme CSS -->
|
<!-- Theme CSS -->
|
||||||
{{ $css := resources.Get "css/style.css" }}
|
<link rel="stylesheet" href="{{ "assets/style.css" | absURL }}">
|
||||||
{{ $opts := dict "inlineImports" true }}
|
{{ if (isset .Params "color") }}
|
||||||
{{ $style := $css | resources.PostCSS $opts | minify }}
|
<link rel="stylesheet" href="{{ (printf "assets/%s.css" .Params.color) | absURL }}">
|
||||||
<link rel="stylesheet" href="{{ $style.Permalink }}">
|
{{ else if and (ne $.Site.Params.ThemeColor "orange") (ne $.Site.Params.ThemeColor "color" "") }}
|
||||||
|
<link rel="stylesheet" href="{{ (printf "assets/%s.css" $.Site.Params.ThemeColor) | absURL }}">
|
||||||
{{ if (or (isset .Params "color") (ne $.Site.Params.ThemeColor "orange")) }}
|
|
||||||
{{ $colorCss := resources.Get (printf "css/color/%s.css" (or .Params.color $.Site.Params.ThemeColor)) }}
|
|
||||||
{{ $color := $colorCss | resources.PostCSS $opts | minify }}
|
|
||||||
<link rel="stylesheet" href="{{ $color.Permalink }}">
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- Custom CSS to override theme properties (/static/style.css) -->
|
<!-- Custom CSS to override theme properties (/static/style.css) -->
|
||||||
@ -25,27 +21,29 @@
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
<!-- Icons -->
|
<!-- Icons -->
|
||||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ "img/apple-touch-icon-144-precomposed.png" | absURL }}">
|
<link rel="apple-touch-icon" href="{{ "img/apple-touch-icon-192x192.png" | absURL }}">
|
||||||
{{ if isset $.Site.Params "favicon" }}
|
{{ if isset $.Site.Params "favicon" }}
|
||||||
<link rel="shortcut icon" href="{{ $.Site.Params.favicon | absURL }}">
|
<link rel="shortcut icon" href="{{ $.Site.Params.favicon | absURL }}">
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<link rel="shortcut icon" href="{{ printf "img/favicon/%s.png" $.Site.Params.ThemeColor | absURL }}">
|
<link rel="shortcut icon" href="{{ printf "img/favicon/%s.png" ($.Site.Params.ThemeColor | default "orange") | absURL }}">
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- Twitter Card -->
|
<!-- Twitter Card -->
|
||||||
<meta name="twitter:card" content="summary" />
|
<meta name="twitter:card" content="summary" />
|
||||||
{{ if (isset $.Site.Params.Twitter "site") }}
|
{{ if (isset $.Site.Params "twitter") }}
|
||||||
<meta name="twitter:site" content="{{ $.Site.Params.Twitter.site }}" />
|
{{ if (isset $.Site.Params.Twitter "site") }}
|
||||||
|
<meta name="twitter:site" content="{{ $.Site.Params.Twitter.site }}" />
|
||||||
|
{{ end }}
|
||||||
|
<meta name="twitter:creator" content="{{ if .IsHome }}{{ $.Site.Params.Twitter.creator }}{{ else if isset .Params "authortwitter" }}{{ .Params.authorTwitter }}{{ else }}{{ .Params.Author }}{{ end }}" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<meta name="twitter:creator" content="{{ if .IsHome }}{{ $.Site.Params.Twitter.creator }}{{ else if isset .Params "authortwitter" }}{{ .Params.authorTwitter }}{{ else }}{{ .Params.Author }}{{ end }}" />
|
|
||||||
|
|
||||||
<!-- OG data -->
|
<!-- OG data -->
|
||||||
<meta property="og:locale" content="{{ $.Site.Language.Lang }}" />
|
<meta property="og:locale" content="{{ $.Site.Language.Lang }}" />
|
||||||
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
|
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
|
||||||
<meta property="og:title" content="{{ if .IsHome }}{{ $.Site.Title }}{{ else }}{{ .Title }} :: {{ $.Site.Title }}{{ end }}">
|
<meta property="og:title" content="{{ if .IsHome }}{{ $.Site.Title }}{{ else }}{{ .Title }}{{ end }}">
|
||||||
<meta property="og:description" content="{{ if .IsHome }}{{ $.Site.Params.Subtitle }}{{ else if .Description}}{{ .Description | plainify }}{{ else }}{{ .Summary | plainify }}{{ end }}" />
|
<meta property="og:description" content="{{ if .IsHome }}{{ $.Site.Params.Subtitle }}{{ else if .Description}}{{ .Description | plainify }}{{ else }}{{ .Summary | plainify }}{{ end }}" />
|
||||||
<meta property="og:url" content="{{ .Permalink }}" />
|
<meta property="og:url" content="{{ .Permalink }}" />
|
||||||
<meta property="og:site_name" content="{{ .Title }}" />
|
<meta property="og:site_name" content="{{ $.Site.Title }}" />
|
||||||
{{ if and (not .IsHome) (isset .Params "cover") }}
|
{{ if and (not .IsHome) (isset .Params "cover") }}
|
||||||
<meta property="og:image" content="{{ .Param "cover" | absURL }}">
|
<meta property="og:image" content="{{ .Param "cover" | absURL }}">
|
||||||
{{ else }}
|
{{ else }}
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
<div class="header__logo">
|
<div class="header__logo">
|
||||||
{{ partial "logo.html" . }}
|
{{ partial "logo.html" . }}
|
||||||
</div>
|
</div>
|
||||||
<div class="menu-trigger">menu</div>
|
{{ if len $.Site.Menus }}
|
||||||
|
<div class="menu-trigger">menu</div>
|
||||||
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
{{ if len $.Site.Menus }}
|
{{ if len $.Site.Menus }}
|
||||||
{{ partial "menu.html" . }}
|
{{ partial "menu.html" . }}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
{{ if or $.Site.Params.showMenuItems ( eq .Site.Params.showMenuItems 0 ) }}
|
{{ if or $.Site.Params.showMenuItems ( eq .Site.Params.showMenuItems 0 ) }}
|
||||||
{{ range first $.Site.Params.showMenuItems $.Site.Menus.main }}
|
{{ range first $.Site.Params.showMenuItems $.Site.Menus.main }}
|
||||||
{{ if not .HasChildren }}
|
{{ if not .HasChildren }}
|
||||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
<li><a href="{{ .URL }}" {{ if .Params.NewTab }} target="_blank" {{ end }}>{{ .Name }}</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if gt (len $.Site.Menus.main) $.Site.Params.showMenuItems }}
|
{{ if gt (len $.Site.Menus.main) $.Site.Params.showMenuItems }}
|
||||||
@ -13,7 +13,7 @@
|
|||||||
<ul class="menu__sub-inner-more hidden">
|
<ul class="menu__sub-inner-more hidden">
|
||||||
{{ range last (sub (len $.Site.Menus.main) $.Site.Params.showMenuItems) $.Site.Menus.main }}
|
{{ range last (sub (len $.Site.Menus.main) $.Site.Params.showMenuItems) $.Site.Menus.main }}
|
||||||
{{ if not .HasChildren }}
|
{{ if not .HasChildren }}
|
||||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
<li><a href="{{ .URL }}" {{ if .Params.NewTab }} target="_blank" {{ end }}>{{ .Name }}</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
</ul>
|
||||||
@ -22,12 +22,12 @@
|
|||||||
{{ else }}
|
{{ else }}
|
||||||
{{ range $.Site.Menus.main }}
|
{{ range $.Site.Menus.main }}
|
||||||
{{ if not .HasChildren }}
|
{{ if not .HasChildren }}
|
||||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
<li><a href="{{ .URL }}" {{ if .Params.NewTab }} target="_blank" {{ end }}>{{ .Name }}</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if $.Site.Params.showLanguageSelector }}
|
{{ if and $.Site.Params.showLanguageSelector (len $.Site.Home.AllTranslations) }}
|
||||||
<div class="spacer"></div>
|
<div class="spacer"></div>
|
||||||
<ul class="language-selector">
|
<ul class="language-selector">
|
||||||
<ul class="language-selector-current">
|
<ul class="language-selector-current">
|
||||||
@ -45,16 +45,16 @@
|
|||||||
<ul class="menu__inner menu__inner--mobile">
|
<ul class="menu__inner menu__inner--mobile">
|
||||||
{{ range $.Site.Menus.main }}
|
{{ range $.Site.Menus.main }}
|
||||||
{{ if not .HasChildren }}
|
{{ if not .HasChildren }}
|
||||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
<li><a href="{{ .URL }}" {{ if .Params.NewTab }} target="_blank" {{ end }}>{{ .Name }}</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if $.Site.Params.showLanguageSelector }}
|
{{ if and $.Site.Params.showLanguageSelector (len $.Site.Home.AllTranslations) }}
|
||||||
<hr />
|
<hr />
|
||||||
{{ range $.Site.Home.AllTranslations }}
|
{{ range $.Site.Home.AllTranslations }}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a>
|
<a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a>
|
||||||
</li>
|
</li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
<span class="button previous">
|
<span class="button previous">
|
||||||
<a href="{{ .Paginator.Prev.URL }}">
|
<a href="{{ .Paginator.Prev.URL }}">
|
||||||
<span class="button__icon">←</span>
|
<span class="button__icon">←</span>
|
||||||
<span class="button__text">Newer posts</span>
|
<span class="button__text">{{ $.Site.Params.newerPosts | default "Newer posts" }}</span>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if .Paginator.HasNext }}
|
{{ if .Paginator.HasNext }}
|
||||||
<span class="button next">
|
<span class="button next">
|
||||||
<a href="{{ .Paginator.Next.URL }}">
|
<a href="{{ .Paginator.Next.URL }}">
|
||||||
<span class="button__text">Older posts</span>
|
<span class="button__text">{{ $.Site.Params.olderPosts | default "Older posts" }}</span>
|
||||||
<span class="button__icon">→</span>
|
<span class="button__icon">→</span>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<figure class="{{ with .Get "position"}}{{ . }}{{ else -}} left {{- end }}" >
|
<figure class="{{ with .Get "position"}}{{ . }}{{ else -}} left {{- end }}" >
|
||||||
<img src="{{ .Get "src" | safeURL }}" {{ with .Get "alt" }} alt="{{ . | plainify }}" {{ end }} {{ with .Get "style" }} style="{{ . | safeCSS }}" {{ end }} />
|
<img src="{{ .Get "src" | safeURL }}" {{ with .Get "alt" }} alt="{{ . | plainify }}" {{ end }} {{ with .Get "style" }} style="{{ . | safeCSS }}" {{ end }} />
|
||||||
{{ if .Get "caption" }}
|
{{ if .Get "caption" }}
|
||||||
<figcaption class="{{ with .Get "captionPosition"}}{{ . }}{{ else -}} center {{- end }}" {{ with .Get "captionStyle" }} style="{{ . | safeCSS }}" {{ end }}>{{ .Get "caption" }}</figcaption>
|
<figcaption class="{{ with .Get "captionPosition"}}{{ . }}{{ else -}} center {{- end }}" {{ with .Get "captionStyle" }} style="{{ . | safeCSS }}" {{ end }}>{{ .Get "caption" | safeHTML }}</figcaption>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</figure>
|
</figure>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{{ $inner := replaceRE "^\n" "" .Inner | string }}
|
{{ $inner := replaceRE "^\r?\n" "" .Inner | string }}
|
||||||
{{ if len .Params | eq 0 }}
|
{{ if len .Params | eq 0 }}
|
||||||
<pre><code>{{ $inner }}</code></pre>
|
<pre><code>{{ $inner }}</code></pre>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
|
57
package.json
57
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "terminal",
|
"name": "terminal",
|
||||||
"version": "2.0.0",
|
"version": "2.1.0",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "Radosław Kozieł <@panr> <radoslaw.koziel@gmail.com>",
|
"author": "Radosław Kozieł <@panr> <radoslaw.koziel@gmail.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -9,29 +9,52 @@
|
|||||||
">1%",
|
">1%",
|
||||||
"not dead"
|
"not dead"
|
||||||
],
|
],
|
||||||
|
"scripts": {
|
||||||
|
"dev": "webpack --mode=development --watch",
|
||||||
|
"build": "webpack --mode=production"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.10.5",
|
"@babel/cli": "^7.2.3",
|
||||||
"@babel/core": "^7.10.5",
|
"@babel/core": "^7.2.2",
|
||||||
"@babel/parser": "^7.4.2",
|
"@babel/parser": "^7.4.2",
|
||||||
"@babel/plugin-transform-runtime": "^7.2.0",
|
"@babel/plugin-transform-runtime": "^7.2.0",
|
||||||
"@babel/preset-env": "^7.3.1",
|
"@babel/preset-env": "^7.3.1",
|
||||||
"@babel/preset-stage-2": "^7.0.0",
|
"@babel/preset-stage-2": "^7.0.0",
|
||||||
"babel-eslint": "^8.2.1",
|
"angular-html-parser": "^1.2.0",
|
||||||
"browserslist": "^4.0.1",
|
"babel-eslint": "^10.1.0",
|
||||||
|
"babel-loader": "^8.0.5",
|
||||||
|
"browserslist": "^4.16.5",
|
||||||
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"clipboard": "^2.0.4",
|
"clipboard": "^2.0.4",
|
||||||
"cssnano": "^4.1.8",
|
"css-loader": "^5.1.3",
|
||||||
"eslint-config-prettier": "^2.10.0",
|
"cssnano": "^5.0.8",
|
||||||
"postcss": "^7.0.0",
|
"eslint-config-airbnb": "^18.2.0",
|
||||||
"postcss-browser-reporter": "^0.5.0",
|
"eslint-config-prettier": "^8.1.0",
|
||||||
"postcss-cli": "^7.1.1",
|
"eslint-plugin-jsx-a11y": "^6.2.1",
|
||||||
|
"file-loader": "^6.1.0",
|
||||||
|
"husky": "^5.1.3",
|
||||||
|
"mini-css-extract-plugin": "^1.3.9",
|
||||||
|
"postcss": "^8.2.10",
|
||||||
|
"postcss-browser-reporter": "^0.6.0",
|
||||||
|
"postcss-cli": "^8.3.1",
|
||||||
|
"postcss-color-function": "^4.0.1",
|
||||||
"postcss-color-mod-function": "^3.0.3",
|
"postcss-color-mod-function": "^3.0.3",
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^14.0.0",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^5.2.0",
|
||||||
"postcss-mixins": "^6.2.3",
|
"postcss-mixins": "^7.0.3",
|
||||||
"postcss-nested": "^4.2.3",
|
"postcss-nested": "^5.0.5",
|
||||||
"postcss-preset-env": "^6.7.0",
|
"postcss-preset-env": "^6.7.0",
|
||||||
"postcss-reporter": "^6.0.1",
|
"postcss-reporter": "^7.0.2",
|
||||||
"postcss-url": "^8.0.0",
|
"postcss-url": "^10.1.3",
|
||||||
"prettier-eslint-cli": "^4.7.1"
|
"prettier-eslint-cli": "^5.0.0",
|
||||||
|
"ramda": "^0.27.1",
|
||||||
|
"style-loader": "^2.0.0",
|
||||||
|
"terser-webpack-plugin": "^5.1.1",
|
||||||
|
"url-loader": "^4.1.0",
|
||||||
|
"webpack": "^5.27.1",
|
||||||
|
"webpack-cli": "^4.5.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"yarn": "^1.22.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
static/assets/2078a57b79d547bf1e2502f8d249b867.woff
Normal file
BIN
static/assets/2078a57b79d547bf1e2502f8d249b867.woff
Normal file
Binary file not shown.
BIN
static/assets/58cebbe9a6bdcba6d4bb56a22a9e812f.woff
Normal file
BIN
static/assets/58cebbe9a6bdcba6d4bb56a22a9e812f.woff
Normal file
Binary file not shown.
1
static/assets/blue.css
Normal file
1
static/assets/blue.css
Normal file
File diff suppressed because one or more lines are too long
1
static/assets/green.css
Normal file
1
static/assets/green.css
Normal file
File diff suppressed because one or more lines are too long
4
static/assets/languageSelector.js
Normal file
4
static/assets/languageSelector.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
(function(){var __webpack_modules__={"./assets/js/languageSelector.js":
|
||||||
|
/*!***************************************!*\
|
||||||
|
!*** ./assets/js/languageSelector.js ***!
|
||||||
|
\***************************************/function(){eval('var mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");\n\nvar isMobile = function isMobile() {\n return window.matchMedia(mobileQuery).matches;\n};\n\nvar languageSelector = document.querySelector(".language-selector-current");\nvar moreLanguagesContainer = document.querySelector(".language-selector__more");\ndocument.body.addEventListener("click", function () {\n if (!isMobile() && moreLanguagesContainer && !moreLanguagesContainer.classList.contains("hidden")) {\n moreLanguagesContainer.classList.add("hidden");\n }\n});\nlanguageSelector && languageSelector.addEventListener("click", function (e) {\n if (!isMobile()) {\n e.stopPropagation();\n moreLanguagesContainer.classList.toggle("hidden");\n }\n});\n\n//# sourceURL=webpack://terminal/./assets/js/languageSelector.js?')}},__webpack_exports__={};__webpack_modules__["./assets/js/languageSelector.js"]()})();
|
4
static/assets/main.js
Normal file
4
static/assets/main.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
(function(){var __webpack_modules__={"./assets/js/menu.js":
|
||||||
|
/*!***************************!*\
|
||||||
|
!*** ./assets/js/menu.js ***!
|
||||||
|
\***************************/function(){eval('var container = document.querySelector(".container");\nvar menu = document.querySelector(".menu");\nvar mobileMenuTrigger = document.querySelector(".menu-trigger");\nvar desktopMenu = document.querySelector(".menu__inner--desktop");\nvar desktopMenuTrigger = document.querySelector(".menu__sub-inner-more-trigger");\nvar menuMore = document.querySelector(".menu__sub-inner-more");\nvar mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");\n\nvar isMobile = function isMobile() {\n return window.matchMedia(mobileQuery).matches;\n};\n\nvar handleMenuClasses = function handleMenuClasses() {\n mobileMenuTrigger && mobileMenuTrigger.classList.toggle("hidden", !isMobile());\n menu && menu.classList.toggle("hidden", isMobile());\n menuMore && menuMore.classList.toggle("hidden", !isMobile());\n}; // Common\n\n\nmenu && menu.addEventListener("click", function (e) {\n return e.stopPropagation();\n});\nmenuMore && menuMore.addEventListener("click", function (e) {\n return e.stopPropagation();\n});\nhandleMenuClasses();\ndocument.body.addEventListener("click", function () {\n if (!isMobile() && menuMore && !menuMore.classList.contains("hidden")) {\n menuMore.classList.add("hidden");\n } else if (isMobile() && !menu.classList.contains("hidden")) {\n menu.classList.add("hidden");\n }\n});\nwindow.addEventListener("resize", handleMenuClasses); // Mobile menu\n\nmobileMenuTrigger && mobileMenuTrigger.addEventListener("click", function (e) {\n e.stopPropagation();\n menu && menu.classList.toggle("hidden");\n}); // Desktop menu\n\ndesktopMenuTrigger && desktopMenuTrigger.addEventListener("click", function (e) {\n e.stopPropagation();\n menuMore && menuMore.classList.toggle("hidden");\n\n if (menuMore.getBoundingClientRect().right > container.getBoundingClientRect().right) {\n menuMore.style.left = "auto";\n menuMore.style.right = 0;\n }\n});\n\n//# sourceURL=webpack://terminal/./assets/js/menu.js?')}},__webpack_exports__={};__webpack_modules__["./assets/js/menu.js"]()})();
|
1
static/assets/pink.css
Normal file
1
static/assets/pink.css
Normal file
File diff suppressed because one or more lines are too long
4
static/assets/prism.js
Normal file
4
static/assets/prism.js
Normal file
File diff suppressed because one or more lines are too long
1
static/assets/red.css
Normal file
1
static/assets/red.css
Normal file
File diff suppressed because one or more lines are too long
1
static/assets/style.css
Normal file
1
static/assets/style.css
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@ -5,7 +5,7 @@ description = "A simple, retro theme for Hugo."
|
|||||||
homepage = "https://github.com/panr/hugo-theme-terminal/"
|
homepage = "https://github.com/panr/hugo-theme-terminal/"
|
||||||
tags = ["blog", "clean", "customizable", "dark", "highlighting", "minimal", "monotone", "multilingual", "personal", "responsive", "simple", "technical", "retro"]
|
tags = ["blog", "clean", "customizable", "dark", "highlighting", "minimal", "monotone", "multilingual", "personal", "responsive", "simple", "technical", "retro"]
|
||||||
features = ["blog", "shortcode", "syntax highlighting"]
|
features = ["blog", "shortcode", "syntax highlighting"]
|
||||||
min_version = 0.57
|
min_version = 0.74
|
||||||
|
|
||||||
[author]
|
[author]
|
||||||
name = "panr"
|
name = "panr"
|
||||||
|
@ -1,33 +1,28 @@
|
|||||||
const Webpack = require("webpack");
|
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
|
||||||
const ExtractTextPlugin = require("extract-text-webpack-plugin");
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||||
const CleanPlugin = require("clean-webpack-plugin");
|
const TerserPlugin = require("terser-webpack-plugin");
|
||||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
||||||
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
|
|
||||||
|
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|
||||||
const join = (...paths) => path.join(__dirname, ...paths);
|
const join = (...paths) => path.join(__dirname, ...paths);
|
||||||
|
|
||||||
module.exports = {
|
module.exports = (env, { mode }) => ({
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: [".js", ".css"],
|
extensions: [".js", ".css"],
|
||||||
modules: ["source", "node_modules"],
|
modules: ["assets", "node_modules"],
|
||||||
},
|
},
|
||||||
entry: {
|
entry: {
|
||||||
"main.js": [
|
main: join("assets", "js", "menu.js"),
|
||||||
join("source", "js", "main.js"),
|
languageSelector: join("assets", "js", "languageSelector.js"),
|
||||||
join("source", "js", "menu.js"),
|
prism: join("assets", "js", "prism.js"),
|
||||||
join("source", "js", "languageSelector.js")
|
style: join("assets", "css", "style.css"),
|
||||||
],
|
red: join("assets", "css", "color", "red.css"),
|
||||||
"prism.js": join("source", "js", "prism.js"),
|
blue: join("assets", "css", "color", "blue.css"),
|
||||||
"style.css": join("source", "css", "style.css"),
|
green: join("assets", "css", "color", "green.css"),
|
||||||
"red.css": join("source", "css", "color", "red.css"),
|
pink: join("assets", "css", "color", "pink.css"),
|
||||||
"blue.css": join("source", "css", "color", "blue.css"),
|
|
||||||
"green.css": join("source", "css", "color", "green.css"),
|
|
||||||
"pink.css": join("source", "css", "color", "pink.css"),
|
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
filename: "[name]",
|
filename: "[name].js",
|
||||||
path: join("static/assets"),
|
path: join("static/assets"),
|
||||||
publicPath: "",
|
publicPath: "",
|
||||||
},
|
},
|
||||||
@ -59,28 +54,20 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/,
|
test: /\.css$/,
|
||||||
use: ExtractTextPlugin.extract({
|
use: [
|
||||||
fallback: "style-loader",
|
MiniCssExtractPlugin.loader,
|
||||||
use: [
|
{
|
||||||
{
|
loader: "css-loader",
|
||||||
loader: "css-loader",
|
options: {
|
||||||
options: {
|
modules: {
|
||||||
minimize: true,
|
|
||||||
modules: true,
|
|
||||||
importLoaders: 1,
|
|
||||||
localIdentName: "[local]",
|
localIdentName: "[local]",
|
||||||
},
|
},
|
||||||
|
import: true,
|
||||||
|
importLoaders: 1,
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
loader: "postcss-loader",
|
"postcss-loader",
|
||||||
options: {
|
],
|
||||||
config: {
|
|
||||||
path: "postcss.config.js",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -89,11 +76,29 @@ module.exports = {
|
|||||||
name: "vendor",
|
name: "vendor",
|
||||||
minChunks: 2,
|
minChunks: 2,
|
||||||
},
|
},
|
||||||
|
minimize: true,
|
||||||
minimizer: [
|
minimizer: [
|
||||||
new UglifyJsPlugin({
|
new TerserPlugin({
|
||||||
sourceMap: true,
|
parallel: true,
|
||||||
|
extractComments: false,
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
plugins: [new CleanPlugin(join("static/assets")), new ExtractTextPlugin("[name]")],
|
plugins: [
|
||||||
};
|
new CleanWebpackPlugin({
|
||||||
|
cleanOnceBeforeBuildPatterns: [join("static/assets")],
|
||||||
|
cleanAfterEveryBuildPatterns: [
|
||||||
|
join("static/assets/style.js"),
|
||||||
|
join("static/assets/blue.js"),
|
||||||
|
join("static/assets/green.js"),
|
||||||
|
join("static/assets/red.js"),
|
||||||
|
join("static/assets/pink.js"),
|
||||||
|
],
|
||||||
|
verbose: true,
|
||||||
|
}),
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: "[name].css",
|
||||||
|
chunkFilename: "[id].css",
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
Reference in New Issue
Block a user