From 744d837327e0c6282d696021f809c17d3223551b Mon Sep 17 00:00:00 2001 From: lf- Date: Tue, 9 Mar 2021 07:17:54 -0800 Subject: [PATCH] cards, new post thing --- .gitignore | 1 + README.md | 29 ++ content/posts/jade-sparkles.md | 38 +++ new-post.js | 62 ++++ package-lock.json | 560 +++++++++++++++++++++++++++++++++ package.json | 8 + sass/main.scss | 3 +- static/icon.png | Bin 0 -> 11831 bytes templates/base.html | 24 +- templates/page.html | 15 + 10 files changed, 733 insertions(+), 7 deletions(-) create mode 100644 README.md create mode 100644 content/posts/jade-sparkles.md create mode 100755 new-post.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 static/icon.png diff --git a/.gitignore b/.gitignore index db37107..0447dfe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ public/ .deploy_config static/processed_images +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..af5523b --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Sources for `jade.fyi` + +These are the source files for `jade.fyi`. I used to use the site +`lfcode.ca`, whose Gatsby based sources are available on the `old` branch of +this repository. Those ones are no longer maintained. + +If you have any issues with using the site, especially relating to +accessibility, please file an issue on this repository. I consider it a +priority for this site to be usable to everyone. + +## TODO + +- [ ] Readd the "recipes" section from the old site + +## Usage + +This one is based on Zola. After installing the latest (preferably `next` +branch from git) version of Zola, you can build the site as follows: + +``` +# starts a server on 127.0.0.1:1111 serving the website +$ zola serve + +# builds the website to public/ +$ zola build + +# deploys what's in public/ to some web server +$ ./deploy.sh +``` \ No newline at end of file diff --git a/content/posts/jade-sparkles.md b/content/posts/jade-sparkles.md new file mode 100644 index 0000000..8ad3fb8 --- /dev/null +++ b/content/posts/jade-sparkles.md @@ -0,0 +1,38 @@ ++++ +date = "2021-03-09" +draft = false +path = "/blog/jade-sparkles" +tags = ["personal"] +title = "jade ✨" ++++ + +Hi! + +Well, it's about a year late to be posting this, but I'm transgender (and +many other labels, which I have elided). In late 2019, I had a hell of a long +weekend where I reconsidered a bunch of dusty memories I had forgotten about +or repressed. [I also rewrote the website while contemplating this](/blog/rewriting-the-blog-in-gatsby/). +At the time, though, I was not very confident in how I wanted to present +myself in general. This has changed, which is why I am writing this post. + +My pronouns are she/her or they/them, and I prefer my name to be styled in +lowercase. + +jade ✨ + +~ + +If you're having similar experiences, I know how isolating and scary it can +be initially. Feel free to [contact me](/about) if you want someone to talk +to. I'll do my best to help or just to be a friend. + +I've also rewritten the website, for its third iteration, and moved domains +to `jade.fyi` to better align it with who I am. This time the blog is in +Zola, a static site generator written in Rust. If you want source code for +this site, [it's here](https://github.com/lf-/blog). + +I consider accessibility to be a core feature. If you have any trouble using +the site, please email me or file an issue. + +N.B.: rewriting the website is not "cute", jades only rewrite their website +while in extreme distress. \ No newline at end of file diff --git a/new-post.js b/new-post.js new file mode 100755 index 0000000..158a12f --- /dev/null +++ b/new-post.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node +const fs = require('fs') + +const yargs = require('yargs') +const editor = require('external-editor') +const graymatter = require('gray-matter') +const toml = require('toml') + +function ISO8601(epochtime) { + const date = new Date(epochtime) + // we need to add one to the month because JS is dumb and counts 0-11 + return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${(date.getDate()).toString().padStart(2, '0')}` +} + +const template = `\ ++++ +date = "${ISO8601(Date.now())}" +draft = false +path = "/blog/title" +tags = [] +title = "TITLE" ++++ + +` + +function main() { + + const args = + yargs.options({ + editor: { + type: 'string', + describe: 'editor to use for making the post', + } + }).parse() + + const ed = new editor.ExternalEditor(template, { postfix: '.md' }) + if (args.editor) { + ed.editor.bin = args.editor + } + + const postText = ed.run() + const gm = graymatter(postText, { + excerpt: true, + excerpt_separator: '', + engines: { + 'toml': toml.parse.bind(toml), + }, + language: 'toml', + delimiters: '+++', + }); + const slug = /^\/blog\/(.+)$/.exec(gm.data.path)[1] + + // if the user doesn't change the post there is no value in saving it + if (postText === template) { + return; + } + const filename = `content/posts/${slug}.md` + + fs.writeFileSync(filename, postText) +} + +main() diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2ce1eec --- /dev/null +++ b/package-lock.json @@ -0,0 +1,560 @@ +{ + "name": "zlog", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "external-editor": "^3.1.0", + "gray-matter": "^4.0.2", + "toml": "^3.0.0", + "yargs": "^16.2.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "dependencies": { + "js-yaml": "^3.11.0", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "requires": { + "js-yaml": "^3.11.0", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5567177 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "external-editor": "^3.1.0", + "gray-matter": "^4.0.2", + "toml": "^3.0.0", + "yargs": "^16.2.0" + } +} diff --git a/sass/main.scss b/sass/main.scss index 6e9f049..4bd2184 100644 --- a/sass/main.scss +++ b/sass/main.scss @@ -1,5 +1,6 @@ $text: #ddd; $bg: #540362; +$link: #f778e3; $lowerbg1: darken($bg, 5); $higherbg1: lighten($bg, 10); $lower1: darken($text, 18); @@ -62,7 +63,7 @@ body { } a { - color: #f778e3; + color: $link; text-decoration: none; } diff --git a/static/icon.png b/static/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c89f0468c3cf34a02f0266413ba31c4590c456f GIT binary patch literal 11831 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 z zJT>pHSwjnGX_CC?zpOH*A4NhZcJ{DH=ytNT&AsX%9x-`y*14{WTwi{N7)NY*-ekC= zVR3R%_1X7d=bYO3^WV&$`wj-j9heyK=Gc3d52h~y* zN#a=-4r%9m@#ca}YgJ6zGuVE#ggMOrSaT^{;$^D*bMHO!&%S8A*xI`=dVO8ao?W&7 zMXvIl;4vwfnZxGfCdhT<$VDOFze#@T4VuS6t)wZ9d#-RC;7L<{W|(9!D`AaWr4yQY|D&A_ywb=B&J^Q@7?1M)<%&|dJ9zXaSxSZpje$)5E!td@{o5$IyG<=wI zYTw^^5_ZfCf)XwcA$HOs>Nb`ohs&8}gsi$yBT?KpErV6t@x}fuxy_jkzU)zM;wz+U z9q!*s&iD8?WrxJ1qXteAX&(;v{7O!m8+%@kFXCp~stt|qhyNM;;lJGQX=Bm-y7K+s zExw1(6+RI1aQm;ryE0hAK1i!Ey?X53D7PWyM8cGc8zwFn4O9Z<9r+e3asK|ZS@5Zw zWKG7C#OotZL^_o=|IF#7E+02}NM6d`{RhU-2J}Jx-{&x4V8EXr- zGoP=^E2>v*J7}1*%fYJk%;V=*7Ck!oQJMe!T!v*)+6*%?9kf@} - - - {{ config.title }} - + + + - - + + + + + {% block pagemeta %} + + + + {{ config.title }} + + + {% endblock pagemeta %} + + +
diff --git a/templates/page.html b/templates/page.html index afbc103..93976cb 100644 --- a/templates/page.html +++ b/templates/page.html @@ -1,5 +1,20 @@ {% extends "base.html" %} +{% block pagemeta %} + +{{ page.title }} - {{ config.title }} + + + +{% if page.description %} +{{ page.description }} + +{% else %} + +{% endif %} + +{% endblock pagemeta %} + {% block content %}