From ac7e4b3bce841b3b6b6e18e60c4457c4109be2f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:00:20 +0100 Subject: [PATCH 01/32] Update dev dependencies (#1557) --- package-lock.json | 404 +++++++++------------------------------------- package.json | 6 +- 2 files changed, 79 insertions(+), 331 deletions(-) diff --git a/package-lock.json b/package-lock.json index be52e5e54..572c3e5ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,14 +14,14 @@ "webextension-polyfill": "^0.12.0" }, "devDependencies": { - "chrome-webstore-upload-cli": "^3.3.0", + "chrome-webstore-upload-cli": "^3.3.1", "eslint": "^8.57.0", "eslint-config-semistandard": "^17.0.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.5.0", + "eslint-plugin-jsdoc": "^48.10.2", "eslint-plugin-n": "^15.7.0", - "eslint-plugin-promise": "^6.4.0", + "eslint-plugin-promise": "^6.6.0", "web-ext": "^7.12.0" } }, @@ -264,17 +264,14 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.43.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", - "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", + "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "^8.56.5", - "@types/estree": "^1.0.5", - "@typescript-eslint/types": "^7.2.0", "comment-parser": "1.4.1", - "esquery": "^1.5.0", + "esquery": "^1.6.0", "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { @@ -568,34 +565,12 @@ "node": ">=14.16" } }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -627,20 +602,6 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", - "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -661,10 +622,11 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1288,17 +1250,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1682,16 +1633,15 @@ } }, "node_modules/chrome-webstore-upload-cli": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chrome-webstore-upload-cli/-/chrome-webstore-upload-cli-3.3.0.tgz", - "integrity": "sha512-8KMq/hqqgy4PZ/PD8ElDphJPSn5szTxcc8frkQQ7yJgFAoV0Z5cpTeTY0wh6QcU08AqNiVM/lp62iFw0G6yJ8w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chrome-webstore-upload-cli/-/chrome-webstore-upload-cli-3.3.1.tgz", + "integrity": "sha512-9QHK6/yQAPttUK68Vzrj93nQUWKo0UMYJwG2KTkcUQke31QuzsYB1XGqmNd+XrQj7rxDTyGZa1QJznIgIXkmRw==", "dev": true, "license": "MIT", "dependencies": { "chrome-webstore-upload": "^3.1.0", "junk": "^4.0.1", "meow": "^12.1.1", - "ora": "^7.0.1", "recursive-readdir": "^2.2.3", "yazl": "^2.5.1" }, @@ -1732,33 +1682,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2095,10 +2018,11 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -2374,12 +2298,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2797,22 +2715,23 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.5.0.tgz", - "integrity": "sha512-ukXPNpGby3KjCveCizIS8t1EbuJEHYEu/tBg8GCbn/YbHcXwphyvYCdvRZ/oMRfTscGSSzfsWoZ+ZkAP0/6YMQ==", + "version": "48.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.10.2.tgz", + "integrity": "sha512-xTkf/MmEeVrTbezc6kDqCJmK9RcseIKo8X4oyoDCMvV4LY8dqrQi8kmfRrv9n0gNBkCclevaOh2Lkmu6Fs8SLg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.43.1", + "@es-joy/jsdoccomment": "~0.46.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.3.4", + "debug": "^4.3.5", "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "parse-imports": "^2.1.0", - "semver": "^7.6.2", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", "spdx-expression-parse": "^4.0.0", - "synckit": "^0.9.0" + "synckit": "^0.9.1" }, "engines": { "node": ">=18" @@ -2821,10 +2740,41 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -2896,9 +2846,9 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.4.0.tgz", - "integrity": "sha512-/KWWRaD3fGkVCZsdR0RU53PSthFmoHVhZl+y9+6DqeDLSikLdlUVpVEAmI6iCRR5QyOjBYBqHZV/bdv4DJ4Gtw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, "license": "ISC", "engines": { @@ -3006,10 +2956,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4170,18 +4121,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-mergeable-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", @@ -4345,18 +4284,6 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -4814,34 +4741,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -5425,68 +5324,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "dev": true, - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/os-locale": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", @@ -5634,11 +5471,11 @@ } }, "node_modules/parse-imports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.0.tgz", - "integrity": "sha512-JQWgmK2o4w8leUkZeZPatWdAny6vXGU/3siIUvMF6J2rDCud9aTt8h/px9oZJ6U3EcfhngBJ635uPFI0q0VAeA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", + "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", "dev": true, - "license": "Apache 2.0", + "license": "Apache-2.0", "dependencies": { "es-module-lexer": "^1.5.3", "slashes": "^3.0.12" @@ -5988,20 +5825,6 @@ "node": ">=0.10.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", @@ -6292,22 +6115,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6728,21 +6535,6 @@ "node": ">=0.10.0" } }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dev": true, - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -6775,23 +6567,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", @@ -6815,33 +6590,6 @@ "dev": true, "license": "MIT" }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -6995,9 +6743,9 @@ } }, "node_modules/synckit": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", - "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 4421eac45..3d9c9cfe3 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,14 @@ "build": "web-ext build" }, "devDependencies": { - "chrome-webstore-upload-cli": "^3.3.0", + "chrome-webstore-upload-cli": "^3.3.1", "eslint": "^8.57.0", "eslint-config-semistandard": "^17.0.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.5.0", + "eslint-plugin-jsdoc": "^48.10.2", "eslint-plugin-n": "^15.7.0", - "eslint-plugin-promise": "^6.4.0", + "eslint-plugin-promise": "^6.6.0", "web-ext": "^7.12.0" }, "dependencies": { From b20d7f156905924658d3973b092880a933cf207c Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:31:59 -0700 Subject: [PATCH 02/32] Cleanfeed, Quick Reblog: Include submitting blogs/group blog authors (#1440) --- src/features/cleanfeed.js | 8 +++++--- src/features/quick_reblog.js | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/features/cleanfeed.js b/src/features/cleanfeed.js index d6b9f1763..0479ffaa9 100644 --- a/src/features/cleanfeed.js +++ b/src/features/cleanfeed.js @@ -21,11 +21,13 @@ const processPosts = postElements => filterPostElements(postElements).forEach(as return; } - const { blog: { name, isAdult }, communityLabels, trail, tags } = await timelineObject(postElement); + const { blog, authorBlog, communityLabels, trail, tags } = await timelineObject(postElement); - if (isAdult || + if (blog.isAdult || + authorBlog?.isAdult || communityLabels.hasCommunityLabel || - localFlaggedBlogs.includes(name) || + localFlaggedBlogs.includes(blog.name) || + localFlaggedBlogs.includes(authorBlog?.name) || localFlaggedTags.some(t => tags.map(tag => tag.toLowerCase()).includes(t))) { postElement.classList.add(hiddenClass); return; diff --git a/src/features/quick_reblog.js b/src/features/quick_reblog.js index d48ae26f7..872b0e3d3 100644 --- a/src/features/quick_reblog.js +++ b/src/features/quick_reblog.js @@ -144,9 +144,10 @@ const showPopupOnHover = ({ currentTarget }) => { commentInput.value = ''; [...quickTagsList.children].forEach(({ dataset }) => delete dataset.checked); tagsInput.value = ''; - timelineObject(thisPost).then(({ tags, trail, content, layout, blogName, rebloggedRootName }) => { + timelineObject(thisPost).then(({ tags, trail, content, layout, blogName, postAuthor, rebloggedRootName }) => { suggestableTags = tags; if (blogName) suggestableTags.push(blogName); + if (postAuthor) suggestableTags.push(postAuthor); if (rebloggedRootName) suggestableTags.push(rebloggedRootName); suggestableTags.push(postType({ trail, content, layout })); renderTagSuggestions(); From bc4c315d343d8b6b6cdfb687a83dc1baee086dad Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:33:34 -0700 Subject: [PATCH 03/32] Quick Tags, Quick Reblog: Fix popup horizontal cutoff (#1536) Co-authored-by: April Sylph <28949509+AprilSylph@users.noreply.github.com> --- src/features/quick_reblog.css | 54 +++++++---------------------------- src/features/quick_reblog.js | 7 ++--- src/features/quick_tags.css | 27 ++++-------------- src/features/quick_tags.js | 14 ++------- src/utils/interface.js | 29 +++++++++++++++++++ 5 files changed, 51 insertions(+), 80 deletions(-) diff --git a/src/features/quick_reblog.css b/src/features/quick_reblog.css index 5e0c9df0b..2db158ca8 100644 --- a/src/features/quick_reblog.css +++ b/src/features/quick_reblog.css @@ -20,56 +20,22 @@ display: none !important; } -@media (max-width: 650px) { - #quick-reblog { - top: 50%; - right: 100%; - transform: translateY(-50%); - } +#quick-reblog { + --icon-spacing: 12px; } - -@media (min-width: 650px) { +@media (max-width: 990px) { #quick-reblog { - transform: translateX(50%); - } - - #quick-reblog.above { - bottom: 100%; - right: 50%; - } - - #quick-reblog.below { - top: 100%; - right: 50%; + --icon-spacing: 0px; } } -@media (min-width: 990px) { - #quick-reblog.above { - transform: translate(50%, -12px) - } - - #quick-reblog.below { - transform: translate(50%, 12px); - } +#quick-reblog.below { + inset: 100% 50% auto auto; + transform: translate(calc(50% + var(--horizontal-offset, 0%)), var(--icon-spacing)); } - -@media (max-width: 990px) { - [role="dialog"] #quick-reblog { - top: 50%; - bottom: unset; - right: 100%; - transform: translateY(-50%); - } -} - -@media (min-width: 990px) and (max-width: 1145px) { - [role="dialog"] #quick-reblog { - top: 50%; - bottom: unset; - right: 100%; - transform: translate(-20px, -50%); - } +#quick-reblog.above { + inset: auto 50% 100% auto; + transform: translate(calc(50% + var(--horizontal-offset, 0%)), calc(0px - var(--icon-spacing))); } div:first-child + span + #quick-reblog, diff --git a/src/features/quick_reblog.js b/src/features/quick_reblog.js index 872b0e3d3..a92361315 100644 --- a/src/features/quick_reblog.js +++ b/src/features/quick_reblog.js @@ -1,7 +1,7 @@ import { sha256 } from '../utils/crypto.js'; import { timelineObject } from '../utils/react_props.js'; import { apiFetch } from '../utils/tumblr_helpers.js'; -import { postSelector, filterPostElements, postType } from '../utils/interface.js'; +import { postSelector, filterPostElements, postType, appendWithoutOverflow } from '../utils/interface.js'; import { userBlogs } from '../utils/user.js'; import { getPreferences } from '../utils/preferences.js'; import { onNewPosts } from '../utils/mutations.js'; @@ -9,6 +9,7 @@ import { notify } from '../utils/notifications.js'; import { translate } from '../utils/language_data.js'; import { dom } from '../utils/dom.js'; import { showErrorModal } from '../utils/modals.js'; +import { keyToCss } from '../utils/css_map.js'; const popupElement = dom('div', { id: 'quick-reblog' }); const blogSelector = dom('select'); @@ -131,7 +132,7 @@ tagsInput.addEventListener('input', checkLength); const showPopupOnHover = ({ currentTarget }) => { clearTimeout(timeoutID); - currentTarget.closest('div').appendChild(popupElement); + appendWithoutOverflow(popupElement, currentTarget.closest(keyToCss('controlIcon')), popupPosition); popupElement.parentNode.addEventListener('mouseleave', removePopupOnLeave); const thisPost = currentTarget.closest(postSelector); @@ -330,8 +331,6 @@ export const main = async function () { alreadyRebloggedLimit } = await getPreferences('quick_reblog')); - popupElement.className = popupPosition; - blogSelector.replaceChildren( ...userBlogs.map(({ name, uuid }) => dom('option', { value: uuid }, null, [name])) ); diff --git a/src/features/quick_tags.css b/src/features/quick_tags.css index 6ce55c4ab..73007cb21 100644 --- a/src/features/quick_tags.css +++ b/src/features/quick_tags.css @@ -42,28 +42,13 @@ } } -@media (min-width: 650px) { - #quick-tags.below { - inset: 100% 50% auto auto; - transform: translate(50%, var(--icon-spacing)); - } - #quick-tags.above { - inset: auto 50% 100% auto; - transform: translate(50%, calc(0px - var(--icon-spacing))); - } +#quick-tags.below { + inset: 100% 50% auto auto; + transform: translate(calc(50% + var(--horizontal-offset, 0%)), var(--icon-spacing)); } - -@media (max-width: 650px) { - #quick-tags { - inset: 50% 100% auto auto; - transform: translate(calc(0px - var(--icon-spacing)), -50%); - } -} -@media (max-width: 1145px) { - [role="dialog"] #quick-tags { - inset: 50% 100% auto auto; - transform: translate(calc(0px - var(--icon-spacing)), -50%); - } +#quick-tags.above { + inset: auto 50% 100% auto; + transform: translate(calc(50% + var(--horizontal-offset, 0%)), calc(0px - var(--icon-spacing))); } #quick-tags:empty::before, diff --git a/src/features/quick_tags.js b/src/features/quick_tags.js index ec4f1f109..689c95ae1 100644 --- a/src/features/quick_tags.js +++ b/src/features/quick_tags.js @@ -1,7 +1,7 @@ import { cloneControlButton, createControlButtonTemplate } from '../utils/control_buttons.js'; import { keyToCss } from '../utils/css_map.js'; import { dom } from '../utils/dom.js'; -import { filterPostElements, getTimelineItemWrapper, postSelector } from '../utils/interface.js'; +import { appendWithoutOverflow, filterPostElements, getTimelineItemWrapper, postSelector } from '../utils/interface.js'; import { megaEdit } from '../utils/mega_editor.js'; import { modalCancelButton, modalCompleteButton, showErrorModal, showModal } from '../utils/modals.js'; import { onNewPosts, pageModifications } from '../utils/mutations.js'; @@ -115,14 +115,6 @@ export const onStorageChanged = async function (changes, areaName) { } }; -const appendWithoutViewportOverflow = (element, target) => { - element.className = 'below'; - target.appendChild(element); - if (element.getBoundingClientRect().bottom > document.documentElement.clientHeight) { - element.className = 'above'; - } -}; - const togglePopupDisplay = async function ({ target, currentTarget: controlButton }) { if (target === popupElement || popupElement.contains(target)) { return; } @@ -131,7 +123,7 @@ const togglePopupDisplay = async function ({ target, currentTarget: controlButto if (buttonContainer.contains(popupElement)) { buttonContainer.removeChild(popupElement); } else { - appendWithoutViewportOverflow(popupElement, buttonContainer); + appendWithoutOverflow(popupElement, buttonContainer); } }; @@ -141,7 +133,7 @@ const togglePostOptionPopupDisplay = async function ({ target, currentTarget }) if (currentTarget.contains(postOptionPopupElement)) { currentTarget.removeChild(postOptionPopupElement); } else { - appendWithoutViewportOverflow(postOptionPopupElement, currentTarget); + appendWithoutOverflow(postOptionPopupElement, currentTarget); } }; diff --git a/src/utils/interface.js b/src/utils/interface.js index 3eb252ca5..86b67680b 100644 --- a/src/utils/interface.js +++ b/src/utils/interface.js @@ -115,3 +115,32 @@ export const postType = ({ trail = [], content = [], layout = [] }) => { else if (content.some(({ type }) => type === 'link')) return 'link'; else return 'text'; }; + +const getClosestWithOverflow = element => { + const parent = element.parentElement; + if (!parent) { + return element; + } else if (getComputedStyle(parent).overflowX !== 'visible') { + return parent; + } else { + return getClosestWithOverflow(parent); + } +}; + +export const appendWithoutOverflow = (element, target, defaultPosition = 'below') => { + element.className = defaultPosition; + element.style.removeProperty('--horizontal-offset'); + + target.appendChild(element); + + const preventOverflowTarget = getClosestWithOverflow(target); + const preventOverflowTargetRect = preventOverflowTarget.getBoundingClientRect(); + const elementRect = element.getBoundingClientRect(); + + if (elementRect.bottom > document.documentElement.clientHeight) { + element.className = 'above'; + } + if (elementRect.right > preventOverflowTargetRect.right - 15) { + element.style.setProperty('--horizontal-offset', `${preventOverflowTargetRect.right - 15 - elementRect.right}px`); + } +}; From 619be5fa30bd26b19365c51512b4939ca9e9e717 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:33:57 -0700 Subject: [PATCH 04/32] Collapsed Queue: Remove outdated erroneous CSS (#1548) --- src/features/collapsed_queue.css | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/features/collapsed_queue.css b/src/features/collapsed_queue.css index c2c84adfa..a7626bbea 100644 --- a/src/features/collapsed_queue.css +++ b/src/features/collapsed_queue.css @@ -1,12 +1,3 @@ -.sortableContainer header { - padding-top: 10px; - padding-left: calc(var(--post-padding) - 10px); - margin-bottom: 10px; -} -.sortableContainer footer { - margin-top: 5px; - padding-bottom: 5px; -} .xkit-collapsed-queue-wrapper { position: relative; } From 498a8a2871b201f10c0992d5c7f1473224c74e45 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:34:16 -0700 Subject: [PATCH 05/32] Seen Posts: Fix soft refresh (#1545) Co-authored-by: April Sylph <28949509+AprilSylph@users.noreply.github.com> --- src/features/seen_posts.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/features/seen_posts.js b/src/features/seen_posts.js index 8b16ecedc..d75dbdf70 100644 --- a/src/features/seen_posts.js +++ b/src/features/seen_posts.js @@ -1,8 +1,8 @@ import { filterPostElements, getTimelineItemWrapper, postSelector } from '../utils/interface.js'; import { getPreferences } from '../utils/preferences.js'; -import { onNewPosts } from '../utils/mutations.js'; +import { onNewPosts, pageModifications } from '../utils/mutations.js'; import { keyToCss } from '../utils/css_map.js'; -import { followingTimelineFilter, followingTimelineSelector } from '../utils/timeline_id.js'; +import { followingTimelineFilter, followingTimelineSelector, timelineSelector } from '../utils/timeline_id.js'; const excludeAttribute = 'data-seen-posts-done'; const timeline = followingTimelineFilter; @@ -13,6 +13,8 @@ const onlyDimAvatarsClass = 'xkit-seen-posts-only-dim-avatar'; const hideClass = 'xkit-seen-posts-hide'; const lengthenedClass = 'xkit-seen-posts-lengthened'; +const softRefreshLoaderSelector = `${followingTimelineSelector} ${keyToCss('container')}:has(~ div ${postSelector}) > ${keyToCss('knightRiderLoader')}`; + const storageKey = 'seen_posts.seenPosts'; let seenPosts = []; @@ -52,7 +54,7 @@ const lengthenTimelines = () => } }); -const dimPosts = function (postElements) { +const dimPosts = function (postElements, reprocessPosts = false) { lengthenTimelines(); for (const postElement of filterPostElements(postElements, { timeline, includeFiltered })) { @@ -64,12 +66,19 @@ const dimPosts = function (postElements) { if (seenPosts.includes(id) === false) { observer.observe(postElement.querySelector('article header + *')); - } else if (isFirstRender) { + } else if (isFirstRender || reprocessPosts) { timelineItem.setAttribute(dimAttribute, ''); } } }; +const onSoftRefresh = loaderElements => { + const refreshedPostElements = loaderElements.flatMap( + element => [...element.closest(timelineSelector).querySelectorAll(postSelector)] + ); + dimPosts(refreshedPostElements, true); +}; + export const onStorageChanged = async function (changes, areaName) { const { 'seen_posts.preferences.hideSeenPosts': hideSeenPostsChanges, @@ -106,10 +115,12 @@ export const main = async function () { } onNewPosts.addListener(dimPosts); + pageModifications.register(softRefreshLoaderSelector, onSoftRefresh); }; export const clean = async function () { onNewPosts.removeListener(dimPosts); + pageModifications.unregister(onSoftRefresh); observer.disconnect(); timers.forEach((timerId) => clearTimeout(timerId)); From 579aa4e356e8a14bb9f99146e401dd23633b5a97 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:34:28 -0700 Subject: [PATCH 06/32] Tag Tracking+: minor `onStorageChanged` refactor (#1554) --- src/features/tag_tracking_plus.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/features/tag_tracking_plus.js b/src/features/tag_tracking_plus.js index 2e838c2ac..9a75bb620 100644 --- a/src/features/tag_tracking_plus.js +++ b/src/features/tag_tracking_plus.js @@ -128,12 +128,16 @@ const processPosts = async function (postElements) { }; export const onStorageChanged = async (changes, areaName) => { - if (Object.keys(changes).includes(storageKey)) { - timestamps = changes[storageKey].newValue; + const { + [storageKey]: timestampsChanges, + 'tag_tracking_plus.preferences.onlyShowNew': onlyShowNewChanges + } = changes; + + if (timestampsChanges) { + timestamps = timestampsChanges.newValue; } - if (Object.keys(changes).some(key => key.startsWith('tag_tracking_plus.preferences'))) { - const { onlyShowNew } = await getPreferences('tag_tracking_plus'); - sidebarItem.dataset.onlyShowNew = onlyShowNew; + if (onlyShowNewChanges) { + sidebarItem.dataset.onlyShowNew = onlyShowNewChanges.newValue; } }; From 0349151f03e744d2223601212a899af7c1ad829e Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:34:59 -0700 Subject: [PATCH 07/32] Quote Replies: Fix feature on threaded replies (#1561) Co-authored-by: April Sylph <28949509+AprilSylph@users.noreply.github.com> --- src/features/quote_replies.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/features/quote_replies.js b/src/features/quote_replies.js index 88c13badd..a29fc940d 100644 --- a/src/features/quote_replies.js +++ b/src/features/quote_replies.js @@ -31,7 +31,7 @@ const processNotifications = notifications => notifications.forEach(async notifi notification ); - if (!['reply', 'note_mention'].includes(notificationProps.type)) return; + if (!['reply', 'reply_to_comment', 'note_mention'].includes(notificationProps.type)) return; const activityElement = notification.querySelector(activitySelector); if (!activityElement) return; @@ -58,7 +58,6 @@ const quoteReply = async (tumblelogName, notificationProps) => { const uuid = userBlogs.find(({ name }) => name === tumblelogName).uuid; const { type, targetPostId, targetPostSummary, targetTumblelogName, targetTumblelogUuid, timestamp } = notificationProps; - const isReply = type === 'reply'; const { response } = await apiFetch( `/v2/blog/${targetTumblelogUuid}/post/${targetPostId}/notes/timeline`, { queryParams: { mode: 'replies', before_timestamp: `${timestamp + 1}000000` } } @@ -69,9 +68,12 @@ const quoteReply = async (tumblelogName, notificationProps) => { if (!reply) throw new Error('No replies found on target post.'); if (Math.floor(reply.timestamp) !== timestamp) throw new Error('Reply not found.'); - const text = isReply - ? `@${reply.blog.name} replied to your post \u201C${targetPostSummary.replace(/\n/g, ' ')}\u201D:` - : `@${reply.blog.name} mentioned you on a post \u201C${targetPostSummary.replace(/\n/g, ' ')}\u201D:`; + const verbiage = { + reply: 'replied to your post', + reply_to_comment: 'replied to you in a post', + note_mention: 'mentioned you on a post' + }[type]; + const text = `@${reply.blog.name} ${verbiage} \u201C${targetPostSummary.replace(/\n/g, ' ')}\u201D:`; const formatting = [ { start: 0, end: reply.blog.name.length + 1, type: 'mention', blog: { uuid: reply.blog.uuid } }, { start: text.indexOf('\u201C'), end: text.length - 1, type: 'link', url: `https://${targetTumblelogName}.tumblr.com/post/${targetPostId}` } From f6329c78919d7c6ba6284e9a49ffe2d52b86985e Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:35:11 -0700 Subject: [PATCH 08/32] Sidebar util: Prevent erroneous sidebar in communities settings (#1569) --- src/utils/sidebar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/sidebar.js b/src/utils/sidebar.js index 6ada9a1e7..cfd1f3bc8 100644 --- a/src/utils/sidebar.js +++ b/src/utils/sidebar.js @@ -96,7 +96,7 @@ const updateSidebarItemVisibility = () => [...sidebarItems.children] .forEach(sidebarItem => { sidebarItem.hidden = !conditions.get(sidebarItem)(); }); const addSidebarToPage = (siblingCandidates) => { - if (/^\/settings/.test(location.pathname)) { return; } + if (/^\/settings/.test(location.pathname) || /^\/communities.*\/settings$/.test(location.pathname)) { return; } updateSidebarItemVisibility(); From 244109c8c7034186ce96a8d8ae3e7c2892ffee04 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:35:46 -0700 Subject: [PATCH 09/32] Tweaks: Fix subtle following/mutuals tweak in communities (#1568) --- src/features/tweaks/subtle_activity_mutuals.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/tweaks/subtle_activity_mutuals.js b/src/features/tweaks/subtle_activity_mutuals.js index e7bd0a736..b18bd13ea 100644 --- a/src/features/tweaks/subtle_activity_mutuals.js +++ b/src/features/tweaks/subtle_activity_mutuals.js @@ -3,7 +3,7 @@ import { keyToCss } from '../../utils/css_map.js'; import { buildStyle } from '../../utils/interface.js'; import { dom } from '../../utils/dom.js'; -const labelSelector = keyToCss('followingBadgeContainer', 'mutualsBadgeContainer'); +const labelSelector = `${keyToCss('followingBadgeContainer', 'mutualsBadgeContainer')}:has(> svg)`; const spanClass = 'xkit-tweaks-subtle-activity-span'; From b50f456cca9d9307bb1d997d274e0c87da266c1b Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Sun, 18 Aug 2024 13:44:19 -0700 Subject: [PATCH 10/32] Automatic `styleElement` addition/removal (#1464) --- docs/Chapter 4.2 - Feature modules.md | 14 ++++++++--- src/content_scripts/main.js | 25 +++++++++++++------ src/features/accesskit.css | 4 --- src/features/accesskit.js | 18 ++++++++++--- src/features/accesskit/blue_links.js | 5 +--- src/features/accesskit/disable_animations.js | 5 +--- src/features/accesskit/disable_gifs.js | 5 +--- src/features/accesskit/no_user_colours.js | 9 ++++--- src/features/accesskit/no_user_fonts.js | 10 ++++---- src/features/accesskit/visible_alt_text.js | 5 +--- src/features/anti_capitalism.js | 5 ++-- src/features/cleanfeed.js | 5 ++-- src/features/hide_avatars.js | 8 +----- src/features/no_recommended.js | 18 ++++++++++--- .../no_recommended/hide_answertime.js | 7 +++--- .../no_recommended/hide_blog_carousels.js | 5 ++-- .../no_recommended/hide_lightbox_related.js | 5 +--- src/features/no_recommended/hide_radar.js | 5 ++-- .../no_recommended/hide_recommended_blogs.js | 5 +--- .../hide_recommended_blogs_modal.js | 5 +--- .../no_recommended/hide_recommended_posts.js | 5 ++-- .../no_recommended/hide_tag_carousels.js | 5 ++-- src/features/notificationblock.js | 5 ++-- src/features/scroll_to_bottom.js | 4 +-- src/features/shorten_posts.js | 6 ++--- src/features/themed_posts.js | 8 +++--- src/features/tweaks.js | 18 ++++++++++--- src/features/tweaks/caught_up_line.js | 5 ++-- src/features/tweaks/hide_activity_mutuals.js | 5 +--- .../hide_activity_notification_badge.js | 5 +--- src/features/tweaks/hide_blaze_tip_labels.js | 5 +--- src/features/tweaks/hide_filtered_posts.js | 5 ++-- src/features/tweaks/hide_follower_counts.js | 5 +--- .../hide_following_notification_badge.js | 5 ++-- src/features/tweaks/hide_footer_tooltips.js | 5 +--- src/features/tweaks/hide_liked_posts.js | 5 ++-- src/features/tweaks/hide_mini_follow.js | 7 +++--- src/features/tweaks/hide_my_posts.js | 5 ++-- .../tweaks/highlight_contributed_content.js | 9 ++++--- src/features/tweaks/no_focus_shadow.js | 5 +--- src/features/tweaks/no_where_were_we.js | 7 +++--- src/features/tweaks/show_all_tags.js | 10 +------- src/features/tweaks/slim_filtered_screens.js | 5 +--- .../tweaks/subtle_activity_mutuals.js | 4 +-- src/features/tweaks/unsticky_tab_bar.js | 5 +--- 45 files changed, 142 insertions(+), 179 deletions(-) diff --git a/docs/Chapter 4.2 - Feature modules.md b/docs/Chapter 4.2 - Feature modules.md index 94f2f17c0..94d092626 100644 --- a/docs/Chapter 4.2 - Feature modules.md +++ b/docs/Chapter 4.2 - Feature modules.md @@ -1,16 +1,16 @@ # Feature modules -Each module is required to export at least two async functions. +Modules may export any of the following: ## `main()` - Type: Async Function -- Required: Yes +- Required: No The main function of the feature. Will be called whenever the user enables the feature, even if the tab(s) XKit is running in is/are not focused. Will also be called upon pageload if the script is enabled. ## `clean()` - Type: Async Function -- Required: Yes +- Required: No The cleanup function of the feature. Called whenever the user disables the feature, also regardless of tab focus. @@ -24,4 +24,10 @@ The preference-handling code of the feature. Added as a `browser.storage.onChang - Type: Boolean - Required: No -Whether the feature has a stylesheet. If true, there should be a `.css` file of matching name in the same directory level. The stylesheet is automatically added and removed during the feature's lifecycle. +Whether the feature has a static stylesheet. If true, there should be a `.css` file of matching name in the same directory level. The stylesheet is automatically added and removed during the feature's lifecycle. + +## `styleElement` +- Type: HTMLStyleElement +- Required: No + +An HTML `