From d1fc7886e3a0a6ac15a708c03eb00661dbe29597 Mon Sep 17 00:00:00 2001 From: Preciel Date: Tue, 15 Jul 2025 01:15:37 +0200 Subject: [PATCH] Initial commit --- .env | 44 + .gitignore | 26 + assets/app.js | 2889 ++++++ assets/css/_vars.scss | 27 + assets/css/font.scss | 31 + assets/css/layout.scss | 53 + assets/css/normalize.scss | 198 + assets/css/style.scss | 2455 +++++ assets/font/ptsans-bold.woff | Bin 0 -> 31300 bytes assets/font/ptsans-bold.woff2 | Bin 0 -> 24256 bytes assets/font/ptsans-bolditalic.woff | Bin 0 -> 33256 bytes assets/font/ptsans-bolditalic.woff2 | Bin 0 -> 26068 bytes assets/font/ptsans-italic.woff | Bin 0 -> 33332 bytes assets/font/ptsans-italic.woff2 | Bin 0 -> 26180 bytes assets/font/ptsans-regular.woff | Bin 0 -> 30724 bytes assets/font/ptsans-regular.woff2 | Bin 0 -> 23960 bytes assets/img/background.jpg | Bin 0 -> 125263 bytes assets/js/Classes/Store.js | 98 + assets/js/Classes/Worldmap.js | 338 + assets/js/idb_stores.js | 15 + assets/js/statics.js | 1 + assets/js/stores.js | 35 + bin/console | 17 + composer.json | 107 + composer.lock | 8809 +++++++++++++++++ config/bundles.php | 16 + config/packages/cache.yaml | 19 + config/packages/debug.yaml | 5 + config/packages/doctrine.yaml | 47 + config/packages/doctrine_migrations.yaml | 6 + config/packages/framework.yaml | 24 + config/packages/mailer.yaml | 3 + config/packages/messenger.yaml | 25 + config/packages/monolog.yaml | 61 + config/packages/notifier.yaml | 16 + config/packages/routing.yaml | 12 + config/packages/security.yaml | 63 + config/packages/sensio_framework_extra.yaml | 3 + config/packages/translation.yaml | 13 + config/packages/twig.yaml | 39 + config/packages/validator.yaml | 13 + config/packages/web_profiler.yaml | 15 + config/packages/webpack_encore.yaml | 49 + config/preload.php | 5 + config/routes.yaml | 11 + config/routes/annotations.yaml | 7 + config/routes/framework.yaml | 4 + config/routes/web_profiler.yaml | 8 + config/services.yaml | 68 + migrations/.gitignore | 0 package.json | 21 + public/favicon.ico | Bin 0 -> 15406 bytes public/index.php | 9 + public/og.jpg | Bin 0 -> 380382 bytes public/robots.txt | 4 + public/sitemap.xml | 58 + src/Controller/.gitignore | 0 src/Controller/DefaultController.php | 19 + src/Controller/GridController.php | 128 + src/Controller/ItemCategoryController.php | 88 + src/Controller/ItemController.php | 239 + src/Controller/MapController.php | 198 + src/Controller/MonsterCategoryController.php | 85 + src/Controller/MonsterController.php | 214 + src/Controller/NodeController.php | 426 + src/Controller/RegionController.php | 179 + src/Controller/SecurityController.php | 71 + .../WorldmarkCategoryController.php | 81 + src/Controller/WorldmarkController.php | 240 + src/Doctrine/DBAL/Types/TinyintType.php | 67 + src/Entity/.gitignore | 0 src/Entity/Grid.php | 58 + src/Entity/Item.php | 106 + src/Entity/ItemCategory.php | 65 + src/Entity/Map.php | 89 + src/Entity/Monster.php | 105 + src/Entity/MonsterCategory.php | 52 + src/Entity/Node.php | 230 + src/Entity/Region.php | 234 + src/Entity/User.php | 138 + src/Entity/Worldmark.php | 217 + src/Entity/WorldmarkCategory.php | 65 + src/EventListener/KernelListener.php | 79 + src/Extension/PhpExtension.php | 49 + src/Extension/TwigExtension.php | 105 + src/Form/GridType.php | 37 + src/Form/ItemCategoryType.php | 33 + src/Form/ItemType.php | 56 + src/Form/MapFragmentType.php | 51 + src/Form/MapType.php | 33 + src/Form/MonsterCategoryType.php | 30 + src/Form/MonsterType.php | 58 + src/Form/NodeType.php | 126 + src/Form/RegionType.php | 107 + src/Form/SecurityType.php | 48 + src/Form/WorldmarkCategoryType.php | 33 + src/Form/WorldmarkType.php | 103 + src/Kernel.php | 17 + src/Repository/.gitignore | 0 src/Repository/GridRepository.php | 116 + src/Repository/ItemCategoryRepository.php | 35 + src/Repository/ItemRepository.php | 36 + src/Repository/MapRepository.php | 57 + src/Repository/MonsterCategoryRepository.php | 35 + src/Repository/MonsterRepository.php | 36 + src/Repository/NodeRepository.php | 77 + src/Repository/RegionRepository.php | 49 + src/Repository/UserRepository.php | 52 + .../WorldmarkCategoryRepository.php | 35 + src/Repository/WorldmarkRepository.php | 68 + src/Security/Authenticator.php | 58 + src/Service/FileManager.php | 401 + symfony.lock | 536 + templates/_dashboard/_menu.html.twig | 64 + templates/_dashboard/base.html.twig | 11 + .../_dashboard/grid/._delete_form.html.twig | 5 + templates/_dashboard/grid/.new.html.twig | 9 + templates/_dashboard/grid/.show.html.twig | 28 + templates/_dashboard/grid/_form.html.twig | 28 + templates/_dashboard/grid/edit.html.twig | 11 + templates/_dashboard/grid/index.html.twig | 46 + templates/_dashboard/grid/index.html.twig.bak | 50 + .../_dashboard/item/_delete_form.html.twig | 4 + templates/_dashboard/item/_form.html.twig | 40 + templates/_dashboard/item/edit.html.twig | 11 + templates/_dashboard/item/index.html.twig | 46 + templates/_dashboard/item/new.html.twig | 7 + .../item_category/_delete_form.html.twig | 4 + .../_dashboard/item_category/_form.html.twig | 22 + .../_dashboard/item_category/edit.html.twig | 9 + .../_dashboard/item_category/index.html.twig | 42 + .../_dashboard/item_category/new.html.twig | 7 + .../_dashboard/map/._delete_form.html.twig | 4 + templates/_dashboard/map/.edit.html.twig | 11 + templates/_dashboard/map/.index.html.twig | 37 + templates/_dashboard/map/.new.html.twig | 9 + templates/_dashboard/map/.show.html.twig | 32 + templates/_dashboard/map/_form.html.twig | 10 + .../_dashboard/monster/_delete_form.html.twig | 4 + templates/_dashboard/monster/_form.html.twig | 40 + templates/_dashboard/monster/edit.html.twig | 11 + templates/_dashboard/monster/index.html.twig | 46 + templates/_dashboard/monster/new.html.twig | 7 + .../monster_category/_delete_form.html.twig | 4 + .../monster_category/_form.html.twig | 18 + .../monster_category/edit.html.twig | 9 + .../monster_category/index.html.twig | 40 + .../_dashboard/monster_category/new.html.twig | 7 + .../_dashboard/node/_delete_form.html.twig | 15 + templates/_dashboard/node/_form.html.twig | 114 + templates/_dashboard/node/edit.html.twig | 11 + templates/_dashboard/node/index.html.twig | 46 + templates/_dashboard/node/new.html.twig | 9 + templates/_dashboard/node/show.html.twig | 48 + .../_dashboard/region/_delete_form.html.twig | 4 + templates/_dashboard/region/_form.html.twig | 108 + templates/_dashboard/region/edit.html.twig | 7 + templates/_dashboard/region/index.html.twig | 69 + templates/_dashboard/region/new.html.twig | 5 + .../worldmark/_delete_form.html.twig | 4 + .../_dashboard/worldmark/_form.html.twig | 82 + templates/_dashboard/worldmark/edit.html.twig | 7 + .../_dashboard/worldmark/index.html.twig | 46 + templates/_dashboard/worldmark/new.html.twig | 5 + .../worldmark_category/_delete_form.html.twig | 4 + .../worldmark_category/_form.html.twig | 22 + .../worldmark_category/edit.html.twig | 7 + .../worldmark_category/index.html.twig | 42 + .../worldmark_category/new.html.twig | 5 + templates/_menu.html.twig | 75 + templates/base.html.twig | 136 + templates/security/login.html.twig | 37 + templates/security/register.html.twig | 20 + templates/woldmap/_leftPannel.html.twig | 130 + templates/woldmap/_node.html.twig | 31 + templates/woldmap/show.html.twig | 115 + templates/woldmap/show.html.twig.bak | 109 + translations/.gitignore | 0 webpack.config.js | 86 + yarn.lock | 7224 ++++++++++++++ 180 files changed, 31073 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 assets/app.js create mode 100644 assets/css/_vars.scss create mode 100644 assets/css/font.scss create mode 100644 assets/css/layout.scss create mode 100644 assets/css/normalize.scss create mode 100644 assets/css/style.scss create mode 100644 assets/font/ptsans-bold.woff create mode 100644 assets/font/ptsans-bold.woff2 create mode 100644 assets/font/ptsans-bolditalic.woff create mode 100644 assets/font/ptsans-bolditalic.woff2 create mode 100644 assets/font/ptsans-italic.woff create mode 100644 assets/font/ptsans-italic.woff2 create mode 100644 assets/font/ptsans-regular.woff create mode 100644 assets/font/ptsans-regular.woff2 create mode 100644 assets/img/background.jpg create mode 100644 assets/js/Classes/Store.js create mode 100644 assets/js/Classes/Worldmap.js create mode 100644 assets/js/idb_stores.js create mode 100644 assets/js/statics.js create mode 100644 assets/js/stores.js create mode 100755 bin/console create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/bundles.php create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/debug.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/mailer.yaml create mode 100644 config/packages/messenger.yaml create mode 100644 config/packages/monolog.yaml create mode 100644 config/packages/notifier.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/security.yaml create mode 100644 config/packages/sensio_framework_extra.yaml create mode 100644 config/packages/translation.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/packages/web_profiler.yaml create mode 100644 config/packages/webpack_encore.yaml create mode 100644 config/preload.php create mode 100644 config/routes.yaml create mode 100644 config/routes/annotations.yaml create mode 100644 config/routes/framework.yaml create mode 100644 config/routes/web_profiler.yaml create mode 100644 config/services.yaml create mode 100644 migrations/.gitignore create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/og.jpg create mode 100644 public/robots.txt create mode 100644 public/sitemap.xml create mode 100644 src/Controller/.gitignore create mode 100644 src/Controller/DefaultController.php create mode 100644 src/Controller/GridController.php create mode 100644 src/Controller/ItemCategoryController.php create mode 100644 src/Controller/ItemController.php create mode 100644 src/Controller/MapController.php create mode 100644 src/Controller/MonsterCategoryController.php create mode 100644 src/Controller/MonsterController.php create mode 100644 src/Controller/NodeController.php create mode 100644 src/Controller/RegionController.php create mode 100644 src/Controller/SecurityController.php create mode 100644 src/Controller/WorldmarkCategoryController.php create mode 100644 src/Controller/WorldmarkController.php create mode 100644 src/Doctrine/DBAL/Types/TinyintType.php create mode 100644 src/Entity/.gitignore create mode 100644 src/Entity/Grid.php create mode 100644 src/Entity/Item.php create mode 100644 src/Entity/ItemCategory.php create mode 100644 src/Entity/Map.php create mode 100644 src/Entity/Monster.php create mode 100644 src/Entity/MonsterCategory.php create mode 100644 src/Entity/Node.php create mode 100644 src/Entity/Region.php create mode 100644 src/Entity/User.php create mode 100644 src/Entity/Worldmark.php create mode 100644 src/Entity/WorldmarkCategory.php create mode 100644 src/EventListener/KernelListener.php create mode 100644 src/Extension/PhpExtension.php create mode 100644 src/Extension/TwigExtension.php create mode 100644 src/Form/GridType.php create mode 100644 src/Form/ItemCategoryType.php create mode 100644 src/Form/ItemType.php create mode 100644 src/Form/MapFragmentType.php create mode 100644 src/Form/MapType.php create mode 100644 src/Form/MonsterCategoryType.php create mode 100644 src/Form/MonsterType.php create mode 100644 src/Form/NodeType.php create mode 100644 src/Form/RegionType.php create mode 100644 src/Form/SecurityType.php create mode 100644 src/Form/WorldmarkCategoryType.php create mode 100644 src/Form/WorldmarkType.php create mode 100644 src/Kernel.php create mode 100644 src/Repository/.gitignore create mode 100644 src/Repository/GridRepository.php create mode 100644 src/Repository/ItemCategoryRepository.php create mode 100644 src/Repository/ItemRepository.php create mode 100644 src/Repository/MapRepository.php create mode 100644 src/Repository/MonsterCategoryRepository.php create mode 100644 src/Repository/MonsterRepository.php create mode 100644 src/Repository/NodeRepository.php create mode 100644 src/Repository/RegionRepository.php create mode 100644 src/Repository/UserRepository.php create mode 100644 src/Repository/WorldmarkCategoryRepository.php create mode 100644 src/Repository/WorldmarkRepository.php create mode 100644 src/Security/Authenticator.php create mode 100644 src/Service/FileManager.php create mode 100644 symfony.lock create mode 100644 templates/_dashboard/_menu.html.twig create mode 100644 templates/_dashboard/base.html.twig create mode 100644 templates/_dashboard/grid/._delete_form.html.twig create mode 100644 templates/_dashboard/grid/.new.html.twig create mode 100644 templates/_dashboard/grid/.show.html.twig create mode 100644 templates/_dashboard/grid/_form.html.twig create mode 100644 templates/_dashboard/grid/edit.html.twig create mode 100644 templates/_dashboard/grid/index.html.twig create mode 100644 templates/_dashboard/grid/index.html.twig.bak create mode 100644 templates/_dashboard/item/_delete_form.html.twig create mode 100644 templates/_dashboard/item/_form.html.twig create mode 100644 templates/_dashboard/item/edit.html.twig create mode 100644 templates/_dashboard/item/index.html.twig create mode 100644 templates/_dashboard/item/new.html.twig create mode 100644 templates/_dashboard/item_category/_delete_form.html.twig create mode 100644 templates/_dashboard/item_category/_form.html.twig create mode 100644 templates/_dashboard/item_category/edit.html.twig create mode 100644 templates/_dashboard/item_category/index.html.twig create mode 100644 templates/_dashboard/item_category/new.html.twig create mode 100644 templates/_dashboard/map/._delete_form.html.twig create mode 100644 templates/_dashboard/map/.edit.html.twig create mode 100644 templates/_dashboard/map/.index.html.twig create mode 100644 templates/_dashboard/map/.new.html.twig create mode 100644 templates/_dashboard/map/.show.html.twig create mode 100644 templates/_dashboard/map/_form.html.twig create mode 100644 templates/_dashboard/monster/_delete_form.html.twig create mode 100644 templates/_dashboard/monster/_form.html.twig create mode 100644 templates/_dashboard/monster/edit.html.twig create mode 100644 templates/_dashboard/monster/index.html.twig create mode 100644 templates/_dashboard/monster/new.html.twig create mode 100644 templates/_dashboard/monster_category/_delete_form.html.twig create mode 100644 templates/_dashboard/monster_category/_form.html.twig create mode 100644 templates/_dashboard/monster_category/edit.html.twig create mode 100644 templates/_dashboard/monster_category/index.html.twig create mode 100644 templates/_dashboard/monster_category/new.html.twig create mode 100644 templates/_dashboard/node/_delete_form.html.twig create mode 100644 templates/_dashboard/node/_form.html.twig create mode 100644 templates/_dashboard/node/edit.html.twig create mode 100644 templates/_dashboard/node/index.html.twig create mode 100644 templates/_dashboard/node/new.html.twig create mode 100644 templates/_dashboard/node/show.html.twig create mode 100644 templates/_dashboard/region/_delete_form.html.twig create mode 100644 templates/_dashboard/region/_form.html.twig create mode 100644 templates/_dashboard/region/edit.html.twig create mode 100644 templates/_dashboard/region/index.html.twig create mode 100644 templates/_dashboard/region/new.html.twig create mode 100644 templates/_dashboard/worldmark/_delete_form.html.twig create mode 100644 templates/_dashboard/worldmark/_form.html.twig create mode 100644 templates/_dashboard/worldmark/edit.html.twig create mode 100644 templates/_dashboard/worldmark/index.html.twig create mode 100644 templates/_dashboard/worldmark/new.html.twig create mode 100644 templates/_dashboard/worldmark_category/_delete_form.html.twig create mode 100644 templates/_dashboard/worldmark_category/_form.html.twig create mode 100644 templates/_dashboard/worldmark_category/edit.html.twig create mode 100644 templates/_dashboard/worldmark_category/index.html.twig create mode 100644 templates/_dashboard/worldmark_category/new.html.twig create mode 100644 templates/_menu.html.twig create mode 100644 templates/base.html.twig create mode 100644 templates/security/login.html.twig create mode 100644 templates/security/register.html.twig create mode 100644 templates/woldmap/_leftPannel.html.twig create mode 100644 templates/woldmap/_node.html.twig create mode 100644 templates/woldmap/show.html.twig create mode 100644 templates/woldmap/show.html.twig.bak create mode 100644 translations/.gitignore create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.env b/.env new file mode 100644 index 0000000..c526735 --- /dev/null +++ b/.env @@ -0,0 +1,44 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=ce3b81f5b4b6962c557368024460b4f2 +###< symfony/framework-bundle ### + +###> symfony/webapp-meta ### +MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 +###< symfony/webapp-meta ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +# +# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" +# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7&charset=utf8mb4" +# DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8" +DATABASE_URL="mysql://username:password@127.0.0.1:3306/database?serverVersion=8.0&charset=utf8mb4" +###< doctrine/doctrine-bundle ### + +###> symfony/messenger ### +# Choose one of the transports below +# MESSENGER_TRANSPORT_DSN=doctrine://default +# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages +# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages +###< symfony/messenger ### + +###> symfony/mailer ### +# MAILER_DSN=smtp://localhost +###< symfony/mailer ### diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b096c46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### + +/_sql/ +/.yarn/ +/assets/static/ +/public/.well-known/ +/public/android/ +/public/upload/ +/public/yandex_678f0b750d297325.html +/public/BingSiteAuth.xml diff --git a/assets/app.js b/assets/app.js new file mode 100644 index 0000000..65c87a7 --- /dev/null +++ b/assets/app.js @@ -0,0 +1,2889 @@ +// noinspection JSUnresolvedFunction +const imagesContext = require.context("./static", true, /\.(png|jpg|jpeg|gif|ico|svg|webp)$/); +imagesContext.keys().forEach(imagesContext); + +/* --- CSS --- */ +require("./css/font.scss"); +require("./css/normalize.scss"); +require("./css/layout.scss"); +require("./css/style.scss"); + +/* --- IMPORTS ---*/ +// start the Stimulus application +// import './bootstrap'; +import {STATIC_ENV} from "./js/statics"; +import {IDB_stores} from "./js/idb_stores"; +import {Profile, Region, Filter, Node} from "./js/Classes/Worldmap" + +/* --- VARS --- */ +const CLASS_formXml = "sp_form__xhr"; +const CLASS_formOnClick = "sp_form__onclick" +const CLASS_formOnChange = "sp_form__onchange" + +const CLASS_inputTypePassword = "sp_input__password"; +// const CLASS_inputTypeCheckbox = "sp_radio__type-checkbox"; +// const CLASS_inputTypeRadio = "sp_radio__type-radio"; + +const CLASS_radioContainer = "sp_radio__container"; +const CLASS_radioInputWrapper = "sp_radio__input-wrapper"; +const CLASS_radioChecked = "sp_radio__checked"; + + + let IDB_database = null; +const IDB_databaseName = "genshin-world"; +const IDB_databaseVersion = 7; + let IDB_hadMigration = false; + +const EVENT_submit = new Event("submit", { + bubbles: true, + cancelable: true +}); +const EVENT_change = new Event("change", { + bubbles: true, + cancelable: true +}); +const EVENT_click = new Event("click", { + bubbles: true, + cancelable: true +}); +const EVENT_keyup = new Event("keyup", { + bubbles: true, + cancelable: true +}); + +let GLOBAL_isTouchDevice; +let GLOBAL_pinchDistance = 0; + + let HANDLE_preventClickTimeout = null; + let GLOBAL_isMouseDown = false; +const GLOBAL_mouseDownCoordinate = {x: 0, y: 0} + let GLOBAL_preventClick = false; + +const GLOBAL_nodeBackup = { + grid: null, + node: null +}; + + /** @type {Profile|null} */ + let GLOBAL_worldmapProfile = null + /** @type {Region|null} */ + let GLOBAL_region = null; + let GLOBAL_worldmapMaxZoomLevel=28; + let GLOBAL_worldmapFilter_isInitialized = false; + + +// +function log() { + if(STATIC_ENV === "dev") { + for(const argument of arguments) { + console.log(argument); + } + } +} + +/** + * @return {Promise} + */ +function dom_isLoaded() { + return new Promise(async function(domLoaded) { + const imgList = /** @type {HTMLImageElement[]} */document.querySelectorAll("img[data-src]"); + const imgToLoad = imgList.length; + let imgLoaded = 0; + + if(imgList.length === 0) { + domLoaded(true); + } else { + for(const _htmlImageElement of imgList) { + const origin = _htmlImageElement.src; + + new Promise(function(isImgLoaded) { + _htmlImageElement.onload = function() { + imgLoaded++ + isImgLoaded(true); + + if(imgLoaded === imgToLoad) { + domLoaded(true); + } + }; + _htmlImageElement.onerror = function() { + _htmlImageElement.src = origin; + + imgLoaded++ + isImgLoaded(false); + + if(imgLoaded === imgToLoad) { + domLoaded(true); + } + }; + + _htmlImageElement.src = _htmlImageElement.dataset.src; + _htmlImageElement.removeAttribute("data-src"); + }); + } + } + }); +} + +/** + * @param {HTMLElement} htmlElement + */ +function getOffsetFromParent(htmlElement) { + const computerStyle = window.getComputedStyle(htmlElement); + const cssMatrix = new WebKitCSSMatrix(computerStyle.transform); + + return { + x: htmlElement.offsetLeft + cssMatrix.m41, + y: htmlElement.offsetTop + cssMatrix.m42 + }; +} + +/** + * @param {HTMLElement} htmlElement + * @param {HTMLElement|null} parentElement + * @return {{x: number, y: number}} + */ +function getOffsetFrom(htmlElement, parentElement = null) { + const htmlElementOffset = { + x: 0, + y: 0 + }; + + do { + const elementOffset = getOffsetFromParent(htmlElement); + + htmlElementOffset.x += elementOffset.x; + htmlElementOffset.y += elementOffset.y; + + htmlElement = htmlElement.parentElement; + } while(parentElement ? htmlElement !== parentElement : htmlElement); + + return htmlElementOffset; +} + +/** + * @param {HTMLElement} htmlElement + */ +function getOffsetFromDocument(htmlElement) { + return getOffsetFrom(htmlElement); +} + +/** + * @param {string} str + * @return {DocumentFragment} + */ +function strToHtml(str) { + return document.createRange().createContextualFragment(str); +} + +function isJson(str) { + try { + JSON.parse(str); + } catch(e) { + return false; + } + + return true; +} + +function removeDiacritics(str) { + const defaultDiacriticsRemovalMap = [ + { + "base": "A", + "letters": /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g + }, + { + "base": "AA", + "letters": /[\uA732]/g + }, + { + "base": "AE", + "letters": /[\u00C6\u01FC\u01E2]/g + }, + { + "base": "AO", + "letters": /[\uA734]/g + }, + { + "base": "AU", + "letters": /[\uA736]/g + }, + { + "base": "AV", + "letters": /[\uA738\uA73A]/g + }, + { + "base": "AY", + "letters": /[\uA73C]/g + }, + { + "base": "B", + "letters": /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g + }, + { + "base": "C", + "letters": /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g + }, + { + "base": "D", + "letters": /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g + }, + { + "base": "DZ", + "letters": /[\u01F1\u01C4]/g + }, + { + "base": "Dz", + "letters": /[\u01F2\u01C5]/g + }, + { + "base": "E", + "letters": /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g + }, + { + "base": "F", + "letters": /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g + }, + { + "base": "G", + "letters": /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g + }, + { + "base": "H", + "letters": /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g + }, + { + "base": "I", + "letters": /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g + }, + { + "base": "J", + "letters": /[\u004A\u24BF\uFF2A\u0134\u0248]/g + }, + { + "base": "K", + "letters": /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g + }, + { + "base": "L", + "letters": /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g + }, + { + "base": "LJ", + "letters": /[\u01C7]/g + }, + { + "base": "Lj", + "letters": /[\u01C8]/g + }, + { + "base": "M", + "letters": /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g + }, + { + "base": "N", + "letters": /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g + }, + { + "base": "NJ", + "letters": /[\u01CA]/g + }, + { + "base": "Nj", + "letters": /[\u01CB]/g + }, + { + "base": "O", + "letters": /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g + }, + { + "base": "OI", + "letters": /[\u01A2]/g + }, + { + "base": "OO", + "letters": /[\uA74E]/g + }, + { + "base": "OU", + "letters": /[\u0222]/g + }, + { + "base": "P", + "letters": /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g + }, + { + "base": "Q", + "letters": /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g + }, + { + "base": "R", + "letters": /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g + }, + { + "base": "S", + "letters": /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g + }, + { + "base": "T", + "letters": /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g + }, + { + "base": "TZ", + "letters": /[\uA728]/g + }, + { + "base": "U", + "letters": /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g + }, + { + "base": "V", + "letters": /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g + }, + { + "base": "VY", + "letters": /[\uA760]/g + }, + { + "base": "W", + "letters": /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g + }, + { + "base": "X", + "letters": /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g + }, + { + "base": "Y", + "letters": /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g + }, + { + "base": "Z", + "letters": /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g + }, + { + "base": "a", + "letters": /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g + }, + { + "base": "aa", + "letters": /[\uA733]/g + }, + { + "base": "ae", + "letters": /[\u00E6\u01FD\u01E3]/g + }, + { + "base": "ao", + "letters": /[\uA735]/g + }, + { + "base": "au", + "letters": /[\uA737]/g + }, + { + "base": "av", + "letters": /[\uA739\uA73B]/g + }, + { + "base": "ay", + "letters": /[\uA73D]/g + }, + { + "base": "b", + "letters": /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g + }, + { + "base": "c", + "letters": /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g + }, + { + "base": "d", + "letters": /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g + }, + { + "base": "dz", + "letters": /[\u01F3\u01C6]/g + }, + { + "base": "e", + "letters": /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g + }, + { + "base": "f", + "letters": /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g + }, + { + "base": "g", + "letters": /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g + }, + { + "base": "h", + "letters": /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g + }, + { + "base": "hv", + "letters": /[\u0195]/g + }, + { + "base": "i", + "letters": /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g + }, + { + "base": "j", + "letters": /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g + }, + { + "base": "k", + "letters": /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g + }, + { + "base": "l", + "letters": /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g + }, + { + "base": "lj", + "letters": /[\u01C9]/g + }, + { + "base": "m", + "letters": /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g + }, + { + "base": "n", + "letters": /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g + }, + { + "base": "nj", + "letters": /[\u01CC]/g + }, + { + "base": "o", + "letters": /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g + }, + { + "base": "oi", + "letters": /[\u01A3]/g + }, + { + "base": "ou", + "letters": /[\u0223]/g + }, + { + "base": "oo", + "letters": /[\uA74F]/g + }, + { + "base": "p", + "letters": /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g + }, + { + "base": "q", + "letters": /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g + }, + { + "base": "r", + "letters": /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g + }, + { + "base": "s", + "letters": /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g + }, + { + "base": "t", + "letters": /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g + }, + { + "base": "tz", + "letters": /[\uA729]/g + }, + { + "base": "u", + "letters": /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g + }, + { + "base": "v", + "letters": /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g + }, + { + "base": "vy", + "letters": /[\uA761]/g + }, + { + "base": "w", + "letters": /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g + }, + { + "base": "x", + "letters": /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g + }, + { + "base": "y", + "letters": /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g + }, + { + "base": "z", + "letters": /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g + } + ]; + + for(const map of /** @type {Object[]} */defaultDiacriticsRemovalMap) { + str = str.replace(map.letters, map.base); + } + + return str; +} + +/** + * @this {HTMLSelectElement} + */ +function clearFocus() { + document.activeElement.blur(); +} + +// function isFileImage(file) { +// return file && file['type'].split('/')[0] === 'image'; +// } + +function readImage() { + /** @type {HTMLInputElement|null} */ + const htmlInputElement=this; + + if(htmlInputElement.files[0] && htmlInputElement.files[0]['type'].split('/')[0] === 'image') { + /** @type {HTMLImageElement|null} */ + const htmlImgElement=htmlInputElement.getAttribute('data-file-preview-target') ? document.getElementById(htmlInputElement.getAttribute('data-file-preview-target')) : null; + + if(htmlImgElement && htmlInputElement.files && htmlInputElement.files[0]) { + const reader = new FileReader(); + + reader.onload = function(progressEvent) { + htmlImgElement.src=/** @type {string} */progressEvent.target.result; + }; + + reader.readAsDataURL(htmlInputElement.files[0]); + } + } +} + +function readPath() { + /** @type {HTMLInputElement|null} */ + const htmlInputElement=this; + /** @type {HTMLInputElement|null} */ + const htmlPathElement=htmlInputElement.parentElement?.querySelector("input[name='file-path']"); + + if(htmlPathElement && htmlInputElement.files && htmlInputElement.files[0]) { + const startIndex = (htmlInputElement.value.indexOf('\\') >= 0 ? htmlInputElement.value.lastIndexOf('\\') : htmlInputElement.value.lastIndexOf('/')); + let filename = htmlInputElement.value.substring(startIndex); + + if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) { + htmlPathElement.value = filename.substring(1); + } + } +} + +// + +// +function form_init(container = null) { + return new Promise(function(resolve) { + const htmlSourceElement = container ? container : document; + + for(const htmlInputElement of /** @type {HTMLInputElement[]} */htmlSourceElement.querySelectorAll("input[type='file']")) { + htmlInputElement.addEventListener("change", clearFocus); + htmlInputElement.addEventListener("change", readPath); + htmlInputElement.addEventListener("change", readImage); + } + + for(const htmlSelectElement of /** @type {HTMLSelectElement[]} */htmlSourceElement.querySelectorAll("select")) { + htmlSelectElement.addEventListener("change", clearFocus); + } + + for(const htmlFormElement of /** @type {HTMLFormElement[]} */htmlSourceElement.querySelectorAll("form")) { + htmlFormElement.addEventListener("submit", form_checkValidity); + + if(htmlFormElement.classList.contains(CLASS_formOnClick)) { + htmlFormElement.addEventListener("click", form_dispatchSubmitEvent); + } + + if(htmlFormElement.classList.contains(CLASS_formOnChange)) { + htmlFormElement.addEventListener("change", form_dispatchSubmitEvent); + } + + // if(htmlFormElement.classList.contains("form_xml__onkeyup")) { + // htmlFormElement.addEventListener("keydown", form_preventManualSubmit); + // htmlFormElement.addEventListener("keyup", form_dispatchSubmitEvent); + // } + } + + resolve(); + }); +} + +// /** +// * @param {KeyboardEvent} keyboardEvent +// * @this {HTMLFormElement} +// */ +// function form_preventManualSubmit(keyboardEvent) { +// if(keyboardEvent.key === "Enter") { +// keyboardEvent.preventDefault(); +// return false; +// } +// } + +/** + * @this {HTMLFormElement} + */ +function form_dispatchSubmitEvent(event) { + if(this instanceof HTMLFormElement) { + this.dispatchEvent(EVENT_submit); + } else if(arguments.length > 0 && (arguments[0] instanceof HTMLFormElement)) { + arguments[0].dispatchEvent(EVENT_submit); + } +} + +/** + * @param htmlFormElement + * @return {Promise} + */ +function form_trimInputs(htmlFormElement) { + return new Promise(function(resolve) { + for(const htmlInputElement of /** @type {HTMLInputElement[]|HTMLTextAreaElement[]} */htmlFormElement.querySelectorAll("input[type='text'], input[type='number'], textarea")) { + if(!htmlInputElement.classList.contains(CLASS_inputTypePassword)) { + htmlInputElement.value = htmlInputElement.value.trim(); + } + } + + resolve(true); + }); +} + +function form_resetCustomValidity() { + this.setCustomValidity(""); +} + +/** + * @param {Event} submitEvent + * @this {HTMLFormElement} + */ +async function form_checkValidity(submitEvent) { + submitEvent.preventDefault(); + + clearFocus(); + form_setUploadScreen(this); + + await form_trimInputs(this); + + if(this.checkValidity()) { + for(/** @type {HTMLInputElement} */const _htmlInputElement of this.querySelectorAll(".sp_input__format-screenshot")) { + if(await node_formatScreenshot(_htmlInputElement) === false) { + _htmlInputElement.setCustomValidity("Could not format file"); + _htmlInputElement.addEventListener("change", form_resetCustomValidity); + + form_setUploadScreen(); + this.reportValidity(); + + return; + } + } + + if(this.classList.contains(CLASS_formXml)) { + form_ajaxRequest(this); + } else { + this.submit(); + } + } else { + form_setUploadScreen(); + this.reportValidity(); + } +} + +function form_setUploadScreen(htmlFormElement) { + if(htmlFormElement instanceof HTMLFormElement) { + htmlFormElement.classList.add("sp_form__uploading"); + } else { + document.querySelector("form.sp_form__uploading")?.classList.remove("sp_form__uploading"); + } +} + +/** + * @param {HTMLFormElement} htmlFormElement + */ +function form_ajaxRequest(htmlFormElement) { + const request = new XMLHttpRequest(); + + request.responseType = "json"; + request.onload = form_ajaxResponse; + + request.open(htmlFormElement.method, htmlFormElement.action); + request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + request.send(new FormData(htmlFormElement)); +} + +/** + * @this {XMLHttpRequest} + */ +async function form_ajaxResponse() { + const { + /** @type {JSON} */response, + /** @type {number} */status + } = this; + + form_setUploadScreen(); + + if(status === 200) { + if(response instanceof Object) { + if("::function" in response) { + for(const fn of /** @type {Object[]} */response["::function"]) { + const { + /** @type {string} */name, + /** @type {*} */params + } = fn; + + switch(name) { + case "messageInfo": messageInfo(params); break; + case "redirect": window.location.href = params["url"]; break; + case "modal_load": await modal_load(params); break; + case "modal_unload": modal_unload(params); break; + case "node_loadForm": await node_loadForm(params); break; + case "node_validateForm": await node_validateForm(params); break; + case "node_removeElement": await node_removeElement(params); break; + case "paq_event": if(STATIC_ENV === "prod") { paq_event(params); } break; + } + } + } + } + } else { + // messageInfo({ + // status: "error", + // message: "Ajax request error" + // }); + } +} + +/** + * @param {HTMLElement|null} container + * @return {Promise} + */ +function radio_initListeners(container = null) { + return new Promise(function(resolve) { + const nodeList = container ? container.querySelectorAll(`.${CLASS_radioContainer}`) : document.querySelectorAll(`.${CLASS_radioContainer}`); + + for(const radioContainer of /** @type {HTMLElement[]} */ nodeList) { + for(const htmlInputElement of /** @type {HTMLInputElement[]} */ radioContainer.querySelectorAll(`.${CLASS_radioInputWrapper} input`)) { + const inputType = htmlInputElement.type; + + htmlInputElement.closest(`.${CLASS_radioInputWrapper}`)?.classList.add(`sp_radio__type-${inputType}`); + } + + radioContainer.addEventListener("change", radio_changeListener); + radioContainer.dispatchEvent(EVENT_change); + } + + resolve(true); + }); +} + +/** + * @this {HTMLElement} + */ +function radio_changeListener() { + for(const htmlLabelElement of /** @type {HTMLLabelElement[]} */this.querySelectorAll("label")) { + if(htmlLabelElement.querySelector("input").checked === true) { + htmlLabelElement.classList.add(CLASS_radioChecked); + } else { + htmlLabelElement.classList.remove(CLASS_radioChecked); + } + } +} + +// + +// +/** + * @param {string} databaseName + * @param {number} databaseVersion + * @returns {Promise} + */ +function idb_openDatabase(databaseName, databaseVersion) { + return new Promise(function(resolve) { + if("indexedDB" in window) { + const idbOpenDBRequest = window.indexedDB.open(databaseName, databaseVersion); + + idbOpenDBRequest.onerror = function() { + console.error(new Error("Failed to open database")); + + resolve(null); + }; + + idbOpenDBRequest.onupgradeneeded = async function(versionChangeEvent) { + loader_show("Updating data", "Do not refresh the page !"); + + IDB_database = versionChangeEvent.target.result; + const transaction = versionChangeEvent.target.transaction; + const idbStores = IDB_database.objectStoreNames; + + for(/** @type {Store} */const store of Object.values(IDB_stores)) { + await idb_createStore(IDB_database, store); + } + + if([1, 2, 3, 4, 5, 6].includes(versionChangeEvent.oldVersion)) { + IDB_hadMigration = true; + } + + if([1, 2, 3, 4].includes(versionChangeEvent.oldVersion)) { + window.indexedDB.deleteDatabase(databaseName); + } + + if(versionChangeEvent.oldVersion === 5) { + if(idbStores.contains(IDB_stores.ProfileStore.storeName) && idbStores.contains(IDB_stores.NodeStore.storeName)) { + const nodeStore = transaction.objectStore(IDB_stores.NodeStore.storeName); + const idbDataRequest = nodeStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const nodeStoreData = event.target.result; + const idbClearRequest = await nodeStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + const profileStore = transaction.objectStore(IDB_stores.ProfileStore.storeName); + const idbDataRequest = profileStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const profileStoreData = event.target.result; + const idbClearRequest = await profileStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + for(const _profile of profileStoreData) { + const profile = new Profile(); + profile.hydrate(_profile); + + if(!profile.server || !["cn", "eu", "na"].includes(profile.server)) { + profile.server = "eu"; + } + + profile.slug = removeDiacritics(`${profile.name}-${profile.server}`).replace(/(\W|_)+/g, "-").toLowerCase(); + + await profileStore.put(profile.dehydrate()); + + for(const _node of nodeStoreData) { + if(_profile["slug"] === _node["profile"]) { + _node["profile"] = profile.slug; + + await nodeStore.put(_node); + } + } + } + }; + }; + }; + }; + } + } + + if([5, 6].includes(versionChangeEvent.oldVersion)) { + if(idbStores.contains(IDB_stores.ProfileStore.storeName) && idbStores.contains(IDB_stores.NodeStore.storeName)) { + const nodeStore = transaction.objectStore(IDB_stores.NodeStore.storeName); + const idbDataRequest = nodeStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const nodeStoreData = event.target.result; + const idbClearRequest = await nodeStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + const profileStore = transaction.objectStore(IDB_stores.ProfileStore.storeName); + const idbDataRequest = profileStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const profileStoreData = await event.target.result; + const idbClearRequest = await profileStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + for(const _profile of profileStoreData) { + const profile = new Profile(); + profile.hydrate(_profile); + + switch(profile.slug) { + case "default-eu": + profile.slug = "profile-a"; + profile.name = "Profile A"; + profile.server = "eu"; + profile.isActive = true; + break; + case "default-na": + profile.slug = "profile-b"; + profile.name = "Profile B"; + profile.server = "na"; + profile.isActive = false; + break; + case "default-cn": + profile.slug = "profile-c"; + profile.name = "Profile C"; + profile.server = "cn"; + profile.isActive = false; + break; + } + + await profileStore.put(profile.dehydrate()); + + for(const _node of nodeStoreData) { + if(_profile["slug"] === _node["profile"]) { + _node["profile"] = profile.slug; + + await nodeStore.put(_node); + } + } + } + }; + }; + }; + }; + } + } + + if(versionChangeEvent.oldVersion !== 0) { + setTimeout(function() { + window.location.reload(); + }, 5000); + } + }; + + idbOpenDBRequest.onsuccess = async function(event) { + resolve(event.target.result); + }; + } else { + resolve(null); + } + }); +} + +/** + * @param {IDBDatabase} database + * @param {Store} store + * @returns {Promise} + */ +function idb_createStore(database, store) { + return new Promise(async function(resolve) { + const idbStores = database.objectStoreNames; + + if(!idbStores.contains(store.storeName)) { + const _store = await database.createObjectStore(store.storeName, { + keyPath: store.keyPath, + autoIncrement: store.autoIncrement + }); + + if(store.indexes.length) { + for(const _index of /** @type Index[] */ store.indexes) { + _store.createIndex(_index.name, _index.keyPath, _index.options); + } + } + } + + resolve(true); + }); +} + +/** + * @param {Store} store + * @returns {Promise} + */ +function idb_deleteStore(store) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + IDB_database.deleteObjectStore(store.storeName); + } + } + + resolve(true); + }); +} + +/** + * @param {string} type + * @param {Store} store + * @param {string|array|null} keyPath + * @param {Object|null} index + * @param {Object|null} data + * @returns {Promise} + */ +function idb_openTransaction(type, store, {keyPath = null, index = null, data = null}) { + return new Promise(async function(resolve) { + if(IDB_database) { + const types = ["get", "getAll", "put", "delete"]; + + if(types.includes(type)) { + let result = null; + + switch(type) { + case "get": + case "getAll": + result = await idb_getTransaction(store, {keyPath: keyPath, index: index}, type === "getAll"); + break; + case "put": + result = await idb_putTransaction(store, data); + break; + case "delete": + result = await idb_deleteTransaction(store, keyPath); + break; + } + + if(result instanceof Error) { + console.error(result); + + resolve(null); + } else { + resolve(result); + } + } else { + console.error(new Error(`"[IDB GENERAL ERROR] Unknow transaction type"`)); + + resolve(null); + } + } else { + console.error(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + + resolve(null); + } + }); +} + +/** + * @param {Store} store + * @param {string|array|null} keyPath + * @param {Array|null} index + * @param {boolean} getAll + * @returns {Promise<*>} + */ +function idb_getTransaction(store, {keyPath = null, index = null}, getAll = false) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + let idbRequest = null; + const objectStore = IDB_database.transaction(store.storeName).objectStore(store.storeName); + + if(getAll) { + if(index !== null && Array.isArray(index)) { + idbRequest = objectStore.index(index[0]) + .getAll(index[1]); + } else { + idbRequest = objectStore.getAll(); + } + } else { + if(keyPath !== null) { + idbRequest = objectStore.get(keyPath); + } else if(index !== null && typeof index === "object") { + idbRequest = objectStore.index(index[0]) + .get(index[1]); + } + } + + if(idbRequest) { + idbRequest.onerror = function() { + let error = "Unknow error"; + + switch(idbRequest.error.name) { + case "ConstraintError": + error = "id already exists"; + break; + } + + resolve(new Error(`[IDB GET ERROR]: ${error}`)); + }; + + idbRequest.onsuccess = function() { + resolve(idbRequest.result ? idbRequest.result : null); + }; + } else { + resolve(new Error(`[IDB GET ERROR]: Request is null`)); + } + } else { + resolve(new Error("[IDB GET ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} + +/** + * @param {Store} store + * @param {Object} data + * @return {Promise} + */ +function idb_putTransaction(store, data) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + const idbRequest = IDB_database.transaction(store.storeName, "readwrite").objectStore(store.storeName).put(data.__type === "class" ? data.dehydrate() : data); + + idbRequest.onerror = function() { + return resolve(new Error(`[IDB PUT ERROR]: ${idbRequest.error.name}`)); + }; + + idbRequest.onsuccess = async function() { + resolve(await idb_getTransaction(store, {keyPath: idbRequest.result})); + }; + } else { + resolve(new Error("[IDB PUT ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} + +/** + * @param {Store} store + * @param {string|array} keyPath + * @return {Promise} + */ +function idb_deleteTransaction(store, keyPath) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + const idbRequest = IDB_database.transaction(store.storeName, "readwrite").objectStore(store.storeName).delete(keyPath); + + idbRequest.onerror = function() { + return resolve(new Error(`[IDB DELETE ERROR]: ${idbRequest.error.name}`)); + }; + + idbRequest.onsuccess = async function() { + resolve(idbRequest.result); + }; + } else { + resolve(new Error("[IDB DELETE ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} +// + +// +function touchDeviceInit() { + return new Promise(function(resolve) { + GLOBAL_isTouchDevice = !!document.querySelector("#page-container.sp_app__is-touch-device"); + + if(GLOBAL_isTouchDevice) { + document.querySelector("#nav-menu-btn")?.addEventListener("click", nav_switchState); + } + + resolve(true); + }); +} + +function nav_switchState() { + if(this.classList.contains("sp_nav__nav-open")) { + this.classList.remove("sp_nav__nav-open"); + document.querySelector("#header-container .sp_header__nav")?.classList.remove("sp_nav__nav-open"); + } else { + this.classList.add("sp_nav__nav-open"); + document.querySelector("#header-container .sp_header__nav")?.classList.add("sp_nav__nav-open"); + } +} + +function messageInfo({type, message, length}) { + const toastContainer = document.getElementById("toasts-container"); + + if(toastContainer) { + toastContainer.innerHTML = "" + + if(!["info", "success", "error"].includes(type)) { + type = "info"; + } + + const toast = document.createElement("div"); + toast.classList.add("sp_toast", `sp_toast__${type}`); + toast.innerText = message; + + toastContainer.appendChild(toast); + toast.classList.add("sp_toast__active"); + + // const toastze = function(type = "success", message) { + // const toastElement = document.createElement("div"); + // toastElement.classList.add("toast", `toast--${type}`); + // const toastWrap = document.createElement("div"); + // toastWrap.classList.add("toast__wrap"); + // toastWrap.innerHTML = message; + // + // toastElement.appendChild(toastWrap); + // toastsContainer.appendChild(toastElement); + // + // const tl = gsap.timeline(); + // + // tl.to(toastElement, { + // autoAlpha: 1, + // y: 0, + // ease: "power4.out", + // duration: .4 + // }); + // + // tl.to(toastElement, { + // height: 0, + // marginBottom: 0, + // autoAlpha: 0, + // duration: .5, + // delay: 2, + // ease: "power4.out", + // onComplete: ()=>{ + // toastElement.parentElement.removeChild(toastElement); + // } + // }); + // }; + } +} + +function contentFilter_init() { + return new Promise(function(resolve) { + for(const htmlSelectElement of /** @type {HTMLSelectElement[]} */document.querySelectorAll("[id$='content-filter']")) { + htmlSelectElement.addEventListener("change", contentFilter_set); + htmlSelectElement.dispatchEvent(EVENT_change); + } + + resolve(); + }); +} + +/** + * @this {HTMLSelectElement} + */ +function contentFilter_set() { + for(const htmlElement of /** @type {HTMLElement[]} */document.querySelectorAll(`[data-content-for='${this.id}']`)) { + if(isJson(htmlElement.dataset.filterValues)) { + htmlElement.hidden = !JSON.parse(htmlElement.dataset.filterValues).includes(this.value); + } else { + htmlElement.hidden = htmlElement.dataset.filterValues !== this.value; + } + } +} + +function loader_show(message, warnMessage) { + const loader = document.getElementById("blob-loader"); + + if(loader) { + /** @type {HTMLElement} */ + const textElement = loader.querySelector(".sp_loader__text"); + + if(textElement) { + textElement.innerText = message; + + if(typeof warnMessage !== "undefined") { + const warnElement = document.createElement("div"); + warnElement.classList.add("sp_loader__warn-text"); + + warnElement.innerText = warnMessage; + + textElement.append(warnElement); + } + } + + loader.removeAttribute("hidden"); + } +} + +function loader_hide() { + const loader = document.getElementById("blob-loader"); + + if(loader) { + loader.setAttribute("hidden", ""); + } +} + +function panelSwitch_init() { + return new Promise(function(resolve) { + for(const htmlElement of /** @type {HTMLElement[]} */document.querySelectorAll(".sp_panel__switch")) { + htmlElement.addEventListener("click", panelSwitch__handleState); + + if(!GLOBAL_isTouchDevice) { + htmlElement.parentElement.classList.add("sp_panel__open"); + } + } + + resolve(true); + }); +} + +function panelSwitch__handleState() { + const panel=this.parentElement; + + if(panel.classList.contains("sp_panel__open")) { + panel.classList.remove("sp_panel__open"); + } else { + panel.classList.add("sp_panel__open"); + } +} + +function slider__init() { + return new Promise(function(resolve) { + for(const htmlElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_panel__content-switch")) { + htmlElement.addEventListener("click", slider_switchSlide); + } + + resolve(true); + }); +} + +/** + * @this {HTMLElement} + */ +function slider_switchSlide() { + if(!this.classList.contains("sp_panel__switch-active") && typeof this.dataset.target !== "undefined") { + const slide = document.getElementById(this.dataset.target); + const slider = slide.parentElement.classList.contains("sp_slider") ? slide.parentElement : null; + const switchContainer = this.parentElement?.classList.contains("sp_panel__content-switch-container") ? this.parentElement : null; + + if(slide && slider && switchContainer) { + for(const htmlElement of /** @type {HTMLElement[]} */ switchContainer.querySelectorAll(".sp_panel__content-switch")) { + htmlElement.classList.remove("sp_panel__switch-active"); + } + + this.classList.add("sp_panel__switch-active"); + + for(const htmlElement of /** @type {HTMLElement[]} */ slider.querySelectorAll(".sp_slider__slide")) { + htmlElement.classList.remove("sp_slider__slide-open"); + } + + slide.classList.add("sp_slider__slide-open"); + } + } +} + +/** + * @returns {Promise} + */ +function slug_init() { + return new Promise(function(resolve) { + for(const htmlInputElement of /** @type {HTMLInputElement[]} */document.querySelectorAll("input[data-slug-target]")) { + htmlInputElement.addEventListener("keyup", slug_generate); + } + + resolve(); + }); +} + +/** + * @this {HTMLInputElement} + */ +function slug_generate() { + const target = this.getAttribute("data-slug-target"); + + if(target) { + /** @type {HTMLInputElement} */ + const htmlInputElement = document.querySelector(`input[data-slug-source='${target}']`); + + if(htmlInputElement) { + htmlInputElement.value = removeDiacritics(this.value).replace(/(\W|_)+/g, "-").toLowerCase(); + } + } +} +// + +// +/** + * @param {MouseEvent} mouseEvent + */ +function mouseEvent_preventClick(mouseEvent) { + if(GLOBAL_preventClick) { + mouseEvent.preventDefault(); + + HANDLE_preventClickTimeout = setTimeout(function() { + GLOBAL_preventClick = false; + + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout = null; + }, 100); + } +} + +/** + * @param {MouseEvent|TouchEvent} mouseEvent + * @this {HTMLElement} + */ +async function mouseEvent_setMouseDown(mouseEvent) { + mouseEvent.stopPropagation(); + + let {pageX, pageY, type} = mouseEvent; + + if(GLOBAL_isTouchDevice) { + pageX = mouseEvent.changedTouches[0].clientX; + pageY = mouseEvent.changedTouches[0].clientY; + } + + GLOBAL_isMouseDown = type === (GLOBAL_isTouchDevice ? "touchstart" : "mousedown"); + + if(GLOBAL_isMouseDown) { + const elementOffset = getOffsetFromDocument(this); + + GLOBAL_mouseDownCoordinate.x = pageX - elementOffset.x; + GLOBAL_mouseDownCoordinate.y = pageY - elementOffset.y; + + if(this.id === "worldmap-container") { + GLOBAL_region.scrollLeft = this.scrollLeft; + GLOBAL_region.scrollTop = this.scrollTop; + } + } else { + if(this.id === "worldmap-container") { + GLOBAL_region.scrollLeft = ((this.scrollLeft + (this.clientWidth / 2)) * 100 / this.scrollWidth).toFixed(4); + GLOBAL_region.scrollTop = ((this.scrollTop + (this.clientHeight / 2)) * 100 / this.scrollHeight).toFixed(4); + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + } +} + +/** + * @param {MouseEvent} mouseEvent + */ +function mouseEvent_stopPropagation(mouseEvent) { + mouseEvent.stopPropagation(); +} + +/** + * @param {MouseEvent|TouchEvent} mouseEvent + * @this {HTMLElement} + */ +function grid_setScroll(mouseEvent) { + if(GLOBAL_isMouseDown) { + mouseEvent.preventDefault(); + + if(GLOBAL_isTouchDevice && mouseEvent.touches.length > 1) { + return; + } + + if(HANDLE_preventClickTimeout) { + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout=null; + } + GLOBAL_preventClick=true; + + const worldmap = this; + let {pageX, pageY}=mouseEvent; + const worldmapOffset=getOffsetFromDocument(worldmap); + + if(GLOBAL_isTouchDevice) { + pageX = mouseEvent.changedTouches[0].clientX; + pageY = mouseEvent.changedTouches[0].clientY; + } + + const slideX=pageX - worldmapOffset.x - GLOBAL_mouseDownCoordinate.x; + const slideY=pageY - worldmapOffset.y - GLOBAL_mouseDownCoordinate.y; + + worldmap.scrollLeft=Math.min(Math.max(GLOBAL_region.scrollLeft - slideX, 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop=Math.min(Math.max(GLOBAL_region.scrollTop - slideY, 0), worldmap.scrollHeight - worldmap.clientHeight); + } +} + +/** + * @return {Promise} + */ +function grid_initZoomController() { + return new Promise(function(resolve) { + /** @type {HTMLInputElement} */ + const htmlRangeElement = document.querySelector("#grid-zoom-controller"); + + if(htmlRangeElement) { + htmlRangeElement.max = GLOBAL_worldmapMaxZoomLevel.toString(); + htmlRangeElement.value = GLOBAL_region.zoomLevel.toString(); + + htmlRangeElement.addEventListener("change", grid_wheelSetZoom); + } + + resolve(true); + }); +} + +/** + * @param {WheelEvent} wheelEvent + * @this {HTMLElement} + */ +async function grid_wheelSetZoom(wheelEvent) { + if(wheelEvent instanceof WheelEvent) { + wheelEvent.preventDefault(); + } + + const worldmap = this.id === "worldmap-container" ? this : document.querySelector("#worldmap-container"); + /** @type {HTMLInputElement} */ + const htmlRangeElement = this.id === "grid-zoom-controller" ? this : document.querySelector("#grid-zoom-controller"); + + if(worldmap && htmlRangeElement) { + node_removeTooltip(); + + const zoomLevel = Number(Number(document.documentElement.style.getPropertyValue("--grid__zoom")).toFixed(0)); + GLOBAL_region.scrollLeft = ((worldmap.scrollLeft + (worldmap.clientWidth / 2)) * 100 / worldmap.scrollWidth).toFixed(4) + GLOBAL_region.scrollTop = ((worldmap.scrollTop + (worldmap.clientHeight / 2)) * 100 / worldmap.scrollHeight).toFixed(4) + + if(wheelEvent instanceof WheelEvent) { + GLOBAL_region.zoomLevel = wheelEvent.deltaY < 0 ? (zoomLevel + 2) : (zoomLevel - 2); + htmlRangeElement.value = GLOBAL_region.zoomLevel.toString(); + } else { + GLOBAL_region.zoomLevel = Number(htmlRangeElement.value); + } + + GLOBAL_region.zoomLevel = Math.min(Math.max(GLOBAL_region.zoomLevel, 0), GLOBAL_worldmapMaxZoomLevel); + + document.documentElement.style.setProperty("--grid__zoom", GLOBAL_region.zoomLevel.toString()); + + worldmap.scrollLeft = Math.min(Math.max(Math.round((worldmap.scrollWidth * GLOBAL_region.scrollLeft / 100) - (worldmap.clientWidth / 2)), 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop = Math.min(Math.max(Math.round((worldmap.scrollHeight * GLOBAL_region.scrollTop / 100) - (worldmap.clientHeight / 2)), 0), worldmap.scrollHeight - worldmap.clientHeight); + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } +} + +/** + * @param {TouchEvent} touchEvent + * @this {HTMLElement} + */ +async function grid_resetPinchDistance(touchEvent) { + if(touchEvent.touches.length === 1) { + GLOBAL_pinchDistance = undefined; + } +} + +/** + * @param {TouchEvent} touchEvent + * @this {HTMLElement} + */ +function grid_pinchSetZoon(touchEvent) { + if(touchEvent.touches.length === 2) { + touchEvent.preventDefault(); + + /** @type {HTMLInputElement} */ + const zoomControllerElement = document.querySelector("#grid-zoom-controller"); + + if(zoomControllerElement) { + const pinchDistance = Math.hypot( + touchEvent.touches[0].pageX - touchEvent.touches[1].pageX, + touchEvent.touches[0].pageY - touchEvent.touches[1].pageY).toFixed(0); + + if(typeof GLOBAL_pinchDistance === "undefined") { + GLOBAL_pinchDistance = pinchDistance; + } + + if(pinchDistance > (GLOBAL_pinchDistance + 60)) { + GLOBAL_pinchDistance+=60; + + if(zoomControllerElement.value < GLOBAL_worldmapMaxZoomLevel) { + zoomControllerElement.value = Math.min(Math.max((Number(zoomControllerElement.value) + Number(zoomControllerElement.step)), 0), GLOBAL_worldmapMaxZoomLevel) + .toFixed(0) + .toString(); + zoomControllerElement.dispatchEvent(EVENT_change); + } + } else if(pinchDistance < (GLOBAL_pinchDistance - 30)) { + GLOBAL_pinchDistance-=30; + + if(zoomControllerElement.value > 0) { + zoomControllerElement.value = Math.min(Math.max((Number(zoomControllerElement.value) - Number(zoomControllerElement.step)), 0), GLOBAL_worldmapMaxZoomLevel) + .toFixed(0) + .toString(); + zoomControllerElement.dispatchEvent(EVENT_change); + } + } + } + } +} + +function grid_setWidth() { + return new Promise(function(resolve) { + const worldmapElement = document.querySelector(".sp_grid__container"); + + if(worldmapElement?.dataset.regionWidth) { + document.documentElement.style.setProperty("--grid__width", worldmapElement.dataset.regionWidth); + } + + if(worldmapElement?.dataset.regionHeight) { + document.documentElement.style.setProperty("--grid__height", worldmapElement.dataset.regionHeight); + } + + resolve(true); + }); +} + +async function modal_load({htmlString}) { + const modalContainer = document.getElementById("modal-container"); + const modalSubContainer = modalContainer?.querySelector(".sp_modal__container"); + + if(modalSubContainer) { + modalSubContainer.innerHTML = ""; + modalSubContainer.append(strToHtml(htmlString)); + + await form_init(modalContainer); + + modalContainer.querySelector(".sp_modal__background")?.addEventListener("click", modal_unload); + + for(const htmlButtonElement of /** @type {HTMLInputElement[]} */ modalContainer.querySelectorAll(".sp_modal .sp_form-row__button button[type='button']")) { + htmlButtonElement.addEventListener("click", modal_unload); + } + + modalContainer.classList.add("sp_modal__open"); + } +} + +/** + * @param {MouseEvent} mouseEvent + */ +function modal_unload(mouseEvent) { + if(mouseEvent instanceof PointerEvent) { + mouseEvent.stopPropagation(); + } + + const modalContainer = document.getElementById("modal-container"); + const modalSubContainer = modalContainer?.querySelector(".sp_modal__container"); + + if(modalSubContainer) { + modalContainer.classList.remove("sp_modal__open"); + + setTimeout(function() { + modalSubContainer.innerHTML = ""; + }, 300); + } +} + +/** + * @return {Promise} + */ +function node_setIndexesAndCoordinaites() { + return new Promise(async function(resolve) { + const nodesIndexes = {} + + await node_setCollected(); + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + if(filterInputElement.dataset.index) { + nodesIndexes[filterInputElement.value] = filterInputElement.dataset.index; + } + } + + // for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__column .sp_node__item")) { + for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__cell .sp_node__item")) { + if(typeof nodeElement.dataset.filter !== "undefined" && nodeElement.dataset.filter in nodesIndexes) { + nodeElement.style.zIndex = nodesIndexes[nodeElement.dataset.filter]; + } + + if(typeof nodeElement.dataset.coordinate !== "undefined" && isJson(nodeElement.dataset.coordinate)) { + const {x, y} = JSON.parse(nodeElement.dataset.coordinate); + + if(x && y) { + Object.assign(nodeElement.style, { + left: `${x}%`, + top: `${y}%` + }); + + nodeElement.removeAttribute("hidden"); + } + } + + nodeElement.addEventListener("click", node_loadTooltip); + } + + + + resolve(true); + }); +} + +/** @this {HTMLButtonElement} */ +async function node_getAnchorPoint() { + const buttonElement = this; + const worldmapElement = document.getElementById("worldmap-container"); + const nodeElement = buttonElement.dataset.nodeId ? worldmapElement.querySelector(`#${buttonElement.dataset.nodeId}`) : null; + if(nodeElement) { + let nodeOffset = getOffsetFrom(nodeElement, worldmapElement); + + nodeOffset.x = Number((nodeOffset.x * 100 / worldmapElement.scrollWidth).toFixed(4)); + nodeOffset.y = Number((nodeOffset.y * 100 / worldmapElement.scrollHeight).toFixed(4)); + + await navigator.clipboard.writeText(JSON.stringify(nodeOffset)); + alert("Data copier to clipboard"); + } +} + +/** + * @return {Promise} + */ +function node_setCollected() { + return new Promise(async function(resolve) { + const idb_nodes = await idb_openTransaction("getAll", IDB_stores.NodeStore, {index: ["region", GLOBAL_region.slug]}); + + if(idb_nodes && Array.isArray(idb_nodes)) { + for(const _node of idb_nodes) { + if(_node['profile'] === GLOBAL_worldmapProfile.slug && _node["isHidden"]) { + document.getElementById(_node["domId"])?.classList.add("sp_node__collected"); + } + } + } + + resolve(true); + }); +} + +/** + * @return {Promise} + */ +function node_resetCollected() { + return new Promise(function(resolve) { + // for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__column .sp_node__item")) { + for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__cell .sp_node__item")) { + nodeElement.classList.remove("sp_node__collected"); + } + + resolve(true); + }); +} + +/** + * @this {HTMLLabelElement} + * @param {MouseEvent} mouseEvent + */ +async function node_loadTooltip(mouseEvent) { + if(!GLOBAL_preventClick) { + mouseEvent?.stopPropagation(); + + // this.getBoundingClientRect() + const nodeElement = this; + /** @type {HTMLElement|null} */ + const gridContainer = nodeElement.closest(".sp_grid__container"); + const tooltip = /** @type {HTMLElement|null} */ document.getElementById("template_tooltip")?.content.firstElementChild?.cloneNode(true); + + const title = nodeElement.dataset.filter + ? document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`) + ?.parentElement + ?.querySelector(".sp_radio__input-label") + ?.innerText + : null; + + if(gridContainer && tooltip && title) { + node_removeTooltip(); + + if(document.querySelector("#page-container")?.dataset.device !== "mobile") { + const _tooltipPos = getOffsetFrom(nodeElement, gridContainer); + _tooltipPos.x += (nodeElement.clientWidth / 2); + + Object.assign(tooltip.style, { + left: `${_tooltipPos.x}px`, + top: `${_tooltipPos.y}px` + }); + } + + /** @type {HTMLElement|null} */ + const _tooltipNodeDisplayButton = tooltip.querySelector(".sp_node__set-display"); + + if(_tooltipNodeDisplayButton) { + if(Number(nodeElement.dataset.canBeHidden) === 1) { + _tooltipNodeDisplayButton.dataset.nodeId = nodeElement.id; + _tooltipNodeDisplayButton.addEventListener("click", node_setDisplay); + + if(nodeElement.classList.contains("sp_node__collected")) { + _tooltipNodeDisplayButton.dataset.isHidden = "1"; + } + } else { + _tooltipNodeDisplayButton.remove(); + } + } + + if(typeof nodeElement.dataset.editUrl !== "undefined") { + const _tooltipForm = /** @type {HTMLFormElement|null} */tooltip.querySelector(".sp_node__edit-form"); + + if(_tooltipForm) { + _tooltipForm.action = nodeElement.dataset.editUrl; + } + } + + if(typeof nodeElement.dataset.deleteUrl !== "undefined") { + const _tooltipDeleteForm = /** @type {HTMLFormElement|null} */tooltip.querySelector(".sp_node_delete-form"); + + if(_tooltipDeleteForm) { + _tooltipDeleteForm.action = nodeElement.dataset.deleteUrl; + } + } + + const anchorElement = tooltip.querySelector(".sp_node__calc-anchor"); + if(anchorElement) { + anchorElement.dataset.nodeId = nodeElement.id; + anchorElement.addEventListener("click", node_getAnchorPoint); + } + + const _tooltipTitle = tooltip.querySelector(".sp_tooltip__header span:nth-child(1)"); + + if(_tooltipTitle) { + _tooltipTitle.innerText = title; + } + + const _tooltipTitleExtra = tooltip.querySelector(".sp_tooltip__header span:nth-child(2)"); + + if(_tooltipTitleExtra) { + _tooltipTitleExtra.innerText = `#${nodeElement.id.substring(5)}`; + } + + if(typeof nodeElement.dataset.description !== "undefined" && nodeElement.dataset.description.length > 0) { + /** @type {HTMLElement} */ + const _tooltipDescription = tooltip.querySelector(".sp_tooltip__body"); + + if(_tooltipDescription) { + _tooltipDescription.innerText = nodeElement.dataset.description; + } + } + + if(typeof nodeElement.dataset.screenshots !== "undefined" && isJson(nodeElement.dataset.screenshots)) { + /** @type {HTMLElement} */ + const tooltipFooter = tooltip.querySelector(".sp_tooltip__footer"); + const screenshotContainer = tooltipFooter?.querySelector(".sp_tooltip__screenshot-container"); + + if(tooltipFooter && screenshotContainer) { + const sources = JSON.parse(nodeElement.dataset.screenshots); + + if(sources.length) { + for(const _source of sources) { + const htmlImageElement = /** @var {HTMLImageElement} */ document.createElement("img"); + htmlImageElement.src = _source; + + const htmlLinkElement = /** @var {HTMLLinkElement} */ document.createElement("a"); + htmlLinkElement.href = _source.replace("/thumbnail", ""); + htmlLinkElement.target = "_blank"; + htmlLinkElement.classList.add("sp_screenshot__container") + htmlLinkElement.append(htmlImageElement); + + screenshotContainer.append(htmlLinkElement); + } + + tooltipFooter.hidden = false; + } + } + } + + if(document.querySelector("#page-container")?.dataset.device === "mobile") { + const nodeOffset = getOffsetFrom(nodeElement, gridContainer); + + gridContainer.scrollLeft = Math.min(Math.max(nodeOffset.x + (nodeElement.clientWidth / 2) - (gridContainer.clientWidth / 2), 0), gridContainer.scrollWidth); + gridContainer.scrollTop = Math.min(Math.max(nodeOffset.y + (nodeElement.clientHeight * 2) - (gridContainer.clientHeight / 2), 0), gridContainer.scrollHeight); + + GLOBAL_region.scrollLeft = ((gridContainer.scrollLeft + (gridContainer.clientWidth / 2)) * 100 / gridContainer.scrollWidth).toFixed(4); + GLOBAL_region.scrollTop = ((gridContainer.scrollTop + (gridContainer.clientHeight / 2)) * 100 / gridContainer.scrollHeight).toFixed(4); + + log([GLOBAL_region.scrollLeft, GLOBAL_region.scrollTop]) + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + nodeElement.classList.add("sp_node__highlight"); + gridContainer.append(tooltip); + + await form_init(tooltip); + tooltip.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_stopPropagation); + tooltip.addEventListener("click", mouseEvent_stopPropagation); + tooltip.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_stopPropagation); + tooltip.addEventListener("wheel", mouseEvent_stopPropagation); + tooltip.removeAttribute("hidden"); + } + } +} + +function node_removeTooltip() { + if(!GLOBAL_preventClick) { + for(const _tooltip of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_tooltip__wrapper")) { + _tooltip.remove(); + } + + for(const _nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_node__highlight")) { + _nodeElement.classList.remove("sp_node__highlight"); + } + } +} + +/** + * @param {MouseEvent} mouseEvent + * @this {HTMLButtonElement} + */ +async function node_setDisplay(mouseEvent) { + let category = null; + /** @type {HTMLLabelElement} */ + const nodeElement = document.getElementById(this.dataset.nodeId); + + if(nodeElement) { + if(typeof nodeElement.dataset.filter !== "undefined") { + category = document.querySelector(`input.sp_worldmap__filter[value='${nodeElement.dataset.filter}']`) + ?.closest(".sp_panel__section") + ?.querySelector(".sp_panel__section-title h2") + ?.dataset.sectionTitle; + } + + if(nodeElement.classList.contains("sp_node__collected")) { + nodeElement.classList.remove("sp_node__collected"); + + await idb_openTransaction("delete", IDB_stores.NodeStore, { + keyPath: [GLOBAL_worldmapProfile.slug, nodeElement.id] + }); + + if(STATIC_ENV === "prod" && category) { + paq_event({ + type: "trackEvent", + name: "Map: Users node tracking", + value: `${category.innerText} node uncollected` + }); + } + } else { + nodeElement.classList.add("sp_node__collected"); + + await idb_openTransaction("put", IDB_stores.NodeStore, { + data: new Node(GLOBAL_worldmapProfile.slug, nodeElement.id, GLOBAL_region.slug, true) + }); + + if(STATIC_ENV === "prod" && category) { + paq_event({ + type: "trackEvent", + name: "Map: Users node tracking", + value: `${category} node collected` + }); + } + } + + /** @type {HTMLElement} */ + const tooltipActionElement = document.querySelector("#worldmap-container .sp_tooltip__wrapper .sp_tooltip__action.sp_node__set-display"); + + if(tooltipActionElement) { + tooltipActionElement.dataset.isHidden = Number(nodeElement.classList.contains("sp_node__collected")).toString(); + } + + const filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + + if(filterInputElement) { + worldmapFilter_updateCounter(filterInputElement); + } + + primogem_updateCounter(); + } +} + +/** + * @this {HTMLElement} + */ +function node_queryNewForm() { + if(!GLOBAL_preventClick) { + const gridId = this.id.replace("grid-", ""); + const htmlButtonElement = /** @type {HTMLButtonElement} */document.querySelector("#worldmap-filters .sp_worldmark__init-new-node.sp_button__active"); + + if(gridId && typeof parseInt(gridId) == "number" && parseInt(gridId) > 0 + && htmlButtonElement && typeof htmlButtonElement.dataset.uri !== "undefined") { + + const htmlFormElement = document.createElement("form"); + htmlFormElement.action = encodeURI(decodeURI(htmlButtonElement.dataset.uri).replace("%gridId%", gridId)); + htmlFormElement.method = "post"; + + form_ajaxRequest(htmlFormElement); + } + } +} + +async function node_loadForm({gridId, coordinate, htmlString, nodeId}) { + const worldmap = document.getElementById("worldmap-container"); + const gridElement = document.getElementById(`grid-${gridId}`); + const panelElement = document.getElementById("main-right-container"); + + if(worldmap && gridElement && panelElement) { + node_removeTooltip(); + + panelElement.innerHTML = ""; + panelElement.append(strToHtml(htmlString)); + panelElement.querySelector("#node-form .sp_form-row__button .sp_button[data-type='cancel']") + ?.addEventListener("click", worldmap_disableEditionMode); + + await radio_initListeners(panelElement); + await form_init(panelElement); + + const trackerElement = document.getElementById("node-form-coordinate-tracker"); + + if(trackerElement) { + if(nodeId) { + const nodeElement = document.querySelector(`#node-${nodeId}`); + + if(nodeElement) { + await worldmap_enableEditionMode(false); + + GLOBAL_nodeBackup.grid = gridElement; + GLOBAL_nodeBackup.node = nodeElement.cloneNode(true); + + nodeElement.remove(); + } + } else { + // for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + gridElement.removeEventListener("click", node_queryNewForm); + } + } + + worldmap.classList.add("sp_worldmap_locked"); + gridElement.classList.add("sp_grid__active"); + + gridElement.querySelector(".sp_grid__node-container")?.append(trackerElement); + + if(GLOBAL_nodeBackup.node) { + Object.assign(trackerElement.style, { + left: GLOBAL_nodeBackup.node.style.left, + top: GLOBAL_nodeBackup.node.style.top + }); + } else { + Object.assign(trackerElement.style, { + left: `${coordinate.x}%`, + top: `${coordinate.y}%` + }); + } + + await node_initTracker(); + + trackerElement.removeAttribute("hidden"); + + panelElement.classList.add("sp_panel__open") + } else { + await worldmap_disableEditionMode(); + + messageInfo({ + type: "error", + message: "Could not find form tracker" + }); + } + } +} + +async function node_validateForm({gridId, htmlString}) { + const gridElement = document.getElementById(`grid-${gridId}`); + const nodeElement = strToHtml(htmlString).firstElementChild; + + document.getElementById("node-form-coordinate-tracker")?.remove(); + gridElement.querySelector(".sp_grid__node-container")?.append(nodeElement); + + GLOBAL_nodeBackup.grid = null; + GLOBAL_nodeBackup.node = null; + + await node_setIndexesAndCoordinaites(); + + if(nodeElement.dataset.filter) { + const filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + + if(filterInputElement) { + filterInputElement.dispatchEvent(EVENT_change); + worldmapFilter_updateCounter(filterInputElement); + } + } + + await worldmap_disableEditionMode(); + primogem_updateCounter(); +} + +async function node_unloadForm() { + const panelElement=document.getElementById("main-right-container"); + // const gridElement = document.querySelector(".sp_grid__column.sp_grid__active"); + const gridElement = document.querySelector(".sp_grid__cell.sp_grid__active"); + const trackerElement = document.getElementById("node-form-coordinate-tracker"); + + if(panelElement) { + if(panelElement.classList.contains("sp_panel__open")) { + panelElement.classList.remove("sp_panel__open"); + } + + panelElement.innerHTML = ""; + } + + window.removeEventListener("keyup", node_moveTracker); + gridElement?.removeEventListener("click", node_moveTracker); + trackerElement?.remove(); + + if(GLOBAL_nodeBackup.grid && GLOBAL_nodeBackup.node) { + GLOBAL_nodeBackup.node.hidden = true; + GLOBAL_nodeBackup.grid + .querySelector(".sp_grid__node-container") + ?.append(GLOBAL_nodeBackup.node); + + if(GLOBAL_nodeBackup.node.dataset.filter) { + document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${GLOBAL_nodeBackup.node.dataset.filter}']`) + ?.dispatchEvent(EVENT_change); + } + + GLOBAL_nodeBackup.grid = null; + GLOBAL_nodeBackup.node = null; + + await node_setIndexesAndCoordinaites(); + } +} + +function node_removeElement({gridId, nodeId}) { + const nodeElement = document.querySelector(`#grid-${gridId} #node-${nodeId}`); + + if(nodeElement) { + let filterInputElement = null; + + if(nodeElement.dataset.filter) { + filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + } + + document.querySelector(`#grid-${gridId} #node-${nodeId}`)?.remove(); + + if(filterInputElement) { + worldmapFilter_updateCounter(filterInputElement); + } + } + + node_removeTooltip(); +} + +function node_initTracker() { + return new Promise(function(resolve) { + const nodeElement = document.getElementById("node-form-coordinate-tracker"); + // const gridElement = document.querySelector(".sp_grid__column.sp_grid__active"); + const gridElement = document.querySelector(".sp_grid__cell.sp_grid__active"); + + if(nodeElement) { + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_setMouseDown); + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_setMouseDown); + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchleave" : "mouseleave", mouseEvent_setMouseDown); + + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", node_moveTracker); + window.addEventListener("keyup", node_moveTracker); + + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", mouseEvent_stopPropagation); + nodeElement.addEventListener("click", mouseEvent_stopPropagation); + + if(gridElement) { + gridElement.addEventListener("click", node_moveTracker); + } + } + + resolve(true); + }); +} + +/** + * @param {MouseEvent|TouchEvent|KeyboardEvent} event + * @this {HTMLElement} + */ +function node_moveTracker(event) { + event.preventDefault(); + const nodeElement = document.getElementById("node-form-coordinate-tracker"); + + if(nodeElement) { + const newCoordinate = {x: 0, y: 0}; + + if(event.type === "keyup") { + const offsetFromParent = getOffsetFromParent(nodeElement); + offsetFromParent.x += (nodeElement.clientWidth / 2); + offsetFromParent.y += (nodeElement.clientHeight / 2); + + switch(event.key) { + case "ArrowRight" : + offsetFromParent.x += 1; + break; + case "ArrowLeft" : + offsetFromParent.x -= 1; + break; + case "ArrowDown" : + offsetFromParent.y += 1; + break; + case "ArrowUp" : + offsetFromParent.y -= 1; + break; + } + + newCoordinate.x = Math.min(Math.max((offsetFromParent.x * 100 / nodeElement.parentElement.clientWidth), 0), 100).toFixed(4); + newCoordinate.y = Math.min(Math.max((offsetFromParent.y * 100 / nodeElement.parentElement.clientHeight), 0), 100).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } else if(event.type === "click" && !GLOBAL_preventClick) { + newCoordinate.x = (event.offsetX * 100 / nodeElement.parentElement.clientWidth).toFixed(4); + newCoordinate.y = (event.offsetY * 100 / nodeElement.parentElement.clientHeight).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } else if(event.type === (GLOBAL_isTouchDevice ? "touchmove" : "mousemove") && GLOBAL_isMouseDown) { + if(HANDLE_preventClickTimeout) { + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout = null; + } + GLOBAL_preventClick = true; + + const offsetFromDocument = getOffsetFromDocument(nodeElement); + + const moveX = (GLOBAL_isTouchDevice ? event.changedTouches[0].clientX : event.pageX) - offsetFromDocument.x - GLOBAL_mouseDownCoordinate.x; + const moveY = (GLOBAL_isTouchDevice ? event.changedTouches[0].clientY : event.pageY) - offsetFromDocument.y - GLOBAL_mouseDownCoordinate.y; + + newCoordinate.x = Math.min(Math.max((nodeElement.offsetLeft + moveX) * 100 / nodeElement.parentElement.clientWidth, 0), 100).toFixed(4); + newCoordinate.y = Math.min(Math.max((nodeElement.offsetTop + moveY) * 100 / nodeElement.parentElement.clientHeight, 0), 100).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } + } +} + +/** + * @param {HTMLElement} nodeElement + * @param {{x: number, y: number}} coordinates + */ +function node_assignTrackerCoordinates(nodeElement, coordinates) { + const inputPosX = document.getElementById("node_coordX"); + const inputPosY = document.getElementById("node_coordY"); + const inputCoordinate = document.getElementById("node_coordinate"); + + if(inputPosX && inputPosY && inputCoordinate) { + Object.assign(nodeElement.style, { + left: `${coordinates.x}%`, + top: `${coordinates.y}%` + }); + + inputPosX.value = coordinates.x; + inputPosY.value = coordinates.y; + inputCoordinate.value = JSON.stringify(coordinates); + } +} + +/** + * @param {HTMLInputElement} htmlInputElement + * @return {Promise} + */ +function node_formatScreenshot(htmlInputElement) { + return new Promise(function(resolve) { + if(htmlInputElement.files[0]) { + if(htmlInputElement.files[0]['type'].split('/')[0] === 'image') { + let fileName = htmlInputElement?.parentNode?.querySelector("input[name='file-path']")?.value; + + if(fileName) { + /** @type {HTMLCanvasElement} */ + const canvas = document.getElementById("transform-canvas"); + + if(canvas && canvas.getContext) { + const canvasContext = canvas.getContext("2d"); + const reader = new FileReader(); + const img = new Image(); + + canvasContext.clearRect(0, 0, canvasContext.canvas.width, canvasContext.canvas.height); + canvasContext.beginPath(); + canvasContext.closePath(); + + reader.onload = async function(progressEvent){ + img.src = /** @type {string} */ progressEvent.target.result; + } + + img.onload = function() { + let canvasSX = 0; + let canvasSY = 0; + let canvasSW = img.naturalWidth; + let canvasSH = img.naturalHeight; + + if(canvasSH > canvasSW) { + resolve(false); + } else { + canvasSX = (canvasSW - (canvasSH * 16 / 9)) / 2; + canvasSW = canvasSH * 16 / 9; + } + + canvasContext.drawImage(img, canvasSX, canvasSY, canvasSW, canvasSH, 0, 0, canvas.width, canvas.height); + + const fileData = atob(canvas.toDataURL("image/jpeg", 1).split(",")[1]); + let fileLength = fileData.length; + + const bitArray = new Uint8Array(fileLength); + while(fileLength--) { + bitArray[fileLength] = fileData.charCodeAt(fileLength); + } + + const fileList = new DataTransfer(); + fileList.items.add(new File([bitArray], `edit_${fileName.replace(/\.png$|\.jpg$/g,'.jpeg')}`, {type: "image/jpeg"})); + + htmlInputElement.files = fileList.files; + htmlInputElement.dispatchEvent(EVENT_change); + + resolve(true); + } + + reader.readAsDataURL(htmlInputElement.files[0]); + } else { + resolve(false); + } + } else { + resolve(false) + } + } else { + resolve(false); + } + } else { + resolve(null); + } + }); +} + +function worldmap_init() { + return new Promise(async function(resolve) { + await grid_setWidth(); + + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + IDB_database = await idb_openDatabase(IDB_databaseName, IDB_databaseVersion); + await worldmapProfiles_init(); + + if(GLOBAL_worldmapProfile) { + GLOBAL_region = new Region(worldmap.getAttribute("data-region-id"), worldmap.getAttribute("data-region-name")); + + /** @type {Object} */ + const _region = await idb_openTransaction("get", IDB_stores.RegionStore, { + keyPath: GLOBAL_region.slug + }); + + if(_region) { + GLOBAL_region.hydrate(_region); + } else { + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + let anchor = worldmap.dataset.anchor; + if(typeof anchor !== "undefined" && isJson(anchor)) { + anchor = JSON.parse(anchor); + + GLOBAL_region.zoomLevel = 8; + GLOBAL_region.scrollLeft = anchor.x; + GLOBAL_region.scrollTop = anchor.y; + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + document.documentElement?.style.setProperty("--grid__zoom", GLOBAL_region.zoomLevel.toString()); + await grid_initZoomController() + + worldmap.scrollLeft = Math.min(Math.max(Math.round((worldmap.scrollWidth * GLOBAL_region.scrollLeft / 100) - (worldmap.clientWidth / 2)), 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop = Math.min(Math.max(Math.round((worldmap.scrollHeight * GLOBAL_region.scrollTop / 100) - (worldmap.clientHeight / 2)), 0), worldmap.scrollHeight - worldmap.clientHeight); + + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_setMouseDown); + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_setMouseDown); + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchleave" : "mouseleave", mouseEvent_setMouseDown); + if(GLOBAL_isTouchDevice) { + worldmap.addEventListener("touchend", grid_resetPinchDistance); + worldmap.addEventListener("touchmove", grid_pinchSetZoon); + } else { + worldmap.addEventListener("wheel", grid_wheelSetZoom); + } + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", grid_setScroll); + worldmap.addEventListener("click", mouseEvent_preventClick); + worldmap.addEventListener("click", node_removeTooltip); + + await node_setIndexesAndCoordinaites(); + await worldmapFilter_Init(); + } else { + loader_show("", "Could not load a profile, please refresh the page"); + IDB_hadMigration = true; + } + } + + primogem_updateCounter(); + + resolve(); + }); +} + +/** + * @this {HTMLButtonElement} + */ +async function worldmap_handleEditionMode() { + const htmlButtonElement=this; + + if(htmlButtonElement.classList.contains("sp_button__active")) { + await worldmap_disableEditionMode(); + } else { + await worldmap_disableEditionMode(); + await worldmap_enableEditionMode(); + + htmlButtonElement.classList.add("sp_button__active"); + } +} + +async function worldmap_enableEditionMode(setEventListener=true) { + return new Promise(function(resolve) { + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + if(setEventListener) { + // for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + gridElement.addEventListener("click", node_queryNewForm); + } + } + + worldmap.classList.add("sp_worldmap__edit"); + } + + resolve(true); + }); +} + +function worldmap_disableEditionMode() { + return new Promise(async function(resolve) { + await node_unloadForm(); + + for(const _htmlButtonElement of /** @type {HTMLButtonElement[]} */ document.querySelectorAll(".sp_worldmark__init-new-node")) { + _htmlButtonElement.classList.remove("sp_button__active"); + } + + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + // for(const _gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const _gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + _gridElement.classList.remove("sp_grid__active"); + _gridElement.removeEventListener("click", node_queryNewForm); + } + + worldmap.classList.remove("sp_worldmap__edit", "sp_worldmap_locked"); + } + + resolve(true); + }); +} + +function worldmapFilter_Init() { + return new Promise(async function(resolve) { + const filters = {}; + + for(const htmlSpanElement of /** @type {HTMLSpanElement[]} */ document.querySelectorAll("#worldmap-filters .sp_panel__section-title h2 span")) { + const section = htmlSpanElement.closest(".sp_panel__section"); + const category = section?.querySelector(".sp_panel__section-title h2"); + + if(category?.dataset.sectionTitle) { + const localKey = removeDiacritics(`${category.dataset.sectionTitle}`).replace(/(\W|_)+/g, "").toLowerCase(); + + if(window.localStorage.getItem(`map.genshin.filter.section.${localKey}.state`) === "closed") { + section.classList.add("sp_panel__section-closed"); + } + } + + htmlSpanElement.addEventListener("click", worldmapFilter_sectionCollapse); + } + + for(const htmlButtonElement of /** @type {HTMLButtonElement[]} */ document.querySelectorAll("#worldmap-filters .sp_section-filter__switch")) { + htmlButtonElement.addEventListener("click", worldmapFilter_switchDisplayAll); + } + + const _filters = await idb_openTransaction("getAll", IDB_stores.FilterStore, { + index: ["region", GLOBAL_region.slug] + }); + + if(_filters && Array.isArray(_filters)) { + for(const _filter of _filters) { + filters[_filter["slug"]] = _filter; + } + } + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + filterInputElement.checked = filterInputElement.value in filters ? Boolean(filters[filterInputElement.value]["isActive"]) : false; + + worldmapFilter_updateCounter(filterInputElement); + + filterInputElement.addEventListener("change", worldmapFilter_switchDisplay); + filterInputElement.dispatchEvent(EVENT_change); + } + + for(const htmlElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_worldmark__init-new-node")) { + htmlElement.addEventListener("click", worldmap_handleEditionMode); + } + + GLOBAL_worldmapFilter_isInitialized = true; + + resolve(true); + }); +} + +/** @this {HTMLElement} */ +function worldmapFilter_sectionCollapse() { + const section = this.closest(".sp_filter__section"); + + if(section) { + const sectionTitle = section.querySelector("h2")?.dataset.sectionTitle; + let localKey = null + + if(sectionTitle) { + localKey = removeDiacritics(`${sectionTitle}`).replace(/(\W|_)+/g, "").toLowerCase(); + } + + if(section.classList.contains("sp_panel__section-closed")) { + if(localKey) { + window.localStorage.setItem(`map.genshin.filter.section.${localKey}.state`, "open"); + } + + section.classList.remove("sp_panel__section-closed"); + } else { + if(localKey) { + window.localStorage.setItem(`map.genshin.filter.section.${localKey}.state`, "closed"); + } + + section.classList.add("sp_panel__section-closed"); + } + } +} + +function worldmapFilter_updateCounter(filterInputElement) { + const counterElement = filterInputElement.parentElement?.querySelector(".nodes_count"); + + if(counterElement) { + let counter; + + let total = 0; + let hidden = 0; + + const nodesList = document.querySelectorAll(`#worldmap-container .sp_node__item[data-filter='${filterInputElement.value}']`); + + for(const _node of /** @type {HTMLElement[]} */nodesList) { + if(typeof _node.dataset.quantity !== "undefined") { + total += Number(_node.dataset.quantity); + + if(_node.classList.contains("sp_node__collected")) { + hidden += Number(_node.dataset.quantity); + } + } + } + + if(Number(filterInputElement.dataset.canBeHidden) !== 1) { + hidden = total; + } + + counter = `${hidden}/${total}` + + counterElement.innerText = counter; + } +} + +/** + * @this {HTMLInputElement} + */ +async function worldmapFilter_switchDisplay() { + const filterInputElement = this; + + for(const nodeElement of /** @type {HTMLLabelElement[]} */ document.querySelectorAll(`.sp_node__item[data-filter='${filterInputElement.value}']`)) { + if(filterInputElement.checked) { + nodeElement.classList.remove("sp_node__hidden"); + } else { + nodeElement.classList.add("sp_node__hidden"); + } + } + + if(GLOBAL_worldmapFilter_isInitialized) { + await worldmapFilter_saveDisplay(); + } +} + +/** + * @this {HTMLButtonElement} + */ +async function worldmapFilter_switchDisplayAll() { + const htmlButtonElement = this; + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ htmlButtonElement.closest(".sp_filter__section") + .querySelectorAll(".sp_worldmap-filter__section .sp_worldmap__filter")) { + if(htmlButtonElement.value === "show_all") { + filterInputElement.checked = true; + } else if(htmlButtonElement.value === "hide_all") { + filterInputElement.checked = false; + } + + filterInputElement.dispatchEvent(EVENT_change); + } +} + +async function worldmapFilter_saveDisplay() { + node_removeTooltip(); + + if(IDB_database) { + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + await idb_openTransaction("put", IDB_stores.FilterStore, { + data: new Filter(GLOBAL_region.slug, filterInputElement.value, filterInputElement.checked) + }); + } + } +} + +function worldmapProfiles_init() { + return new Promise(async function(resolve) { + if(IDB_database) { + const profiles = IDB_database + ? await idb_openTransaction("getAll", IDB_stores.ProfileStore, {}) + : []; + //ToDo check is empty array pass condition + if(profiles) { + const profilesContainer = document.getElementById("profiles__profiles-container"); + const serverContainer = document.getElementById("profiles__servers-container"); + + if(!profiles.length) { + const profile = new Profile("profile-a", "Profile A"); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + + profiles.push(profile.dehydrate()); + } + + if(profilesContainer && serverContainer) { + for(const _profile of /** @type {Object[]} */ profiles) { + const profile = new Profile(); + profile.hydrate(_profile); + + if(!["cn", "eu", "na"].includes(profile.server)) { + profile.server = "eu"; + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + } + + /** @type {HTMLInputElement|null} */ + let profileInputElement = profilesContainer.querySelector(`.sp_radio__input-wrapper input[name='_profile'][value='${profile.slug}']`); + + if(profileInputElement) { + const profileLabelElement = profileInputElement.parentElement.querySelector(".sp_radio__input-label"); + + if(profileLabelElement) { + profileLabelElement.innerText = profile.name; + } + + if(profile.isActive) { + profileInputElement.checked = true; + profileInputElement.dispatchEvent(EVENT_change); + + /** @type {HTMLInputElement|null} */ + const serverInputElement = serverContainer.querySelector(`.sp_radio__input-wrapper input[value='${profile.server}']`); + + if(serverInputElement) { + serverInputElement.checked = true; + serverInputElement.dispatchEvent(EVENT_change); + + GLOBAL_worldmapProfile = profile; + } + } + } + } + + profilesContainer.addEventListener("change", worldmapProfiles_switchProfile); + serverContainer.addEventListener("change", worldmapProfiles_switchServer); + } + } + } else { + GLOBAL_worldmapProfile = new Profile("anonymous", "Anonymous"); + } + + resolve(true); + }); +} + +async function worldmapProfiles_switchProfile() { + const profileInputElement = /** @type {HTMLInputElement} */ document.querySelector("#profiles__profiles-container input[name='_profile']:checked"); + + if(GLOBAL_worldmapProfile instanceof Profile && profileInputElement) { + loader_show("Loading profile", "DO NOT refresh the page !"); + + const profile = new Profile(); + const _profile = /** @type {{ slug: string, name: string, server: string, isActive: boolean }|null} */ + await idb_openTransaction("get", IDB_stores.ProfileStore, { + keyPath: removeDiacritics(profileInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase() + }); + + if(!_profile) { + profile.slug = removeDiacritics(profileInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase(); + profile.name = profileInputElement.parentElement.querySelector(".sp_radio__input-label")?.innerText; + } else { + profile.hydrate(_profile); + profile.isActive = true; + } + GLOBAL_worldmapProfile.isActive = false; + + const serverContainer = document.getElementById("profiles__servers-container"); + const serverInputElement = /** @type{HTMLInputElement} */ serverContainer?.querySelector(`.sp_radio__input-wrapper input[value='${profile.server}']`); + + if(serverInputElement) { + serverContainer.removeEventListener("change", worldmapProfiles_switchServer); + + serverInputElement.checked = true + serverInputElement.dispatchEvent(EVENT_change); + + serverContainer.addEventListener("change", worldmapProfiles_switchServer); + } + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: GLOBAL_worldmapProfile + }); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + + GLOBAL_worldmapProfile = profile; + + await node_resetCollected(); + await node_setCollected(); + primogem_updateCounter(); + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + worldmapFilter_updateCounter(filterInputElement); + } + + loader_hide(); + } +} + +async function worldmapProfiles_switchServer() { + const serverContainer = document.getElementById("profiles__servers-container"); + const serverInputElement = /** @type{HTMLInputElement} */ serverContainer?.querySelector(`.sp_radio__input-wrapper input:checked`); + + if(serverInputElement) { + GLOBAL_worldmapProfile.server = removeDiacritics(serverInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase(); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: GLOBAL_worldmapProfile + }); + } +} + +function primogem_updateCounter() { + const primogemContainer = document.getElementById("primogem-counter-container"); + const counterContainer = primogemContainer?.querySelector("#primogem-counter"); + + if(counterContainer) { + let counter = 0; + const nodeElement = document.querySelectorAll(".sp_node__item:not(.sp_node__collected)[data-primogem]:not([data-primogem='0'])"); + + for(const _node of nodeElement) { + if(!isNaN(Number(_node.dataset.primogem))) { + counter += Number(_node.dataset.primogem); + } + } + + counterContainer.innerText = counter.toString(); + + if(counter === 0) { + primogemContainer.classList.add("sp_primogem__complete"); + } else { + primogemContainer.classList.remove("sp_primogem__complete"); + } + } +} +// + +// +function worldmarkForm_init() { + return new Promise(function(resolve) { + document.getElementById("worldmark_item")?.addEventListener("change", worldmarkForm_prefillInputs); + document.getElementById("worldmark_monster")?.addEventListener("change", worldmarkForm_prefillInputs); + + document.getElementById("worldmark__content-filter")?.addEventListener("change", worldmarkForm_resetForm); + + resolve(); + }); +} + +function worldmarkForm_prefillInputs() { + /** @type {HTMLInputElement} */ + const nameInput = document.getElementById("worldmark_name"); + /** @type {HTMLSelectElement} */ + const itemSelect = document.getElementById("worldmark_item"); + /** @type {HTMLSelectElement} */ + const monsterSelect = document.getElementById("worldmark_monster") + + if(nameInput) { + if(itemSelect && itemSelect.selectedIndex !== 0) { + nameInput.value = itemSelect.options[itemSelect.selectedIndex].innerText + } + + if(monsterSelect && monsterSelect.selectedIndex !== 0) { + nameInput.value = monsterSelect.options[monsterSelect.selectedIndex].innerText + } + + nameInput.dispatchEvent(EVENT_keyup); + } +} + +function worldmarkForm_resetForm() { + document.getElementById("form__worldmark")?.reset(); +} +// + +/** + * @param {string} type + * @param {string} name + * @param {string} value + * @param {string|null} extra + */ +function paq_event({type, name, value, extra = null}) { + window._paq.push([type, name, value, extra]); +} + +window.addEventListener("DOMContentLoaded", async function() { + loader_show("Loading data, please wait"); + + await touchDeviceInit(); + await radio_initListeners(); + await form_init(); + await slug_init(); + + //BO + await contentFilter_init(); + await worldmarkForm_init(); + + //FO + await panelSwitch_init(); + await slider__init(); + await worldmap_init(); + + await dom_isLoaded(); + + if(!IDB_hadMigration) { + loader_hide(); + } + + // log(IDB_database); +}); + +// common-chest - 2 +// exquisite-chest - 5 +// challenge - 5 ? +// precious-chest - 10 +// shrine - 40 \ No newline at end of file diff --git a/assets/css/_vars.scss b/assets/css/_vars.scss new file mode 100644 index 0000000..5a00ae2 --- /dev/null +++ b/assets/css/_vars.scss @@ -0,0 +1,27 @@ +$cl_black: rgb(0, 0, 0); +$cl_gray: rgb(128, 128, 128); +$cl_white: rgb(255, 255, 255); + +$cl_anemo: rgb(39, 161, 146); +$cl_pyro: rgb(190, 40, 40); +$cl_hydro: rgb(34, 143, 186); +$cl_electro: rgb(109, 81, 184); +$cl_cryo: rgb(128, 172, 211); +$cl_dendro: rgb(83, 153, 100); +$cl_geo: rgb(214, 153, 64); + +$cl_common: rgb(55, 180, 140); +$cl_rare: rgb(80, 130, 205); +$cl_epic: rgb(160, 65, 225); +$cl_legendary: rgb(215, 125, 55); +$cl_challenge: rgb(190, 40, 40); +$cl_seelie: rgb(25, 225, 215); + +$cl_sand: rgb(120, 106, 80); +$cl_sea: rgb(27, 40, 59); + +$cl_ui_dark: rgb(74, 83, 102); +$cl_ui_darker: rgb(40, 46, 61); +$cl_ui_shell: rgb(183, 186, 194); +$cl_ui_light: rgb(236, 229, 216); +$cl_ui_hover: rgb(217, 167, 98); \ No newline at end of file diff --git a/assets/css/font.scss b/assets/css/font.scss new file mode 100644 index 0000000..309667e --- /dev/null +++ b/assets/css/font.scss @@ -0,0 +1,31 @@ +@font-face { + font-family: 'ptsans_regular'; + src: url('../font/ptsans-regular.woff2') format('woff2'), + url('../font/ptsans-regular.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_bold'; + src: url('../font/ptsans-bold.woff2') format('woff2'), + url('../font/ptsans-bold.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_italic'; + src: url('../font/ptsans-italic.woff2') format('woff2'), + url('../font/ptsans-italic.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_bold_italic'; + src: url('../font/ptsans-bolditalic.woff2') format('woff2'), + url('../font/ptsans-bolditalic.woff') format('woff'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/assets/css/layout.scss b/assets/css/layout.scss new file mode 100644 index 0000000..4ac7bf4 --- /dev/null +++ b/assets/css/layout.scss @@ -0,0 +1,53 @@ +body { + overflow: hidden; +} + +#page-container { + display: flex; + flex-direction: column; + height: 100vh; + overflow: hidden; + width: 100vw; +} + +#header-container, #footer-container { + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + overflow: hidden; + padding: 0 20px; + z-index: 2; +} + +#header-container { + max-height: 64px; +} + +#main-container { + display: flex; + flex-direction: row; + flex-grow: 1; + flex-wrap: nowrap; + overflow: hidden; + z-index: 1; +} + +#main-left-container, #main-center-container, #main-right-container { + display: flex; + flex-direction: column; + overflow: hidden; +} + +#main-left-container, #main-right-container { + flex-shrink: 0; +} + +#main-center-container { + flex-grow: 1; + max-width: 100%; +} + +#footer-container { + max-height: 32px; +} \ No newline at end of file diff --git a/assets/css/normalize.scss b/assets/css/normalize.scss new file mode 100644 index 0000000..2be717b --- /dev/null +++ b/assets/css/normalize.scss @@ -0,0 +1,198 @@ +html { + box-sizing: border-box; + font-size: 16px; + height: 100vh; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + width: 100vw; +} + +* { + box-sizing: border-box; + position: relative; + &:before, &:after { + box-sizing: border-box; + } + //&:focus { + // outline: none; + //} +} + +body { + height: 100vh; + margin: 0; + width: 100vw; +} + +main { + display: block; +} + +a { + background-color: transparent; + color: inherit; + text-decoration: none; + &:visited, &:hover, &:active, &:focus { + color: inherit; + } +} + +abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +b, strong { + font-weight: bolder; +} + +button, input, optgroup, select, textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, input { + overflow: visible; +} + +button, select { + text-transform: none; +} + +details { + display: block; +} + +div, textarea, table, td, th, code, pre, samp { + word-wrap: break-word; + hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; +} + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +img { + border-style: none; + max-width: 100%; + height: auto; +} + +a, button, input, select, textarea { + &:focus { + outline: none; + } +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +pre, code, kbd, samp { + font-family: monospace, monospace; + font-size: 1em; + white-space: pre-wrap; +} + +progress { + vertical-align: baseline; +} + +small { + font-size: 80%; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +summary { + display: list-item; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +textarea { + overflow: auto; +} + +template { + display: none; +} + +button, [type="button"], [type="reset"], [type="submit"] { + -webkit-appearance: button; + &:hover { + cursor: pointer; + } + &::-moz-focus-inner, &::-moz-focus-inner, &::-moz-focus-inner, &::-moz-focus-inner { + border-style: none; + padding: 0; + } + &:-moz-focusring, &:-moz-focusring, &:-moz-focusring, &:-moz-focusring { + outline: 1px dotted ButtonText; + } +} + +[type="checkbox"], [type="radio"] { + padding: 0; +} + +[type="number"] { + //-moz-appearance: textfield; + &::-webkit-inner-spin-button, &::-webkit-outer-spin-button { + height: auto; + //-webkit-appearance: none; + } +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; + &::-webkit-search-decoration { + -webkit-appearance: none; + } +} + +[hidden] { + display: none !important; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} \ No newline at end of file diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 0000000..446a8b7 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,2455 @@ +@use "sass:color"; +@use "sass:math"; +@use "sass:string"; +@import "vars"; + +:root { + --icon__default-height: 48px; + + --grid__height: 5; + --grid__width: 5; + --grid__zoom: 1; + + --loader__icon-size: 48px; + --loader__line-color: #{$cl_geo}; + --loader__ground-line-size: 8px; + --loader__slime__size: 300px; + --loader__slime__outline-width: 10px; + --loader__slime__offset: 10px; + + --pannel__width: 400px; +} + +body { + font-family: ptsans_regular, sans-serif; +} + +#transform-canvas { + left: 50%; + opacity: 0; + position: fixed; + top: 50%; + transform: translate(-50%, -50%); + z-index: -100; +} + +#page-background { + background: url('./../img/background.jpg') no-repeat center; + background-size: cover; + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; +} + +#page-container { + form { + &.sp_form__uploading { + filter: blur(4px); + &:after { + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 10; + } + } + } + + /* *** CLASS GENERIC *** */ + .sp_flex__filler { + flex-grow: 1; + } + .sp_invert { + filter: invert(0.5); + } + .sp_grayscale { + filter: grayscale(1); + } + .sp_icon__container { + display: flex; + flex-direction: column; + overflow: hidden; + user-select: none; + img { + margin: auto; + height: var(--icon__default-height); + width: auto; + } + } + .sp_button { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + display: flex; + height: 36px; + overflow: hidden; + padding: 0; + width: 140px; + span { + color: $cl_white; + display: block; + margin: auto; + padding: 0 6px; + user-select: none; + } + &.sp_button__active { + background-color: $cl_geo; + } + &:hover { + background-color: $cl_ui_hover; + &[data-type='cancel'] { + background-color: $cl_pyro; + } + &[data-type='validate'] { + background-color: $cl_dendro; + } + } + } + + /* *** FORM COMPONENTS *** */ + [class*='sp_form-row'] { + margin-bottom: 6px; + max-width: 400px; + overflow: hidden; + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + height: 36px; + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select, .sp_form-row__textarea { + background-color: $cl_white; + //border: 1px solid $cl_ui_dark; + border-radius: 6px; + > label { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: inherit; + color: $cl_white; + flex-shrink: 0; + line-height: 30px; + min-width: 90px; + max-width: 70%; + overflow: hidden; + padding: 0 6px; + text-overflow: ellipsis; + user-select: none; + white-space: nowrap; + transition: max-width ease-in 250ms; + } + &:hover, &:focus-within { + label { + background-color: $cl_ui_hover; + } + } + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select, .sp_form-row__textarea { + input[type='text'], select, textarea { + border: 2px solid $cl_white; + flex-shrink: 1; + font-size: 16px; + padding: 0 2px; + width: 100%; + } + input[type='text'], select { + line-height: 30px; + } + } + .sp_form-row__text, .sp_form-row__select { + &:focus-within { + label { + max-width: 90px; + transition: max-width ease-out 250ms; + } + } + } + .sp_form-row__button { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 6px; + height: 36px; + .sp_button { + width: auto; + } + } + .sp_form-row__file { + input { + &[type='file'] { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 2; + &:hover { + cursor: pointer; + } + } + } + .sp_input__file-preview { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + flex-shrink: 0; + padding: 1px; + width: 36px; + img { + height: 100%; + width: auto; + } + } + } + + // + //.sp_form-row__radio { + // display: flex; + // flex-direction: column; + // &.sp_form-row__radio-wrapper { + // border-left: 4px solid $cl_ui_dark; + // border-right: 4px solid $cl_ui_dark; + // border-radius: 6px; + // padding: 0 4px; + // } + // //background-color: $cl_white; + // //border: 1px solid $cl_ui_dark; + // //border-radius: 6px; + // > label { + // background-color: $cl_ui_dark; + // border: 2px solid $cl_white; + // border-radius: 6px; + // color: $cl_white; + // flex-shrink: 0; + // line-height: 30px; + // margin-bottom: 2px; + // max-width: none; + // overflow: hidden; + // padding: 0 6px; + // text-overflow: ellipsis; + // user-select: none; + // white-space: nowrap; + // width: 100%; + // } + // .sp_radio__container { + // > label { + // display: flex; + // flex-direction: row; + // overflow: hidden; + // } + // $boxDim: 16px; + // .sp_checkbox__text, .sp_radio__text { + // background-color: $cl_white; + // border-radius: 4px; + // line-height: 20px; + // .sp_radio__label { + // background-color: rgba($cl_pyro, 0.6); + // border: 2px solid $cl_white; + // border-radius: inherit; + // color: $cl_white; + // overflow: hidden; + // padding: 0 6px 0 (8px + $boxDim); + // text-overflow: ellipsis; + // width: 100%; + // white-space: nowrap; + // &:before { + // background-color: transparent; + // border: 1px solid $cl_white; + // content: ''; + // height: $boxDim; + // left: 2px; + // position: absolute; + // top: 50%; + // transform: translateY(-50%); + // width: $boxDim; + // } + // } + // &.sp_radio__checked { + // .sp_radio__label { + // background-color: $cl_dendro; + // &:before { + // background-color: $cl_white; + // } + // } + // } + // } + // .sp_checkbox__text { + // .sp_radio__label { + // &:before { + // border-radius: 2px; + // } + // } + // } + // .sp_radio__text { + // .sp_radio__label { + // &:before { + // //border-radius: math.div($boxDim, 2); + // border-radius: math.div($boxDim, 2); + // } + // } + // } + // .sp_radio__enhanced { + // //&.sp_invert { + // // filter: invert(0.5); + // //} + // //&.sp_grayscale { + // // filter: grayscale(1); + // //} + // //&.sp_radio__checked { + // // &.sp_invert { + // // filter: invert(0); + // // } + // // &.sp_grayscale { + // // filter: grayscale(0); + // // } + // //} + // &:hover, *:hover { + // cursor: pointer; + // } + // } + // + // &.sp_radio__layout-inline { + // display: flex; + // flex-direction: row; + // flex-wrap: wrap; + // > label { + // margin: 0 6px 6px 0; + // &:last-child { + // margin-right: 0; + // } + // } + // } + // &.sp_radio__layout-grid-b { + // display: grid; + // grid-template-columns: repeat(2, 1fr); + // grid-gap: 4px; + // } + // &.sp_radio__layout-grid-c { + // display: grid; + // grid-template-columns: repeat(2, 1fr 24px); + // grid-gap: 4px; + // } + // + // &.sp_radio__invert { + // .sp_radio__enhanced { + // filter: invert(0.5); + // &.sp_radio__checked { + // filter: invert(0); + // } + // } + // } + // &.sp_radio__grayscale { + // .sp_radio__enhanced { + // filter: grayscale(1); + // &.sp_radio__checked { + // filter: grayscale(0); + // } + // } + // } + // + // input { + // display: none; + // } + // } + // &:hover { + // > label { + // background-color: $cl_ui_hover; + // } + // } + //} + // + .sp_form-row__radio { + display: flex; + flex-direction: column; + .sp_radio__main-label { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + color: $cl_white; + flex-shrink: 0; + line-height: 30px; + margin-bottom: 4px; + max-width: none; + overflow: hidden; + padding: 0 6px; + text-overflow: ellipsis; + user-select: none; + white-space: nowrap; + width: 100%; + } + .sp_radio__input-wrapper { + background-color: $cl_white; + border-radius: 4px; + cursor: pointer; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow: hidden; + .sp_radio__input-icon, .sp_radio__input-mark { + position: absolute; + left: 2px; + top: 50%; + transform: translateY(-50%); + } + .sp_radio__input-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + input { + &[type="checkbox"], + &[type="radio"] { + display: none; + } + } + &:not(.sp_radio__checked) { + .sp_radio__input-label { + color: $cl_ui_shell; + } + } + } + + &.sp_radio__layout-inline { + .sp_radio__container { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + .sp_radio__wrapper { + margin: 0 6px 6px 0; + &:last-child { + margin-right: 0; + } + } + } + + &[class*="sp_radio__layout-grid"] { + .sp_radio__container { + display: grid; + grid-gap: 4px; + } + } + &.sp_radio__layout-grid-a { + .sp_radio__container { + grid-template-columns: 1fr; + } + } + &.sp_radio__layout-grid-b { + .sp_radio__container { + grid-template-columns: repeat(2, 1fr); + } + } + &.sp_radio__layout-grid-c { + .sp_radio__container { + grid-template-columns: repeat(2, 1fr 24px); + } + } + + &.sp_radio__style-text { + .sp_radio__input-wrapper { + height: 24px; + padding: 0 4px 0 26px; + .sp_radio__input-mark { + background-color: #ff8888; + box-shadow: + inset 1px 1px 0 rgba($cl_ui_dark, 0.5), + inset 0 0 1px rgba($cl_ui_dark, 0.5); + display: flex; + height: 20px; + width: 20px; + &:before { + content: ""; + } + } + .sp_radio__input-label { + line-height: 24px; + } + &.sp_radio__type-checkbox, &.sp_radio__type-radio { + .sp_radio__input-icon { + display: none; + } + } + &.sp_radio__type-checkbox { + .sp_radio__input-mark { + border-radius: 4px; + &:before, + &:after { + background-color: $cl_white; + box-shadow: none; + height: 14px; + margin: auto; + width: 2px; + transform: rotate(45deg); + } + &:after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + } + } + } + &.sp_radio__type-radio { + .sp_radio__input-mark { + border-radius: 50%; + &:before { + background-color: transparent; + border: 1px solid $cl_white; + box-shadow: none; + border-radius: 50%; + height: 12px; + margin: auto; + width: 12px; + } + } + } + &.sp_radio__checked { + color: $cl_ui_dark; + .sp_radio__input-mark { + background-color: $cl_dendro; + &:before { + box-shadow: 1px 1px 0 rgba($cl_ui_dark, 0.5); + } + } + &.sp_radio__type-checkbox { + .sp_radio__input-mark { + &:before { + background-color: transparent; + border-bottom: 3px solid $cl_white; + border-right: 3px solid $cl_white; + height: 12px; + margin: auto; + transform: rotate(45deg); + width: 6px; + } + &:after { + content: none; + } + } + } + &.sp_radio__type-radio { + .sp_radio__input-mark { + &:before { + background-color: $cl_white; + border: none; + } + } + } + } + } + } + + &.sp_radio__style-icon, &.sp_radio__style-button { + .sp_radio__input-wrapper { + line-height: unset; + &.sp_radio__type-checkbox, &.sp_radio__type-radio { + .sp_radio__input-mark { + display: none; + } + &:not(.sp_radio__checked) { + .sp_radio__input-icon { + filter: grayscale(1); + } + } + } + } + } + &.sp_radio__style-icon { + .sp_radio__input-wrapper { + height: 34px; + padding: 0 4px 0 36px; + .sp_radio__input-icon { + display: block; + height: 34px; + width: 34px; + > * { + display: block; + width: 34px; + } + } + .sp_radio__input-label { + line-height: 34px; + } + } + } + &.sp_radio__style-button { + .sp_radio__input-wrapper { + height: 48px; + margin-right: 6px; + padding: 0 0 0 48px; + .sp_radio__input-icon { + display: block; + height: 48px; + width: 48px; + > * { + display: block; + width: 48px; + } + } + .sp_radio__input-label { + display: none; + } + } + } + } + .sp_form-row__textarea { + display: flex; + flex-direction: column; + label { + max-width: 100%; + width: 100%; + } + textarea { + resize: none; + min-height: 120px; + } + } + .sp_form-row_inline-container { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 6px; + > [class*='sp_form-row'] { + margin: 0; + } + } + + /* *** CLASS TEMPLATES *** */ + .sp_menu-btn { + cursor: pointer; + display: flex; + flex-shrink: 0; + height: 64px; + padding: 10px; + width: 64px; + .sp_menu-btn__bars { + background-color: white; + height: 6px; + margin: auto; + overflow: visible; + width: 44px; + //transition: background-color 250ms ease-out; + transform: rotate(0deg); + transition: transform 250ms ease-in; + &:before, &:after { + background-color: white; + content: ""; + height: 6px; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + width: 44px; + transition: transform 250ms ease-in, top 250ms ease-in; + } + &:before { + top: calc(50% - 12px); + } + &:after { + top: calc(50% + 12px); + } + } + &.sp_nav__nav-open { + .sp_menu-btn__bars { + transform: rotate(45deg); + transition: transform 250ms ease-in; + &:before, &:after { + transition: transform 250ms ease-in, top 250ms ease-in; + } + &:before { + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + } + &:after { + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + } + } + } + } + .ul_nav__wrapper { + overflow: visible; + ul, li { + list-style: none; + margin: 0; + padding: 0; + } + .ul_nav { + display: flex; + flex-direction: row; + height: 64px; + margin: 0 auto; + overflow: visible; + padding: 0 80px; + .ul_nav__head, .ul_nav__tail, .ul_nav__item { + flex-shrink: 0; + height: 64px; + > *:not(.ul_nav__sub-nav) { + height: 64px; + } + } + .ul_nav__head, .ul_nav__tail { + background-color: $cl_geo; + position: absolute; + width: 64px; + z-index: 1; + > * { + width: 64px; + } + } + .ul_nav__head { + left: 0; + } + .ul_nav__tail { + right: 0; + } + .ul_nav__item { + color: $cl_ui_light; + display: flex; + flex-direction: column; + overflow: hidden; + width: 120px; + > a { + background-color: $cl_ui_darker; + display: flex; + flex-shrink: 0; + height: 64px; + overflow: hidden; + padding: 0 12px; + width: inherit; + z-index: 2; + .ul_nav__underline { + background-color: rgba($cl_ui_light, 0.2); + bottom: 0; + height: 2px; + left: 6px; + position: absolute; + right: 6px; + z-index: 2; + } + .ul_nav__item-title { + margin: auto; + font-weight: normal; + font-size: 16px; + line-height: 18px; + } + &.ul_nav__link-active { + color: $cl_geo; + font-family: ptsans_bold, sans-serif; + .ul_nav__underline { + background-color: $cl_geo; + } + } + &:hover { + background-color: $cl_ui_dark; + } + &:not(.ul_nav__link-active) { + &:hover { + color: $cl_ui_hover; + .ul_nav__underline { + background-color: $cl_ui_hover; + } + } + } + } + } + > .ul_nav__item { + overflow: visible; + z-index: 2; + &:nth-child(2), &:nth-last-child(2) { + > a { + overflow: visible; + &:after { + content: ''; + display: block; + position: absolute; + top: 0; + } + } + } + &:nth-child(2) { + > a { + &:after { + border-top: 64px solid $cl_geo; + border-right: 16px solid $cl_ui_darker; + left: -16px; + } + &:hover { + &:after { + border-right: 16px solid $cl_ui_dark; + } + } + } + } + &:nth-last-child(2) { + > a { + &:after { + border-bottom: 64px solid $cl_geo; + border-left: 16px solid $cl_ui_darker; + right: -16px; + } + &:hover { + &:after { + border-left: 16px solid $cl_ui_dark; + } + } + } + } + &:hover { + height: auto; + .ul_nav__sub-nav { + max-height: 256px; + transition: max-height ease-in 350ms; + } + } + } + } + .ul_nav__sub-nav { + box-shadow: 0 0 10px -4px $cl_ui_light; + display: flex; + flex-direction: column; + flex-shrink: 0; + max-height: 0; + overflow: hidden; + transition: max-height ease-out 250ms; + z-index: 1; + .ul_nav__item { + a { + &.ul_nav__link-active { + color: $cl_dendro; + font-family: ptsans_regular, sans-serif; + .ul_nav__underline { + background-color: $cl_dendro; + } + } + } + } + } + } + .sp_nav { + display: flex; + flex-direction: row; + .sp_nav__wrapper, .sp_nav__item { + display: flex; + flex-direction: column; + flex-shrink: 0; + height: 64px; + overflow: hidden; + width: 140px; + } + .sp_nav__wrapper { + height: 128px; + } + .sp_nav__item { + color: $cl_ui_light; + padding: 0 12px; + .sp_nav__indicator, .sp_nav__underline, .sp_nav__cursor { + z-index: 2; + } + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_ui_light; + opacity: 0.2; + position: absolute; + } + .sp_nav__indicator, .sp_nav__cursor { + display: none; + } + .sp_nav__underline { + bottom: 0; + height: 2px; + left: 4px; + right: 4px; + } + .sp_nav__title { + margin: auto; + z-index: 1; + } + &.sp_nav__active { + //background-color: $cl_ui_light; + color: $cl_geo; + font-family: ptsans_bold, sans-serif; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_geo; + opacity: 1; + } + } + &:not(.sp_nav__active):hover { + //.sp_nav__indicator, .sp_nav__underline { + color: $cl_ui_hover; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_geo; + opacity: 0.8; + } + } + } + &.sp_nav__vertical { + flex-direction: column; + .sp_nav__item { + background-color: rgba($cl_ui_dark, 0.8); + margin-bottom: 6px; + padding-left: 16px; + width: 160px; + .sp_nav__indicator { + display: block; + height: 100%; + left: 0; + top: 0; + width: 6px; + } + .sp_nav__cursor { + display: none; + background-color: transparent; + border: 12px solid transparent; + border-left-color: $cl_dendro; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + } + .sp_nav__underline { + left: 10px; + } + .sp_nav__title { + margin: auto 0; + } + &.sp_nav__sub-item { + height: 48px; + margin-left: auto; + width: 140px; + } + &.sp_nav__active { + background-color: $cl_ui_light; + color: $cl_ui_dark; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_dendro; + } + .sp_nav__cursor { + display: block; + } + } + } + } + } + // + //.sp_grid__container { + // display: flex; + // flex-direction: column; + // flex-wrap: nowrap; + // .sp_grid__row { + // display: flex; + // flex-direction: row; + // flex-shrink: 0; + // } + // .sp_grid__column { + // //padding-top: calc(100% / var(--grid__width) * var(--grid__zoom)); + // user-select: none; + // flex-shrink: 0; + // height: calc(512px + (64px * var(--grid__zoom))); + // width: calc(512px + (64px * var(--grid__zoom))); + // //width: calc(100% / var(--grid__width) * var(--grid__zoom)); + // .sp_grid__map, .sp_grid__node-container, .sp_grid__map-form { + // height: 100%; + // left: 0; + // position: absolute; + // top: 0; + // width: 100%; + // } + // .sp_grid__map { + // z-index: 1; + // } + // .sp_grid__node-container { + // z-index: 3; + // .sp_node__item { + // position: absolute; + // z-index: 1; + // &.sp_node__collected:not(.sp_node__deleted) { + // opacity: 0.3; + // } + // &.sp_node__hidden { + // display: none; + // } + // &.sp_node__deleted { + // &:before, &:after { + // border-top: 4px solid $cl_pyro; + // content: ''; + // height: 0; + // left: 50%; + // position: absolute; + // top: 50%; + // width: 40px; + // z-index: 3; + // } + // &:before { + // transform: translate(-50%, -50%) rotate(-45deg); + // } + // &:after { + // transform: translate(-50%, -50%) rotate(45deg); + // } + // } + // } + // } + // .sp_grid__map-form { + // z-index: 4; + // input[type='file'] { + // height: 100%; + // left: 0; + // opacity: 0; + // position: absolute; + // top: 0; + // width: 100%; + // } + // &:hover { + // background-color: rgba($cl_ui_dark, 0.2); + // } + // } + // &:before { + // bottom: 0; + // content: ''; + // left: 0; + // position: absolute; + // right: 0; + // top: 0; + // z-index: 2; + // } + // } + //} + // + .sp_grid__container { + display: grid; + grid-template-rows: repeat(var(--grid__height), calc(256px + (64px * var(--grid__zoom)))); + grid-template-columns: repeat(var(--grid__width), calc(256px + (64px * var(--grid__zoom)))); + .sp_grid__cell { + user-select: none; + //flex-shrink: 0; + //height: calc(512px + (64px * var(--grid__zoom))); + //width: calc(512px + (64px * var(--grid__zoom))); + .sp_grid__map, .sp_grid__node-container, .sp_grid__map-form { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + } + .sp_grid__map { + z-index: 1; + } + .sp_grid__node-container { + z-index: 3; + .sp_node__item { + position: absolute; + z-index: 1; + &.sp_node__collected:not(.sp_node__deleted) { + opacity: 0.3; + } + &.sp_node__hidden { + display: none; + } + &.sp_node__deleted { + &:before, &:after { + border-top: 4px solid $cl_pyro; + content: ''; + height: 0; + left: 50%; + position: absolute; + top: 50%; + width: 40px; + z-index: 3; + } + &:before { + transform: translate(-50%, -50%) rotate(-45deg); + } + &:after { + transform: translate(-50%, -50%) rotate(45deg); + } + } + } + } + .sp_grid__map-form { + z-index: 4; + input[type='file'] { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + } + &:hover { + background-color: rgba($cl_ui_dark, 0.2); + } + } + &:before { + bottom: 0; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 2; + } + } + } + .sp_dashboard__container { + background-color: $cl_ui_light; + display: flex; + flex-direction: column; + overflow-x: hidden; + overflow-y: auto; + padding: 8px 12px; + width: 100%; + } + .sp_node__item { + $outer_dim: 34px; + height: $outer_dim; + width: $outer_dim; + .sp_node__background { + $inner_dim: 70.6%; + border: 2px solid white; + background-color: $cl_ui_dark; + border-radius: 4px; + height: $inner_dim; + left: 50%; + overflow: hidden; + position: absolute; + top: 50%; + transform: translate(-50%, -50%) rotate(45deg); + width: $inner_dim; + z-index: 2; + img { + //height: auto; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + width: 32px; + z-index: 1; + } + &:before { + border-radius: 4px; + content: ''; + display: block; + height: 100%; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; + z-index: 3; + } + } + .sp_node__quantity { + background-color: $cl_ui_dark; + border: 1px solid $cl_white; + border-radius: 4px; + height: 14px; + left: -2px; + position: absolute; + top: 10px; + transform: rotate(45deg); + width: 14px; + z-index: 2; + > span { + //color: $cl_geo; + color: $cl_white; + font-size: 10px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + } + } + .sp_node__guidelines { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 1; + &:before, &:after { + border: 1px solid $cl_legendary; + content: ''; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + } + &:before { + height: 4096px; + } + &:after { + width: 4096px; + } + } + &.sp_node__highlight { + .sp_node__background { + border: 2px solid rgb(0, 255, 255); + } + } + } + .sp_modal, .sp_tooltip { + background-color: $cl_ui_light; + border: 2px solid $cl_white; + border-radius: 6px; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 6px; + width: 100%; + .sp_modal__body, .sp_tooltip__body { + flex-grow: 1; + flex-shrink: 1; + line-height: 20px; + margin-bottom: 6px; + overflow-x: hidden; + overflow-y: auto; + padding: 0 6px; + } + } + .sp_tooltip__wrapper { + display: flex; + flex-direction: column; + max-height: 250px; + overflow: visible; + position: absolute; + transform: translate(-50%, -100%); + width: 400px; + z-index: 10; + .sp_tooltip__action-left-wrapper, .sp_tooltip__action-right-wrapper { + display: flex; + flex-direction: row; + position: absolute; + top: 0; + transform: translateY(calc(-100% - 2px)); + z-index: 3; + > *:not(:last-child) { + margin-right: 2px; + } + .sp_button { + width: 100px; + &.sp_icon__container { + width: 36px; + img { + height: 24px; + } + } + } + .sp_node__set-display { + margin-left: auto; + &[data-is-hidden="0"] { + > span:nth-child(even) { + display: none + } + } + &[data-is-hidden="1"] { + > span:nth-child(odd) { + display: none + } + } + } + } + .sp_tooltip__action-left-wrapper { + left: 0; + } + .sp_tooltip__action-right-wrapper { + right: 0; + } + .sp_tooltip { + margin-bottom: 20px; + z-index: 1; + .sp_tooltip__header, .sp_tooltip__footer { + display: flex; + flex-shrink: 0; + } + .sp_tooltip__header { + flex-direction: row; + margin: 0; + line-height: 28px; + > span { + &:nth-child(1) { + margin-right: auto; + } + &:nth-child(2) { + font-size: 12px; + line-height: 16px; + margin-bottom: auto; + } + } + } + .sp_tooltip__footer { + flex-direction: column; + button { + background-color: transparent; + border: none; + height: 32px; + padding: 0; + width: 32px; + img { + height: 32px; + //noinspection CssInvalidFunction + transform: rotateY(0deg); + } + &:not(:last-child) { + margin-right: 6px; + } + &:hover { + img { + //noinspection CssInvalidFunction + transform: rotateY(360deg); + transition: all 0.6s ease; + } + } + } + > :not(.sp_tooltip__screenshot-container) { + font-family: ptsans_italic, sans-serif; + font-size: 14px; + margin-bottom: 2px; + } + > .sp_tooltip__screenshot-container { + display: grid; + grid-template-columns: repeat(5, 1fr); + .sp_screenshot__container { + cursor: pointer; + margin-right: 6px; + z-index: 1; + img { + border: 2px solid $cl_white; + border-radius: 6px; + } + &:hover { + z-index: 2; + img { + animation: 300ms linear infinite screenshot__rock; + } + } + } + } + } + &:before { + background: no-repeat center; + background-size: 70%; + content: ""; + filter: blur(4px); + height: 100%; + left: 0; + opacity: 0.3; + position: absolute; + top: 0; + width: 100%; + } + } + .sp_tooltip__cursor { + bottom: 2px; + height: 20px; + left: 50%; + overflow: hidden; + position: absolute; + transform: translateX(-50%); + width: 40px; + z-index: 2; + &:before { + background-color: $cl_ui_light; + border: 2px solid white; + border-radius: 6px; + bottom: 8px; + content: ""; + height: 40px; + left: 50%; + position: absolute; + transform: translateX(-50%) rotate(45deg); + width: 40px; + } + } + } + + /* *** ID COMMONS *** */ + #header-container, #footer-container { + color: $cl_white; + //background-color: rgba($cl_ui_dark, 0.5); + background-color: $cl_ui_darker; + } + #header-container { + overflow: visible; + .sp_header__nav, .sp_header__extra { + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + max-height: inherit; + overflow: visible; + } + .sp_header__nav { + max-width: 1000px; + margin: 0 auto; + width: 100%; + } + .sp_header__extra { + position: absolute; + right: 20px; + .sp_icon__container { + height: 64px; + &:not(:last-child) { + margin-right: 20px; + } + } + } + .sp_header__page-icon { + } + .sp_header__title { + line-height: 64px;; + } + .sp_nav { + .sp_nav__item:not(:first-child) { + background-color: $cl_ui_darker; + } + } + } + #toasts-container { + position: absolute; + top: 10px; + right: 10px; + display: flex; + flex-direction: column; + align-items: flex-end; + z-index: 999; + .sp_toast { + background: $cl_ui_dark; + color: $cl_white; + margin-bottom: 6px; + opacity: 0; + padding: 8px 12px; + position: relative; + transform: translateY(100px); + &__success { + background: $cl_common; + } + &__error { + background: $cl_challenge; + } + &__active { + opacity: 1; + transform: translateY(0); + transition: all 250ms ease-out; + } + } + } + #modal-container { + display: none; + bottom: 0; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + z-index: 10; + transition: opacity ease-out 150ms; + .sp_modal__background { + background-color: rgba($cl_ui_dark, 0.6); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; + } + .sp_modal__container, .sp_modal { + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + } + .sp_modal__container { + top: 50%; + width: 400px; + z-index: 2; + } + .sp_modal { + top: 200%; + transition: top ease-out 150ms; + &.sp_modal__warn { + background-color: $cl_ui_dark; + .sp_modal__body { + color: $cl_white; + font-family: ptsans_bold, sans-serif; + } + } + } + &.sp_modal__open { + display: block; + opacity: 1; + transition: opacity ease-in 250ms; + .sp_modal { + top: 50%; + transition: top ease-in 250ms; + } + } + } + #blob-loader { + background-color: $cl_sea; + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + user-select: none; + z-index: 100; + .sp_loader__wrapper, + .sp_slime__wrapper, + .sp_slime__outline_ends, .sp_slime__outline_end, + .sp_slime__eyes, .sp_slime__eye, + .sp_ground_line__wrapper, + .sp_ground_line__ends, .sp_ground_line__end, + .sp_element__wrapper, + .sp_elements, .sp_element, .sp_element__icon { + position: absolute; + } + + .sp_loader__wrapper, .sp_slime__wrapper, .sp_ground_line__wrapper, .sp_element__wrapper { + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + .sp_slime__outline_ends, .sp_ground_line__ends { + height: inherit; + left: 0; + right: 0; + top: 0; + } + + .sp_slime__outline_end, .sp_ground_line__end, .sp_slime__eye { + background-color: var(--loader__line-color); + border-radius: 50%; + height: inherit; + top: 50%; + transform: translateY(-50%); + &:first-child { + left: 0; + } + &:last-child { + right: 0; + } + } + + .sp_element__wrapper, .sp_elements, .sp_element { + height: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px); + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px); + } + + .sp_elements, .sp_element, .sp_element__icon { + left: 50%; + top: 0; + transform: translateX(-50%); + } + + .sp_loader__wrapper { + height: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 100px); + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 100px); + } + + .sp_slime__wrapper { + height: var(--loader__slime__size); + transform: translate(-50%, calc(-50% - (var(--loader__slime__offset) + var(--loader__ground-line-size) / 2))); + width: var(--loader__slime__size); + .sp_slime__outline { + border: var(--loader__slime__outline-width) solid var(--loader__line-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-radius: 50%; + height: inherit; + transform: rotate(45deg); + width: inherit; + } + .sp_slime__outline_ends { + .sp_slime__outline_end { + height: var(--loader__slime__outline-width); + width: var(--loader__slime__outline-width); + } + } + .sp_slime__eyes { + animation: 5s linear infinite slime_eyes__move; + height: calc(var(--loader__slime__outline-width) * 2); + left: 30%; + top: 20%; + transform: translateX(-50%); + width: 50px; + .sp_slime__eye { + animation: 5s linear infinite slime_eyes__blink; + width: var(--loader__slime__outline-width); + } + } + } + + .sp_ground_line__wrapper { + height: var(--loader__ground-line-size); + padding: 0 4px; + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 40px); + .sp_ground_line { + background-color: var(--loader__line-color); + height: inherit; + width: 100%; + } + .sp_ground_line__ends { + .sp_ground_line__end { + width: var(--loader__ground-line-size); + } + } + } + + .sp_element__wrapper { + height: calc(((var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px) / 2) + var(--loader__slime__offset)); + overflow: hidden; + transform: translate(-50%, calc(-100% - 4px)); + .sp_elements { + animation: 10s linear infinite loader_spin; + width: inherit; + .sp_element { + width: inherit; + .sp_element__icon { + height: var(--loader__icon-size); + width: var(--loader__icon-size); + img { + width: 100%; + } + } + @for $i from 2 through 14 { + &:nth-child(#{$i}) { + transform: translateX(-50%) rotate(#{25.72deg * ($i - 1)}); + } + } + } + } + } + + .sp_loader__text { + color: $cl_geo; + font-size: 32px; + font-family: ptsans_bold, sans-serif; + left: 50%; + position: absolute; + text-align: center; + top: calc(50% + 20px); + transform: translateX(-50%); + .sp_loader__warn-text { + color: $cl_pyro; + } + } + } + + /* *** ID FRONT *** */ + #main-left-container, #main-right-container { + background-color: $cl_ui_light; + height: 100%; + overflow: visible; + position: absolute; + top: 0; + width: var(--pannel__width); + z-index: 2; + .sp_panel__header { + background-color: $cl_ui_dark; + color: #fff; + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + height: 64px; + overflow: hidden; + padding: 0 20px; + } + .sp_panel__switch, .sp_panel__content-switch-container { + position: absolute; + } + .sp_panel__content-switch-container { + display: grid; + grid-template-columns: 1fr; + grid-row-gap: 6px; + top: 200px; + } + .sp_panel__switch, .sp_panel__content-switch { + background-color: $cl_ui_light; + cursor: pointer; + height: 50px; + overflow: hidden; + user-select: none; + width: 30px; + img { + //filter: drop-shadow(0px 0px 0px gray); + height: auto; + left: 50%; + max-width: none; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 38px; + z-index: 1; + } + &:before { + content: ''; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 2; + } + } + .sp_panel__switch { + top: 100px; + img { + width: 38px; + } + .sp_panel__open { + display: initial; + } + .sp_panel__close { + display: none; + } + } + .sp_panel__content-switch { + &.sp_panel__switch-active { + img { + filter: + hue-rotate(color.hue($cl_hydro) - color.hue($cl_geo)) + saturate(100% + color.saturation($cl_geo) - (color.saturation($cl_hydro))) + brightness(100% + (color.lightness($cl_hydro) - color.lightness($cl_geo))); + } + } + } + .sp_panel__content { + flex-grow: 1; + flex-shrink: 1; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + &.sp_slider { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow: hidden; + } + } + .sp_slider { + .sp_slider__slide { + background-color: $cl_ui_light; + height: 100%; + left: -105%; + overflow-x: hidden; + overflow-y: auto; + position: absolute; + top: 0; + transition: left ease-in 150ms; + width: 100%; + z-index: 1; + &.sp_slider__slide-open { + left: 0; + transition: left ease-out 250ms; + z-index: 2; + } + } + } + .sp_panel__section { + display: flex; + flex-direction: column; + overflow: hidden; + padding: 10px; + width: 100%; + .sp_panel__section-title { + color: $cl_hydro; + display: flex; + flex-direction: row; + line-height: 24px; + margin-bottom: 10px; + h2, label { + font-family: ptsans_bold, sans-serif; + font-size: 20px; + margin: 0 auto 0 0; + } + button { + border: none; + background-color: transparent; + color: $cl_geo; + font-family: inherit; + font-size: 12px; + height: 14px; + margin: auto 0 6px; + } + } + } + &.sp_panel__open { + .sp_panel__switch { + .sp_panel__open { + display: none; + } + .sp_panel__close { + display: initial; + } + } + } + } + #main-left-container { + left: calc(var(--pannel__width) * (-1)); + transition: left ease-in 150ms; + .sp_panel__content-switch-container { + right: 0; + transition: right ease-in 150ms; + } + .sp_panel__switch, .sp_panel__content-switch { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + .sp_panel__switch { + right: -30px; + .sp_panel__close { + //noinspection CssInvalidFunction + transform: translate(-50%, -50%) rotateZ(180deg); + } + } + &.sp_panel__open { + left: 0; + transition: left ease-out 250ms; + .sp_panel__content-switch-container { + right: -30px; + transition: right ease-out 250ms; + } + } + } + #main-right-container { + right: calc(var(--pannel__width) * (-1)); + transition: right 150ms; + .sp_panel__switch { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: -30px; + .sp_panel__open { + //noinspection CssInvalidFunction + transform: translate(-50%, -50%) rotateZ(180deg); + } + } + &.sp_panel__open { + right: 0; + transition: right 250ms; + } + } + #main-center-container { + z-index: 1; + &.sp_region__background-sand, &.sp_region__background-sea { + background-repeat: repeat; + } + &.sp_region__background-sand { + background-image: url('./../static/map/sand.jpg'); + } + &.sp_region__background-sea { + background-image: url('./../static/map/sea.jpg'); + } + } + #map-title { + color: white; + left: 50%; + position: fixed; + top: 50%; + transform: translate(-50%, -50%); + z-index: -1; + } + #worldmap-container { + //display: flex; + //flex-direction: column; + height: 100%; + margin: auto; + max-width: 100%; + overflow: hidden; + z-index: 1; + //.sp_grid__container { + // margin: auto 0; + // .sp_grid__row { + // margin: 0 auto; + // } + //} + &.sp_worldmap__edit { + //.sp_grid__container { + // .sp_grid__column { + // .sp_grid__node-container { + // .sp_node__item:not(#node-form-coordinate-tracker) { + // filter: grayscale(1); + // } + // &:before { + // content: ''; + // display: block; + // height: 100%; + // left: 0; + // position: absolute; + // top: 0; + // width: 100%; + // z-index: 10000; + // } + // } + // } + //} + .sp_grid__cell { + .sp_grid__node-container { + .sp_node__item:not(#node-form-coordinate-tracker) { + filter: grayscale(1); + } + &:before { + content: ''; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 10000; + } + } + } + &:not(.sp_worldmap_locked) { + //.sp_grid__container { + // .sp_grid__column { + // .sp_grid__map { + // filter: grayscale(1); + // } + // &:hover { + // filter: grayscale(0); + // .sp_grid__map { + // filter: grayscale(0); + // } + // } + // } + //} + .sp_grid__cell { + .sp_grid__map { + filter: grayscale(1); + } + &:hover { + filter: grayscale(0); + .sp_grid__map { + filter: grayscale(0); + } + } + } + } + &.sp_worldmap_locked { + //.sp_grid__container { + // .sp_grid__column { + // &:not(.sp_grid__active) { + // .sp_grid__map { + // filter: grayscale(1); + // } + // } + // } + //} + .sp_grid__cell { + &:not(.sp_grid__active) { + .sp_grid__map { + filter: grayscale(1); + } + } + } + } + } + .sp_node__item { + transform: translate(-50%, -50%); + } + } + #worldmap-filters { + .sp_panel__section { + max-height: 800px; + transition: max-height ease-in 250ms; + .sp_panel__section-title { + h2 { + span { + content: 'â–¼'; + cursor: pointer; + height: 100%; + position: absolute; + right: -24px; + top: 0; + width: 24px; + transform: rotate(0deg); + transition: transform ease-in 250ms; + } + } + } + &.sp_panel__section-closed { + max-height: 34px; + transition: max-height ease-out 250ms; + .sp_panel__section-title { + h2 { + span { + transform: rotate(-90deg); + transition: transform ease-out 250ms; + } + } + } + } + } + .sp_worldmap-filter__section { + user-select: none; + } + .sp_form-row__radio { + max-width: unset; + width: 100%; + .sp_radio__input-wrapper { + background-color: transparent; + .sp_radio__input-icon { + left: 0; + } + .nodes_count { + bottom: 0; + font-size: 9px; + height: 9px; + line-height: 9px; + position: absolute; + left: 26px; + } + .sp_radio__input-label { + line-height: 20px; + margin: 4px 0 auto; + padding: 0 6px 0 0; + } + &:not(.sp_radio__checked) { + .nodes_count, .sp_radio__input-label { + color: $cl_gray + } + } + &.sp_radio__checked { + .nodes_count { + color: $cl_geo; + } + .sp_radio__input-label { + color: $cl_hydro; + } + } + } + } + .sp_button { + height: 24px; + margin: auto; + width: 24px; + span { + line-height: 16px; + padding: 0; + } + } + } + #node-form-coordinate-tracker { + z-index: 10001; + .sp_node__background { + opacity: 0.4; + } + } + #primogem-counter-container { + background: linear-gradient(185deg, $cl_ui_darker 20%, #2d548d 90%); + color: $cl_ui_light; + height: 64px; + display: flex; + flex-direction: column; + padding: 6px 20px; + h2 { + font-size: 16px; + line-height: 18px; + margin: 0; + } + img { + height: 32px; + margin-left: 6px; + width: 32px; + } + .sp_primogem__main-container { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + margin: auto; + > * { + display: flex; + flex-shrink: 0; + &:nth-child(1) { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + height: 32px; + > * { + &:first-child { + margin: auto 6px 0 auto; + } + } + } + &:nth-child(2) { + line-height: 18px; + height: 18px; + } + } + } + &.sp_primogem__complete { + img { + height: 48px; + margin: auto; + width: 48px; + } + .sp_primogem__main-container { + > * { + &:nth-child(1) { + height: 48px; + > * { + &:not(:last-child) { + display: none; + } + &:last-child { + + } + } + } + &:nth-child(2) { + display: none; + } + } + } + } + &:before { + background: url("./../static/stars.png") no-repeat center; + background-size: cover; + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + } + } + #primogem-counter { + font-family: ptsans_bold, sans-serif; + font-size: 28px; + height: 32px; + } + #grid-zoom-container { + background-color: rgba(0,0,0, 0.3); + border-radius: 10px; + display: grid; + font-size: 18px; + grid-template-columns: 20px; + grid-template-rows: 20px 160px 20px; + position: absolute; + right: 0; + top: 50%; + transform: translate(calc(-50% - 10px), -50%); + height: 200px; + width: 20px; + z-index: 2; + > span { + color: white; + display: block; + font-family: ptsans_bold, sans-serif; + height: 20px; + text-align: center; + width: 20px; + z-index: 1; + } + > input { + height: 20px; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + width: 160px; + z-index: 2; + } + } + + /* *** ID BACK *** */ + #main-section-container { + background-color: rgba($cl_ui_dark, 0.5); + display: flex; + flex-direction: column; + height: 100%; + margin: 20px auto; + max-width: 1000px; + padding: 16px 20px; + overflow: hidden; + width: 100%; + &.sp_section_container__horizontal { + flex-direction: row; + } + &:after { + border: 2px solid $cl_ui_light; + bottom: 0; + content: ""; + left: 0; + margin: 6px; + position: absolute; + right: 0; + top: 0; + z-index: -1; + } + } + #map-editor { + display: flex; + flex-direction: column; + height: 100%; + .sp_map_editor__header_container { + display: flex; + flex-direction: row; + > * { + display: block; + height: 38px; + line-height: 38px; + text-align: center; + img { + height: 100%; + } + &:not(:nth-child(2)) { + flex-shrink: 0; + width: 50px; + } + &:nth-child(2) { + flex-grow: 1; + &:before { + } + } + } + } + .sp_map_editor__grid_container { + height: 100%; + margin: 0 auto; + max-height: 700px; + max-width: 700px; + width: 100%; + } + .sp_grid__container { + display: grid; + grid-auto-flow: row; + grid-template-columns: repeat(var(--grid__width), 1fr); + grid-template-rows: repeat(var(--grid__height), 1fr); + //.sp_grid__row { + // display: grid; + // grid-auto-flow: column; + // grid-template-columns: repeat(var(--grid__width), 1fr); + //} + //.sp_grid__column { + // height: auto; + // padding-top: 100%; + // width: auto; + //} + } + } + + &.sp_app__is-touch-device { + .ul_nav__wrapper { + height: 64px; + .ul_nav { + flex-direction: column; + margin: 0; + padding: 0; + position: absolute; + right: 0; + top: 64px; + height: auto; + max-height: 0; + overflow-x: hidden; + overflow-y: scroll; + transition: max-height ease-out 250ms; + .ul_nav__head, .ul_nav__tail { + position: fixed; + top: 0; + z-index: 3; + &:after { + content: ''; + display: block; + position: absolute; + top: 0; + } + } + .ul_nav__head { + left: 0; + &:after { + border-top: 64px solid $cl_geo; + border-right: 16px solid $cl_ui_darker; + right: -16px; + } + } + .ul_nav__tail { + left: 96px; + &:after { + border-bottom: 64px solid $cl_geo; + border-left: 16px solid $cl_ui_darker; + left: -16px; + } + } + .ul_nav__item { + min-width: 240px; + max-width: 100vw; + width: auto; + } + > .ul_nav__item { + min-height: 64px; + max-height: unset; + height: auto; + &:nth-child(2), &:nth-last-child(2) { + > a { + &:after { + content: unset; + } + } + } + } + } + .ul_nav__sub-nav { + box-shadow: none; + max-height: unset; + transition: none; + .ul_nav__item { + } + } + &.sp_nav__nav-open { + .ul_nav { + max-height: 320px; + transition: max-height ease-in 350ms; + } + } + } + + #header-container { + padding: 0; + .sp_header__nav { + margin: 0 0 0 auto; + width: 0; + } + .sp_header__extra { + background-color: $cl_ui_darker; + border-radius: 32px; + bottom: 6px; + padding: 0 20px; + position: fixed; + right: 6px; + } + .sp_menu-btn { + position: absolute; + right: 0; + top: 0; + z-index: 100; + } + } + + &[data-device='mobile'] { + .sp_tooltip__wrapper { + max-height: 35vh; + bottom: 10px; + left: 50%; + position: fixed; + transform: translate(-50%, 0); + width: calc(100vw - 20px); + .sp_tooltip { + margin-bottom: 0; + .sp_tooltip__footer { + > .sp_tooltip__screenshot-container { + .sp_screenshot__container { + &:hover { + img { + animation: none; + } + } + } + } + } + &:before { + background: no-repeat center; + background-size: 70%; + content: ""; + filter: blur(4px); + height: 100%; + left: 0; + opacity: 0.3; + position: absolute; + top: 0; + width: 100%; + } + } + .sp_tooltip__cursor { + display: none; + } + } + + #main-left-container, #main-right-container { + width: calc(100vw - 40px); + } + #main-left-container { + &:not(.sp_panel__open) { + left: calc((100vw - 40px) * (-1)); + } + } + #main-right-container { + &:not(.sp_panel__open) { + right: calc((100vw - 40px) * (-1)); + } + } + #primogem-counter-container { + .sp_primogem__main-container { + margin: auto auto auto 0; + > * { + &:nth-child(1) { + > * { + &:first-child { + margin: auto 6px 0 0; + } + } + } + } + } + } + #grid-zoom-container { + top: 10px; + transform: translate(-50%, 0); + } + } + + &[data-device='tablet'] {} + } +} + +@keyframes loader_spin { + from { + transform: translate(-50%) rotate(0deg); + } + to { + transform: translate(-50%) rotate(360deg); + } +} + +@keyframes slime_eyes__move { + 0%, 10%, 90%, 100% { + left: 30%; + } + 40%, 60% { + left: 70%; + } +} + +@keyframes slime_eyes__blink { + 0%, 41%, 46%, 91%, 96%, 100% { + height: inherit; + } + 42%, 45%, 92%, 95% { + height: 2px; + } +} + +//noinspection CssInvalidFunction +@keyframes screenshot__rock { + 0% { + transform: scale(1.1) rotateZ(0deg); + } + 25% { + transform: scale(1.1) rotateZ(2deg); + } + 50% { + transform: scale(1.1) rotateZ(0deg); + } + 75% { + transform: scale(1.1) rotateZ(-2deg); + } + 100% { + transform: scale(1.1) rotateZ(0deg); + } +} \ No newline at end of file diff --git a/assets/font/ptsans-bold.woff b/assets/font/ptsans-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..029e41ec2414d1219b380c1778d62ca736df0f2e GIT binary patch literal 31300 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 literal 0 HcmV?d00001 diff --git a/assets/font/ptsans-italic.woff2 b/assets/font/ptsans-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0c915658beb7921a3cedc9260d8d232907002636 GIT binary patch literal 26180 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