From f763d5dc62a4ffe3a72c7f8ffe58de4a1f35a6bb Mon Sep 17 00:00:00 2001
From: MareStare <mare.stare.official@gmail.com>
Date: Sun, 16 Mar 2025 23:19:58 +0000
Subject: [PATCH] Remove the deprecated eslint and stylelint prettier plugins.
 Move prettier to the top level

---
 assets/.prettierrc.yml => .prettierrc.yml |   0
 assets/.stylelintrc.yml                   |   3 -
 assets/eslint.config.js                   |   2 -
 assets/js/boorujs.js                      |  28 ++---
 assets/js/shortcuts.ts                    |   5 +-
 assets/js/tags.ts                         |  38 +++++--
 assets/package-lock.json                  | 129 ----------------------
 assets/package.json                       |   4 -
 package-lock.json                         |  27 +++++
 package.json                              |   9 ++
 10 files changed, 79 insertions(+), 166 deletions(-)
 rename assets/.prettierrc.yml => .prettierrc.yml (100%)
 create mode 100644 package-lock.json
 create mode 100644 package.json

diff --git a/assets/.prettierrc.yml b/.prettierrc.yml
similarity index 100%
rename from assets/.prettierrc.yml
rename to .prettierrc.yml
diff --git a/assets/.stylelintrc.yml b/assets/.stylelintrc.yml
index c4eba511..78227ced 100644
--- a/assets/.stylelintrc.yml
+++ b/assets/.stylelintrc.yml
@@ -1,7 +1,5 @@
 ---
 extends: stylelint-config-recommended
-plugins:
-  - stylelint-prettier
 rules:
   block-no-empty: true
   at-rule-no-unknown:
@@ -75,4 +73,3 @@ rules:
   declaration-block-no-redundant-longhand-properties: true
   shorthand-property-no-redundant-values: true
   comment-whitespace-inside: always
-  prettier/prettier: true
diff --git a/assets/eslint.config.js b/assets/eslint.config.js
index aaae607d..1c3f2b75 100644
--- a/assets/eslint.config.js
+++ b/assets/eslint.config.js
@@ -1,11 +1,9 @@
 import tsEslint from 'typescript-eslint';
 import vitestPlugin from 'eslint-plugin-vitest';
