diff options
author | xAlpharax <42233094+xAlpharax@users.noreply.github.com> | 2023-11-18 12:15:16 +0200 |
---|---|---|
committer | xAlpharax <42233094+xAlpharax@users.noreply.github.com> | 2023-11-18 12:15:16 +0200 |
commit | 8628a4ae2e7c8998c8d2ffe2ecc51f2624aa66b1 (patch) | |
tree | bd4bfbb9a9a77dfca3f3849f567fae45155b10b8 | |
parent | d0a72793fffc208323292430bbbd8a0c7c2b6a2d (diff) |
Massive changes - migrating to Hermit with a few tweaks.
Changes to be committed:
new file: .gitignore
modified: .gitmodules
modified: config.toml
new file: content/about.md
deleted: content/blog/_index.md
deleted: content/blog/first.md
deleted: content/blog/second.md
new file: content/posts/_index.md
new file: content/posts/code_test.md
new file: content/posts/good_first_post.md
new file: content/posts/later_posts.md
new file: content/posts/typography.md
deleted: description
deleted: index.html
deleted: public/blog/first/index.html
deleted: public/blog/index.html
deleted: public/blog/second/index.html
deleted: public/elasticlunr.min.js
deleted: public/search_index.en.js
deleted: public/typography.css
new file: sass/_animate.scss
new file: sass/_icons.scss
new file: sass/_normalize.scss
new file: sass/_predefined.scss
new file: sass/_syntax.scss
new file: sass/style.scss
new file: static/favicon-32x32.png
new file: static/favicon.ico
new file: static/js/main.js
modified: templates/404.html
deleted: templates/base.html
deleted: templates/blog-page.html
deleted: templates/blog.html
new file: templates/index.html
new file: templates/macros.html
new file: templates/page.html
new file: templates/section.html
new file: templates/tags/list.html
new file: templates/tags/single.html
new file: themes/404.html
new file: themes/config.toml
deleted: themes/hermit_zola
42 files changed, 2339 insertions, 227 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..364fdec --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +public/ diff --git a/.gitmodules b/.gitmodules index 8820228..aa1ba09 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "themes/emily_zola_theme"] path = themes/emily_zola_theme url = git@github.com:kyoheiu/emily_zola_theme.git -[submodule "themes/hermit_zola"] - path = themes/hermit_zola - url = git@github.com:VersBinarii/hermit_zola.git diff --git a/config.toml b/config.toml index 68fa938..b759759 100644 --- a/config.toml +++ b/config.toml @@ -1,25 +1,105 @@ -# Theme used -theme = "emily_zola_theme" +# Base URL of the site, the only required config argument +base_url = "https://example.com/blog" -# The URL the site will be built for -base_url = "https://alphara.art" +# Used in RSS by default +title = "Hermit Zola" +description = "My blog" +# The default language, used in RSS +default_language = "en" -# Whether to automatically compile all Sass files in the sass directory -compile_sass = true +# Theme name to use +# theme = "" + +# Highlight all code blocks found +# Or enable the highlight.js in the 'extra' config section +highlight_code = false -# Whether to build a search index to be used later on by a JavaScript library -build_search_index = true +# Which theme to use for the code highlighting. +# See below for list of accepted values +highlight_theme = "agola-dark" -# RSS feed generation +# Whether to generate a RSS feed automatically generate_feed = true +feed_filename = "rss.xml" + +# The number of articles to include in the RSS feed. Will include all items if +# not set (the default). +# rss_limit = 20 + +# The taxonomies to be rendered for that site and their configuration +# Example: +# taxonomies = [ +# {name = "tags", rss = true}, # each tag will have its own RSS feed +# {name = "categories", paginate_by = 5}, # 5 items per page for a term +# {name = "authors"}, # Basic definition: no RSS or pagination +# ] +# +taxonomies = [ + {name = "tags", rss = true} +] + +# Whether to compile the Sass files found in the `sass` directory +compile_sass = true + +# Whether to build a search index out of the pages and section +# content for the `default_language` +build_search_index = false + +# A list of glob patterns specifying asset files to ignore when +# processing the content directory. +# Defaults to none, which means all asset files are copied over to the public folder. +# Example: +# ignored_content = ["*.{graphml,xlsx}", "temp.*"] +ignored_content = [] + +# A list of directories to search for additional `.sublime-syntax` files in. +extra_syntaxes = [] -[markdown] -# Whether to do syntax highlighting -# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola -highlight_code = true +# Optional translation object. The key if present should be a language code +[translations] +# You can put any kind of data in there and it +# will be accessible in all templates [extra] -# Put all your custom variables here -# MathJax rendering support -math = true +home_subtitle = "Some profound and catchy statement" + +footer_copyright = ' · <a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener">CC BY-NC 4.0</a>' + +hermit_menu = [ + { link = "/posts", name = "Posts" }, + { link = "/about", name = "About" } +] + +hermit_social = [ + { name = "twitter", link = "https://twitter.com" }, + { name = "github", link = "https://github.com" }, + { name = "email", link = "mailto:author@domain.com" } +] + + +# You can use highlight.js for code highlighting if you dont like the +# default one +[extra.highlightjs] +enable = true +clipboard = true +theme = "railscasts" + +[extra.disqus] +enable = false +# Take this from your Disqus account +shortname = "my-supa-dupa-blog" +# Cpmments can be disabled per page by setting: +# [extra] +# disable_comments = true +# +# in the posts front-matter + + +[extra.author] +name = "The Author" +email = "author@domain.com" + +[extra.google_analytics] +enable = false +id = "UA-4XXXXXXX-X" diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..98f7990 --- /dev/null +++ b/content/about.md @@ -0,0 +1,15 @@ ++++ +title="About" ++++ + + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus in urna interdum, semper ligula non, tempus felis. Etiam a lorem eros. Proin ultricies et felis non aliquam. Vivamus interdum egestas nulla et accumsan. Proin fringilla nisl id lectus vehicula elementum. In sed lacus rutrum, varius ipsum ac, suscipit ipsum. Donec facilisis efficitur dui eget suscipit. Praesent lobortis nisi in sapien interdum maximus. Phasellus pulvinar faucibus arcu, tristique egestas orci tincidunt id. Pellentesque malesuada maximus augue, ut pretium magna accumsan mattis. In tincidunt ex non diam convallis semper. Nulla eget turpis ac massa eleifend pellentesque at id lorem. + +Donec sit amet tincidunt mauris, at volutpat nibh. Vestibulum diam velit, sodales nec neque cursus, aliquam efficitur ante. Phasellus id fermentum eros. Praesent elementum nibh at nunc varius maximus. Donec imperdiet pulvinar lectus vulputate tempus. Mauris lacinia lorem consequat est viverra, vitae tristique leo tempor. Pellentesque ullamcorper porta ligula. Nulla convallis orci a ligula sagittis ornare. Ut eget sodales massa, id tincidunt diam. Cras eget ullamcorper nibh. Suspendisse bibendum aliquam justo quis dictum. Vestibulum porta facilisis tellus, nec placerat massa semper id. Integer ullamcorper nibh orci, ut sagittis purus hendrerit non. + +Phasellus et ornare risus. Curabitur nec rhoncus velit. Duis non nisl id nulla maximus commodo sit amet vitae orci. Cras facilisis viverra laoreet. In eros risus, auctor ut aliquam a, aliquet ut odio. Cras rutrum blandit luctus. Donec porttitor, turpis non tempor interdum, nunc orci cursus ex, eu porttitor lectus tellus vel nisl. Vivamus congue, sapien at tincidunt blandit, libero sapien malesuada nibh, id blandit sapien mauris vel sapien. + +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas pulvinar nibh nec feugiat gravida. Pellentesque posuere nisi pretium quam vulputate, at iaculis nisi sollicitudin. Nam sit amet ultrices mauris. Suspendisse suscipit, nunc sit amet blandit auctor, eros lectus elementum orci, a cursus nunc elit eleifend nisl. Nunc porta mollis convallis. In hendrerit ultrices sem a porttitor. Aliquam erat volutpat. Sed hendrerit nulla id iaculis fermentum. Aliquam sit amet elementum tortor. Nulla dolor quam, blandit sit amet convallis vel, venenatis vitae turpis. Sed volutpat fermentum nisi et molestie. + +Cras id lectus laoreet, luctus augue eu, tristique lacus. Quisque feugiat ipsum vel consequat pharetra. Morbi fermentum nibh ornare egestas imperdiet. Vestibulum iaculis felis id turpis dictum, sit amet tincidunt velit consequat. Morbi facilisis erat id efficitur ultricies. Donec sollicitudin luctus justo at tincidunt. Etiam in vestibulum dolor. In vel velit elementum sapien rutrum laoreet. Aliquam pellentesque ornare blandit. Integer bibendum lacus sit amet nibh tempor, et dictum odio scelerisque. Vivamus suscipit lacus id felis condimentum, varius ornare nunc vulputate. Integer nec magna non dui consequat dignissim. Cras justo nibh, pretium eu arcu finibus, mattis porttitor nibh. Nulla ut euismod felis, id ultrices sapien. Suspendisse commodo est erat, ut faucibus nisi hendrerit eget. Maecenas urna diam, condimentum at vehicula vitae, tincidunt a ligula. diff --git a/content/blog/_index.md b/content/blog/_index.md deleted file mode 100644 index da1d421..0000000 --- a/content/blog/_index.md +++ /dev/null @@ -1,3 +0,0 @@ -+++ -title = "List of blog posts" -+++ diff --git a/content/blog/first.md b/content/blog/first.md deleted file mode 100644 index a1d1130..0000000 --- a/content/blog/first.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "My first post" -date = 2019-11-27 -+++ - -This is my first blog post. diff --git a/content/blog/second.md b/content/blog/second.md deleted file mode 100644 index 04db092..0000000 --- a/content/blog/second.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "My second post" -date = 2019-11-28 -+++ - -This is my second blog post. diff --git a/content/posts/_index.md b/content/posts/_index.md new file mode 100644 index 0000000..9485866 --- /dev/null +++ b/content/posts/_index.md @@ -0,0 +1,4 @@ ++++ +title= "Posts" +sort_by="date" ++++ diff --git a/content/posts/code_test.md b/content/posts/code_test.md new file mode 100644 index 0000000..be9b5cd --- /dev/null +++ b/content/posts/code_test.md @@ -0,0 +1,24 @@ ++++ +title="Test code syntax highlight" +date=2020-10-13 +draft=false + +[taxonomies] +tags=["test", "code"] + +[extra] +disable_comments = true ++++ + +```rust +fn factorial(n: u64) -> u64 { + match n { + 0 => 1, + _ => n * factorial(n-1) + } +} +``` + +```typescript +const sum = (n: number) => n * (n + 1) / 2 +``` diff --git a/content/posts/good_first_post.md b/content/posts/good_first_post.md new file mode 100644 index 0000000..7d37ee5 --- /dev/null +++ b/content/posts/good_first_post.md @@ -0,0 +1,52 @@ ++++ +title="This is a good first post" +date=2019-08-23 +draft=false +[taxonomies] +tags=["hello", "blog", "first"] ++++ + +So i went there and did all that but as you know: +* This point was important +* This as well... +* And not to mention this one + + +So i did those other things but: +1. The first thing +2. And the second thing +3. But the third was the `best` + +And then the guy said: +> Man, i'm not gonna be the part of the system + +And showed me this: + +<img src="https://dummyimage.com/640x4:3/"> + + +I said factorial this... + +```rust +fn factorial(n: u64) -> u64 { + match n { + 0 => 1, + _ => n * factorial(n-1) + } +} +``` + +Then i shouted + +# Hello + +... and the echo answered: + +## Hello + +### Hello + +#### Hello +[zola!!!][1] + +[1]: https://www.getzola.org/ diff --git a/content/posts/later_posts.md b/content/posts/later_posts.md new file mode 100644 index 0000000..ed9f71a --- /dev/null +++ b/content/posts/later_posts.md @@ -0,0 +1,20 @@ ++++ +title="Latest Post" +date=2019-08-25 +draft=false +[taxonomies] +tags=["hello", "blog", "later"] ++++ + + +# Lorem ipsum dolor + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Aliquam ultrices sagittis orci a scelerisque purus semper. Orci eu lobortis elementum nibh tellus molestie. At tellus at urna condimentum mattis pellentesque id nibh. Viverra justo nec ultrices dui. Nibh tortor id aliquet lectus proin. Nulla pharetra diam sit amet nisl. Et egestas quis ipsum suspendisse. Sem viverra aliquet eget sit amet tellus cras. Nisl suscipit adipiscing bibendum est ultricies integer quis auctor. + +Quisque egestas diam in arcu cursus euismod quis viverra nibh. Non sodales neque sodales ut etiam sit amet nisl purus. Ultricies mi eget mauris pharetra et ultrices neque. Semper auctor neque vitae tempus quam pellentesque nec. Tellus mauris a diam maecenas sed enim. Bibendum enim facilisis gravida neque convallis a. Pretium lectus quam id leo in vitae turpis massa. Quis blandit turpis cursus in hac habitasse platea dictumst quisque. In egestas erat imperdiet sed euismod nisi. Morbi tristique senectus et netus et malesuada fames ac. Neque viverra justo nec ultrices dui sapien. Mi bibendum neque egestas congue quisque egestas diam in. Ultrices tincidunt arcu non sodales neque sodales ut. Consectetur adipiscing elit duis tristique sollicitudin nibh. Egestas sed tempus urna et pharetra pharetra massa massa ultricies. Egestas pretium aenean pharetra magna ac placerat. Maecenas pharetra convallis posuere morbi leo urna molestie. + +Sit amet porttitor eget dolor morbi non arcu risus quis. Nisl rhoncus mattis rhoncus urna neque viverra justo nec. Facilisi cras fermentum odio eu. In ante metus dictum at tempor commodo ullamcorper a lacus. Nulla aliquet enim tortor at auctor. Mollis aliquam ut porttitor leo a diam sollicitudin. Risus viverra adipiscing at in tellus. Felis eget nunc lobortis mattis aliquam faucibus purus. Quisque sagittis purus sit amet volutpat. Mi in nulla posuere sollicitudin aliquam ultrices sagittis. Justo nec ultrices dui sapien. Nisl nisi scelerisque eu ultrices vitae. Id volutpat lacus laoreet non curabitur gravida. Nullam non nisi est sit amet facilisis magna etiam. Maecenas volutpat blandit aliquam etiam erat velit scelerisque. Dui vivamus arcu felis bibendum ut tristique et egestas quis. Morbi quis commodo odio aenean sed adipiscing diam donec adipiscing. Arcu felis bibendum ut tristique et egestas quis ipsum suspendisse. Cursus in hac habitasse platea dictumst quisque sagittis. Egestas quis ipsum suspendisse ultrices gravida dictum. + +Varius duis at consectetur lorem donec massa sapien. Fames ac turpis egestas sed tempus. Eu mi bibendum neque egestas congue. Suscipit adipiscing bibendum est ultricies integer quis auctor elit. Tincidunt vitae semper quis lectus nulla at volutpat diam. Neque gravida in fermentum et sollicitudin. Eget gravida cum sociis natoque penatibus et magnis dis parturient. Varius quam quisque id diam vel quam elementum. Imperdiet proin fermentum leo vel orci porta non. Porttitor leo a diam sollicitudin tempor. Elit scelerisque mauris pellentesque pulvinar. Cursus turpis massa tincidunt dui ut ornare. Leo vel fringilla est ullamcorper eget nulla facilisi. At auctor urna nunc id cursus metus aliquam eleifend. + +Tortor aliquam nulla facilisi cras fermentum odio eu feugiat pretium. Massa tempor nec feugiat nisl pretium fusce id. Id leo in vitae turpis massa sed elementum. A cras semper auctor neque. Diam quam nulla porttitor massa id neque aliquam vestibulum morbi. Rhoncus urna neque viverra justo nec ultrices. Nunc faucibus a pellentesque sit amet porttitor eget. Neque volutpat ac tincidunt vitae. Cursus mattis molestie a iaculis at. Semper risus in hendrerit gravida. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo. Non arcu risus quis varius quam. Ultrices dui sapien eget mi proin sed libero enim sed. Platea dictumst quisque sagittis purus. Fringilla est ullamcorper eget nulla facilisi etiam dignissim. diff --git a/content/posts/typography.md b/content/posts/typography.md new file mode 100644 index 0000000..cbc7328 --- /dev/null +++ b/content/posts/typography.md @@ -0,0 +1,69 @@ ++++ +title = "Typography" +date = 2018-09-29T11:36:33+08:00 +draft = false +[taxonomies] +tags=["test", "original_post"] +[extra] +toc=true ++++ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.[^1] + +> An apple is a sweet, edible fruit produced by an apple tree (Malus pumila). Apple trees are cultivated worldwide, and are the most widely grown species in the genus Malus. The tree originated in Central Asia, where its wild ancestor, Malus sieversii, is still found today. Apples have been grown for thousands of years in Asia and Europe, and were brought to North America by European colonists. Apples have religious and mythological significance in many cultures, including Norse, Greek and European Christian traditions.[^2] +--- + +Inline styles: + +**strong**, *emphasis*, ***strong and emphasis***,`code`, <u>underline</u>, ~~strikethrough~~, :joy:🤣, $\LaTeX$, X^2^, H~2~O, ==highlight==, [Link](https://example.com), and image: + + + +--- + +Headings: + +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +##### Heading 5 + +###### Heading 6 + +Table: + +| Left-Aligned | Center Aligned | Right Aligned | +| :------------ | :-------------: | ------------: | +| col 3 is | some wordy text | $1600 | +| col 2 is | centered | $12 | +| zebra stripes | are neat | $1 | + +Lists: + +* Unordered list item 1. +* Unordered list item 2. + +1. ordered list item 1. +2. ordered list item 2. + + sub-unordered list item 1. + + sub-unordered list item 2. + + [x] something is DONE. + + [ ] something is NOT DONE. + +Syntax Highlighting: + +```javascript +const num1 = prompt("Enter first number"); +const num2 = prompt("Enter second number"); +const sum = parseInt(num1, 10) + parseInt(num2, 10); // "+" means "add" +alert("Sum = " + sum); // "+" means combine into a string +``` + +[^1]: From [https://www.lipsum.com/](https://www.lipsum.com/) + +[^2]: From [https://en.wikipedia.org/wiki/Apple](https://en.wikipedia.org/wiki/Apple) diff --git a/description b/description deleted file mode 100644 index b135000..0000000 --- a/description +++ /dev/null @@ -1 +0,0 @@ -This was my Zola Overview tutorial done. diff --git a/index.html b/index.html deleted file mode 100644 index 3a46836..0000000 --- a/index.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -<h1 class="title"> - This is my blog made with Zola. -</h1> -<p>Click <a href="{{ get_url(path='@/blog/_index.md') }}">here</a> to see my posts.</p> -{% endblock content %} diff --git a/public/blog/first/index.html b/public/blog/first/index.html deleted file mode 100644 index 2bbc7ae..0000000 --- a/public/blog/first/index.html +++ /dev/null @@ -1,43 +0,0 @@ -<html> - <head> - <title>Zola</title> - </head> - <body> - <div class="container"> - <h1>Welcome to Zola!</h1> - <p> - You're seeing this page because we couldn't find a template to render. - </p> - <p> - To modify this page, create a <b>page.html</b> file in the templates directory or - <a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>. - <br> - You can find what variables are available in this template in the <a href="https://www.getzola.org/documentation/templates/pages-sections/#page-variables" target="_blank">documentation</a>. - </p> - </div> - <footer> - <a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a> - </footer> - <style> - html { - line-height: 1.5; - } - h1 { - margin-bottom: 2rem; - } - .container { - font-family: "sans-serif"; - text-align: center; - margin-top: 20vh; - padding: 2rem; - background: #e9e9e9; - } - footer { - position: fixed; - width: 100%; - bottom: 1rem; - text-align: center; - } - </style> - </body> -</html> diff --git a/public/blog/index.html b/public/blog/index.html deleted file mode 100644 index 2c2d5f8..0000000 --- a/public/blog/index.html +++ /dev/null @@ -1,43 +0,0 @@ -<html> - <head> - <title>Zola</title> - </head> - <body> - <div class="container"> - <h1>Welcome to Zola!</h1> - <p> - You're seeing this page because we couldn't find a template to render. - </p> - <p> - To modify this page, create a <b>section.html</b> file in the templates directory or - <a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>. - <br> - You can find what variables are available in this template in the <a href="https://www.getzola.org/documentation/templates/pages-sections/#section-variables" target="_blank">documentation</a>. - </p> - </div> - <footer> - <a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a> - </footer> - <style> - html { - line-height: 1.5; - } - h1 { - margin-bottom: 2rem; - } - .container { - font-family: "sans-serif"; - text-align: center; - margin-top: 20vh; - padding: 2rem; - background: #e9e9e9; - } - footer { - position: fixed; - width: 100%; - bottom: 1rem; - text-align: center; - } - </style> - </body> -</html> diff --git a/public/blog/second/index.html b/public/blog/second/index.html deleted file mode 100644 index 2bbc7ae..0000000 --- a/public/blog/second/index.html +++ /dev/null @@ -1,43 +0,0 @@ -<html> - <head> - <title>Zola</title> - </head> - <body> - <div class="container"> - <h1>Welcome to Zola!</h1> - <p> - You're seeing this page because we couldn't find a template to render. - </p> - <p> - To modify this page, create a <b>page.html</b> file in the templates directory or - <a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>. - <br> - You can find what variables are available in this template in the <a href="https://www.getzola.org/documentation/templates/pages-sections/#page-variables" target="_blank">documentation</a>. - </p> - </div> - <footer> - <a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a> - </footer> - <style> - html { - line-height: 1.5; - } - h1 { - margin-bottom: 2rem; - } - .container { - font-family: "sans-serif"; - text-align: center; - margin-top: 20vh; - padding: 2rem; - background: #e9e9e9; - } - footer { - position: fixed; - width: 100%; - bottom: 1rem; - text-align: center; - } - </style> - </body> -</html> diff --git a/public/elasticlunr.min.js b/public/elasticlunr.min.js deleted file mode 100644 index 79dad65..0000000 --- a/public/elasticlunr.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * elasticlunr - http://weixsong.github.io - * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 - * - * Copyright (C) 2017 Oliver Nightingale - * Copyright (C) 2017 Wei Song - * MIT Licensed - * @license - */ -!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}(); diff --git a/public/search_index.en.js b/public/search_index.en.js deleted file mode 100644 index 9126c9a..0000000 --- a/public/search_index.en.js +++ /dev/null @@ -1 +0,0 @@ -window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://alphara.art/blog/":{"tf":1.0},"https://alphara.art/blog/first/":{"tf":1.0},"https://alphara.art/blog/second/":{"tf":1.0}},"df":3}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/first/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/":{"tf":1.0},"https://alphara.art/blog/first/":{"tf":1.4142135623730951},"https://alphara.art/blog/second/":{"tf":1.4142135623730951}},"df":3}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://alphara.art/blog/second/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://alphara.art/blog/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/first/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://alphara.art/blog/":{"tf":1.0},"https://alphara.art/blog/first/":{"tf":1.0},"https://alphara.art/blog/second/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://alphara.art/blog/second/":{"tf":1.0}},"df":1}}}}}}}}},"documentStore":{"save":true,"docs":{"https://alphara.art/":{"body":"","id":"https://alphara.art/","title":""},"https://alphara.art/blog/":{"body":"","id":"https://alphara.art/blog/","title":"List of blog posts"},"https://alphara.art/blog/first/":{"body":"This is my first blog post.\n","id":"https://alphara.art/blog/first/","title":"My first post"},"https://alphara.art/blog/second/":{"body":"This is my second blog post.\n","id":"https://alphara.art/blog/second/","title":"My second post"}},"docInfo":{"https://alphara.art/":{"body":0,"title":0},"https://alphara.art/blog/":{"body":0,"title":3},"https://alphara.art/blog/first/":{"body":3,"title":2},"https://alphara.art/blog/second/":{"body":3,"title":2}},"length":4},"lang":"English"};
\ No newline at end of file diff --git a/public/typography.css b/public/typography.css deleted file mode 100644 index 80fa829..0000000 --- a/public/typography.css +++ /dev/null @@ -1 +0,0 @@ -a{color:#bae6fd;text-decoration-line:none}h1,h2{border-bottom:1px solid #e2e8f0}img,video{display:block;margin:0 auto;max-width:90%}pre{border:1px solid;overflow-x:auto;overflow-y:hidden;margin:.25rem;border-radius:.375rem}code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}:not(pre)>code{font-size:.875rem;padding:.0625rem .125rem;color:#0f172a;background-color:#e2e8f0;border-radius:.375rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}blockquote{border-left:.125rem solid;padding-left:.25rem;margin-left:1rem;font-style:italic}table{border-collapse:collapse;margin:0 auto;max-width:90%}table th{padding:10px}table th,td{border:1px #666;border-style:solid none}table td{padding:10px}ul,ol{list-style-position:inside;padding-left:.5rem}
\ No newline at end of file diff --git a/sass/_animate.scss b/sass/_animate.scss new file mode 100644 index 0000000..2f47ef4 --- /dev/null +++ b/sass/_animate.scss @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/*! + * animate.css -https://daneden.github.io/animate.css/ + * Version - 3.7.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2018 Daniel Eden + */ + +@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media (prefers-reduced-motion){.animated{-webkit-animation:unset!important;animation:unset!important;-webkit-transition:none!important;transition:none!important}}
\ No newline at end of file diff --git a/sass/_icons.scss b/sass/_icons.scss new file mode 100644 index 0000000..6722894 --- /dev/null +++ b/sass/_icons.scss @@ -0,0 +1,60 @@ +/* From: https://css.gg/app */ + +.gg-check { + box-sizing: border-box; + position: relative; + display: block; + transform: scale(var(--ggs, 1)); + width: 22px; + height: 22px; + border: 2px solid transparent; + border-radius: 100px; +} +.gg-check::after { + content: ""; + display: block; + box-sizing: border-box; + position: absolute; + left: 3px; + top: -1px; + width: 6px; + height: 10px; + border-width: 0 2px 2px 0; + border-style: solid; + transform-origin: bottom left; + transform: rotate(45deg); +} + +.gg-clipboard { + box-sizing: border-box; + position: relative; + display: block; + transform: scale(var(--ggs, 1)); + width: 18px; + height: 18px; + border: 2px solid; + border-radius: 2px; +} +.gg-clipboard::after, +.gg-clipboard::before { + content: ""; + display: block; + box-sizing: border-box; + position: absolute; + border-radius: 2px; + width: 10px; + left: 2px; +} +.gg-clipboard::before { + border: 2px solid; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + top: -2px; + height: 6px; +} +.gg-clipboard::after { + height: 2px; + background: currentColor; + box-shadow: 0 -4px 0 0; + bottom: 2px; +} diff --git a/sass/_normalize.scss b/sass/_normalize.scss new file mode 100644 index 0000000..3d6624c --- /dev/null +++ b/sass/_normalize.scss @@ -0,0 +1,341 @@ +/*! normalize.css v8.0.0 | 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; +} + +/** + * 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; +}
\ No newline at end of file diff --git a/sass/_predefined.scss b/sass/_predefined.scss new file mode 100644 index 0000000..ec3c6c7 --- /dev/null +++ b/sass/_predefined.scss @@ -0,0 +1,37 @@ +// Colors +// +$theme: #018574; +$text: #c6cddb; +$light-grey: #494f5c; +$dark-grey: #3b3e48; +$highlight-grey: #7d828a; +$midnightblue: #31333d; + +// Fonts +// +$fonts: "Trebuchet MS", Verdana, "Verdana Ref", "Segoe UI", Candara, + "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif; +$code-fonts: Consolas, "Andale Mono WT", "Andale Mono", Menlo, Monaco, + "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", + "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", + Courier, "YaHei Consolas Hybrid", monospace, "Segoe UI Emoji", "PingFang SC", + "Microsoft YaHei"; + +// Mixins +// +@mixin dimmed { + opacity: 0.6; +} + +@mixin aTag { + a { + word-break: break-all; + border: none; + box-shadow: inset 0 -4px 0 $theme; + transition-property: background-color; + + &:hover { + background-color: $theme; + } + } +} diff --git a/sass/_syntax.scss b/sass/_syntax.scss new file mode 100644 index 0000000..efcf550 --- /dev/null +++ b/sass/_syntax.scss @@ -0,0 +1,59 @@ +/* Background */ .chroma { color: #eee; background-color: $midnightblue } +/* Error */ .chroma .err { color: #960050; background-color: #1e0010 } +/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } +/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } +/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc } +/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; } +/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; } +/* Keyword */ .chroma .k { color: #66d9ef } +/* KeywordConstant */ .chroma .kc { color: #66d9ef } +/* KeywordDeclaration */ .chroma .kd { color: #66d9ef } +/* KeywordNamespace */ .chroma .kn { color: #f92672 } +/* KeywordPseudo */ .chroma .kp { color: #66d9ef } +/* KeywordReserved */ .chroma .kr { color: #66d9ef } +/* KeywordType */ .chroma .kt { color: #66d9ef } +/* NameAttribute */ .chroma .na { color: #a6e22e } +/* NameClass */ .chroma .nc { color: #a6e22e } +/* NameConstant */ .chroma .no { color: #66d9ef } +/* NameDecorator */ .chroma .nd { color: #a6e22e } +/* NameException */ .chroma .ne { color: #a6e22e } +/* NameFunction */ .chroma .nf { color: #a6e22e } +/* NameOther */ .chroma .nx { color: #a6e22e } +/* NameTag */ .chroma .nt { color: #f92672 } +/* Literal */ .chroma .l { color: #ae81ff } +/* LiteralDate */ .chroma .ld { color: #e6db74 } +/* LiteralString */ .chroma .s { color: #e6db74 } +/* LiteralStringAffix */ .chroma .sa { color: #e6db74 } +/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 } +/* LiteralStringChar */ .chroma .sc { color: #e6db74 } +/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 } +/* LiteralStringDoc */ .chroma .sd { color: #e6db74 } +/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 } +/* LiteralStringEscape */ .chroma .se { color: #ae81ff } +/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 } +/* LiteralStringInterpol */ .chroma .si { color: #e6db74 } +/* LiteralStringOther */ .chroma .sx { color: #e6db74 } +/* LiteralStringRegex */ .chroma .sr { color: #e6db74 } +/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 } +/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 } +/* 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 } +/* 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 } +/* GenericDeleted */ .chroma .gd { color: #f92672 } +/* GenericEmph */ .chroma .ge { font-style: italic } +/* GenericInserted */ .chroma .gi { color: #a6e22e } +/* GenericStrong */ .chroma .gs { font-weight: bold } +/* GenericSubheading */ .chroma .gu { color: #75715e } diff --git a/sass/style.scss b/sass/style.scss new file mode 100644 index 0000000..d110fec --- /dev/null +++ b/sass/style.scss @@ -0,0 +1,828 @@ +@import "predefined.scss"; +@import "normalize.scss"; +@import "syntax.scss"; +@import "animate.scss"; +@import "icons.scss"; + +/* Webkit Scrollbar Customize */ +::-webkit-scrollbar { + width: 8px; + height: 8px; + background: $midnightblue; +} + +::-webkit-scrollbar-thumb { + background: #888; + + &:hover { + background: $text; + } +} + +html { + background: $light-grey; + line-height: 1.6; + letter-spacing: 0.06em; +} + +body, +button, +input, +select, +textarea { + color: $text; + font-family: $fonts; +} + +pre, +code, +pre tt { + font-family: $code-fonts; +} + +pre { + max-height: 40em; + padding: 0.7em 1.1em; + overflow: auto; + font-size: 0.9em; + line-height: 1.5; + letter-spacing: normal; + white-space: pre-wrap; + word-wrap: break-word; + color: #eee; + border-radius: 4px; + // -webkit-overflow-scrolling: touch; + + code { + padding: 0; + margin: 0; + background: $midnightblue; + } +} + +code { + color: #eee; + background: $highlight-grey; + border-radius: 3px; + padding: 0 3px; + margin: 0 4px; + word-break: break-all; + letter-spacing: normal; +} + +blockquote { + border-left: 0.25em solid; + margin: 1em; + padding: 0 1em; + font-style: italic; + + cite { + font-weight: bold; + font-style: normal; + + &::before { + content: "—— "; + } + } +} + +a { + color: $text; + text-decoration: none; + border: none; + transition-property: color; + transition-duration: 0.4s; + transition-timing-function: ease-out; + + &:hover { + color: #fff; + } + + &:focus { + outline: none; + } +} + +hr { + opacity: 0.2; + border-width: 0 0 5px 0; + border-style: dashed; + background: transparent; + width: 50%; + margin: 1.8em auto; +} + +table { + border-collapse: collapse; + border-spacing: 0; + empty-cells: show; + width: 100%; + max-width: 100%; + + th, + td { + padding: 1.5%; + border: 1px solid; + } + + th { + font-weight: 700; + vertical-align: bottom; + } +} + +.section-inner { + margin: 0 auto; + max-width: 1200px; + width: 93%; +} + +.thin { + max-width: 720px; + margin: auto; +} + +.feather { + display: inline-block; + vertical-align: -0.125em; + width: 1em; + height: 1em; +} + +.desktop-only, +.desktop-only-ib { + display: none; +} + +// Accessibility +// +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + clip-path: none; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; +} + +// Header & Footer +// +#site-header { + position: fixed; + z-index: 1; + bottom: 0; + width: 100%; + box-sizing: border-box; + box-shadow: -1px -2px 3px rgba(0, 0, 0, 0.45); + background-color: $dark-grey; +} + +.hdr-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5em 0; + font-size: 1.2rem; + + .site-branding { + display: inline-block; + margin-right: 0.8em; + font-size: 1.2em; + } + + .site-nav { + display: inline-block; + font-size: 1.1em; + opacity: 0.8; + + a { + margin-left: 0.8em; + } + } +} + +.hdr-icons { + font-size: 1.2em; +} + +.hdr-social { + display: inline-block; + margin-left: 0.6em; + + & > a { + margin-left: 0.4em; + } +} + +.hdr-btn { + border: none; + background: none; + padding: 0; + margin-left: 0.4em; + cursor: pointer; +} + +#menu-btn { + display: none; + margin-left: 0.6em; + cursor: pointer; +} + +#mobile-menu { + position: fixed; + bottom: 4.8em; + right: 1.5em; + display: none; + padding: 0.6em 1.8em; + z-index: 1; + box-sizing: border-box; + box-shadow: -1px -2px 3px 0px rgba(0, 0, 0, 0.45); + background-color: $dark-grey; + + ul { + list-style: none; + margin: 0; + padding: 0; + line-height: 2; + font-size: 1.2em; + } +} + +#site-footer { + text-align: center; + font-size: 0.9em; + margin-bottom: 96px; + margin-top: 64px; + + p { + margin: 0; + } +} + +// Spotlight +// +#spotlight { + display: flex; + height: 100vh; + flex-direction: column; + align-items: center; + justify-content: center; + max-width: 93%; + margin: auto; + font-size: 1.5rem; + + &.error-404 { + flex-direction: row; + line-height: normal; + } +} + +p.img-404 { + margin: 0; + + svg { + width: 180px; + max-width: 100%; + height: auto; + } +} + +.banner-404 { + margin-left: 2em; + + h1 { + font-size: 3em; + margin: 0.5rem 0; + } + + p { + margin-top: 0; + margin-bottom: 0.6em; + } + + .btn-404 { + font-size: 0.8em; + + a { + display: inline-block; + border: 2px solid $text; + border-radius: 5px; + padding: 5px; + transition-property: color, border-color; + word-break: break-all; + + &:first-child { + margin-right: 1em; + } + + &:hover { + border-color: #fff; + } + + svg { + margin-right: 0.5em; + } + } + } +} + +#home-center { + display: flex; + flex-grow: 1; + flex-direction: column; + justify-content: center; +} + +#home-title { + margin: 0; + text-align: center; +} + +#home-subtitle { + margin-top: 0; + margin-bottom: 1.5em; + text-align: center; + line-height: normal; + font-size: 0.7em; + font-style: italic; + opacity: 0.9; +} + +#home-social { + font-size: 1.4em; + text-align: center; + opacity: 0.8; + + a { + margin: 0 0.2em; + } +} + +#home-nav { + opacity: 0.8; + + a { + display: block; + text-align: center; + margin-top: 0.5em; + } +} + +#home-footer { + text-align: center; + font-size: 0.6em; + line-height: normal; + @include dimmed; + + p { + margin-top: 0; + } +} + +// list.html +// +.posts-group { + display: flex; + margin-bottom: 1.9em; + line-height: normal; + + .post-year { + padding-top: 6px; + margin-right: 1.8em; + font-size: 1.6em; + @include dimmed; + } + + .posts-list { + flex-grow: 1; + margin: 0; + padding: 0; + list-style: none; + } + + .post-item { + border-bottom: 1px $highlight-grey dashed; + + a { + display: flex; + justify-content: space-between; + align-items: baseline; + padding: 12px 0; + } + } + + .post-day { + flex-shrink: 0; + margin-left: 1em; + @include dimmed; + } +} + +// single.html +// +.bg-img { + width: 100vw; + height: 100vh; + opacity: 0.03; + z-index: -1; + position: fixed; + top: 0; + background-attachment: fixed; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + transition: opacity 0.5s; +} + +.show-bg-img { + z-index: 100; + opacity: 1; + cursor: pointer; +} + +.post-header { + margin-top: 1.2em; + line-height: normal; + + .post-meta { + font-size: 0.9em; + letter-spacing: normal; + @include dimmed; + } + + h1 { + margin-top: 0.1em; + } +} + +hr.post-end { + width: 50%; + margin-top: 1.6em; + margin-bottom: 0.8em; + margin-left: 0; + border-style: solid; + border-bottom-width: 4px; +} + +.content { + text-align: justify; + text-justify: inter-ideograph; //For IE/Edge + + @include aTag; + + figure { + max-width: 100%; + height: auto; + margin: 0; + text-align: center; + + p { + font-size: 0.8em; + font-style: italic; + @include dimmed; + } + } + + figure.left { + float: left; + margin-right: 1.5em; + max-width: 50%; + } + + figure.right { + float: right; + margin-left: 1.5em; + max-width: 50%; + } + + figure.big { + max-width: 100vw; + } + + img { + display: block; + max-width: 100%; + height: auto; + margin: auto; + border-radius: 4px; + } + + ul, + ol { + padding: 0; + margin-left: 1.8em; + } +} + +.footnote-definition { + font-size: 0.85em; + + a { + box-shadow: none; + text-decoration: underline; + transition-property: color; + + &:hover { + background: transparent; + } + + &.footnote-return { + text-decoration: none; + } + } + + ol { + line-height: 1.8; + } + p { + display: inline; + } +} + +.footnote-ref a { + box-shadow: none; + text-decoration: none; + padding: 2px; + border-radius: 2px; + background-color: $midnightblue; +} + +.post-info { + font-size: 0.8rem; + line-height: normal; + @include dimmed; + + p { + margin: 0.8em 0; + } + + a:hover { + border-bottom: 1px solid $theme; + } + + svg { + margin-right: 0.8em; + } + + .tag { + margin-right: 0.5em; + + &::before { + content: "#"; + } + } +} + +#toc { + position: fixed; + left: 50%; + top: 0; + display: none; +} + +.toc-title { + margin-left: 1em; + margin-bottom: 0.5em; + font-size: 0.8em; + font-weight: bold; +} + +#TableOfContents { + font-size: 0.8em; + @include dimmed; + + ul { + padding-left: 1em; + margin: 0; + } + + & > ul { + list-style-type: none; + + ul ul { + font-size: 0.9em; + } + } + + a:hover { + border-bottom: $theme 1px solid; + } +} + +.post-nav { + display: flex; + justify-content: space-between; + margin-top: 1.5em; + margin-bottom: 2.5em; + font-size: 1.2em; + + a { + flex-basis: 50%; + flex-grow: 1; + } + + .next-post { + text-align: left; + padding-right: 5px; + } + .prev-post { + text-align: right; + padding-left: 5px; + } + + .post-nav-label { + font-size: 0.8em; + opacity: 0.8; + text-transform: uppercase; + } +} + +// Media Queries +// +@media (min-width: 800px) { + .site-main { + margin-top: 3em; + } + + hr.post-end { + width: 40%; + } +} + +@media (min-width: 960px) { + .site-main { + margin-top: 6em; + } +} + +@media (min-width: 1300px) { + .site-main { + margin-top: 8em; + } + + .desktop-only, + #toc.show-toc { + display: block; + } + + .desktop-only-ib { + display: inline-block; + } + + figure.left { + margin-left: -240px; + p { + text-align: left; + } + } + + figure.right { + margin-right: -240px; + p { + text-align: right; + } + } + + figure.big { + width: 1200px; + margin-left: -240px; + } + + hr.post-end { + width: 30%; + } + + #toc { + top: 13em; + margin-left: 370px; + max-width: 220px; + } +} + +@media (min-width: 1800px) { + .site-main { + margin-top: 10em; + } + + .section-inner { + max-width: 1600px; + } + + .thin { + max-width: 960px; + } + + figure.left { + max-width: 75%; + margin-left: -320px; + } + + figure.right { + max-width: 75%; + margin-right: -320px; + } + + figure.big { + width: 1600px; + margin-left: -320px; + } + + hr.post-end { + width: 30%; + } + + #toc { + top: 15em; + margin-left: 490px; + max-width: 300px; + } +} + +@media (max-width: 760px) { + .hide-in-mobile, + .site-nav.hide-in-mobile { + display: none; + } + + #menu-btn { + display: inline-block; + } + + .posts-group { + display: block; + + .post-year { + margin: -6px 0 4px; + } + } + + #spotlight.error-404 { + flex-direction: column; + text-align: center; + + .banner-404 { + margin: 0; + } + } +} + +@media (max-width: 520px) { + .content figure.left, + .content figure.right { + float: unset; + max-width: 100%; + margin: 0; + } + + hr.post-end { + width: 60%; + } + + #mobile-menu { + right: 1.2em; + } +} + +.code-badge { + margin: 0.4em 0em; +} + +.highlight-copy-btn { + margin-right: 7px; + float: right; + border: 0; + border-radius: 4px; + padding: 1px; + font-size: 0.7em; + line-height: 1.8; + color: #fff; + background-color: #777; + opacity: 0.6; + min-width: 55px; + text-align: center; +} diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png Binary files differnew file mode 100644 index 0000000..b57e2b8 --- /dev/null +++ b/static/favicon-32x32.png diff --git a/static/favicon.ico b/static/favicon.ico Binary files differnew file mode 100644 index 0000000..b57e2b8 --- /dev/null +++ b/static/favicon.ico diff --git a/static/js/main.js b/static/js/main.js new file mode 100644 index 0000000..a40c504 --- /dev/null +++ b/static/js/main.js @@ -0,0 +1,98 @@ +/** + * Utils + */ + +// Throttle +// +const throttle = (callback, limit) => { + let timeoutHandler = null; + return () => { + if (timeoutHandler == null) { + timeoutHandler = setTimeout(() => { + callback(); + timeoutHandler = null; + }, limit); + } + }; +}; + +// addEventListener Helper +// +const listen = (ele, e, callback) => { + if (document.querySelector(ele) !== null) { + document.querySelector(ele).addEventListener(e, callback); + } +}; + +/** + * Functions + */ + +// Auto Hide Header +// +let header = document.getElementById('site-header'); +let lastScrollPosition = window.pageYOffset; + +const autoHideHeader = () => { + let currentScrollPosition = window.pageYOffset; + if (currentScrollPosition > lastScrollPosition) { + header.classList.remove('slideInUp'); + header.classList.add('slideOutDown'); + } else { + header.classList.remove('slideOutDown'); + header.classList.add('slideInUp'); + } + lastScrollPosition = currentScrollPosition; +}; + +// Mobile Menu Toggle +// +let mobileMenuVisible = false; + +const toggleMobileMenu = () => { + let mobileMenu = document.getElementById('mobile-menu'); + if (mobileMenuVisible == false) { + mobileMenu.style.animationName = 'bounceInRight'; + mobileMenu.style.webkitAnimationName = 'bounceInRight'; + mobileMenu.style.display = 'block'; + mobileMenuVisible = true; + } else { + mobileMenu.style.animationName = 'bounceOutRight'; + mobileMenu.style.webkitAnimationName = 'bounceOutRight'; + mobileMenuVisible = false; + } +}; + +// Featured Image Toggle +// +const showImg = () => { + document.querySelector('.bg-img').classList.add('show-bg-img'); +}; + +const hideImg = () => { + document.querySelector('.bg-img').classList.remove('show-bg-img'); +}; + +// ToC Toggle +// +const toggleToc = () => { + document.getElementById('toc').classList.toggle('show-toc'); +}; + +if (header !== null) { + listen('#menu-btn', 'click', toggleMobileMenu); + listen('#toc-btn', 'click', toggleToc); + listen('#img-btn', 'click', showImg); + listen('.bg-img', 'click', hideImg); + + window.addEventListener( + 'scroll', + throttle(() => { + autoHideHeader(); + + if (mobileMenuVisible == true) { + toggleMobileMenu(); + } + }, 250) + ); +} diff --git a/templates/404.html b/templates/404.html index 882327e..ee5e10b 100644 --- a/templates/404.html +++ b/templates/404.html @@ -1 +1,26 @@ -404 Police Door not found. +{% extends "index.html" %} + +{% block header %} +{% endblock header %} + +{% block title %} +{% endblock title %} + +{% block main %} +<div id="spotlight" class="error-404 animated fadeIn"> + <p class="img-404"> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 167.8 163.4" fill="currentColor"><title>404-lighthouse</title><path d="M83,27.5c.5-8.4,12.5-8.4,13,0,.2,3.2,5.2,3.2,5,0C100.7,21.3,96,16,89.5,16S78.3,21.3,78,27.5c-.2,3.2,4.8,3.2,5,0Z" transform="translate(-6.6 -6.6)"/><path d="M92,18V9c0-3.2-5-3.2-5,0v9c0,3.2,5,3.2,5,0Z" transform="translate(-6.6 -6.6)"/><path d="M78,44.5l-7.9,86.7L69,143.5c-.3,3.2,4.7,3.2,5,0l7.9-86.7L83,44.5c.3-3.2-4.7-3.2-5,0Z" transform="translate(-6.6 -6.6)"/><path d="M96,44.5l7.9,86.7,1.1,12.3c.3,3.2,5.3,3.2,5,0l-7.9-86.7L101,44.5c-.3-3.2-5.3-3.2-5,0Z" transform="translate(-6.6 -6.6)"/><path d="M88.5,26.5v18a1,1,0,0,0,2,0v-18a1,1,0,0,0-2,0Z" transform="translate(-6.6 -6.6)"/><path d="M79.1,69.6l21.2-12.2a1.5,1.5,0,0,0-1.5-2.6L77.6,67a1.5,1.5,0,0,0,1.5,2.6Z" transform="translate(-6.6 -6.6)"/><path d="M76.4,99.2,102.7,84a1.5,1.5,0,0,0-1.5-2.6L74.9,96.6a1.5,1.5,0,0,0,1.5,2.6Z" transform="translate(-6.6 -6.6)"/><path d="M73.7,128.7l31.4-18.1a1.5,1.5,0,0,0-1.5-2.6L72.2,126.1a1.5,1.5,0,0,0,1.5,2.6Z" transform="translate(-6.6 -6.6)"/><path d="M98.5,42h-18L83,44.5v-18L80.5,29h18L96,26.5v18c0,3.2,5,3.2,5,0v-18A2.5,2.5,0,0,0,98.5,24h-18A2.5,2.5,0,0,0,78,26.5v18A2.5,2.5,0,0,0,80.5,47h18C101.7,47,101.7,42,98.5,42Z" transform="translate(-6.6 -6.6)"/><path d="M172,165c-5.8-.3-9.5-4.7-15.8-3.8-2.6.4-4.4,1.6-6.7,2.7s-6.9,1.3-10.2-.5-9.5-3.2-14.3-1c-3.3,1.5-5.6,3.3-9.5,2.4-2.4-.5-4.3-2.3-6.7-3.1a15.5,15.5,0,0,0-8.3-.3c-2.5.6-4.3,2.2-6.7,3.1-6.2,2.2-10.8-3.5-16.9-3.5s-10.7,5.6-17,3.5c-2.3-.8-4.2-2.5-6.7-3.1a15.4,15.4,0,0,0-8.3.3c-3.1,1-5.4,3.3-8.9,3.3s-5.8-2.2-8.9-3.3a15.4,15.4,0,0,0-8.8-.2c-3.4,1-5.7,3.3-9.5,3.5s-3.2,5.2,0,5c6-.3,10.9-5.5,17-3.5,2.4.8,4.2,2.5,6.7,3.1a15.4,15.4,0,0,0,8.3-.3c2.3-.8,4.2-2.5,6.7-3.1s6.3.9,9.5,2.4c4.8,2.3,9.8,1.5,14.3-1s6.7-2.2,10.2-.5,4.1,2.3,6.7,2.7a14.9,14.9,0,0,0,7.9-1c2.7-1.2,4.8-2.9,7.9-2.9s5.2,1.7,7.9,2.9a14.9,14.9,0,0,0,7.9,1c2.6-.4,4.4-1.6,6.7-2.7s6.9-1.3,10.2.5a15.9,15.9,0,0,0,16.1,0c7.3-3.9,11.9,2,19.1,2.3,3.2.2,3.2-4.8,0-5Z" transform="translate(-6.6 -6.6)"/><path d="M46.3,165.8l9.6-9.3c4.9-4.6,9.7-11.1,17.2-9.2,4.9,1.2,9.2,5.5,13,8.5s8,6.5,12.1,9.7c2.6,2,5-2.4,2.5-4.3-5-3.8-9.7-7.9-14.7-11.7s-8.7-7-14.6-7.6-11.2,3.6-15.9,8S47,158,42.7,162.2c-2.3,2.3,1.2,5.8,3.5,3.5Z" transform="translate(-6.6 -6.6)"/><path d="M84.8,152.8c8.3-3.7,16.7-8.3,26.1-5.6s15.5,9,19.4,16.6c1.5,2.9,5.8.3,4.3-2.5-4.5-8.7-12.9-16.2-22.4-18.9s-20.3,1.7-29.9,6.1c-2.9,1.3-.4,5.6,2.5,4.3Z" transform="translate(-6.6 -6.6)"/><g class="animated flash infinite slower" ><path d="M62.5,34h-23a1.5,1.5,0,0,0,0,3h23a1.5,1.5,0,0,0,0-3Z" transform="translate(-6.6 -6.6)"/><path d="M63.3,25.2l-18-9c-1.7-.9-3.2,1.7-1.5,2.6l18,9c1.7.9,3.2-1.7,1.5-2.6Z" transform="translate(-6.6 -6.6)"/><path d="M61.7,43.2l-18,9c-1.7.9-.2,3.5,1.5,2.6l18-9c1.7-.9.2-3.5-1.5-2.6Z" transform="translate(-6.6 -6.6)"/><path d="M116.5,37h23a1.5,1.5,0,0,0,0-3h-23a1.5,1.5,0,0,0,0,3Z" transform="translate(-6.6 -6.6)"/><path d="M117.3,27.8l18-9c1.7-.9.2-3.5-1.5-2.6l-18,9c-1.7.9-.2,3.5,1.5,2.6Z" transform="translate(-6.6 -6.6)"/><path d="M115.7,45.8l18,9c1.7.9,3.2-1.7,1.5-2.6l-18-9c-1.7-.9-3.2,1.7-1.5,2.6Z" transform="translate(-6.6 -6.6)"/></g></svg> + </p> + <div class="banner-404"> + <h1>404</h1> + <p>Oops, page not found…</p> + <p class="btn-404"> + <a href="{{config.base_url}}"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-home"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>Home</a> + <a href='{{config.base_url}}/posts'><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-archive"><polyline points="21 8 21 21 3 21 3 8"></polyline><rect x="1" y="3" width="22" height="5"></rect><line x1="10" y1="12" x2="14" y2="12"></line></svg>Archives</a> + </p> + </div> +</div> +{% endblock main %} + +{% block footer %} +{% endblock footer %} diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index a85bca1..0000000 --- a/templates/base.html +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - -<head> - <meta charset="utf-8"> - <title>MyBlog</title> - {% block rss %} - <link rel="alternate" type="application/atom+xml" title="RSS" href="{{ get_url(path="atom.xml", trailing_slash=false) }}"> - {% endblock %} -</head> - -<body> - <section class="section"> - <div class="container"> - {% block content %} {% endblock %} - </div> - </section> -</body> - -</html> diff --git a/templates/blog-page.html b/templates/blog-page.html deleted file mode 100644 index f0f638e..0000000 --- a/templates/blog-page.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -<h1 class="title"> - {{ page.title }} -</h1> -<p class="subtitle"><strong>{{ page.date }}</strong></p> -{{ page.content | safe }} -{% endblock content %} diff --git a/templates/blog.html b/templates/blog.html deleted file mode 100644 index 8e3cc52..0000000 --- a/templates/blog.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -<h1 class="title"> - {{ section.title }} -</h1> -<ul> - <!-- If you are using pagination, section.pages will be empty. You need to use the paginator object --> - {% for page in section.pages %} - <li><a href="{{ page.permalink | safe }}">{{ page.title }}</a></li> - {% endfor %} -</ul> -{% endblock content %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..9066226 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,121 @@ +{% import "macros.html" as macros %} +<!DOCTYPE html> +<html lang="en-us"> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta http-equiv="X-UA-Compatible" content="ie=edge" /> + <meta itemprop="name" content="{{config.title}}" /> + <meta itemprop="description" content="{{config.description}}" /> + + <link rel="apple-touch-icon" sizes="180x180" href="{{get_url(path="apple-touch-icon.png")}}"/> + <link rel="icon" type="image/png" sizes="32x32" href="{{get_url(path="favicon-32x32.png")}}" /> + <link + rel="icon" + type="image/png" + sizes="16x16" + href="{{get_url(path="favicon-16x16.png")}}" + /> + <link + rel="shortcut icon" + href="{{get_url(path="favicon.ico")}}" + /> + <link rel="stylesheet" href="{{get_url(path="style.css")}}"/> + {% if page.title %} + <title>{{page.title}}</title> + {% else %} + <title>{{config.title}}</title> + {% endif %} + + {% if config.generate_feed %} + <link rel="alternate" type="application/rss+xml" title="RSS" href="{{ get_url(path=config.feed_filename, trailing_slash=false) }}"> + {% endif %} + + <body id="page"> + + {% block header %} + {% endblock header %} + + {% block title %} + <div id="spotlight" class="animated fadeIn"> + <div id="home-center"> + <h1 id="home-title">{{config.title}}</h1> + <p id="home-subtitle">{{config.extra.home_subtitle}}</p> + <div id="home-social"> + {{macros::render_social_icons()}} + </div> + {% endblock title %} + {% block main %} + <nav id="home-nav" class="site-nav"> + {% for s in config.extra.hermit_menu %} + <a href="{{config.base_url ~ s.link}}">{{s.name}}</a> + {% endfor %} + </nav> + {% endblock main %} + </div> + + {% block footer %} + <div id="home-footer"> + <p>© {{ now() | date(format="%Y")}} + <a href="{{config.base_url}}">{{config.extra.author.name}}</a> + {% if config.generate_feed %} + · <a href="{{ get_url(path=config.feed_filename, trailing_slash=false) }}" target="_blank" title="rss"> + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rss"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg> + {% endif %} + </a> + </p> + </div> + {% endblock footer %} + </div> + + <script src="{{get_url(path="js/main.js")}}"></script> + + <!-- Math rendering --> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous"> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script> + <script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" + onload="renderMathInElement(document.body, { delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false}, {left: '\\[', right: '\\]', display: true}, {left: '\\(', right: '\\)', display: false}]});"></script> + + {% if config.extra.highlightjs.enable %} + <link href="https://unpkg.com/highlightjs-badge/highlightjs/styles/{{config.extra.highlightjs.theme}}.css" rel="stylesheet"> + <!-- https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.1/build/styles/ for min version --> + <script src="https://unpkg.com/highlightjs-badge/highlightjs/highlight.pack.js"></script> + <script src="https://unpkg.com/highlightjs-badge/highlightjs-badge.min.js"></script> + <script> + var pres = document.querySelectorAll("pre>code"); + for (var i = 0; i < pres.length; i++) { + hljs.highlightBlock(pres[i]); + } + </script> + {% if config.extra.highlightjs.clipboard %} + <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script> + <script> + var options = { + copyIconClass: "gg-clipboard", + checkIconClass: "gg-check" + }; + window.highlightJsBadge(options); + </script> + {% endif %} + + {% endif %} + + {% if not config.extra.highlightjs.enable %} + <script src="{{get_url(path="js/copy.js")}}"></script> + {% endif %} + <script src="{{get_url(path="js/main.js")}}"></script> + + {% block js_footer %} + {% endblock js_footer %} + + {% if config.extra.google_analytics.enable %} + <!-- Global Site Tag (gtag.js) - Google Analytics --> + <script async src="https://www.googletagmanager.com/gtag/js?id={{ config.extra.google_analytics.id }}"></script> + <script> + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + gtag('config', '{{ config.extra.google_analytics.id }}'); + </script> + {% endif %} + </body> +</html> diff --git a/templates/macros.html b/templates/macros.html new file mode 100644 index 0000000..ab2f0cc --- /dev/null +++ b/templates/macros.html @@ -0,0 +1,77 @@ +{% macro read_time(words) %} +<span class="reading-time" title="Estimated read time"> + {% if words < 530 %} + 1 min read + {% else %} + {{ words / 265 | round }} min read + {% endif %} +</span> +{% endmacro read_time %} + +{% macro footer() %} + +<footer id="site-footer" class="section-inner thin animated fadeIn faster"> + <p>© {{ now() | date(format="%Y") }} <a href="{{ config.base_url }}">{{ config.extra.author.name }}</a>{{ config.extra.footer_copyright | safe }}</p> + <p>Made with <a href="https://www.getzola.org" target="_blank" rel="noopener">Zola</a> · Theme <a href="https://github.com/VersBinarii/hermit_zola" target="_blank" rel="noopener">Hermit_Zola</a> + {% if config.generate_feed %} + · <a href="{{ get_url(path=config.feed_filename, trailing_slash=false) }}" target="_blank" title="rss"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rss"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg></a> + {% endif %} + </p> +</footer> + +{% endmacro footer %} + + + +{% macro render_social_icons() %} +{% for icon in config.extra.hermit_social %} +<a href="{{ icon.link }}" target="_blank" rel="noopener me" + title="{{ icon.name }}"> + {% if icon.name == "codepen" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"></polygon><line x1="12" y1="22" x2="12" y2="15.5"></line><polyline points="22 8.5 12 15.5 2 8.5"></polyline><polyline points="2 15.5 12 8.5 22 15.5"></polyline><line x1="12" y1="2" x2="12" y2="8.5"></line></svg> + {% elif icon.name == "facebook" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg> + {% elif icon.name == "github" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg> + {% elif icon.name == "gitlab" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"></path></svg> + {% elif icon.name == "instagram" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.5" y2="6.5"></line></svg> + {% elif icon.name == "linkedin" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg> + {% elif icon.name == "slack" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.08 9C19.81 1.41 16.54-.35 9 1.92S-.35 7.46 1.92 15 7.46 24.35 15 22.08 24.35 16.54 22.08 9z"></path><line x1="12.57" y1="5.99" x2="16.15" y2="16.39"></line><line x1="7.85" y1="7.61" x2="11.43" y2="18.01"></line><line x1="16.39" y1="7.85" x2="5.99" y2="11.43"></line><line x1="18.01" y1="12.57" x2="7.61" y2="16.15"></line></svg> + {% elif icon.name == "stackoverflow" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2.913 16.041v6.848h17.599v-6.848M7.16 18.696h8.925M7.65 13.937l8.675 1.8M9.214 9.124l8.058 3.758M12.086 4.65l6.849 5.66M15.774 1.111l5.313 7.162"/></svg> + {% elif icon.name == "telegram" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.198 2.433a2.242 2.242 0 0 0-1.022.215l-8.609 3.33c-2.068.8-4.133 1.598-5.724 2.21a405.15 405.15 0 0 1-2.849 1.09c-.42.147-.99.332-1.473.901-.728.968.193 1.798.919 2.286 1.61.516 3.275 1.009 4.654 1.472.509 1.793.997 3.592 1.48 5.388.16.36.506.494.864.498l-.002.018s.281.028.555-.038a2.1 2.1 0 0 0 .933-.517c.345-.324 1.28-1.244 1.811-1.764l3.999 2.952.032.018s.442.311 1.09.355c.324.022.75-.04 1.116-.308.37-.27.613-.702.728-1.196.342-1.492 2.61-12.285 2.997-14.072l-.01.042c.27-1.006.17-1.928-.455-2.474a1.654 1.654 0 0 0-1.034-.407z"/></svg> + {% elif icon.name == "mastodon" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" stroke="none"><path fill="none" d="M0 0h24v24H0z"/> <path fill-rule="nonzero" d="M3.018 12.008c-.032-1.26-.012-2.448-.012-3.442 0-4.338 2.843-5.61 2.843-5.61 1.433-.658 3.892-.935 6.45-.956h.062c2.557.02 5.018.298 6.451.956 0 0 2.843 1.272 2.843 5.61 0 0 .036 3.201-.396 5.424-.275 1.41-2.457 2.955-4.963 3.254-1.306.156-2.593.3-3.965.236-2.243-.103-4.014-.535-4.014-.535 0 .218.014.426.04.62.084.633.299 1.095.605 1.435.766.85 2.106.93 3.395.974 1.82.063 3.44-.449 3.44-.449l.076 1.646s-1.274.684-3.542.81c-1.25.068-2.803-.032-4.612-.51-1.532-.406-2.568-1.29-3.27-2.471-1.093-1.843-1.368-4.406-1.431-6.992zm3.3 4.937v-2.548l2.474.605a20.54 20.54 0 0 0 1.303.245c.753.116 1.538.2 2.328.235 1.019.047 1.901-.017 3.636-.224 1.663-.199 3.148-1.196 3.236-1.65.082-.422.151-.922.206-1.482a33.6 33.6 0 0 0 .137-2.245c.015-.51.02-.945.017-1.256v-.059c0-1.43-.369-2.438-.963-3.158a3.008 3.008 0 0 0-.584-.548c-.09-.064-.135-.089-.13-.087-1.013-.465-3.093-.752-5.617-.773h-.046c-2.54.02-4.62.308-5.65.782.023-.01-.021.014-.112.078a3.008 3.008 0 0 0-.584.548c-.594.72-.963 1.729-.963 3.158 0 .232 0 .397-.003.875a77.483 77.483 0 0 0 .014 2.518c.054 2.197.264 3.835.7 5.041.212.587.472 1.07.78 1.45a5.7 5.7 0 0 1-.18-1.505zM8.084 6.37a1.143 1.143 0 1 1 0 2.287 1.143 1.143 0 0 1 0-2.287z"/> </svg> + {% elif icon.name == "twitter" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg> + {% elif icon.name == "youtube" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg> + {% elif icon.name == "email" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg> + {% elif icon.name == "dribbble" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle style="font-variation-settings:normal" cx="12.004" cy="12" r="9.39" paint-order="stroke fill markers"/><path style="font-variation-settings:normal" d="M5.858 19.136s2.343-5.79 8.161-6.422c5.818-.633 7.442.479 7.442.479M2.68 10.839s4.91.752 10.112-1.11c5.202-1.863 5.887-4.601 5.887-4.601"/><path style="font-variation-settings:normal" d="M8.533 3.208s2.888 2.73 5.339 9.235c2.451 6.505 2.344 8.4 2.344 8.4"/></svg> + {% elif icon.name == "behance" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path paint-order="stroke fill markers" stroke-linejoin="miter" stroke-width="2" style="font-variation-settings:normal" d="M1.774 18.063V5.466h5.51c1.978 0 3.116 1.326 3.055 2.806-.043 1.049-.711 2.988-2.643 2.988h-5.93H7.73c1.224 0 3.532 1.13 3.532 3.532 0 2.4-1.873 3.27-3.318 3.27zm12.57-4.459h7.89s.012-4.18-4.167-4.18c-5.237 0-5.277 9.11-.3 9.11 3.06 0 3.935-1.806 3.935-1.806M15.526 5.823h4.987"/></svg> + {% elif icon.name == "freepik" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5.737 17.28s3.423.84 7.61.162c4.188-.676 6.862-2.57 6.862-2.57s.28 3.943-4.967 5.33c-5.248 1.388-8.543.657-9.506-2.923zm-.62-3.104s4.491 1.361 8.728.344c4.237-1.016 5.94-2.568 5.94-2.568s-1.81-6.448-7.405-5.648c-5.597.8-8.061 4.414-7.263 7.872z" style="font-variation-settings:normal" stroke-linejoin="round"/><path d="M1.265 12.607c.159-1.98.561-3.898 2.08-5.701m5.148-3.29c2.006-.66 3.968-1.157 6.446-.844m5.202 2.98c1.192 1.275 1.963 2.163 2.594 3.815" style="font-variation-settings:normal" stroke="currentColor" stroke-linejoin="round"/><circle r=".989" cy="10.404" cx="14.746" fill="currentColor" stroke="none"/><circle cx="9.637" cy="11.305" r="1.477" fill="currentColor" stroke="none"/></svg> + {% elif icon.name == "adobestock" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path style="font-variation-settings:normal" d="M2.235 2.235h19.53v19.53H2.235z"/><path style="font-variation-settings:normal" d="M6.165 16.659s3.16 1.2 4.602-.17c1.37-1.3.787-3.163-.754-4.05-1.68-.969-3.284-1.788-3.036-3.536.446-3.138 4.386-1.851 4.386-1.851M15.792 7.794v7.774c0 1.023.635 1.766 2.043 1.624M17.826 10.04h-3.582"/></svg> + {% elif icon.name == "shutterstock" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect ry="5" rx="5" height="20" width="20" y="2" x="2"/><path d="M7.728 11.725V9.032c0-1.025.824-1.85 1.849-1.85h2.815m3.88 5.093v2.693a1.845 1.845 0 0 1-1.849 1.85h-2.815" stroke-linecap="square" stroke-linejoin="miter"/></svg> + {% elif icon.name == "123rf" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path style="font-variation-settings:normal" d="M7.48 3.826c-.702 0-1.345.388-1.675 1.008l-.711 1.334a4.214 4.214 0 0 1-1.614 1.67l-.388.224a2.207 2.207 0 0 0-1.104 1.913v8.607c0 .878.712 1.592 1.59 1.592h1.186c.468 0 .916-.19 1.244-.524l1.478-1.504c.266-.27.628-.421 1.006-.421h7.04c.378 0 .74.151 1.005.421l1.478 1.504c.329.334.778.524 1.247.524h1.183c.879 0 1.592-.714 1.592-1.592V9.975c0-.79-.422-1.518-1.106-1.912l-.388-.225a4.214 4.214 0 0 1-1.613-1.67l-.711-1.334a1.899 1.899 0 0 0-1.676-1.008z" stroke-linejoin="miter"/><circle cx="12" cy="12.467" r="2.723"/></svg> + {% elif icon.name == "dreamstime" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19.834 20.994s4.824-4.08 2.044-12.03C19.252 1.456 6.822-1.223 2.508 7.566c-3.936 8.023 2.18 14.46 7.88 14.374 4.889-.075 8.475-3.226 7.813-8.604-.76-6.18-6.73-6.816-9.275-4.184-2.256 2.334-1.816 7.034.873 7.823 2.241.844 4.661-1.265 3.161-3.215" style="font-variation-settings:normal" stroke="currentColor" stroke-linejoin="bevel" paint-order="stroke fill markers"/></svg> + {% elif icon.name == "paypal" %} + <svg xmlns="http://www.w3.org/2000/svg" class="feather" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.144 19.532l1.049-5.751c.11-.606.691-1.002 1.304-.948 2.155.192 6.877.1 8.818-4.002 2.554-5.397-.59-7.769-6.295-7.769H7.43a1.97 1.97 0 0 0-1.944 1.655L2.77 19.507a.857.857 0 0 0 .846.994h2.368a1.18 1.18 0 0 0 1.161-.969zM7.967 22.522a.74.74 0 0 0 .666.416h2.313c.492 0 .923-.351 1.003-.837l.759-4.601c.095-.523.597-.866 1.127-.819 1.86.166 5.567-.118 6.85-3.821.554-1.6.705-2.954.408-4.018" style="font-variation-settings:normal" stroke="currentColor" stroke-linejoin="miter"/></svg> + {% else %} + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg> + {% endif %} +</a> +{% endfor %} +{% endmacro render_social_icons %} diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..bd58389 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,176 @@ +{% extends "index.html" %} + +{% import "macros.html" as macros %} + +{% block header %} +<header id="site-header" class="animated slideInUp faster"> + <div class="hdr-wrapper section-inner"> + <div class="hdr-left"> + <div class="site-branding"> + <a href="{{ config.base_url}}">{{ config.title }}</a> + </div> + <nav class="site-nav hide-in-mobile"> + + {% for menu_item in config.extra.hermit_menu %} + <a href="{{ config.base_url ~ menu_item.link }}">{{ menu_item.name }}</a> + {% endfor %} + </nav> + </div> + <div class="hdr-right hdr-icons"> + <span class="hdr-social hide-in-mobile"> + {{ macros::render_social_icons() }} + </span> + <button id="menu-btn" class="hdr-btn" title="Menu"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="2" + stroke-linecap="round" + stroke-linejoin="round" + class="feather feather-menu" + > + <line x1="3" y1="12" x2="21" y2="12"></line> + <line x1="3" y1="6" x2="21" y2="6"></line> + <line x1="3" y1="18" x2="21" y2="18"></line> + </svg> + </button> + </div> + </div> +</header> +<div id="mobile-menu" class="animated fast"> + <ul> + {% for menu_item in config.extra.hermit_menu %} + <li><a href="{{ config.base_url ~ menu_item.link }}">{{ menu_item.name }}</a></li> + {% endfor %} + </ul> +</div> +{% endblock header %} + +{% block title %} +{% endblock title %} + +{% block main %} +<main class="site-main section-inner animated fadeIn faster"> + <article class="thin"> + <header class="post-header"> + <div class="post-meta"> + {% if page.date %} + <span>{{ page.date | date(format="%b %d, %Y")}}</span> + <small> - {{ macros::read_time(words=page.word_count) }}</small> + {% endif %} + {% if page.extra.toc %} + <button id="toc-btn" class="hdr-btn desktop-only-ib"> + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" + viewBox="0 0 24 24" fill="none" stroke="currentColor" + stroke-width="2" stroke-linecap="round" stroke-linejoin="round" + class="feather feather-list"> + <line x1="8" y1="6" x2="21" y2="6"></line> + <line x1="8" y1="12" x2="21" y2="12"></line> + <line x1="8" y1="18" x2="21" y2="18"></line> + <line x1="3" y1="6" x2="3" y2="6"></line> + <line x1="3" y1="12" x2="3" y2="12"></line> + <line x1="3" y1="18" x2="3" y2="18"></line> + </svg> + </button> + {% endif %} + </div> + <h1>{{ page.title }}</h1> + </header> + + <div class="content"> + + {{ page.content | safe }} + </div> + <hr class="post-end"> + <footer class="post-info"> + {% if page.taxonomies and page.taxonomies.tags %} + <p> + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag meta-icon"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7" y2="7"></line></svg> + {% for k, tags in page.taxonomies %} + {% for t in tags %} + <span class="tag"><a href="{{get_taxonomy_url(kind="tags", name=t)}}">{{t}}</a></span> + {% endfor %} + {% endfor %} + </p> + {% endif %} + <p><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file-text"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>{{ page.word_count}} Words</p> + {% if page.date %} + <p><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>{{ page.date }}</p> + {% endif %} + </footer> + </article> + {% if page.extra.toc %} + <aside id="toc"> + <div id="TableOfContents"> + <div class="toc-title">Table of content</div> + <ul> + {% for h1 in page.toc %} + <li> + <a href="{{h1.permalink | safe}}">{{ h1.title }}</a> + {% if h1.children %} + <ul> + {% for h2 in h1.children %} + <li> + <a href="{{h2.permalink | safe}}">{{ h2.title }}</a> + </li> + {% endfor %} + </ul> + {% endif %} + </li> + {% endfor %} + </ul> + </div> + </aside> + {% endif %} + + <div class="post-nav thin"> + {% if page.later %} + <a class="next-post" href="{{ page.later.permalink }}"> + <span class="post-nav-label"> + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left"> + <line x1="19" y1="12" x2="5" y2="12"></line> + <polyline points="12 19 5 12 12 5"></polyline> + </svg> Newer</span><br> + <span>{{ page.later.title }}</span> + </a> + {% endif %} + {% if page.earlier %} + <a class="prev-post" href="{{ page.earlier.permalink }}"> + <span class="post-nav-label">Older <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></span><br> + <span>{{ page.earlier.title }}</span> + </a> + {% endif %} + </div> + + {% if config.extra.disqus.enable and not page.extra.disable_comments%} + <div id="disqus_thread" class="thin"></div> + <script> + /** + * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. + * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables */ + + (function() { // DON'T EDIT BELOW THIS LINE + var disqus_config = function () { + this.page.url = "{{ page.permalink }}"; // Replace PAGE_URL with your page's canonical URL variable + this.page.identifier = "{{ page.permalink }}"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable + }; + var d = document, s = d.createElement('script'); + s.src = 'https://{{config.extra.disqus.shortname}}.disqus.com/embed.js'; + s.setAttribute('data-timestamp', +new Date()); + (d.head || d.body).appendChild(s); + })(); + </script> + <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> + {% endif %} +</main> +{% endblock main %} + +{% block footer %} + +{{ macros::footer() }} + +{% endblock footer %} diff --git a/templates/section.html b/templates/section.html new file mode 100644 index 0000000..446c57c --- /dev/null +++ b/templates/section.html @@ -0,0 +1,73 @@ +{% extends "index.html" %} {% import "macros.html" as macros %} {% block header +%} +<header id="site-header" class="animated slideInUp faster"> + <div class="hdr-wrapper section-inner"> + <div class="hdr-left"> + <div class="site-branding"> + <a href="{{ config.base_url}}">{{ config.title }}</a> + </div> + <nav class="site-nav hide-in-mobile"> + {% for menu_item in config.extra.hermit_menu %} + <a href="{{ config.base_url ~ menu_item.link }}" + >{{ menu_item.name }}</a + > + {% endfor %} + </nav> + </div> + <div class="hdr-right hdr-icons"> + <span class="hdr-social hide-in-mobile"> + {{ macros::render_social_icons() }} + </span> + <button id="menu-btn" class="hdr-btn" title="Menu"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="2" + stroke-linecap="round" + stroke-linejoin="round" + class="feather feather-menu" + > + <line x1="3" y1="12" x2="21" y2="12"></line> + <line x1="3" y1="6" x2="21" y2="6"></line> + <line x1="3" y1="18" x2="21" y2="18"></line> + </svg> + </button> + </div> + </div> +</header> +<div id="mobile-menu" class="animated fast"> + <ul> + {% for menu_item in config.extra.hermit_menu %} + <li> + <a href="{{ config.base_url ~ menu_item.link }}">{{ menu_item.name }}</a> + </li> + {% endfor %} + </ul> +</div> +{% endblock header %} {% block title %} {% endblock title %} {% block main %} + +<main class="site-main section-inner thin animated fadeIn faster"> + <h1>{{ section.title }}</h1> + {% for year, pages in section.pages | group_by(attribute="year") %} + <div class="posts-group"> + <div class="post-year">{{ year }}</div> + <ul class="posts-list"> + {% for page in pages %} + <li class="post-item"> + <a href="{{ page.permalink }}"> + <span class="post-title">{{ page.title }}</span> + <span class="post-day">{{ page.date | date(format="%b %d") }}</span> + </a> + </li> + {% endfor %} + </ul> + </div> + {% endfor %} +</main> + +{% endblock main %} {% block footer %} {{ macros::footer() }} {% endblock footer +%} diff --git a/templates/tags/list.html b/templates/tags/list.html new file mode 100644 index 0000000..8f9a35f --- /dev/null +++ b/templates/tags/list.html @@ -0,0 +1,54 @@ +{% extends "index.html" %} {% import "macros.html" as macros %} {% block header +%} +<header id="site-header" class="animated slideInUp faster"> + <div class="hdr-wrapper section-inner"> + <div class="hdr-left"> + <div class="site-branding"> + <a href="{{ config.base_url}}">{{ config.title }}</a> + </div> + <nav class="site-nav hide-in-mobile"> + {% for menu_item in config.extra.hermit_menu %} + <a href="{{ menu_item.link }}">{{ menu_item.name }}</a> + {% endfor %} + </nav> + </div> + <div class="hdr-right hdr-icons"> + <span class="hdr-social hide-in-mobile"> + {{ macros::render_social_icons() }} + </span> + <button id="menu-btn" class="hdr-btn" title="Menu"> + <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" + stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" + class="feather feather-menu"> + <line x1="3" y1="12" x2="21" y2="12"></line> + <line x1="3" y1="6" x2="21" y2="6"></line> + <line x1="3" y1="18" x2="21" y2="18"></line> + </svg> + </button> + </div> + </div> +</header> +<div id="mobile-menu" class="animated fast"> + <ul> + {% for menu_item in config.extra.hermit_menu %} + <li><a href="{{ menu_item.link }}">{{ menu_item.name }}</a></li> + {% endfor %} + </ul> +</div> +{% endblock header %} {% block title %} {% endblock title %} {% block main %} + +<main class="site-main section-inner thin animated fadeIn faster" style="text-align: center;"> + {% block content %} + {% for tag in terms %} + <header class="post-header"> + <h1 class="post-header__title"><a href="{{ config.base_url }}/tags/{{ tag.slug }}">{{ tag.name }}</a></h1> + <p class="post-header__info"> + {{ tag.pages | length }} post{{ tag.pages | length | pluralize }} + </p> + </header> + {% endfor %} + {% endblock content %} +</main> + +{% endblock main %} {% block footer %} {{ macros::footer() }} {% endblock footer +%} diff --git a/templates/tags/single.html b/templates/tags/single.html new file mode 100644 index 0000000..e04b872 --- /dev/null +++ b/templates/tags/single.html @@ -0,0 +1,71 @@ +{% extends "index.html" %} {% import "macros.html" as macros %} {% block header +%} +<header id="site-header" class="animated slideInUp faster"> + <div class="hdr-wrapper section-inner"> + <div class="hdr-left"> + <div class="site-branding"> + <a href="{{ config.base_url}}">{{ config.title }}</a> + </div> + <nav class="site-nav hide-in-mobile"> + {% for menu_item in config.extra.hermit_menu %} + <a href="{{ menu_item.link }}">{{ menu_item.name }}</a> + {% endfor %} + </nav> + </div> + <div class="hdr-right hdr-icons"> + <span class="hdr-social hide-in-mobile"> + {{ macros::render_social_icons() }} + </span> + <button id="menu-btn" class="hdr-btn" title="Menu"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="2" + stroke-linecap="round" + stroke-linejoin="round" + class="feather feather-menu" + > + <line x1="3" y1="12" x2="21" y2="12"></line> + <line x1="3" y1="6" x2="21" y2="6"></line> + <line x1="3" y1="18" x2="21" y2="18"></line> + </svg> + </button> + </div> + </div> +</header> +<div id="mobile-menu" class="animated fast"> + <ul> + {% for menu_item in config.extra.hermit_menu %} + <li><a href="{{ menu_item.link }}">{{ menu_item.name }}</a></li> + {% endfor %} + </ul> +</div> +{% endblock header %} {% block title %} {% endblock title %} {% block main %} + +<main class="site-main section-inner thin animated fadeIn faster"> + <h1>{{ term.name }}</h1> + {% for year, pages in term.pages | group_by(attribute="year") %} + <div class="posts-group"> + <div class="post-year">{{ year }}</div> + <ul class="posts-list"> + {% for page in pages %} + <li class="post-item"> + <a href="{{ page.permalink }}"> + <span class="post-title">{{ page.title }}</span> + <span class="post-day" + >{{ page.date | date(format="%b %d") }}</span + > + </a> + </li> + {% endfor %} + </ul> + </div> + {% endfor %} +</main> + +{% endblock main %} {% block footer %} {{ macros::footer() }} {% endblock footer +%} diff --git a/themes/404.html b/themes/404.html new file mode 100644 index 0000000..882327e --- /dev/null +++ b/themes/404.html @@ -0,0 +1 @@ +404 Police Door not found. diff --git a/themes/config.toml b/themes/config.toml new file mode 100644 index 0000000..68fa938 --- /dev/null +++ b/themes/config.toml @@ -0,0 +1,25 @@ +# Theme used +theme = "emily_zola_theme" + +# The URL the site will be built for +base_url = "https://alphara.art" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = true + +# RSS feed generation +generate_feed = true + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true + +[extra] +# Put all your custom variables here + +# MathJax rendering support +math = true diff --git a/themes/hermit_zola b/themes/hermit_zola deleted file mode 160000 -Subproject 57063f89ca7a5765a822ec695ab001815105881 |