From b1b079f321043776cb180611123cdae1fabc3142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Tue, 25 Apr 2023 10:39:09 +0200 Subject: [PATCH] add url resize generator --- Makefile | 1 - .../__init__.py | 0 asset_server_resize/admin.py | 3 + asset_server_resize/apps.py | 6 + asset_server_resize/models.py | 3 + .../templates/asset_server_resize/index.html | 95 ++ asset_server_resize/tests.py | 3 + asset_server_resize/urls.py | 8 + asset_server_resize/views.py | 13 + .../templates/instagram_token/exchange.html | 2 +- .../templates/instagram_token/index.html | 2 +- mail_signature/migrations/__init__.py | 0 .../templates/mail_signature/index.html | 2 +- member_group_size_calc/migrations/__init__.py | 0 .../member_group_size_calc/index.html | 2 +- package-lock.json | 835 ++++++++++++++---- package.json | 4 +- requirements/base.txt | 1 - rybicka/settings/base.py | 1 + rybicka/urls.py | 1 + shared/static/shared/image.webp | Bin 0 -> 22906 bytes shared/templates/shared/base.html | 2 +- shared/templates/shared/index.html | 20 + static_src/asset_server_resize.js | 43 + webpack.config.js | 4 + 25 files changed, 857 insertions(+), 194 deletions(-) rename {instagram_token/migrations => asset_server_resize}/__init__.py (100%) create mode 100644 asset_server_resize/admin.py create mode 100644 asset_server_resize/apps.py create mode 100644 asset_server_resize/models.py create mode 100644 asset_server_resize/templates/asset_server_resize/index.html create mode 100644 asset_server_resize/tests.py create mode 100644 asset_server_resize/urls.py create mode 100644 asset_server_resize/views.py delete mode 100644 mail_signature/migrations/__init__.py delete mode 100644 member_group_size_calc/migrations/__init__.py create mode 100644 shared/static/shared/image.webp create mode 100644 static_src/asset_server_resize.js diff --git a/Makefile b/Makefile index 8a03c83..5de90eb 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,6 @@ venv: .venv/bin/python install: venv ${VENV}/bin/pip install -r requirements/base.txt -r requirements/production.txt - ${VENV}/bin/nodeenv --python-virtualenv --node=19.3.0 ${VENV}/bin/npm install diff --git a/instagram_token/migrations/__init__.py b/asset_server_resize/__init__.py similarity index 100% rename from instagram_token/migrations/__init__.py rename to asset_server_resize/__init__.py diff --git a/asset_server_resize/admin.py b/asset_server_resize/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/asset_server_resize/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/asset_server_resize/apps.py b/asset_server_resize/apps.py new file mode 100644 index 0000000..61081ab --- /dev/null +++ b/asset_server_resize/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AutoServerResizeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'asset_server_resize' diff --git a/asset_server_resize/models.py b/asset_server_resize/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/asset_server_resize/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/asset_server_resize/templates/asset_server_resize/index.html b/asset_server_resize/templates/asset_server_resize/index.html new file mode 100644 index 0000000..a59a44b --- /dev/null +++ b/asset_server_resize/templates/asset_server_resize/index.html @@ -0,0 +1,95 @@ +{% extends "shared/base.html" %} + +{% load render_bundle from webpack_loader %} + +{% block title %}Generátor škálovaných odkazů na obrázky v Asset Serveru{% endblock %} +{% block header_name %}Škálované obrázky{% endblock %} +{% block description %}Vyplněním získáš odkaz na zmenšený obrázek z asset serveru, který se dá použít pro embedování.{% endblock %} + +{% block head %} + <link + rel="stylesheet" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" + > + + {% render_bundle "asset_server_resize" %} +{% endblock %} + +{% block content %} + <main> + <h1 class="text-6xl font-bebas mb-5">Generátor škálovaných odkazů na obrázky v Asset Serveru</h1> + + <div class="grid grid-cols-2 gap-4"> + <div class="flex flex-col gap-2"> + <form class="flex flex-col gap-2 mb-4" id="asset-info-form"> + <input + id="path" + name="path" + type="text" + pattern="[^ :]+\.(jpg|jpeg|png|webp|gif)" + class="text-input form-field__control" + placeholder="Cesta k souboru" + required + > + <small class="prose text-sm"> + <p> + Například <code>/jihomoravsky/img/flags/gb.png</code>, pro soubor + <a href="https://mrak.pirati.cz/f/475789" target="_blank">zde na + Mraku</a>. Cestu najdeš nahoře, vynechej z ní <code>Assets</code>. + Na konec dodej název souboru, na který chceš odkázat. + </p> + </small> + + <input + id="height" + name="height" + type="number" + class="text-input form-field__control" + placeholder="Výška" + > + <input + id="width" + name="width" + type="number" + class="text-input form-field__control" + placeholder="Šírka" + > + + <small class="prose text-sm my-2"> + <p> + Stačí vyplnit pouze jeden rozměr. Obrázek se mu přizpůsobí. + </p> + </small> + + <div> + <button + type="submit" + class="btn btn--icon" + id="generate-url" + > + <div class="btn__body-wrap"> + <div class="btn__body">Vygenerovat</div> + <div class="btn__icon"> + <i class="ico--chevron-right"></i> + </div> + </div> + </button> + </div> + </form> + + <small class="prose text-sm"> + <p> + Další informace o Asset serveru najdeš na <a + href="https://wiki.pirati.cz/to/navody/asset-server" target="_blank"> + Wiki v návodu</a>. + </p> + </small> + </div> + <div id="result-wrapper" class="flex flex-col gap-2 hidden"> + <h3 class="head-alt-sm">Vygenerovaný odkaz</h3> + + <a href="" id="result"></a> + </div> + </div> + </main> +{% endblock %} diff --git a/asset_server_resize/tests.py b/asset_server_resize/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/asset_server_resize/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/asset_server_resize/urls.py b/asset_server_resize/urls.py new file mode 100644 index 0000000..574ce2d --- /dev/null +++ b/asset_server_resize/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + +app_name = "asset_server_resize" +urlpatterns = [ + path("", views.index, name="index"), +] diff --git a/asset_server_resize/views.py b/asset_server_resize/views.py new file mode 100644 index 0000000..c2f44dc --- /dev/null +++ b/asset_server_resize/views.py @@ -0,0 +1,13 @@ +from django.conf import settings +from django.shortcuts import render +from django_http_exceptions import HTTPExceptions + +# Create your views here. + + +def index(request): + return render( + request, + "asset_server_resize/index.html", + {} + ) diff --git a/instagram_token/templates/instagram_token/exchange.html b/instagram_token/templates/instagram_token/exchange.html index ba5d5ea..ae03e0d 100644 --- a/instagram_token/templates/instagram_token/exchange.html +++ b/instagram_token/templates/instagram_token/exchange.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% endblock %} diff --git a/instagram_token/templates/instagram_token/index.html b/instagram_token/templates/instagram_token/index.html index 8f658a0..1a84fb3 100644 --- a/instagram_token/templates/instagram_token/index.html +++ b/instagram_token/templates/instagram_token/index.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% endblock %} diff --git a/mail_signature/migrations/__init__.py b/mail_signature/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mail_signature/templates/mail_signature/index.html b/mail_signature/templates/mail_signature/index.html index 700f1ff..d2f5807 100644 --- a/mail_signature/templates/mail_signature/index.html +++ b/mail_signature/templates/mail_signature/index.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% render_bundle "mail_signature" %} diff --git a/member_group_size_calc/migrations/__init__.py b/member_group_size_calc/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/member_group_size_calc/templates/member_group_size_calc/index.html b/member_group_size_calc/templates/member_group_size_calc/index.html index 965dae6..dd050a7 100644 --- a/member_group_size_calc/templates/member_group_size_calc/index.html +++ b/member_group_size_calc/templates/member_group_size_calc/index.html @@ -9,7 +9,7 @@ {% block head %} <link rel="stylesheet" - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="https://styleguide.pirati.cz/2.12.x/css/styles.css" > {% render_bundle "member_group_size_calc" %} diff --git a/package-lock.json b/package-lock.json index 4c5d785..1ffe846 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,107 @@ "version": "0.0.1", "license": "AGPL-3.0-or-later", "dependencies": { - "@tailwindcss/typography": "^0.5.9", + "@tailwindcss/typography": "^0.4.1", "alertifyjs": "^1.13.1", "css-loader": "^6.7.3", "jquery": "^3.6.4", "js-cookie": "^3.0.1", "select2": "^4.1.0-rc.0", "style-loader": "^3.3.2", - "tailwindcss": "^3.3.1", + "tailwindcss": "^2.2.2", "webpack": "^5.77.0", "webpack-bundle-tracker": "^1.8.1", "webpack-cli": "^5.0.1" } }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -30,6 +118,17 @@ "node": ">=10.0.0" } }, + "node_modules/@fullhuman/postcss-purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.1.3.tgz", + "integrity": "sha512-jqcsyfvq09VOsMXxJMPLRF6Fhg/NNltzWKnC9qtzva+QKTxerCO4esG6je7hbnmkpZtaDyPTwMBj9bzfWorsrw==", + "dependencies": { + "purgecss": "^4.1.3" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -115,29 +214,17 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", - "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz", + "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" + "lodash.uniq": "^4.5.0" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "tailwindcss": ">=2.0.0" } }, "node_modules/@types/eslint": { @@ -173,6 +260,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -355,6 +447,35 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -391,10 +512,19 @@ "node": ">=8" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/anymatch": { "version": "3.1.3", @@ -413,6 +543,39 @@ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "peer": true, + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -447,9 +610,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -461,10 +624,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -478,6 +641,22 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -487,9 +666,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001445", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", - "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "funding": [ { "type": "opencollective", @@ -498,9 +677,39 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -559,11 +768,53 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -579,6 +830,21 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -617,6 +883,11 @@ "webpack": "^5.0.0" } }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -628,6 +899,30 @@ "node": ">=4" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -666,6 +961,14 @@ "node": ">=4" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -679,6 +982,14 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -801,6 +1112,32 @@ "node": ">=8" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "peer": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -825,14 +1162,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -883,6 +1220,17 @@ "node": ">=8" } }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -894,6 +1242,29 @@ "postcss": "^8.1.0" } }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -934,6 +1305,11 @@ "node": ">=10.13.0" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1020,14 +1396,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/jquery": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", @@ -1041,6 +1409,11 @@ "node": ">=12" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -1051,6 +1424,17 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1091,6 +1475,11 @@ "node": ">=8" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", @@ -1136,6 +1525,16 @@ "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", "integrity": "sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==" }, + "node_modules/lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1202,14 +1601,23 @@ "node": "*" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nanoid": { @@ -1228,6 +1636,14 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/node-releases": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", @@ -1241,18 +1657,19 @@ "node": ">=0.10.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "engines": { "node": ">= 6" } @@ -1298,6 +1715,34 @@ "node": ">=6" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1327,6 +1772,14 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1343,22 +1796,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -1393,38 +1830,20 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", "dependencies": { - "camelcase-css": "^2.0.1" + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" }, "engines": { - "node": "^12 || ^14 || >= 16" + "node": ">=10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" } }, "node_modules/postcss-load-config": { @@ -1511,21 +1930,21 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", + "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=12.0" + "node": ">=10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.2.14" + "postcss": "^8.1.13" } }, "node_modules/postcss-selector-parser": { @@ -1545,6 +1964,14 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/punycode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", @@ -1553,6 +1980,28 @@ "node": ">=6" } }, + "node_modules/purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", + "dependencies": { + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1591,14 +2040,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1621,6 +2062,20 @@ "node": ">= 10.13.0" } }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -1665,6 +2120,20 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -1780,6 +2249,19 @@ "node": ">=8" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1831,34 +2313,6 @@ "webpack": "^5.0.0" } }, - "node_modules/sucrase": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz", - "integrity": "sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==", - "dependencies": { - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -1885,34 +2339,41 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", - "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "didyoumean": "^1.2.2", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.2.tgz", + "integrity": "sha512-OzFWhlnfrO3JXZKHQiqZcb0Wwl3oJSmQ7PvT2jdIgCjV5iUoAyql9bb9ZLCSBI5TYXmawujXAoNxXVfP5Auy/Q==", + "dependencies": { + "@fullhuman/postcss-purgecss": "^4.0.3", + "arg": "^5.0.0", + "bytes": "^3.0.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "color": "^3.1.3", + "cosmiconfig": "^7.0.0", + "detective": "^5.2.0", + "didyoumean": "^1.2.1", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.17.2", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", + "fast-glob": "^3.2.5", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.0", + "html-tags": "^3.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.8.1", "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.0.9", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.0.1", + "postcss-nested": "5.0.5", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", "quick-lru": "^5.1.1", - "resolve": "^1.22.1", - "sucrase": "^3.29.0" + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" }, "bin": { "tailwind": "lib/cli.js", @@ -1922,6 +2383,7 @@ "node": ">=12.13.0" }, "peerDependencies": { + "autoprefixer": "^10.0.2", "postcss": "^8.0.9" } }, @@ -1994,23 +2456,15 @@ "node": ">=0.4.0" } }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=8.17.0" } }, "node_modules/to-regex-range": { @@ -2024,10 +2478,13 @@ "node": ">=8.0" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } }, "node_modules/update-browserslist-db": { "version": "1.0.10", @@ -2254,6 +2711,14 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 9ccce29..a372dd6 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "description": "", "private": true, "dependencies": { - "@tailwindcss/typography": "^0.5.9", + "@tailwindcss/typography": "^0.4.1", "alertifyjs": "^1.13.1", "css-loader": "^6.7.3", "jquery": "^3.6.4", "js-cookie": "^3.0.1", "select2": "^4.1.0-rc.0", "style-loader": "^3.3.2", - "tailwindcss": "^3.3.1", + "tailwindcss": "^2.2.2", "webpack": "^5.77.0", "webpack-bundle-tracker": "^1.8.1", "webpack-cli": "^5.0.1" diff --git a/requirements/base.txt b/requirements/base.txt index fe6b002..287bf10 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -4,6 +4,5 @@ django-environ==0.9.0 django-webpack-loader==1.8.0 django-http-exceptions==1.4.0 gql[requests]==3.4.0 -nodeenv==1.7.0 psycopg2-binary==2.9.5 requests==2.28.2 diff --git a/rybicka/settings/base.py b/rybicka/settings/base.py index f27cfaf..ba1cefd 100644 --- a/rybicka/settings/base.py +++ b/rybicka/settings/base.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ "rv_voting_calc", "mail_signature", "instagram_token", + "asset_server_resize", ] MIDDLEWARE = [ diff --git a/rybicka/urls.py b/rybicka/urls.py index 85428a7..55d8d71 100644 --- a/rybicka/urls.py +++ b/rybicka/urls.py @@ -20,5 +20,6 @@ urlpatterns = [ path("hlasovani-rv/", include("rv_voting_calc.urls")), path("emailove-podpisy/", include("mail_signature.urls")), path("instagram/", include("instagram_token.urls")), + path("asset-server/", include("asset_server_resize.urls")), path("", include("shared.urls")), ] diff --git a/shared/static/shared/image.webp b/shared/static/shared/image.webp new file mode 100644 index 0000000000000000000000000000000000000000..62a9c7433a220288ee6fd07caaada27693e49e87 GIT binary patch literal 22906 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 ABme*a literal 0 HcmV?d00001 diff --git a/shared/templates/shared/base.html b/shared/templates/shared/base.html index 5026bba..47bb0c8 100644 --- a/shared/templates/shared/base.html +++ b/shared/templates/shared/base.html @@ -64,7 +64,7 @@ </ui-navbar> </ui-app> </nav> - <div class="container container--default py-8 lg:py-24 {% if page.root_page.narrow_layout %}max-w-screen-lg{% endif%}"> + <div class="container container--default py-8 lg:py-24"> {% block content %}{% endblock %} </div> <footer class="footer bg-grey-700 text-white __js-root hidden lg:block"> diff --git a/shared/templates/shared/index.html b/shared/templates/shared/index.html index 2a62c24..721aebe 100644 --- a/shared/templates/shared/index.html +++ b/shared/templates/shared/index.html @@ -97,6 +97,26 @@ </div> </div> </li> + + <li class="card"> + <a href="{% url "asset_server_resize:index" %}"> + <img + src="{% static "shared/calculator.webp" %}" + alt="Kalkulačka velikosti skupiny členů" + class="w-full h-48 object-cover" + > + </a> + <div class="p-4"> + <h2 class="mb-2 text-xl font-bold"> + <a href="{% url "asset_server_resize:index" %}"> + Generátor škálovaných odkazů na obrázky v Asset Serveru + </a> + </h2> + <div class="font-light text-sm break-words"> + Vyplněním získáš odkaz na zmenšený obrázek z asset serveru, který se dá použít pro embedování. + </div> + </div> + </li> </ul> </section> diff --git a/static_src/asset_server_resize.js b/static_src/asset_server_resize.js new file mode 100644 index 0000000..275bb40 --- /dev/null +++ b/static_src/asset_server_resize.js @@ -0,0 +1,43 @@ +import $ from "jquery"; + +$(window).ready( + () => { + $("#generate-url").on( + "click", + event => { + event.preventDefault(); + + const form = $("#asset-info-form")[0]; + + if (!form.checkValidity()) { + form.reportValidity(); + return; + } + + let width = $("#width").val(); + let height = $("#height").val(); + + if (width === "" && height === "") { + alert("Prosím, vyplň aspoň jeden rozměr."); + return; + } + + let path = $("#path").val(); + + if (!path.startsWith("/")) { + path = `/${path}`; + } + + if (width === "") { width = "-" } + if (height === "") { height = "-" } + + const url = `https://a.pirati.cz/resize/${width}x${height}${path}`; + + $("#result").attr("href", url); + $("#result").html(url); + + $("#result-wrapper").removeClass("hidden"); + } + ); + } +) diff --git a/webpack.config.js b/webpack.config.js index c67bb03..64386cc 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,6 +21,10 @@ module.exports = { import: path.resolve("static_src", "mail_signature.js"), dependOn: "shared", }, + asset_server_resize: { + import: path.resolve("static_src", "asset_server_resize.js"), + dependOn: "shared", + }, shared: ["jquery"], }, output: { -- GitLab