| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "pagination.html" . }} | {{ partial "pagination.html" . }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ $script := resources.Get "/js/search.js" | resources.ExecuteAsTemplate "search.js" . }} | {{ $script := resources.Get "/js/search.js" | resources.ExecuteAsTemplate "search.js" . }} | ||||
| <script integrity="{{ printf "%s" ($script | resources.Fingerprint "sha512").Data.Integrity | safeHTML }}"> | <script integrity="{{ printf "%s" ($script | resources.Fingerprint "sha512").Data.Integrity | safeHTML }}"> | ||||
| {{- $script.Content | safeJS -}} | {{- $script.Content | safeJS -}} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "pagination.html" . }} | {{ partial "pagination.html" . }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ end }} | {{ end }} | ||||
| {{ define "footer" }} | {{ define "footer" }} | ||||
| {{ partial "powered-by.html" . }} | {{ partial "powered-by.html" . }} | ||||
| {{ partial "cookie-disclaimer.html" . }} | |||||
| {{ end }} | {{ end }} |
| {{ -}}.hack header figure[itemtype*=ImageObject]{position:relative}.hack header figure[itemtype*=ImageObject] figcaption{position:absolute;bottom:0;right:0;text-align:right;padding:15px;font-style:oblique;font-size:smaller;mix-blend-mode:soft-light}.hack header figure[itemtype*=ImageObject] [itemprop=headline]{font-weight:700} |
| {"Target":"css/conditional/layouts/post/single.min.css","MediaType":"text/css","Data":{}} |
| :root{scroll-behavior:smooth;--screen-size-small: 30em}@keyframes intro{0%{opacity:0}100%{opacity:1}}.blur-up{-webkit-filter:blur(5px);filter:blur(5px);transition:filter 400ms,-webkit-filter 400ms}.blur-up.lazyloaded{-webkit-filter:blur(0);filter:blur(0)}.hack .readmore{margin-bottom:2.2em}.responsive-iframe{position:relative;padding-bottom:56.25%;padding-top:25px;height:0}.responsive-iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}iframe{border:0}main,footer{animation:intro .3s both;animation-delay:.15s}header:first-of-type+details{margin-top:1rem}footer time[datetime$=M]:before{content:"\2013\0020"}body>footer p.muted{margin-bottom:0}@media only screen and (max-width:768px){footer time[datetime$=M]{display:none}}blockquote cite{display:block}blockquote cite::before{content:"\2014\00A0"}:target{filter:brightness(1.2)}:disabled{cursor:not-allowed}#search-app [v-cloak]{display:none}.hack li ul{margin:0}.hack ol li{padding-left:27px}.main{padding:20px 10px}input.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}input.form-control,textarea.form-control,select.form-control,.help-block{font-size:initial}@media only screen and (max-width:768px){.help-block{font-size:unset}}html{font-size:13px}.hack .form input,.hack .form textarea,.hack .form button,.hack .form label{font-size:1rem}.hack .alert .highlight:first-of-type .chroma,.hack .card .highlight:first-of-type .chroma{margin-top:unset}.hack .alert .highlight:last-of-type .chroma,.hack .card .highlight:last-of-type .chroma{margin-bottom:unset}.hack blockquote,.hack blockquote:after{line-height:1.5}.hack figure{margin:unset}.hack figure a{border-bottom:none}.hack figure a:hover{background-color:inherit}article [itemprop=description]{margin-bottom:20px;margin-top:20px}article header img{width:100%;border-radius:3px}table td,table th{line-height:inherit}table a{border-bottom:unset}img{max-width:100%}@media only screen and (min-width:768px){html{font-size:16px;margin-left:calc(100vw - 100%)}.container{max-width:50rem}} | |||||
| /*!* Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>.*/:root{scroll-behavior:smooth;--screen-size-small: 30em}@keyframes intro{0%{opacity:0}100%{opacity:1}}.blur-up.lazyloading{filter:blur(5px);opacity:1;transition:opacity 1s,filter 1.5s}.blur-up.lazyload{opacity:0;filter:blur(10px)}.blur-up.lazyloaded{filter:blur(0);transition:filter 1s}.hack .readmore{margin-bottom:2.2em}.responsive-iframe,.ratio-container{position:relative;padding-bottom:56.25%;padding-top:25px;height:0}.responsive-iframe iframe,.ratio-container>*:not([itemprop=caption]){position:absolute;top:0;left:0;width:100%;height:100%}iframe{border:0}main,footer{animation:intro .3s both;animation-delay:.15s}header:first-of-type+details{margin:20px 0}footer time[datetime$=M]:before{content:"\2013\0020"}body>footer p.muted{margin-bottom:0}@media only screen and (max-width:768px){footer time[datetime$=M]{display:none}}blockquote cite{display:block}blockquote cite::before{content:"\2014\00A0"}:target{filter:brightness(1.2)}:disabled{cursor:not-allowed}.hack li ul{margin:0}.hack ol li{padding-left:27px}.main{padding:20px 10px}input.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}input.form-control,textarea.form-control,select.form-control,.help-block{font-size:initial}@media only screen and (max-width:768px){.help-block{font-size:unset}}html{font-size:13px}.hack .form input,.hack .form textarea,.hack .form button,.hack .form label{font-size:1rem}.hack .alert .highlight:first-of-type .chroma,.hack .card .highlight:first-of-type .chroma{margin-top:unset}.hack .alert .highlight:last-of-type .chroma,.hack .card .highlight:last-of-type .chroma{margin-bottom:unset}.hack blockquote,.hack blockquote:after{line-height:1.5}.hack figure,.standard figure{margin:unset}.hack figure a{border-bottom:none}.hack figure a:hover{background-color:inherit}article header img{width:100%;border-radius:3px}table td,table th{line-height:inherit}table a{border-bottom:unset}img{max-width:100%}@media only screen and (min-width:768px){html{font-size:16px}.container{max-width:50rem}}@media only screen and (min-width:768px),(-ms-high-contrast:active),(-ms-high-contrast:none){html{margin-left:calc(100vw - 100%)}} |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject(["/js/lazysizes.min.js"]); | fetchInject(["/js/lazysizes.min.js"]); |
| {"Target":"baseof.867a3b59e4c87220894a383f9b28f22b7d07624adc182570a388384a951a96faecdebda54bb6cf3484306c2372a4a6e0ec1675b00e00b069e4e86ab834e2a918.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-hno7WeTIciCJSjg/myjyK30HYkrcGCVwo4g4SpUalvrs3r2lS7bPNIQwbCNypKbg7BZ1sA4AsGnk6Gq4NOKpGA=="}} | |||||
| {"Target":"baseof.d9796f9f1c1e661687801742a0e2b43e80945a249f2a26dbf9109164d82a2ddbdb9f1d191faec50c6290aa6a6a09eae33096d916fe9fb1781b98938e03d2bea8.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-2XlvnxweZhaHgBdCoOK0PoCUWiSfKibb+RCRZNgqLdvbnx0ZH67FDGKQqmpqCerjMJbZFv6fsXgbmJOOA9K+qA=="}} |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject(["/js/lazysizes.min.js"]); | fetchInject(["/js/lazysizes.min.js"]); |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject([ | fetchInject([ | ||||
| "/js/vue.min.js", | "/js/vue.min.js", | ||||
| "/js/lodash.custom.min.js", | "/js/lodash.custom.min.js", | ||||
| ).replace(/\+/g, ' '); | ).replace(/\+/g, ' '); | ||||
| const queryParam = 's'; | const queryParam = 's'; | ||||
| const hotkeys = ["/","s"]; | |||||
| const selectors = { | const selectors = { | ||||
| appContainer: '#search-app', | appContainer: '#search-app', | ||||
| resultContainer: '#search-results', | resultContainer: '#search-results', | ||||
| window.onpopstate = (evt) => { | window.onpopstate = (evt) => { | ||||
| this.query = evt.state.query; | this.query = evt.state.query; | ||||
| }; | }; | ||||
| document.onkeyup = function (evt) { | |||||
| evt.key === 's' && focusSearchInput(); | |||||
| const searchInput = getSearchInput(); | |||||
| document.onkeydown = function (evt) { | |||||
| if (evt.target === searchInput) return; | |||||
| if (hotkeys.includes(evt.key)) { | |||||
| evt.preventDefault(); | |||||
| focusSearchInput(); | |||||
| getSearchInput().select(); | |||||
| }; | |||||
| } | } | ||||
| focusSearchInput(); | focusSearchInput(); | ||||
| }, | }, |
| {"Target":"search.0716f2f738659f865cdad84603513d09d4f8a9c098e764b13bf481c401faa902ba2caebfd601aad71277533d125d3b0f48beaabb37bb6d84141ebf78c494bb8d.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=="}} | |||||
| {"Target":"search.c0b2121b449f96b1a582f1459457c7c1290b06058e980fba2f7b13a2141a1a25198f77d9666b69327d52712524d406ea741991f0f1ab429f57279ca150aa1998.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-wLISG0SflrGlgvFFlFfHwSkLBgWOmA+6L3sTohQaGiUZj3fZZmtpMn1ScSUk1AbqdBmR8PGrQp9XJ5yhUKoZmA=="}} |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject([ | fetchInject([ | ||||
| "/js/vue.min.js", | "/js/vue.min.js", | ||||
| "/js/lodash.custom.min.js", | "/js/lodash.custom.min.js", | ||||
| ).replace(/\+/g, ' '); | ).replace(/\+/g, ' '); | ||||
| const queryParam = 's'; | const queryParam = 's'; | ||||
| const hotkeys = ["/","s"]; | |||||
| const selectors = { | const selectors = { | ||||
| appContainer: '#search-app', | appContainer: '#search-app', | ||||
| resultContainer: '#search-results', | resultContainer: '#search-results', | ||||
| window.onpopstate = (evt) => { | window.onpopstate = (evt) => { | ||||
| this.query = evt.state.query; | this.query = evt.state.query; | ||||
| }; | }; | ||||
| document.onkeyup = function (evt) { | |||||
| evt.key === 's' && focusSearchInput(); | |||||
| const searchInput = getSearchInput(); | |||||
| document.onkeydown = function (evt) { | |||||
| if (evt.target === searchInput) return; | |||||
| if (hotkeys.includes(evt.key)) { | |||||
| evt.preventDefault(); | |||||
| focusSearchInput(); | |||||
| getSearchInput().select(); | |||||
| }; | |||||
| } | } | ||||
| focusSearchInput(); | focusSearchInput(); | ||||
| }, | }, |
| /*! Fetch Inject v2.0.2 | Copyright (C) 2017–2018 Josh Habdas <[email protected]> | @license Zlib */ | |||||
| /*! Fetch Inject v2.0.4 | Copyright (C) Josh Habdas <[email protected]> (https://habd.as) | @license Zlib */ | |||||
| var fetchInject=function(){"use strict";const e=function(e,t,r,n,o,c,i){c=t.createElement(r),i=t.getElementsByTagName(r)[0],c.appendChild(t.createTextNode(n.text)),c.onload=o(n),i?i.parentNode.insertBefore(c,i):t.head.appendChild(c)};return function(t,r){if(!arguments.length)return Promise.reject(new ReferenceError("Failed to execute 'fetchInject': 1 argument required but only 0 present."));if(arguments[0]&&arguments[0].constructor!==Array)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 1 must be of type 'Array'."));if(arguments[1]&&arguments[1].constructor!==Promise)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 2 must be of type 'Promise'."));const n=[],o=r?[].concat(r):[],c=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>[e.clone().text(),e.blob()]).then(e=>Promise.all(e).then(e=>{n.push({text:e[0],blob:e[1]})})))),Promise.all(o).then(()=>(n.forEach(t=>{c.push({then:r=>{t.blob.type.includes("text/css")?e(window,document,"style",t,r):e(window,document,"script",t,r)}})}),Promise.all(c)))}}(); | var fetchInject=function(){"use strict";const e=function(e,t,r,n,o,c,i){c=t.createElement(r),i=t.getElementsByTagName(r)[0],c.appendChild(t.createTextNode(n.text)),c.onload=o(n),i?i.parentNode.insertBefore(c,i):t.head.appendChild(c)};return function(t,r){if(!arguments.length)return Promise.reject(new ReferenceError("Failed to execute 'fetchInject': 1 argument required but only 0 present."));if(arguments[0]&&arguments[0].constructor!==Array)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 1 must be of type 'Array'."));if(arguments[1]&&arguments[1].constructor!==Promise)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 2 must be of type 'Promise'."));const n=[],o=r?[].concat(r):[],c=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>[e.clone().text(),e.blob()]).then(e=>Promise.all(e).then(e=>{n.push({text:e[0],blob:e[1]})})))),Promise.all(o).then(()=>(n.forEach(t=>{c.push({then:r=>{t.blob.type.includes("text/css")?e(window,document,"style",t,r):e(window,document,"script",t,r)}})}),Promise.all(c)))}}(); |
| {"Target":"js/vendor/fetch-inject.min.271fcca93c585aa1dda0e90722d4492590af14384444faf9806e08e444aedd5f81810c8043ac177ddb06ce1ce64f4cb2be4016cf68dbae7f35abdd114494d24e.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-Jx/MqTxYWqHdoOkHItRJJZCvFDhERPr5gG4I5ESu3V+BgQyAQ6wXfdsGzhzmT0yyvkAWz2jbrn81q90RRJTSTg=="}} | |||||
| {"Target":"js/vendor/fetch-inject.min.dadd32c8dad476d9fd586228055c6ae6fb6825061fa034036ea44fa4e6fbe5fd6188bdfd0c62dd24a0eb18feb47c18577eb15e2b2561cd626f1ef2e0967fc494.js","MediaType":"application/javascript","Data":{"Integrity":"sha512-2t0yyNrUdtn9WGIoBVxq5vtoJQYfoDQDbqRPpOb75f1hiL39DGLdJKDrGP60fBhXfrFeKyVhzWJvHvLgln/ElA=="}} |
| # Change Log | |||||
| # Changelog | |||||
| All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. | ||||
| ## [9.1.0](https://git.habd.as/comfusion/after-dark/compare/v9.0.0...v9.1.0) (2019-08-21) | |||||
| ### Bug Fixes | |||||
| * **feature/featured-posts:** default featured pages to empty slice when not defined ([785b403](https://git.habd.as/comfusion/after-dark/commit/785b403)), closes [#173](https://git.habd.as/comfusion/after-dark/issues/173) | |||||
| ### Build System | |||||
| * **docker/hugo:** bump to 0.57.0 ([e090ab2](https://git.habd.as/comfusion/after-dark/commit/e090ab2)) | |||||
| ### Features | |||||
| * **feature/code-analysis:** add source build of htmltest ([1cd1d6c](https://git.habd.as/comfusion/after-dark/commit/1cd1d6c)), closes [#124](https://git.habd.as/comfusion/after-dark/issues/124) [#165](https://git.habd.as/comfusion/after-dark/issues/165) | |||||
| ## [9.0.0](https://git.habd.as/comfusion/after-dark/compare/v8.3.3...v9.0.0) (2019-08-12) | |||||
| ### Features | |||||
| * **feature/featured-posts:** allow featured items in posts section ([49f5c56](https://git.habd.as/comfusion/after-dark/commit/49f5c56)), closes [#170](https://git.habd.as/comfusion/after-dark/issues/170) [#160](https://git.habd.as/comfusion/after-dark/issues/160) | |||||
| ### BREAKING CHANGES | |||||
| * **feature/featured-posts:** Hugo minimum required version now 0.51 (was 0.44) | |||||
| ### [8.3.4](https://git.habd.as/comfusion/after-dark/compare/v8.3.3...v8.3.4) (2019-08-05) | |||||
| Finish documentation TODOs. | |||||
| ### [8.3.3](https://git.habd.as/comfusion/after-dark/compare/v8.3.2...v8.3.3) (2019-07-31) | |||||
| ### Build System | |||||
| * **docker/hugo:** support extended builds of hugo 0.56.0 ([3ee8bea](https://git.habd.as/comfusion/after-dark/commit/3ee8bea)), closes [#161](https://git.habd.as/comfusion/after-dark/issues/161) | |||||
| ### [8.3.2](https://git.habd.as/comfusion/after-dark/compare/v8.3.1...v8.3.2) (2019-07-22) | |||||
| ### Bug Fixes | |||||
| * **feature/post-images:** prevent content from jumping as image loads ([452ce64](https://git.habd.as/comfusion/after-dark/commit/452ce64)), closes [#162](https://git.habd.as/comfusion/after-dark/issues/162) | |||||
| ### Build System | |||||
| * **npm:** audit and fix dev dependency vulnerabilities ([782506e](https://git.habd.as/comfusion/after-dark/commit/782506e)) | |||||
| * **npm:** greenkeep commit helper and changelog generator ([0c571ef](https://git.habd.as/comfusion/after-dark/commit/0c571ef)) | |||||
| ### [8.3.1](https://git.habd.as/comfusion/after-dark/compare/v8.3.0...v8.3.1) (2019-07-21) | |||||
| ### Bug Fixes | |||||
| * **bin/upgrade:** properly detect current theme version, if present ([59cebcb](https://git.habd.as/comfusion/after-dark/commit/59cebcb)) | |||||
| ## [8.3.0](https://git.habd.as/comfusion/after-dark/compare/v8.2.0...v8.3.0) (2019-07-21) | |||||
| ### Features | |||||
| * **shortcode/video:** add video shortcode ([ace4c7c](https://git.habd.as/comfusion/after-dark/commit/ace4c7c)), closes [#20](https://git.habd.as/comfusion/after-dark/issues/20) [#81](https://git.habd.as/comfusion/after-dark/issues/81) | |||||
| ## [8.2.0](https://git.habd.as/comfusion/after-dark/compare/v8.1.0...v8.2.0) (2019-07-18) | |||||
| ### Bug Fixes | |||||
| * **assets/css:** prevent ie10+ scrollbar from causing layout to jump ([105356f](https://git.habd.as/comfusion/after-dark/commit/105356f)), closes [#144](https://git.habd.as/comfusion/after-dark/issues/144) | |||||
| * **bin/install:** resolve shellcheck warns for improved portability ([67a080f](https://git.habd.as/comfusion/after-dark/commit/67a080f)), closes [#154](https://git.habd.as/comfusion/after-dark/issues/154) | |||||
| ### Features | |||||
| * **feature/fuzzy-search:** add app init loading indicator and noscript experience ([da82ae2](https://git.habd.as/comfusion/after-dark/commit/da82ae2)), closes [#143](https://git.habd.as/comfusion/after-dark/issues/143) | |||||
| ## [8.1.0](https://git.habd.as/comfusion/after-dark/compare/v8.0.2...v8.1.0) (2019-07-12) | |||||
| ### Features | |||||
| * **feature/custom-homepage:** add custom homepage and docs in english ([87d2076](https://git.habd.as/comfusion/after-dark/commit/87d2076)), closes [#41](https://git.habd.as/comfusion/after-dark/issues/41) | |||||
| * **snippets:** abstract figure shortcode for use in layout ([8ca09f4](https://git.habd.as/comfusion/after-dark/commit/8ca09f4)) | |||||
| ### [8.0.2](https://git.habd.as/comfusion/after-dark/compare/v8.0.1...v8.0.2) (2019-07-02) | |||||
| ### [8.0.1](https://git.habd.as/comfusion/after-dark/compare/v8.0.0...v8.0.1) (2019-07-01) | |||||
| ### Build System | |||||
| * **npm/lockfile:** improve sec of dev deps with 1 audit fixed ([d956c71](https://git.habd.as/comfusion/after-dark/commit/d956c71)) | |||||
| ## 8.0.0 (2019-05-17) | |||||
| Moves After Dark to AGPLv3+. | |||||
| ### Bug Fixes | |||||
| * **$images:** improve bpg image support ([e8a2e29](https://git.habd.as/comfusion/after-dark/commit/e8a2e29)), closes [#48](https://git.habd.as/comfusion/after-dark/issues/48) | |||||
| * **$layouts:** add support for protocol-relative base urls ([bd4db87](https://git.habd.as/comfusion/after-dark/commit/bd4db87)), closes [#37](https://git.habd.as/comfusion/after-dark/issues/37) | |||||
| * **$layouts:** disable ua input styling safari mobile ([bffb325](https://git.habd.as/comfusion/after-dark/commit/bffb325)) | |||||
| * **$layouts:** fix error calling partial in related content ([ab4a1df](https://git.habd.as/comfusion/after-dark/commit/ab4a1df)), closes [#55](https://git.habd.as/comfusion/after-dark/issues/55) | |||||
| * **$layouts:** improve search input focus and usability ([5e2500f](https://git.habd.as/comfusion/after-dark/commit/5e2500f)), closes [#91](https://git.habd.as/comfusion/after-dark/issues/91) | |||||
| * **$layouts:** move stylesheets back to partials, reorganize files ([c5871f1](https://git.habd.as/comfusion/after-dark/commit/c5871f1)), closes [#50](https://git.habd.as/comfusion/after-dark/issues/50) | |||||
| * **$layouts:** prevent auto-zoom on safari mobile ([60d5b37](https://git.habd.as/comfusion/after-dark/commit/60d5b37)) | |||||
| * **$layouts:** prevent js error on search form submit ([96b483c](https://git.habd.as/comfusion/after-dark/commit/96b483c)), closes [#94](https://git.habd.as/comfusion/after-dark/issues/94) | |||||
| * **$layouts:** remove iframe borders by default ([aeeafa2](https://git.habd.as/comfusion/after-dark/commit/aeeafa2)) | |||||
| * **$layouts:** update powered-by to link to new theme site ([500ccb9](https://git.habd.as/comfusion/after-dark/commit/500ccb9)) | |||||
| * **$shortcodes:** fix issue with external link appearance ([f7cd49c](https://git.habd.as/comfusion/after-dark/commit/f7cd49c)) | |||||
| * **$style:** add more whitespace on list pages and darken muted text ([8ba617c](https://git.habd.as/comfusion/after-dark/commit/8ba617c)) | |||||
| * **$style:** fix a whitespace issue near the readmore link ([82155e9](https://git.habd.as/comfusion/after-dark/commit/82155e9)), closes [#70](https://git.habd.as/comfusion/after-dark/issues/70) | |||||
| * **archetypes:** close tag body on last external shortcode ([fd6dd8d](https://git.habd.as/comfusion/after-dark/commit/fd6dd8d)) | |||||
| * **archetypes:** default posts to display as published content ([47071fe](https://git.habd.as/comfusion/after-dark/commit/47071fe)) | |||||
| * **archetypes:** fix broken links in post archetype ([0d65b6a](https://git.habd.as/comfusion/after-dark/commit/0d65b6a)) | |||||
| * **archetypes:** prevent internal links from opening in new window ([c488a12](https://git.habd.as/comfusion/after-dark/commit/c488a12)) | |||||
| * **archetypes/validate:** swap string method for sha trim behavior ([feb0150](https://git.habd.as/comfusion/after-dark/commit/feb0150)), closes [#90](https://git.habd.as/comfusion/after-dark/issues/90) | |||||
| * **assets:** stop treating all permalinks as external ([7e1d3cc](https://git.habd.as/comfusion/after-dark/commit/7e1d3cc)) | |||||
| * **assets/css:** normalize base font-size, large screens ([912ec97](https://git.habd.as/comfusion/after-dark/commit/912ec97)) | |||||
| * **assets/css:** normalize samp element font size with pre ([966c767](https://git.habd.as/comfusion/after-dark/commit/966c767)) | |||||
| * **assets/css:** normalize size of help text on small viewports ([55ba9e2](https://git.habd.as/comfusion/after-dark/commit/55ba9e2)) | |||||
| * **assets/css:** normalize whitespace around toc when post images present ([4acbace](https://git.habd.as/comfusion/after-dark/commit/4acbace)) | |||||
| * **assets/css:** unset ua default figure element margin ([7925a94](https://git.habd.as/comfusion/after-dark/commit/7925a94)) | |||||
| * **assets/theme:** normalize blockquote line-height with rest of document ([5220b94](https://git.habd.as/comfusion/after-dark/commit/5220b94)) | |||||
| * **bin:** remove preview script ([4f7af96](https://git.habd.as/comfusion/after-dark/commit/4f7af96)), closes [#38](https://git.habd.as/comfusion/after-dark/issues/38) | |||||
| * **bundle:** add images to npm ignore file ([b7cbe87](https://git.habd.as/comfusion/after-dark/commit/b7cbe87)) | |||||
| * **bundle:** remove images folder from npm release ([df9ce55](https://git.habd.as/comfusion/after-dark/commit/df9ce55)) | |||||
| * **components:** correct help block class attr behavior ([586a290](https://git.habd.as/comfusion/after-dark/commit/586a290)) | |||||
| * **feature/post-images:** fix yandex validation error ([f758c2e](https://git.habd.as/comfusion/after-dark/commit/f758c2e)) | |||||
| * **feature/post-images:** zap extra whitespaces ([66c27ec](https://git.habd.as/comfusion/after-dark/commit/66c27ec)) | |||||
| * **feature/web-feeds:** output last build date in rfc822 with 4-digit year ([4c86b4a](https://git.habd.as/comfusion/after-dark/commit/4c86b4a)) | |||||
| * **fuzzy-search:** handle search layout hotkey assignments properly ([630d3a9](https://git.habd.as/comfusion/after-dark/commit/630d3a9)) | |||||
| * **help:** change 404 page to error page and improve script perf ([9749575](https://git.habd.as/comfusion/after-dark/commit/9749575)), closes [#43](https://git.habd.as/comfusion/after-dark/issues/43) | |||||
| * **help:** rename 404 to error page ([e158065](https://git.habd.as/comfusion/after-dark/commit/e158065)) | |||||
| * **help/home:** add missing query string param to search link ([7c5f35d](https://git.habd.as/comfusion/after-dark/commit/7c5f35d)) | |||||
| * **help/home:** add performance info & undocumented features ([a8e18c5](https://git.habd.as/comfusion/after-dark/commit/a8e18c5)) | |||||
| * **hugo:** require 0.44 at minimum ([6e2f11e](https://git.habd.as/comfusion/after-dark/commit/6e2f11e)) | |||||
| * **install:** add flags for theme setup script ([1282c7c](https://git.habd.as/comfusion/after-dark/commit/1282c7c)) | |||||
| * **install:** improve install experience ([52d6236](https://git.habd.as/comfusion/after-dark/commit/52d6236)) | |||||
| * **install:** install packages from npm ([1c2df4f](https://git.habd.as/comfusion/after-dark/commit/1c2df4f)) | |||||
| * **install:** kill hugo server always ([de3c8a5](https://git.habd.as/comfusion/after-dark/commit/de3c8a5)) | |||||
| * **install:** move it back to bin ([ba92ce6](https://git.habd.as/comfusion/after-dark/commit/ba92ce6)) | |||||
| * **install:** move kill command to eof ([7075c82](https://git.habd.as/comfusion/after-dark/commit/7075c82)) | |||||
| * **install:** move to scripts folder ([30a8b04](https://git.habd.as/comfusion/after-dark/commit/30a8b04)) | |||||
| * **install:** remove git cruft & supply actual module name ([7dd0e9e](https://git.habd.as/comfusion/after-dark/commit/7dd0e9e)) | |||||
| * **install:** remove unexpected line in theme config ([7e424bd](https://git.habd.as/comfusion/after-dark/commit/7e424bd)) | |||||
| * **install:** remove useful snippets content ([0278216](https://git.habd.as/comfusion/after-dark/commit/0278216)) | |||||
| * **install:** restore android support ([3218ce2](https://git.habd.as/comfusion/after-dark/commit/3218ce2)), closes [#25](https://git.habd.as/comfusion/after-dark/issues/25) | |||||
| * **install:** standardize install script ([9daad48](https://git.habd.as/comfusion/after-dark/commit/9daad48)), closes [#19](https://git.habd.as/comfusion/after-dark/issues/19) | |||||
| * **install:** stop copying all archetypes to site ([b7df91a](https://git.habd.as/comfusion/after-dark/commit/b7df91a)), closes [#45](https://git.habd.as/comfusion/after-dark/issues/45) | |||||
| * **install:** support both gnu and bsd grep ([0cc315a](https://git.habd.as/comfusion/after-dark/commit/0cc315a)) | |||||
| * **install:** update default open graph image ([f476561](https://git.habd.as/comfusion/after-dark/commit/f476561)) | |||||
| * **install:** update example base url ([f24a9f9](https://git.habd.as/comfusion/after-dark/commit/f24a9f9)) | |||||
| * **install:** use latest version from npm dist tags ([91a3fb1](https://git.habd.as/comfusion/after-dark/commit/91a3fb1)) | |||||
| * **install:** wait 1 second before serving help for docs to expire ([9ca3862](https://git.habd.as/comfusion/after-dark/commit/9ca3862)) | |||||
| * **layout/default:** workaround hugo bug on eval len(nil) go tmpl ([d8bdcfc](https://git.habd.as/comfusion/after-dark/commit/d8bdcfc)), closes [#135](https://git.habd.as/comfusion/after-dark/issues/135) | |||||
| * **layouts:** move inline-level content in navs inside <p> ([42c9004](https://git.habd.as/comfusion/after-dark/commit/42c9004)) | |||||
| * **layouts:** output meta description when not explicitly set ([f347138](https://git.habd.as/comfusion/after-dark/commit/f347138)), closes [#21](https://git.habd.as/comfusion/after-dark/issues/21) | |||||
| * **layouts:** output urls relative to baseurl ([0205bd1](https://git.habd.as/comfusion/after-dark/commit/0205bd1)), closes [#4](https://git.habd.as/comfusion/after-dark/issues/4) | |||||
| * **layouts:** remove navmenu from help layout ([470b452](https://git.habd.as/comfusion/after-dark/commit/470b452)) | |||||
| * **layouts:** restore smooth scrolling to toc links ([8db7451](https://git.habd.as/comfusion/after-dark/commit/8db7451)) | |||||
| * **layouts:** show sarcastic message when no pages exist ([990f0b6](https://git.habd.as/comfusion/after-dark/commit/990f0b6)) | |||||
| * **layouts:** stop outputting trim color if none present ([73e824a](https://git.habd.as/comfusion/after-dark/commit/73e824a)) | |||||
| * **layouts:** use relative urls in post byline taxonomy links ([a170089](https://git.habd.as/comfusion/after-dark/commit/a170089)) | |||||
| * **layouts/partials:** add main menu display condition ([93ed6cd](https://git.habd.as/comfusion/after-dark/commit/93ed6cd)), closes [#78](https://git.habd.as/comfusion/after-dark/issues/78) | |||||
| * **layouts/partials:** move navmenu snippet into theme ([1c0e945](https://git.habd.as/comfusion/after-dark/commit/1c0e945)), closes [#78](https://git.habd.as/comfusion/after-dark/issues/78) | |||||
| * **layouts/search:** unblock blocking scripts and add command terminators ([455b6fe](https://git.habd.as/comfusion/after-dark/commit/455b6fe)), closes [#14](https://git.habd.as/comfusion/after-dark/issues/14) | |||||
| * **links:** style external links in all browsers ([3e2aa61](https://git.habd.as/comfusion/after-dark/commit/3e2aa61)), closes [#22](https://git.habd.as/comfusion/after-dark/issues/22) | |||||
| * **onboarding:** add explicit site port setting in install script ([b851b0b](https://git.habd.as/comfusion/after-dark/commit/b851b0b)) | |||||
| * **onboarding:** serve site not help when starting site from installer ([3447556](https://git.habd.as/comfusion/after-dark/commit/3447556)) | |||||
| * **partials:** fix markup validation error ([43a9ed0](https://git.habd.as/comfusion/after-dark/commit/43a9ed0)) | |||||
| * **partials:** make button onclick handler work as expected ([74ef00a](https://git.habd.as/comfusion/after-dark/commit/74ef00a)) | |||||
| * **partials/powered-by:** point to expected directory of refactored file ([d61f131](https://git.habd.as/comfusion/after-dark/commit/d61f131)) | |||||
| * **personalization:** rename accent color to trim color ([953c73e](https://git.habd.as/comfusion/after-dark/commit/953c73e)) | |||||
| * **scripts:** add || to server shutdown ([f7f2849](https://git.habd.as/comfusion/after-dark/commit/f7f2849)) | |||||
| * **scripts:** address error generating docs after upgrade ([f84cd40](https://git.habd.as/comfusion/after-dark/commit/f84cd40)) | |||||
| * **scripts:** always regnerate help docs ([082f1be](https://git.habd.as/comfusion/after-dark/commit/082f1be)) | |||||
| * **scripts:** automatically stop running help servers on upgrade ([87feadc](https://git.habd.as/comfusion/after-dark/commit/87feadc)) | |||||
| * **scripts:** remove help before generating on upgrade ([0049586](https://git.habd.as/comfusion/after-dark/commit/0049586)) | |||||
| * **scripts:** resolve help doc path lookups when no custom content dir ([6792cd7](https://git.habd.as/comfusion/after-dark/commit/6792cd7)) | |||||
| * **scripts:** resolve syntax bugs in script ([0b349ed](https://git.habd.as/comfusion/after-dark/commit/0b349ed)) | |||||
| * **scripts:** resolve tar cd issue ([a573640](https://git.habd.as/comfusion/after-dark/commit/a573640)) | |||||
| * **scripts:** update install to place theme metadata in theme data folder ([5e89f6d](https://git.habd.as/comfusion/after-dark/commit/5e89f6d)), closes [#59](https://git.habd.as/comfusion/after-dark/issues/59) | |||||
| * **shortcode/hackcss-alert:** restore legacy behavior for shortcode ([975f2b7](https://git.habd.as/comfusion/after-dark/commit/975f2b7)) | |||||
| * **shortcode/navmenu:** improve microdata semantics & add test tool to docs ([31992f5](https://git.habd.as/comfusion/after-dark/commit/31992f5)), closes [#100](https://git.habd.as/comfusion/after-dark/issues/100) | |||||
| * **shortcodes:** remove insignificant spaces after external links ([1f06f5c](https://git.habd.as/comfusion/after-dark/commit/1f06f5c)) | |||||
| * **shortcodes:** remove privacytube and coub shortcodes ([f5ddb1a](https://git.habd.as/comfusion/after-dark/commit/f5ddb1a)), closes [#35](https://git.habd.as/comfusion/after-dark/issues/35) | |||||
| * **shortcodes:** remove standard link treatment from figures ([a619320](https://git.habd.as/comfusion/after-dark/commit/a619320)) | |||||
| * **shortcodes/button:** allow name attribute & pass id as expected ([c58645a](https://git.habd.as/comfusion/after-dark/commit/c58645a)) | |||||
| * **snippets:** add name attribute to form ([78f3482](https://git.habd.as/comfusion/after-dark/commit/78f3482)) | |||||
| * **snippets:** reverse logic for external link styling ([2889192](https://git.habd.as/comfusion/after-dark/commit/2889192)) | |||||
| * **styles:** leftpad orderd lists ([a944ead](https://git.habd.as/comfusion/after-dark/commit/a944ead)) | |||||
| * **theme:** enable white theme variant ([2addeaa](https://git.habd.as/comfusion/after-dark/commit/2addeaa)) | |||||
| * **typography:** only justify and hyphenate article bodies ([52f046a](https://git.habd.as/comfusion/after-dark/commit/52f046a)) | |||||
| * **typography:** remove text justification and hyphenation ([2bfa8f7](https://git.habd.as/comfusion/after-dark/commit/2bfa8f7)) | |||||
| * **typography:** stop justifying and hyphenating text on small viewports ([929ae7e](https://git.habd.as/comfusion/after-dark/commit/929ae7e)) | |||||
| * 404 page theme color url ref ([2303007](https://git.habd.as/comfusion/after-dark/commit/2303007)) | |||||
| * add add theme color to 404 page ([1379cfc](https://git.habd.as/comfusion/after-dark/commit/1379cfc)) | |||||
| ### Build System | |||||
| * **npm:** pull unused dev dep ([14bab76](https://git.habd.as/comfusion/after-dark/commit/14bab76)) | |||||
| * **npm:** upgrade lockfile to v1 ([25ce8fa](https://git.habd.as/comfusion/after-dark/commit/25ce8fa)) | |||||
| * **npm:** upgrade standard-version to latest ([2ecf9de](https://git.habd.as/comfusion/after-dark/commit/2ecf9de)) | |||||
| * add sha512 digest to git tags and gpg sign them ([e16ab0b](https://git.habd.as/comfusion/after-dark/commit/e16ab0b)) | |||||
| * append sha512 to release tag and self-sign ([f054416](https://git.habd.as/comfusion/after-dark/commit/f054416)), closes [#33](https://git.habd.as/comfusion/after-dark/issues/33) | |||||
| * enclose release tag sha512 in delimeters ([38127fc](https://git.habd.as/comfusion/after-dark/commit/38127fc)), closes [#33](https://git.habd.as/comfusion/after-dark/issues/33) | |||||
| * **$hugo:** inline css using readFile template function ([37834f9](https://git.habd.as/comfusion/after-dark/commit/37834f9)), closes [#44](https://git.habd.as/comfusion/after-dark/issues/44) | |||||
| * **$npm:** patch moderate security vulnerability in dev dep ([6c763c3](https://git.habd.as/comfusion/after-dark/commit/6c763c3)) | |||||
| * **$npm:** switch from yarn to npm lockfile ([185ad8f](https://git.habd.as/comfusion/after-dark/commit/185ad8f)) | |||||
| * **$yarn:** add yarn and update dev dependencies and scripts ([d115256](https://git.habd.as/comfusion/after-dark/commit/d115256)) | |||||
| * **bin:** improve support for linux ([f2c3d0b](https://git.habd.as/comfusion/after-dark/commit/f2c3d0b)) | |||||
| * **install:** bail early ([55798c3](https://git.habd.as/comfusion/after-dark/commit/55798c3)) | |||||
| * **install:** update install process ([86c69ef](https://git.habd.as/comfusion/after-dark/commit/86c69ef)) | |||||
| * **scripts:** remove unused variables from install script ([a1e095a](https://git.habd.as/comfusion/after-dark/commit/a1e095a)) | |||||
| ### Features | |||||
| * **$archetypes:** turn archetypes into go templates ([1ef09c6](https://git.habd.as/comfusion/after-dark/commit/1ef09c6)) | |||||
| * **$archetypes:** turn archetypes into go templates ([56d86d3](https://git.habd.as/comfusion/after-dark/commit/56d86d3)) | |||||
| * **$layout:** add base element to base layout ([ddff5a9](https://git.habd.as/comfusion/after-dark/commit/ddff5a9)), closes [#60](https://git.habd.as/comfusion/after-dark/issues/60) | |||||
| * **$layout:** Add support for external stylesheets ([917cf91](https://git.habd.as/comfusion/after-dark/commit/917cf91)), closes [#49](https://git.habd.as/comfusion/after-dark/issues/49) | |||||
| * **$layout:** add telegram iv support ([d6bf3b6](https://git.habd.as/comfusion/after-dark/commit/d6bf3b6)), closes [#113](https://git.habd.as/comfusion/after-dark/issues/113) | |||||
| * **$layouts:** add fuzzy search ([f9a787e](https://git.habd.as/comfusion/after-dark/commit/f9a787e)), closes [#83](https://git.habd.as/comfusion/after-dark/issues/83) | |||||
| * **$layouts:** add post images ([b151db3](https://git.habd.as/comfusion/after-dark/commit/b151db3)) | |||||
| * **$layouts:** add twitter cards ([a1412a9](https://git.habd.as/comfusion/after-dark/commit/a1412a9)), closes [#76](https://git.habd.as/comfusion/after-dark/issues/76) | |||||
| * **$layouts:** allow customization of referrer policy and add privacy-focused default ([7bde6b6](https://git.habd.as/comfusion/after-dark/commit/7bde6b6)), closes [#96](https://git.habd.as/comfusion/after-dark/issues/96) | |||||
| * **$layouts:** hide related content reading time on small screen ([7cfa4eb](https://git.habd.as/comfusion/after-dark/commit/7cfa4eb)) | |||||
| * **$layouts:** use related content feature introduced in [email protected] ([b408db9](https://git.habd.as/comfusion/after-dark/commit/b408db9)), closes [#54](https://git.habd.as/comfusion/after-dark/issues/54) | |||||
| * **$partials:** add pubdate structured data to post byline ([42f34ae](https://git.habd.as/comfusion/after-dark/commit/42f34ae)) | |||||
| * **$shortcode:** add coub shortcode for gifs with sound ([df9dae8](https://git.habd.as/comfusion/after-dark/commit/df9dae8)), closes [#63](https://git.habd.as/comfusion/after-dark/issues/63) | |||||
| * **$shortcode:** style cite element inside block quotation ([158c0f4](https://git.habd.as/comfusion/after-dark/commit/158c0f4)) | |||||
| * **$shortcodes:** add frame targeting to custom figure shortcode ([b802dab](https://git.habd.as/comfusion/after-dark/commit/b802dab)) | |||||
| * **$shortcodes:** add youtube without cookies ([f6f837e](https://git.habd.as/comfusion/after-dark/commit/f6f837e)), closes [#62](https://git.habd.as/comfusion/after-dark/issues/62) | |||||
| * **$shortcodes:** enable target and method control for button/buttongroup ([c3d1599](https://git.habd.as/comfusion/after-dark/commit/c3d1599)), closes [#56](https://git.habd.as/comfusion/after-dark/issues/56) | |||||
| * **$shortcodes:** make button shortcode clickable ([fa24f4a](https://git.habd.as/comfusion/after-dark/commit/fa24f4a)), closes [#40](https://git.habd.as/comfusion/after-dark/issues/40) | |||||
| * **$theme:** add support for bpg image format ([3976ec0](https://git.habd.as/comfusion/after-dark/commit/3976ec0)), closes [#45](https://git.habd.as/comfusion/after-dark/issues/45) | |||||
| * **bin:** add script to preview site online over https ([730df77](https://git.habd.as/comfusion/after-dark/commit/730df77)), closes [#21](https://git.habd.as/comfusion/after-dark/issues/21) | |||||
| * **feature/fuzzy-search:** add aria landmark to search form ([5b26f51](https://git.habd.as/comfusion/after-dark/commit/5b26f51)) | |||||
| * **feature/post-images:** add image captions and structured data ([9a5c283](https://git.habd.as/comfusion/after-dark/commit/9a5c283)) | |||||
| * **feature/section-menu:** add support for html link decoration ([f02c68f](https://git.habd.as/comfusion/after-dark/commit/f02c68f)) | |||||
| * **feature/section-menu:** add support for multiple nav menus ([0c468a5](https://git.habd.as/comfusion/after-dark/commit/0c468a5)) | |||||
| * **feature/security:** add content security policy ([7e438ad](https://git.habd.as/comfusion/after-dark/commit/7e438ad)) | |||||
| * **feature/table-of-contents:** add native smooth-scroll ([f1606b6](https://git.habd.as/comfusion/after-dark/commit/f1606b6)), closes [#43](https://git.habd.as/comfusion/after-dark/issues/43) | |||||
| * **fuzzy-search:** add ability to assign arbitrary hotkeys ([f429c4a](https://git.habd.as/comfusion/after-dark/commit/f429c4a)), closes [#74](https://git.habd.as/comfusion/after-dark/issues/74) | |||||
| * **help:** multipage help docs ([ef25e00](https://git.habd.as/comfusion/after-dark/commit/ef25e00)), closes [#61](https://git.habd.as/comfusion/after-dark/issues/61) | |||||
| * **help:** update and run help anytime using included script ([fc93864](https://git.habd.as/comfusion/after-dark/commit/fc93864)) | |||||
| * **help/homepage:** update security featurette ([c567bd4](https://git.habd.as/comfusion/after-dark/commit/c567bd4)) | |||||
| * **highlighting:** add syntax highlighting ([a038ee0](https://git.habd.as/comfusion/after-dark/commit/a038ee0)) | |||||
| * **install:** add installation challenge ([9d438fe](https://git.habd.as/comfusion/after-dark/commit/9d438fe)) | |||||
| * **install:** faux install validation using npm sha512 digest ([e7625da](https://git.habd.as/comfusion/after-dark/commit/e7625da)), closes [#33](https://git.habd.as/comfusion/after-dark/issues/33) | |||||
| * **install:** provide welcome post with online help ([79838ed](https://git.habd.as/comfusion/after-dark/commit/79838ed)) | |||||
| * **install:** simplify installation ([da3f66e](https://git.habd.as/comfusion/after-dark/commit/da3f66e)) | |||||
| * **install:** streamline installation ([15f61f5](https://git.habd.as/comfusion/after-dark/commit/15f61f5)), closes [#2](https://git.habd.as/comfusion/after-dark/issues/2) | |||||
| * **layout,install:** add automatic syntax highlighting ([70d2bfc](https://git.habd.as/comfusion/after-dark/commit/70d2bfc)) | |||||
| * **layouts:** add meta keywords to base template ([d5f146f](https://git.habd.as/comfusion/after-dark/commit/d5f146f)), closes [#20](https://git.habd.as/comfusion/after-dark/issues/20) | |||||
| * **layouts:** add support for hugo 0.20.2 ([ac42370](https://git.habd.as/comfusion/after-dark/commit/ac42370)) | |||||
| * **layouts:** provide form builder snippets ([ada893d](https://git.habd.as/comfusion/after-dark/commit/ada893d)) | |||||
| * **layouts/*:** add cookie disclaimer ([446f6f8](https://git.habd.as/comfusion/after-dark/commit/446f6f8)) | |||||
| * **layouts/search:** and placeholder and allow basic customization ([7a669ef](https://git.habd.as/comfusion/after-dark/commit/7a669ef)) | |||||
| * **layouts/shortcodes:** add grid and cell flexbox shortcode & snippet ([77df2c4](https://git.habd.as/comfusion/after-dark/commit/77df2c4)), closes [#67](https://git.habd.as/comfusion/after-dark/issues/67) | |||||
| * **layouts/shortcodes:** add select shortcode, docs and example use ([85eefe5](https://git.habd.as/comfusion/after-dark/commit/85eefe5)) | |||||
| * **license:** wtfpl -> agpl-3.0-or-later ([1a7a2a9](https://git.habd.as/comfusion/after-dark/commit/1a7a2a9)), closes [#148](https://git.habd.as/comfusion/after-dark/issues/148) | |||||
| * **LICENSE:** you just do what the fuck you want to ([d75ea18](https://git.habd.as/comfusion/after-dark/commit/d75ea18)) | |||||
| * **module/toxic-swamp:** integrate module beta ([743ebfc](https://git.habd.as/comfusion/after-dark/commit/743ebfc)) | |||||
| * **modules:** add analytics module ([1c5c6bb](https://git.habd.as/comfusion/after-dark/commit/1c5c6bb)), closes [#1](https://git.habd.as/comfusion/after-dark/issues/1) | |||||
| * **modules:** add fractal forest module for bpg image format support ([76b9cfd](https://git.habd.as/comfusion/after-dark/commit/76b9cfd)), closes [#8](https://git.habd.as/comfusion/after-dark/issues/8) | |||||
| * **modules:** add hall of mirrors ([592b2b2](https://git.habd.as/comfusion/after-dark/commit/592b2b2)), closes [#24](https://git.habd.as/comfusion/after-dark/issues/24) | |||||
| * **onboarding:** streamline installation ([34ce45a](https://git.habd.as/comfusion/after-dark/commit/34ce45a)) | |||||
| * **personalization:** add customizable accent colors ([be90f47](https://git.habd.as/comfusion/after-dark/commit/be90f47)) | |||||
| * select theme variant directly from site config ([81a4663](https://git.habd.as/comfusion/after-dark/commit/81a4663)), closes [#6](https://git.habd.as/comfusion/after-dark/issues/6) | |||||
| * **powered-by:** add page generation date ([430a468](https://git.habd.as/comfusion/after-dark/commit/430a468)) | |||||
| * **scripts:** add theme upgrade script ([c9a5c3a](https://git.habd.as/comfusion/after-dark/commit/c9a5c3a)), closes [#59](https://git.habd.as/comfusion/after-dark/issues/59) | |||||
| * **scripts:** support custom content dirs in config file ([e72e914](https://git.habd.as/comfusion/after-dark/commit/e72e914)), closes [#59](https://git.habd.as/comfusion/after-dark/issues/59) | |||||
| * **scripts/upgrade:** prompt for update if metadata cannot be found ([db3216d](https://git.habd.as/comfusion/after-dark/commit/db3216d)) | |||||
| * **shortcode:** add trusted custom attr to external ([9b0d5f5](https://git.habd.as/comfusion/after-dark/commit/9b0d5f5)) | |||||
| * **shortcodes:** add blockquote shortcode ([d57e535](https://git.habd.as/comfusion/after-dark/commit/d57e535)) | |||||
| * **shortcodes:** add figure shortcode ([2c06d76](https://git.habd.as/comfusion/after-dark/commit/2c06d76)) | |||||
| * **shortcodes:** add form attr to button ([86d4fee](https://git.habd.as/comfusion/after-dark/commit/86d4fee)) | |||||
| * **shortcodes:** add hack progress bar component ([1933b45](https://git.habd.as/comfusion/after-dark/commit/1933b45)) | |||||
| * **shortcodes:** add hackcss alert shortcode ([09720f8](https://git.habd.as/comfusion/after-dark/commit/09720f8)) | |||||
| * **shortcodes:** add hackcss alert shortcode ([6f20f2d](https://git.habd.as/comfusion/after-dark/commit/6f20f2d)) | |||||
| * **shortcodes:** add hackcss button group component ([af226e4](https://git.habd.as/comfusion/after-dark/commit/af226e4)) | |||||
| * **shortcodes:** add hackcss button shortcode ([65fd4e3](https://git.habd.as/comfusion/after-dark/commit/65fd4e3)) | |||||
| * **shortcodes:** add hackcss card component ([0787170](https://git.habd.as/comfusion/after-dark/commit/0787170)) | |||||
| * **shortcodes:** add hackcss loading component ([e0165ed](https://git.habd.as/comfusion/after-dark/commit/e0165ed)) | |||||
| * **shortcodes:** add hackcss progress component ([b475a47](https://git.habd.as/comfusion/after-dark/commit/b475a47)) | |||||
| * **shortcodes:** add id attribute for forms ([a76dff1](https://git.habd.as/comfusion/after-dark/commit/a76dff1)) | |||||
| * **shortcodes:** add navmenu ([87bd381](https://git.habd.as/comfusion/after-dark/commit/87bd381)), closes [#78](https://git.habd.as/comfusion/after-dark/issues/78) | |||||
| * **shortcodes:** add navmenu navigational aid ([a333be4](https://git.habd.as/comfusion/after-dark/commit/a333be4)) | |||||
| * **shortcodes:** add title attr to external ([9386ef4](https://git.habd.as/comfusion/after-dark/commit/9386ef4)) | |||||
| * **shortcodes:** add type attribute for external links ([5c99a96](https://git.habd.as/comfusion/after-dark/commit/5c99a96)) | |||||
| * **shortcodes:** add value attr to button ([6d63de4](https://git.habd.as/comfusion/after-dark/commit/6d63de4)) | |||||
| * **shortcodes:** allow anonymous blockquotes ([256d15c](https://git.habd.as/comfusion/after-dark/commit/256d15c)) | |||||
| * **shortcodes:** allow button disablement ([7bbf79b](https://git.habd.as/comfusion/after-dark/commit/7bbf79b)), closes [#65](https://git.habd.as/comfusion/after-dark/issues/65) | |||||
| * **shortcodes:** trim whitespace in id attributes ([a5c5704](https://git.habd.as/comfusion/after-dark/commit/a5c5704)) | |||||
| * **shortcodes/button:** add custom class support ([60fb9d2](https://git.habd.as/comfusion/after-dark/commit/60fb9d2)) | |||||
| * **shortcodes/external:** add shorthand usage for named anchors ([0aa0585](https://git.habd.as/comfusion/after-dark/commit/0aa0585)) | |||||
| * **snippets:** add external link snippet ([848cd33](https://git.habd.as/comfusion/after-dark/commit/848cd33)), closes [#48](https://git.habd.as/comfusion/after-dark/issues/48) | |||||
| * **snippets:** alert user on invalid autocomplete value ([cabf33b](https://git.habd.as/comfusion/after-dark/commit/cabf33b)), closes [#46](https://git.habd.as/comfusion/after-dark/issues/46) | |||||
| * **typography:** justify text output and hyphenate ([738aaaa](https://git.habd.as/comfusion/after-dark/commit/738aaaa)) | |||||
| ### BREAKING CHANGES | |||||
| * **license:** relicensing | |||||
| * **feature/section-menu:** removes disqus entirely, previously a deprecated feature | |||||
| * **shortcodes:** shortcodes removed must now be copied to the theme, if used | |||||
| * **modules:** google analytics no longer supported | |||||
| * hugo 0.43 and above required. css override file locations have changed | |||||
| * **$archetypes:** Minimum Hugo version set 0.24, 0.16 - 0.23 must modify archetypes | |||||
| to upgrade add `date` and `title` to custom archetypes. if using a version of hugo prior to 0.24 the custom templates should remove `title` and `date` and not use go templating logic in the archetype files | |||||
| * **$archetypes:** Minimum Hugo version set 0.24, 0.16 - 0.23 must modify archetypes | |||||
| * **$hugo:** Forks and users who've customized css need adjustment as shown in the commit message. There's not a whole lot to it, but it's breaking nonetheless. | |||||
| Using this approach enables the CSS to be moved from the partials directory into the static | |||||
| directory where it belonged the whole time. Perfect set-up for those who decide to use http2/h2 | |||||
| server push for loading styles more efficiently. | |||||
| <a name="7.4.1"></a> | |||||
| ## [7.4.1](https://git.habd.as/comfusion/after-dark/compare/v7.4.0...v7.4.1) (2019-04-28) | |||||
| ### Bug Fixes | |||||
| * **fuzzy-search:** handle search layout hotkey assignments properly ([b2c549e](https://git.habd.as/comfusion/after-dark/commits/b2c549e)) | |||||
| <a name="7.4.0"></a> | |||||
| # [7.4.0](https://git.habd.as/comfusion/after-dark/compare/v7.2.3...v7.4.0) (2019-04-28) | |||||
| ### Features | |||||
| * **fuzzy-search:** add ability to assign arbitrary hotkeys ([48a15c4](https://git.habd.as/comfusion/after-dark/commits/48a15c4)), closes [#74](https://git.habd.as/comfusion/after-dark/issues/74) | |||||
| * **shortcode:** add trusted custom attr to external ([0c81ba7](https://git.habd.as/comfusion/after-dark/commits/0c81ba7)) | |||||
| **Note:** Shortcode update included again in this release with signed commmit | |||||
| <a name="7.3.0"></a> | |||||
| # [7.3.0](https://git.habd.as/comfusion/after-dark/compare/v7.2.3...v7.3.0) (2019-04-27) | |||||
| ### Features | |||||
| * **shortcode:** add trusted custom attr to external ([ba1d35e](https://git.habd.as/comfusion/after-dark/commits/ba1d35e)) | |||||
| <a name="7.2.4"></a> | |||||
| ## [7.2.4](https://git.habd.as/comfusion/after-dark/compare/v7.2.3...v7.2.4) (2019-04-16) | |||||
| ### Bug Fixes | |||||
| Fix issue to allow docs site to load | |||||
| <a name="7.2.3"></a> | |||||
| ## [7.2.3](https://git.habd.as/comfusion/after-dark/compare/v7.2.2...v7.2.3) (2019-04-12) | |||||
| ### But Fixes | |||||
| Fix remaining Hugo warnings masked before last release | |||||
| <a name="7.2.2"></a> | |||||
| ## [7.2.2](https://git.habd.as/comfusion/after-dark/compare/v7.2.1...v7.2.2) (2019-04-12) | |||||
| ### Bug Fixes | |||||
| * **feature/web-feeds:** output last build date in rfc822 with 4-digit year ([c735feb](https://git.habd.as/comfusion/after-dark/commits/c735feb)) | |||||
| * **shortcode/hackcss-alert:** restore legacy behavior for shortcode ([b127eeb](https://git.habd.as/comfusion/after-dark/commits/b127eeb)) | |||||
| <a name="7.2.1"></a> | <a name="7.2.1"></a> | ||||
| ## [7.2.1](https://git.habd.as/comfusion/after-dark/compare/v7.2.0...v7.2.1) (2019-02-22) | ## [7.2.1](https://git.habd.as/comfusion/after-dark/compare/v7.2.0...v7.2.1) (2019-02-22) | ||||
| DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |||||
| Version 2, December 2004 | |||||
| GNU AFFERO GENERAL PUBLIC LICENSE | |||||
| Version 3, 19 November 2007 | |||||
| Copyright (C) 2004 Sam Hocevar <[email protected]> | |||||
| Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> | |||||
| Everyone is permitted to copy and distribute verbatim copies | |||||
| of this license document, but changing it is not allowed. | |||||
| Everyone is permitted to copy and distribute verbatim or modified | |||||
| copies of this license document, and changing it is allowed as long | |||||
| as the name is changed. | |||||
| Preamble | |||||
| DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |||||
| TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |||||
| The GNU Affero General Public License is a free, copyleft license for | |||||
| software and other kinds of works, specifically designed to ensure | |||||
| cooperation with the community in the case of network server software. | |||||
| 0. You just DO WHAT THE FUCK YOU WANT TO. | |||||
| The licenses for most software and other practical works are designed | |||||
| to take away your freedom to share and change the works. By contrast, | |||||
| our General Public Licenses are intended to guarantee your freedom to | |||||
| share and change all versions of a program--to make sure it remains free | |||||
| software for all its users. | |||||
| When we speak of free software, we are referring to freedom, not | |||||
| price. Our General Public Licenses are designed to make sure that you | |||||
| have the freedom to distribute copies of free software (and charge for | |||||
| them if you wish), that you receive source code or can get it if you | |||||
| want it, that you can change the software or use pieces of it in new | |||||
| free programs, and that you know you can do these things. | |||||
| Developers that use our General Public Licenses protect your rights | |||||
| with two steps: (1) assert copyright on the software, and (2) offer | |||||
| you this License which gives you legal permission to copy, distribute | |||||
| and/or modify the software. | |||||
| A secondary benefit of defending all users' freedom is that | |||||
| improvements made in alternate versions of the program, if they | |||||
| receive widespread use, become available for other developers to | |||||
| incorporate. Many developers of free software are heartened and | |||||
| encouraged by the resulting cooperation. However, in the case of | |||||
| software used on network servers, this result may fail to come about. | |||||
| The GNU General Public License permits making a modified version and | |||||
| letting the public access it on a server without ever releasing its | |||||
| source code to the public. | |||||
| The GNU Affero General Public License is designed specifically to | |||||
| ensure that, in such cases, the modified source code becomes available | |||||
| to the community. It requires the operator of a network server to | |||||
| provide the source code of the modified version running there to the | |||||
| users of that server. Therefore, public use of a modified version, on | |||||
| a publicly accessible server, gives the public access to the source | |||||
| code of the modified version. | |||||
| An older license, called the Affero General Public License and | |||||
| published by Affero, was designed to accomplish similar goals. This is | |||||
| a different license, not a version of the Affero GPL, but Affero has | |||||
| released a new version of the Affero GPL which permits relicensing under | |||||
| this license. | |||||
| The precise terms and conditions for copying, distribution and | |||||
| modification follow. | |||||
| TERMS AND CONDITIONS | |||||
| 0. Definitions. | |||||
| "This License" refers to version 3 of the GNU Affero General Public License. | |||||
| "Copyright" also means copyright-like laws that apply to other kinds of | |||||
| works, such as semiconductor masks. | |||||
| "The Program" refers to any copyrightable work licensed under this | |||||
| License. Each licensee is addressed as "you". "Licensees" and | |||||
| "recipients" may be individuals or organizations. | |||||
| To "modify" a work means to copy from or adapt all or part of the work | |||||
| in a fashion requiring copyright permission, other than the making of an | |||||
| exact copy. The resulting work is called a "modified version" of the | |||||
| earlier work or a work "based on" the earlier work. | |||||
| A "covered work" means either the unmodified Program or a work based | |||||
| on the Program. | |||||
| To "propagate" a work means to do anything with it that, without | |||||
| permission, would make you directly or secondarily liable for | |||||
| infringement under applicable copyright law, except executing it on a | |||||
| computer or modifying a private copy. Propagation includes copying, | |||||
| distribution (with or without modification), making available to the | |||||
| public, and in some countries other activities as well. | |||||
| To "convey" a work means any kind of propagation that enables other | |||||
| parties to make or receive copies. Mere interaction with a user through | |||||
| a computer network, with no transfer of a copy, is not conveying. | |||||
| An interactive user interface displays "Appropriate Legal Notices" | |||||
| to the extent that it includes a convenient and prominently visible | |||||
| feature that (1) displays an appropriate copyright notice, and (2) | |||||
| tells the user that there is no warranty for the work (except to the | |||||
| extent that warranties are provided), that licensees may convey the | |||||
| work under this License, and how to view a copy of this License. If | |||||
| the interface presents a list of user commands or options, such as a | |||||
| menu, a prominent item in the list meets this criterion. | |||||
| 1. Source Code. | |||||
| The "source code" for a work means the preferred form of the work | |||||
| for making modifications to it. "Object code" means any non-source | |||||
| form of a work. | |||||
| A "Standard Interface" means an interface that either is an official | |||||
| standard defined by a recognized standards body, or, in the case of | |||||
| interfaces specified for a particular programming language, one that | |||||
| is widely used among developers working in that language. | |||||
| The "System Libraries" of an executable work include anything, other | |||||
| than the work as a whole, that (a) is included in the normal form of | |||||
| packaging a Major Component, but which is not part of that Major | |||||
| Component, and (b) serves only to enable use of the work with that | |||||
| Major Component, or to implement a Standard Interface for which an | |||||
| implementation is available to the public in source code form. A | |||||
| "Major Component", in this context, means a major essential component | |||||
| (kernel, window system, and so on) of the specific operating system | |||||
| (if any) on which the executable work runs, or a compiler used to | |||||
| produce the work, or an object code interpreter used to run it. | |||||
| The "Corresponding Source" for a work in object code form means all | |||||
| the source code needed to generate, install, and (for an executable | |||||
| work) run the object code and to modify the work, including scripts to | |||||
| control those activities. However, it does not include the work's | |||||
| System Libraries, or general-purpose tools or generally available free | |||||
| programs which are used unmodified in performing those activities but | |||||
| which are not part of the work. For example, Corresponding Source | |||||
| includes interface definition files associated with source files for | |||||
| the work, and the source code for shared libraries and dynamically | |||||
| linked subprograms that the work is specifically designed to require, | |||||
| such as by intimate data communication or control flow between those | |||||
| subprograms and other parts of the work. | |||||
| The Corresponding Source need not include anything that users | |||||
| can regenerate automatically from other parts of the Corresponding | |||||
| Source. | |||||
| The Corresponding Source for a work in source code form is that | |||||
| same work. | |||||
| 2. Basic Permissions. | |||||
| All rights granted under this License are granted for the term of | |||||
| copyright on the Program, and are irrevocable provided the stated | |||||
| conditions are met. This License explicitly affirms your unlimited | |||||
| permission to run the unmodified Program. The output from running a | |||||
| covered work is covered by this License only if the output, given its | |||||
| content, constitutes a covered work. This License acknowledges your | |||||
| rights of fair use or other equivalent, as provided by copyright law. | |||||
| You may make, run and propagate covered works that you do not | |||||
| convey, without conditions so long as your license otherwise remains | |||||
| in force. You may convey covered works to others for the sole purpose | |||||
| of having them make modifications exclusively for you, or provide you | |||||
| with facilities for running those works, provided that you comply with | |||||
| the terms of this License in conveying all material for which you do | |||||
| not control copyright. Those thus making or running the covered works | |||||
| for you must do so exclusively on your behalf, under your direction | |||||
| and control, on terms that prohibit them from making any copies of | |||||
| your copyrighted material outside their relationship with you. | |||||
| Conveying under any other circumstances is permitted solely under | |||||
| the conditions stated below. Sublicensing is not allowed; section 10 | |||||
| makes it unnecessary. | |||||
| 3. Protecting Users' Legal Rights From Anti-Circumvention Law. | |||||
| No covered work shall be deemed part of an effective technological | |||||
| measure under any applicable law fulfilling obligations under article | |||||
| 11 of the WIPO copyright treaty adopted on 20 December 1996, or | |||||
| similar laws prohibiting or restricting circumvention of such | |||||
| measures. | |||||
| When you convey a covered work, you waive any legal power to forbid | |||||
| circumvention of technological measures to the extent such circumvention | |||||
| is effected by exercising rights under this License with respect to | |||||
| the covered work, and you disclaim any intention to limit operation or | |||||
| modification of the work as a means of enforcing, against the work's | |||||
| users, your or third parties' legal rights to forbid circumvention of | |||||
| technological measures. | |||||
| 4. Conveying Verbatim Copies. | |||||
| You may convey verbatim copies of the Program's source code as you | |||||
| receive it, in any medium, provided that you conspicuously and | |||||
| appropriately publish on each copy an appropriate copyright notice; | |||||
| keep intact all notices stating that this License and any | |||||
| non-permissive terms added in accord with section 7 apply to the code; | |||||
| keep intact all notices of the absence of any warranty; and give all | |||||
| recipients a copy of this License along with the Program. | |||||
| You may charge any price or no price for each copy that you convey, | |||||
| and you may offer support or warranty protection for a fee. | |||||
| 5. Conveying Modified Source Versions. | |||||
| You may convey a work based on the Program, or the modifications to | |||||
| produce it from the Program, in the form of source code under the | |||||
| terms of section 4, provided that you also meet all of these conditions: | |||||
| a) The work must carry prominent notices stating that you modified | |||||
| it, and giving a relevant date. | |||||
| b) The work must carry prominent notices stating that it is | |||||
| released under this License and any conditions added under section | |||||
| 7. This requirement modifies the requirement in section 4 to | |||||
| "keep intact all notices". | |||||
| c) You must license the entire work, as a whole, under this | |||||
| License to anyone who comes into possession of a copy. This | |||||
| License will therefore apply, along with any applicable section 7 | |||||
| additional terms, to the whole of the work, and all its parts, | |||||
| regardless of how they are packaged. This License gives no | |||||
| permission to license the work in any other way, but it does not | |||||
| invalidate such permission if you have separately received it. | |||||
| d) If the work has interactive user interfaces, each must display | |||||
| Appropriate Legal Notices; however, if the Program has interactive | |||||
| interfaces that do not display Appropriate Legal Notices, your | |||||
| work need not make them do so. | |||||
| A compilation of a covered work with other separate and independent | |||||
| works, which are not by their nature extensions of the covered work, | |||||
| and which are not combined with it such as to form a larger program, | |||||
| in or on a volume of a storage or distribution medium, is called an | |||||
| "aggregate" if the compilation and its resulting copyright are not | |||||
| used to limit the access or legal rights of the compilation's users | |||||
| beyond what the individual works permit. Inclusion of a covered work | |||||
| in an aggregate does not cause this License to apply to the other | |||||
| parts of the aggregate. | |||||
| 6. Conveying Non-Source Forms. | |||||
| You may convey a covered work in object code form under the terms | |||||
| of sections 4 and 5, provided that you also convey the | |||||
| machine-readable Corresponding Source under the terms of this License, | |||||
| in one of these ways: | |||||
| a) Convey the object code in, or embodied in, a physical product | |||||
| (including a physical distribution medium), accompanied by the | |||||
| Corresponding Source fixed on a durable physical medium | |||||
| customarily used for software interchange. | |||||
| b) Convey the object code in, or embodied in, a physical product | |||||
| (including a physical distribution medium), accompanied by a | |||||
| written offer, valid for at least three years and valid for as | |||||
| long as you offer spare parts or customer support for that product | |||||
| model, to give anyone who possesses the object code either (1) a | |||||
| copy of the Corresponding Source for all the software in the | |||||
| product that is covered by this License, on a durable physical | |||||
| medium customarily used for software interchange, for a price no | |||||
| more than your reasonable cost of physically performing this | |||||
| conveying of source, or (2) access to copy the | |||||
| Corresponding Source from a network server at no charge. | |||||
| c) Convey individual copies of the object code with a copy of the | |||||
| written offer to provide the Corresponding Source. This | |||||
| alternative is allowed only occasionally and noncommercially, and | |||||
| only if you received the object code with such an offer, in accord | |||||
| with subsection 6b. | |||||
| d) Convey the object code by offering access from a designated | |||||
| place (gratis or for a charge), and offer equivalent access to the | |||||
| Corresponding Source in the same way through the same place at no | |||||
| further charge. You need not require recipients to copy the | |||||
| Corresponding Source along with the object code. If the place to | |||||
| copy the object code is a network server, the Corresponding Source | |||||
| may be on a different server (operated by you or a third party) | |||||
| that supports equivalent copying facilities, provided you maintain | |||||
| clear directions next to the object code saying where to find the | |||||
| Corresponding Source. Regardless of what server hosts the | |||||
| Corresponding Source, you remain obligated to ensure that it is | |||||
| available for as long as needed to satisfy these requirements. | |||||
| e) Convey the object code using peer-to-peer transmission, provided | |||||
| you inform other peers where the object code and Corresponding | |||||
| Source of the work are being offered to the general public at no | |||||
| charge under subsection 6d. | |||||
| A separable portion of the object code, whose source code is excluded | |||||
| from the Corresponding Source as a System Library, need not be | |||||
| included in conveying the object code work. | |||||
| A "User Product" is either (1) a "consumer product", which means any | |||||
| tangible personal property which is normally used for personal, family, | |||||
| or household purposes, or (2) anything designed or sold for incorporation | |||||
| into a dwelling. In determining whether a product is a consumer product, | |||||
| doubtful cases shall be resolved in favor of coverage. For a particular | |||||
| product received by a particular user, "normally used" refers to a | |||||
| typical or common use of that class of product, regardless of the status | |||||
| of the particular user or of the way in which the particular user | |||||
| actually uses, or expects or is expected to use, the product. A product | |||||
| is a consumer product regardless of whether the product has substantial | |||||
| commercial, industrial or non-consumer uses, unless such uses represent | |||||
| the only significant mode of use of the product. | |||||
| "Installation Information" for a User Product means any methods, | |||||
| procedures, authorization keys, or other information required to install | |||||
| and execute modified versions of a covered work in that User Product from | |||||
| a modified version of its Corresponding Source. The information must | |||||
| suffice to ensure that the continued functioning of the modified object | |||||
| code is in no case prevented or interfered with solely because | |||||
| modification has been made. | |||||
| If you convey an object code work under this section in, or with, or | |||||
| specifically for use in, a User Product, and the conveying occurs as | |||||
| part of a transaction in which the right of possession and use of the | |||||
| User Product is transferred to the recipient in perpetuity or for a | |||||
| fixed term (regardless of how the transaction is characterized), the | |||||
| Corresponding Source conveyed under this section must be accompanied | |||||
| by the Installation Information. But this requirement does not apply | |||||
| if neither you nor any third party retains the ability to install | |||||
| modified object code on the User Product (for example, the work has | |||||
| been installed in ROM). | |||||
| The requirement to provide Installation Information does not include a | |||||
| requirement to continue to provide support service, warranty, or updates | |||||
| for a work that has been modified or installed by the recipient, or for | |||||
| the User Product in which it has been modified or installed. Access to a | |||||
| network may be denied when the modification itself materially and | |||||
| adversely affects the operation of the network or violates the rules and | |||||
| protocols for communication across the network. | |||||
| Corresponding Source conveyed, and Installation Information provided, | |||||
| in accord with this section must be in a format that is publicly | |||||
| documented (and with an implementation available to the public in | |||||
| source code form), and must require no special password or key for | |||||
| unpacking, reading or copying. | |||||
| 7. Additional Terms. | |||||
| "Additional permissions" are terms that supplement the terms of this | |||||
| License by making exceptions from one or more of its conditions. | |||||
| Additional permissions that are applicable to the entire Program shall | |||||
| be treated as though they were included in this License, to the extent | |||||
| that they are valid under applicable law. If additional permissions | |||||
| apply only to part of the Program, that part may be used separately | |||||
| under those permissions, but the entire Program remains governed by | |||||
| this License without regard to the additional permissions. | |||||
| When you convey a copy of a covered work, you may at your option | |||||
| remove any additional permissions from that copy, or from any part of | |||||
| it. (Additional permissions may be written to require their own | |||||
| removal in certain cases when you modify the work.) You may place | |||||
| additional permissions on material, added by you to a covered work, | |||||
| for which you have or can give appropriate copyright permission. | |||||
| Notwithstanding any other provision of this License, for material you | |||||
| add to a covered work, you may (if authorized by the copyright holders of | |||||
| that material) supplement the terms of this License with terms: | |||||
| a) Disclaiming warranty or limiting liability differently from the | |||||
| terms of sections 15 and 16 of this License; or | |||||
| b) Requiring preservation of specified reasonable legal notices or | |||||
| author attributions in that material or in the Appropriate Legal | |||||
| Notices displayed by works containing it; or | |||||
| c) Prohibiting misrepresentation of the origin of that material, or | |||||
| requiring that modified versions of such material be marked in | |||||
| reasonable ways as different from the original version; or | |||||
| d) Limiting the use for publicity purposes of names of licensors or | |||||
| authors of the material; or | |||||
| e) Declining to grant rights under trademark law for use of some | |||||
| trade names, trademarks, or service marks; or | |||||
| f) Requiring indemnification of licensors and authors of that | |||||
| material by anyone who conveys the material (or modified versions of | |||||
| it) with contractual assumptions of liability to the recipient, for | |||||
| any liability that these contractual assumptions directly impose on | |||||
| those licensors and authors. | |||||
| All other non-permissive additional terms are considered "further | |||||
| restrictions" within the meaning of section 10. If the Program as you | |||||
| received it, or any part of it, contains a notice stating that it is | |||||
| governed by this License along with a term that is a further | |||||
| restriction, you may remove that term. If a license document contains | |||||
| a further restriction but permits relicensing or conveying under this | |||||
| License, you may add to a covered work material governed by the terms | |||||
| of that license document, provided that the further restriction does | |||||
| not survive such relicensing or conveying. | |||||
| If you add terms to a covered work in accord with this section, you | |||||
| must place, in the relevant source files, a statement of the | |||||
| additional terms that apply to those files, or a notice indicating | |||||
| where to find the applicable terms. | |||||
| Additional terms, permissive or non-permissive, may be stated in the | |||||
| form of a separately written license, or stated as exceptions; | |||||
| the above requirements apply either way. | |||||
| 8. Termination. | |||||
| You may not propagate or modify a covered work except as expressly | |||||
| provided under this License. Any attempt otherwise to propagate or | |||||
| modify it is void, and will automatically terminate your rights under | |||||
| this License (including any patent licenses granted under the third | |||||
| paragraph of section 11). | |||||
| However, if you cease all violation of this License, then your | |||||
| license from a particular copyright holder is reinstated (a) | |||||
| provisionally, unless and until the copyright holder explicitly and | |||||
| finally terminates your license, and (b) permanently, if the copyright | |||||
| holder fails to notify you of the violation by some reasonable means | |||||
| prior to 60 days after the cessation. | |||||
| Moreover, your license from a particular copyright holder is | |||||
| reinstated permanently if the copyright holder notifies you of the | |||||
| violation by some reasonable means, this is the first time you have | |||||
| received notice of violation of this License (for any work) from that | |||||
| copyright holder, and you cure the violation prior to 30 days after | |||||
| your receipt of the notice. | |||||
| Termination of your rights under this section does not terminate the | |||||
| licenses of parties who have received copies or rights from you under | |||||
| this License. If your rights have been terminated and not permanently | |||||
| reinstated, you do not qualify to receive new licenses for the same | |||||
| material under section 10. | |||||
| 9. Acceptance Not Required for Having Copies. | |||||
| You are not required to accept this License in order to receive or | |||||
| run a copy of the Program. Ancillary propagation of a covered work | |||||
| occurring solely as a consequence of using peer-to-peer transmission | |||||
| to receive a copy likewise does not require acceptance. However, | |||||
| nothing other than this License grants you permission to propagate or | |||||
| modify any covered work. These actions infringe copyright if you do | |||||
| not accept this License. Therefore, by modifying or propagating a | |||||
| covered work, you indicate your acceptance of this License to do so. | |||||
| 10. Automatic Licensing of Downstream Recipients. | |||||
| Each time you convey a covered work, the recipient automatically | |||||
| receives a license from the original licensors, to run, modify and | |||||
| propagate that work, subject to this License. You are not responsible | |||||
| for enforcing compliance by third parties with this License. | |||||
| An "entity transaction" is a transaction transferring control of an | |||||
| organization, or substantially all assets of one, or subdividing an | |||||
| organization, or merging organizations. If propagation of a covered | |||||
| work results from an entity transaction, each party to that | |||||
| transaction who receives a copy of the work also receives whatever | |||||
| licenses to the work the party's predecessor in interest had or could | |||||
| give under the previous paragraph, plus a right to possession of the | |||||
| Corresponding Source of the work from the predecessor in interest, if | |||||
| the predecessor has it or can get it with reasonable efforts. | |||||
| You may not impose any further restrictions on the exercise of the | |||||
| rights granted or affirmed under this License. For example, you may | |||||
| not impose a license fee, royalty, or other charge for exercise of | |||||
| rights granted under this License, and you may not initiate litigation | |||||
| (including a cross-claim or counterclaim in a lawsuit) alleging that | |||||
| any patent claim is infringed by making, using, selling, offering for | |||||
| sale, or importing the Program or any portion of it. | |||||
| 11. Patents. | |||||
| A "contributor" is a copyright holder who authorizes use under this | |||||
| License of the Program or a work on which the Program is based. The | |||||
| work thus licensed is called the contributor's "contributor version". | |||||
| A contributor's "essential patent claims" are all patent claims | |||||
| owned or controlled by the contributor, whether already acquired or | |||||
| hereafter acquired, that would be infringed by some manner, permitted | |||||
| by this License, of making, using, or selling its contributor version, | |||||
| but do not include claims that would be infringed only as a | |||||
| consequence of further modification of the contributor version. For | |||||
| purposes of this definition, "control" includes the right to grant | |||||
| patent sublicenses in a manner consistent with the requirements of | |||||
| this License. | |||||
| Each contributor grants you a non-exclusive, worldwide, royalty-free | |||||
| patent license under the contributor's essential patent claims, to | |||||
| make, use, sell, offer for sale, import and otherwise run, modify and | |||||
| propagate the contents of its contributor version. | |||||
| In the following three paragraphs, a "patent license" is any express | |||||
| agreement or commitment, however denominated, not to enforce a patent | |||||
| (such as an express permission to practice a patent or covenant not to | |||||
| sue for patent infringement). To "grant" such a patent license to a | |||||
| party means to make such an agreement or commitment not to enforce a | |||||
| patent against the party. | |||||
| If you convey a covered work, knowingly relying on a patent license, | |||||
| and the Corresponding Source of the work is not available for anyone | |||||
| to copy, free of charge and under the terms of this License, through a | |||||
| publicly available network server or other readily accessible means, | |||||
| then you must either (1) cause the Corresponding Source to be so | |||||
| available, or (2) arrange to deprive yourself of the benefit of the | |||||
| patent license for this particular work, or (3) arrange, in a manner | |||||
| consistent with the requirements of this License, to extend the patent | |||||
| license to downstream recipients. "Knowingly relying" means you have | |||||
| actual knowledge that, but for the patent license, your conveying the | |||||
| covered work in a country, or your recipient's use of the covered work | |||||
| in a country, would infringe one or more identifiable patents in that | |||||
| country that you have reason to believe are valid. | |||||
| If, pursuant to or in connection with a single transaction or | |||||
| arrangement, you convey, or propagate by procuring conveyance of, a | |||||
| covered work, and grant a patent license to some of the parties | |||||
| receiving the covered work authorizing them to use, propagate, modify | |||||
| or convey a specific copy of the covered work, then the patent license | |||||
| you grant is automatically extended to all recipients of the covered | |||||
| work and works based on it. | |||||
| A patent license is "discriminatory" if it does not include within | |||||
| the scope of its coverage, prohibits the exercise of, or is | |||||
| conditioned on the non-exercise of one or more of the rights that are | |||||
| specifically granted under this License. You may not convey a covered | |||||
| work if you are a party to an arrangement with a third party that is | |||||
| in the business of distributing software, under which you make payment | |||||
| to the third party based on the extent of your activity of conveying | |||||
| the work, and under which the third party grants, to any of the | |||||
| parties who would receive the covered work from you, a discriminatory | |||||
| patent license (a) in connection with copies of the covered work | |||||
| conveyed by you (or copies made from those copies), or (b) primarily | |||||
| for and in connection with specific products or compilations that | |||||
| contain the covered work, unless you entered into that arrangement, | |||||
| or that patent license was granted, prior to 28 March 2007. | |||||
| Nothing in this License shall be construed as excluding or limiting | |||||
| any implied license or other defenses to infringement that may | |||||
| otherwise be available to you under applicable patent law. | |||||
| 12. No Surrender of Others' Freedom. | |||||
| If conditions are imposed on you (whether by court order, agreement or | |||||
| otherwise) that contradict the conditions of this License, they do not | |||||
| excuse you from the conditions of this License. If you cannot convey a | |||||
| covered work so as to satisfy simultaneously your obligations under this | |||||
| License and any other pertinent obligations, then as a consequence you may | |||||
| not convey it at all. For example, if you agree to terms that obligate you | |||||
| to collect a royalty for further conveying from those to whom you convey | |||||
| the Program, the only way you could satisfy both those terms and this | |||||
| License would be to refrain entirely from conveying the Program. | |||||
| 13. Remote Network Interaction; Use with the GNU General Public License. | |||||
| Notwithstanding any other provision of this License, if you modify the | |||||
| Program, your modified version must prominently offer all users | |||||
| interacting with it remotely through a computer network (if your version | |||||
| supports such interaction) an opportunity to receive the Corresponding | |||||
| Source of your version by providing access to the Corresponding Source | |||||
| from a network server at no charge, through some standard or customary | |||||
| means of facilitating copying of software. This Corresponding Source | |||||
| shall include the Corresponding Source for any work covered by version 3 | |||||
| of the GNU General Public License that is incorporated pursuant to the | |||||
| following paragraph. | |||||
| Notwithstanding any other provision of this License, you have | |||||
| permission to link or combine any covered work with a work licensed | |||||
| under version 3 of the GNU General Public License into a single | |||||
| combined work, and to convey the resulting work. The terms of this | |||||
| License will continue to apply to the part which is the covered work, | |||||
| but the work with which it is combined will remain governed by version | |||||
| 3 of the GNU General Public License. | |||||
| 14. Revised Versions of this License. | |||||
| The Free Software Foundation may publish revised and/or new versions of | |||||
| the GNU Affero General Public License from time to time. Such new versions | |||||
| will be similar in spirit to the present version, but may differ in detail to | |||||
| address new problems or concerns. | |||||
| Each version is given a distinguishing version number. If the | |||||
| Program specifies that a certain numbered version of the GNU Affero General | |||||
| Public License "or any later version" applies to it, you have the | |||||
| option of following the terms and conditions either of that numbered | |||||
| version or of any later version published by the Free Software | |||||
| Foundation. If the Program does not specify a version number of the | |||||
| GNU Affero General Public License, you may choose any version ever published | |||||
| by the Free Software Foundation. | |||||
| If the Program specifies that a proxy can decide which future | |||||
| versions of the GNU Affero General Public License can be used, that proxy's | |||||
| public statement of acceptance of a version permanently authorizes you | |||||
| to choose that version for the Program. | |||||
| Later license versions may give you additional or different | |||||
| permissions. However, no additional obligations are imposed on any | |||||
| author or copyright holder as a result of your choosing to follow a | |||||
| later version. | |||||
| 15. Disclaimer of Warranty. | |||||
| THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | |||||
| APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | |||||
| HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | |||||
| OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | |||||
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
| PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | |||||
| IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | |||||
| ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | |||||
| 16. Limitation of Liability. | |||||
| IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | |||||
| THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | |||||
| GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | |||||
| USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | |||||
| DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | |||||
| PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | |||||
| EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | |||||
| SUCH DAMAGES. | |||||
| 17. Interpretation of Sections 15 and 16. | |||||
| If the disclaimer of warranty and limitation of liability provided | |||||
| above cannot be given local legal effect according to their terms, | |||||
| reviewing courts shall apply local law that most closely approximates | |||||
| an absolute waiver of all civil liability in connection with the | |||||
| Program, unless a warranty or assumption of liability accompanies a | |||||
| copy of the Program in return for a fee. | |||||
| END OF TERMS AND CONDITIONS | |||||
| How to Apply These Terms to Your New Programs | |||||
| If you develop a new program, and you want it to be of the greatest | |||||
| possible use to the public, the best way to achieve this is to make it | |||||
| free software which everyone can redistribute and change under these terms. | |||||
| To do so, attach the following notices to the program. It is safest | |||||
| to attach them to the start of each source file to most effectively | |||||
| state the exclusion of warranty; and each file should have at least | |||||
| the "copyright" line and a pointer to where the full notice is found. | |||||
| <one line to give the program's name and a brief idea of what it does.> | |||||
| Copyright (C) <year> <name of author> | |||||
| This program is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| This program is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| Also add information on how to contact you by electronic and paper mail. | |||||
| If your software can interact with users remotely through a computer | |||||
| network, you should also make sure that it provides a way for users to | |||||
| get its source. For example, if your program is a web application, its | |||||
| interface could display a "Source" link that leads users to an archive | |||||
| of the code. There are many ways you could offer source, and different | |||||
| solutions will be better for different programs; see section 13 for the | |||||
| specific requirements. | |||||
| You should also get your employer (if you work as a programmer) or school, | |||||
| if any, to sign a "copyright disclaimer" for the program, if necessary. | |||||
| For more information on this, and how to apply and follow the GNU AGPL, see | |||||
| <https://www.gnu.org/licenses/>. |
| # After Dark | |||||
| <img | |||||
| alt="After Dark" | |||||
| src="https://git.habd.as/comfusion/after-dark/raw/branch/master/static/images/logo-dark.png" | |||||
| width="358"> | |||||
| > After Dark is free and open-source software you can use to create a website, blog or app. Utilize the world's fastest framework for building websites and design your entire site right inside the terminal. | |||||
| **Hugo Dark Theme Site Generator** | |||||
| <br>[Docs](https://after-dark.habd.as) • [Releases](https://git.habd.as/comfusion/after-dark/releases) • [Community](https://t.me/afterdarkhugo) | |||||
| ## After Dark | |||||
| [](https://www.npmjs.com/package/after-dark) | [](https://www.npmjs.com/package/after-dark) | ||||
| [](https://www.npmjs.com/package/after-dark) | [](https://www.npmjs.com/package/after-dark) | ||||
| [](https://gohugo.io) | |||||
| [](https://git.habd.as/comfusion/after-dark/src/branch/master/COPYING) | |||||
| [](https://t.me/comfusion) | |||||
| [](https://keybase.io/jhabdas) | |||||
| [](https://gohugo.io) | |||||
| [](https://after-dark.habd.as/#chat) | |||||
| [](https://git.habd.as/comfusion/after-dark/src/branch/master/COPYING) | |||||
| One command is all you need to start a new website: | |||||
| ```sh | |||||
| wget -qO - https://go.habd.as/after-dark | sh | |||||
| ``` | |||||
| **After Dark** is an extensible, robust templating system for [Hugo](https://gohugo.io) written from the ground up for speed, privacy and security. | |||||
| ## Features | ## Features | ||||
| - [Streamlined Workflow](https://after-dark.habd.as/#feature-workflow) – cross-platform, 1 dependency, single-codebase | |||||
| - [Unparalleled Speed](https://after-dark.habd.as/#feature-speed) – ~0.615s builds, decisecond page loads | |||||
| - [Advanced Graphics](https://after-dark.habd.as/#feature-graphics) – responsive post images with lqip | |||||
| - [Rewards System](https://after-dark.habd.as/#feature-rewards) – monetize attention and earn borderless income | |||||
| - [Fuzzy Search](https://after-dark.habd.as/#feature-search) – automatic indexing and no third-parties | |||||
| - [Easily Customized](https://after-dark.habd.as/#feature-customize) – change skins, strip styles, create layouts | |||||
| - [Securely Designed](https://after-dark.habd.as/#feature-security) – csp, referrer policy, release hashes | |||||
| - [Privacy Focused](https://after-dark.habd.as/#feature-privacy) – no cookies and no external requests, ephemeral ssh hosting | |||||
| Click a link below to learn more: | |||||
| - **[Developer Focused](https://after-dark.habd.as/#feature-workflow)**: Cross-platform, 1 dependency, single-codebase. | |||||
| - **[Incredibly Fast](https://after-dark.habd.as/#feature-speed)**: ~0.615s builds and decisecond page loads. | |||||
| - **[Privacy Aware](https://after-dark.habd.as/#feature-privacy)**: No cookies, no external requests, ephemeral hosting. | |||||
| - **[Securely Designed](https://after-dark.habd.as/#feature-security)**: Source-level integrity, content security and more. | |||||
| - **[Advanced Graphics](https://after-dark.habd.as/#feature-graphics)**: Silky-smooth post and homepage images. | |||||
| - **[Easily Customized](https://after-dark.habd.as/#feature-customize)**: Easily modify website look-and-feel. | |||||
| - **[Fuzzy Search](https://after-dark.habd.as/#feature-search)**: Offline, automatic and no third-parties. | |||||
| - **[Rewards System](https://after-dark.habd.as/#feature-rewards)**: Earn rewards for keeping your software up-to-date. | |||||
| - **[Batteries Included](https://after-dark.habd.as/#feature-extras)**: Integrate with Gitea, k8s, Traefik and Fathom. | |||||
| - **[Extended Builds](https://after-dark.habd.as/#feature-builds)**: Create high-performance Hugo builds with integrated Sass support. | |||||
| ## Screenshot | |||||
| [](https://after-dark.habd.as) | |||||
| ## Demo | ## Demo | ||||
| Click a screenshot to view a live demo of the functionality. | |||||
| <table> | |||||
| <tr> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/after-dark-v6.15.0-homepage-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/feature/svg-favicon/"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/feature-online-help-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/404.html"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/feature-error-page-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <th scope="col"><center>Help Docs</center></th> | |||||
| <th scope="col"><center>SVG Favicon</center></th> | |||||
| <th scope="col"><center>404 Page</center></th> | |||||
| </tr> | |||||
| </table> | |||||
| <table> | |||||
| <tr> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/module/toxic-swamp/"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/module-toxic-swamp-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/shortcode/button/"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/shortcode-button-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| <td> | |||||
| <a href="https://after-dark.habd.as/extra/high-tea/"> | |||||
| <img alt src="https://after-dark.habd.as/images/screenshots/extra-high-tea-fs8.png"> | |||||
| </a> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <th scope="col"><center>Add-on Modules</center></th> | |||||
| <th scope="col"><center>Form Controls</center></th> | |||||
| <th scope="col"><center>IndieWeb Extras</center></th> | |||||
| </tr> | |||||
| </table> | |||||
| Visit the [official docs](https://after-dark.habd.as) for demo and documentation. For an example site see [habd.as](https://habd.as). Additional examples listed in the source repository Wiki. | |||||
| ## Getting Started | ## Getting Started | ||||
| Please [Install Hugo](https://gohugo.io/getting-started/installing) `0.44` or greater before getting started. | |||||
| [Install Hugo](https://gohugo.io/getting-started/installing) `0.51` or greater on your machine before getting started unless starting with [After Dark K3s](https://after-dark.habd.as/extra/after-dark-k3s) or creating an [Extended Build](https://after-dark.habd.as/#feature-builds). | |||||
| ### Installation | ### Installation | ||||
| For scripted installation use [Quick Install](https://after-dark.habd.as/feature/quick-install/). Otherwise download a copy and: | |||||
| For fastest installation use the provided [Quick Install](https://after-dark.habd.as/feature/quick-install/) script. Quick Install is ideal for first-time users and does not require use of git. Use it to automatically set-up, configure and run a sample After Dark website you may re-purpose as your own. | |||||
| By convention After Dark may be used with an existing Hugo site by git cloning to or adding as a submodule of the `themes` directory: | |||||
| ```sh | ```sh | ||||
| hugo serve --theme after-dark | |||||
| flying-toasters | |||||
| ├── static | |||||
| └── themes | |||||
| └── after-dark # the clone or submodule | |||||
| ``` | ``` | ||||
| See [Install a Single Theme](https://gohugo.io/themes/installing-and-using-themes/#install-a-single-theme) on the Hugo docs site for further instructions. | |||||
| After Dark releases are tagged in git and [packaged on NPM](https://www.npmjs.com/package/after-dark). Use the NPM package to integrate After Dark into existing workflows. | |||||
| ### Usage | |||||
| Review the [Online Help](https://after-dark.habd.as/feature/online-help/) to learn how to set-up and customize After Dark. Docs included with installation and may be served locally. | |||||
| ### Upgrading | ### Upgrading | ||||
| Run the [Upgrade Script](https://after-dark.habd.as/feature/upgrade-script/) to check for updates and upgrade automatically: | Run the [Upgrade Script](https://after-dark.habd.as/feature/upgrade-script/) to check for updates and upgrade automatically: | ||||
| ./themes/after-dark/bin/upgrade | ./themes/after-dark/bin/upgrade | ||||
| ``` | ``` | ||||
| ## Verifying | |||||
| Upgrading replaces the file contents of the theme as a whole for security reasons. If you wish to modify the source please create a fork. | |||||
| ### Verifying | |||||
| If installed or upgraded via script you may use the [Release Validator](https://after-dark.habd.as/validate/) to verify you're running a PGP-signed and SHA-verified release. Integrity is checked at the source level and may be performed offline. See [Release Hashes](https://after-dark.habd.as/feature/release-hashes/) for more info. | If installed or upgraded via script you may use the [Release Validator](https://after-dark.habd.as/validate/) to verify you're running a PGP-signed and SHA-verified release. Integrity is checked at the source level and may be performed offline. See [Release Hashes](https://after-dark.habd.as/feature/release-hashes/) for more info. | ||||
| ## Usage | |||||
| ## Credits | |||||
| Special thanks to エゴイスト for [hackcss](https://git.habd.as/jhabdas/hack), Dan Klammer for the [bytesize icons](https://git.habd.as/comfusion/bytesize-icons) and Vincent Prouillet for the [Zola port](https://www.getzola.org/themes/after-dark/). | |||||
| Use the included [Online Help](https://after-dark.habd.as/feature/online-help/) to learn how to set-up and use After Dark. Help docs may be served locally and do not require an Internet connection to function. | |||||
| ## Rights | |||||
| ## Credits | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| Special thanks to エゴイスト for [hackcss](https://git.habd.as/comfusion/hack), Dan Klammer for the [bytesize icons](https://git.habd.as/comfusion/bytesize-icons) and Vincent Prouillet for the [Zola port](https://www.getzola.org/themes/after-dark/). | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published | |||||
| by the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| ## License | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| This work is free. You can redistribute it and/or modify it under the | |||||
| terms of the Do What The Fuck You Want To Public License, Version 2, | |||||
| as published by Sam Hocevar. The full text of the license is included in the file COPYING in the source. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| +++ | +++ | ||||
| title = "{{ replace .TranslationBaseName "-" " " | title }}" | title = "{{ replace .TranslationBaseName "-" " " | title }}" | ||||
| date = {{ .Date }} | date = {{ .Date }} | ||||
| description = "This text is displayed in search result listings." | description = "This text is displayed in search result listings." | ||||
| draft = true | draft = true | ||||
| [[copyright]] | |||||
| owner = "{{ .Site.Params.author | default .Site.Title }}" | |||||
| date = "{{ now.Format "2006" }}" | |||||
| license = "cc-by-nd-4.0" | |||||
| +++ | +++ |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| +++ | +++ | ||||
| title = "{{ replace .TranslationBaseName "-" " " | title }}" | title = "{{ replace .TranslationBaseName "-" " " | title }}" | ||||
| date = {{ .Date }} | date = {{ .Date }} | ||||
| images = [ | images = [ | ||||
| "https://source.unsplash.com/collection/983219/1600x900" | "https://source.unsplash.com/collection/983219/1600x900" | ||||
| ] # overrides site-wide open graph image | ] # overrides site-wide open graph image | ||||
| [[copyright]] | |||||
| owner = "{{ .Site.Params.author | default .Site.Title }}" | |||||
| date = "{{ now.Format "2006" }}" | |||||
| license = "cc-by-nc-sa-4.0" | |||||
| +++ | +++ | ||||
| Before continuing please create a post archetype. Archetypes are located within markdown files in the `archetypes` directory of your site: | Before continuing please create a post archetype. Archetypes are located within markdown files in the `archetypes` directory of your site: |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| +++ | +++ | ||||
| title = "Search" # title of the page | title = "Search" # title of the page | ||||
| layout = "search" # sets the layout to use | layout = "search" # sets the layout to use | ||||
| noindex = true # tell robots not to index | noindex = true # tell robots not to index | ||||
| [form] | [form] | ||||
| helpblock = "Press <kbd>s</kbd> to focus input anytime." | |||||
| helpblock = "Press <kbd>/</kbd> or <kbd>s</kbd> to modify your search." | |||||
| hotkeys = ["/", "s"] | |||||
| [form.input] | [form.input] | ||||
| placeholder = "Enter search query…" | |||||
| placeholder = "uzzy searvh" | |||||
| disabled = false | disabled = false | ||||
| [security.csp.directives] | [security.csp.directives] | ||||
| scriptSrc = [ | scriptSrc = [ | ||||
| "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='", | |||||
| "'sha512-6G7cmlXR4eLBphfUmmEWLEnLWSEtZPdKP2xv7bXZ8D3LReZazwxcwb4tTx2HeCeoAChG5ZCE+UqHmbe3K4xoJg=='", | |||||
| "'unsafe-eval'" | "'unsafe-eval'" | ||||
| ] | ] | ||||
| +++ | +++ |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| ul.thumbnail.grid { | |||||
| margin: 10px -10px; | |||||
| } | |||||
| ul.thumbnail.grid li { | |||||
| padding: 10px; | |||||
| margin-bottom: 10px; | |||||
| } | |||||
| ul.thumbnail.grid li h2 { | |||||
| margin-bottom: 1rem; | |||||
| } | |||||
| ul.thumbnail.grid li a:hover figure { | |||||
| filter: brightness(1.1); | |||||
| } | |||||
| ul.thumbnail.grid li a figure > img { | |||||
| border-radius: 2px; | |||||
| } | |||||
| .hack ul.thumbnail.grid li h2::before { | |||||
| content: initial; | |||||
| } | |||||
| .hack ul.thumbnail.grid li::after { | |||||
| content: initial; | |||||
| } | |||||
| .standard ul.thumbnail.grid { | |||||
| padding-left: 0px; | |||||
| list-style-type: none; | |||||
| display: flex; | |||||
| } |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| .hack header figure[itemtype*="ImageObject"] { | |||||
| position: relative; | |||||
| } | |||||
| .hack header figure[itemtype*="ImageObject"] figcaption { | |||||
| position: absolute; | |||||
| bottom: 0; | |||||
| right: 0; | |||||
| text-align: right; | |||||
| padding: 15px; | |||||
| font-style: oblique; | |||||
| font-size: smaller; | |||||
| mix-blend-mode: soft-light; | |||||
| } | |||||
| .hack header figure[itemtype*="ImageObject"] [itemprop="headline"] { | |||||
| font-weight: bold; | |||||
| } |
| {{/* | |||||
| Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| This file is part of After Dark. | |||||
| After Dark is free software: you can redistribute it and/or modify | |||||
| it under the terms of the GNU Affero General Public License as published by | |||||
| the Free Software Foundation, either version 3 of the License, or | |||||
| (at your option) any later version. | |||||
| After Dark is distributed in the hope that it will be useful, | |||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| GNU Affero General Public License for more details. | |||||
| You should have received a copy of the GNU Affero General Public License | |||||
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ -}} | |||||
| [v-cloak] .js-cloaked { | |||||
| display: none; | |||||
| } | |||||
| [v-cloak] .js-initializing::after { | |||||
| content: "Initializing search. Please wait..." | |||||
| } |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| a[rel*="external"]::after { | a[rel*="external"]::after { | ||||
| content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E"); | content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E"); | ||||
| } | } |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| :root { | :root { | ||||
| scroll-behavior: smooth; | scroll-behavior: smooth; | ||||
| --screen-size-small: 30em; /* breakpoint reference only */ | --screen-size-small: 30em; /* breakpoint reference only */ | ||||
| @keyframes intro { | @keyframes intro { | ||||
| 0% { opacity: 0 } 100% { opacity: 1 } | 0% { opacity: 0 } 100% { opacity: 1 } | ||||
| } | } | ||||
| .blur-up { | |||||
| -webkit-filter: blur(5px); | |||||
| .blur-up.lazyloading { | |||||
| filter: blur(5px); | filter: blur(5px); | ||||
| transition: filter 400ms, -webkit-filter 400ms; | |||||
| opacity: 1; | |||||
| transition: opacity 1s, filter 1.5s; | |||||
| } | |||||
| .blur-up.lazyload { | |||||
| opacity: 0; | |||||
| filter: blur(10px); | |||||
| } | } | ||||
| .blur-up.lazyloaded { | .blur-up.lazyloaded { | ||||
| -webkit-filter: blur(0); | |||||
| filter: blur(0); | filter: blur(0); | ||||
| transition: filter 1s; | |||||
| } | } | ||||
| .hack .readmore { | .hack .readmore { | ||||
| margin-bottom: 2.2em; | margin-bottom: 2.2em; | ||||
| } | } | ||||
| .responsive-iframe { | |||||
| .responsive-iframe, | |||||
| .ratio-container { | |||||
| position: relative; | position: relative; | ||||
| padding-bottom: 56.25%; /* 16:9 */ | |||||
| padding-bottom: 56.25%; /* 16:9 = 56.25% = calc(9 / 16 * 100%) */ | |||||
| padding-top: 25px; | padding-top: 25px; | ||||
| height: 0; | height: 0; | ||||
| } | } | ||||
| .responsive-iframe iframe { | |||||
| .responsive-iframe iframe, | |||||
| .ratio-container > *:not([itemprop="caption"]) { | |||||
| position: absolute; | position: absolute; | ||||
| top: 0; | top: 0; | ||||
| left: 0; | left: 0; | ||||
| animation-delay: 0.15s; | animation-delay: 0.15s; | ||||
| } | } | ||||
| header:first-of-type + details { | header:first-of-type + details { | ||||
| margin-top: 1rem; | |||||
| margin: 20px 0; | |||||
| } | } | ||||
| footer time[datetime$="M"]:before { | footer time[datetime$="M"]:before { | ||||
| content: "\2013\0020"; | content: "\2013\0020"; | ||||
| :disabled { | :disabled { | ||||
| cursor: not-allowed; | cursor: not-allowed; | ||||
| } | } | ||||
| #search-app [v-cloak] { | |||||
| display: none; | |||||
| } | |||||
| /* hack.css overrides and enhancements */ | /* hack.css overrides and enhancements */ | ||||
| .hack li ul { | .hack li ul { | ||||
| margin: 0; | margin: 0; | ||||
| .hack blockquote:after { | .hack blockquote:after { | ||||
| line-height: 1.5; | line-height: 1.5; | ||||
| } | } | ||||
| .hack figure { | |||||
| .hack figure, | |||||
| .standard figure { | |||||
| margin: unset; | margin: unset; | ||||
| } | } | ||||
| .hack figure a { | .hack figure a { | ||||
| .hack figure a:hover { | .hack figure a:hover { | ||||
| background-color: inherit; | background-color: inherit; | ||||
| } | } | ||||
| article [itemprop="description"] { | |||||
| margin-bottom: 20px; | |||||
| margin-top: 20px; | |||||
| } | |||||
| article header img { | article header img { | ||||
| width: 100%; | width: 100%; | ||||
| border-radius: 3px; | border-radius: 3px; | ||||
| @media only screen and (min-width: 768px) { | @media only screen and (min-width: 768px) { | ||||
| html { | html { | ||||
| font-size: 16px; | font-size: 16px; | ||||
| margin-left: calc(100vw - 100%); | |||||
| } | } | ||||
| .container { | .container { | ||||
| max-width: 50rem; | max-width: 50rem; | ||||
| } | } | ||||
| } | } | ||||
| @media only screen and (min-width: 768px), (-ms-high-contrast: active), (-ms-high-contrast: none) { | |||||
| /* @see http://browserhacks.com/#hack-28f493d247a12ab654f6c3637f6978d5 */ | |||||
| html { | |||||
| margin-left: calc(100vw - 100%); /* @see https://aykevl.nl/2014/09/fix-jumping-scrollbar */ | |||||
| } | |||||
| } |
| The MIT License (MIT) | |||||
| Copyright (c) 2016 EGOIST [email protected] | |||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| of this software and associated documentation files (the "Software"), to deal | |||||
| in the Software without restriction, including without limitation the rights | |||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| copies of the Software, and to permit persons to whom the Software is | |||||
| furnished to do so, subject to the following conditions: | |||||
| The above copyright notice and this permission notice shall be included in | |||||
| all copies or substantial portions of the Software. | |||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
| THE SOFTWARE. |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject(["{{ "/js/lazysizes.min.js" | relURL }}"]); | fetchInject(["{{ "/js/lazysizes.min.js" | relURL }}"]); |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| fetchInject([ | fetchInject([ | ||||
| "{{ "/js/vue.min.js" | relURL }}", | "{{ "/js/vue.min.js" | relURL }}", | ||||
| "{{ "/js/lodash.custom.min.js" | relURL }}", | "{{ "/js/lodash.custom.min.js" | relURL }}", | ||||
| ).replace(/\+/g, ' '); | ).replace(/\+/g, ' '); | ||||
| const queryParam = 's'; | const queryParam = 's'; | ||||
| const hotkeys = {{ (.Params.form.hotkeys | default (slice "/" "s")) | jsonify }}; | |||||
| const selectors = { | const selectors = { | ||||
| appContainer: '#search-app', | appContainer: '#search-app', | ||||
| resultContainer: '#search-results', | resultContainer: '#search-results', | ||||
| const getUrl = (query) => { | const getUrl = (query) => { | ||||
| const encodedQuery = encodeURIComponent(query); | const encodedQuery = encodeURIComponent(query); | ||||
| const url = "{{ .URL }}"; | |||||
| const url = "{{ .RelPermalink }}"; | |||||
| return (encodedQuery) | return (encodedQuery) | ||||
| ? `${url}?${queryParam}=${encodedQuery}` | ? `${url}?${queryParam}=${encodedQuery}` | ||||
| : url; | : url; | ||||
| window.onpopstate = (evt) => { | window.onpopstate = (evt) => { | ||||
| this.query = evt.state.query; | this.query = evt.state.query; | ||||
| }; | }; | ||||
| document.onkeyup = function (evt) { | |||||
| evt.key === 's' && focusSearchInput(); | |||||
| const searchInput = getSearchInput(); | |||||
| document.onkeydown = function (evt) { | |||||
| if (evt.target === searchInput) return; | |||||
| if (hotkeys.includes(evt.key)) { | |||||
| evt.preventDefault(); | |||||
| focusSearchInput(); | |||||
| getSearchInput().select(); | |||||
| }; | |||||
| } | } | ||||
| focusSearchInput(); | focusSearchInput(); | ||||
| }, | }, |
| /*! Fetch Inject v2.0.2 | Copyright (C) 2017–2018 Josh Habdas <[email protected]> | @license Zlib */ | |||||
| /*! Fetch Inject v2.0.4 | Copyright (C) Josh Habdas <[email protected]> (https://habd.as) | @license Zlib */ | |||||
| var fetchInject=function(){"use strict";const e=function(e,t,r,n,o,c,i){c=t.createElement(r),i=t.getElementsByTagName(r)[0],c.appendChild(t.createTextNode(n.text)),c.onload=o(n),i?i.parentNode.insertBefore(c,i):t.head.appendChild(c)};return function(t,r){if(!arguments.length)return Promise.reject(new ReferenceError("Failed to execute 'fetchInject': 1 argument required but only 0 present."));if(arguments[0]&&arguments[0].constructor!==Array)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 1 must be of type 'Array'."));if(arguments[1]&&arguments[1].constructor!==Promise)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 2 must be of type 'Promise'."));const n=[],o=r?[].concat(r):[],c=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>[e.clone().text(),e.blob()]).then(e=>Promise.all(e).then(e=>{n.push({text:e[0],blob:e[1]})})))),Promise.all(o).then(()=>(n.forEach(t=>{c.push({then:r=>{t.blob.type.includes("text/css")?e(window,document,"style",t,r):e(window,document,"script",t,r)}})}),Promise.all(c)))}}(); | var fetchInject=function(){"use strict";const e=function(e,t,r,n,o,c,i){c=t.createElement(r),i=t.getElementsByTagName(r)[0],c.appendChild(t.createTextNode(n.text)),c.onload=o(n),i?i.parentNode.insertBefore(c,i):t.head.appendChild(c)};return function(t,r){if(!arguments.length)return Promise.reject(new ReferenceError("Failed to execute 'fetchInject': 1 argument required but only 0 present."));if(arguments[0]&&arguments[0].constructor!==Array)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 1 must be of type 'Array'."));if(arguments[1]&&arguments[1].constructor!==Promise)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 2 must be of type 'Promise'."));const n=[],o=r?[].concat(r):[],c=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>[e.clone().text(),e.blob()]).then(e=>Promise.all(e).then(e=>{n.push({text:e[0],blob:e[1]})})))),Promise.all(o).then(()=>(n.forEach(t=>{c.push({then:r=>{t.blob.type.includes("text/css")?e(window,document,"style",t,r):e(window,document,"script",t,r)}})}),Promise.all(c)))}}(); |
| #!/bin/sh | #!/bin/sh | ||||
| # | |||||
| # Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| # | |||||
| # This file is part of After Dark. | |||||
| # | |||||
| # After Dark is free software: you can redistribute it and/or modify | |||||
| # it under the terms of the GNU Affero General Public License as published | |||||
| # by the Free Software Foundation, either version 3 of the License, or | |||||
| # (at your option) any later version. | |||||
| # | |||||
| # After Dark is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU Affero General Public License for more details. | |||||
| # | |||||
| # You should have received a copy of the GNU Affero General Public License | |||||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| # | |||||
| THEME_PATH=themes/after-dark | THEME_PATH=themes/after-dark | ||||
| echo "Starting help server ..." | echo "Starting help server ..." |
| #!/bin/sh | #!/bin/sh | ||||
| # | |||||
| # Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| # | |||||
| # This file is part of After Dark. | |||||
| # | |||||
| # After Dark is free software: you can redistribute it and/or modify | |||||
| # it under the terms of the GNU Affero General Public License as published | |||||
| # by the Free Software Foundation, either version 3 of the License, or | |||||
| # (at your option) any later version. | |||||
| # | |||||
| # After Dark is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU Affero General Public License for more details. | |||||
| # | |||||
| # You should have received a copy of the GNU Affero General Public License | |||||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| # | |||||
| validate_hugo () { | validate_hugo () { | ||||
| # Exit with error if hugo is not installed | # Exit with error if hugo is not installed | ||||
| if ! hash hugo 2>/dev/null ; then | if ! hash hugo 2>/dev/null ; then | ||||
| echo "Error: After Dark requires Hugo version 0.44 or greater" >&2; exit 1 | |||||
| echo "Error: After Dark requires Hugo version 0.51 or greater" >&2; exit 1 | |||||
| fi | fi | ||||
| # Exit with error if not minimum required hugo version | # Exit with error if not minimum required hugo version | ||||
| re="v(0\d*\.([4-9][4-9]|[5-9])|[1-9]).*" | |||||
| re="v(0\d*\.([5-9][1-9]|[6-9])|[1-9]).*" | |||||
| if ! hugo version | grep -qE "$re" ; then | if ! hugo version | grep -qE "$re" ; then | ||||
| echo "Error: After Dark requires Hugo version 0.44 or greater" >&2; exit 1 | |||||
| echo "Error: After Dark requires Hugo version 0.51 or greater" >&2; exit 1 | |||||
| fi | fi | ||||
| } | } | ||||
| download_theme () { | download_theme () { | ||||
| echo "Downloading the latest version of After Dark ..." | echo "Downloading the latest version of After Dark ..." | ||||
| LATEST_META=$(wget -qO - https://registry.npmjs.org/after-dark/latest) | LATEST_META=$(wget -qO - https://registry.npmjs.org/after-dark/latest) | ||||
| vers=$(echo "$LATEST_META" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ') | |||||
| vers=$(echo "$LATEST_META" | grep -oE "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ') | |||||
| mkdir -p themes/after-dark | mkdir -p themes/after-dark | ||||
| wget -qO - https://registry.npmjs.org/after-dark/-/after-dark-"$vers".tgz | tar --strip-components=1 -xz -C themes/after-dark | wget -qO - https://registry.npmjs.org/after-dark/-/after-dark-"$vers".tgz | tar --strip-components=1 -xz -C themes/after-dark | ||||
| echo "Version $vers downloaded to $SITE_DIR/themes/after-dark" | echo "Version $vers downloaded to $SITE_DIR/themes/after-dark" | ||||
| [ -z "$1" ] && { echo "Error: Attempt to download undefined module" >&2; exit 1; } | [ -z "$1" ] && { echo "Error: Attempt to download undefined module" >&2; exit 1; } | ||||
| echo "Downloading $1 module for After Dark ..." | echo "Downloading $1 module for After Dark ..." | ||||
| meta=$(wget -qO - https://registry.npmjs.org/"$1"/latest) | meta=$(wget -qO - https://registry.npmjs.org/"$1"/latest) | ||||
| vers=$(echo "$meta" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ') | |||||
| vers=$(echo "$meta" | grep -oE "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ') | |||||
| mkdir -p themes/"$1" | mkdir -p themes/"$1" | ||||
| wget -qO - https://registry.npmjs.org/"$1"/-/"$1"-"$vers".tgz | tar --strip-components=1 -xz -C themes/"$1" | wget -qO - https://registry.npmjs.org/"$1"/-/"$1"-"$vers".tgz | tar --strip-components=1 -xz -C themes/"$1" | ||||
| echo "Version $vers downloaded to $SITE_DIR/themes/$1" | echo "Version $vers downloaded to $SITE_DIR/themes/$1" | ||||
| languageCode = "en-US" # Controls site language | languageCode = "en-US" # Controls site language | ||||
| title = "After Dark" # Homepage title and page title suffix | title = "After Dark" # Homepage title and page title suffix | ||||
| paginate = 11 # Number of posts to show before paginating | paginate = 11 # Number of posts to show before paginating | ||||
| copyright = "Copyright © Copyright Owner. Licensed under <a target=\"_blank\" rel=\"external noopener license\" href=\"https://creativecommons.org/licenses/by-nd/4.0/\">CC-BY-ND-4.0</a>." # Optional, remove to suppress copyright notices | |||||
| # Controls default theme and theme components | # Controls default theme and theme components | ||||
| theme = [ | theme = [ | ||||
| "fractal-forest", | |||||
| "after-dark" | |||||
| "fractal-forest", # OBSD | |||||
| "after-dark" # AGPL-3.0-or-later | |||||
| ] | ] | ||||
| disableLiveReload = false # Optional, set true to disable live reload | disableLiveReload = false # Optional, set true to disable live reload | ||||
| description = "" # Suggested, controls default description meta | description = "" # Suggested, controls default description meta | ||||
| author = "" # Optional, controls author name display on posts | author = "" # Optional, controls author name display on posts | ||||
| hide_author = false # Optional, set true to hide author name on posts | hide_author = false # Optional, set true to hide author name on posts | ||||
| has_cookies = false # Optional, set true to disable cookie disclaimer | |||||
| disable_csp = false # Optional, set true to disable content security policy | disable_csp = false # Optional, set true to disable content security policy | ||||
| images = [ | images = [ | ||||
| "https://source.unsplash.com/collection/983219/2000x1322" | "https://source.unsplash.com/collection/983219/2000x1322" | ||||
| [params.layout.menu.main] | [params.layout.menu.main] | ||||
| hidden = true # Optional, set false or remove to show section menu | hidden = true # Optional, set false or remove to show section menu | ||||
| [params.layout.footer] | |||||
| hidden = false # Optional, set true to hide footer | |||||
| [params.modules.fractal_forest] | [params.modules.fractal_forest] | ||||
| enabled = true # Optional, set false to disable module | enabled = true # Optional, set false to disable module | ||||
| decoders = ["bpgdec8a"] # Optional, 8-bit javascript decoder with animation | decoders = ["bpgdec8a"] # Optional, 8-bit javascript decoder with animation |
| #!/bin/sh | #!/bin/sh | ||||
| # | |||||
| # Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| # | |||||
| # This file is part of After Dark. | |||||
| # | |||||
| # After Dark is free software: you can redistribute it and/or modify | |||||
| # it under the terms of the GNU Affero General Public License as published | |||||
| # by the Free Software Foundation, either version 3 of the License, or | |||||
| # (at your option) any later version. | |||||
| # | |||||
| # After Dark is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU Affero General Public License for more details. | |||||
| # | |||||
| # You should have received a copy of the GNU Affero General Public License | |||||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| # | |||||
| stop_help_server () { | stop_help_server () { | ||||
| echo "Stopping help server if running ..." | echo "Stopping help server if running ..." | ||||
| kill $(ps aux | awk '/[h]ugo.*1414/ {print $2}') 2>/dev/null || true | |||||
| kill "$(ps aux | awk '/[h]ugo.*1414/ {print $2}')" 2>/dev/null || true | |||||
| } | } | ||||
| generate_help_docs () { | generate_help_docs () { | ||||
| update_module () { | update_module () { | ||||
| meta_file=themes/"$1"/data/npm/latest.json | meta_file=themes/"$1"/data/npm/latest.json | ||||
| if [ -f "$meta_file" ] ; then | if [ -f "$meta_file" ] ; then | ||||
| current_vers=`sed -n 's/.*"version":"\([^"]*\).*/\1/p' < "$meta_file"` | |||||
| current_vers=$(sed -n 's/.*"version":"\([^"]*\).*/\1/p' < "$meta_file") | |||||
| else | else | ||||
| echo "Cannot detect version. Upgrade $1 anyway (y/n)? \c" | echo "Cannot detect version. Upgrade $1 anyway (y/n)? \c" | ||||
| read answer | |||||
| read -r answer | |||||
| [ "$answer" = "${answer#[Yy]}" ] && exit 1 | [ "$answer" = "${answer#[Yy]}" ] && exit 1 | ||||
| fi | fi | ||||
| LATEST_META=$(wget -qO - https://registry.npmjs.org/"$1"/latest) | LATEST_META=$(wget -qO - https://registry.npmjs.org/"$1"/latest) | ||||
| latest_vers=`sed -n 's/.*"version":"\([^"]*\).*/\1/p' <<< "$LATEST_META"` | |||||
| latest_vers=$(echo "$LATEST_META" | grep -oE "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ') | |||||
| if [ "$current_vers" ] ; then | if [ "$current_vers" ] ; then | ||||
| if [ "$current_vers" = "$latest_vers" ] ; then | if [ "$current_vers" = "$latest_vers" ] ; then | ||||
| echo "Did not upgrade $1. Already using latest version." >&1; exit 0 | echo "Did not upgrade $1. Already using latest version." >&1; exit 0 |
| title = "GNU Affero General Public License v3.0 (or later version)" | |||||
| shorthand = "GNU AGPLv3+" | |||||
| link = "https://www.gnu.org/licenses/agpl.html" |
| title = "Creative Commons Attribution NonCommercial ShareAlike 4.0 International" | |||||
| shorthand = "CC BY-NC-SA 4.0" | |||||
| link = "https://creativecommons.org/licenses/by-nc-sa/4.0/" |
| title = "Creative Commons Attribution NoDerivatives 4.0 International" | |||||
| shorthand = "CC BY-ND 4.0" | |||||
| link = "https://creativecommons.org/licenses/by-nd/4.0/" |
| title = "Creative Commons Attribution Share Alike 4.0 International" | |||||
| shorthand = "CC BY-SA 4.0" | |||||
| link = "https://creativecommons.org/licenses/by-sa/4.0/" |
| {"name":"after-dark","version":"7.2.1","description":"Semantic Design System for Hugo.","author":{"name":"Josh Habdas","email":"[email protected]","url":"https://habd.as"},"keywords":["hugo","hackcss","lazysizes","lodash","vue","fuse.js","mark.js"],"homepage":"https://after-dark.habd.as","repository":{"type":"git","url":"https://git.habd.as/comfusion/after-dark.git"},"standard-version":{"scripts":{"posttag":"git tag --sign $(git describe --tags $(git rev-list --tags --max-count=1)) $(git describe --tags $(git rev-list --tags --max-count=1))^{} -f -m \"$(git log -1 --pretty=%B)\" -m \"-----BEGIN DIST INTEGRITY-----\" -m \"$(npm pack --dry-run --json . | grep integrity | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '\" ')\" -m \"-----END DIST INTEGRITY-----\""}},"scripts":{"update:lazysizes":"npm up lazysizes && cp -i node_modules/lazysizes/lazysizes.min.js static/js","update:lodash:custom":"lodash include=debounce -p -o static/js/lodash.custom.min.js","update:fuse":"npm up fuse.js && cp -i node_modules/fuse.js/dist/fuse.min.js static/js","update:vue":"npm up vue && cp -i node_modules/vue/dist/vue.min.js static/js","update:mark":"npm up mark.js && cp -i node_modules/mark.js/dist/mark.min.js static/js","update:hackcss":"npm up hackcss && cp -ir node_modules/hack/dist/ assets/css/vendor/hack/","test":"while true; do head -n 100 /dev/urandom; sleep 0.1; done | hexdump -C | grep 'ca fe'","integrity":"npm pack --dry-run --json . | grep integrity | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '\" '","release":"standard-version"},"devDependencies":{"atom-one-chroma":"^2.0.0","fetch-inject":"^2.0.2","fuse.js":"^3.3.0","hack":"^0.8.1","lazysizes":"^4.1.4","lodash-cli":"^4.17.5","mark.js":"^8.11.1","standard-version":"^4.4.0","vue":"^2.5.16"},"license":"WTFPL","gitHead":"129ace4157389f06b79884585bf7e35777e5cfb5","_id":"[email protected]","_nodeVersion":"10.4.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-i4QY3BDdVQR3Pvmjc5jupUaPQaB0SXWov57tiNhtVBvq2uRqSd1Zjb2I/VFEqefjt4TKJQ9qPOksUJ6Gs6zzCg==","shasum":"00a7229ae6d8bd7ad4c5421e90421a71981c1533","tarball":"https://registry.npmjs.org/after-dark/-/after-dark-7.2.1.tgz","fileCount":239,"unpackedSize":3958523,"npm-signature":"-----BEGIN PGP SIGNATURE----- Version: OpenPGP.js v3.0.4 Comment: https://openpgpjs.org wsFcBAEBCAAQBQJcb51ECRA9TVsSAnZWagAATJsP/i16WQcPAKzGCFm3Z1je XnO5KvEfhk+y+NgoCpRyjYodDGsxluPzm21RZcUktdWYtxa3BKKJb3PWITyF LDap8g5JHOtaesK4DqdUVSNlNrbc8Bj8UxnckqcZMzEKsHqo1k5hj2tUJkEd R7YPWh6qWSpWk4AyQ2YJBrw3wo/989cDJJI1B8ichAIcmMMQIdzorSyZof8t rT4zBMxN6iBfokNpRO6Hxu/Ljdbtt9x+gM668Z921O+BK6cvAhH3Wq7EdgBC Ix3slR+lrYpCanZOFLKdYHRKdQkSpPUceFCmJmP5R+FQj13vFxpMCbGPhzBd NPhIi9FQlGjcqY1dwxYiC/o4wjpYW/gkOLQD2yaUe1eD0pGYeMw65aSnZguV TEWkDRuQW5rUahKTZoT9qohoq1HbeSzQttHra/H8ZsQ5Q0mX86qbmdJOceC6 8RQW6pauizDxQ5VEBHQNbWTYMMOV17NbRULqEv+cstuhlTKw1VqKXdpArjNr CoW7zQu+tXOv58atvoT+asj5qe9BosxIC8YyCotZ1hEonNMkkz3B2Uw9rbXs NHer1dJOdodQ5y/610w1UHFT+ikEZRQTRqlvJemIXQu5BONOtU25JA9Clksm 9smOfvxIqAMAgcbSNv2N26MU+KPeyhae4n3j0DJoEBCP6t4rH8W2h4LdKsg9 Z4At =rxrw -----END PGP SIGNATURE----- "},"maintainers":[{"name":"jhabdas","email":"[email protected]"}],"_npmUser":{"name":"jhabdas","email":"[email protected]"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/after-dark_7.2.1_1550818627821_0.7526877237318237"},"_hasShrinkwrap":false} | |||||
| {"name":"after-dark","version":"9.1.0","description":"Hugo Dark Theme Site Generator","author":{"name":"Josh Habdas","email":"[email protected]","url":"https://habd.as"},"keywords":["hugo","dark","theme","website","blog"],"homepage":"https://after-dark.habd.as","repository":{"type":"git","url":"https://git.habd.as/comfusion/after-dark.git"},"standard-version":{"scripts":{"posttag":"git tag --sign $(git describe --tags $(git rev-list --tags --max-count=1)) $(git describe --tags $(git rev-list --tags --max-count=1))^{} -f -m \"$(git log -1 --pretty=%B)\" -m \"-----BEGIN DIST INTEGRITY-----\" -m \"$(npm pack --dry-run --json . | grep integrity | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '\" ')\" -m \"-----END DIST INTEGRITY-----\""}},"scripts":{"update:lazysizes":"npm up lazysizes && cp -i node_modules/lazysizes/lazysizes.min.js static/js","update:lodash:custom":"lodash include=debounce -p -o static/js/lodash.custom.min.js","update:fuse":"npm up fuse.js && cp -i node_modules/fuse.js/dist/fuse.js static/js/fuse.min.js","update:vue":"npm up vue && cp -i node_modules/vue/dist/vue.min.js static/js","update:mark":"npm up mark.js && cp -i node_modules/mark.js/dist/mark.min.js static/js","update:hackcss":"npm up hackcss && cp -ir node_modules/hack/dist/ assets/css/vendor/hack/","update:fetch-inject":"npm up fetch-inject && cp -i node_modules/fetch-inject/dist/fetch-inject.min.js assets/js/vendor/fetch-inject.min.js","test":"while true; do head -n 100 /dev/urandom; sleep 0.1; done | hexdump -C | grep 'ca fe'","integrity":"npm pack --dry-run --json . | grep integrity | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '\" '","release":"standard-version","commit":"npx git-cz"},"devDependencies":{"atom-one-chroma":"^2.0.0","commitizen":"^4.0.3","cz-conventional-changelog":"^3.0.2","fetch-inject":"^2.0.4","fuse.js":"^3.4.5","hack":"^0.8.1","lazysizes":"^5.1.0","lodash-cli":"^4.17.5","mark.js":"^8.11.1","standard-version":"^6.0.1","vue":"^2.6.10"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"license":"AGPL-3.0-or-later","gitHead":"f19d9289e69f6b3e040076e96de29f9d3c73e9ee","_id":"[email protected]","_nodeVersion":"11.15.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-qIvf65LBxjG3nsLyWoR+Y3fdJx+ZoOuqYUK3NXf6BmKGVWh2IaCRciyrsuDS+54ZaQM6Q+SFWT7n+8mEcNseEQ==","shasum":"e6f542eb006adc99888f4a28b8fc02ade85b64be","tarball":"https://registry.npmjs.org/after-dark/-/after-dark-9.1.0.tgz","fileCount":373,"unpackedSize":4305262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXZreCRA9TVsSAnZWagAAHeIP/iquAFXsUzICdxq2SxgR\ny8sXPBGcxD85faQNwqg1b9G3NVXuh6ZYjNsPTVEMEScLkiN+ibB+NaGxV19Z\nPqeEw2oC5eEzcDDpwfuCmmLKotb7DWjIvlVVj0ZpYwcJooTZmNdpZX2qkal4\n6CQpBpHHtwmM3ZwAhZxYhB8kJALm11XercBKJObcwpAw/tssLIzSLIvepjOo\nFQ5G0Zclyqic7Mkm0RclpvMTDFWm37R0kwkVCYqBexQKtZ62vXhmhi3ZrDbr\nTiyIVYF7FCZMPRwAv/fC6v84psrEMKbIvolZass5m5+FLCmPbwlBqntbI6Sq\nyy3Y6zYdz7iiAx5WA5HeXhFAo5Nn3bYL5gve1SxsjBTDBv+sucZ8u9vZp/yk\nfpoZdvGklOIKT+nnJlMPfGI829nPOVF1FZUtWrJ8ZUFtvPsCL2hrVQ8jnpF2\n98YjPYqsPO2TkAROvVN0fdLJ4W6HAwWNcKqRu2Tgak/NjdHao/Y6yLSSy4CQ\nus8jaPvdDhiFa8ggHBajtkXb3QKTv9FR9EFpYa4xln1K5Y39ptda8fn4wPaw\nFHWHgk2MCyFA6cAzz5Mu7X+dZcJJkU1/VOwWVMU5LIWTJBtQfWELJ41RXsNR\nLueA5jPBLg4JyIv6oYxgyks9ZB9aMGHie6oXHMG+pWdw0mNfC90ZaH8D65QF\nXpt8\r\n=22Bl\r\n-----END PGP SIGNATURE-----\r\n"},"maintainers":[{"name":"jhabdas","email":"[email protected]"}],"_npmUser":{"name":"jhabdas","email":"[email protected]"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/after-dark_9.1.0_1566415581958_0.7192411613979868"},"_hasShrinkwrap":false} |
| article_types = ["Article", "AdvertiserContentArticle", "NewsArticle", "AnalysisNewsArticle", "AskPublicNewsArticle", "BackgroundNewsArticle", "OpinionNewsArticle", "ReportageNewsArticle", "ReviewNewsArticle", "Report", "SatiricalArticle", "ScholarlyArticle", "MedicalScholarlyArticle", "SocialMediaPosting", "BlogPosting", "LiveBlogPosting", "DiscussionForumPosting", "TechArticle", "APIReference"] |
| # | |||||
| # Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| # | |||||
| # This file is part of After Dark. | |||||
| # | |||||
| # After Dark is free software: you can redistribute it and/or modify | |||||
| # it under the terms of the GNU Affero General Public License as published | |||||
| # by the Free Software Foundation, either version 3 of the License, or | |||||
| # (at your option) any later version. | |||||
| # | |||||
| # After Dark is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU Affero General Public License for more details. | |||||
| # | |||||
| # You should have received a copy of the GNU Affero General Public License | |||||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| # | |||||
| # DOCKER-VERSION 19.03.1-ce, build 74b1e89e8a | |||||
| # Specify build image | |||||
| ARG GO_VERSION=1.11.4 | |||||
| ARG BUILD_TARGET=alpine3.8 | |||||
| # Pull builder base image | |||||
| FROM golang:${GO_VERSION}-${BUILD_TARGET} AS htmltestbuilder | |||||
| # Set build variables | |||||
| ARG HTMLTEST_VERSION=0.10.3 | |||||
| ENV CGO_ENABLED=0 \ | |||||
| GOOS=linux \ | |||||
| GO111MODULE=on | |||||
| # Build from source using specified version | |||||
| RUN \ | |||||
| apk add --update --no-cache ca-certificates git musl-dev && \ | |||||
| git clone https://github.com/wjdp/htmltest.git $GOPATH/src/github.com/wjdp/htmltest && \ | |||||
| cd ${GOPATH:-$HOME/go}/src/github.com/wjdp/htmltest && \ | |||||
| git checkout v$HTMLTEST_VERSION && \ | |||||
| go mod download && \ | |||||
| go install -installsuffix 'static' -ldflags "-X main.date=`date -u +%Y-%m-%dT%H:%M:%SZ` -X main.version=`git describe --tags`" | |||||
| # Move compiled binary into own container | |||||
| FROM scratch | |||||
| COPY --from=htmltestbuilder /go/bin/htmltest /htmltest | |||||
| ENTRYPOINT ["/htmltest"] | |||||
| CMD ["-h"] |
| # | # | ||||
| # Hugo Dockerfile for After Dark | |||||
| # Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| # | # | ||||
| # After Dark is free and open source software you can use to create a | |||||
| # privacy-aware website, blog or app. | |||||
| # This file is part of After Dark. | |||||
| # | # | ||||
| # Read the docs (https://after-dark.habd.as/) | |||||
| # View the code (https://git.habd.as) | |||||
| # After Dark is free software: you can redistribute it and/or modify | |||||
| # it under the terms of the GNU Affero General Public License as published | |||||
| # by the Free Software Foundation, either version 3 of the License, or | |||||
| # (at your option) any later version. | |||||
| # | # | ||||
| # Copyright (C) 2018 Josh Habdas <[email protected]> | |||||
| # After Dark is distributed in the hope that it will be useful, | |||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| # GNU Affero General Public License for more details. | |||||
| # | # | ||||
| # This work is free. You can redistribute it and/or modify it under the | |||||
| # terms of the Do What The Fuck You Want To Public License, Version 2, | |||||
| # as published by Sam Hocevar. See the COPYING file for more details. | |||||
| # You should have received a copy of the GNU Affero General Public License | |||||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| # | # | ||||
| # DOCKER-VERSION 17.12.0-ce, build c97c6d6 | |||||
| # DOCKER-VERSION 19.03.1-ce, build 74b1e89e8a | |||||
| # Pull hugo builder base image | |||||
| FROM golang:1.10.3-alpine3.7 AS hugobuilder | |||||
| # Specify build image | |||||
| ARG GO_VERSION=1.11.4 | |||||
| ARG BUILD_TARGET=alpine3.8 | |||||
| # Set environment variables for hugo build | |||||
| ENV HUGO_VERSION=0.44 \ | |||||
| CGO_ENABLED=0 \ | |||||
| GOOS=linux | |||||
| # Pull builder base image | |||||
| FROM golang:${GO_VERSION}-${BUILD_TARGET} AS hugobuilder | |||||
| # Build hugo from source using specified version | |||||
| # Set environment variables | |||||
| ENV HUGO_VERSION=0.57.0 \ | |||||
| CGO_ENABLED=1 \ | |||||
| GOOS=linux \ | |||||
| GO111MODULE=on \ | |||||
| BUILD_TAGS="extended" | |||||
| # Build from source using specified version | |||||
| RUN \ | RUN \ | ||||
| apk add --update --no-cache git musl-dev && \ | |||||
| apk add --update --no-cache git gcc g++ binutils musl-dev && \ | |||||
| git clone https://github.com/gohugoio/hugo.git $GOPATH/src/github.com/gohugoio/hugo && \ | git clone https://github.com/gohugoio/hugo.git $GOPATH/src/github.com/gohugoio/hugo && \ | ||||
| cd ${GOPATH:-$HOME/go}/src/github.com/gohugoio/hugo && \ | cd ${GOPATH:-$HOME/go}/src/github.com/gohugoio/hugo && \ | ||||
| git checkout v$HUGO_VERSION && \ | git checkout v$HUGO_VERSION && \ | ||||
| go get github.com/golang/dep/cmd/dep && \ | |||||
| dep ensure -vendor-only && \ | |||||
| go install -ldflags '-s -w' | |||||
| go install -ldflags '-s -w -extldflags "-static"' -tags ${BUILD_TAGS} | |||||
| # Move compiled binary into own container | # Move compiled binary into own container | ||||
| FROM scratch | FROM scratch |
| categories = ["features"] | categories = ["features"] | ||||
| tags = ["after", "dark"] | tags = ["after", "dark"] | ||||
| features = [""] | features = [""] | ||||
| [[copyright]] | |||||
| owner = "Josh Habdas" | |||||
| date = "2019" | |||||
| license = "agpl-3.0-or-later" | |||||
| +++ | +++ |
| categories = ["addon"] | categories = ["addon"] | ||||
| tags = ["module"] | tags = ["module"] | ||||
| features = [""] | features = [""] | ||||
| [[copyright]] | |||||
| owner = "Josh Habdas" | |||||
| date = "2019" | |||||
| license = "agpl-3.0-or-later" | |||||
| +++ | +++ |
| html_attributes = [] | html_attributes = [] | ||||
| custom_attributes = [] | custom_attributes = [] | ||||
| snippets_used = [] | snippets_used = [] | ||||
| [[copyright]] | |||||
| owner = "Josh Habdas" | |||||
| date = "2019" | |||||
| license = "agpl-3.0-or-later" | |||||
| +++ | +++ |
| title = "Validate Release" | title = "Validate Release" | ||||
| description = "Complete the included form to validate the release." | description = "Complete the included form to validate the release." | ||||
| noindex = true | noindex = true | ||||
| [[copyright]] | |||||
| owner = "Josh Habdas" | |||||
| date = "2019" | |||||
| license = "agpl-3.0-or-later" | |||||
| +++ | +++ | ||||
| {{< hackcss-form name="validate" action="/validate/" >}} | {{< hackcss-form name="validate" action="/validate/" >}} |
| :root { | |||||
| --vertical-rhythm: 5rem; | |||||
| --logo-animation-filter-start: drop-shadow(0 -25px 45px #ff2e88) brightness(1) drop-shadow(0 -55px 35px #ff2e88) brightness(1) drop-shadow(0 -35px 155px #ff9800) brightness(4); | |||||
| --logo-animation-filter-end: drop-shadow(0 -20px 45px #ff2e88) brightness(.1) drop-shadow(0 0 5px #ff2e88) brightness(.7) drop-shadow(0 -20px 135px #ff2e88) brightness(2); | |||||
| } | |||||
| main, footer, header, caption { | |||||
| text-align: center; | |||||
| } | |||||
| nav[itemtype*="SiteNavigationElement"] { | |||||
| opacity: 0; | |||||
| transition: opacity 300ms ease; | |||||
| } | |||||
| nav[itemtype*="SiteNavigationElement"]:focus-within { | |||||
| opacity: 1; | |||||
| transition: opacity 300ms ease; | |||||
| } | |||||
| @media screen and (max-width: 768px) { | |||||
| nav[itemtype*="SiteNavigationElement"] { | |||||
| display: none; | |||||
| } | |||||
| .hack header h1 { | |||||
| margin-top: 2rem !important; | |||||
| } | |||||
| .grid { | |||||
| flex-direction: row; | |||||
| } | |||||
| .cell { | |||||
| flex: 1; | |||||
| } | |||||
| } | |||||
| .shaded { | |||||
| filter: var(--logo-animation-filter-start); | |||||
| opacity: 0; | |||||
| } | |||||
| .animated { | |||||
| /* FIXME: Animation disabled due to browser conflict with Web Miner */ | |||||
| animation: reveal 2s both; | |||||
| opacity: 1; /* remove with fix */ | |||||
| filter: var(--logo-animation-filter-end); /* remove with fix */ | |||||
| } | |||||
| @keyframes reveal { | |||||
| from { | |||||
| filter: var(--logo-animation-filter-start); | |||||
| } | |||||
| to { | |||||
| filter: var(--logo-animation-filter-end); | |||||
| opacity: 1; | |||||
| } | |||||
| } | |||||
| .hack .grid { | |||||
| justify-content: center; | |||||
| } | |||||
| .hack header h1:after { | |||||
| content: none; | |||||
| } | |||||
| .hack header h1 { | |||||
| font-family: Futura,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif; | |||||
| padding: 0; | |||||
| margin: 1rem; | |||||
| font-size: 3em; | |||||
| display: inline-block; | |||||
| background-color: #2a3439; | |||||
| color: transparent; | |||||
| text-shadow: 0 2px 3px rgba(255, 255, 255, 0.1); | |||||
| -webkit-background-clip: text; | |||||
| -moz-background-clip: text; | |||||
| background-clip: text; | |||||
| filter: brightness(3); | |||||
| } | |||||
| .hack header h1 sup { | |||||
| font-size: 1rem; | |||||
| } | |||||
| .hack header h1 sup:before { | |||||
| content: " "; | |||||
| } | |||||
| .hack header h2:before, | |||||
| .hack section h2:before { | |||||
| content: unset; | |||||
| } | |||||
| .hack header h2, | |||||
| .hack section h2 { | |||||
| margin-top: .8rem; | |||||
| font-size: 1.2em; | |||||
| } | |||||
| .hack header h2 { | |||||
| margin-top: -1rem; | |||||
| } | |||||
| .hack .install.cta { | |||||
| margin-top: -1rem; | |||||
| margin-bottom: 2rem; | |||||
| } | |||||
| .hack .install.cta form[action*="quick-install"] { | |||||
| width: unset; | |||||
| } | |||||
| .hack .install.cta form[action*="quick-install"] button { | |||||
| border-radius: 4px; | |||||
| color: #ccc; | |||||
| background-color: #ff2e8860; | |||||
| transition: all 0.25s ease; | |||||
| } | |||||
| .hack .install.cta form[action*="quick-install"] button:hover, | |||||
| .hack .install.cta form[action*="quick-install"] button:focus { | |||||
| background-color: #ff2e8880; | |||||
| color: #fff; | |||||
| } | |||||
| .hack .install.cta form[action*="quick-install"] button svg { | |||||
| stroke: #ff9800; | |||||
| } | |||||
| .hack section:not(.capabilities) { | |||||
| margin: var(--vertical-rhythm) 0; | |||||
| } | |||||
| .hack section.logo a { | |||||
| border-bottom: none; | |||||
| background-color: inherit; | |||||
| } | |||||
| .hack section.hero { | |||||
| margin-top: -3rem; | |||||
| margin-bottom: 0; | |||||
| } | |||||
| .hack section.hero img { | |||||
| pointer-events: none; | |||||
| } | |||||
| .hack section.feature ul li { | |||||
| display: inline; | |||||
| padding-left: unset; | |||||
| } | |||||
| .hack section.feature ul > li::after { | |||||
| position: unset; | |||||
| content: ""; | |||||
| } | |||||
| .hack section.feature ul > li:not(:last-of-type)::after { | |||||
| content: " | "; | |||||
| } | |||||
| .hack section.hero figure { | |||||
| margin: 0; | |||||
| line-height: 0; | |||||
| min-height: 266px; | |||||
| } | |||||
| @media screen and (min-width: 768px) { | |||||
| .hack section.hero figure img { | |||||
| margin: -3em 0 -2em; | |||||
| } | |||||
| } | |||||
| .hack section.tagline p { | |||||
| margin: 0; | |||||
| font-size: 1.1rem; | |||||
| line-height: 1.6; | |||||
| } | |||||
| .hack section.capabilities table a { | |||||
| display: block; | |||||
| } | |||||
| .hack footer section.cta { | |||||
| margin-top: 6rem; | |||||
| } | |||||
| .hack footer section.cta a { | |||||
| border-bottom: none; | |||||
| background-color: inherit; | |||||
| color: #ff9800; | |||||
| display: inline-block; | |||||
| } | |||||
| .hack footer section.cta a:hover { | |||||
| color: #fff; | |||||
| } | |||||
| .hack footer section.cta a small { | |||||
| display: block; | |||||
| } | |||||
| .hack.dark table tbody td:first-child { | |||||
| color: inherit; | |||||
| font-weight: initial; | |||||
| } | |||||
| .hack.dark table tr th { | |||||
| background-color: #1976d220; | |||||
| } | |||||
| .hack.dark table tr td a { | |||||
| border: 1px solid #2196f340; | |||||
| padding: 0.25rem; | |||||
| } | |||||
| .hack.dark table tr td a:hover { | |||||
| transition: all 300ms ease; | |||||
| background-color: #ff2e8860; | |||||
| border-color: #2196f360; | |||||
| } | |||||
| .hack.dark table tr td a:not(:hover) { | |||||
| transition: all 300ms ease; | |||||
| background-color: #ff2e8825; | |||||
| } |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| a[rel*="external"]::after { | a[rel*="external"]::after { | ||||
| content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E"); | content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E"); | ||||
| } | } | ||||
| .hack.dark table tr:nth-child(odd) td { | .hack.dark table tr:nth-child(odd) td { | ||||
| background-color: #1976d220; | background-color: #1976d220; | ||||
| } | } | ||||
| .hack.dark table tr td a { | |||||
| display: block; | |||||
| } | |||||
| caption { | caption { | ||||
| margin-bottom: 20px; | margin-bottom: 20px; | ||||
| text-align: left; | text-align: left; |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| (function (window, document, undefined) { | (function (window, document, undefined) { | ||||
| 'use strict'; | 'use strict'; | ||||
| const form = document.forms.generator; | const form = document.forms.generator; |
| /*! | |||||
| * Copyright (C) 2019 Josh Habdas <[email protected]> | |||||
| * | |||||
| * This file is part of After Dark. | |||||
| * | |||||
| * After Dark is free software: you can redistribute it and/or modify | |||||
| * it under the terms of the GNU Affero General Public License as published | |||||
| * by the Free Software Foundation, either version 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * After Dark is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| * GNU Affero General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Affero General Public License | |||||
| * along with this program. If not, see <https://www.gnu.org/licenses/>. | |||||
| */ | |||||
| (function (window, document, undefined) { | (function (window, document, undefined) { | ||||
| 'use strict'; | 'use strict'; | ||||
| const isOnlineHelp = document.URL.includes('localhost:1414'); | const isOnlineHelp = document.URL.includes('localhost:1414'); |
| The MIT License (MIT) | |||||
| Copyright (c) 2016 Dan Klammer | |||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| of this software and associated documentation files (the "Software"), to deal | |||||
| in the Software without restriction, including without limitation the rights | |||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| copies of the Software, and to permit persons to whom the Software is | |||||
| furnished to do so, subject to the following conditions: | |||||
| The above copyright notice and this permission notice shall be included in all | |||||
| copies or substantial portions of the Software. | |||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| SOFTWARE. |
| <svg id="i-activity" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M4 16 L11 16 14 29 18 3 21 16 28 16" /> | |||||
| </svg> |
| <svg id="i-alert" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M16 3 L30 29 2 29 Z M16 11 L16 19 M16 23 L16 25" /> | |||||
| </svg> |
| <svg id="i-archive" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M4 10 L4 28 28 28 28 10 M2 4 L2 10 30 10 30 4 Z M12 15 L20 15" /> | |||||
| </svg> |
| <svg id="i-arrow-bottom" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M6 22 L16 30 26 22 M16 30 L16 2" /> | |||||
| </svg> |
| <svg id="i-arrow-left" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M10 6 L2 16 10 26 M2 16 L30 16" /> | |||||
| </svg> |
| <svg id="i-arrow-right" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M22 6 L30 16 22 26 M30 16 L2 16" /> | |||||
| </svg> |
| <svg id="i-arrow-top" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M6 10 L16 2 26 10 M16 2 L16 30" /> | |||||
| </svg> |
| <svg id="i-backwards" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M16 2 L2 16 16 30 16 16 30 30 30 2 16 16 Z" /> | |||||
| </svg> |
| <svg id="i-bag" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M5 9 L5 29 27 29 27 9 Z M10 9 C10 9 10 3 16 3 22 3 22 9 22 9" /> | |||||
| </svg> |
| <svg id="i-ban" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="16" cy="16" r="14" /> | |||||
| <path d="M6 6 L26 26" /> | |||||
| </svg> |
| <svg id="i-bell" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M8 17 C8 12 9 6 16 6 23 6 24 12 24 17 24 22 27 25 27 25 L5 25 C5 25 8 22 8 17 Z M20 25 C20 25 20 29 16 29 12 29 12 25 12 25 M16 3 L16 6" /> | |||||
| </svg> |
| <svg id="i-book" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M16 7 C16 7 9 1 2 6 L2 28 C9 23 16 28 16 28 16 28 23 23 30 28 L30 6 C23 1 16 7 16 7 Z M16 7 L16 28" /> | |||||
| </svg> |
| <svg id="i-bookmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M6 2 L26 2 26 30 16 20 6 30 Z" /> | |||||
| </svg> |
| <svg id="i-calendar" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 6 L2 30 30 30 30 6 Z M2 15 L30 15 M7 3 L7 9 M13 3 L13 9 M19 3 L19 9 M25 3 L25 9" /> | |||||
| </svg> |
| <svg id="i-camera" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 8 L 9 8 12 4 20 4 23 8 30 8 30 26 2 26 Z" /> | |||||
| <circle cx="16" cy="16" r="5" /> | |||||
| </svg> |
| <svg id="i-caret-bottom" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 10 L16 26 2 10 Z" /> | |||||
| </svg> |
| <svg id="i-caret-left" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M22 30 L6 16 22 2 Z" /> | |||||
| </svg> |
| <svg id="i-caret-right" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M10 30 L26 16 10 2 Z" /> | |||||
| </svg> |
| <svg id="i-caret-top" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 22 L16 6 2 22 Z" /> | |||||
| </svg> |
| <svg id="i-cart" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M6 6 L30 6 27 19 9 19 M27 23 L10 23 5 2 2 2" /> | |||||
| <circle cx="25" cy="27" r="2" /> | |||||
| <circle cx="12" cy="27" r="2" /> | |||||
| </svg> |
| <svg id="i-checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 20 L12 28 30 4" /> | |||||
| </svg> |
| <svg id="i-chevron-bottom" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 12 L16 24 2 12" /> | |||||
| </svg> |
| <svg id="i-chevron-left" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M20 30 L8 16 20 2" /> | |||||
| </svg> |
| <svg id="i-chevron-right" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M12 30 L24 16 12 2" /> | |||||
| </svg> |
| <svg id="i-chevron-top" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 20 L16 8 2 20" /> | |||||
| </svg> |
| <svg id="i-clipboard" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M12 2 L12 6 20 6 20 2 12 2 Z M11 4 L6 4 6 30 26 30 26 4 21 4" /> | |||||
| </svg> |
| <svg id="i-clock" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="16" cy="16" r="14" /> | |||||
| <path d="M16 8 L16 16 20 20" /> | |||||
| </svg> |
| <svg id="i-close" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 30 L30 2 M30 30 L2 2" /> | |||||
| </svg> |
| <svg id="i-code" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M10 9 L3 17 10 25 M22 9 L29 17 22 25 M18 7 L14 27" /> | |||||
| </svg> |
| <svg id="i-compose" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M27 15 L27 30 2 30 2 5 17 5 M30 6 L26 2 9 19 7 25 13 23 Z M22 6 L26 10 Z M9 19 L13 23 Z" /> | |||||
| </svg> |
| <svg id="i-creditcard" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 7 L2 25 30 25 30 7 Z M5 18 L9 18 M5 21 L11 21" /> | |||||
| <path d="M2 11 L2 13 30 13 30 11 Z" fill="currentColor" /> | |||||
| </svg> |
| <svg id="i-desktop" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M10 29 C10 29 10 24 16 24 22 24 22 29 22 29 L10 29 Z M2 6 L2 23 30 23 30 6 2 6 Z" /> | |||||
| </svg> |
| <svg id="i-download" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M9 22 C0 23 1 12 9 13 6 2 23 2 22 10 32 7 32 23 23 22 M11 26 L16 30 21 26 M16 16 L16 30" /> | |||||
| </svg> |
| <svg id="i-edit" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 7 L25 2 5 22 3 29 10 27 Z M21 6 L26 11 Z M5 22 L10 27 Z" /> | |||||
| </svg> |
| <svg id="i-eject" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M30 18 L16 5 2 18Z M2 25 L30 25" /> | |||||
| </svg> |
| <svg id="i-ellipsis-horizontal" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="7" cy="16" r="2" /> | |||||
| <circle cx="16" cy="16" r="2" /> | |||||
| <circle cx="25" cy="16" r="2" /> | |||||
| </svg> |
| <svg id="i-ellipsis-vertical" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="16" cy="7" r="2" /> | |||||
| <circle cx="16" cy="16" r="2" /> | |||||
| <circle cx="16" cy="25" r="2" /> | |||||
| </svg> |
| <svg id="i-end" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M24 2 L24 16 10 2 10 30 24 16 24 30" /> | |||||
| </svg> |
| <svg id="i-export" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M28 22 L28 30 4 30 4 22 M16 4 L16 24 M8 12 L16 4 24 12" /> | |||||
| </svg> |
| <svg id="i-external" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M14 9 L3 9 3 29 23 29 23 18 M18 4 L28 4 28 14 M28 4 L14 18" /> | |||||
| </svg> |
| <svg id="i-eye" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="17" cy="15" r="1" /> | |||||
| <circle cx="16" cy="16" r="6" /> | |||||
| <path d="M2 16 C2 16 7 6 16 6 25 6 30 16 30 16 30 16 25 26 16 26 7 26 2 16 2 16 Z" /> | |||||
| </svg> |
| <svg id="i-feed" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <circle cx="6" cy="26" r="2" fill="currentColor" /> | |||||
| <path d="M4 15 C11 15 17 21 17 28 M4 6 C17 6 26 15 26 28" /> | |||||
| </svg> |
| <svg id="i-file" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M6 2 L6 30 26 30 26 10 18 2 Z M18 2 L18 10 26 10" /> | |||||
| </svg> |
| <svg id="i-filter" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> | |||||
| <path d="M2 5 C2 5 6 3 16 3 26 3 30 5 30 5 L19 18 19 27 13 30 13 18 2 5Z" /> | |||||
| </svg> | |||||