-import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
 import globals from 'globals';
 
 export default tsEslint.config(
   ...tsEslint.configs.recommended,
-  eslintPluginPrettierRecommended,
   {
     name: 'PhilomenaConfig',
     files: ['**/*.js', '**/*.ts'],
diff --git a/assets/js/boorujs.js b/assets/js/boorujs.js
index 86d9901b..b60e2217 100644
--- a/assets/js/boorujs.js
+++ b/assets/js/boorujs.js
@@ -9,24 +9,22 @@ import { fetchHtml, handleError } from './utils/requests';
 import { showBlock } from './utils/image';
 import { addTag } from './tagsinput';
 
-/* eslint-disable prettier/prettier */
-
 // Event types and any qualifying conditions - return true to not run action
 const types = {
-  click(event)    { return event.button !== 0; /* Left-click only */ },
-  change()        { /* No qualifier */ },
+  click(event) { return event.button !== 0; /* Left-click only */ },
+  change() { /* No qualifier */ },
   fetchcomplete() { /* No qualifier */ },
 };
 
 const actions = {
-  hide(data)       { selectorCb(data.base, data.value, el => el.classList.add('hidden')); },
-  show(data)       { selectorCb(data.base, data.value, el => el.classList.remove('hidden')); },
-  toggle(data)     { selectorCb(data.base, data.value, el => el.classList.toggle('hidden')); },
-  submit(data)     { selectorCb(data.base, data.value, el => el.submit()); },
-  disable(data)    { selectorCb(data.base, data.value, el => el.disabled = true); },
-  focus(data)      { document.querySelector(data.value).focus(); },
-  unfilter(data)   { showBlock(data.el.closest('.image-show-container')); },
-  tabHide(data)    { selectorCbChildren(data.base, data.value, el => el.classList.add('hidden')); },
+  hide(data) { selectorCb(data.base, data.value, el => el.classList.add('hidden')); },
+  show(data) { selectorCb(data.base, data.value, el => el.classList.remove('hidden')); },
+  toggle(data) { selectorCb(data.base, data.value, el => el.classList.toggle('hidden')); },
+  submit(data) { selectorCb(data.base, data.value, el => el.submit()); },
+  disable(data) { selectorCb(data.base, data.value, el => el.disabled = true); },
+  focus(data) { document.querySelector(data.value).focus(); },
+  unfilter(data) { showBlock(data.el.closest('.image-show-container')); },
+  tabHide(data) { selectorCbChildren(data.base, data.value, el => el.classList.add('hidden')); },
   preventdefault() { /* The existence of this entry is enough */ },
 
   copy(data) {
@@ -61,8 +59,8 @@ const actions = {
 
   tab(data) {
     const block = data.el.parentNode.parentNode,
-          newTab = $(`.block__tab[data-tab="${data.value}"]`),
-          loadTab = data.el.dataset.loadTab;
+      newTab = $(`.block__tab[data-tab="${data.value}"]`),
+      loadTab = data.el.dataset.loadTab;
 
     // Switch tab
     const selectedTab = block.querySelector('.selected');
@@ -87,8 +85,6 @@ const actions = {
   },
 };
 
-/* eslint-enable prettier/prettier */
-
 // Use this function to apply a callback to elements matching the selectors
 function selectorCb(base = document, selector, cb) {
   [].forEach.call(base.querySelectorAll(selector), cb);
diff --git a/assets/js/shortcuts.ts b/assets/js/shortcuts.ts
index 3de21c89..52071b31 100644
--- a/assets/js/shortcuts.ts
+++ b/assets/js/shortcuts.ts
@@ -47,8 +47,7 @@ function isOK(event: KeyboardEvent): boolean {
   );
 }
 
-/* eslint-disable prettier/prettier */
-
+// prettier-ignore
 const keyCodes: ShortcutKeyMap = {
   74() { click('.js-prev');             }, // J - go to previous image
   73() { click('.js-up');               }, // I - go to index page
@@ -68,8 +67,6 @@ const keyCodes: ShortcutKeyMap = {
   },
 };
 
-/* eslint-enable prettier/prettier */
-
 export function listenForKeys() {
   document.addEventListener('keydown', (event: KeyboardEvent) => {
     if (isOK(event) && keyCodes[event.keyCode]) {
diff --git a/assets/js/tags.ts b/assets/js/tags.ts
index 8a0568fc..deb3c7bd 100644
--- a/assets/js/tags.ts
+++ b/assets/js/tags.ts
@@ -26,18 +26,40 @@ function createTagDropdown(tag: HTMLSpanElement) {
   const [unwatched, watched, spoilered, hidden] = $$<HTMLSpanElement>('.tag__state', tag);
   const tagId = parseInt(assertNotUndefined(tag.dataset.tagId), 10);
 
-  /* eslint-disable prettier/prettier */
   const actions: TagDropdownActionList = {
-    unwatch()   { hideEl(unwatch, watched);     showEl(watch, unwatched);     removeTag(tagId, watchedTagList);   },
-    watch()     { hideEl(watch, unwatched);     showEl(unwatch, watched);     addTag(tagId, watchedTagList);      },
+    unwatch() {
+      hideEl(unwatch, watched);
+      showEl(watch, unwatched);
+      removeTag(tagId, watchedTagList);
+    },
+    watch() {
+      hideEl(watch, unwatched);
+      showEl(unwatch, watched);
+      addTag(tagId, watchedTagList);
+    },
 
-    unspoiler() { hideEl(unspoiler, spoilered); showEl(spoiler);              removeTag(tagId, spoileredTagList); },
-    spoiler()   { hideEl(spoiler);              showEl(unspoiler, spoilered); addTag(tagId, spoileredTagList);    },
+    unspoiler() {
+      hideEl(unspoiler, spoilered);
+      showEl(spoiler);
+      removeTag(tagId, spoileredTagList);
+    },
+    spoiler() {
+      hideEl(spoiler);
+      showEl(unspoiler, spoilered);
+      addTag(tagId, spoileredTagList);
+    },
 
-    unhide()    { hideEl(unhide, hidden);       showEl(hide);                 removeTag(tagId, hiddenTagList);    },
-    hide()      { hideEl(hide);                 showEl(unhide, hidden);       addTag(tagId, hiddenTagList);       },
+    unhide() {
+      hideEl(unhide, hidden);
+      showEl(hide);
+      removeTag(tagId, hiddenTagList);
+    },
+    hide() {
+      hideEl(hide);
+      showEl(unhide, hidden);
+      addTag(tagId, hiddenTagList);
+    },
   };
-  /* eslint-enable prettier/prettier */
 
   const tagIsWatched = watchedTagList.includes(tagId);
   const tagIsSpoilered = spoileredTagList.includes(tagId);
diff --git a/assets/package-lock.json b/assets/package-lock.json
index 412aaa4f..52ea697b 100644
--- a/assets/package-lock.json
+++ b/assets/package-lock.json
@@ -22,13 +22,9 @@
         "@testing-library/jest-dom": "^6.6.3",
         "@vitest/coverage-v8": "^2.1.9",
         "eslint": "^9.16.0",
-        "eslint-config-prettier": "^9.1.0",
-        "eslint-plugin-prettier": "^5.2.1",
         "eslint-plugin-vitest": "^0.5.4",
-        "prettier": "^3.4.2",
         "stylelint": "^16.11.0",
         "stylelint-config-standard": "^36.0.1",
-        "stylelint-prettier": "^5.0.2",
         "typescript-eslint": "8.17.0",
         "vitest": "^2.1.9",
         "vitest-fetch-mock": "^0.4.2"
@@ -1120,18 +1116,6 @@
         "node": ">=14"
       }
     },
-    "node_modules/@pkgr/core": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
-      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unts"
-      }
-    },
     "node_modules/@rollup/rollup-android-arm-eabi": {
       "version": "4.28.1",
       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz",
@@ -2517,48 +2501,6 @@
         }
       }
     },
-    "node_modules/eslint-config-prettier": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
-      "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
-      "dev": true,
-      "bin": {
-        "eslint-config-prettier": "bin/cli.js"
-      },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-prettier": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
-      "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==",
-      "dev": true,
-      "dependencies": {
-        "prettier-linter-helpers": "^1.0.0",
-        "synckit": "^0.9.1"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-plugin-prettier"
-      },
-      "peerDependencies": {
-        "@types/eslint": ">=8.0.0",
-        "eslint": ">=8.0.0",
-        "eslint-config-prettier": "*",
-        "prettier": ">=3.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/eslint": {
-          "optional": true
-        },
-        "eslint-config-prettier": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/eslint-plugin-vitest": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.5.4.tgz",
@@ -2828,12 +2770,6 @@
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "dev": true
     },
-    "node_modules/fast-diff": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
-      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
-      "dev": true
-    },
     "node_modules/fast-glob": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -4121,33 +4057,6 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/prettier": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
-      "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
-      "dev": true,
-      "bin": {
-        "prettier": "bin/prettier.cjs"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
-      }
-    },
-    "node_modules/prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
-      "dependencies": {
-        "fast-diff": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/pretty-format": {
       "version": "27.5.1",
       "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -4628,22 +4537,6 @@
         "stylelint": "^16.1.0"
       }
     },
-    "node_modules/stylelint-prettier": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-5.0.2.tgz",
-      "integrity": "sha512-qJ+BN+1T2ZcKz9WIrv0x+eFGHzSUnXfXd5gL///T6XoJvr3D8/ztzz2fhtmXef7Vb8P33zBXmLTTveByr0nwBw==",
-      "dev": true,
-      "dependencies": {
-        "prettier-linter-helpers": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=18.12.0"
-      },
-      "peerDependencies": {
-        "prettier": ">=3.0.0",
-        "stylelint": ">=16.0.0"
-      }
-    },
     "node_modules/stylelint/node_modules/balanced-match": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
