From d21d9a86d49111ac185ab6e412bbc1ca4440a285 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 19 May 2023 16:33:14 -0400 Subject: [PATCH] Update frontend dependencies, remove period on update banner --- frontEndSrc/js/anime.js | 2 +- frontEndSrc/js/manga.js | 2 +- frontEndSrc/yarn.lock | 707 +++++++++++++++++++---------------- public/js/scripts.min.js | 6 +- public/js/scripts.min.js.map | 2 +- public/js/tables.min.js.map | 2 +- tools/offline-db-update.php | 0 7 files changed, 388 insertions(+), 333 deletions(-) delete mode 100644 tools/offline-db-update.php diff --git a/frontEndSrc/js/anime.js b/frontEndSrc/js/anime.js index 670a78f3..79705881 100644 --- a/frontEndSrc/js/anime.js +++ b/frontEndSrc/js/anime.js @@ -73,7 +73,7 @@ _.on('body.anime.list', 'click', '.plus-one', (e) => { const displayMessage = (type, message) => { _.hide('#loading-shadow'); - _.showMessage(type, `${message} ${title}.`); + _.showMessage(type, `${message} ${title}`); _.scrollToTop(); } diff --git a/frontEndSrc/js/manga.js b/frontEndSrc/js/manga.js index 13d2228d..ce7cbfca 100644 --- a/frontEndSrc/js/manga.js +++ b/frontEndSrc/js/manga.js @@ -55,7 +55,7 @@ _.on('.manga.list', 'click', '.edit-buttons button', (e) => { const displayMessage = (type, message) => { _.hide('#loading-shadow'); - _.showMessage(type, `${message} ${title}.`); + _.showMessage(type, `${message} ${title}`); _.scrollToTop(); } diff --git a/frontEndSrc/yarn.lock b/frontEndSrc/yarn.lock index 0b4e385b..2eefc5fc 100644 --- a/frontEndSrc/yarn.lock +++ b/frontEndSrc/yarn.lock @@ -2,37 +2,52 @@ # yarn lockfile v1 -"@csstools/cascade-layer-name-parser@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.1.tgz#5957adeb71be8159e543d37a9c48e124dcd6c32e" - integrity sha512-SAAi5DpgJJWkfTvWSaqkgyIsTawa83hMwKrktkj6ra2h+q6ZN57vOGZ6ySHq6RSo+CbP64fA3aPChPBRDDUgtw== +"@babel/runtime@^7.21.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== + dependencies: + regenerator-runtime "^0.13.11" -"@csstools/color-helpers@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-1.0.0.tgz#7097722a51da1e9e622345ca000261f1ae6e8f58" - integrity sha512-tgqtiV8sU/VaWYjOB3O7PWs7HR/MmOLl2kTYRW2qSsTSEniJq7xmyAYFB1LPpXvvQcE5u2ih2dK9fyc8BnrAGQ== +"@csstools/cascade-layer-name-parser@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.2.tgz#35253f57c6c83d684fe396672486c644e6a84127" + integrity sha512-xm7Mgwej/wBfLoK0K5LfntmPJzoULayl1XZY9JYgQgT29JiqNw++sLnx95u5y9zCihblzkyaRYJrsRMhIBzRdg== -"@csstools/css-calc@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.0.0.tgz#f93e4cc9d80b504467aee1b5251bb2fd8be435a7" - integrity sha512-Xw0b/Jr+vLGGYD8cxsGWPaY5n1GtVC6G4tcga+eZPXZzRjjZHorPwW739UgtXzL2Da1RLxNE73c0r/KvmizPsw== - -"@csstools/css-parser-algorithms@^2.0.0", "@csstools/css-parser-algorithms@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz#ff02629c7c95d1f4f8ea84d5ef1173461610535e" - integrity sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw== - -"@csstools/css-tokenizer@^2.0.0", "@csstools/css-tokenizer@^2.0.1": +"@csstools/color-helpers@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.0.tgz#fee4de3d444db3ce9007f3af6474af8ba3e4b930" - integrity sha512-dtqFyoJBHUxGi9zPZdpCKP1xk8tq6KPHJ/NY4qWXiYo6IcSGwzk3L8x2XzZbbyOyBs9xQARoGveU2AsgLj6D2A== + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-2.1.0.tgz#b27d8376e9e8a947878f10967481c22bf046976a" + integrity sha512-OWkqBa7PDzZuJ3Ha7T5bxdSVfSCfTq6K1mbAhbO1MD+GSULGjrp45i5RudyJOedstSarN/3mdwu9upJE7gDXfw== -"@csstools/media-query-list-parser@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz#d85a366811563a5d002755ed10e5212a1613c91d" - integrity sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA== +"@csstools/css-calc@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.1.tgz#c622728b7f0c9aae70952623c2b0d3d114752987" + integrity sha512-Nh+iLCtjlooTzuR0lpmB8I6hPX/VupcGQ3Z1U2+wgJJ4fa8+cWkub+lCsbZcYPzBGsZLEL8fQAg+Na5dwEFJxg== -"@csstools/postcss-cascade-layers@^3.0.0": +"@csstools/css-color-parser@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.2.0.tgz#30243b2fe912e1da0787e7d093d25a9ed40a73b5" + integrity sha512-kt9jhqyL/Ig/Tsf1cY+iygxs2nu3/D532048G9BSeg9YjlpZxbor6I+nvgMNB1A1ppL+i15Mb/yyDHYMQmgBtQ== + dependencies: + "@csstools/color-helpers" "^2.1.0" + "@csstools/css-calc" "^1.1.1" + +"@csstools/css-parser-algorithms@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.1.1.tgz#7b62e6412a468a2d1096ed267edd1e4a7fd4a119" + integrity sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA== + +"@csstools/css-tokenizer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" + integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + +"@csstools/media-query-list-parser@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.4.tgz#466bd254041530dfd1e88bcb1921e8ca4af75b6a" + integrity sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA== + +"@csstools/postcss-cascade-layers@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-3.0.1.tgz#d839386e90428b448e3f75276bc01d516e852a0d" integrity sha512-dD8W98dOYNOH/yX4V4HXOhfCOnvVAg8TtsL+qCGNoKXuq5z2C/d026wGWgySgC8cajXXo/wNezS31Glj5GcqrA== @@ -40,144 +55,179 @@ "@csstools/selector-specificity" "^2.0.2" postcss-selector-parser "^6.0.10" -"@csstools/postcss-color-function@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-2.1.0.tgz#2ed0320b4f7e0d7718280e273f88ba4164eae7e7" - integrity sha512-XBoCClLyWchlYGHGlmMOa6M2UXZNrZm63HVfsvgD/z1RPm/s3+FhHyT6VkDo+OvEBPhCgn6xz4IeCu4pRctKDQ== +"@csstools/postcss-color-function@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-2.2.2.tgz#10bd96096b01ba58336c7eda90673f27a8b2df0c" + integrity sha512-HpBtNAS8m07Umr1kYYOIKTSg2uBMjWMc7zeXchhodsZtopICa5pTyCIuuT0z9oy07j/M4+Uj0M01OLvmN0AHqA== dependencies: - "@csstools/color-helpers" "^1.0.0" - "@csstools/postcss-progressive-custom-properties" "^2.0.0" - postcss-value-parser "^4.2.0" + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" -"@csstools/postcss-font-format-keywords@^2.0.0": +"@csstools/postcss-color-mix-function@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-1.0.2.tgz#02e366b84cf84f4522b4d27053959614fbab0e22" + integrity sha512-SZRZ1osJo5CR89xojPEkORnH6RS0FK1aktMujo52TCc74oJCIf6udX1e22qTeV8YG78lRNx8NpM3WzI4dL94tQ== + dependencies: + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" + +"@csstools/postcss-font-format-keywords@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-2.0.2.tgz#d798d96f4af6cddcfee459f598c976e6011042d2" integrity sha512-iKYZlIs6JsNT7NKyRjyIyezTCHLh4L4BBB3F5Nx7Dc4Z/QmBgX+YJFuUSar8IM6KclGiAUFGomXFdYxAwJydlA== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-hwb-function@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-2.1.1.tgz#a86efbae9f95236022d6bed83e06357a3bfb4de7" - integrity sha512-XijKzdxBdH2hU6IcPWmnaU85FKEF1XE5hGy0d6dQC6XznFUIRu1T4uebL3krayX40m4xIcxfCBsQm5zphzVrtg== +"@csstools/postcss-gradients-interpolation-method@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-3.0.5.tgz#7a066b10d42ef6048382ef38dc0a4c845fa9721f" + integrity sha512-x1tKUChKajjlZ+pOvapvHTXfRasXLBaChzwcKzI+wGsUmWIfIZhWVdksI/9Yeef0RhI9RFsEgr1fI3gWNcxHyg== dependencies: - "@csstools/color-helpers" "^1.0.0" + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" + +"@csstools/postcss-hwb-function@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-2.2.2.tgz#c36a450bc98038df00bbbebcef20f04aac6e0b08" + integrity sha512-W5Y5oaJ382HSlbdGfPf60d7dAK6Hqf10+Be1yZbd/TNNrQ/3dDdV1c07YwOXPQ3PZ6dvFMhxbIbn8EC3ki3nEg== + dependencies: + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-ic-unit@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-2.0.3.tgz#21b3adea10aedd51181285f3e1225598d602e1e2" + integrity sha512-azDezOeI7IhLGqRauyfi/JuJOfNHM951h0TZWnL9L38xTmlBK+s7y4MpWXTq/Ohz8IuiIuVPobXTewsqXaTeiQ== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^2.2.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-ic-unit@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-2.0.2.tgz#5a5e481c53977deec3d63793788eec924d4c5f7d" - integrity sha512-N84qGTJkfLTPj2qOG5P4CIqGjpZBbjOEMKMn+UjO5wlb9lcBTfBsxCF0lQsFdWJUzBHYFOz19dL66v71WF3Pig== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^3.0.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-3.1.1.tgz#81b0f3ba388bf3c8966e1a4413e1839beef7960e" - integrity sha512-hhiacuby4YdUnnxfCYCRMBIobyJImozf0u+gHSbQ/tNOdwvmrZtVROvgW7zmfYuRkHVDNZJWZslq2v5jOU+j/A== +"@csstools/postcss-is-pseudo-class@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-3.2.1.tgz#610f451b9293307d83d484c84af332a05e48b661" + integrity sha512-AtANdV34kJl04Al62is3eQRk/BfOfyAvEmRJvbt+nx5REqImLC+2XhuE6skgkcPli1l8ONS67wS+l1sBzySc3Q== dependencies: "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" -"@csstools/postcss-logical-float-and-clear@^1.0.0": +"@csstools/postcss-logical-float-and-clear@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-1.0.1.tgz#d255ea7aad18880930b63d8a04164f56182f2ecf" integrity sha512-eO9z2sMLddvlfFEW5Fxbjyd03zaO7cJafDurK4rCqyRt9P7aaWwha0LcSzoROlcZrw1NBV2JAp2vMKfPMQO1xw== -"@csstools/postcss-logical-resize@^1.0.0": +"@csstools/postcss-logical-resize@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-1.0.1.tgz#826d3de929d7d786c32c2c118f78e813a1c2cdec" integrity sha512-x1ge74eCSvpBkDDWppl+7FuD2dL68WP+wwP2qvdUcKY17vJksz+XoE1ZRV38uJgS6FNUwC0AxrPW5gy3MxsDHQ== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-logical-viewport-units@^1.0.0": +"@csstools/postcss-logical-viewport-units@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-1.0.3.tgz#63e212954015ecdc493878601c3daa4da6ba6714" + integrity sha512-6zqcyRg9HSqIHIPMYdt6THWhRmE5/tyHKJQLysn2TeDf/ftq7Em9qwMTx98t2C/7UxIsYS8lOiHHxAVjWn2WUg== + dependencies: + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-media-minmax@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-1.0.2.tgz#b968c57e1459429b48b24e2c250ca0904d71df6e" - integrity sha512-nnKFywBqRMYjv5jyjSplD/nbAnboUEGFfdxKw1o34Y1nvycgqjQavhKkmxbORxroBBIDwC5y6SfgENcPPUcOxQ== + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.2.tgz#77efc4fdd96c7ff97f0d714c940187d25fd87619" + integrity sha512-DsEykSINZTqlBefi1uSQBym1Rj0NQOj92dLRd5jUQpSy8yBVaXXmkiUgBUbb+gQh8imAdqPpz2v4sAUnw8yXXA== dependencies: - "@csstools/css-tokenizer" "^2.0.0" + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" -"@csstools/postcss-media-queries-aspect-ratio-number-values@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-1.0.1.tgz#fd6a8e50c2d6d46a5c95b6cdc5563a091fa2f0fa" - integrity sha512-V9yQqXdje6OfqDf6EL5iGOpi6N0OEczwYK83rql9UapQwFEryXlAehR5AqH8QqLYb6+y31wUXK6vMxCp0920Zg== +"@csstools/postcss-media-queries-aspect-ratio-number-values@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-1.0.2.tgz#23ca3c3decc79d9089c2028ded20a97a2c784eee" + integrity sha512-rOSR5p+5m0joXUoitYgCyMqNCu97yfLsLG3cnNaM8VeJRCWHGEu5hE9Gv0M7n9A4wo2pYF8QqaxkTlWbSJY9Fg== dependencies: - "@csstools/css-parser-algorithms" "^2.0.0" - "@csstools/css-tokenizer" "^2.0.0" - "@csstools/media-query-list-parser" "^2.0.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" -"@csstools/postcss-nested-calc@^2.0.0": +"@csstools/postcss-nested-calc@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-2.0.2.tgz#a0857650ef88b1aa7b094c7ea8ea1378c35695e0" integrity sha512-jbwrP8rN4e7LNaRcpx3xpMUjhtt34I9OV+zgbcsYAAk6k1+3kODXJBf95/JMYWhu9g1oif7r06QVUgfWsKxCFw== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-normalize-display-values@^2.0.0": +"@csstools/postcss-normalize-display-values@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-2.0.1.tgz#35dc188c5b4713cf902959fe3c8ce613fcb7543e" integrity sha512-TQT5g3JQ5gPXC239YuRK8jFceXF9d25ZvBkyjzBGGoW5st5sPXFVQS8OjYb9IJ/K3CdfK4528y483cgS2DJR/w== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-2.1.0.tgz#0f9b914574549e617942a40297ffe76da76809c6" - integrity sha512-U/odSNjOVhagNRu+RDaNVbn8vaqA9GyCOoneQA2je7697KOrtRDc7/POrYsP7QioO2aaezDzKNX02wBzc99fkQ== +"@csstools/postcss-oklab-function@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-2.2.2.tgz#a002b05980050f9307b3482cff6925081591a2cf" + integrity sha512-25Y9GYia9QamEOHx3B8hyHftDo/lzVhmPPm96ziOzOri9MDZvphPYPyx8NxQXh0P1P0j92eJcOjw4AO6HcXWYw== dependencies: - "@csstools/color-helpers" "^1.0.0" - "@csstools/postcss-progressive-custom-properties" "^2.0.0" - postcss-value-parser "^4.2.0" + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" -"@csstools/postcss-progressive-custom-properties@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-2.1.0.tgz#df35da0e85a6d5e1d8e4c9a0ba9032e8486e8b9d" - integrity sha512-tRX1rinsXajZlc4WiU7s9Y6O9EdSHScT997zDsvDUjQ1oZL2nvnL6Bt0s9KyQZZTdC3lrG2PIdBqdOIWXSEPlQ== +"@csstools/postcss-progressive-custom-properties@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-2.2.0.tgz#69e9b28282d5f72dbbc82b5ccdf69b20e30c99fe" + integrity sha512-qtJ2Jgf5bQW65OK7JaR0dw+XL3tc3BN99g+I5cRdik++HpyZitrKKxIwDGb3OHp2Yo3PZKuiX8pXljqmLHT/eg== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-scope-pseudo-class@^2.0.0": +"@csstools/postcss-scope-pseudo-class@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-2.0.2.tgz#6325e1e3b321093c59b008ec670bb772e17f06fe" integrity sha512-6Pvo4uexUCXt+Hz5iUtemQAcIuCYnL+ePs1khFR6/xPgC92aQLJ0zGHonWoewiBE+I++4gXK3pr+R1rlOFHe5w== dependencies: postcss-selector-parser "^6.0.10" -"@csstools/postcss-stepped-value-functions@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-2.1.0.tgz#8ca134a7f70e00b14f5796fb32ed33a656ba0b1b" - integrity sha512-CkEo9BF8fQeMoXW3biXjlgTLY7PA4UFihn6leq7hPoRzIguLUI0WZIVgsITGXfX8LXmkhCSTjXO2DLYu/LUixQ== +"@csstools/postcss-stepped-value-functions@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-2.1.1.tgz#f31aa0e7bd0ce3e4a0450573e1e27ce5e602b100" + integrity sha512-YCvdF0GCZK35nhLgs7ippcxDlRVe5QsSht3+EghqTjnYnyl3BbWIN6fYQ1dKWYTJ+7Bgi41TgqQFfJDcp9Xy/w== dependencies: - "@csstools/css-calc" "^1.0.0" - "@csstools/css-parser-algorithms" "^2.0.1" - "@csstools/css-tokenizer" "^2.0.1" + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" -"@csstools/postcss-text-decoration-shorthand@^2.0.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-2.2.1.tgz#1accf54487d74aa7ccade2e674c7290bb2ce10ae" - integrity sha512-Ow6/cWWdjjVvA83mkm3kLRvvWsbzoe1AbJCxkpC+c9ibUjyS8pifm+LpZslQUKcxRVQ69ztKHDBEbFGTDhNeUw== +"@csstools/postcss-text-decoration-shorthand@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-2.2.4.tgz#184af1d68f4d97c381fad2ca58ae7f3f2a5dd7c3" + integrity sha512-zPN56sQkS/7YTCVZhOBVCWf7AiNge8fXDl7JVaHLz2RyT4pnyK2gFjckWRLpO0A2xkm1lCgZ0bepYZTwAVd/5A== dependencies: - "@csstools/color-helpers" "^1.0.0" + "@csstools/color-helpers" "^2.1.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-trigonometric-functions@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-2.0.1.tgz#2ecede7066187cf08423f8318ef5796cda75351f" - integrity sha512-uGmmVWGHozyWe6+I4w321fKUC034OB1OYW0ZP4ySHA23n+r9y93K+1yrmW+hThpSfApKhaWySoD4I71LLlFUYQ== +"@csstools/postcss-trigonometric-functions@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-2.1.1.tgz#871a2048b0f81495d6cd8858ffb1fb04231ca741" + integrity sha512-XcXmHEFfHXhvYz40FtDlA4Fp4NQln2bWTsCwthd2c+MCnYArUYU3YaMqzR5CrKP3pMoGYTBnp5fMqf1HxItNyw== dependencies: - postcss-value-parser "^4.2.0" + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" -"@csstools/postcss-unset-value@^2.0.0": +"@csstools/postcss-unset-value@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-2.0.1.tgz#67091dd6cff556bff896c95053eb070cc6b21c25" integrity sha512-oJ9Xl29/yU8U7/pnMJRqAZd4YXNCfGEdcP4ywREuqm/xMqcgDNDppYRoCGDt40aaZQIEKBS79LytUDN/DHf0Ew== "@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.1", "@csstools/selector-specificity@^2.0.2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== "@mole-inc/bin-wrapper@^8.0.1": version "8.0.1" @@ -231,71 +281,71 @@ slash "3.0.0" source-map "^0.7.3" -"@swc/core-darwin-arm64@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.41.tgz#c8ec25fb3171e1e53546d0fbf4044c33d5ab42c5" - integrity sha512-D4fybODToO/BvuP35bionDUrSuTVVr8eW+mApr1unOqb3mfiqOrVv0VP2fpWNRYiA+xMq+oBCB6KcGpL60HKWQ== +"@swc/core-darwin-arm64@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.59.tgz#04137eaf3549a2c195a4eeff409687379d927809" + integrity sha512-AnqWFBgEKHP0jb4iZqx7eVQT9/rX45+DE4Ox7GpwCahUKxxrsDLyXzKhwLwQuAjUvtu5JcSB77szKpPGDM49fQ== -"@swc/core-darwin-x64@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.41.tgz#0f9d7077762f4274d50a8ef76a56b76096a8f0ff" - integrity sha512-0RoVyiPCnylf3TG77C3S86PRSmaq+SaYB4VDLJFz3qcEHz1pfP0LhyskhgX4wjQV1mveDzFEn1BVAuo0eOMwZA== +"@swc/core-darwin-x64@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.59.tgz#edd5b4e33f7caa2b67a4989934fe7bc8e24d79dd" + integrity sha512-iqDs+yii9mOsmpJez82SEi4d4prWDRlapHxKnDVJ0x1AqRo41vIq8t3fujrvCHYU5VQgOYGh4ooXQpaP2H3B2A== -"@swc/core-linux-arm-gnueabihf@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.41.tgz#5f6a03c4e8cae674b6262fc0d625379af14985be" - integrity sha512-mZW7GeY7Uw1nkKoWpx898ou20oCSt8MR+jAVuAhMjX+G4Zr0WWXYSigWNiRymhR6Q9KhyvoFpMckguSvYWmXsw== +"@swc/core-linux-arm-gnueabihf@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.59.tgz#448c1c09f9d25e416e431fe1a627c2fc1abd1251" + integrity sha512-PB0PP+SgkCSd/kYmltnPiGv42cOSaih1OjXCEjxvNwUFEmWqluW6uGdWaNiR1LoYMxhcHZTc336jL2+O3l6p0Q== -"@swc/core-linux-arm64-gnu@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.41.tgz#e1c0a1669873dbab9ecb9573c2f7dd81b764212e" - integrity sha512-e91LGn+6KuLFw3sWk5swwGc/dP4tXs0mg3HrhjImRoofU02Bb9aHcj5zgrSO8ZByvDtm/Knn16h1ojxIMOFaxg== +"@swc/core-linux-arm64-gnu@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.59.tgz#78061652c93f64cf7d6488a18caaffb98e94d8e1" + integrity sha512-Ol/JPszWZ+OZ44FOdJe35TfJ1ckG4pYaisZJ4E7PzfwfVe2ygX85C5WWR4e5L0Y1zFvzpcI7gdyC2wzcXk4Cig== -"@swc/core-linux-arm64-musl@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.41.tgz#add780ae831a72a65ec799009d0c0e3e78bb969c" - integrity sha512-Q7hmrniLWsQ7zjtImGcjx1tl5/Qxpel+fC+OXTnGvAyyoGssSftIBlXMnqVLteL78zhxIPAzi+gizWAe5RGqrA== +"@swc/core-linux-arm64-musl@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.59.tgz#496a939129243b51e1e1ff90cdcc1c1437e71d6f" + integrity sha512-PtTTtGbj9GiY5gJdoSFL2A0vL6BRaS1haAhp6g3hZvLDkTTg+rJURmzwBMMjaQlnGC62x/lLf6MoszHG/05//Q== -"@swc/core-linux-x64-gnu@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.41.tgz#5b2bf83493e6fa0a58c3fb1815b9e59b923e300f" - integrity sha512-h4sv1sCfZQgRIwmykz8WPqVpbvHb13Qm3SsrbOudhAp2MuzpWzsgMP5hAEpdCP/nWreiCz3aoM6L8JeakRDq0g== +"@swc/core-linux-x64-gnu@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.59.tgz#4e12cab7e6a49d52321eac9d10787cdb8cadce0f" + integrity sha512-XBW9AGi0YsIN76IfesnDSBn/5sjR69J75KUNte8sH6seYlHJ0/kblqUMbUcfr0CiGoJadbzAZeKZZmfN7EsHpg== -"@swc/core-linux-x64-musl@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.41.tgz#146547ea3e62466ca971d71ebcc4cfeed3008bda" - integrity sha512-Z7c26i38378d0NT/dcz8qPSAXm41lqhNzykdhKhI+95mA9m4pskP18T/0I45rmyx1ywifypu+Ip+SXmKeVSPgQ== +"@swc/core-linux-x64-musl@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.59.tgz#8e29ade3599c5215d1c04507e59761aa5c95a9eb" + integrity sha512-Cy5E939SdWPQ34cg6UABNO0RyEe0FuWqzZ/GLKtK11Ir4fjttVlucZiY59uQNyUVUc8T2qE0VBFCyD/zYGuHtg== -"@swc/core-win32-arm64-msvc@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.41.tgz#91e438c1ca102b52172294905821b43f9d429a32" - integrity sha512-I0CYnPc+ZGc912YeN0TykIOf/Q7yJQHRwDuhewwD6RkbiSEaVfSux5pAmmdoKw2aGMSq+cwLmgPe9HYLRNz+4w== +"@swc/core-win32-arm64-msvc@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.59.tgz#c0b94236288e8e596628b821194ee80372cf0fdb" + integrity sha512-z5ZJxizRvRoSAaevRIi3YjQh74OFWEIhonSDWNdqDL7RbjEivcatYcG7OikH6s+rtPhOcwNm3PbGV2Prcgh/gg== -"@swc/core-win32-ia32-msvc@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.41.tgz#77bdb6ab0ae942039756d41300c47315357bd814" - integrity sha512-EygN4CVDWF29/U2T5fXGfWyLvRbMd2hiUgkciAl7zHuyJ6nKl+kpodqV2A0Wd4sFtSNedU0gQEBEXEe7cqvmsA== +"@swc/core-win32-ia32-msvc@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.59.tgz#f806824d840c2029354fd662b0f4eeb51836a9ef" + integrity sha512-vxpsn+hrKAhi5YusQfB/JXUJJVX40rIRE/L49ilBEqdbH8Khkoego6AD+2vWqTdJcUHo1WiAIAEZ0rTsjyorLQ== -"@swc/core-win32-x64-msvc@1.3.41": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.41.tgz#a8d766fc7a68752a3060276a90b7328d9f266631" - integrity sha512-Mfp8qD1hNwWWRy0ISdwQJu1g0UYoVTtuQlO0z3aGbXqL51ew9e56+8j3M1U9i95lXFyWkARgjDCcKkQi+WezyA== +"@swc/core-win32-x64-msvc@1.3.59": + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.59.tgz#f8a21d9048a3652c058880649e174c7a5589fae6" + integrity sha512-Ris/cJbURylcLwqz4RZUUBCEGsuaIHOJsvf69W5pGKHKBryVoOTNhBKpo3Km2hoAi5qFQ/ou0trAT4hBsVPZvQ== "@swc/core@^1.2.54": - version "1.3.41" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.41.tgz#8f10559db269da1a5df9863c92653f8afd0bd7c1" - integrity sha512-v6P2dfqJDpZ/7RXPvWge9oI6YgolDM0jtNhQZ2qdXrLBzaWQdDoBGBTJ8KN/nTgGhX3IkNvSB1fafXQ+nVnqAQ== + version "1.3.59" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.59.tgz#0e73e320faf4ca881f51c1820e34e0998b720efc" + integrity sha512-ZBw31zd2E5SXiodwGvjQdx5ZC90b2uyX/i2LeMMs8LKfXD86pfOfQac+JVrnyEKDhASXj9icgsF9NXBhaMr3Kw== optionalDependencies: - "@swc/core-darwin-arm64" "1.3.41" - "@swc/core-darwin-x64" "1.3.41" - "@swc/core-linux-arm-gnueabihf" "1.3.41" - "@swc/core-linux-arm64-gnu" "1.3.41" - "@swc/core-linux-arm64-musl" "1.3.41" - "@swc/core-linux-x64-gnu" "1.3.41" - "@swc/core-linux-x64-musl" "1.3.41" - "@swc/core-win32-arm64-msvc" "1.3.41" - "@swc/core-win32-ia32-msvc" "1.3.41" - "@swc/core-win32-x64-msvc" "1.3.41" + "@swc/core-darwin-arm64" "1.3.59" + "@swc/core-darwin-x64" "1.3.59" + "@swc/core-linux-arm-gnueabihf" "1.3.59" + "@swc/core-linux-arm64-gnu" "1.3.59" + "@swc/core-linux-arm64-musl" "1.3.59" + "@swc/core-linux-x64-gnu" "1.3.59" + "@swc/core-linux-x64-musl" "1.3.59" + "@swc/core-win32-arm64-msvc" "1.3.59" + "@swc/core-win32-ia32-msvc" "1.3.59" + "@swc/core-win32-x64-msvc" "1.3.59" "@szmarczak/http-timer@^4.0.5": version "4.0.6" @@ -337,9 +387,9 @@ "@types/node" "*" "@types/node@*": - version "18.15.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" - integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.1.tgz#de559d4b33be9a808fd43372ccee822c70f39704" + integrity sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg== "@types/responselike@^1.0.0": version "1.0.0" @@ -365,7 +415,7 @@ arch@^2.1.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -autoprefixer@^10.4.13: +autoprefixer@^10.4.14: version "10.4.14" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== @@ -453,9 +503,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: - version "1.0.30001467" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001467.tgz#1afc9c16ed61f50dd87139da87ca43a3e0051c77" - integrity sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q== + version "1.0.30001488" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz#d19d7b6e913afae3e98f023db97c19e9ddc5e91f" + integrity sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ== chalk@^4.1.0: version "4.1.2" @@ -543,7 +593,7 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-blank-pseudo@^5.0.0: +css-blank-pseudo@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-5.0.2.tgz#3df5cd950f64de960974da05e76954fd3d7442f9" integrity sha512-aCU4AZ7uEcVSUzagTlA9pHciz7aWPKA/YzrEkpdSopJ2pvhIxiQ5sYeMz1/KByxlIo4XBdvMNJAVKMg/GRnhfw== @@ -551,11 +601,11 @@ css-blank-pseudo@^5.0.0: postcss-selector-parser "^6.0.10" css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-has-pseudo@^5.0.0: +css-has-pseudo@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-5.0.2.tgz#8798118c705d858b7aeb9d839a39edd901c1cc83" integrity sha512-q+U+4QdwwB7T9VEW/LyO6CFrLAeLqOykC5mDqJXc7aKZAhDbq7BvGT13VGJe+IwBfdN2o3Xdw2kJ5IxwV1Sc9Q== @@ -564,7 +614,7 @@ css-has-pseudo@^5.0.0: postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" -css-prefers-color-scheme@^8.0.0: +css-prefers-color-scheme@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-8.0.2.tgz#a0671f54eb19ed0d30b952574c0af11ec355fb6d" integrity sha512-OvFghizHJ45x7nsJJUSYLyQNTzsCU8yWjxAc/nhPQg1pbs18LMoET8N3kOweFDPy0JV0OSXN2iqRFhPBHYOeMA== @@ -593,10 +643,10 @@ css-what@^6.0.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.4.1.tgz#61d55c0173126689922a219e15e131e4b5caf422" - integrity sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ== +cssdb@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.6.0.tgz#beac8f7a5f676db62d3c33da517ef4c9eb008f8b" + integrity sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w== cssesc@^3.0.0: version "3.0.0" @@ -660,9 +710,11 @@ csso@^4.2.0: css-tree "^1.1.2" date-fns@^2.29.1: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" decompress-response@^6.0.0: version "6.0.0" @@ -707,9 +759,9 @@ domutils@^2.8.0: domhandler "^4.2.0" electron-to-chromium@^1.4.284: - version "1.4.332" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.332.tgz#b981fcf61587abe03c24b301b2cfbdcc2b70e8a5" - integrity sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw== + version "1.4.401" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.401.tgz#cbd2c332c4a833e9e8d2ec5b3a6cd85ec6920907" + integrity sha512-AswqHsYyEbfSn0x87n31Na/xttUqEAg7NUjpiyxC20MaWKLyadOYHMzyLdF78N1iw+FK8/2KHLpZxRdyRILgtA== emoji-regex@^8.0.0: version "8.0.0" @@ -946,10 +998,10 @@ inherits@^2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -1100,10 +1152,10 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== node-releases@^2.0.8: version "2.0.10" @@ -1207,7 +1259,7 @@ pify@^2.2.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -postcss-attribute-case-insensitive@^6.0.0: +postcss-attribute-case-insensitive@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== @@ -1229,21 +1281,21 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^5.0.0: +postcss-color-functional-notation@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-5.0.2.tgz#6d03c928aa3a13487703af86c301bdcd501e7430" integrity sha512-M6ygxWOyd6eWf3sd1Lv8xi4SeF4iBPfJvkfMU4ITh8ExJc1qhbvh/U8Cv/uOvBgUVOMDdScvCdlg8+hREQzs7w== dependencies: postcss-value-parser "^4.2.0" -postcss-color-hex-alpha@^9.0.0: +postcss-color-hex-alpha@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79" integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg== dependencies: postcss-value-parser "^4.2.0" -postcss-color-rebeccapurple@^8.0.0: +postcss-color-rebeccapurple@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-8.0.2.tgz#c0f2dcf1ef4dd393314920aa181cca8c390a2648" integrity sha512-xWf/JmAxVoB5bltHpXk+uGRoGFwu4WDAR7210el+iyvTdqiKpDhtcT8N3edXMoVJY0WHFMrKMUieql/wRNiXkw== @@ -1268,37 +1320,37 @@ postcss-convert-values@^5.1.3: browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-custom-media@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-9.1.2.tgz#0e9c34b0b5325edc2c5f42f47543cb64d777764b" - integrity sha512-osM9g4UKq4XKimAC7RAXroqi3BXpxfwTswAJQiZdrBjWGFGEyxQrY5H2eDWI8F+MEvEUfYDxA8scqi3QWROCSw== +postcss-custom-media@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-9.1.3.tgz#68bb2ae377bb07c19f03f252930cc380af894dce" + integrity sha512-W1C4Fu6KAZ7sKYQCuGMr8gyaE4BtjTQGPLVS4m0WCaWM6l7PgVbvmDeb4ClBc5R/7kdwESYf0hdxGtEPhi9CLA== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.0" - "@csstools/css-parser-algorithms" "^2.0.0" - "@csstools/css-tokenizer" "^2.0.0" - "@csstools/media-query-list-parser" "^2.0.0" + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" -postcss-custom-properties@^13.1.0: - version "13.1.4" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.1.4.tgz#590e5770137011001602806da51243b6c82c1cde" - integrity sha512-iSAdaZrM3KMec8cOSzeTUNXPYDlhqsMJHpt62yrjwG6nAnMtRHPk5JdMzGosBJtqEahDolvD5LNbcq+EZ78o5g== +postcss-custom-properties@^13.1.5: + version "13.1.5" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.1.5.tgz#75567e3b4a664f820bcc3ba8b6ae3c8d27db05d1" + integrity sha512-98DXk81zTGqMVkGANysMHbGIg3voH383DYo3/+c+Abzay3nao+vM/f4Jgzsakk9S7BDsEw5DiW7sFy5G4W2wLA== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.0" - "@csstools/css-parser-algorithms" "^2.0.0" - "@csstools/css-tokenizer" "^2.0.0" + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" postcss-value-parser "^4.2.0" -postcss-custom-selectors@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.2.tgz#e100e9dd628d969a651d7d310cdfd25b27b58d4b" - integrity sha512-jX7VlE3jrgfBIOfxiGNRFq81xUoHSZhvxhQurzE7ZFRv+bUmMwB7/XnA0nNlts2CwNtbXm4Ozy0ZAYKHlCRmBQ== +postcss-custom-selectors@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.3.tgz#047e2bc4726fe8e448c23047c99785fcdbe1ef87" + integrity sha512-GTVscax6O/8s7agFF0HsOoIyjrnAbLjgCUle8tn+0oDGJuVx7p56U7ClSRoC49poxFuMfu2B4Q8GnxSCOeuFKw== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.0" - "@csstools/css-parser-algorithms" "^2.0.0" - "@csstools/css-tokenizer" "^2.0.0" + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" postcss-selector-parser "^6.0.4" -postcss-dir-pseudo-class@^7.0.0: +postcss-dir-pseudo-class@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-7.0.2.tgz#71618b7eb4abe067845d11b3c8f322760c9b3e88" integrity sha512-cMnslilYxBf9k3qejnovrUONZx1rXeUZJw06fgIUBzABJe3D2LiLL5WAER7Imt3nrkaIgG05XZBztueLEf5P8w== @@ -1325,22 +1377,22 @@ postcss-discard-overridden@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== -postcss-double-position-gradients@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-4.0.2.tgz#855a23201f26be447210504e9b668429cbf4640c" - integrity sha512-GXL1RmFREDK4Q9aYvI2RhVrA6a6qqSMQQ5ke8gSH1xgV6exsqbcJpIumC7AOgooH6/WIG3/K/T8xxAiVHy/tJg== +postcss-double-position-gradients@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-4.0.3.tgz#9f6e0e17a5b98c3aae1174b8256fc2e2d0220dbf" + integrity sha512-Td1+C+kFCadnhRBMMf6D/eiQxjp33eAgwgMcLNYzZPcgXt1iU6vi/qEJ/YObp4nwn3QOtudFBMUOVHoGqmpfiA== dependencies: - "@csstools/postcss-progressive-custom-properties" "^2.0.0" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" postcss-value-parser "^4.2.0" -postcss-focus-visible@^8.0.0: +postcss-focus-visible@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-8.0.2.tgz#a7ac26ffe3e9c2bd17d7200d75e2d79ee8110891" integrity sha512-f/Vd+EC/GaKElknU59esVcRYr/Y3t1ZAQyL4u2xSOgkDy4bMCmG7VP5cGvj3+BTLNE9ETfEuz2nnt4qkZwTTeA== dependencies: postcss-selector-parser "^6.0.10" -postcss-focus-within@^7.0.0: +postcss-focus-within@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-7.0.2.tgz#5d2c866030e66ed22b204c9506de640943310b1c" integrity sha512-AHAJ89UQBcqBvFgQJE9XasGuwMNkKsGj4D/f9Uk60jFmEBHpAL14DrnSk3Rj+SwZTr/WUG+mh+Rvf8fid/346w== @@ -1352,12 +1404,12 @@ postcss-font-variant@^5.0.0: resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== -postcss-gap-properties@^4.0.0: +postcss-gap-properties@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-4.0.1.tgz#0347d6a84a46bfbe88bedc542cc4b354e04a8338" integrity sha512-V5OuQGw4lBumPlwHWk/PRfMKjaq/LTGR4WDTemIMCaMevArVfCCA9wBJiL1VjDAd+rzuCIlkRoRvDsSiAaZ4Fg== -postcss-image-set-function@^5.0.0: +postcss-image-set-function@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-5.0.2.tgz#088e0f535f43e74d6ea8033ff7b0482e2735ea6e" integrity sha512-Sszjwo0ubETX0Fi5MvpYzsONwrsjeabjMoc5YqHvURFItXgIu3HdCjcVuVKGMPGzKRhgaknmdM5uVWInWPJmeg== @@ -1378,27 +1430,23 @@ postcss-initial@^4.0.1: resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-lab-function@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-5.1.0.tgz#ed3822feb0f7ff229e6d185929583b16861f7753" - integrity sha512-iZApRTNcpc71uTn7PkzjHtj5cmuZpvu6okX4jHnM5OFi2fG97sodjxkq6SpL65xhW0NviQrAMSX97ntyGVRV0w== +postcss-lab-function@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-5.2.2.tgz#a099c24192f07b49aeea2dc6e1f86fe1cfcbcd68" + integrity sha512-O5LrVYzOD3anfPqvSL1HiQ8PpKAav74Gst3pXgZBHSFo6t5sws3dLGTQMnw4hgn1t064SODWAjb9KcC39N820A== dependencies: - "@csstools/color-helpers" "^1.0.0" - "@csstools/postcss-progressive-custom-properties" "^2.0.0" - postcss-value-parser "^4.2.0" + "@csstools/css-color-parser" "^1.2.0" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" -postcss-logical@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-6.1.0.tgz#c33ae75d3edaea7eb821e76dc4e6d0ecedc3200d" - integrity sha512-qb1+LpClhYjxac8SfOcWotnY3unKZesDqIOm+jnGt8rTl7xaIWpE2bPGZHxflOip1E/4ETo79qlJyRL3yrHn1g== +postcss-logical@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-6.2.0.tgz#85e49cfee3ffda839d4befcab9f70c70a7bb337a" + integrity sha512-aqlfKGaY0nnbgI9jwUikp4gJKBqcH5noU/EdnIVceghaaDPYhZuyJVxlvWNy55tlTG5tunRKCTAX9yljLiFgmw== dependencies: postcss-value-parser "^4.2.0" -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - postcss-merge-longhand@^5.1.7: version "5.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" @@ -1449,10 +1497,10 @@ postcss-minify-selectors@^5.2.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-nesting@^11.0.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-11.2.1.tgz#260806f20971c82700d327468b49d1c1b44f1790" - integrity sha512-E6Jq74Jo/PbRAtZioON54NPhUNJYxVWhwxbweYl1vAoBYuGlDIts5yhtKiZFLvkvwT73e/9nFrW3oMqAtgG+GQ== +postcss-nesting@^11.2.1: + version "11.2.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-11.2.2.tgz#ddedfea5a1fdcd8d753298d82297ad15d5640c0f" + integrity sha512-aOTiUniAB1bcPE6GGiynWRa6PZFPhOTAm5q3q5cem6QeSijIHHkWr6gs65ukCZMXeak8yXeZVbBJET3VM+HlhA== dependencies: "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" @@ -1520,10 +1568,10 @@ postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-opacity-percentage@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" - integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== +postcss-opacity-percentage@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" + integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== postcss-ordered-values@^5.1.3: version "5.1.3" @@ -1533,7 +1581,7 @@ postcss-ordered-values@^5.1.3: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-overflow-shorthand@^4.0.0: +postcss-overflow-shorthand@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-4.0.1.tgz#cb61ca24d8c4e1dbf14d85181b017cfa6953aa34" integrity sha512-HQZ0qi/9iSYHW4w3ogNqVNr2J49DHJAl7r8O2p0Meip38jsdnRPgiDW7r/LlLrrMBMe3KHkvNtAV2UmRVxzLIg== @@ -1545,7 +1593,7 @@ postcss-page-break@^3.0.4: resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== -postcss-place@^8.0.0: +postcss-place@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-8.0.1.tgz#408d7a27e99192df51c95fe62a3a34def62aa66a" integrity sha512-Ow2LedN8sL4pq8ubukO77phSVt4QyCm35ZGCYXKvRFayAwcpgB0sjNJglDoTuRdUL32q/ZC1VkPBo0AOEr4Uiw== @@ -1553,65 +1601,67 @@ postcss-place@^8.0.0: postcss-value-parser "^4.2.0" postcss-preset-env@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-8.0.1.tgz#d249c137febc037dd5dbb97e18f94dba4dd0cda8" - integrity sha512-IUbymw0JlUbyVG+I85963PNWgPp3KhnFa1sxU7M/2dGthxV8e297P0VV5W9XcyypoH4hirH2fp1c6fmqh6YnSg== + version "8.4.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-8.4.0.tgz#ef2279fef5e9f9569bd9b542b4b4da754f644fe1" + integrity sha512-QG3PgHc3vHu4AmMyU0F6ZlUb4uZZ198a/DzsNK/mR4evdE9fR5onfI0UqXqoWFuGiPgPP79PWM1N4rRg/FVt9A== dependencies: - "@csstools/postcss-cascade-layers" "^3.0.0" - "@csstools/postcss-color-function" "^2.0.0" - "@csstools/postcss-font-format-keywords" "^2.0.0" - "@csstools/postcss-hwb-function" "^2.0.0" - "@csstools/postcss-ic-unit" "^2.0.0" - "@csstools/postcss-is-pseudo-class" "^3.0.0" - "@csstools/postcss-logical-float-and-clear" "^1.0.0" - "@csstools/postcss-logical-resize" "^1.0.0" - "@csstools/postcss-logical-viewport-units" "^1.0.0" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^1.0.0" - "@csstools/postcss-nested-calc" "^2.0.0" - "@csstools/postcss-normalize-display-values" "^2.0.0" - "@csstools/postcss-oklab-function" "^2.0.0" - "@csstools/postcss-progressive-custom-properties" "^2.0.0" - "@csstools/postcss-scope-pseudo-class" "^2.0.0" - "@csstools/postcss-stepped-value-functions" "^2.0.0" - "@csstools/postcss-text-decoration-shorthand" "^2.0.0" - "@csstools/postcss-trigonometric-functions" "^2.0.0" - "@csstools/postcss-unset-value" "^2.0.0" - autoprefixer "^10.4.13" - browserslist "^4.21.4" - css-blank-pseudo "^5.0.0" - css-has-pseudo "^5.0.0" - css-prefers-color-scheme "^8.0.0" - cssdb "^7.4.0" - postcss-attribute-case-insensitive "^6.0.0" + "@csstools/postcss-cascade-layers" "^3.0.1" + "@csstools/postcss-color-function" "^2.2.2" + "@csstools/postcss-color-mix-function" "^1.0.2" + "@csstools/postcss-font-format-keywords" "^2.0.2" + "@csstools/postcss-gradients-interpolation-method" "^3.0.5" + "@csstools/postcss-hwb-function" "^2.2.2" + "@csstools/postcss-ic-unit" "^2.0.3" + "@csstools/postcss-is-pseudo-class" "^3.2.1" + "@csstools/postcss-logical-float-and-clear" "^1.0.1" + "@csstools/postcss-logical-resize" "^1.0.1" + "@csstools/postcss-logical-viewport-units" "^1.0.3" + "@csstools/postcss-media-minmax" "^1.0.2" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^1.0.2" + "@csstools/postcss-nested-calc" "^2.0.2" + "@csstools/postcss-normalize-display-values" "^2.0.1" + "@csstools/postcss-oklab-function" "^2.2.2" + "@csstools/postcss-progressive-custom-properties" "^2.2.0" + "@csstools/postcss-scope-pseudo-class" "^2.0.2" + "@csstools/postcss-stepped-value-functions" "^2.1.1" + "@csstools/postcss-text-decoration-shorthand" "^2.2.4" + "@csstools/postcss-trigonometric-functions" "^2.1.1" + "@csstools/postcss-unset-value" "^2.0.1" + autoprefixer "^10.4.14" + browserslist "^4.21.5" + css-blank-pseudo "^5.0.2" + css-has-pseudo "^5.0.2" + css-prefers-color-scheme "^8.0.2" + cssdb "^7.6.0" + postcss-attribute-case-insensitive "^6.0.2" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^5.0.0" - postcss-color-hex-alpha "^9.0.0" - postcss-color-rebeccapurple "^8.0.0" - postcss-custom-media "^9.1.0" - postcss-custom-properties "^13.1.0" - postcss-custom-selectors "^7.1.0" - postcss-dir-pseudo-class "^7.0.0" - postcss-double-position-gradients "^4.0.0" - postcss-focus-visible "^8.0.0" - postcss-focus-within "^7.0.0" + postcss-color-functional-notation "^5.0.2" + postcss-color-hex-alpha "^9.0.2" + postcss-color-rebeccapurple "^8.0.2" + postcss-custom-media "^9.1.3" + postcss-custom-properties "^13.1.5" + postcss-custom-selectors "^7.1.3" + postcss-dir-pseudo-class "^7.0.2" + postcss-double-position-gradients "^4.0.3" + postcss-focus-visible "^8.0.2" + postcss-focus-within "^7.0.2" postcss-font-variant "^5.0.0" - postcss-gap-properties "^4.0.0" - postcss-image-set-function "^5.0.0" + postcss-gap-properties "^4.0.1" + postcss-image-set-function "^5.0.2" postcss-initial "^4.0.1" - postcss-lab-function "^5.0.0" - postcss-logical "^6.0.0" - postcss-media-minmax "^5.0.0" - postcss-nesting "^11.0.0" - postcss-opacity-percentage "^1.1.3" - postcss-overflow-shorthand "^4.0.0" + postcss-lab-function "^5.2.2" + postcss-logical "^6.2.0" + postcss-nesting "^11.2.1" + postcss-opacity-percentage "^2.0.0" + postcss-overflow-shorthand "^4.0.1" postcss-page-break "^3.0.4" - postcss-place "^8.0.0" - postcss-pseudo-class-any-link "^8.0.0" + postcss-place "^8.0.1" + postcss-pseudo-class-any-link "^8.0.2" postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.0" + postcss-selector-not "^7.0.1" postcss-value-parser "^4.2.0" -postcss-pseudo-class-any-link@^8.0.0: +postcss-pseudo-class-any-link@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-8.0.2.tgz#f5738503f2045de0c4dc216eca99bd835f74e42e" integrity sha512-FYTIuRE07jZ2CW8POvctRgArQJ43yxhr5vLmImdKUvjFCkR09kh8pIdlCwdx/jbFm7MiW4QP58L4oOUv3grQYA== @@ -1638,7 +1688,7 @@ postcss-replace-overflow-wrap@^4.0.0: resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== -postcss-selector-not@^7.0.0: +postcss-selector-not@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== @@ -1646,9 +1696,9 @@ postcss-selector-not@^7.0.0: postcss-selector-parser "^6.0.10" postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -1674,11 +1724,11 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.6: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -1728,6 +1778,11 @@ readable-web-to-node-stream@^3.0.2: dependencies: readable-stream "^3.6.0" +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -1739,11 +1794,11 @@ resolve-alpn@^1.0.0: integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve@^1.1.7: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -1767,9 +1822,9 @@ run-parallel@^1.1.9: queue-microtask "^1.2.2" rxjs@^7.0.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -1796,9 +1851,9 @@ semver@^6.0.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.5, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== dependencies: lru-cache "^6.0.0" @@ -1827,9 +1882,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== signal-exit@^3.0.0, signal-exit@^3.0.3: version "3.0.7" @@ -1994,14 +2049,14 @@ trim-repeated@^2.0.0: escape-string-regexp "^5.0.0" tslib@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -2073,9 +2128,9 @@ yargs-parser@^21.1.1: integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: - version "17.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" diff --git a/public/js/scripts.min.js b/public/js/scripts.min.js index abf4101f..bf30cb45 100644 --- a/public/js/scripts.min.js +++ b/public/js/scripts.min.js @@ -1,8 +1,8 @@ -function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _objectSpread(target){for(var i=1;i{console.log("Service worker registered",reg.scope)}).catch(error=>{console.error("Failed to register service worker",error)});const matches=(elm,selector)=>{let m=(elm.document||elm.ownerDocument).querySelectorAll(selector);let i=matches.length;while(--i>=0&&m.item(i)!==elm);return i>-1};const AnimeClient={noop:()=>{},$(selector,context=null){if(typeof selector!=="string")return selector;context=context!==null&&context.nodeType===1?context:document;let elements=[];if(selector.match(/^#([\w]+$)/))elements.push(document.getElementById(selector.split("#")[1]));else elements=[].slice.apply(context.querySelectorAll(selector));return elements},hasElement(selector){return AnimeClient.$(selector).length>0},scrollToTop(){const el=AnimeClient.$("header")[0];el.scrollIntoView(true)},hide(sel){if(typeof sel==="string")sel=AnimeClient.$(sel);if(Array.isArray(sel))sel.forEach(el=>el.setAttribute("hidden","hidden"));else sel.setAttribute("hidden","hidden")},show(sel){if(typeof sel==="string")sel=AnimeClient.$(sel);if(Array.isArray(sel))sel.forEach(el=>el.removeAttribute("hidden"));else sel.removeAttribute("hidden")},showMessage(type,message){let template=`
+function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _object_spread(target){for(var i=1;i{console.log("Service worker registered",reg.scope)}).catch(error=>{console.error("Failed to register service worker",error)});const matches=(elm,selector)=>{let m=(elm.document||elm.ownerDocument).querySelectorAll(selector);let i=matches.length;while(--i>=0&&m.item(i)!==elm);return i>-1};const AnimeClient={noop:()=>{},$(selector,context=null){if(typeof selector!=="string")return selector;context=context!==null&&context.nodeType===1?context:document;let elements=[];if(selector.match(/^#([\w]+$)/))elements.push(document.getElementById(selector.split("#")[1]));else elements=[].slice.apply(context.querySelectorAll(selector));return elements},hasElement(selector){return AnimeClient.$(selector).length>0},scrollToTop(){const el=AnimeClient.$("header")[0];el.scrollIntoView(true)},hide(sel){if(typeof sel==="string")sel=AnimeClient.$(sel);if(Array.isArray(sel))sel.forEach(el=>el.setAttribute("hidden","hidden"));else sel.setAttribute("hidden","hidden")},show(sel){if(typeof sel==="string")sel=AnimeClient.$(sel);if(Array.isArray(sel))sel.forEach(el=>el.removeAttribute("hidden"));else sel.removeAttribute("hidden")},showMessage(type,message){let template=`
${message} -
`;let sel=AnimeClient.$(".message");if(sel[0]!==undefined)sel[0].remove();AnimeClient.$("header")[0].insertAdjacentHTML("beforeend",template)},closestParent(current,parentSelector){if(Element.prototype.closest!==undefined)return current.closest(parentSelector);while(current!==document.documentElement){if(matches(current,parentSelector))return current;current=current.parentElement}return null},url(path){let uri=`//${document.location.host}`;uri+=path.charAt(0)==="/"?path:`/${path}`;return uri},throttle(interval,fn,scope){let wait=false;return function(...args){const context=scope||this;if(!wait){fn.apply(context,args);wait=true;setTimeout(function(){wait=false},interval)}}}};function addEvent(sel,event,listener){if(!event.match(/^([\w\-]+)$/))event.split(" ").forEach(evt=>{addEvent(sel,evt,listener)});sel.addEventListener(event,listener,false)}function delegateEvent(sel,target,event,listener){addEvent(sel,event,e=>{AnimeClient.$(target,sel).forEach(element=>{if(e.target==element){listener.call(element,e);e.stopPropagation()}})})}AnimeClient.on=(sel,event,target,listener)=>{if(listener===undefined){listener=target;AnimeClient.$(sel).forEach(el=>{addEvent(el,event,listener)})}else AnimeClient.$(sel).forEach(el=>{delegateEvent(el,target,event,listener)})};function ajaxSerialize(data){let pairs=[];Object.keys(data).forEach(name=>{let value=data[name].toString();name=encodeURIComponent(name);value=encodeURIComponent(value);pairs.push(`${name}=${value}`)});return pairs.join("&")}AnimeClient.ajax=(url,config)=>{const defaultConfig={data:{},type:"GET",dataType:"",success:AnimeClient.noop,mimeType:"application/x-www-form-urlencoded",error:AnimeClient.noop};config=_objectSpread({},defaultConfig,config);let request=new XMLHttpRequest;let method=String(config.type).toUpperCase();if(method==="GET")url+=url.match(/\?/)?ajaxSerialize(config.data):`?${ajaxSerialize(config.data)}`;request.open(method,url);request.onreadystatechange=()=>{if(request.readyState===4){let responseText="";if(request.responseType==="json")responseText=JSON.parse(request.responseText);else responseText=request.responseText;if(request.status>299)config.error.call(null,request.status,responseText,request.response);else config.success.call(null,responseText,request.status)}};if(config.dataType==="json"){config.data=JSON.stringify(config.data);config.mimeType="application/json"}else config.data=ajaxSerialize(config.data);request.setRequestHeader("Content-Type",config.mimeType);if(method==="GET")request.send(null);else request.send(config.data);return request};AnimeClient.get=(url,data,callback=null)=>{if(callback===null){callback=data;data={}}return AnimeClient.ajax(url,{data,success:callback})};AnimeClient.on("header","click",".message",hide);AnimeClient.on("form.js-delete","submit",confirmDelete);AnimeClient.on(".js-clear-cache","click",clearAPICache);AnimeClient.on(".vertical-tabs input","change",scrollToSection);AnimeClient.on(".media-filter","input",filterMedia);function hide(event){AnimeClient.hide(event.target)}function confirmDelete(event){const proceed=confirm("Are you ABSOLUTELY SURE you want to delete this item?");if(proceed===false){event.preventDefault();event.stopPropagation()}}function clearAPICache(){AnimeClient.get("/cache_purge",()=>{AnimeClient.showMessage("success","Successfully purged api cache")})}function scrollToSection(event){const el=event.currentTarget.parentElement;const rect=el.getBoundingClientRect();const top=rect.top+window.pageYOffset;window.scrollTo({top,behavior:"smooth"})}function filterMedia(event){const rawFilter=event.target.value;const filter=new RegExp(rawFilter,"i");if(rawFilter!==""){AnimeClient.$("article.media").forEach(article=>{const titleLink=AnimeClient.$(".name a",article)[0];const title=String(titleLink.textContent).trim();if(!filter.test(title))AnimeClient.hide(article);else AnimeClient.show(article)});AnimeClient.$("table.media-wrap tbody tr").forEach(tr=>{const titleCell=AnimeClient.$("td.align-left",tr)[0];const titleLink=AnimeClient.$("a",titleCell)[0];const linkTitle=String(titleLink.textContent).trim();const textTitle=String(titleCell.textContent).trim();if(!(filter.test(linkTitle)||filter.test(textTitle)))AnimeClient.hide(tr);else AnimeClient.show(tr)})}else{AnimeClient.show("article.media");AnimeClient.show("table.media-wrap tbody tr")}}(()=>{let hidden=null;let visibilityChange=null;if(typeof document.hidden!=="undefined"){hidden="hidden";visibilityChange="visibilitychange"}else if(typeof document.msHidden!=="undefined"){hidden="msHidden";visibilityChange="msvisibilitychange"}else if(typeof document.webkitHidden!=="undefined"){hidden="webkitHidden";visibilityChange="webkitvisibilitychange"}function handleVisibilityChange(){if(!document[hidden])AnimeClient.get("/heartbeat",beat=>{const status=JSON.parse(beat);if(status.hasAuth!==true){document.removeEventListener(visibilityChange,handleVisibilityChange,false);location.reload()}})}if(hidden===null)console.info("Page visibility API not supported, JS session check will not work");else document.addEventListener(visibilityChange,handleVisibilityChange,false)})();AnimeClient.on("main","change",".big-check",e=>{const id=e.target.id;document.getElementById(`mal_${id}`).checked=true;document.getElementById(`anilist_${id}`).checked=true});function renderEditLink(type,item,isCollection=false){if(isCollection||item.libraryEntry===null)return"";return` +
`;let sel=AnimeClient.$(".message");if(sel[0]!==undefined)sel[0].remove();AnimeClient.$("header")[0].insertAdjacentHTML("beforeend",template)},closestParent(current,parentSelector){if(Element.prototype.closest!==undefined)return current.closest(parentSelector);while(current!==document.documentElement){if(matches(current,parentSelector))return current;current=current.parentElement}return null},url(path){let uri=`//${document.location.host}`;uri+=path.charAt(0)==="/"?path:`/${path}`;return uri},throttle(interval,fn,scope){let wait=false;return function(...args){const context=scope||this;if(!wait){fn.apply(context,args);wait=true;setTimeout(function(){wait=false},interval)}}}};function addEvent(sel,event,listener){if(!event.match(/^([\w\-]+)$/))event.split(" ").forEach(evt=>{addEvent(sel,evt,listener)});sel.addEventListener(event,listener,false)}function delegateEvent(sel,target,event,listener){addEvent(sel,event,e=>{AnimeClient.$(target,sel).forEach(element=>{if(e.target==element){listener.call(element,e);e.stopPropagation()}})})}AnimeClient.on=(sel,event,target,listener)=>{if(listener===undefined){listener=target;AnimeClient.$(sel).forEach(el=>{addEvent(el,event,listener)})}else AnimeClient.$(sel).forEach(el=>{delegateEvent(el,target,event,listener)})};function ajaxSerialize(data){let pairs=[];Object.keys(data).forEach(name=>{let value=data[name].toString();name=encodeURIComponent(name);value=encodeURIComponent(value);pairs.push(`${name}=${value}`)});return pairs.join("&")}AnimeClient.ajax=(url,config)=>{const defaultConfig={data:{},type:"GET",dataType:"",success:AnimeClient.noop,mimeType:"application/x-www-form-urlencoded",error:AnimeClient.noop};config=_object_spread({},defaultConfig,config);let request=new XMLHttpRequest;let method=String(config.type).toUpperCase();if(method==="GET")url+=url.match(/\?/)?ajaxSerialize(config.data):`?${ajaxSerialize(config.data)}`;request.open(method,url);request.onreadystatechange=()=>{if(request.readyState===4){let responseText="";if(request.responseType==="json")responseText=JSON.parse(request.responseText);else responseText=request.responseText;if(request.status>299)config.error.call(null,request.status,responseText,request.response);else config.success.call(null,responseText,request.status)}};if(config.dataType==="json"){config.data=JSON.stringify(config.data);config.mimeType="application/json"}else config.data=ajaxSerialize(config.data);request.setRequestHeader("Content-Type",config.mimeType);if(method==="GET")request.send(null);else request.send(config.data);return request};AnimeClient.get=(url,data,callback=null)=>{if(callback===null){callback=data;data={}}return AnimeClient.ajax(url,{data,success:callback})};AnimeClient.on("header","click",".message",hide);AnimeClient.on("form.js-delete","submit",confirmDelete);AnimeClient.on(".js-clear-cache","click",clearAPICache);AnimeClient.on(".vertical-tabs input","change",scrollToSection);AnimeClient.on(".media-filter","input",filterMedia);function hide(event){AnimeClient.hide(event.target)}function confirmDelete(event){const proceed=confirm("Are you ABSOLUTELY SURE you want to delete this item?");if(proceed===false){event.preventDefault();event.stopPropagation()}}function clearAPICache(){AnimeClient.get("/cache_purge",()=>{AnimeClient.showMessage("success","Successfully purged api cache")})}function scrollToSection(event){const el=event.currentTarget.parentElement;const rect=el.getBoundingClientRect();const top=rect.top+window.pageYOffset;window.scrollTo({top,behavior:"smooth"})}function filterMedia(event){const rawFilter=event.target.value;const filter=new RegExp(rawFilter,"i");if(rawFilter!==""){AnimeClient.$("article.media").forEach(article=>{const titleLink=AnimeClient.$(".name a",article)[0];const title=String(titleLink.textContent).trim();if(!filter.test(title))AnimeClient.hide(article);else AnimeClient.show(article)});AnimeClient.$("table.media-wrap tbody tr").forEach(tr=>{const titleCell=AnimeClient.$("td.align-left",tr)[0];const titleLink=AnimeClient.$("a",titleCell)[0];const linkTitle=String(titleLink.textContent).trim();const textTitle=String(titleCell.textContent).trim();if(!(filter.test(linkTitle)||filter.test(textTitle)))AnimeClient.hide(tr);else AnimeClient.show(tr)})}else{AnimeClient.show("article.media");AnimeClient.show("table.media-wrap tbody tr")}}(()=>{let hidden=null;let visibilityChange=null;if(typeof document.hidden!=="undefined"){hidden="hidden";visibilityChange="visibilitychange"}else if(typeof document.msHidden!=="undefined"){hidden="msHidden";visibilityChange="msvisibilitychange"}else if(typeof document.webkitHidden!=="undefined"){hidden="webkitHidden";visibilityChange="webkitvisibilitychange"}function handleVisibilityChange(){if(!document[hidden])AnimeClient.get("/heartbeat",beat=>{const status=JSON.parse(beat);if(status.hasAuth!==true){document.removeEventListener(visibilityChange,handleVisibilityChange,false);location.reload()}})}if(hidden===null)console.info("Page visibility API not supported, JS session check will not work");else document.addEventListener(visibilityChange,handleVisibilityChange,false)})();AnimeClient.on("main","change",".big-check",e=>{const id=e.target.id;document.getElementById(`mal_${id}`).checked=true;document.getElementById(`anilist_${id}`).checked=true});function renderEditLink(type,item,isCollection=false){if(isCollection||item.libraryEntry===null)return"";return`
[ Already in List ]
@@ -35,4 +35,4 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj - `}).join("")}function _normalizeProperty(props,sep="."){return props.replace(/\[(.*?)]/g,sep+"$1")}function hasNestedProperty(object,property){if(object&&typeof object==="object"){if(typeof property==="string"&&property!==""){property=_normalizeProperty(property);let split=property.split(".");return split.reduce((obj,prop,idx,array)=>{if(idx===array.length-1)return!!(obj&&obj.hasOwnProperty(prop));return obj&&obj[prop]},object)}else if(typeof property==="number")return property in object}return false}function getNestedProperty(object,property,sep="."){if(isType("string",property)&&property!==""){property=_normalizeProperty(property,sep);const levels=property.split(sep);try{return levels.reduce((obj,prop)=>obj[prop],object)}catch(e){return undefined}}return null}function getType(x){if(Array.isArray(x))return"array";if(typeof x!=="object")return(typeof x).toLowerCase();const type=function(){return Object.prototype.toString.call(this).slice(8,-1)};return type.call(x).toLowerCase()}function isType(type,val){return getType(val)===String(type).toLowerCase()}const search=(query,isCollection=false)=>{AnimeClient.show(".cssload-loader");return AnimeClient.get(AnimeClient.url("/anime-collection/search"),{query},(searchResults,status)=>{searchResults=JSON.parse(searchResults);AnimeClient.hide(".cssload-loader");AnimeClient.$("#series-list")[0].innerHTML=renderSearchResults("anime",searchResults,isCollection)})};if(AnimeClient.hasElement(".anime #search")){let prevRequest=null;AnimeClient.on("#search","input",AnimeClient.throttle(250,e=>{const query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search(query)}))}if(AnimeClient.hasElement("#search-anime-collection")){let prevRequest=null;AnimeClient.on("#search-anime-collection","input",AnimeClient.throttle(250,e=>{const query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search(query,true)}))}AnimeClient.on("body.anime.list","click",".plus-one",e=>{let parentSel=AnimeClient.closestParent(e.target,"article");let watchedCount=parseInt(AnimeClient.$(".completed_number",parentSel)[0].textContent,10)||0;let totalCount=parseInt(AnimeClient.$(".total_number",parentSel)[0].textContent,10);let title=AnimeClient.$(".name a",parentSel)[0].textContent;let data={id:parentSel.dataset.kitsuId,anilist_id:parentSel.dataset.anilistId,mal_id:parentSel.dataset.malId,data:{progress:watchedCount+1}};const displayMessage=(type,message)=>{AnimeClient.hide("#loading-shadow");AnimeClient.showMessage(type,`${message} ${title}.`);AnimeClient.scrollToTop()};const showError=()=>displayMessage("error","Failed to update");if(isNaN(watchedCount)||watchedCount===0)data.data.status="CURRENT";if(!isNaN(watchedCount)&&watchedCount+1===totalCount)data.data.status="COMPLETED";AnimeClient.show("#loading-shadow");AnimeClient.ajax(AnimeClient.url("/anime/increment"),{data,dataType:"json",type:"POST",success:res=>{try{const resData=JSON.parse(res);let updatedProgress=getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.progress");if(hasNestedProperty(resData,"error")||updatedProgress!==data.data.progress){showError();return}if(getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.status")==="COMPLETED"){AnimeClient.hide(parentSel);displayMessage("success","Completed");return}AnimeClient.$(".completed_number",parentSel)[0].textContent=++watchedCount;displayMessage("success","Updated")}catch(_){showError()}},error:showError})});const search1=query=>{AnimeClient.show(".cssload-loader");return AnimeClient.get(AnimeClient.url("/manga/search"),{query},(searchResults,status)=>{searchResults=JSON.parse(searchResults);AnimeClient.hide(".cssload-loader");AnimeClient.$("#series-list")[0].innerHTML=renderSearchResults("manga",searchResults)})};if(AnimeClient.hasElement(".manga #search")){let prevRequest=null;AnimeClient.on("#search","input",AnimeClient.throttle(250,e=>{let query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search1(query)}))}AnimeClient.on(".manga.list","click",".edit-buttons button",e=>{let thisSel=e.target;let parentSel=AnimeClient.closestParent(e.target,"article");let type=thisSel.classList.contains("plus-one-chapter")?"chapter":"volume";let completed=parseInt(AnimeClient.$(`.${type}s_read`,parentSel)[0].textContent,10)||0;let total=parseInt(AnimeClient.$(`.${type}_count`,parentSel)[0].textContent,10);let title=AnimeClient.$(".name",parentSel)[0].textContent;if(isNaN(completed))completed=0;let data={id:parentSel.dataset.kitsuId,anilist_id:parentSel.dataset.anilistId,mal_id:parentSel.dataset.malId,data:{progress:completed}};const displayMessage=(type,message)=>{AnimeClient.hide("#loading-shadow");AnimeClient.showMessage(type,`${message} ${title}.`);AnimeClient.scrollToTop()};const showError=()=>displayMessage("error","Failed to update");if(isNaN(completed)||completed===0)data.data.status="CURRENT";if(!isNaN(completed)&&completed+1===total)data.data.status="COMPLETED";data.data.progress=++completed;AnimeClient.show("#loading-shadow");AnimeClient.ajax(AnimeClient.url("/manga/increment"),{data,dataType:"json",type:"POST",mimeType:"application/json",success:res=>{try{const resData=JSON.parse(res);let updatedProgress=getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.progress");if(hasNestedProperty(resData,"error")||updatedProgress!==data.data.progress){showError();return}if(getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.status")==="COMPLETED"){AnimeClient.hide(parentSel);displayMessage("success","Completed");return}AnimeClient.$(`.${type}s_read`,parentSel)[0].textContent=String(completed);displayMessage("success","Updated")}catch(_){showError()}},error:showError})}); \ No newline at end of file + `}).join("")}function _normalizeProperty(props,sep="."){return props.replace(/\[(.*?)]/g,sep+"$1")}function hasNestedProperty(object,property){if(object&&typeof object==="object"){if(typeof property==="string"&&property!==""){property=_normalizeProperty(property);let split=property.split(".");return split.reduce((obj,prop,idx,array)=>{if(idx===array.length-1)return!!(obj&&obj.hasOwnProperty(prop));return obj&&obj[prop]},object)}else if(typeof property==="number")return property in object}return false}function getNestedProperty(object,property,sep="."){if(isType("string",property)&&property!==""){property=_normalizeProperty(property,sep);const levels=property.split(sep);try{return levels.reduce((obj,prop)=>obj[prop],object)}catch(e){return undefined}}return null}function getType(x){if(Array.isArray(x))return"array";if(typeof x!=="object")return(typeof x).toLowerCase();const type=function(){return Object.prototype.toString.call(this).slice(8,-1)};return type.call(x).toLowerCase()}function isType(type,val){return getType(val)===String(type).toLowerCase()}const search=(query,isCollection=false)=>{AnimeClient.show(".cssload-loader");return AnimeClient.get(AnimeClient.url("/anime-collection/search"),{query},(searchResults,status)=>{searchResults=JSON.parse(searchResults);AnimeClient.hide(".cssload-loader");AnimeClient.$("#series-list")[0].innerHTML=renderSearchResults("anime",searchResults,isCollection)})};if(AnimeClient.hasElement(".anime #search")){let prevRequest=null;AnimeClient.on("#search","input",AnimeClient.throttle(250,e=>{const query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search(query)}))}if(AnimeClient.hasElement("#search-anime-collection")){let prevRequest=null;AnimeClient.on("#search-anime-collection","input",AnimeClient.throttle(250,e=>{const query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search(query,true)}))}AnimeClient.on("body.anime.list","click",".plus-one",e=>{let parentSel=AnimeClient.closestParent(e.target,"article");let watchedCount=parseInt(AnimeClient.$(".completed_number",parentSel)[0].textContent,10)||0;let totalCount=parseInt(AnimeClient.$(".total_number",parentSel)[0].textContent,10);let title=AnimeClient.$(".name a",parentSel)[0].textContent;let data={id:parentSel.dataset.kitsuId,anilist_id:parentSel.dataset.anilistId,mal_id:parentSel.dataset.malId,data:{progress:watchedCount+1}};const displayMessage=(type,message)=>{AnimeClient.hide("#loading-shadow");AnimeClient.showMessage(type,`${message} ${title}`);AnimeClient.scrollToTop()};const showError=()=>displayMessage("error","Failed to update");if(isNaN(watchedCount)||watchedCount===0)data.data.status="CURRENT";if(!isNaN(watchedCount)&&watchedCount+1===totalCount)data.data.status="COMPLETED";AnimeClient.show("#loading-shadow");AnimeClient.ajax(AnimeClient.url("/anime/increment"),{data,dataType:"json",type:"POST",success:res=>{try{const resData=JSON.parse(res);let updatedProgress=getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.progress");if(hasNestedProperty(resData,"error")||updatedProgress!==data.data.progress){showError();return}if(getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.status")==="COMPLETED"){AnimeClient.hide(parentSel);displayMessage("success","Completed");return}AnimeClient.$(".completed_number",parentSel)[0].textContent=++watchedCount;displayMessage("success","Updated")}catch(_){showError()}},error:showError})});const search1=query=>{AnimeClient.show(".cssload-loader");return AnimeClient.get(AnimeClient.url("/manga/search"),{query},(searchResults,status)=>{searchResults=JSON.parse(searchResults);AnimeClient.hide(".cssload-loader");AnimeClient.$("#series-list")[0].innerHTML=renderSearchResults("manga",searchResults)})};if(AnimeClient.hasElement(".manga #search")){let prevRequest=null;AnimeClient.on("#search","input",AnimeClient.throttle(250,e=>{let query=encodeURIComponent(e.target.value);if(query==="")return;if(prevRequest!==null)prevRequest.abort();prevRequest=search1(query)}))}AnimeClient.on(".manga.list","click",".edit-buttons button",e=>{let thisSel=e.target;let parentSel=AnimeClient.closestParent(e.target,"article");let type=thisSel.classList.contains("plus-one-chapter")?"chapter":"volume";let completed=parseInt(AnimeClient.$(`.${type}s_read`,parentSel)[0].textContent,10)||0;let total=parseInt(AnimeClient.$(`.${type}_count`,parentSel)[0].textContent,10);let title=AnimeClient.$(".name",parentSel)[0].textContent;if(isNaN(completed))completed=0;let data={id:parentSel.dataset.kitsuId,anilist_id:parentSel.dataset.anilistId,mal_id:parentSel.dataset.malId,data:{progress:completed}};const displayMessage=(type,message)=>{AnimeClient.hide("#loading-shadow");AnimeClient.showMessage(type,`${message} ${title}`);AnimeClient.scrollToTop()};const showError=()=>displayMessage("error","Failed to update");if(isNaN(completed)||completed===0)data.data.status="CURRENT";if(!isNaN(completed)&&completed+1===total)data.data.status="COMPLETED";data.data.progress=++completed;AnimeClient.show("#loading-shadow");AnimeClient.ajax(AnimeClient.url("/manga/increment"),{data,dataType:"json",type:"POST",mimeType:"application/json",success:res=>{try{const resData=JSON.parse(res);let updatedProgress=getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.progress");if(hasNestedProperty(resData,"error")||updatedProgress!==data.data.progress){showError();return}if(getNestedProperty(resData,"data.libraryEntry.update.libraryEntry.status")==="COMPLETED"){AnimeClient.hide(parentSel);displayMessage("success","Completed");return}AnimeClient.$(`.${type}s_read`,parentSel)[0].textContent=String(completed);displayMessage("success","Updated")}catch(_){showError()}},error:showError})}); \ No newline at end of file diff --git a/public/js/scripts.min.js.map b/public/js/scripts.min.js.map index 24a2ad88..eb1b3b25 100644 --- a/public/js/scripts.min.js.map +++ b/public/js/scripts.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/sw.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/anime-client.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/events.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/session-check.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/template-helpers.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/fns.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/anime.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/manga.js"],"sourcesContent":["// Start the service worker, if you can\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}","// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet m = (elm.document || elm.ownerDocument).querySelectorAll(selector);\n\tlet i = matches.length;\n\twhile (--i >= 0 && m.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nconst AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {Element} [context]\n\t * @return array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\tconst el = AnimeClient.$('header')[0];\n\t\tel.scrollIntoView(true);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element|Element[]} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.setAttribute('hidden', 'hidden'));\n\t\t} else {\n\t\t\tsel.setAttribute('hidden', 'hidden');\n\t\t}\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element|Element[]} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.removeAttribute('hidden'));\n\t\t} else {\n\t\t\tsel.removeAttribute('hidden');\n\t\t}\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {Element} current - the current Element\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {Element|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|Element} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|Element|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {XMLHttpRequest}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tif (method === 'GET') {\n\t\trequest.send(null);\n\t} else {\n\t\trequest.send(config.data);\n\t}\n\n\treturn request\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n * @return {XMLHttpRequest}\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './anime-client.js';\n\n// ----------------------------------------------------------------------------\n// Event subscriptions\n// ----------------------------------------------------------------------------\n_.on('header', 'click', '.message', hide);\n_.on('form.js-delete', 'submit', confirmDelete);\n_.on('.js-clear-cache', 'click', clearAPICache);\n_.on('.vertical-tabs input', 'change', scrollToSection);\n_.on('.media-filter', 'input', filterMedia);\n\n// ----------------------------------------------------------------------------\n// Handler functions\n// ----------------------------------------------------------------------------\n\n/**\n * Hide the html element attached to the event\n *\n * @param {MouseEvent} event\n * @return void\n */\nfunction hide (event) {\n\t_.hide(event.target)\n}\n\n/**\n * Confirm deletion of an item\n *\n * @param {MouseEvent} event\n * @return void\n */\nfunction confirmDelete (event) {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n}\n\n/**\n * Clear the API cache, and show a message if the cache is cleared\n *\n * @return void\n */\nfunction clearAPICache () {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n}\n\n/**\n * Scroll to the accordion/vertical tab section just opened\n *\n * @param {InputEvent} event\n * @return void\n */\nfunction scrollToSection (event) {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n}\n\n/**\n * Filter an anime or manga list\n *\n * @param {InputEvent} event\n * @return void\n */\nfunction filterMedia (event) {\n\tconst rawFilter = event.target.value;\n\tconst filter = new RegExp(rawFilter, 'i');\n\n\t// console.log('Filtering items by: ', filter);\n\n\tif (rawFilter !== '') {\n\t\t// Filter the cover view\n\t\t_.$('article.media').forEach(article => {\n\t\t\tconst titleLink = _.$('.name a', article)[0];\n\t\t\tconst title = String(titleLink.textContent).trim();\n\t\t\tif ( ! filter.test(title)) {\n\t\t\t\t_.hide(article);\n\t\t\t} else {\n\t\t\t\t_.show(article);\n\t\t\t}\n\t\t});\n\n\t\t// Filter the list view\n\t\t_.$('table.media-wrap tbody tr').forEach(tr => {\n\t\t\tconst titleCell = _.$('td.align-left', tr)[0];\n\t\t\tconst titleLink = _.$('a', titleCell)[0];\n\t\t\tconst linkTitle = String(titleLink.textContent).trim();\n\t\t\tconst textTitle = String(titleCell.textContent).trim();\n\t\t\tif ( ! (filter.test(linkTitle) || filter.test(textTitle))) {\n\t\t\t\t_.hide(tr);\n\t\t\t} else {\n\t\t\t\t_.show(tr);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t_.show('article.media');\n\t\t_.show('table.media-wrap tbody tr');\n\t}\n}\n","import _ from './anime-client.js';\n\n(() => {\n\tlet hidden = null;\n\tlet visibilityChange = null;\n\n\tif (typeof document.hidden !== \"undefined\") {\n\t\thidden = \"hidden\";\n\t\tvisibilityChange = \"visibilitychange\";\n\t} else if (typeof document.msHidden !== \"undefined\") {\n\t\thidden = \"msHidden\";\n\t\tvisibilityChange = \"msvisibilitychange\";\n\t} else if (typeof document.webkitHidden !== \"undefined\") {\n\t\thidden = \"webkitHidden\";\n\t\tvisibilityChange = \"webkitvisibilitychange\";\n\t}\n\n\tfunction handleVisibilityChange() {\n\t\t// Check the user's session to see if they are currently logged-in\n\t\t// when the page becomes visible\n\t\tif ( ! document[hidden]) {\n\t\t\t_.get('/heartbeat', (beat) => {\n\t\t\t\tconst status = JSON.parse(beat)\n\n\t\t\t\t// If the session is expired, immediately reload so that\n\t\t\t\t// you can't attempt to do an action that requires authentication\n\t\t\t\tif (status.hasAuth !== true) {\n\t\t\t\t\tdocument.removeEventListener(visibilityChange, handleVisibilityChange, false);\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (hidden === null) {\n\t\tconsole.info('Page visibility API not supported, JS session check will not work');\n\t} else {\n\t\tdocument.addEventListener(visibilityChange, handleVisibilityChange, false);\n\t}\n})();","import _ from './anime-client.js';\n\n// Click on hidden MAL checkbox so\n// that MAL id is passed\n_.on('main', 'change', '.big-check', (e) => {\n\tconst id = e.target.id;\n\tdocument.getElementById(`mal_${id}`).checked = true;\n\tdocument.getElementById(`anilist_${id}`).checked = true;\n});\n\n/**\n * On search results with an existing library entry, this shows that fact, with an edit link for the existing\n * library entry\n *\n * @param {'anime'|'manga'} type\n * @param {Object} item\n * @param isCollection\n * @returns {String}\n */\nfunction renderEditLink (type, item, isCollection = false) {\n\tif (isCollection || item.libraryEntry === null) {\n\t\treturn '';\n\t}\n\n\treturn `\n\t\t
\n\t\t\t[ Already in List ]\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\tEdit\n\t\t\t\n\t\t
\n\t\t
 
\n\t`\n}\n\n/**\n * Show the search results for a media item\n *\n * @param {'anime'|'manga'} type\n * @param {Object} data\n * @param {boolean} isCollection\n * @returns {String}\n */\nexport function renderSearchResults (type, data, isCollection = false) {\n\treturn data.map(item => {\n\t\tconst titles = item.titles.join('
');\n\t\tlet disabled = item.libraryEntry !== null ? 'disabled' : '';\n\t\tconst editLink = renderEditLink(type, item, isCollection);\n\n\t\tif (isCollection) {\n\t\t\tdisabled = '';\n\t\t}\n\n\t\treturn `\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t${editLink}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`;\n\t}).join('');\n}","/**\n * Make sure properties are in an easily splittable format\n *\n * @private\n * @param {String} props\n * @param {String} [sep='.'] The default separator\n * @return {String}\n */\nfunction _normalizeProperty(props, sep = '.') {\n\t// Since we split by period, and property lookup\n\t// is the same by dot or [], replace bracket lookups\n\t// with periods\n\treturn props.replace(/\\[(.*?)]/g, sep + '$1');\n}\n\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, 'b.c.d') will return true.\n *\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns {boolean} true when property in object, false otherwise\n */\nexport function hasNestedProperty(object, property) {\n\tif (object && typeof object === 'object') {\n\t\tif (typeof property === 'string' && property !== '') {\n\t\t\tproperty = _normalizeProperty(property);\n\n\t\t\tlet split = property.split('.');\n\t\t\treturn split.reduce((obj, prop, idx, array) => {\n\t\t\t\tif (idx === array.length - 1) {\n\t\t\t\t\treturn !!(obj && obj.hasOwnProperty(prop));\n\t\t\t\t}\n\n\t\t\t\treturn obj && obj[prop];\n\t\t\t}, object);\n\t\t} else if (typeof property === 'number') {\n\t\t\treturn property in object;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Get the value of a deeply nested property in an object\n *\n * @param {Object} object the object to get the property\n * @param {string} property the path to the property as a string\n * @param {string} [sep='.'] The default separator to split on\n * @return {*} the value of the property\n */\nexport function getNestedProperty(object, property, sep = '.') {\n\tif (isType('string', property) && property !== '') {\n\t\t// convert numbers to dot syntax\n\t\tproperty = _normalizeProperty(property, sep);\n\t\tconst levels = property.split(sep);\n\n\t\ttry {\n\t\t\treturn levels.reduce((obj, prop) => obj[prop], object);\n\t\t} catch (e) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Reliably get the type of the value of a variable\n *\n * @param {*} x The variable to get the type of\n * @return {string} The name of the type\n */\nexport function getType(x) {\n\t// is it an array?\n\tif (Array.isArray(x)) {\n\t\treturn 'array';\n\t}\n\n\t// Use typeof for truthy primitives\n\tif (typeof x !== 'object') {\n\t\treturn (typeof x).toLowerCase();\n\t}\n\n\tconst type = function () {\n\t\treturn Object.prototype.toString.call(this).slice(8, -1);\n\t}\n\n\t// Otherwise, strip the type out of the '[Object x]' toString value\n\treturn type.call(x).toLowerCase();\n}\n\n/**\n * Check whether the value matches the passed type name\n *\n * @param {string} type Javascript type name\n * @param {*} val The value to type check\n * @return {boolean}\n */\nexport function isType(type, val) {\n\treturn getType(val) === String(type).toLowerCase();\n}","import _ from './anime-client.js'\nimport { renderSearchResults } from './template-helpers.js'\nimport { getNestedProperty, hasNestedProperty } from \"./fns\";\n\nconst search = (query, isCollection = false) => {\n\t// Show the loader\n\t_.show('.cssload-loader');\n\n\t// Do the api search\n\treturn _.get(_.url('/anime-collection/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\n\t\t// Hide the loader\n\t\t_.hide('.cssload-loader');\n\n\t\t// Show the results\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderSearchResults('anime', searchResults, isCollection);\n\t});\n};\n\n// Anime list search\nif (_.hasElement('.anime #search')) {\n\tlet prevRequest = null;\n\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query);\n\t}));\n}\n\n// Anime collection search\nif (_.hasElement('#search-anime-collection')) {\n\tlet prevRequest = null;\n\n\t_.on('#search-anime-collection', 'input', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query, true);\n\t}));\n}\n\n// Action to increment episode count\n_.on('body.anime.list', 'click', '.plus-one', (e) => {\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet watchedCount = parseInt(_.$('.completed_number', parentSel)[ 0 ].textContent, 10) || 0;\n\tlet totalCount = parseInt(_.$('.total_number', parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name a', parentSel)[ 0 ].textContent;\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tanilist_id: parentSel.dataset.anilistId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: watchedCount + 1\n\t\t}\n\t};\n\n\tconst displayMessage = (type, message) => {\n\t\t_.hide('#loading-shadow');\n\t\t_.showMessage(type, `${message} ${title}.`);\n\t\t_.scrollToTop();\n\t}\n\n\tconst showError = () => displayMessage('error', 'Failed to update');\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently watching\n\tif (isNaN(watchedCount) || watchedCount === 0) {\n\t\tdata.data.status = 'CURRENT';\n\t}\n\n\t// If you increment at the last episode, mark as completed\n\tif ((!isNaN(watchedCount)) && (watchedCount + 1) === totalCount) {\n\t\tdata.data.status = 'COMPLETED';\n\t}\n\n\t_.show('#loading-shadow');\n\n\t// okay, lets actually make some changes!\n\t_.ajax(_.url('/anime/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tsuccess: (res) => {\n\t\t\ttry {\n\t\t\t\tconst resData = JSON.parse(res);\n\n\t\t\t\t// Do a rough sanity check for weird errors\n\t\t\t\tlet updatedProgress = getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.progress');\n\t\t\t\tif (hasNestedProperty(resData, 'error') || updatedProgress !== data.data.progress) {\n\t\t\t\t\tshowError();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// We've completed the series\n\t\t\t\tif (getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.status') === 'COMPLETED') {\n\t\t\t\t\t_.hide(parentSel);\n\t\t\t\t\tdisplayMessage('success', 'Completed')\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Just a normal update\n\t\t\t\t_.$('.completed_number', parentSel)[ 0 ].textContent = ++watchedCount;\n\t\t\t\tdisplayMessage('success', 'Updated');\n\t\t\t} catch (_) {\n\t\t\t\tshowError();\n\t\t\t}\n\t\t},\n\t\terror: showError,\n\t});\n});","import _ from './anime-client.js'\nimport { renderSearchResults } from './template-helpers.js'\nimport { getNestedProperty, hasNestedProperty } from \"./fns\";\n\nconst search = (query) => {\n\t_.show('.cssload-loader');\n\treturn _.get(_.url('/manga/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\t\t_.hide('.cssload-loader');\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderSearchResults('manga', searchResults);\n\t});\n};\n\nif (_.hasElement('.manga #search')) {\n\tlet prevRequest = null\n\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tlet query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query);\n\t}));\n}\n\n/**\n * Javascript for editing manga, if logged in\n */\n_.on('.manga.list', 'click', '.edit-buttons button', (e) => {\n\tlet thisSel = e.target;\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet type = thisSel.classList.contains('plus-one-chapter') ? 'chapter' : 'volume';\n\tlet completed = parseInt(_.$(`.${type}s_read`, parentSel)[ 0 ].textContent, 10) || 0;\n\tlet total = parseInt(_.$(`.${type}_count`, parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name', parentSel)[ 0 ].textContent;\n\n\tif (isNaN(completed)) {\n\t\tcompleted = 0;\n\t}\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tanilist_id: parentSel.dataset.anilistId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: completed\n\t\t}\n\t};\n\n\tconst displayMessage = (type, message) => {\n\t\t_.hide('#loading-shadow');\n\t\t_.showMessage(type, `${message} ${title}.`);\n\t\t_.scrollToTop();\n\t}\n\n\tconst showError = () => displayMessage('error', 'Failed to update');\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently reading\n\tif (isNaN(completed) || completed === 0) {\n\t\tdata.data.status = 'CURRENT';\n\t}\n\n\t// If you increment at the last chapter, mark as completed\n\tif ((!isNaN(completed)) && (completed + 1) === total) {\n\t\tdata.data.status = 'COMPLETED';\n\t}\n\n\t// Update the total count\n\tdata.data.progress = ++completed;\n\n\t_.show('#loading-shadow');\n\n\t_.ajax(_.url('/manga/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tmimeType: 'application/json',\n\t\tsuccess: (res) => {\n\t\t\ttry {\n\t\t\t\tconst resData = JSON.parse(res);\n\n\t\t\t\t// Do a rough sanity check for weird errors\n\t\t\t\tlet updatedProgress = getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.progress');\n\t\t\t\tif (hasNestedProperty(resData, 'error') || updatedProgress !== data.data.progress) {\n\t\t\t\t\tshowError();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// We've completed the series\n\t\t\t\tif (getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.status') === 'COMPLETED') {\n\t\t\t\t\t_.hide(parentSel);\n\t\t\t\t\tdisplayMessage('success', 'Completed')\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Just a normal update\n\t\t\t\t_.$(`.${type}s_read`, parentSel)[ 0 ].textContent = String(completed);\n\t\t\t\tdisplayMessage('success', 'Updated');\n\n\t\t\t} catch (_) {\n\t\t\t\tshowError();\n\t\t\t}\n\t\t},\n\t\terror: showError,\n\t});\n});"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/sw.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/anime-client.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/events.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/session-check.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/template-helpers.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/fns.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/anime.js","/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/manga.js"],"sourcesContent":["// Start the service worker, if you can\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}","// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet m = (elm.document || elm.ownerDocument).querySelectorAll(selector);\n\tlet i = matches.length;\n\twhile (--i >= 0 && m.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nconst AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {Element} [context]\n\t * @return array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\tconst el = AnimeClient.$('header')[0];\n\t\tel.scrollIntoView(true);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element|Element[]} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.setAttribute('hidden', 'hidden'));\n\t\t} else {\n\t\t\tsel.setAttribute('hidden', 'hidden');\n\t\t}\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element|Element[]} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.removeAttribute('hidden'));\n\t\t} else {\n\t\t\tsel.removeAttribute('hidden');\n\t\t}\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {Element} current - the current Element\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {Element|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|Element} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|Element|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {XMLHttpRequest}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tif (method === 'GET') {\n\t\trequest.send(null);\n\t} else {\n\t\trequest.send(config.data);\n\t}\n\n\treturn request\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n * @return {XMLHttpRequest}\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './anime-client.js';\n\n// ----------------------------------------------------------------------------\n// Event subscriptions\n// ----------------------------------------------------------------------------\n_.on('header', 'click', '.message', hide);\n_.on('form.js-delete', 'submit', confirmDelete);\n_.on('.js-clear-cache', 'click', clearAPICache);\n_.on('.vertical-tabs input', 'change', scrollToSection);\n_.on('.media-filter', 'input', filterMedia);\n\n// ----------------------------------------------------------------------------\n// Handler functions\n// ----------------------------------------------------------------------------\n\n/**\n * Hide the html element attached to the event\n *\n * @param {MouseEvent} event\n * @return void\n */\nfunction hide (event) {\n\t_.hide(event.target)\n}\n\n/**\n * Confirm deletion of an item\n *\n * @param {MouseEvent} event\n * @return void\n */\nfunction confirmDelete (event) {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n}\n\n/**\n * Clear the API cache, and show a message if the cache is cleared\n *\n * @return void\n */\nfunction clearAPICache () {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n}\n\n/**\n * Scroll to the accordion/vertical tab section just opened\n *\n * @param {InputEvent} event\n * @return void\n */\nfunction scrollToSection (event) {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n}\n\n/**\n * Filter an anime or manga list\n *\n * @param {InputEvent} event\n * @return void\n */\nfunction filterMedia (event) {\n\tconst rawFilter = event.target.value;\n\tconst filter = new RegExp(rawFilter, 'i');\n\n\t// console.log('Filtering items by: ', filter);\n\n\tif (rawFilter !== '') {\n\t\t// Filter the cover view\n\t\t_.$('article.media').forEach(article => {\n\t\t\tconst titleLink = _.$('.name a', article)[0];\n\t\t\tconst title = String(titleLink.textContent).trim();\n\t\t\tif ( ! filter.test(title)) {\n\t\t\t\t_.hide(article);\n\t\t\t} else {\n\t\t\t\t_.show(article);\n\t\t\t}\n\t\t});\n\n\t\t// Filter the list view\n\t\t_.$('table.media-wrap tbody tr').forEach(tr => {\n\t\t\tconst titleCell = _.$('td.align-left', tr)[0];\n\t\t\tconst titleLink = _.$('a', titleCell)[0];\n\t\t\tconst linkTitle = String(titleLink.textContent).trim();\n\t\t\tconst textTitle = String(titleCell.textContent).trim();\n\t\t\tif ( ! (filter.test(linkTitle) || filter.test(textTitle))) {\n\t\t\t\t_.hide(tr);\n\t\t\t} else {\n\t\t\t\t_.show(tr);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t_.show('article.media');\n\t\t_.show('table.media-wrap tbody tr');\n\t}\n}\n","import _ from './anime-client.js';\n\n(() => {\n\tlet hidden = null;\n\tlet visibilityChange = null;\n\n\tif (typeof document.hidden !== \"undefined\") {\n\t\thidden = \"hidden\";\n\t\tvisibilityChange = \"visibilitychange\";\n\t} else if (typeof document.msHidden !== \"undefined\") {\n\t\thidden = \"msHidden\";\n\t\tvisibilityChange = \"msvisibilitychange\";\n\t} else if (typeof document.webkitHidden !== \"undefined\") {\n\t\thidden = \"webkitHidden\";\n\t\tvisibilityChange = \"webkitvisibilitychange\";\n\t}\n\n\tfunction handleVisibilityChange() {\n\t\t// Check the user's session to see if they are currently logged-in\n\t\t// when the page becomes visible\n\t\tif ( ! document[hidden]) {\n\t\t\t_.get('/heartbeat', (beat) => {\n\t\t\t\tconst status = JSON.parse(beat)\n\n\t\t\t\t// If the session is expired, immediately reload so that\n\t\t\t\t// you can't attempt to do an action that requires authentication\n\t\t\t\tif (status.hasAuth !== true) {\n\t\t\t\t\tdocument.removeEventListener(visibilityChange, handleVisibilityChange, false);\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (hidden === null) {\n\t\tconsole.info('Page visibility API not supported, JS session check will not work');\n\t} else {\n\t\tdocument.addEventListener(visibilityChange, handleVisibilityChange, false);\n\t}\n})();","import _ from './anime-client.js';\n\n// Click on hidden MAL checkbox so\n// that MAL id is passed\n_.on('main', 'change', '.big-check', (e) => {\n\tconst id = e.target.id;\n\tdocument.getElementById(`mal_${id}`).checked = true;\n\tdocument.getElementById(`anilist_${id}`).checked = true;\n});\n\n/**\n * On search results with an existing library entry, this shows that fact, with an edit link for the existing\n * library entry\n *\n * @param {'anime'|'manga'} type\n * @param {Object} item\n * @param isCollection\n * @returns {String}\n */\nfunction renderEditLink (type, item, isCollection = false) {\n\tif (isCollection || item.libraryEntry === null) {\n\t\treturn '';\n\t}\n\n\treturn `\n\t\t
\n\t\t\t[ Already in List ]\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\tEdit\n\t\t\t\n\t\t
\n\t\t
 
\n\t`\n}\n\n/**\n * Show the search results for a media item\n *\n * @param {'anime'|'manga'} type\n * @param {Object} data\n * @param {boolean} isCollection\n * @returns {String}\n */\nexport function renderSearchResults (type, data, isCollection = false) {\n\treturn data.map(item => {\n\t\tconst titles = item.titles.join('
');\n\t\tlet disabled = item.libraryEntry !== null ? 'disabled' : '';\n\t\tconst editLink = renderEditLink(type, item, isCollection);\n\n\t\tif (isCollection) {\n\t\t\tdisabled = '';\n\t\t}\n\n\t\treturn `\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t${editLink}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`;\n\t}).join('');\n}","/**\n * Make sure properties are in an easily splittable format\n *\n * @private\n * @param {String} props\n * @param {String} [sep='.'] The default separator\n * @return {String}\n */\nfunction _normalizeProperty(props, sep = '.') {\n\t// Since we split by period, and property lookup\n\t// is the same by dot or [], replace bracket lookups\n\t// with periods\n\treturn props.replace(/\\[(.*?)]/g, sep + '$1');\n}\n\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, 'b.c.d') will return true.\n *\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns {boolean} true when property in object, false otherwise\n */\nexport function hasNestedProperty(object, property) {\n\tif (object && typeof object === 'object') {\n\t\tif (typeof property === 'string' && property !== '') {\n\t\t\tproperty = _normalizeProperty(property);\n\n\t\t\tlet split = property.split('.');\n\t\t\treturn split.reduce((obj, prop, idx, array) => {\n\t\t\t\tif (idx === array.length - 1) {\n\t\t\t\t\treturn !!(obj && obj.hasOwnProperty(prop));\n\t\t\t\t}\n\n\t\t\t\treturn obj && obj[prop];\n\t\t\t}, object);\n\t\t} else if (typeof property === 'number') {\n\t\t\treturn property in object;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Get the value of a deeply nested property in an object\n *\n * @param {Object} object the object to get the property\n * @param {string} property the path to the property as a string\n * @param {string} [sep='.'] The default separator to split on\n * @return {*} the value of the property\n */\nexport function getNestedProperty(object, property, sep = '.') {\n\tif (isType('string', property) && property !== '') {\n\t\t// convert numbers to dot syntax\n\t\tproperty = _normalizeProperty(property, sep);\n\t\tconst levels = property.split(sep);\n\n\t\ttry {\n\t\t\treturn levels.reduce((obj, prop) => obj[prop], object);\n\t\t} catch (e) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Reliably get the type of the value of a variable\n *\n * @param {*} x The variable to get the type of\n * @return {string} The name of the type\n */\nexport function getType(x) {\n\t// is it an array?\n\tif (Array.isArray(x)) {\n\t\treturn 'array';\n\t}\n\n\t// Use typeof for truthy primitives\n\tif (typeof x !== 'object') {\n\t\treturn (typeof x).toLowerCase();\n\t}\n\n\tconst type = function () {\n\t\treturn Object.prototype.toString.call(this).slice(8, -1);\n\t}\n\n\t// Otherwise, strip the type out of the '[Object x]' toString value\n\treturn type.call(x).toLowerCase();\n}\n\n/**\n * Check whether the value matches the passed type name\n *\n * @param {string} type Javascript type name\n * @param {*} val The value to type check\n * @return {boolean}\n */\nexport function isType(type, val) {\n\treturn getType(val) === String(type).toLowerCase();\n}","import _ from './anime-client.js'\nimport { renderSearchResults } from './template-helpers.js'\nimport { getNestedProperty, hasNestedProperty } from \"./fns\";\n\nconst search = (query, isCollection = false) => {\n\t// Show the loader\n\t_.show('.cssload-loader');\n\n\t// Do the api search\n\treturn _.get(_.url('/anime-collection/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\n\t\t// Hide the loader\n\t\t_.hide('.cssload-loader');\n\n\t\t// Show the results\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderSearchResults('anime', searchResults, isCollection);\n\t});\n};\n\n// Anime list search\nif (_.hasElement('.anime #search')) {\n\tlet prevRequest = null;\n\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query);\n\t}));\n}\n\n// Anime collection search\nif (_.hasElement('#search-anime-collection')) {\n\tlet prevRequest = null;\n\n\t_.on('#search-anime-collection', 'input', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query, true);\n\t}));\n}\n\n// Action to increment episode count\n_.on('body.anime.list', 'click', '.plus-one', (e) => {\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet watchedCount = parseInt(_.$('.completed_number', parentSel)[ 0 ].textContent, 10) || 0;\n\tlet totalCount = parseInt(_.$('.total_number', parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name a', parentSel)[ 0 ].textContent;\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tanilist_id: parentSel.dataset.anilistId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: watchedCount + 1\n\t\t}\n\t};\n\n\tconst displayMessage = (type, message) => {\n\t\t_.hide('#loading-shadow');\n\t\t_.showMessage(type, `${message} ${title}`);\n\t\t_.scrollToTop();\n\t}\n\n\tconst showError = () => displayMessage('error', 'Failed to update');\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently watching\n\tif (isNaN(watchedCount) || watchedCount === 0) {\n\t\tdata.data.status = 'CURRENT';\n\t}\n\n\t// If you increment at the last episode, mark as completed\n\tif ((!isNaN(watchedCount)) && (watchedCount + 1) === totalCount) {\n\t\tdata.data.status = 'COMPLETED';\n\t}\n\n\t_.show('#loading-shadow');\n\n\t// okay, lets actually make some changes!\n\t_.ajax(_.url('/anime/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tsuccess: (res) => {\n\t\t\ttry {\n\t\t\t\tconst resData = JSON.parse(res);\n\n\t\t\t\t// Do a rough sanity check for weird errors\n\t\t\t\tlet updatedProgress = getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.progress');\n\t\t\t\tif (hasNestedProperty(resData, 'error') || updatedProgress !== data.data.progress) {\n\t\t\t\t\tshowError();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// We've completed the series\n\t\t\t\tif (getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.status') === 'COMPLETED') {\n\t\t\t\t\t_.hide(parentSel);\n\t\t\t\t\tdisplayMessage('success', 'Completed')\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Just a normal update\n\t\t\t\t_.$('.completed_number', parentSel)[ 0 ].textContent = ++watchedCount;\n\t\t\t\tdisplayMessage('success', 'Updated');\n\t\t\t} catch (_) {\n\t\t\t\tshowError();\n\t\t\t}\n\t\t},\n\t\terror: showError,\n\t});\n});","import _ from './anime-client.js'\nimport { renderSearchResults } from './template-helpers.js'\nimport { getNestedProperty, hasNestedProperty } from \"./fns\";\n\nconst search = (query) => {\n\t_.show('.cssload-loader');\n\treturn _.get(_.url('/manga/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\t\t_.hide('.cssload-loader');\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderSearchResults('manga', searchResults);\n\t});\n};\n\nif (_.hasElement('.manga #search')) {\n\tlet prevRequest = null\n\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tlet query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevRequest !== null) {\n\t\t\tprevRequest.abort();\n\t\t}\n\n\t\tprevRequest = search(query);\n\t}));\n}\n\n/**\n * Javascript for editing manga, if logged in\n */\n_.on('.manga.list', 'click', '.edit-buttons button', (e) => {\n\tlet thisSel = e.target;\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet type = thisSel.classList.contains('plus-one-chapter') ? 'chapter' : 'volume';\n\tlet completed = parseInt(_.$(`.${type}s_read`, parentSel)[ 0 ].textContent, 10) || 0;\n\tlet total = parseInt(_.$(`.${type}_count`, parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name', parentSel)[ 0 ].textContent;\n\n\tif (isNaN(completed)) {\n\t\tcompleted = 0;\n\t}\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tanilist_id: parentSel.dataset.anilistId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: completed\n\t\t}\n\t};\n\n\tconst displayMessage = (type, message) => {\n\t\t_.hide('#loading-shadow');\n\t\t_.showMessage(type, `${message} ${title}`);\n\t\t_.scrollToTop();\n\t}\n\n\tconst showError = () => displayMessage('error', 'Failed to update');\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently reading\n\tif (isNaN(completed) || completed === 0) {\n\t\tdata.data.status = 'CURRENT';\n\t}\n\n\t// If you increment at the last chapter, mark as completed\n\tif ((!isNaN(completed)) && (completed + 1) === total) {\n\t\tdata.data.status = 'COMPLETED';\n\t}\n\n\t// Update the total count\n\tdata.data.progress = ++completed;\n\n\t_.show('#loading-shadow');\n\n\t_.ajax(_.url('/manga/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tmimeType: 'application/json',\n\t\tsuccess: (res) => {\n\t\t\ttry {\n\t\t\t\tconst resData = JSON.parse(res);\n\n\t\t\t\t// Do a rough sanity check for weird errors\n\t\t\t\tlet updatedProgress = getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.progress');\n\t\t\t\tif (hasNestedProperty(resData, 'error') || updatedProgress !== data.data.progress) {\n\t\t\t\t\tshowError();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// We've completed the series\n\t\t\t\tif (getNestedProperty(resData, 'data.libraryEntry.update.libraryEntry.status') === 'COMPLETED') {\n\t\t\t\t\t_.hide(parentSel);\n\t\t\t\t\tdisplayMessage('success', 'Completed')\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Just a normal update\n\t\t\t\t_.$(`.${type}s_read`, parentSel)[ 0 ].textContent = String(completed);\n\t\t\t\tdisplayMessage('success', 'Updated');\n\n\t\t\t} catch (_) {\n\t\t\t\tshowError();\n\t\t\t}\n\t\t},\n\t\terror: showError,\n\t});\n});"],"names":[],"mappings":"omBACA,GAAI,kBAAmB,UACtB,UAAU,cAAc,SAAS,UAAU,KAAK,MAC/C,QAAQ,IAAI,4BAA6B,IAAI,MAC9C,GAAG,MAAM,QACR,QAAQ,MAAM,oCAAqC,MACpD,GCFD,MAAM,QAAU,CAAC,IAAK,YACrB,IAAI,EAAI,AAAC,CAAA,IAAI,UAAY,IAAI,aAAY,EAAG,iBAAiB,UAC7D,IAAI,EAAI,QAAQ,OAChB,MAAO,EAAE,GAAK,GAAK,EAAE,KAAK,KAAO,KACjC,OAAO,EAAI,EACZ,EAEA,MAAM,YAAc,CAInB,KAAM,KAAO,EAQb,EAAE,QAAQ,CAAE,QAAU,IAAI,EACzB,GAAI,OAAO,WAAa,SACvB,OAAO,SAGR,QAAU,AAAC,UAAY,MAAQ,QAAQ,WAAa,EACjD,QACA,SAEH,IAAI,SAAW,EAAE,CACjB,GAAI,SAAS,MAAM,cAClB,SAAS,KAAK,SAAS,eAAe,SAAS,MAAM,IAAI,CAAC,EAAE,QAE5D,SAAW,EAAE,CAAC,MAAM,MAAM,QAAQ,iBAAiB,WAGpD,OAAO,QACR,EAOA,WAAY,QAAQ,EACnB,OAAO,YAAY,EAAE,UAAU,OAAS,CACzC,EAMA,cACC,MAAM,GAAK,YAAY,EAAE,SAAS,CAAC,EAAE,CACrC,GAAG,eAAe,KACnB,EAOA,KAAM,GAAG,EACR,GAAI,OAAO,MAAQ,SAClB,IAAM,YAAY,EAAE,KAGrB,GAAI,MAAM,QAAQ,KACjB,IAAI,QAAQ,IAAM,GAAG,aAAa,SAAU,gBAE5C,IAAI,aAAa,SAAU,SAE7B,EAOA,KAAM,GAAG,EACR,GAAI,OAAO,MAAQ,SAClB,IAAM,YAAY,EAAE,KAGrB,GAAI,MAAM,QAAQ,KACjB,IAAI,QAAQ,IAAM,GAAG,gBAAgB,gBAErC,IAAI,gBAAgB,SAEtB,EAQA,YAAa,IAAI,CAAE,OAAO,EACzB,IAAI,SACH,CAAC,oBAAoB,EAAE,KAAK;;IAE3B,EAAE,QAAQ;;SAEL,CAAC,CAER,IAAI,IAAM,YAAY,EAAE,YACxB,GAAI,GAAG,CAAC,EAAE,GAAK,UACd,GAAG,CAAC,EAAE,CAAC,SAGR,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,mBAAmB,YAAa,SAC5D,EAQA,cAAe,OAAO,CAAE,cAAc,EACrC,GAAI,QAAQ,UAAU,UAAY,UACjC,OAAO,QAAQ,QAAQ,gBAGxB,MAAO,UAAY,SAAS,gBAAiB,CAC5C,GAAI,QAAQ,QAAS,gBACpB,OAAO,QAGR,QAAU,QAAQ,aACnB,CAEA,OAAO,IACR,EAOA,IAAK,IAAI,EACR,IAAI,IAAM,CAAC,EAAE,EAAE,SAAS,SAAS,KAAK,CAAC,CACvC,KAAO,AAAC,KAAK,OAAO,KAAO,IAAO,KAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAEnD,OAAO,GACR,EAWA,SAAU,QAAQ,CAAE,EAAE,CAAE,KAAK,EAC5B,IAAI,KAAO,MACX,OAAO,SAAU,GAAG,IAAI,EACvB,MAAM,QAAU,OAAS,IAAI,CAE7B,GAAK,CAAE,KAAM,CACZ,GAAG,MAAM,QAAS,MAClB,KAAO,KACP,WAAW,WACV,KAAO,KACR,EAAG,SACJ,CACD,CACD,CACD,EAMA,SAAS,SAAS,GAAG,CAAE,KAAK,CAAE,QAAQ,EAErC,GAAI,CAAE,MAAM,MAAM,eACjB,MAAM,MAAM,KAAK,QAAQ,AAAC,MACzB,SAAS,IAAK,IAAK,SACpB,GAGD,IAAI,iBAAiB,MAAO,SAAU,MACvC,CAEA,SAAS,cAAc,GAAG,CAAE,MAAM,CAAE,KAAK,CAAE,QAAQ,EAElD,SAAS,IAAK,MAAO,AAAC,IAErB,YAAY,EAAE,OAAQ,KAAK,QAAQ,AAAC,UACnC,GAAG,EAAE,QAAU,QAAS,CACvB,SAAS,KAAK,QAAS,GACvB,EAAE,iBACH,CACD,EACD,EACD,CAWA,YAAY,GAAK,CAAC,IAAK,MAAO,OAAQ,YACrC,GAAI,WAAa,UAAW,CAC3B,SAAW,OACX,YAAY,EAAE,KAAK,QAAQ,AAAC,KAC3B,SAAS,GAAI,MAAO,SACrB,EACD,MACC,YAAY,EAAE,KAAK,QAAQ,AAAC,KAC3B,cAAc,GAAI,OAAQ,MAAO,SAClC,EAEF,EAaA,SAAS,cAAc,IAAI,EAC1B,IAAI,MAAQ,EAAE,CAEd,OAAO,KAAK,MAAM,QAAQ,AAAC,OAC1B,IAAI,MAAQ,IAAI,CAAC,KAAK,CAAC,WAEvB,KAAO,mBAAmB,MAC1B,MAAQ,mBAAmB,OAE3B,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAC9B,GAEA,OAAO,MAAM,KAAK,IACnB,CAgBA,YAAY,KAAO,CAAC,IAAK,UAExB,MAAM,cAAgB,CACrB,KAAM,CAAC,EACP,KAAM,MACN,SAAU,GACV,QAAS,YAAY,KACrB,SAAU,oCACV,MAAO,YAAY,IACpB,EAEA,OAAS,kBACL,cACA,QAGJ,IAAI,QAAU,IAAI,eAClB,IAAI,OAAS,OAAO,OAAO,MAAM,cAEjC,GAAI,SAAW,MACd,KAAO,AAAC,IAAI,MAAM,MACf,cAAc,OAAO,MACrB,CAAC,CAAC,EAAE,cAAc,OAAO,MAAM,CAAC,CAGpC,QAAQ,KAAK,OAAQ,IAErB,CAAA,QAAQ,mBAAqB,KAC5B,GAAI,QAAQ,aAAe,EAAG,CAC7B,IAAI,aAAe,GAEnB,GAAI,QAAQ,eAAiB,OAC5B,aAAe,KAAK,MAAM,QAAQ,mBAElC,aAAe,QAAQ,aAGxB,GAAI,QAAQ,OAAS,IACpB,OAAO,MAAM,KAAK,KAAM,QAAQ,OAAQ,aAAc,QAAQ,eAE9D,OAAO,QAAQ,KAAK,KAAM,aAAc,QAAQ,OAElD,CACD,EAEA,GAAI,OAAO,WAAa,OAAQ,CAC/B,OAAO,KAAO,KAAK,UAAU,OAAO,KACpC,CAAA,OAAO,SAAW,kBACnB,MACC,OAAO,KAAO,cAAc,OAAO,MAGpC,QAAQ,iBAAiB,eAAgB,OAAO,UAEhD,GAAI,SAAW,MACd,QAAQ,KAAK,WAEb,QAAQ,KAAK,OAAO,MAGrB,OAAO,OACR,CAUA,CAAA,YAAY,IAAM,CAAC,IAAK,KAAM,SAAW,IAAI,IAC5C,GAAI,WAAa,KAAM,CACtB,SAAW,KACX,KAAO,CAAC,CACT,CAEA,OAAO,YAAY,KAAK,IAAK,CAC5B,KACA,QAAS,QACV,EACD,ECrVA,YAAE,GAAG,SAAU,QAAS,WAAY,MACpC,YAAE,GAAG,iBAAkB,SAAU,eACjC,YAAE,GAAG,kBAAmB,QAAS,eACjC,YAAE,GAAG,uBAAwB,SAAU,iBACvC,YAAE,GAAG,gBAAiB,QAAS,aAY/B,SAAS,KAAM,KAAK,EACnB,YAAE,KAAK,MAAM,OACd,CAQA,SAAS,cAAe,KAAK,EAC5B,MAAM,QAAU,QAAQ,yDAExB,GAAI,UAAY,MAAO,CACtB,MAAM,iBACN,MAAM,iBACP,CACD,CAOA,SAAS,gBACR,YAAE,IAAI,eAAgB,KACrB,YAAE,YAAY,UAAW,gCAC1B,EACD,CAQA,SAAS,gBAAiB,KAAK,EAC9B,MAAM,GAAK,MAAM,cAAc,cAC/B,MAAM,KAAO,GAAG,wBAEhB,MAAM,IAAM,KAAK,IAAM,OAAO,YAE9B,OAAO,SAAS,CACf,IACA,SAAU,QACX,EACD,CAQA,SAAS,YAAa,KAAK,EAC1B,MAAM,UAAY,MAAM,OAAO,MAC/B,MAAM,OAAS,IAAI,OAAO,UAAW,KAIrC,GAAI,YAAc,GAAI,CAErB,YAAE,EAAE,iBAAiB,QAAQ,UAC5B,MAAM,UAAY,YAAE,EAAE,UAAW,QAAQ,CAAC,EAAE,CAC5C,MAAM,MAAQ,OAAO,UAAU,aAAa,OAC5C,GAAK,CAAE,OAAO,KAAK,OAClB,YAAE,KAAK,cAEP,YAAE,KAAK,QAET,GAGA,YAAE,EAAE,6BAA6B,QAAQ,KACxC,MAAM,UAAY,YAAE,EAAE,gBAAiB,GAAG,CAAC,EAAE,CAC7C,MAAM,UAAY,YAAE,EAAE,IAAK,UAAU,CAAC,EAAE,CACxC,MAAM,UAAY,OAAO,UAAU,aAAa,OAChD,MAAM,UAAY,OAAO,UAAU,aAAa,OAChD,GAAK,CAAG,CAAA,OAAO,KAAK,YAAc,OAAO,KAAK,UAAS,EACtD,YAAE,KAAK,SAEP,YAAE,KAAK,GAET,EACD,KAAO,CACN,YAAE,KAAK,iBACP,YAAE,KAAK,4BACR,CACD,CC3GA,AAAC,CAAA,KACA,IAAI,OAAS,KACb,IAAI,iBAAmB,KAEvB,GAAI,OAAO,SAAS,SAAW,YAAa,CAC3C,OAAS,SACT,iBAAmB,kBACpB,MAAO,GAAI,OAAO,SAAS,WAAa,YAAa,CACpD,OAAS,WACT,iBAAmB,oBACpB,MAAO,GAAI,OAAO,SAAS,eAAiB,YAAa,CACxD,OAAS,eACT,iBAAmB,wBACpB,CAEA,SAAS,yBAGR,GAAK,CAAE,QAAQ,CAAC,OAAO,CACtB,YAAE,IAAI,aAAc,AAAC,OACpB,MAAM,OAAS,KAAK,MAAM,MAI1B,GAAI,OAAO,UAAY,KAAM,CAC5B,SAAS,oBAAoB,iBAAkB,uBAAwB,OACvE,SAAS,QACV,CACD,EAEF,CAEA,GAAI,SAAW,KACd,QAAQ,KAAK,0EAEb,SAAS,iBAAiB,iBAAkB,uBAAwB,MAEtE,CAAA,ICnCA,YAAE,GAAG,OAAQ,SAAU,aAAc,AAAC,IACrC,MAAM,GAAK,EAAE,OAAO,EACpB,CAAA,SAAS,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAU,IAC/C,CAAA,SAAS,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAU,IACpD,GAWA,SAAS,eAAgB,IAAI,CAAE,IAAI,CAAE,aAAe,KAAK,EACxD,GAAI,cAAgB,KAAK,eAAiB,KACzC,MAAO,GAGR,MAAO,CAAC;;;;;;gCAMuB,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,GAAG,CAAC,EAAE,KAAK,aAAa,OAAO;;;;CAI/F,CAAC,AACF,CAUO,SAAS,oBAAqB,IAAI,CAAE,IAAI,CAAE,aAAe,KAAK,EACpE,OAAO,KAAK,IAAI,OACf,MAAM,OAAS,KAAK,OAAO,KAAK,UAChC,IAAI,SAAW,KAAK,eAAiB,KAAO,WAAa,GACzD,MAAM,SAAW,eAAe,KAAM,KAAM,cAE5C,GAAI,aACH,SAAW,GAGZ,MAAO,CAAC;gCACsB,EAAE,SAAS;;uDAEY,EAAE,KAAK,KAAK,2BAA2B,EAAE,KAAK,WAAW,EAAE,EAAE,SAAS;mDAC1E,EAAE,KAAK,KAAK,uBAAuB,EAAE,KAAK,OAAO,EAAE,EAAE,SAAS;+CAClE,EAAE,KAAK,KAAK,mBAAmB,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS;iBACpF,EAAE,KAAK,KAAK;gBACb,EAAE,KAAK,WAAW;;OAE3B,EAAE,KAAK,eAAe;cACf,EAAE,OAAO;;;;;KAKlB,EAAE,SAAS;;;mCAGmB,EAAE,KAAK,SAAS,EAAE,KAAK,KAAK;;;;;EAK7D,CAAC,AACF,GAAG,KAAK,GACT,CCxEA,SAAS,mBAAmB,KAAK,CAAE,IAAM,GAAG,EAI3C,OAAO,MAAM,QAAQ,YAAa,IAAM,KACzC,CAUO,SAAS,kBAAkB,MAAM,CAAE,QAAQ,EACjD,GAAI,QAAU,OAAO,SAAW,SAAU,CACzC,GAAI,OAAO,WAAa,UAAY,WAAa,GAAI,CACpD,SAAW,mBAAmB,UAE9B,IAAI,MAAQ,SAAS,MAAM,KAC3B,OAAO,MAAM,OAAO,CAAC,IAAK,KAAM,IAAK,SACpC,GAAI,MAAQ,MAAM,OAAS,EAC1B,MAAO,CAAC,CAAE,CAAA,KAAO,IAAI,eAAe,KAAI,EAGzC,OAAO,KAAO,GAAG,CAAC,KAAK,AACxB,EAAG,OACJ,MAAO,GAAI,OAAO,WAAa,SAC9B,OAAO,YAAY,MAErB,CAEA,OAAO,KACR,CAUO,SAAS,kBAAkB,MAAM,CAAE,QAAQ,CAAE,IAAM,GAAG,EAC5D,GAAI,OAAO,SAAU,WAAa,WAAa,GAAI,CAElD,SAAW,mBAAmB,SAAU,KACxC,MAAM,OAAS,SAAS,MAAM,KAE9B,GAAI,CACH,OAAO,OAAO,OAAO,CAAC,IAAK,OAAS,GAAG,CAAC,KAAK,CAAE,OAChD,CAAE,MAAO,EAAG,CACX,OAAO,SACR,CACD,CAEA,OAAO,IACR,CAQO,SAAS,QAAQ,CAAC,EAExB,GAAI,MAAM,QAAQ,GACjB,MAAO,QAIR,GAAI,OAAO,IAAM,SAChB,MAAO,AAAC,CAAA,OAAO,CAAA,EAAG,cAGnB,MAAM,KAAO,WACZ,OAAO,OAAO,UAAU,SAAS,KAAK,IAAI,EAAE,MAAM,EAAG,GACtD,EAGA,OAAO,KAAK,KAAK,GAAG,aACrB,CASO,SAAS,OAAO,IAAI,CAAE,GAAG,EAC/B,OAAO,QAAQ,OAAS,OAAO,MAAM,aACtC,CClGA,MAAM,OAAS,CAAC,MAAO,aAAe,KAAK,IAE1C,YAAE,KAAK,mBAGP,OAAO,YAAE,IAAI,YAAE,IAAI,4BAA6B,CAAE,KAAM,EAAG,CAAC,cAAe,UAC1E,cAAgB,KAAK,MAAM,eAG3B,YAAE,KAAK,kBAGP,CAAA,YAAE,EAAE,eAAe,CAAE,EAAG,CAAC,UAAY,oBAAoB,QAAS,cAAe,aAClF,EACD,EAGA,GAAI,YAAE,WAAW,kBAAmB,CACnC,IAAI,YAAc,KAElB,YAAE,GAAG,UAAW,QAAS,YAAE,SAAS,IAAK,AAAC,IACzC,MAAM,MAAQ,mBAAmB,EAAE,OAAO,OAC1C,GAAI,QAAU,GACb,OAGD,GAAI,cAAgB,KACnB,YAAY,QAGb,YAAc,OAAO,MACtB,GACD,CAGA,GAAI,YAAE,WAAW,4BAA6B,CAC7C,IAAI,YAAc,KAElB,YAAE,GAAG,2BAA4B,QAAS,YAAE,SAAS,IAAK,AAAC,IAC1D,MAAM,MAAQ,mBAAmB,EAAE,OAAO,OAC1C,GAAI,QAAU,GACb,OAGD,GAAI,cAAgB,KACnB,YAAY,QAGb,YAAc,OAAO,MAAO,KAC7B,GACD,CAGA,YAAE,GAAG,kBAAmB,QAAS,YAAa,AAAC,IAC9C,IAAI,UAAY,YAAE,cAAc,EAAE,OAAQ,WAC1C,IAAI,aAAe,SAAS,YAAE,EAAE,oBAAqB,UAAU,CAAE,EAAG,CAAC,YAAa,KAAO,EACzF,IAAI,WAAa,SAAS,YAAE,EAAE,gBAAiB,UAAU,CAAE,EAAG,CAAC,YAAa,IAC5E,IAAI,MAAQ,YAAE,EAAE,UAAW,UAAU,CAAE,EAAG,CAAC,YAG3C,IAAI,KAAO,CACV,GAAI,UAAU,QAAQ,QACtB,WAAY,UAAU,QAAQ,UAC9B,OAAQ,UAAU,QAAQ,MAC1B,KAAM,CACL,SAAU,aAAe,CAC1B,CACD,EAEA,MAAM,eAAiB,CAAC,KAAM,WAC7B,YAAE,KAAK,mBACP,YAAE,YAAY,KAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,EACzC,YAAE,aACH,EAEA,MAAM,UAAY,IAAM,eAAe,QAAS,oBAIhD,GAAI,MAAM,eAAiB,eAAiB,EAC3C,KAAK,KAAK,OAAS,UAIpB,GAAI,AAAC,CAAC,MAAM,eAAkB,AAAC,aAAe,IAAO,WACpD,KAAK,KAAK,OAAS,YAGpB,YAAE,KAAK,mBAGP,YAAE,KAAK,YAAE,IAAI,oBAAqB,CACjC,KACA,SAAU,OACV,KAAM,OACN,QAAS,AAAC,MACT,GAAI,CACH,MAAM,QAAU,KAAK,MAAM,KAG3B,IAAI,gBAAkB,kBAAkB,QAAS,kDACjD,GAAI,kBAAkB,QAAS,UAAY,kBAAoB,KAAK,KAAK,SAAU,CAClF,YACA,MACD,CAGA,GAAI,kBAAkB,QAAS,kDAAoD,YAAa,CAC/F,YAAE,KAAK,WACP,eAAe,UAAW,aAE1B,MACD,CAGA,YAAE,EAAE,oBAAqB,UAAU,CAAE,EAAG,CAAC,YAAc,EAAE,aACzD,eAAe,UAAW,UAC3B,CAAE,MAAO,EAAG,CACX,WACD,CACD,EACA,MAAO,SACR,EACD,GC3HA,MAAM,QAAS,AAAC,QACf,YAAE,KAAK,mBACP,OAAO,YAAE,IAAI,YAAE,IAAI,iBAAkB,CAAE,KAAM,EAAG,CAAC,cAAe,UAC/D,cAAgB,KAAK,MAAM,eAC3B,YAAE,KAAK,kBACP,CAAA,YAAE,EAAE,eAAe,CAAE,EAAG,CAAC,UAAY,oBAAoB,QAAS,cACnE,EACD,EAEA,GAAI,YAAE,WAAW,kBAAmB,CACnC,IAAI,YAAc,KAElB,YAAE,GAAG,UAAW,QAAS,YAAE,SAAS,IAAK,AAAC,IACzC,IAAI,MAAQ,mBAAmB,EAAE,OAAO,OACxC,GAAI,QAAU,GACb,OAGD,GAAI,cAAgB,KACnB,YAAY,QAGb,YAAc,QAAO,MACtB,GACD,CAKA,YAAE,GAAG,cAAe,QAAS,uBAAwB,AAAC,IACrD,IAAI,QAAU,EAAE,OAChB,IAAI,UAAY,YAAE,cAAc,EAAE,OAAQ,WAC1C,IAAI,KAAO,QAAQ,UAAU,SAAS,oBAAsB,UAAY,SACxE,IAAI,UAAY,SAAS,YAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAE,UAAU,CAAE,EAAG,CAAC,YAAa,KAAO,EACnF,IAAI,MAAQ,SAAS,YAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAE,UAAU,CAAE,EAAG,CAAC,YAAa,IACxE,IAAI,MAAQ,YAAE,EAAE,QAAS,UAAU,CAAE,EAAG,CAAC,YAEzC,GAAI,MAAM,WACT,UAAY,EAIb,IAAI,KAAO,CACV,GAAI,UAAU,QAAQ,QACtB,WAAY,UAAU,QAAQ,UAC9B,OAAQ,UAAU,QAAQ,MAC1B,KAAM,CACL,SAAU,SACX,CACD,EAEA,MAAM,eAAiB,CAAC,KAAM,WAC7B,YAAE,KAAK,mBACP,YAAE,YAAY,KAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,EACzC,YAAE,aACH,EAEA,MAAM,UAAY,IAAM,eAAe,QAAS,oBAIhD,GAAI,MAAM,YAAc,YAAc,EACrC,KAAK,KAAK,OAAS,UAIpB,GAAI,AAAC,CAAC,MAAM,YAAe,AAAC,UAAY,IAAO,MAC9C,KAAK,KAAK,OAAS,WAIpB,CAAA,KAAK,KAAK,SAAW,EAAE,UAEvB,YAAE,KAAK,mBAEP,YAAE,KAAK,YAAE,IAAI,oBAAqB,CACjC,KACA,SAAU,OACV,KAAM,OACN,SAAU,mBACV,QAAS,AAAC,MACT,GAAI,CACH,MAAM,QAAU,KAAK,MAAM,KAG3B,IAAI,gBAAkB,kBAAkB,QAAS,kDACjD,GAAI,kBAAkB,QAAS,UAAY,kBAAoB,KAAK,KAAK,SAAU,CAClF,YACA,MACD,CAGA,GAAI,kBAAkB,QAAS,kDAAoD,YAAa,CAC/F,YAAE,KAAK,WACP,eAAe,UAAW,aAE1B,MACD,CAGA,YAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAE,UAAU,CAAE,EAAG,CAAC,YAAc,OAAO,WAC3D,eAAe,UAAW,UAE3B,CAAE,MAAO,EAAG,CACX,WACD,CACD,EACA,MAAO,SACR,EACD"} \ No newline at end of file diff --git a/public/js/tables.min.js.map b/public/js/tables.min.js.map index 1e6b2e37..d7a606fa 100644 --- a/public/js/tables.min.js.map +++ b/public/js/tables.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/base/sort-tables.js"],"sourcesContent":["const LightTableSorter = (() => {\n\tlet th = null;\n\tlet cellIndex = null;\n\tlet order = '';\n\tconst text = (row) => row.cells.item(cellIndex).textContent.toLowerCase();\n\tconst sort = (a, b) => {\n\t\tlet textA = text(a);\n\t\tlet textB = text(b);\n\t\tconsole.log(\"Comparing \" + textA + \" and \" + textB)\n\n\t\tif(th.classList.contains(\"numeric\")){\n\t\t\tlet arrayA = textA.replace('episodes: ','').replace('-',0).split(\"/\");\n\t\t\tlet arrayB = textB.replace('episodes: ','').replace('-',0).split(\"/\");\n\t\t\tif(arrayA.length > 1) {\n\t\t\t\ttextA = parseInt(arrayA[0],10) / parseInt(arrayA[1],10);\n\t\t\t\ttextB = parseInt(arrayB[0],10) / parseInt(arrayB[1],10);\n\t\t\t}\n\t\t\telse{\n\t\t\t\ttextA = parseInt(arrayA[0],10);\n\t\t\t\ttextB = parseInt(arrayB[0],10);\n\t\t\t}\n\t\t}\n\t\telse if (parseInt(textA, 10)) {\n\t\t\ttextA = parseInt(textA, 10);\n\t\t\ttextB = parseInt(textB, 10);\n\t\t}\n\t\tif (textA > textB) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (textA < textB) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst toggle = () => {\n\t\tconst c = order !== 'sorting-asc' ? 'sorting-asc' : 'sorting-desc';\n\t\tth.className = (th.className.replace(order, '') + ' ' + c).trim();\n\t\treturn order = c;\n\t};\n\tconst reset = () => {\n\t\tth.classList.remove('sorting-asc', 'sorting-desc');\n\t\tth.classList.add('sorting');\n\t\treturn order = '';\n\t};\n\tconst onClickEvent = (e) => {\n\t\tif (th && (cellIndex !== e.target.cellIndex)) {\n\t\t\treset();\n\t\t}\n\t\tth = e.target;\n\t\tif (th.nodeName.toLowerCase() === 'th') {\n\t\t\tcellIndex = th.cellIndex;\n\t\t\tconst tbody = th.offsetParent.getElementsByTagName('tbody')[0];\n\t\t\tlet rows = Array.from(tbody.rows);\n\t\t\tif (rows) {\n\t\t\t\trows.sort(sort);\n\t\t\t\tif (order === 'sorting-asc') {\n\t\t\t\t\trows.reverse();\n\t\t\t\t}\n\t\t\t\ttoggle();\n\t\t\t\ttbody.innerHtml = '';\n\n\t\t\t\trows.forEach(row => {\n\t\t\t\t\ttbody.appendChild(row);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tinit: () => {\n\t\t\tlet ths = document.getElementsByTagName('th');\n\t\t\tlet results = [];\n\t\t\tfor (let i = 0, len = ths.length; i < len; i++) {\n\t\t\t\tlet th = ths[i];\n\t\t\t\tth.classList.add('sorting');\n\t\t\t\tth.classList.add('testing');\n\t\t\t\tresults.push(th.onclick = onClickEvent);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t};\n})();\n\nLightTableSorter.init();"],"names":[],"mappings":"AAAA,MAAM,iBAAmB,AAAC,CAAA,IAAM,CAC/B,IAAI,GAAK,IAAI,CACb,IAAI,UAAY,IAAI,CACpB,IAAI,MAAQ,GACZ,MAAM,KAAO,AAAC,KAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,WAAW,GACvE,MAAM,KAAO,CAAC,EAAG,IAAM,CACtB,IAAI,MAAQ,KAAK,GACjB,IAAI,MAAQ,KAAK,GACjB,QAAQ,GAAG,CAAC,aAAe,MAAQ,QAAU,OAE7C,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CACnC,IAAI,OAAS,MAAM,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAClE,IAAI,OAAS,MAAM,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAClE,GAAG,OAAO,MAAM,CAAG,EAAG,CACrB,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAAM,SAAS,MAAM,CAAC,EAAE,CAAC,IACpD,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAAM,SAAS,MAAM,CAAC,EAAE,CAAC,GACrD,KACI,CACH,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAC3B,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,GAC5B,CAAC,AACF,MACK,GAAI,SAAS,MAAO,IAAK,CAC7B,MAAQ,SAAS,MAAO,IACxB,MAAQ,SAAS,MAAO,GACzB,CAAC,AACD,GAAI,MAAQ,MACX,OAAO,CACP,CACD,GAAI,MAAQ,MACX,OAAO,EACP,CACD,OAAO,CACR,EACA,MAAM,OAAS,IAAM,CACpB,MAAM,EAAI,QAAU,cAAgB,cAAgB,cAAc,AAClE,CAAA,GAAG,SAAS,CAAG,AAAC,CAAA,GAAG,SAAS,CAAC,OAAO,CAAC,MAAO,IAAM,IAAM,CAAA,EAAG,IAAI,GAC/D,OAAO,MAAQ,CAChB,EACA,MAAM,MAAQ,IAAM,CACnB,GAAG,SAAS,CAAC,MAAM,CAAC,cAAe,gBACnC,GAAG,SAAS,CAAC,GAAG,CAAC,WACjB,OAAO,MAAQ,EAChB,EACA,MAAM,aAAe,AAAC,GAAM,CAC3B,GAAI,IAAO,YAAc,EAAE,MAAM,CAAC,SAAS,CAC1C,OACA,CACD,GAAK,EAAE,MAAM,CACb,GAAI,GAAG,QAAQ,CAAC,WAAW,KAAO,KAAM,CACvC,UAAY,GAAG,SAAS,CACxB,MAAM,MAAQ,GAAG,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAC9D,IAAI,KAAO,MAAM,IAAI,CAAC,MAAM,IAAI,EAChC,GAAI,KAAM,CACT,KAAK,IAAI,CAAC,MACV,GAAI,QAAU,cACb,KAAK,OAAO,EACZ,CACD,QACA,CAAA,MAAM,SAAS,CAAG,GAElB,KAAK,OAAO,CAAC,KAAO,CACnB,MAAM,WAAW,CAAC,IACnB,EACD,CAAC,AACF,CAAC,AACF,EACA,MAAO,CACN,KAAM,IAAM,CACX,IAAI,IAAM,SAAS,oBAAoB,CAAC,MACxC,IAAI,QAAU,EAAE,CAChB,IAAK,IAAI,EAAI,EAAG,IAAM,IAAI,MAAM,CAAE,EAAI,IAAK,IAAK,CAC/C,IAAI,GAAK,GAAG,CAAC,EAAE,CACf,GAAG,SAAS,CAAC,GAAG,CAAC,WACjB,GAAG,SAAS,CAAC,GAAG,CAAC,WACjB,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAG,aAC3B,CACA,OAAO,OACR,CACD,CACD,CAAA,IAEA,iBAAiB,IAAI"} \ No newline at end of file +{"version":3,"sources":["/var/www/htdocs/github.timshomepage.net/animeclient/frontEndSrc/js/base/sort-tables.js"],"sourcesContent":["const LightTableSorter = (() => {\n\tlet th = null;\n\tlet cellIndex = null;\n\tlet order = '';\n\tconst text = (row) => row.cells.item(cellIndex).textContent.toLowerCase();\n\tconst sort = (a, b) => {\n\t\tlet textA = text(a);\n\t\tlet textB = text(b);\n\t\tconsole.log(\"Comparing \" + textA + \" and \" + textB)\n\n\t\tif(th.classList.contains(\"numeric\")){\n\t\t\tlet arrayA = textA.replace('episodes: ','').replace('-',0).split(\"/\");\n\t\t\tlet arrayB = textB.replace('episodes: ','').replace('-',0).split(\"/\");\n\t\t\tif(arrayA.length > 1) {\n\t\t\t\ttextA = parseInt(arrayA[0],10) / parseInt(arrayA[1],10);\n\t\t\t\ttextB = parseInt(arrayB[0],10) / parseInt(arrayB[1],10);\n\t\t\t}\n\t\t\telse{\n\t\t\t\ttextA = parseInt(arrayA[0],10);\n\t\t\t\ttextB = parseInt(arrayB[0],10);\n\t\t\t}\n\t\t}\n\t\telse if (parseInt(textA, 10)) {\n\t\t\ttextA = parseInt(textA, 10);\n\t\t\ttextB = parseInt(textB, 10);\n\t\t}\n\t\tif (textA > textB) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (textA < textB) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst toggle = () => {\n\t\tconst c = order !== 'sorting-asc' ? 'sorting-asc' : 'sorting-desc';\n\t\tth.className = (th.className.replace(order, '') + ' ' + c).trim();\n\t\treturn order = c;\n\t};\n\tconst reset = () => {\n\t\tth.classList.remove('sorting-asc', 'sorting-desc');\n\t\tth.classList.add('sorting');\n\t\treturn order = '';\n\t};\n\tconst onClickEvent = (e) => {\n\t\tif (th && (cellIndex !== e.target.cellIndex)) {\n\t\t\treset();\n\t\t}\n\t\tth = e.target;\n\t\tif (th.nodeName.toLowerCase() === 'th') {\n\t\t\tcellIndex = th.cellIndex;\n\t\t\tconst tbody = th.offsetParent.getElementsByTagName('tbody')[0];\n\t\t\tlet rows = Array.from(tbody.rows);\n\t\t\tif (rows) {\n\t\t\t\trows.sort(sort);\n\t\t\t\tif (order === 'sorting-asc') {\n\t\t\t\t\trows.reverse();\n\t\t\t\t}\n\t\t\t\ttoggle();\n\t\t\t\ttbody.innerHtml = '';\n\n\t\t\t\trows.forEach(row => {\n\t\t\t\t\ttbody.appendChild(row);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tinit: () => {\n\t\t\tlet ths = document.getElementsByTagName('th');\n\t\t\tlet results = [];\n\t\t\tfor (let i = 0, len = ths.length; i < len; i++) {\n\t\t\t\tlet th = ths[i];\n\t\t\t\tth.classList.add('sorting');\n\t\t\t\tth.classList.add('testing');\n\t\t\t\tresults.push(th.onclick = onClickEvent);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t};\n})();\n\nLightTableSorter.init();"],"names":[],"mappings":"AAAA,MAAM,iBAAmB,AAAC,CAAA,KACzB,IAAI,GAAK,KACT,IAAI,UAAY,KAChB,IAAI,MAAQ,GACZ,MAAM,KAAO,AAAC,KAAQ,IAAI,MAAM,KAAK,WAAW,YAAY,cAC5D,MAAM,KAAO,CAAC,EAAG,KAChB,IAAI,MAAQ,KAAK,GACjB,IAAI,MAAQ,KAAK,GACjB,QAAQ,IAAI,aAAe,MAAQ,QAAU,OAE7C,GAAG,GAAG,UAAU,SAAS,WAAW,CACnC,IAAI,OAAS,MAAM,QAAQ,cAAc,IAAI,QAAQ,IAAI,GAAG,MAAM,KAClE,IAAI,OAAS,MAAM,QAAQ,cAAc,IAAI,QAAQ,IAAI,GAAG,MAAM,KAClE,GAAG,OAAO,OAAS,EAAG,CACrB,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAAM,SAAS,MAAM,CAAC,EAAE,CAAC,IACpD,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAAM,SAAS,MAAM,CAAC,EAAE,CAAC,GACrD,KACI,CACH,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,IAC3B,MAAQ,SAAS,MAAM,CAAC,EAAE,CAAC,GAC5B,CACD,MACK,GAAI,SAAS,MAAO,IAAK,CAC7B,MAAQ,SAAS,MAAO,IACxB,MAAQ,SAAS,MAAO,GACzB,CACA,GAAI,MAAQ,MACX,OAAO,EAER,GAAI,MAAQ,MACX,OAAO,GAER,OAAO,CACR,EACA,MAAM,OAAS,KACd,MAAM,EAAI,QAAU,cAAgB,cAAgB,cACpD,CAAA,GAAG,UAAY,AAAC,CAAA,GAAG,UAAU,QAAQ,MAAO,IAAM,IAAM,CAAA,EAAG,OAC3D,OAAO,MAAQ,CAChB,EACA,MAAM,MAAQ,KACb,GAAG,UAAU,OAAO,cAAe,gBACnC,GAAG,UAAU,IAAI,WACjB,OAAO,MAAQ,EAChB,EACA,MAAM,aAAe,AAAC,IACrB,GAAI,IAAO,YAAc,EAAE,OAAO,UACjC,QAED,GAAK,EAAE,OACP,GAAI,GAAG,SAAS,gBAAkB,KAAM,CACvC,UAAY,GAAG,UACf,MAAM,MAAQ,GAAG,aAAa,qBAAqB,QAAQ,CAAC,EAAE,CAC9D,IAAI,KAAO,MAAM,KAAK,MAAM,MAC5B,GAAI,KAAM,CACT,KAAK,KAAK,MACV,GAAI,QAAU,cACb,KAAK,UAEN,QACA,CAAA,MAAM,UAAY,GAElB,KAAK,QAAQ,MACZ,MAAM,YAAY,IACnB,EACD,CACD,CACD,EACA,MAAO,CACN,KAAM,KACL,IAAI,IAAM,SAAS,qBAAqB,MACxC,IAAI,QAAU,EAAE,CAChB,IAAK,IAAI,EAAI,EAAG,IAAM,IAAI,OAAQ,EAAI,IAAK,IAAK,CAC/C,IAAI,GAAK,GAAG,CAAC,EAAE,CACf,GAAG,UAAU,IAAI,WACjB,GAAG,UAAU,IAAI,WACjB,QAAQ,KAAK,GAAG,QAAU,aAC3B,CACA,OAAO,OACR,CACD,CACD,CAAA,IAEA,iBAAiB"} \ No newline at end of file diff --git a/tools/offline-db-update.php b/tools/offline-db-update.php deleted file mode 100644 index e69de29b..00000000