From 1a4c59ca1445e287d65d0e43342c6357ecb86b62 Mon Sep 17 00:00:00 2001 From: Bauke Date: Sun, 2 Aug 2020 15:17:57 +0200 Subject: [PATCH] Move to self-hosted Gitea, remove the built styles from the repository, clean up stuff. --- .gitignore | 32 +- LICENSE | 21 ++ License | 7 - README.md | 17 + ReadMe.md | 22 -- build.js | 111 ------ css/tildes-baukula/ReadMe.md | 7 - css/tildes-baukula/tildes-baukula.css | 331 ----------------- css/tildes-baukula/tildes-baukula.user.css | 344 ------------------ css/tildes-compact/ReadMe.md | 23 -- css/tildes-compact/img/screenshot-1.png | Bin 35996 -> 0 bytes css/tildes-compact/img/screenshot-2.png | Bin 21800 -> 0 bytes css/tildes-compact/tildes-compact.css | 36 -- css/tildes-compact/tildes-compact.user.css | 49 --- package.json | 35 +- source/index.js | 32 ++ .../images/tildes-baukula-logo.png | Bin source/tildes-baukula/metadata.json | 11 + source/tildes-baukula/package.json | 15 - .../images/tildes-compact-logo.png | Bin source/tildes-compact/metadata.json | 11 + source/tildes-compact/package.json | 15 - source/utilities.js | 65 ++++ yarn.lock | 73 +++- 24 files changed, 277 insertions(+), 980 deletions(-) create mode 100644 LICENSE delete mode 100644 License create mode 100755 README.md delete mode 100755 ReadMe.md delete mode 100644 build.js delete mode 100644 css/tildes-baukula/ReadMe.md delete mode 100644 css/tildes-baukula/tildes-baukula.css delete mode 100644 css/tildes-baukula/tildes-baukula.user.css delete mode 100644 css/tildes-compact/ReadMe.md delete mode 100644 css/tildes-compact/img/screenshot-1.png delete mode 100644 css/tildes-compact/img/screenshot-2.png delete mode 100644 css/tildes-compact/tildes-compact.css delete mode 100644 css/tildes-compact/tildes-compact.user.css create mode 100644 source/index.js rename css/tildes-baukula/img/tildes-baukula-144x144.png => source/tildes-baukula/images/tildes-baukula-logo.png (100%) create mode 100644 source/tildes-baukula/metadata.json delete mode 100644 source/tildes-baukula/package.json rename css/tildes-compact/img/tildes-compact-144x144.png => source/tildes-compact/images/tildes-compact-logo.png (100%) create mode 100644 source/tildes-compact/metadata.json delete mode 100644 source/tildes-compact/package.json create mode 100644 source/utilities.js diff --git a/.gitignore b/.gitignore index db6c3d5..948d20d 100755 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,10 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids @@ -16,6 +20,7 @@ lib-cov # Coverage directory used by tools like istanbul coverage +*.lcov # nyc test coverage .nyc_output @@ -39,12 +44,21 @@ jspm_packages/ # TypeScript v1 declaration files typings/ +# TypeScript cache +*.tsbuildinfo + # Optional npm cache directory .npm # Optional eslint cache .eslintcache +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + # Optional REPL history .node_repl_history @@ -61,11 +75,18 @@ typings/ # parcel-bundler cache (https://parceljs.org/) .cache -# next.js build output +# Next.js build output .next -# nuxt.js build output +# Nuxt.js build / generate output .nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public # vuepress build output .vuepress/dist @@ -79,5 +100,8 @@ typings/ # DynamoDB Local files .dynamodb/ -# CSS Development folder -temp/ +# TernJS port file +.tern-port + +# Build directory. +build/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ed05e6c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2018-2020 Bauke + +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. diff --git a/License b/License deleted file mode 100644 index a2a27d9..0000000 --- a/License +++ /dev/null @@ -1,7 +0,0 @@ -Copyright © 2018-2020 Bauke - -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. diff --git a/README.md b/README.md new file mode 100755 index 0000000..0987798 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Userstyles + +> A collection of all my userstyles for various websites. + +## Building + +To build the userstyles [Node](https://nodejs.org) and [Yarn](https://yarnpkg.com) are required. + +Run `yarn start` to watch the SCSS for changes and auto-rebuild or run `yarn build` to build all the userstyles once. The userstyles will be output to `build/`. + +## Installation + +Head to [bauke.xyz/userstyles](https://bauke.xyz/userstyles) to see all the available userstyles and installation options. + +## License + +Code open-sourced with the [MIT license](https://git.holllo.cc/Bauke/userstyles/src/branch/main/LICENSE), style logos licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). diff --git a/ReadMe.md b/ReadMe.md deleted file mode 100755 index cc9a690..0000000 --- a/ReadMe.md +++ /dev/null @@ -1,22 +0,0 @@ -# Styles - -> Collection of my user styles for various websites. - -## Collection - -| Name | Version | Applies To | User CSS | -|------|---------|------------|----------| -| Tildes Baukula | 1.0.8 | [tildes.net](https://tildes.net) | [Click](https://gitlab.com/Bauke/styles/raw/master/css/tildes-baukula/tildes-baukula.user.css) -| Tildes Compact | 1.0.9 | [tildes.net](https://tildes.net) | [Click](https://gitlab.com/Bauke/styles/raw/master/css/tildes-compact/tildes-compact.user.css) | - -## Installing - -Refer to [the Wiki](https://gitlab.com/Bauke/styles/wikis/Installing-Styles) for installation guidelines. - -## Building - -If you'd like to build the CSS yourself, refer to [the Wiki](https://gitlab.com/Bauke/styles/wikis/Building-Styles) for building guidelines. - -## License - -Licensed under [MIT](License). diff --git a/build.js b/build.js deleted file mode 100644 index 9d08dcd..0000000 --- a/build.js +++ /dev/null @@ -1,111 +0,0 @@ -const {execSync} = require('child_process'); -const {join} = require('path'); -const { - moveSync, - mkdirpSync, - readdirSync, - readFileSync, - removeSync, - writeFileSync -} = require('fs-extra'); -const {create} = require('usercss-creator'); - -if (!process.env.STYLE_ENV) { - throw new Error('Environment variable STYLE_ENV is not set.'); -} - -const tempPath = join(__dirname, 'temp'); -const logMeta = - process.env.STYLE_ENV === 'dev' ? '[build]'.padEnd(10) : '[build] '; - -// If we're in prod then clear the temp folder to avoid unwanted files going into `css` -if (process.env.STYLE_ENV === 'prod') { - console.log(logMeta + 'building for production, see `css/` for output'); - removeSync(tempPath); -} - -console.log(`${logMeta}reading \`${join(__dirname, 'source')}\` files`); -let cssFiles = readdirSync(join(__dirname, 'source')); - -// Generate all the SCSS using the CLI -console.log(logMeta + 'generating SASS/SCSS -> CSS'); -const outputStyle = 'expanded'; -mkdirpSync('temp/'); -for (const cssFile of cssFiles) { - execSync( - `yarn sass --no-source-map --style ${outputStyle} source/${cssFile}/${cssFile}.s* ${tempPath}/${cssFile}.css` - ); - console.log(`${logMeta}✔ ${cssFile}`); -} - -console.log(`${logMeta}reading \`${tempPath}\` files`); -cssFiles = readdirSync(tempPath); - -console.log(logMeta + 'generating CSS -> UserCSS'); -for (const cssFile of cssFiles) { - // Only generate non-usercss files - if (cssFile.endsWith('.user.css')) { - continue; - } - - const cssPath = join(tempPath, cssFile); - // This uses the css file's name to resolve the appropriate `package.json` - // All CSS files have the same name as their directory - const packagePath = join( - __dirname, - 'source', - cssFile.slice(0, cssFile.indexOf('.')), - 'package.json' - ); - const {usercss} = JSON.parse(readFileSync(packagePath, 'UTF8')); - // We don't specify an output path because we just want it generated next to the regular CSS file - create(cssPath, usercss); -} - -cssFiles = readdirSync(tempPath); -// Add `@-moz-document domain(...)` to all the `.user.css` files -for (const cssFile of cssFiles) { - if (!cssFile.endsWith('.user.css')) { - continue; - } - - const cssPath = join(tempPath, cssFile); - const packagePath = join( - __dirname, - 'source', - cssFile.slice(0, cssFile.indexOf('.')), - 'package.json' - ); - const {usercss} = JSON.parse(readFileSync(packagePath, 'UTF8')); - let css = readFileSync(cssPath, 'UTF8'); - const usercssIndex = css.indexOf('==/UserStyle== */'); - const usercssLength = '==/UserStyle== */'.length; - css = - css.slice(0, Math.max(0, usercssIndex + usercssLength)) + - `\n@-moz-document domain("${usercss.namespace}") {\n` + - css.slice(usercssIndex + usercssLength + 1, css.length) + - '}\n'; - writeFileSync(cssPath, css); - console.log(`${logMeta}✔ ${cssFile} v${usercss.version}`); -} - -// If we're in prod, we now wanna move all the files into `css` -if (process.env.STYLE_ENV === 'prod') { - cssFiles = readdirSync(tempPath); - console.log(`${logMeta}moving ${cssFiles.length} generated files`); - for (const cssFile of cssFiles) { - const cssPath = join(tempPath, cssFile); - const prodPath = join(__dirname, 'css'); - const dirPath = join( - prodPath, - cssFile.slice(0, Math.max(0, cssFile.indexOf('.'))) - ); - // `mkdir -p ` to create any directories that don't exist yet - mkdirpSync(dirPath); - moveSync(cssPath, join(dirPath, cssFile), {overwrite: true}); - } - - removeSync(tempPath); -} - -console.log(logMeta + 'finished 😁'); diff --git a/css/tildes-baukula/ReadMe.md b/css/tildes-baukula/ReadMe.md deleted file mode 100644 index 75eaebf..0000000 --- a/css/tildes-baukula/ReadMe.md +++ /dev/null @@ -1,7 +0,0 @@ -# Tildes Baukula - -> Adaptations to make the official Dracula theme look like my old one. - -## Installing - -To install this theme, check out [the Wiki](https://gitlab.com/Bauke/styles/wikis/Installing-Styles). diff --git a/css/tildes-baukula/tildes-baukula.css b/css/tildes-baukula/tildes-baukula.css deleted file mode 100644 index 05dfb98..0000000 --- a/css/tildes-baukula/tildes-baukula.css +++ /dev/null @@ -1,331 +0,0 @@ -body:not(.theme-dracula) .site-header-logo::after { - content: " Baukula won't activate unless you use the official Dracula theme!"; -} - -body.theme-dracula { - background-color: #282a36; -} -body.theme-dracula.static-site .article-summary { - border: 1px solid #6272a4; - background-color: #282a36; - padding: 0.8rem; -} -body.theme-dracula.static-site .article-summary h2 { - margin: 0 0 0.4rem; -} -body.theme-dracula.static-site .article-summary .text-secondary { - color: #6272a4; -} -body.theme-dracula .btn { - color: #8be9fd; -} -body.theme-dracula .btn:hover { - color: #282a36; -} -body.theme-dracula .btn:hover, body.theme-dracula .btn.btn-primary:hover { - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn.btn-link { - border: 1px solid #8be9fd; - color: #8be9fd; -} -body.theme-dracula .btn.btn-link:hover { - color: #282a36; -} -body.theme-dracula .btn.btn-link:hover { - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn.btn-used { - color: #282a36; - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn-post button { - color: #8be9fd; -} -body.theme-dracula .btn-post button:hover { - color: #ff79c6; -} -body.theme-dracula .btn-post button.btn-post-action-used { - color: #ff79c6; -} -body.theme-dracula .comment { - border-color: #282a36; -} -body.theme-dracula .comment[data-comment-depth="0"] { - border-color: #282a36; -} -body.theme-dracula .comment-header { - background-color: #282a36; -} -body.theme-dracula .comment .comment-nav-link, -body.theme-dracula .comment .comment-nav-link:visited { - color: #8be9fd; -} -body.theme-dracula .comment .comment-nav-link:hover, -body.theme-dracula .comment .comment-nav-link:visited:hover { - color: #ff79c6; -} -body.theme-dracula .comment .comment-votes { - color: #f8f8f2; -} -body.theme-dracula .date-info.text-secondary.text-small { - color: #f8f8f2; -} -body.theme-dracula .toc { - border: 1px solid #6272a4; - background-color: #282a36; -} -body.theme-dracula .dropdown menu { - border: 1px solid #6272a4; -} -body.theme-dracula .user-label { - border-radius: none; -} -body.theme-dracula .label-edit-box { - color: #f8f8f2; - background-color: #282a36; -} -body.theme-dracula .label-edit-box > input { - border: 1px solid #6272a4; - background-color: #44475a; -} -body.theme-dracula .label-light, -body.theme-dracula .label-dark { - color: transparent; -} -body.theme-dracula .bg-none { - color: #f8f8f2; - border-color: #6272a4; -} -body.theme-dracula .bg-red { - color: #282a36; - background-color: #f55; -} -body.theme-dracula .bg-orangered { - color: #282a36; - background-color: #ffb86c; -} -body.theme-dracula .bg-orange { - color: #282a36; - background-color: #f1fa8c; -} -body.theme-dracula .bg-dodgerblue { - color: #282a36; - background-color: #8be9fd; -} -body.theme-dracula .bg-forestgreen { - color: #282a36; - background-color: #50fa7b; -} -body.theme-dracula .bg-slategray { - color: #282a36; - background-color: #44475a; -} -body.theme-dracula a, -body.theme-dracula a:visited { - color: #8be9fd; -} -body.theme-dracula a:hover, -body.theme-dracula a:visited:hover { - color: #ff79c6; -} -body.theme-dracula blockquote { - background-color: #282a36; -} -body.theme-dracula pre, -body.theme-dracula code { - color: #f8f8f2; - background-color: #282a36; -} -body.theme-dracula figure, -body.theme-dracula section { - border-color: #f8f8f2; -} -body.theme-dracula input, -body.theme-dracula textarea, -body.theme-dracula .form-input, -body.theme-dracula .form-input:not(:focus) { - color: #f8f8f2; - border-color: #6272a4; - background-color: #282a36; -} -body.theme-dracula main, -body.theme-dracula #sidebar { - background-color: #44475a; -} -body.theme-dracula th { - border-color: #6272a4; -} -body.theme-dracula td { - border-color: #44475a; -} -body.theme-dracula thead { - background-color: rgba(0, 0, 0, 0.15); -} -body.theme-dracula tbody tr:nth-of-type(n) { - background-color: #282a36; -} -body.theme-dracula a.link-user, -body.theme-dracula a.site-header-context[href^="/user"] { - color: #50fa7b; -} -body.theme-dracula a.link-user:visited, -body.theme-dracula a.site-header-context[href^="/user"]:visited { - color: #50fa7b; -} -body.theme-dracula a.link-group, -body.theme-dracula a.site-header-context[href^="/~"], -body.theme-dracula .nav .nav-item a[href^="/~"] { - color: #ffb86c; -} -body.theme-dracula a.link-group:visited, -body.theme-dracula a.site-header-context[href^="/~"]:visited, -body.theme-dracula .nav .nav-item a[href^="/~"]:visited { - color: #ffb86c; -} -body.theme-dracula .group-list-item-subscribed a.link-group { - color: #8be9fd; -} -body.theme-dracula .group-list-item-not-subscribed a.link-group { - color: #f1fa8c; -} -body.theme-dracula a.site-header-logo:hover { - color: #f8f8f2; -} -body.theme-dracula a.logged-in-user-alert, -body.theme-dracula a.logged-in-user-alert:visited { - color: #282a36; - background-color: #ffb86c; - padding: 0.1rem 0.3rem; -} -body.theme-dracula a.logged-in-user-alert:hover, -body.theme-dracula a.logged-in-user-alert:visited:hover { - background-color: #f1fa8c; -} -body.theme-dracula #sidebar form[action="/logout"] > button, -body.theme-dracula #sidebar form[action="/logout"] > button:hover { - color: #8be9fd; - border: none; - background-color: transparent; -} -body.theme-dracula #sidebar .btn.btn-link[href="/settings/filters"] { - width: 100%; - margin: 0.2rem 0; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) { - color: #6272a4; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) a { - color: #6272a4; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) a:hover { - color: #ff79c6; -} -body.theme-dracula .divider { - border-color: #f8f8f2; -} -body.theme-dracula > header > a:nth-child(1):not(.no-header-logo) { - color: #f8f8f2; - background-size: 32px 32px; - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAAAHlBMVEUoKjZQ+nticqSL6f29k/nx+oz/VVX/ecb/uGz///+3yBn7AAAAaklEQVR42u3Oxw2AQAADsNDZf2IGyO8kioQ9gQMAAAAAcLelCAkJCQkJCQkJ/Tk0lZS5ZMhZhISEhISEhISEvhbaSoasJWUvKUJCQkJCQkJCQu+GnnSUFCEhISEhISEhoXdDAAAAAAA3uwDrCC2R1NNC7QAAAABJRU5ErkJggg=="); -} -body.theme-dracula .form-status-success { - color: #50fa7b; -} -body.theme-dracula .form-status-error { - color: #f55; -} -body.theme-dracula .donation-goal meter { - background-color: #282a36; -} -body.theme-dracula .settings-list { - margin-left: 0; -} -body.theme-dracula .settings-list li { - border: 1px solid #6272a4; - background-color: #282a36; - margin-bottom: 4px; - padding: 0.4rem; -} -body.theme-dracula .settings-list form[name=account-default-theme] { - margin: 8px 0; -} -body.theme-dracula .tab.tab-listing-order { - border-color: #282a36; -} -body.theme-dracula .tab.tab-listing-order .tab-item { - background-color: #282a36; - margin: 4px 2px; - padding: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item:first-child { - margin-left: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item:last-child { - margin-right: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item.active a { - color: #ff79c6; - border-color: #ff79c6; -} -body.theme-dracula .tab.tab-listing-order .tab-item a { - color: #f8f8f2; - margin: 0; - padding: 4px 8px; -} -body.theme-dracula .tab.tab-listing-order .tab-item a:hover { - color: #8be9fd; -} -body.theme-dracula .form-select:not([multiple]):not([size]) { - border: 1px solid #6272a4; - background-color: #282a36; - background-image: url('data:image/svg+xml;charset=utf8,%3Csvg%20xmlns="http://www.w3.org/2000/svg"%20viewBox="0%200%204%205"%3E%3Cpath%20fill="%23f8f8f2"%20d="M2%200L0%202h4zm0%205L0%203h4z"/%3E%3C/svg%3E'); -} -body.theme-dracula .tab.tab-markdown-mode { - border-bottom: none; - margin-bottom: 4px; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item { - margin-right: 4px; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item:last-child { - margin-right: 0; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item.active > .btn { - background-color: #ff79c6; - border-color: #ff79c6; - color: #282a36; -} -body.theme-dracula .topic-listing > li:nth-of-type(n) { - margin-bottom: 0.2rem; - background-color: #282a36; -} -body.theme-dracula .post-listing .topic { - background-color: #282a36; -} -body.theme-dracula .topic.is-topic-official { - border-left-color: #f55; -} -body.theme-dracula .topic.is-topic-official h1 a, -body.theme-dracula .topic.is-topic-official h1 a:visited { - color: #f55; -} -body.theme-dracula .topic .topic-title a:hover { - color: #ff79c6; -} -body.theme-dracula .topic .topic-title a:visited { - color: #ff79c6; -} -body.theme-dracula .topic .topic-info-comments a:visited { - color: #8be9fd; -} -body.theme-dracula .topic div[aria-label="Link domain"], -body.theme-dracula .topic .time-responsive { - color: #f8f8f2; -} -body.theme-dracula .topic-full .topic-full-byline { - color: #f8f8f2; -} diff --git a/css/tildes-baukula/tildes-baukula.user.css b/css/tildes-baukula/tildes-baukula.user.css deleted file mode 100644 index 0f652d2..0000000 --- a/css/tildes-baukula/tildes-baukula.user.css +++ /dev/null @@ -1,344 +0,0 @@ -/* ==UserStyle== -@name Tildes Baukula -@namespace tildes.net -@version 1.0.8 -@author Bauke -@description Adaptations to make the official Dracula theme look like my old one. -@homepageURL https://gitlab.com/Bauke/styles -@supportURL https://gitlab.com/Bauke/styles/issues -@updateURL https://gitlab.com/Bauke/styles/raw/master/css/tildes-baukula/tildes-baukula.user.css -@license MIT -==/UserStyle== */ -@-moz-document domain("tildes.net") { -body:not(.theme-dracula) .site-header-logo::after { - content: " Baukula won't activate unless you use the official Dracula theme!"; -} - -body.theme-dracula { - background-color: #282a36; -} -body.theme-dracula.static-site .article-summary { - border: 1px solid #6272a4; - background-color: #282a36; - padding: 0.8rem; -} -body.theme-dracula.static-site .article-summary h2 { - margin: 0 0 0.4rem; -} -body.theme-dracula.static-site .article-summary .text-secondary { - color: #6272a4; -} -body.theme-dracula .btn { - color: #8be9fd; -} -body.theme-dracula .btn:hover { - color: #282a36; -} -body.theme-dracula .btn:hover, body.theme-dracula .btn.btn-primary:hover { - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn.btn-link { - border: 1px solid #8be9fd; - color: #8be9fd; -} -body.theme-dracula .btn.btn-link:hover { - color: #282a36; -} -body.theme-dracula .btn.btn-link:hover { - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn.btn-used { - color: #282a36; - border-color: #ff79c6; - background-color: #ff79c6; -} -body.theme-dracula .btn-post button { - color: #8be9fd; -} -body.theme-dracula .btn-post button:hover { - color: #ff79c6; -} -body.theme-dracula .btn-post button.btn-post-action-used { - color: #ff79c6; -} -body.theme-dracula .comment { - border-color: #282a36; -} -body.theme-dracula .comment[data-comment-depth="0"] { - border-color: #282a36; -} -body.theme-dracula .comment-header { - background-color: #282a36; -} -body.theme-dracula .comment .comment-nav-link, -body.theme-dracula .comment .comment-nav-link:visited { - color: #8be9fd; -} -body.theme-dracula .comment .comment-nav-link:hover, -body.theme-dracula .comment .comment-nav-link:visited:hover { - color: #ff79c6; -} -body.theme-dracula .comment .comment-votes { - color: #f8f8f2; -} -body.theme-dracula .date-info.text-secondary.text-small { - color: #f8f8f2; -} -body.theme-dracula .toc { - border: 1px solid #6272a4; - background-color: #282a36; -} -body.theme-dracula .dropdown menu { - border: 1px solid #6272a4; -} -body.theme-dracula .user-label { - border-radius: none; -} -body.theme-dracula .label-edit-box { - color: #f8f8f2; - background-color: #282a36; -} -body.theme-dracula .label-edit-box > input { - border: 1px solid #6272a4; - background-color: #44475a; -} -body.theme-dracula .label-light, -body.theme-dracula .label-dark { - color: transparent; -} -body.theme-dracula .bg-none { - color: #f8f8f2; - border-color: #6272a4; -} -body.theme-dracula .bg-red { - color: #282a36; - background-color: #f55; -} -body.theme-dracula .bg-orangered { - color: #282a36; - background-color: #ffb86c; -} -body.theme-dracula .bg-orange { - color: #282a36; - background-color: #f1fa8c; -} -body.theme-dracula .bg-dodgerblue { - color: #282a36; - background-color: #8be9fd; -} -body.theme-dracula .bg-forestgreen { - color: #282a36; - background-color: #50fa7b; -} -body.theme-dracula .bg-slategray { - color: #282a36; - background-color: #44475a; -} -body.theme-dracula a, -body.theme-dracula a:visited { - color: #8be9fd; -} -body.theme-dracula a:hover, -body.theme-dracula a:visited:hover { - color: #ff79c6; -} -body.theme-dracula blockquote { - background-color: #282a36; -} -body.theme-dracula pre, -body.theme-dracula code { - color: #f8f8f2; - background-color: #282a36; -} -body.theme-dracula figure, -body.theme-dracula section { - border-color: #f8f8f2; -} -body.theme-dracula input, -body.theme-dracula textarea, -body.theme-dracula .form-input, -body.theme-dracula .form-input:not(:focus) { - color: #f8f8f2; - border-color: #6272a4; - background-color: #282a36; -} -body.theme-dracula main, -body.theme-dracula #sidebar { - background-color: #44475a; -} -body.theme-dracula th { - border-color: #6272a4; -} -body.theme-dracula td { - border-color: #44475a; -} -body.theme-dracula thead { - background-color: rgba(0, 0, 0, 0.15); -} -body.theme-dracula tbody tr:nth-of-type(n) { - background-color: #282a36; -} -body.theme-dracula a.link-user, -body.theme-dracula a.site-header-context[href^="/user"] { - color: #50fa7b; -} -body.theme-dracula a.link-user:visited, -body.theme-dracula a.site-header-context[href^="/user"]:visited { - color: #50fa7b; -} -body.theme-dracula a.link-group, -body.theme-dracula a.site-header-context[href^="/~"], -body.theme-dracula .nav .nav-item a[href^="/~"] { - color: #ffb86c; -} -body.theme-dracula a.link-group:visited, -body.theme-dracula a.site-header-context[href^="/~"]:visited, -body.theme-dracula .nav .nav-item a[href^="/~"]:visited { - color: #ffb86c; -} -body.theme-dracula .group-list-item-subscribed a.link-group { - color: #8be9fd; -} -body.theme-dracula .group-list-item-not-subscribed a.link-group { - color: #f1fa8c; -} -body.theme-dracula a.site-header-logo:hover { - color: #f8f8f2; -} -body.theme-dracula a.logged-in-user-alert, -body.theme-dracula a.logged-in-user-alert:visited { - color: #282a36; - background-color: #ffb86c; - padding: 0.1rem 0.3rem; -} -body.theme-dracula a.logged-in-user-alert:hover, -body.theme-dracula a.logged-in-user-alert:visited:hover { - background-color: #f1fa8c; -} -body.theme-dracula #sidebar form[action="/logout"] > button, -body.theme-dracula #sidebar form[action="/logout"] > button:hover { - color: #8be9fd; - border: none; - background-color: transparent; -} -body.theme-dracula #sidebar .btn.btn-link[href="/settings/filters"] { - width: 100%; - margin: 0.2rem 0; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) { - color: #6272a4; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) a { - color: #6272a4; -} -body.theme-dracula .label.label-topic-tag:not([class*=label-topic-tag-spoiler]):not([class*=label-topic-tag-nsfw]) a:hover { - color: #ff79c6; -} -body.theme-dracula .divider { - border-color: #f8f8f2; -} -body.theme-dracula > header > a:nth-child(1):not(.no-header-logo) { - color: #f8f8f2; - background-size: 32px 32px; - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAAAHlBMVEUoKjZQ+nticqSL6f29k/nx+oz/VVX/ecb/uGz///+3yBn7AAAAaklEQVR42u3Oxw2AQAADsNDZf2IGyO8kioQ9gQMAAAAAcLelCAkJCQkJCQkJ/Tk0lZS5ZMhZhISEhISEhISEvhbaSoasJWUvKUJCQkJCQkJCQu+GnnSUFCEhISEhISEhoXdDAAAAAAA3uwDrCC2R1NNC7QAAAABJRU5ErkJggg=="); -} -body.theme-dracula .form-status-success { - color: #50fa7b; -} -body.theme-dracula .form-status-error { - color: #f55; -} -body.theme-dracula .donation-goal meter { - background-color: #282a36; -} -body.theme-dracula .settings-list { - margin-left: 0; -} -body.theme-dracula .settings-list li { - border: 1px solid #6272a4; - background-color: #282a36; - margin-bottom: 4px; - padding: 0.4rem; -} -body.theme-dracula .settings-list form[name=account-default-theme] { - margin: 8px 0; -} -body.theme-dracula .tab.tab-listing-order { - border-color: #282a36; -} -body.theme-dracula .tab.tab-listing-order .tab-item { - background-color: #282a36; - margin: 4px 2px; - padding: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item:first-child { - margin-left: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item:last-child { - margin-right: 0; -} -body.theme-dracula .tab.tab-listing-order .tab-item.active a { - color: #ff79c6; - border-color: #ff79c6; -} -body.theme-dracula .tab.tab-listing-order .tab-item a { - color: #f8f8f2; - margin: 0; - padding: 4px 8px; -} -body.theme-dracula .tab.tab-listing-order .tab-item a:hover { - color: #8be9fd; -} -body.theme-dracula .form-select:not([multiple]):not([size]) { - border: 1px solid #6272a4; - background-color: #282a36; - background-image: url('data:image/svg+xml;charset=utf8,%3Csvg%20xmlns="http://www.w3.org/2000/svg"%20viewBox="0%200%204%205"%3E%3Cpath%20fill="%23f8f8f2"%20d="M2%200L0%202h4zm0%205L0%203h4z"/%3E%3C/svg%3E'); -} -body.theme-dracula .tab.tab-markdown-mode { - border-bottom: none; - margin-bottom: 4px; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item { - margin-right: 4px; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item:last-child { - margin-right: 0; -} -body.theme-dracula .tab.tab-markdown-mode > .tab-item.active > .btn { - background-color: #ff79c6; - border-color: #ff79c6; - color: #282a36; -} -body.theme-dracula .topic-listing > li:nth-of-type(n) { - margin-bottom: 0.2rem; - background-color: #282a36; -} -body.theme-dracula .post-listing .topic { - background-color: #282a36; -} -body.theme-dracula .topic.is-topic-official { - border-left-color: #f55; -} -body.theme-dracula .topic.is-topic-official h1 a, -body.theme-dracula .topic.is-topic-official h1 a:visited { - color: #f55; -} -body.theme-dracula .topic .topic-title a:hover { - color: #ff79c6; -} -body.theme-dracula .topic .topic-title a:visited { - color: #ff79c6; -} -body.theme-dracula .topic .topic-info-comments a:visited { - color: #8be9fd; -} -body.theme-dracula .topic div[aria-label="Link domain"], -body.theme-dracula .topic .time-responsive { - color: #f8f8f2; -} -body.theme-dracula .topic-full .topic-full-byline { - color: #f8f8f2; -} -} diff --git a/css/tildes-compact/ReadMe.md b/css/tildes-compact/ReadMe.md deleted file mode 100644 index 4428c45..0000000 --- a/css/tildes-compact/ReadMe.md +++ /dev/null @@ -1,23 +0,0 @@ -# Tildes Compact - -> Hides some elements and changes some sizes to make the [Tildes.net](https://tildes.net) layout a little more compact. - -## Changes - -- Resizes the topic info (X comments, domain/user, date posted) width to 500px. -- Reduces the bottom margin of topics and comments on your profile to 0.4rem. -- Reduces the width of total tags to be displayed to 200px. -- Hides all but the first 3 tags of a topic, if their total width is less than 200px. -- Hides the topic text excerpt from the topic listing. -- Hides the Tildes Extended user labels on the topic listing. -- Hides the post buttons (vote/edit/label/...) buttons and amount of votes of comments on your profile. - -## Installing - -To install this theme, check out [the Wiki](https://gitlab.com/Bauke/styles/wikis/Installing-Styles). - -## Screenshots - -![Thread Listing Difference](img/screenshot-1.png) - -![User Profile Difference](img/screenshot-2.png) diff --git a/css/tildes-compact/img/screenshot-1.png b/css/tildes-compact/img/screenshot-1.png deleted file mode 100644 index b2c6ace187e54a96470d065a3962f6e6e6ba0a3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35996 zcmb@tcQl+``!?*3h=d@CmMD>?*I;xe2%`7id-P89L=A$7-lLn*JEQmBjn3$0l+pW` zcO>`oyubCWZ@quK-)Ak$Hm+-*=RVus$GHz73UU&7IAk~&7#MhxpFS#KU|>08VEhyQ z@E-aTAu(HZ^pAg>lq5tjiiaq+(ZAd`7nT*qz$lBvy)nc>|NhASlco~}27de9_dnfs z`6d_`Ki*4z6ju47x3^$Zs0;O8LVbFhgHO=)Lj231uRwz>jZDkA8#38a^BZagxz* zGbX5SP#zbfP7k!Lkdy6;=INe8jpr#&%~ZOrvpeo3jfg`{Aj0W}3#}mr#@E=o$tcXf zLx-n2e+C$YuWSDfXhiJ)`7@FUSh`y^21dfe*1M%)V6Z*)!~HWbcypih&!FYwLzX{- zuOUzVKTfp4SX+uZ0=m0gw)pUB0g~}=?B~+GtfDCf>-Jz;LZ|KhHT|Qzkj?rzId8WL zib4iYQX9`Thj^bGuyTo>OQf_K7w}nuY)i54<`e(ZK_@d8mL)P>tNPE39(5xn99Onw zyJ77h_0^lOc6zPGG<8|nPK99VK_*9U163_{M42_66I3qh-E!$hqWPnG14h(y^G5m#2Y2ys{VP|B$`-yARQX7L-%aX|ZV<>+V zKr6FDj|tgd{)@DwY04a#X*s@{w$RWJar)v`yFuJ{3{Mzs;;)i2wd(qwJ5O{*>x3tlgWJ5E(ZZ#i^E4hpdEd5j1;PRbk*dF=e%HAj4AZf+&!?h`B`u4iE z)Tm&}DgMZ4MnA>kR>(E&X)9LPQk#NweT0C+5{cwPH|u%F7AmTlsu=U^6bp{GoL9D+ z_b|BLp(i>liu4{IKi?{B@GU>}PQ9W0Wt-MWUxt_#iMA#*<&U{p$BZ<$tJ~!#rw7B3 z(={KS;|G zo5r+R50vsYhP4*dJ@COHO*vuTQmpS~F>nu0{BqB&hty)9ApBU^FEt14n=sYnQ4eyC zW5*?NV{7)bTe8o!%u};faX8L(=A1Rsa=E*D;e3}nG7Z`%RUDfxT)>k&&`$OgcQd|^ zpm)t)6>;Z>Tyx(yKAPoNkDw=w*^I%N&aM!%+y;$XvR>h-L0E-t5MLDVa?)&Ev{t;D zJAQKKcd%6{W?=92iJ-&Q#l10Dr2Y%QXV>8^Q}u$isaCgJT3^qcCeCo}p)p!wbx~FW z-gZu>>(#g^xvt8+1n|qu9lx{G!a*i|Xhpr8zLCDBY`GQ%Z;#x&w2M%?p6VQ3iMHYe z>m^Zz)-e97pBl4OjAE2(78NjPMG_r`f$`hgk#`6cfombqs<-Nw@h6M+({AL43;qp; zN7&WT3d}nrr>~5+oxey>3tpVZj~%b7pY9s2eeeh)JU|4T)aUmM$~KbsTbfB5<`IGG zwmX;GVy+&XB5JZjfc3j<%#NGC6K{TS0aqXlBw(i_hmCz*GYxrQ!E|;#HfpgFDfhm< z$@bSF8!`0q)QD_`Ich=CW@g(H5-UWR9MM?!DBGnp_>gFVVizZy4`!3nl+?1-muhag znadKOy=PrC#tV@qi5n`kOsUQpu5ml9_T2&R=HemiHBFIu8P_Ci<4#4oC=0b>Gb>QV zkV_PMS1&l{4EH&sIo@8arQmTpIQLdp4QXDqe`z}~b(DsLMmFPn7pSP5iJAvn-fA@k zL34f-ooIz?)l3+AcS3PY@+LbYVqpPe{^a>Q*7J{p^b>gu)s5+O0sCAY+xEqcMU6Xrg$SVYMW9;_NDUgTN+LwK#@}zsAMVNE+g-_XPxH01Q3^-0Yk8hWP zGmAumygq&RYIX)(FuCCGd7PAPVN{Ug7Tq7|#mz56sv=LLpYk!?tef5{+-ag{jP7jW zsGhG`Ns~6?bK#@M`6=|9iB+--lejsKe7@U1mX8&Sc56LqCwg<6um)W8cOa5|lAA`@ zjqs=&Hd%Tyk8L`K2>nI^U9jQmLGiX z6R}UV3wTb?m*JHH!)*a_an6+<2Y=n!1I+dL6H-Lw7J33 zmilxySJ;Nu<9jiAJ;G!!P&rQ_J!*)a!A-|B8MIO2sj-YVlWBaPM%QcYb=>6K6}tpw z!PeL9md)Iz3QKJK1nc;x3=}g}jGXc|*^(*ve={Pc5tt7Pd$;Zxcp~0WEoG;--hH;c zXhU?l@2z_2L+$(4bUfFL$GUeB4sEQ%DIx^Pvu&)|wIU<=VXo>(|49U7Vhq$iB+QXp z!{_wFr+mzwg-f}ydv9M@KS@hKS$S|GvOjYpMVINVK84$JZ0Pw17@k24cXoz$j^Y4_ zSU1NB(IAGb9Lz{_myNvgGj=wx%9E!c7L)Xt$#GR&Bt)eL}k zfRY5>4*|a4HRs>JPdn0VdF?wMF8>qHX3Fs4m8^}~);m>u%pmdg2{KKLuXx{=M3m2N zUp0<`ViCkwi?%qYLNrt78-SnZoa>%%Sv~bN&Nmn;<+6oZ6UM(#ZB*66shqd!i~ksV zvcB>)a++_OGFu3_l4^P`1DB4D@)`J0Y|bCRI}sL#HaK%cQ3{C^0jH5dfrhGdja1e| zUfj@v>sW(WV7j5Fw6g5)ymD5{R12R1jn{dA8fTVu8_@N(wxH*}#VlCWoevbqq-2T$R(*;gj>%t=eoqBpH((j z$cp=8cO^%-bVH%-6z6Bi2+~8Yy5Thv5k>I@o;l@ahqiK-Tt&=qwnjh`08~}8Lo>CH zfJWZ~>){ZXD7{+lDc1JlGnpZ=h#84}Yy|qI)MTUjI0lM|VXbkWG^zX?TM$tUKF5K} zjy*?Q3Y-VAdTJY6#o76LY(z&+pVQE*yCgJQ*hWAPX+Ulx83+g;_FxP`qVuaysF%0K zK(i+eWtPOg;Nb=)Fow@e?P`S1F0z(KZ1~E4;N~HH(c4rnuzfJo-^Q@15&YcLeRX z%yp_v&DO`(=5RKW7iboRsIk^3?a!YwY@ezCJW1Kcy^F%+j$owp%m}EpkXCii0v6TX4q-E%FqO6{Qp^YwQcD2=)fzt6H z&%*-#jE46Up~RwFbCNr}GiOzDysl}w@qp$R6H3!BHb|*Yeos|v-FNxyskRCIWwR5w zFj6m5H5hM#*k3%$5qjdV^x?+m(>POQMe21nTvxSpouSrX+7{^`^$!MDB|R4D%LUK1 z?%=lJ#dAs9CF%4_Jl>QZkNc!+d+IwyA1-e}U!vDwhdq&Sg~isMNFSIntf}J)%pD6m zj(F!xzWBJVMmEE6iu|KHtvPCs69gL0-+IS5W**g?8hYt*mk)*e!Wl;G+fmLD$$uTCPE;WsKd-=}Puo?#dJ8 zljHAs9n8?>-x{Yi@LZ6v9mmCfnR`F-@|XyX8x4Hc>*uj*e$!f2BP}C=?Hgv97+;}W z4)(7FDh@)%`+pJcA@}4vdhXo;(aDFcfno;f3<;OC_ja8g3shrZ*wf4xu)>fcZc8m# zr2D>=HAB;P=w~GI4#8?z5$;3Rl?l#)NkX>@f^8q}z*p7BJCs{k)q4i-#HMN+Mn+22 ziT(w?U&Xj`mi+GHw;khZQhfUt1BY3+HG14=1OTnOp8gAYOMB2#Nxxx+0M_*D?`|him-er9=X3sqM!u z{Lvp=-ZKBHmW{*@*DC0*%zBxoYEiHGfu7%GKdl=l?WtIp=k9{ zYg3!{IFI6UngivrRCaUgx~g1h&h9h(FaQFVC>Jd7Pm8s4M2l$85mX8ENYn1z_7)PZ zD{e0idH^NAgPcF!)_fd<9?D@u`KQG&*$KuXb%lAGjQZgQ`Mk`)XGsX?z+Ln?Kc4Fw zt7){kR@O!|_1;W%(mdcu-m%^(JX^cO*RiR+<`6wjm9XhE`7z$S!)Pj1%s^#rvPokY zDcW4tBs&|^``k_DZrLpi8l!sNbDmTehZ)#HPKmw(uW2G`sXVtBE=0-oKLxwlaY)dr zj!sW9)RrPaCxxx564g>XzqxA-z?6bVuKM{L>t$Hy##au!TzzamaUSznMpBOF%7NcA zjH7g$&AB!)uhp-=MDO5h0lL{B$F!&FLJ?`acajaf3$06hW^Bv}D0$r*Jp~L=HgogK zGv`g?F`puQ9AB%PMSW-WdUc;h&CJFR7i~w*0Ad}5S6)7brma{gi|;=?D-D;r-!L^- z?9Y!SuT=KFj0L$Kjc(nlGDgp7Iz4{N?=~8!!S1nfC+zEKSzF^3Kd=JTGjne1g!0bw zwQda}SbL2{uKcMr@I=8M$?J~v5~v%QB-beo+30>VJ4~OzXDraXpH*eFj5Vx4? zl{;r0*>eIC*@CHjUw@wpQCj7;!spI+f|e9bQoJ3YxD!<>qy|y15e`5Sq?``FIsw-G z79o)2aQc3V$I`IZhTWD&jt<)k!_Z<@XJ6_4!hyqmM!~cvX%asvJoB6V zmSLUF*8FiU_$&ke)MJ)#%?%E?R7WF>@88*=lWkegd+({v^VVAzpVP;}98Rg75`=d; zV>m@DwHeU~v5iFYVw&g$klcM{ApC#mNp4nY6?V9GO@NVZt>DlCq0p`0b@Fr?o->^+r})3O4Ja zQ_Vc%?2{?rz8(ASV&|uOD*R-#nZZIrjBdLoNG|Q}0cfpW_)~Q&i>pE}GC~!rwM1&Y zRM>Z7oqA~P{IMxDBin(`!!Amr%rN$i`Je=~_yV>ni_-p7jtc8R7hxaG0SoJ0eRqs; zHoDq_s7SB1F=^IVf1&+Ao+db4eGb%MGJ}6Sb)xD)t@Br19Oa~y^hMG7B>Ty|jiPya zreQW^vd`30M(d)j!cc;8p)EM+?$f%l0LY~DuH7m5-M=2P z-ttkjS{@S1zx<(H*8DfIZdfcqqsRHNhG5AeXXZv5d?0o(BTrRtqIkMbw}{`>l=eBN zIkYEbF-$V+xL3~5^pBQ54;2M!HW<5b3LDY^b=~E$+UNRXpwGo~Mk!=p zPr1bHTQAyyH|+(*5GhCL4O5Uu5e}>Bq04~D8dZF$Skv)A(gs+=)b2DaV>s#oh{@Gr ztz9~UiUD7xDJ9A8Z9V$bzy*)zr96I0gKA+e9+@omEXds}HyY+z#R z(k)f@jm4$nJ0`r(-K_fqNXfx3f&U1QzoAvPvXfa~dN{z1A|8 zZC81Dl=nemxGc#e(bDj1ld!j)qd~q|u7qT+RCuwG+Ng{58X+_w)!DK71NR}-kt9~} zucV}&2ZNpkQy=L=`;w4^TdYNS=6$k&Ugign-+DBe$(YDyHrPlEs?cj^-o7?Ul&{bI z6;CibSM57m@H`QJWUV$4>_d1*~LO;LFu*2=ah5|Zv zpk5nAU)F(b$!(Iyxe|ql2|XLi{e;f>G! z%q|&+H|#6sN3{L08QXyJHkI!KPpt}m)a>plMWef>S?o3irL|_S(kTfw*_GUz+`)=! z-0K!;haYI+yy{uzsdT1ILJ_IcuT6ruG)*Vl>&7hAbQ9@`JwlRXcVDgQYo?pRgX^wx z!PyYIEPA;tJxM^)J8wWbxwPz?iRe+8s@MLxEFZ0>c-Ga_%Y5jGr(d`~Y{nFr^ZxiA==>{A)44?ouYb__{1-*?M(vcHqZsPHr=NS8YUIP*j`ML@bwS z0yk?0<;Gef$CdDY>}0n?tAESV1Q45GC)e2%R6`jgzARIJWufMpXsq`!nH)}y?8m^s z3@6q3aRDfPNg%BSqf{$O8Zbmo!|*1zOtZ@JjeMnxs%MBF@KHR zLa5Eej6dai3v-j{=Y)LQW&?oMiZNs1cbwG6p(?_zBxN3be2!Idu|iJJ0nK@~Ur zkE88SZHTY(R}6bYvf!$qvLM@a0yxE#H!-G3GE*a~iYO%Q0}~+Rr$wJJ zArQcCpx~VA*&o!`Js7D481${D9nrVMc}rhb0ap8f&R8jI)+D+5qz#nfsB_1YjLif^ z(#wYYUEhg$XR`(Q!kqEJfqdOrzIx&l<7ZJZaKgvsXsO-zGgX>%c1!DiypIZvrANMT zQ^R+$sed(;Kbl=-yC;M3d~Rf^jkNiqQxR78Tfd#+SZdvAUV5^)oTscL7-aOthEab@ z3)ziBqkC#VwpHn^cpeLHs>;-kFGi>2XMl`~oUfh5EX~v~H;pxjxo}d%CF5FZdqN~0 zHx^3gB6B?=tgp^zej{mCZoM$#0+wF=Kqwf8>Frx{&qPzbEbwG=VOa0m#v;pVipPu zmFz~gd=>i=n+XwKkef3y6lnQvYCB{y>JvS;_{AFQ?Nuw$wUuZlsNVTKFL7a z^flKkSEW&54rked(>I|pl(CEv7KkV;hHVKCkD%x?*DGvJ)a3bHGd(x}1iMmpT+dYN z-s6okIgbL5#X%2aJ?hJOPeVQ;qX)JbAQ|$U*kpp2zXgXU3&m5S3VxULZ1Ez zCy6?3ndKTD)!Y7pF9mmGqHY?vCBd3AIu<1!;NYDU)mV!$5D%hb z%ko)p#NZqt3!)`8`z`t0hO@|GI!ehH^f{S`SarBe63$D5o$k5IT-qpis19HZNsOXo zHmOR=&sM1#r}KQIVrNm!w@uU?p43SA+|vX6OH$f!i>V@0tYBj*NtDy_;atd5?HZc- zsb=tGiguLdiLsLx2t?ACl&Dy*5^gjm~n>Wk?2Bzn=koD=e~%A1^u;CezVn zr?pz1hD4*@)G%%;GhBV=d!s+-Z1yVCvshcMF{ZTK|m8(eV z8K=nyUzLb7u%?&=AH`VgK>N#$9mJ_Tdsabq5dG-O`~-Qv!l2Kbhy+!qSDkS?`x1k~ z>^F*vnvqtV!TSmFym%S%45j`-1DTo&?f_H|)FoCab;Kso7%t@$9jaNZGR&rW+!^Ff zHOW(=0VWad8elAtf!4|8fi`4aT%;-E#Ug|V)H~BXWiDc(bZd=HoD&EXHoF&XB@x!5 zX-|`r1)!?l<%614>}aKb3LQPFPD%)cbX#tCbi9hl%q3%(N%>iQ8v24~JS8YkTvGX{ z4$PfeY_{*=wB00pD&U`{TwE`;3bvF>`1-PKEf$)M8Bdv%Z|QC&nJe7C?`#Lw+I{m~ ztSP&22Kdb(FJ2wTCP!_n7ngCw_8F)e!kL~>WJnw?fp3U!^zA8plW>0@T@1_1$dI*% zyBSTo$%%?tm8-iC&a(7T1uwvaDoOyDUHARa#a+YEs4VTB4Te3MowVuW1t@ZQNR+j@ z8oWd{$A#$=rMzCrWI?9ppd`NFTNvv?H8dVq=g0RChQADN?N=ztEk;XWLKI_pDR+>& zRV6;{vj;bCw+(L*I`kYG6Z{oC32|CKRdfU{WTeA+F9ylkhv z%|vb9`UfvIdNo$wp~$ad@6qVytUev)3RgWno}gA83RH57Sg=Q$0v8S$9ZM@O^O`Fz z^?2>!DHgSE-NdlETm9aDHYSnS1iEgkgN`G63;k0-=L=x(Ka)L^Ncptmi2aztxKxQ@ z!8+f9KX~|g|L-NgvpX3c=dzAV6TBQ|!(*UL)_N&?K3(Tlw?*GpJg(Cc{6O{x6iGE+aGp`T z?C2PCjdy@X6)kfR{aQW0nWKi8bP?zW;7h2DEL>p(TREO9gOhp>iS-uFTGF~YJ|Zt# zT9*8J8+J!dlYOuF)f3W*(rUN-5VaI2$xu%>ox@ma{U!MIHyKJQ zTnuzXU!Qj``GM%HkvHG49|=4AOuVt%sSHw}j~Ub*nIAanJz)G zi?1*C!i%tG59qPBM^m>Dgqa;8+x@Av2glGk#G#gk>-&hNtdz8<$Rpj>K*qH?|C5}@ z41T4RGvX906^}L!kVoGGJk&C0j>R38F<)O1`Wz+ah1E|k(-IJemySKXexj3LS{`L* zy<$VxVqVYJ8IAkwQz?qTh8pC^7f{WmND#%YYy1AL560%(^@v5s#l)(Nqr~Ykxlj*~ zE^0HOD0L18Ea=NG2=?1kvw6BFBYwJ?RO$K)t z8twkLm_S0qALvG9H`(A-_Gd}ssdv6i$Pk{ zelIM>S;XG3s7|nPYPw_2rYWb%<~?Um)+2_OKebeKt7o}_Mk=I4(W+q_TYa%N94(q# z#q?VC%X8i3Gc)mNs|K#A@OxV49$^k23Pd_AVdpy;X%A-B7o z&I7VyqZgR~mh{8z+8)o#$-+W+(+fhE?y+GZ^qOun+ELr+^1FqqLoH>X?7FYB?>gnV zV0@MoA@8e?{Z7Mzw1AkJMGvboAO)I}b@wLvfv;i;*rajs@i~R%#@!L|`aYU)tn0JA z=oK;arNMunVN6>tuUeX=5I(snYKR8G2WE$_gkT}X=7YeXCgV8_=R2(#+^of^syeT%k9BAOm3^;++Dvv3|iO8Vu5DMP5a}_ z)4kO!H;2-J&33RRqm5HcBC`?}Q#nd+wovT%GKBOG(S>I~Wk)`YXwhS*sQaa-3>jVL z{Q<)$XR5`JcP`Z=q?^Ov5;EV5gDhOkeyov^BwegDszUF;2OH&(C2f=??R znTZyQ61xPx;WBic>I|CC=ib|Src-;^MLt-|+H{fG%bnxm*VTA>+`aWKa=RF#%}!GNn0peA z{zlv{i7^L7?1k(1s^{>jgmipUI-KbMDSWjfE=?Mr{Ue1xzOuNfu311w`7h#6!s{PzhdB$4?G5|mm|?eP zHP~rieE--=>1+6F^!3#pI~U`4+s$Xw%|xGk-m#xq$#pv?UdOSw`F09*70$i*vwX=D zcAYlS!_3Sq8U9}KdeTcKT`BJR7>IHLEqh(|>&N*m1p{v~VtCUp2h6iSyiZixO`uVF zLUeq&&gx5#)q1u!hq_EhX@)uhFMH+XQu$6dlI{A+jQL{X}QFpg}9V_4w$0%PoAOxmvL(#+yT1Hu~-T|V#DbW90aE|j)6 zba$`&PMOeN;=N~ezTgJqUp$P!WvN|S31ej;$p+RQ^f8uv`iCSefPmpY{)j?%B7aG< zyubFPS99H)r3S%iDSBaYmcku&X#Cx_Z~Ws}5SB(I2wUJ3o{(U4e<{^e@^-vw8CUafgAZ zh8SMo+f82|1NvPePB|b)|71eUnSQ?2q%GB4uFT zI$dTgflLj|lTVLZSvs4ui)ZiVyllZ1dS%)QLm^?(Wnq+F+tT{K?rkmyQ^l1p?aoy2 zg&y|2jhx^B`QxHieQyZpo!|;RXa|P*bm6hwtO9Sdh>4N&+4S=v0~aMIoC`g2-)oyss*W?z_!91hbwN*RF(KF~0M? zJx)itZ9>)cV+(aCbuQ2%jOlTQ(gf?huU(Z*a_`h38YX&d#4JFAu(pL3FtOpx{B*GjuR-4y8t~ z#BsyCj+?IcqcP3V`$wWVr49XE?EG>JWzBe1TPpnN;`iTM>y|gqxobym>^sQq8Zvw-VVr(+%#&V`F2RK-A?*$^M|)JSR8#br=ie6WEnaFaafWbI=|M zysdq)G67OfNA8--rVIIg`m=gcy)PNt!a)6le*N1q=h}vbU0}rWCc+!JqkoQuAN-*MtG)kHl2*YkPEO_oxC&* z6950L_PvU0z?|Knbx=;>oEWL@yDH4)W!8jZmZl4%igTY}BYfH8D^C(gLYgeC*~4S~ z=!kJfKisH6QZc9vrPF-z*NH*(rdOOs z!wz^6ki$lyZYnu;TOc~4gRn_=xmFc!H23!2vGkM7Jo6Wy9 z(8e=D$l<^>y$Sg{a)D}LwRyBoAdQdXLl(jnjYwPWFQRjTL?1M=j^3^=wj_Xk#<;kv z>ZoH>+(gQA9z*nk9$=F~+_H;Rgjh1TzqzVwZeB0+r*1UU08cF38ZydZs2&Sf*R(8h+P@%0Zu}+J(EH>Nh>}MZqYHdgIRY7C zysa&lo|_`JiTru-bkBF3SUp~KaB%Cn9PGhW2hxTR&F4@01>Q#BTt4 zp_FEfucD^_6`r}&Va#iD?v2g*RgFGw(`_*UoAl^-%r!mU7(|z9 z-E1Nnj)&YDRw>a~piBkJEE!!0F#U1kcIW#VgN2;QV{4J0CeVy)$rTnBSRv;1QYaN$1h;`Z*}oWF9Y0bZr8ZINrNKAy2EF!|7~} zERH^9q#+!aUSqLMv9IpQEwIkY_xS$S6@N;QP!LiSo%&rX`eweO00BxlVuDDpidW*f zR85-;rYO4=IKm&f4K!~x)FzJexxq5UHai<*SOfJAeiUn_+403g>iWu7;aJ-gjJ-y< z@)QF3K&(+h9R+e>Y^ry?xs=q5L0Dbq;o`Gj77hZ)o@5A1Te;Bd#a)OtAU(v94FKo<>(? z|9AO^;a*O^}N3FitYYA(fG0dNW=yf<<}J})jdD7~^O`pQhr@k;QN zUye)r{hYuqhRdu{m^GwNtz5&&^K+Mt?#H|`1&3!aDYq2h_z|gFxe!w*8SV~2z1?VL@QPkve5D4CX9C~j)i}yrr}xq-HzIX? zO@?GsJ6f*PkqX^E6x=eosU69@77AHtFqheaW2y7!_Fpq@*ydyIt%US0{+N){%ATk z)5In`!)K%nHb&QQw-oDYBMdj zKzi`$_7~^lH7xcASI*s#pJn(zA+tvlo43;DywSvFE_%8r9_%Or%79S09=EqS){F&r zn7{CGYv4a)`0rp6)M8D1yNit`5I0#(#WJe?bCJult}_MeniNO<>=>tU{xJ_XEf?FQ z&PkHW&o80V3fbbkvpHHZmVxn#y?lHDp+|i?DdHuRHwwt zhZs#F?x!Elyk6mwW3YNY(aw8%2~Jsjw9}rMUz@aDddvjg&Plp7E#G~NDAQZUb3>L$;r~#K@^M~54ADwE6SCWz{OV%eq7t+@yK-p5?NtS+9e) z2?vU^ga-I4Q#&$`$YN`h{TH{oy?tK3WGjF8wUil({RaQ#4}EM4%is+V?SdHCp#Qko zrskF>2W^Y5i4NBsQ>h*<+81^EOSJEN2PM%aVXIv_vp$qS^tBC@GC6t@q;I1%n~?S>{Sg!_FK5^yE;RHztHC8gj&2ki^d{S2^?{_66xkqq3B<$ z47zLCOb(~ps73{zhO_?N;!2;BUH3xOtVu@=wc^cs(nu=ags}`nyhy#Hx@`;*^ZQ6E zDIb_?M*@#oBz;#Fx^=x?ugi4*iKcP~Kip1OYjL2N(wmtHp{MpC^W z`vZ#RlKqdD`l@9SxRk5Lxaek()?GqjVBp#;>3Ki=+j_vT{)lKoIQ>c@#H3~VFZ{w_ z`~KfkGWz=Se@?fEj9UHA(|tPFq^?x_=TK}r^l?6!>IN)d7|6C&s4?SZw#RfQ${^$M zjZeo+Syc0ggRX1ODn4X3S|@p_4Z;Mt`||+$?CxZu>)KFJ&8)A9s&M_oPb^i4vu%`D z8h2e6EwT0doK7J#{5SdC?UyGDsA7H1j+6Lxy70P-@lXf3YdR1_k}|7~cko*BKtJ%r zuf%>Y*tUo?l|0u2x9+pq9wbdYytGSW_!*tR*4v7EI~4s zKWfP|xWS_Ap|s5g(asW1v`vC)-YJMN89XCYB4uy*3VraTdCW51Bk~frbQ6^M7%kA> z#MbjLNja3q2Jxn5{_Xtv4( zDns*QQDYeO60VWV7tGb3pIWo=7N5lMg;D$8jlGP8w8|011TK zhDn%8rMIoEy|`QES6j?;IB`wC&j}Xlu?Q*}m*M0mCr7XbY{_p~ZUC8&zK7W+pxdgH z)j9s@)xTQWP4c65wTRGt_FbcKw@&VY#C3TL8H4K%*J_t~B&D)EO9Ezmvfq97+Syiq zhY8n$R=%YE{KJ@vf!%uYIbAZ#lBZ_YDC*f8FRbi4fZ z;(y9Z-`}Tv80d9LDF)b9>mHxrwPI#&RBD zQf|$DTiTaa7lJRWiVvvWV&hD|zYpeuuH##1brUAG9N-Fu0JM{z<`HhbUk;e8xrCQ& z&dw7XKX+^^Xr#j^ef@VoIw*_uwsv>d#P^s6nw>~j^Xko{^TBg`JH1V`8arm>sB76$ z-C5EUcb@g{gdR6!TkNl9r;G`yJyj36~Ky4=fIB8HblAYb?SNb`_LZ;Qs9z!_P&Xl#TJ&*4cmQ|)^v9`5S zzM)*1)I68vi#a9UAWo=P_{eTH#4c7-b66Fy&pOqo=CXzWU|6%El|iEowg?Jd$96pK zPqt`f1|tUh>q<-Drcsvh46`!&iboKSXdshLt{{uF4J$OAdfhrF?lRJb&Ui=8k25YQ zitIIK#n{EE=81`G>_%$d{0DG%W`ta(ncbe8kmj&qgWj76gAke6pHkJyld0cTb)EM{H7O zqDFC|d=i<(Gj@ZmPN~2dho4|@FGKaUpb~9KR1k*@dM}r+egA^nT%9A$3s7d(F2I3L zg&oeDs|D5XQu$PIjy)#bS3FG3AYpy>D!M0#U3Ki6VZ@GlMvTRrv;`A)x5W7_eNvBx zS|RJWtJnsRt9vru#9hfDDMN>$ws-m?krj@&HF>vdrtM3|KIQ%(Im-OeBN=Y)cvJF@ zNpT7e@;5^h>tNfW!d$XXvOv?^#doYOlh)hoqA|ffrfWSnIZaa1gg84-5h4px>(g3}d}^L)4ot}kRs9^{ zs-`q7#PDmBdNc=`5ADc2W}-UWp4>lDoGCLEPgd;L`!h6L5`SxiI%OpMyLSgmC=R%& zC_!AE!{L$oAhN_<2bi*U^-Y=B)0$yA$w4a)6ovoTO{eJ@SGQE~C0*vgkM0@!Ao?D8 zh0VE-s|^?i8+WH!J@oCN!^+1giFa$UiqWKsr;ZH0G0{l+r5-ARUq2Q)Xk6@?wA4Ye z6RcC$oVpfA5!DMZ8HBB?Li52|+-RE(MVe=@_~kQlzAn zR8plIq@>fKq@<(~7+@GelpF?-7-|^iS%dd|?|t_9?S1yMU(f6OagO{sT(#o6)^&Z? z=ks2h6y`E;8AOr@B|YoPVFiBUQ?4e~Ua!|$UQCS4q<^q0f3-pjI+nx8$?8DsrwEIG ztm7(8Rgs@rtT(Q%J(`&Hc>F%>z5u_cb{8v)9qNN}Oaz(LNS52`O!*N}y|tDK>!`c_ z>+U|ey%J>xf_{1Uv5X#S=;pM%AZMhJalwp+1Y)QqSGjR$QdeF;MG;lNTF=sDDX(OB zC$|$PbCcqF_p_Vc5FEEw2^w!6f596XRjTBB!;P*gsL-749UPXXJ3eV0!Zdu43=xoU zdhTLU)ez9V{W?k^9#cg*Qn#8zeHe*LP(D2^J>EMYuhwJ(*~UMuaNrvd7!Ake!@T6> zD9mD-3!uAWWr?KjEQ)EfH{Glr}pOtNZ4=qJajv-$PC!yV+=lk)^D|-FOD7T-x z!crN?KJ*=xtBX*c-c6GJ>jBnIk*eln`YljCYF^pC5F9#y-sNAqj-kSJmLXNaMPja~_1Zt7j+~s&|u?N)= zb-;$T)g1J=U$K>sNlIQRjpWT?65YD&79Km6HYphST7V&{Z?rB_HLfx)J(`mjAFZL1 zZ*ND5zIe|Os-Q&{mnaG!66IgiKh7+At(1tD8&-!4QNNmww{DQ*76d{^a;hkHrM zqJmwQw0H_(o_3Cr7Z`9+BM>+me0v(kFbg5wL(chCSO7cbyn&ZLbJ2E_@nHtNY>RO>0$~#s%S3}6IH2xCW*^x4W?#OjW`?# z{w{FWe~z3d|E>RPhsLNv@#*0lBlm0}AQdjky`o>E6>QbWOQC>eyR--a3}Oy-0=%n7e&8(P<)JdFR~*@H{s(4}3i zwt2R54`MK`cvWQEhx=s!CISl(zbA#Vv)r{Z%301ze_BgxW-YU~% z40K0RwHWc#(ppsA=_q-!#AmYqX3-nF>N{RPp)u#!;0HGfP?i)jPPgePUE>{x1su|H zt<_aoouGUsHh&T5?80Z5H%Yay7lL3MI)faBJS3! zG@y$!Adh3O9-dCi?R;zL50&ImSY^GN#;48TZR%3Rl~1QLT#_E1EP;EHXPxX|KY|+J zbTJU9^3+N5IOaRNXo5!Ni`MTA#SJL22#PVyKo)2&OXsJ>Fc!6G7+WXPvOR`rQ}fA2 z(tmJ8j6E6e6Qk%JScRh=E> zGs8W<_8C)GB}{+%!k4tmkHGYP^mFJpdFAV#UGp7N&;C&#&Rh6eU8Kb9G+r)Vtw73S zc*-aKj@IQLdKI2>)@sm(?fYp~@`9n~k{boY^fzPeoxk+jg`{gOS^cPgvU5hdE~1D* zuOC448Nv0Av9U72Uqz%T7*api4# zp{r5E#XP8(L)0a{?d`YK-S$%qQKP#3AY5)@?!O%XqbvgEJl*prj?|6rU18g!*~Z)g zA;I0^~ zEJV67r0}#XYV!TjEup;L8P|`UdV(@>VytERF*i1(XatXcMrh=7k86`J>_!VflROew zwQV~6CUXn60}=FOBVTBHGu~ZId)PnIqsp2LVy|LxjYG^e{o-Tod$y;t3{$QLvnFAZ zZs!+e^IpU3|sj!xbLwFaZkaJYaY7d5Vt1T5Rj-(sHWkuevb7Q`- zavlgyC%!7WVc^2sQ{kGTbth6=)esY}#?LCTGB-9c^|7+Cpj#Nq)nRF^zi{u}m{zz9 z^g6w#cU*yL|5M!LMc=k|Ne9(JlYudIR*ThG?TDza+M<|jwk6A$0=Yi1*Ma#7ZRr}i z>mL#pJ{dn*zdh+gFSTR4-AgZ4u~c2YmTo9;nSQX6VmQl*>58E(lPqW2kC3PR8a+eV zUBg=aHiZ{1BC8zfIg`(dXO9x}MOV^f^ORbH$-v(}0%jDd~1Q&)(!QY5&5lbt867 z;S8P(y=$wR4G_cd*TkNj|S)R8G4(qF@nJTp`zZ&{|fys0G&YUc4l{ z{9J+z#cv$0M$cjxp7DnJ?FGsmAD$lX`9m-n$h)OAvdPO{i`eWfEJa-vgLSqBr!f1d zcamjKyxtcnc2sB4OL+{w_{%E@AE7`bU_WhhQ~}Utz>-Yt$}6_^5%{ia!3`%L&-;to zxt$~-TXqQV+d#i1VFHza{bXPkX3t36&&1PVKZZ&%Ny=Oo@f*Z5bqghJX47P~y}j&O zBiS;SJcYTe-9NuiDkWLH=fObT_MWBo1?6;W@bqqX2s)c|U7v)f`YQt_5%$`m3+-}2 zdoY=NngQ~~+T6B_Bght!NhPW0^XW!>XZ3;8H=6|2LSM$*_=;(gu+ zjtQfDZmEY9_DQIZju#u8I~J5J3c#zN!*HH*NUA06bab*u9731@JQWu=$Y2oE(%$<& zFvim%R9jSv^CHN-!~21g+chKEw{yB^z6bu9edw&R)k0!DM7X_I|JA!HKpL4+J4RyIqOc{NoG{oP2w5fMqAi*vOX>P#-5}-^}ECwnoh?J!z`T3j^2_$nj80qbiILL zN^QLFE?Ke~_e5r3&_(;$R;w9j>y&7gDd)vWIg_WYuatQ3Z*G3l`SPu%`CwSc-*6aY z-zhrnLsluCPAM!wYeL=43uaZsc1=D;Frd{R?9Jy$GU_JQ(}~8!mJ+gixf{ZbZ}Lx_ z{yg7)xL_$Qf%_V%UiSke&wc)B111QOjsj;b$i>-|?s#q{5ywEAcfK+VR4ZQx(uJF`yO3u1T=WX{OhBPsm5 zqYSQgfXW!DdTdU%`{!9EO>oDFiIY6p3%7An?unpdy`VE!(4p5xNp6&SE=L?I2ernK zwNzhb{s0bb2>}xVP>U5eSU+v;x^x8Ap)@iII6vG7J<&N46*HZr-#|8=ivCx+?}amH zd7x1u`=x~Xw`GTnPFNO%wzd&|!{GFNn-vb@oB&G!~$xXO5C;Ttu=lykrO~!PEMd-uxw>fHm z0!6aIuYbIl>g8$Xx)7vD%AKgFLGU;b5nbCmTrE>Nll3lu%wyVZoX2mIj3DL!f9F$y z%y}f^xEfr>CyV9exBsJVp_42AD^TfgzUXhh=x@I0Z@%bnzUXhh=x@I0Z@%bnzUXhh z=x@I0Z@%bnzUXhh=x@I0Z@%bnzUXhh=zqx74vuQ?_cEO{>2tL zXNgaUAV}55LcjF-oSr&$)IbG8X)`)s%ukjwUJ$?IAvnuPqMF7}vA16PU2GiBDUv8b zE16kVi9-M;jmDVG;5*yOYNKbNdMmFI>r1d1;!9VjIrQ&{MW=f|!|R;jYRm6N;^sdi zH~g9=&~Op{PJ7pkX7p{5W!JC7vz~Zjp^4FE(Vb&Xzj}*pT@CiEfutKF2Ueln?*jD& z>?x?V@r5jgx);5#c(gz1pm;n{H_~;<{!JF!r(fXXmWfv4Di=<{Ft>qX`fB8-xx?Nq zwsU^Dq_;*zG%Kq`B<|kL?wqbzJ^TT~=#2H~Im@^rJY#>EQ;jXo(!!*)C3Do5^a!-! zbZCOy_carfB@sXBTB9u$>!Y8t%TFzdr%R}w*0Op? z>!mbm2B;sG-~)xZ*WujzQN5cPIRxO3iT)OGX%q98(apQTJ45Y#Js#+V%A!HO30Xlc zz?2T|t2aQ|u1?EUUe}_^({>-+7d^q8RMk!;hFIHQ_p$!ojl)_zZPmI2^E++{47w&N zW&5_q%|PY@<&_vhmnb*x1ewpYx|w5owB+9acA4SgHkaIrA!f?xYq(p9kUl<6R7H%WxF^6-_gboddxcd$i^w za+3XI;|St?^_GEb$?VHv=Vg(L=V6|ts_ip>5Zxcy+S&p%5x4!Hb3jFdM%E1G06U0I zD_~O9%;J2G9|t^&vJ#51qk*s=>-bno#p9pLN^TdB(1s;T`uyZHd0YN@(Yq>I`kr?> zhb;xR)CsUx1ZvbOC*Y+;NvYRci3^%-6h4!x8PPFB(OnsN?D#_teWY2TW(D`{`0n|t z-eK$nlWj2pkQlG2*$Au%f2b!8Gp?2{UI!gvEr?8VMLN_Zt+JD}qyh}btCX4#1Dncz z_^umAj_OXQQdX{CM!h`5UVzJBVtkjRF8~tr7IR`XbAUSYtNk9zJ?B522AW*540hMl zy7P6>9VKJp*07>((4>-}NgHf;y$Yxva!H(*jQT2dkM+WF#jENXHDy)OvtO#tR>b#{ zVjLpAEq~>LnObF?&i)D$20Hd1= zSX&x8?ML??Iy)2K9YPmSH|RzQ5oDJDQyzB9iQ_CFTKKX0!Gi_65nM$$yx6hQ|s z(C4hAP@jM~Ut?^pqKj!;U>4kF!yk`jQ%zmQ>r(BlPh-(lgQ&;KMNa-$WXADMe(s~* z;o)}$G#zXl%0&ds!cQDwu?0YO_+`CL5$wu<$)Q4R()An^-23w_fLPd-d2S7ffr{Sc zkDzi*6cBM)>;v()kg~&T=*91qYG#>dD|%1qI>w8D=J3RPvPrF=D=KRaRHOvNne145JJ8M>>UBdk!VDlhugEQc?Ia$#Wrq&VCtKLJ&wI^y z+;q6z2~JSGvR~2 zfc8^xT-nEMUA*5;0+trZPgdYsKHY|mu{1w5J6APQDuf@D#1`WRPF0lwKYsQ6**w2Z z;rslxrq&G>U6dwfvrWG5Qux!bgI5zN!-rnaNl9c01d>_9{PrA03#4wDSsVIPXFZ>p z`#5eKzI{)*UhmDJ_j!~*#m;M>KF>6mWc$8fd?iWc+1>I#0G>N$L_n-n3@n{e#WGAR7B5(^f+WIEDr@~b$ zaZLe-SYq)i!}u#NXL!dOtZ)xbm+kX@UM*|pCRTI~05BS(S@ox22$84AKfq83xX=Jj zj({)C>?idI4IkF`Y|p-eW#Yf%)%Y^tEFSxCb+Ar7IYyEiZ>pR*G-+k5G~^B->zD96 zxn7+xKjxzq0~|$IVym!B0Ax>yztZ(UvrXw zP?qjrTKW9AS<2wCJsLwxG1_3op{~PHtFHT#07?}I@Y?eObKnigaPB$gOD0TTFMnGG zcq+1Mf5C4|{lpKKvn%N-X7-x)6!b&akTof`1hRqTUftmI(>98C3_gqe8JoE0PM$1Rvq`=68UUzVS&rJBVME6{*=MIY)SHeLc$AX1(>8qMNMo6ge})1E&WgeVb*&+n zA=ES$5H)i8M7(#4FU|Lnriyv2A1q}gSS*ztqsnrUwgF9E;pO)1G15OKpcS>iC!%q- zkM1Ay%Qh-XZ2e9Dlb`L>YV!J_-#uUIn)qsWv8*@l8FQQiE6X{>=7KXC-H2xY=1axw zwd&}JMrY7G3|K%2Zy7s~9n54bEoU1BrNUu9{1QJNX= zPUR<}M%1M45D&~Augxm9nu1wC?qmg@ungQ+q{Lk}ZzF|GLd#vPnlk~D;P)P2m6yVe zNGWJ{jWz?6NiKl%%wlKu6d#n^jdOGK5^7I_Wgl*W)8;U2{`Ogkr|~9noj=wIUo!f% z?>#8;ApU4jcMO2r*7uL9jJInBQ|fVSj@J=9B zi~;dyq4|iGgObT}{sISCU*|-1ocYpb7jpt1VZ#tYM+=+iNtf`>;d;LFRW27jtR%Ht z5v@?FDdhpGPv{aSMA;1qbC3;g#$%g#BvrR^d3+Um7&Y->oTYF0RzdpMGgD z7Ln`I4dEqCdjP6)`mIO#dDxj=yQ%Hk`MgRFtYyqkiL74&iRrKC zJ#Ytb8gT%PspPzh2Eow0{60K~tiwKzP$P=DX6yB<+)&11r>9x78@QPb1&gj!r>n{b zgdio9=;|>Z>yKBfjMX*vl)XX%AUuLe8sa^GnBxpI5(>SUMF*r!Oc(XE|E*@y5mSCU z*~|`-%|knY#WW8>HUC~|;*2EzV32C1-@ex$zvth4{4M}P$_*m4)PGV<3Rf*624zgt zeDj@>5dD<*6R)G3J`%7>n{%&NM|KCqHj0_)2*jh&FG-xY1YRJn{Vh;2y^tueP2iCL z#7S>ybs&O>KssthSN7)UhZ06M^viJnu=hVf>?cXMH|h$Fan}9>@F^5P1ljqWZAYU( zjLt2#U0J-u@@i5C@mW zoU^4cD0xJs?#|O|{ zR9t4G5v$2N1)BMOpiX8ZwDA<5YTQ>-h zJv7a85IpFLW)|A^*#>duwR$Ip*P*}i-j8eP`qY}OT#q3_BPcr)Y%<=4qaQlshh6id zoC&0oWWRG+vtLV4rSC9tar4317(W0YlLXx$8Dsy5hJ0kVvX`4*2?yHjCX6ri_}w2> zGJkviTBPqHwW_oQu@fHbw4xFXtK8Q7_JVzRC9d=Je7HT2g{4e|m*!saeEEp1?pX8u znIs`*ho9M9BG^AulxK6o3ruZ0-T0v{-<{j9S7Chmh3n0RJKuB&vCvS{4U_6A{nLAR z%O3eTo@#L=NZ`QOSgCBv+;@9LfD_!u>RBKY)B$H``4Q(1m zZu#Q^{b@&v@?BW<40oUTZ>=_S%bmUolu$cPszA)iaijJ{(#QXoC_V%r9dFhD9<7Iz zaLPIEdlL@bSMUq`znDN~X9LNQyNtfyzpY97Vq4i#v%O&g(fI@9L(2_m;QJWxkBR$= zO>l#FLk$=66OSrABV>8zZN0`pZP3h_Nh7PY4G$iVWPI|`Q2z90NRJ<$B_(x7KcX5p zhGlNnhKXq0nGG(CeukEssp-|GR>%4@mwZgYPbl<7V|?>ArZTo#sgB2=Nln$*09Uwe zZMh`8&n@PWZ}zsO_R|L&g16GfuJ@0*#&t-VQt>?y_e^DXv78juyzNiR`jP z}mSS}GWO{bCcb2|~-SMr8JFtGzoW9Fu(gFkIqC$CTSgzXR zP&g9pfho=dJc7kPT8T{~30>)@80}G>^hRco{nF7(Yiq*EW}m}zOHX2i(rRor8QmQ_PO?DnjETM`SQqtMP+_;$1K%&x8a*=jxagd z`|+tg9+|zP# zF!9|_aZm+`zO;q@n_s^%JD$-YFm>9RhwlFWgQ?RJ25It%`G-vccEG7ZhHUYuZfDeX zeNnO^(?T1g&0xeA7g*)il3gFy1@^d)BjRgaGN38#VCPVD_?D6RjLcUVL7`kSFsejNj97*%$vhx z*qj4xhT@Gd1iPwsa6R56Teyu4fkMjc5OLy)=Rcph$XhPLVen>c$D#pA#Uvp8yycb# zKU@`Kyt7(m5vssK$d}R4nk)<7pW4ltmhD~}`_3)vP!l$-q)SC8tFbEp&a6(8UB-5| z-1~YOYC9RVp0!-EF2265{C+CV>QFF90rH{x^;*%ab0s2dQ8n(p zGawafb2avws%&%Rj=WVF=PQF*U2(nB@Luqz7Z3BWfOXBy1E z=QQM}NVbMEsS5Cf425dDG;SSevpYp_<%@@}ha-gxip|uimPVI~o_VnqQ-#0(ZkyLO zQ1u}%!FDmByOMurX+lJO+DtUT>$R4uNZSBLS?l40TUFJXR{Lqq_~f%OlFz-#i6?j; z6f#^%#)ry3pt+}h&;<2CWib)90;8M#=)WWM54i)N+m8>0Sk^Rr3>>ti`|YddP(f=t zb>7a{H?i5xLlup7Jz-%E?`FmkwoppP*k>}!3)JPlA!%k!N_~QFO5-LaSKfcIoWZx2 zF*8>54%=DDY2kw4Kl{4ZrB+YTJhs6t`fzm9edoSPJz zGVz`JwqxS+tg0kcF+D+fW^2znY0)irj;z5+=)ZBt1?HhMN5km}z9ad?UUq zE(pL?O1He%Zy{5f^eWhap*H6c^@X8To%))8RwJY z&Y!MBeqCWQ2#eHT9>dK$7(EtIZ17v^rZF6QTDjoJYl3%ut&%nrXjrY4FC4L>>?(C= z@@U6R1M05Q)>$hoR)ClonM}{EzRRpOsQ95F_sNG)CEc4vv;NeDGdpIFwWj(GvJ7W< zA)hp4sU-G>kAECqESecux2KwK=pVe*fbi;!BYW$ZA8${#v3nTbe%AideP$c`g(0o{ z$O$zXb@j{AT`NGzuI|hgGjfGMS<#d7hiS{wj0rV?*W8{kNt(ME|K9=W*k^8l-7~?T zsqva`Yw%^ATa~=2e}Aul84Eh+O*6L5oVD}Mt2I$etPvn6DyXdQ+LXGy4KDG%Wg+m3 z_45lcOO#mYFoKot+Mkd4-Vt2>4-P9w0Ah`3^N4L4#&tBnqZijYi`Y$PMU zkRQrSkXj5%ZXpBlX^}F)xvj#kP3jYeNWyx<;wYK!?DYfI?JcUtZ=4VSfLSHI?vhjc zqo10JNo*--x_pKXTYbnF%*}XHfS1GB-sAS9!yyckt0jw?cpH4rw)%=vRb6jvx|V3f z`q&foycBD<6R6J%j2UdO=puwp9@v5Z3?vh*eA9Ib?ODj)25xvQ3CSekUZ*hQ%o4DvWwdMGfv=>n6iJv#&@y!7x#3rPgUZQ9sg=1-9g2^qEQ134;#8csNb2{gkwuQWHv9v$O z{g!n+=sfz5H&z@zhf+yfF~8og@(68d@A=io0Ee)~8298HXM5%=MpcPgQyCtY^AP#B z0ksdtPj{HdB_-?SWfrTC(pipX-o2VHau>FqDm3{m(G0*3YP5dABl zUvMB{pFs=?{a<)lc@ck|llTfzl#;QpAIRx`6hBzE_)-cZvT^*yIit#T)mL(9QtFT) z;|CRwNmDm7H}j!Vh6_B6#Ag8Bz`QGBD0M)QL5(jV@fYr{#r@mJ^xtRX{CgLp6`->o zlr~Gc&Uc}fIFY$$7+S8{plL%Tz0g}qdqys(;3B6t_V(u*q5&t^zJ~E3>s}Gn3>S%} zO_%F1-E}+kV<*3#MMWaoppThm14@q-nvM2f8WdS!fWK8{>>{U34Ve%|Hyup@Lh+bz z?bGc*s-EX&m&7heg~BOp&)D%30Oh<1pk(x5n_1X8|MA4B*5H-lKL|#}Hwb7MCWfrF zpUMv&bpt=5Ule{)r9%o}yto@kwsD}iS`j?E-}2y~y`5zC2Vbeg(dJKj((X;~<30JN z?g-|O=dMN-XEtE|pd6nsE&E{0+NBHjzHMwqCen3UFdLR`^|NpnAt|yy~b-G-3Ej^aTUV|HQ>u4B74` zW^jF@9uUb_+Xozt+s;8^0}$*o88@Bt$^!GdGmG&EzHvj-n&>ER_kuSXj(EoK@aYD% zoGI=CE0i#XVS*2CH+|FnM_6xCr$(Bi^<<7p61hk>cRjPf#_cL+LGW}feFWcK>bK9p z>S??Ici6v%&wQ9(m!qKtFCEuZ2VFMU#z=G&VSP4?~@XX9UP+n1o!CU1zC6iLr%_k&HKoY z>$BXMv8y(F(y&E5RIIKBy@FYl|1VMY;ld$j`gP_~59DQ5zI#;koUe z|3l`*7j@UcOP-#|@;RarOZQo~7SlfvFFuC|6FkFQ;=fiW^mrIXA$FnNbvgiqtjomLm~q5D~{{eZs0_`U;zo-2~^y_@Z>>&=m0OJ XcD4z6TYZ9`aFl|q>cdiL(}4d43@ds- diff --git a/css/tildes-compact/img/screenshot-2.png b/css/tildes-compact/img/screenshot-2.png deleted file mode 100644 index 50f8d1b3d6c91843a7dcfb16c86e6b4e0c706c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21800 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