@@ -4750,22 +4643,6 @@
       "optional": true,
       "peer": true
     },
-    "node_modules/synckit": {
-      "version": "0.9.2",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
-      "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
-      "dev": true,
-      "dependencies": {
-        "@pkgr/core": "^0.1.0",
-        "tslib": "^2.6.2"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unts"
-      }
-    },
     "node_modules/table": {
       "version": "6.9.0",
       "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
@@ -4992,12 +4869,6 @@
         "typescript": ">=4.2.0"
       }
     },
-    "node_modules/tslib": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "dev": true
-    },
     "node_modules/type-check": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
diff --git a/assets/package.json b/assets/package.json
index 41b85269..a2cf1ae2 100644
--- a/assets/package.json
+++ b/assets/package.json
@@ -27,13 +27,9 @@
     "@testing-library/jest-dom": "^6.6.3",
     "@vitest/coverage-v8": "^2.1.9",
     "eslint": "^9.16.0",
-    "eslint-config-prettier": "^9.1.0",
-    "eslint-plugin-prettier": "^5.2.1",
     "eslint-plugin-vitest": "^0.5.4",
-    "prettier": "^3.4.2",
     "stylelint": "^16.11.0",
     "stylelint-config-standard": "^36.0.1",
-    "stylelint-prettier": "^5.0.2",
     "typescript-eslint": "8.17.0",
     "vitest": "^2.1.9",
     "vitest-fetch-mock": "^0.4.2"
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..f7aea3ab
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,27 @@
+{
+  "name": "philomena",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "devDependencies": {
+        "prettier": "^3.5.3"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..9528d2d8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,9 @@
+{
+  "scripts": {
+    "fmt": "prettier --write .",
+    "fmt-check": "prettier --check ."
+  },
+  "devDependencies": {
+    "prettier": "^3.5.3"
+  }
+}