^3X|W_dRd+y(sl5U;akW4;X)v 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 diff --git a/css/tildes-compact/tildes-compact.css b/css/tildes-compact/tildes-compact.css deleted file mode 100644 index b1ba114..0000000 --- a/css/tildes-compact/tildes-compact.css +++ /dev/null @@ -1,36 +0,0 @@ -.topic-listing .topic-text-excerpt, -.post-listing .topic-text-excerpt { - display: none !important; -} -.topic-listing .topic-metadata, -.post-listing .topic-metadata { - display: inline-flex !important; - height: 1.3em !important; - max-width: 200px !important; - overflow: hidden !important; - white-space: nowrap !important; -} -.topic-listing .topic-tags li, -.post-listing .topic-tags li { - display: none !important; -} -.topic-listing .topic-tags:nth-child(-n+3), -.post-listing .topic-tags:nth-child(-n+3) { - display: inherit !important; -} -.topic-listing .topic-info, -.post-listing .topic-info { - width: 500px !important; -} -.topic-listing .user-label, -.post-listing .user-label { - display: none !important; -} - -.post-listing .btn-post, -.post-listing .comment-votes { - display: none !important; -} -.post-listing > li { - margin-bottom: unset !important; -} diff --git a/css/tildes-compact/tildes-compact.user.css b/css/tildes-compact/tildes-compact.user.css deleted file mode 100644 index 67bc8bf..0000000 --- a/css/tildes-compact/tildes-compact.user.css +++ /dev/null @@ -1,49 +0,0 @@ -/* ==UserStyle== -@name Tildes Compact -@namespace tildes.net -@version 1.0.9 -@author Bauke -@description Removes some elements and changes some sizes to make the Tildes.net layout a little more compact. -@homepageURL https://gitlab.com/Bauke/styles -@supportURL https://gitlab.com/Bauke/styles/issues -@updateURL https://gitlab.com/Bauke/styles/raw/master/css/tildes-compact/tildes-compact.user.css -@license MIT -==/UserStyle== */ -@-moz-document domain("tildes.net") { -.topic-listing .topic-text-excerpt, -.post-listing .topic-text-excerpt { - display: none !important; -} -.topic-listing .topic-metadata, -.post-listing .topic-metadata { - display: inline-flex !important; - height: 1.3em !important; - max-width: 200px !important; - overflow: hidden !important; - white-space: nowrap !important; -} -.topic-listing .topic-tags li, -.post-listing .topic-tags li { - display: none !important; -} -.topic-listing .topic-tags:nth-child(-n+3), -.post-listing .topic-tags:nth-child(-n+3) { - display: inherit !important; -} -.topic-listing .topic-info, -.post-listing .topic-info { - width: 500px !important; -} -.topic-listing .user-label, -.post-listing .user-label { - display: none !important; -} - -.post-listing .btn-post, -.post-listing .comment-votes { - display: none !important; -} -.post-listing > li { - margin-bottom: unset !important; -} -} diff --git a/package.json b/package.json index e71beba..03e1765 100755 --- a/package.json +++ b/package.json @@ -1,24 +1,26 @@ { - "name": "bauke-styles", - "version": "1.0.0", + "name": "userstyles", + "description": "A collection of all my userstyles for various websites.", + "version": "0.1.0", "author": "Bauke ", - "main": "build.js", + "homepage": "https://bauke.xyz/userstyles", + "repository": "https://git.holllo.cc/Bauke/userstyles", "license": "MIT", - "private": true, "scripts": { - "build": "yarn test && STYLE_ENV=prod node .", - "watch": "STYLE_ENV=dev nodemon . --watch source/ --ext scss", + "start": "nodemon 'source/index.js' --watch 'source/' --ext 'scss'", + "build": "USERSTYLE_ENV='production' node 'source/index.js'", "test": "xo && stylelint 'source/**/*.scss'" }, - "dependencies": {}, - "devDependencies": { - "fs-extra": "^8.1.0", - "nodemon": "^2.0.2", + "dependencies": { "sass": "^1.22.12", + "usercss-meta": "^0.9.0" + }, + "devDependencies": { + "husky": "^4.2.5", + "nodemon": "^2.0.2", "stylelint": "^13.2.0", "stylelint-config-xo-scss": "^0.12.0", "stylelint-config-xo-space": "^0.14.0", - "usercss-creator": "^1.2.0", "xo": "^0.27.2" }, "stylelint": { @@ -27,7 +29,7 @@ "stylelint-config-xo-space" ], "ignoreFiles": [ - "css/**/*.css" + "build/**/*.css" ], "rules": { "at-rule-no-unknown": null, @@ -37,6 +39,15 @@ }, "xo": { "prettier": true, + "rules": { + "no-await-in-loop": "off" + }, "space": true + }, + "husky": { + "hooks": { + "pre-commit": "yarn test", + "pre-push": "yarn test" + } } } diff --git a/source/index.js b/source/index.js new file mode 100644 index 0000000..1a659b2 --- /dev/null +++ b/source/index.js @@ -0,0 +1,32 @@ +const {promises: fsp} = require('fs'); +const {join} = require('path'); + +const {createUserstyle} = require('./utilities'); + +async function main() { + // Make sure the `build/` directory exists. + await fsp.mkdir(join(__dirname, '../build/'), {recursive: true}); + + // Create each userstyle and output them to `build/`. + for (const style of styles) { + await createUserstyle(style, 'build'); + } + + // Log how many and which userstyles were built. + const styleList = styles.map(style => `* ${style}`).join('\n'); + console.log(`Built ${styles.length} styles:\n${styleList}`); +} + +// Define the userstyles to build here. +const styles = ['tildes-baukula', 'tildes-compact']; + +// Export the `main()` function as `build()` for external use. +module.exports = { + build: main, + styles +}; + +// Run `main()` if this script was called directly (like `node source/index.js`). +if (require.main === module) { + main(); +} diff --git a/css/tildes-baukula/img/tildes-baukula-144x144.png b/source/tildes-baukula/images/tildes-baukula-logo.png similarity index 100% rename from css/tildes-baukula/img/tildes-baukula-144x144.png rename to source/tildes-baukula/images/tildes-baukula-logo.png diff --git a/source/tildes-baukula/metadata.json b/source/tildes-baukula/metadata.json new file mode 100644 index 0000000..dbfbcf5 --- /dev/null +++ b/source/tildes-baukula/metadata.json @@ -0,0 +1,11 @@ +{ + "name": "Tildes Baukula", + "namespace": "https://bauke.xyz/userstyles", + "version": "2.0.0", + "author": "Bauke ", + "description": "Adaptations to the official Tildes Dracula theme to make it look like my old custom Tildes Dracula theme.", + "homepageURL": "https://bauke.xyz/userstyles", + "updateURL": "https://bauke.xyz/userstyles/tildes-baukula.user.css", + "license": "MIT", + "domain": "tildes.net" +} diff --git a/source/tildes-baukula/package.json b/source/tildes-baukula/package.json deleted file mode 100644 index 076623b..0000000 --- a/source/tildes-baukula/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tildes-baukula", - "version": "1.0.8", - "usercss": { - "name": "Tildes Baukula", - "namespace": "tildes.net", - "version": "1.0.8", - "author": "Bauke", - "description": "Adaptations to make the official Dracula theme look like my old one.", - "homepageURL": "https://gitlab.com/Bauke/styles", - "supportURL": "https://gitlab.com/Bauke/styles/issues", - "updateURL": "https://gitlab.com/Bauke/styles/raw/master/css/tildes-baukula/tildes-baukula.user.css", - "license": "MIT" - } -} diff --git a/css/tildes-compact/img/tildes-compact-144x144.png b/source/tildes-compact/images/tildes-compact-logo.png similarity index 100% rename from css/tildes-compact/img/tildes-compact-144x144.png rename to source/tildes-compact/images/tildes-compact-logo.png diff --git a/source/tildes-compact/metadata.json b/source/tildes-compact/metadata.json new file mode 100644 index 0000000..a35fc5e --- /dev/null +++ b/source/tildes-compact/metadata.json @@ -0,0 +1,11 @@ +{ + "name": "Tildes Compact", + "namespace": "https://bauke.xyz/userstyles", + "version": "2.0.0", + "author": "Bauke ", + "description": "Removes elements and changes sizes to make Tildes more compact.", + "homepageURL": "https://bauke.xyz/userstyles", + "updateURL": "https://bauke.xyz/userstyles/tildes-compact.user.css", + "license": "MIT", + "domain": "tildes.net" +} diff --git a/source/tildes-compact/package.json b/source/tildes-compact/package.json deleted file mode 100644 index 4b0ed77..0000000 --- a/source/tildes-compact/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tildes-compact", - "version": "1.0.9", - "usercss": { - "name": "Tildes Compact", - "namespace": "tildes.net", - "version": "1.0.9", - "author": "Bauke", - "description": "Removes some elements and changes some sizes to make the Tildes.net layout a little more compact.", - "homepageURL": "https://gitlab.com/Bauke/styles", - "supportURL": "https://gitlab.com/Bauke/styles/issues", - "updateURL": "https://gitlab.com/Bauke/styles/raw/master/css/tildes-compact/tildes-compact.user.css", - "license": "MIT" - } -} diff --git a/source/utilities.js b/source/utilities.js new file mode 100644 index 0000000..d4f25c5 --- /dev/null +++ b/source/utilities.js @@ -0,0 +1,65 @@ +const {promises: fsp} = require('fs'); +const {join} = require('path'); +const sass = require('sass'); +const usercss = require('usercss-meta'); + +/** + * Creates the userstyle for a given style. + * @param {string} style The style's source directory. + * @param {string} dir The style's output directory. + */ +async function createUserstyle(style, dir) { + // Read the style's metadata. + const metadata = await readStyleMetadata(style); + + // Build the style's CSS. + const scss = sass.renderSync({ + file: join(__dirname, style, `${style}.scss`), + outputStyle: 'expanded' + }); + + // Insert the `@-moz-document domain()` into the CSS. + const domain = metadata.domain; + const css = `\n@-moz-document domain("${domain}") {\n${scss.css.toString()}\n}\n`; + + // Remove the domain from the metadata, as it's not needed in the usercss data. + delete metadata.domain; + + // Create the userstyle. + const userstyle = usercss.stringify(metadata, {alignKeys: true}) + css; + + // Create the destination path for the userstyle. + const destination = join(__dirname, '..', dir, `${style}.user.css`); + + // Write the userstyle to file. + return fsp.writeFile(destination, userstyle); +} + +/** + * Reads and parses the `metadata.json` file from a given style. + * @param {string} style The style's source directory. + */ +async function readStyleMetadata(style) { + return JSON.parse( + await fsp.readFile(join(__dirname, style, 'metadata.json'), 'utf8') + ); +} + +/** + * Returns whether the given style has an `images/` directory. + * @param {string} style The style's source directory. + */ +async function styleHasImages(style) { + try { + const styleStat = await fsp.stat(join(__dirname, style, 'images')); + return styleStat.isDirectory(); + } catch { + return false; + } +} + +module.exports = { + createUserstyle, + readStyleMetadata, + styleHasImages +}; diff --git a/yarn.lock b/yarn.lock index 9d1284f..3a7f423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -676,6 +676,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + character-entities-html4@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" @@ -821,6 +829,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -1678,6 +1691,13 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -2018,6 +2038,22 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#13eeb612424bb113d52172c28a13109c46fa85d7" integrity sha512-Z2EICWNJou7Tr9Bd2M2UqDJq3A9F2ePG9w3lIpjoyuSyXFP9QbniJVu3XQYytuw5ebmG7dXSXO9PgAjJG8DDKA== +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^4.2.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" + iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3171,6 +3207,11 @@ open@^6.2.0: dependencies: is-wsl "^1.1.0" +opencollective-postinstall@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -3398,6 +3439,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + plur@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b" @@ -3932,6 +3980,11 @@ sass@^1.22.12: dependencies: chokidar ">=2.0.0 <4.0.0" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -3946,6 +3999,11 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -4750,10 +4808,12 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -usercss-creator@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/usercss-creator/-/usercss-creator-1.2.0.tgz#3414a83d58982d3f209efa6d0460b98a0338c3d5" - integrity sha512-NBesQFpsTt2ROdCgn5Y0Vwc9xfnBQnZE3jHnaovua+ekCbv4ldjn8QenOd1u915AnQi2qRn0T9rEtlchiN6nwA== +usercss-meta@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/usercss-meta/-/usercss-meta-0.9.0.tgz#f37746ed706c541dc5593ceb96ff5404060493e1" + integrity sha512-S6AuhI11jc2xh6DIx3xR+4EU5/YiV0lLIvDhJgE5BTJTkcBEXrScJUIKVvzApGRou3lSLV0Qi4fVbSsN9BR6Ig== + dependencies: + semver-regex "^2.0.0" util-deprecate@^1.0.1: version "1.0.2" @@ -4803,6 +4863,11 @@ vfile@^3.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"