$ date
--- stdout ---
Mon Mar 31 04:40:33 UTC 2025
--- end ---
$ git clone file:///srv/git/mediawiki-extensions-PageProperties.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
--- stdout ---
--- end ---
$ git config user.name libraryupgrader
--- stdout ---
--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---
--- end ---
$ git submodule update --init
--- stdout ---
--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.
--- end ---
$ git show-ref refs/heads/master
--- stdout ---
31c26ed681115743f26b13fa51ae27007d36a3b2 refs/heads/master
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 0,
"high": 0,
"critical": 0,
"total": 0
},
"dependencies": {
"prod": 1,
"dev": 404,
"optional": 0,
"peer": 1,
"peerOptional": 0,
"total": 404
}
}
}
--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 24 installs, 0 updates, 0 removals
- Locking composer/semver (3.4.3)
- Locking composer/spdx-licenses (1.5.8)
- Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
- Locking easyrdf/easyrdf (1.1.1)
- Locking mediawiki/mediawiki-codesniffer (v46.0.0)
- Locking mediawiki/minus-x (1.1.3)
- Locking ml/iri (1.1.4)
- Locking ml/json-ld (1.2.1)
- Locking php-parallel-lint/php-console-color (v1.0.1)
- Locking php-parallel-lint/php-console-highlighter (v1.0.0)
- Locking php-parallel-lint/php-parallel-lint (v1.4.0)
- Locking phpcsstandards/phpcsextra (1.2.1)
- Locking phpcsstandards/phpcsutils (1.0.12)
- Locking psr/container (2.0.2)
- Locking squizlabs/php_codesniffer (3.11.3)
- Locking symfony/console (v7.2.5)
- Locking symfony/deprecation-contracts (v3.5.1)
- Locking symfony/polyfill-ctype (v1.31.0)
- Locking symfony/polyfill-intl-grapheme (v1.31.0)
- Locking symfony/polyfill-intl-normalizer (v1.31.0)
- Locking symfony/polyfill-mbstring (v1.31.0)
- Locking symfony/polyfill-php80 (v1.31.0)
- Locking symfony/service-contracts (v3.5.1)
- Locking symfony/string (v7.2.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 24 installs, 0 updates, 0 removals
- Downloading easyrdf/easyrdf (1.1.1)
- Downloading ml/iri (1.1.4)
- Downloading ml/json-ld (1.2.1)
0/3 [>---------------------------] 0%
2/3 [==================>---------] 66%
3/3 [============================] 100%
- Installing squizlabs/php_codesniffer (3.11.3): Extracting archive
- Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
- Installing symfony/polyfill-mbstring (v1.31.0): Extracting archive
- Installing easyrdf/easyrdf (1.1.1): Extracting archive
- Installing symfony/polyfill-php80 (v1.31.0): Extracting archive
- Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive
- Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive
- Installing composer/spdx-licenses (1.5.8): Extracting archive
- Installing composer/semver (3.4.3): Extracting archive
- Installing mediawiki/mediawiki-codesniffer (v46.0.0): Extracting archive
- Installing symfony/polyfill-intl-normalizer (v1.31.0): Extracting archive
- Installing symfony/polyfill-intl-grapheme (v1.31.0): Extracting archive
- Installing symfony/polyfill-ctype (v1.31.0): Extracting archive
- Installing symfony/string (v7.2.0): Extracting archive
- Installing symfony/deprecation-contracts (v3.5.1): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing symfony/service-contracts (v3.5.1): Extracting archive
- Installing symfony/console (v7.2.5): Extracting archive
- Installing mediawiki/minus-x (1.1.3): Extracting archive
- Installing ml/iri (1.1.4): Extracting archive
- Installing ml/json-ld (1.2.1): Extracting archive
- Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
- Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
- Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
0/22 [>---------------------------] 0%
20/22 [=========================>--] 90%
22/22 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
14 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils
--- end ---
Upgrading n:eslint-config-wikimedia from 0.28.2 -> 0.29.1
$ /usr/bin/npm install
--- stdout ---
added 404 packages, and audited 405 packages in 4s
91 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json
--- end ---
$ /usr/bin/npm install grunt-eslint@24.3.0 --save-exact
--- stdout ---
up to date, audited 405 packages in 872ms
91 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json
--- end ---
$ ./node_modules/.bin/eslint i18n/en.json resources/PagePropertiesFunctions.js i18n/qqq.json Gruntfile.js resources/dynamictable.js resources/VersionCheck.js package-lock.json i18n/de.json composer.json package.json includes/specials/WikiSEO_parameters.json resources/tabs.js extension.json --fix
--- stdout ---
/src/repo/resources/VersionCheck.js
31:3 error Prefer .then to .done no-jquery/no-done-fail
57:7 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
59:18 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal
62:9 warning Where possible, maintain application state in JS to avoid slower DOM queries no-jquery/no-class-state
/src/repo/resources/dynamictable.js
52:10 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern
63:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
77:20 warning Positional selector extensions are not allowed no-jquery/no-sizzle
78:19 warning Positional selector extensions are not allowed no-jquery/no-sizzle
81:20 warning Positional selector extensions are not allowed no-jquery/no-sizzle
82:19 warning Positional selector extensions are not allowed no-jquery/no-sizzle
180:21 warning Selector extensions are not allowed no-jquery/no-sizzle
227:16 warning Selector extensions are not allowed no-jquery/no-sizzle
230:16 warning Selector extensions are not allowed no-jquery/no-sizzle
240:4 warning Selector extensions are not allowed no-jquery/no-sizzle
244:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
265:14 warning Selector extensions are not allowed no-jquery/no-sizzle
276:13 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
330:14 warning Positional selector extensions are not allowed no-jquery/no-sizzle
366:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
371:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
/src/repo/resources/tabs.js
8:9 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
26:24 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
126:3 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
✖ 23 problems (1 error, 22 warnings)
--- end ---
$ ./node_modules/.bin/eslint i18n/en.json resources/PagePropertiesFunctions.js i18n/qqq.json Gruntfile.js resources/dynamictable.js resources/VersionCheck.js package-lock.json i18n/de.json composer.json package.json includes/specials/WikiSEO_parameters.json resources/tabs.js extension.json -f json
--- stdout ---
[{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/includes/specials/WikiSEO_parameters.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/PagePropertiesFunctions.js","messages":[],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'PagePropertiesFunctions' is assigned a value but never used.","line":24,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":24,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VersionCheck.js","messages":[{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":31,"column":3,"nodeType":"CallExpression","endLine":77,"endColumn":7},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":57,"column":7,"nodeType":"CallExpression","endLine":57,"endColumn":34},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":59,"column":18,"nodeType":"CallExpression","endLine":59,"endColumn":41},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":62,"column":9,"nodeType":"CallExpression","endLine":62,"endColumn":75}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension PageProperties.\n *\n * PageProperties is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * PageProperties is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with PageProperties. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2024, https://wikisphere.org\n */\n$( () => {\n\tif (\n\t\t!mw.config.get( 'pageproperties-show-notice-outdated-version' ) ||\n\t\tmw.cookie.get( 'pageproperties-check-latest-version' )\n\t) {\n\t\treturn;\n\t}\n\n\t// display every 3 days\n\tmw.loader.using( 'mediawiki.api', () => {\n\t\tnew mw.Api()\n\t\t\t.postWithToken( 'csrf', {\n\t\t\t\taction: 'pageproperties-check-latest-version'\n\t\t\t} )\n\t\t\t.done( ( res ) => {\n\t\t\t\tif ( 'pageproperties-check-latest-version' in res ) {\n\t\t\t\t\tif ( res[ 'pageproperties-check-latest-version' ].result === 2 ) {\n\t\t\t\t\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\t\t\t\t\tmw.msg(\n\t\t\t\t\t\t\t\t\t'pageproperties-jsmodule-pageproperties-outdated-version'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t// *** this does not work before ooui v0.43.0\n\t\t\t\t\t\t\tshowClose: true\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tvar closeFunction = function () {\n\t\t\t\t\t\t\tvar three_days = 3 * 86400;\n\t\t\t\t\t\t\tmw.cookie.set( 'pageproperties-check-latest-version', true, {\n\t\t\t\t\t\t\t\tpath: '/',\n\t\t\t\t\t\t\t\texpires: three_days\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t$( messageWidget.$element ).parent().remove();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmessageWidget.on( 'close', closeFunction );\n\t\t\t\t\t\t$( '#pageproperties-form' )\n\t\t\t\t\t\t\t.first()\n\t\t\t\t\t\t\t.prepend( $( '<div><br/></div>' ).prepend( messageWidget.$element ) );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!messageWidget.$element.hasClass( 'oo-ui-messageWidget-showClose' )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmessageWidget.$element.addClass( 'oo-ui-messageWidget-showClose' );\n\t\t\t\t\t\t\tvar closeButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\t\t\t\tclasses: [ 'oo-ui-messageWidget-close' ],\n\t\t\t\t\t\t\t\tframed: false,\n\t\t\t\t\t\t\t\ticon: 'close',\n\t\t\t\t\t\t\t\tlabel: OO.ui.msg( 'ooui-popup-widget-close-button-aria-label' ),\n\t\t\t\t\t\t\t\tinvisibleLabel: true\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tcloseButton.on( 'click', closeFunction );\n\t\t\t\t\t\t\tmessageWidget.$element.append( closeButton.$element );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/dynamictable.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":52,"column":10,"nodeType":"VariableDeclarator","endLine":52,"endColumn":49},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":63,"column":2,"nodeType":"CallExpression","endLine":63,"endColumn":48},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":77,"column":20,"nodeType":"CallExpression","endLine":77,"endColumn":45},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":78,"column":19,"nodeType":"CallExpression","endLine":78,"endColumn":43},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":81,"column":20,"nodeType":"CallExpression","endLine":81,"endColumn":51},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":82,"column":19,"nodeType":"CallExpression","endLine":82,"endColumn":49},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":180,"column":21,"nodeType":"CallExpression","endLine":180,"endColumn":52},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":227,"column":16,"nodeType":"CallExpression","endLine":227,"endColumn":47},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":230,"column":16,"nodeType":"CallExpression","endLine":230,"endColumn":38},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":240,"column":4,"nodeType":"CallExpression","endLine":240,"endColumn":23},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":244,"column":2,"nodeType":"CallExpression","endLine":244,"endColumn":51},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":265,"column":14,"nodeType":"CallExpression","endLine":265,"endColumn":36},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":276,"column":13,"nodeType":"CallExpression","endLine":276,"endColumn":59},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":330,"column":14,"nodeType":"CallExpression","endLine":330,"endColumn":44},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":366,"column":2,"nodeType":"CallExpression","endLine":366,"endColumn":48},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":371,"column":2,"nodeType":"CallExpression","endLine":371,"endColumn":45}],"suppressedMessages":[{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'el_'.","line":52,"column":10,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":52,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":74,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":74,"endColumn":18,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[2331,2398],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-loop-func","severity":2,"message":"Function declared in a loop contains unsafe references to variable(s) 'attr', 'attr', 'attr'.","line":91,"column":12,"nodeType":"FunctionExpression","messageId":"unsafeRefs","endLine":95,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'optgroup_'.","line":133,"column":14,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":133,"endColumn":73,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-loop-func","severity":2,"message":"Function declared in a loop contains unsafe references to variable(s) 'input_value', 'input_value'.","line":171,"column":48,"nodeType":"FunctionExpression","messageId":"unsafeRefs","endLine":209,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-alert","severity":2,"message":"Unexpected confirm.","line":270,"column":10,"nodeType":"CallExpression","messageId":"unexpected","endLine":270,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'toggle' is defined but never used.","line":282,"column":41,"nodeType":"Identifier","messageId":"unusedVar","endLine":282,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'index' is defined but never used.","line":371,"column":63,"nodeType":"Identifier","messageId":"unusedVar","endLine":371,"endColumn":68,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":16,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension PageProperties.\n *\n * PageProperties is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * PageProperties is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with PageProperties. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2022, https://wikisphere.org\n */\n\n$( () => {\n\tPagePropertiesFunctions.removeNbspFromLayoutHeader( '#pageproperties-form' );\n\n\t// @TODO the following manipulates the DOM which is\n\t// a bad practice, convert to client-side only\n\t// using object-oriented approach\n\n\tvar msg1 = mw.config.get( 'pageproperties-js-alert-1' );\n\t// var msg2 = mw.config.get( 'pageproperties-js-alert-2' );\n\tvar propertiesTypes = JSON.parse( mw.config.get( 'pageproperties-propertiesTypes' ) );\n\n\tfunction increment_name( value, increment ) {\n\t\tif ( !value ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tvar num = parseInt( value.match( /\\d+/ ) ) + increment;\n\n\t\tif ( isNaN( num ) ) {\n\t\t\treturn value + '_' + increment;\n\t\t}\n\n\t\treturn value.replace( /\\d+/, num );\n\t}\n\n\tfunction closest( el, selector ) {\n\t\tvar output_el;\n\n\t\t$( el ).parents().each( function () {\n\t\t\t// eslint-disable-next-line no-underscore-dangle\n\t\t\tconst el_ = $( this ).has( selector ).first();\n\n\t\t\tif ( el_.length ) {\n\t\t\t\toutput_el = el_;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t\treturn output_el;\n\t}\n\n\t$( '.pageproperties_dynamictable_add_button' ).on( 'click', function () {\n\t\tvar $parent_el = $( this ).parents( 'div[id^=\"form-section-\"]' ).first();\n\t\tvar semantic_properties = ( $parent_el.attr( 'id' ) === 'form-section-semantic-properties' );\n\n\t\tlet $table = $( this ).closest( '.pageproperties_dynamictable table' );\n\n\t\t// search table\n\t\tif ( !$table.length ) {\n\t\t\t$table = closest( this, '.pageproperties_dynamictable' );\n\t\t\tif ( !$table.length ) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( 'cannot find related pageproperties_dynamictable' );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar $tr_first = $table.find( 'tr:first' );\n\t\t\tvar $tr_last = $table.find( 'tr:last' );\n\n\t\t} else {\n\t\t\tvar $tr_first = $( this ).closest( 'tr:first' );\n\t\t\tvar $tr_last = $( this ).closest( 'tr:last' );\n\t\t}\n\n\t\t// clone latest row\n\t\tconst $clone = $tr_last.clone( true, true );\n\n\t\tfor ( var attr of [ 'name', 'id' ] ) {\n\t\t\t$clone.find( '[' + attr + ']' )\n\t\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\t\t.each( function () {\n\t\t\t\t\tif ( $( this ).prop( attr ) ) {\n\t\t\t\t\t\t$( this ).attr( attr, increment_name( $( this ).prop( attr ), 1 ) );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tfunction getNewInput( ooui_el, input_el, that ) {\n\t\t\tvar options = [];\n\t\t\tswitch ( ooui_el.constructor.name ) {\n\t\t\t\tcase 'OoUiComboBoxInputWidget': {\n\t\t\t\t\tconst menu_items = ooui_el.menu.items; // ooui_el.getMenu()\n\n\t\t\t\t\tfor ( const menu_item of menu_items ) {\n\t\t\t\t\t\tif ( menu_item.constructor.name === 'OoUiMenuOptionWidget' ) {\n\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\tlabel: menu_item.label,\n\t\t\t\t\t\t\t\tdata: menu_item.data\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tmenu_item.constructor.name === 'OoUiMenuSectionOptionWidget'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\toptgroup: menu_item.label\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new OO.ui.ComboBoxInputWidget( {\n\t\t\t\t\t\tname: increment_name( input_el.prop( 'name' ), 1 ),\n\t\t\t\t\t\toptions: options\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tcase 'OoUiDropdownInputWidget': {\n\t\t\t\t\tlet optgroup = null;\n\n\t\t\t\t\t$( that )\n\t\t\t\t\t\t.find( 'option' )\n\t\t\t\t\t\t.each( function () {\n\t\t\t\t\t\t\t// eslint-disable-next-line no-underscore-dangle\n\t\t\t\t\t\t\tconst optgroup_ = $( this ).closest( 'optgroup' ).attr( 'label' );\n\n\t\t\t\t\t\t\tif ( optgroup_ && optgroup_ !== optgroup ) {\n\t\t\t\t\t\t\t\toptgroup = optgroup_;\n\t\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\t\toptgroup: optgroup\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\tlabel: $( this ).text(),\n\t\t\t\t\t\t\t\tdata: $( this ).val()\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\treturn new OO.ui.DropdownInputWidget( {\n\t\t\t\t\t\toptions: options,\n\t\t\t\t\t\tname: increment_name( input_el.prop( 'name' ), 1 )\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tcase 'OoUiTextInputWidget':\n\t\t\t\t\treturn new OO.ui.TextInputWidget( {\n\t\t\t\t\t\tvalue: '',\n\t\t\t\t\t\tname: increment_name( input_el.prop( 'name' ), 1 )\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar input_value = null;\n\t\tfor ( let selector of [ 'td.pageproperties_dynamictable_key_cell', 'td.pageproperties_dynamictable_value_cell' ] ) {\n\t\t\tvar $cell_first_row = $tr_first.find( selector ).eq( 0 );\n\n\t\t\t// PHP rendered elements\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\t$cell_first_row.find( '[data-ooui]' ).each( function () {\n\t\t\t\tvar ooui_el = OO.ui.infuse( $( this ) );\n\n\t\t\t\tif ( !ooui_el || !ooui_el.constructor.name ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// input_el of last cell\n\t\t\t\tvar $cell_last_row = $tr_last.find( selector ).eq( 0 );\n\t\t\t\tvar $input_el = $cell_last_row.find( ':input' ).first();\n\t\t\t\tvar new_element = getNewInput( ooui_el, $input_el, this );\n\n\t\t\t\tif ( !new_element ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( semantic_properties ) {\n\t\t\t\t\tswitch ( selector ) {\n\t\t\t\t\t\tcase 'td.pageproperties_dynamictable_key_cell':\n\t\t\t\t\t\t\tinput_value = new_element.value;\n\t\t\t\t\t\t\tvar name = new_element.$input.attr( 'name' ).replace( '_key_', '_value_' );\n\n\t\t\t\t\t\t\tnew_element.on( 'change', ( value ) => {\n\t\t\t\t\t\t\t\tvar $el = $( '[name=\"' + name + '\"]' );\n\t\t\t\t\t\t\t\t$el.attr( 'placeholder', propertiesTypes[ value ] );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'td.pageproperties_dynamictable_value_cell':\n\t\t\t\t\t\t\tnew_element.$input.attr( 'placeholder', propertiesTypes[ input_value ] );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$clone.find( selector )\n\t\t\t\t\t.eq( 0 )\n\t\t\t\t\t.html( new_element.$element );\n\n\t\t\t} );\n\n\t\t}\n\n\t\t$tr_last.after( $clone );\n\n\t} );\n\n\tfunction removeOrResetRow( $tr ) {\n\t\tvar $table = $( $tr ).closest( 'table' );\n\t\tif ( $table.find( 'tr' ).length > 1 ) {\n\t\t\tvar row_index = $tr.index();\n\t\t\tif ( row_index === 0 ) {\n\t\t\t\t// copy the values of next one to the current\n\t\t\t\t// and delete the next one\n\t\t\t\tvar $next_tr = $table.find( 'tr' ).eq( row_index + 1 );\n\t\t\t\tfor ( var selector of [ 'td.pageproperties_dynamictable_key_cell', 'td.pageproperties_dynamictable_value_cell' ] ) {\n\t\t\t\t\tvar $next_row_cell = $next_tr.find( selector ).eq( 0 );\n\t\t\t\t\tvar $el = $next_row_cell.find( ':input' ).first();\n\t\t\t\t\tvar input_value = $el.val().trim();\n\t\t\t\t\tvar $cell = $tr.find( selector ).eq( 0 );\n\t\t\t\t\tvar $el = $cell.find( ':input' ).first();\n\t\t\t\t\t$el.val( input_value );\n\t\t\t\t}\n\t\t\t\t$next_tr.remove();\n\n\t\t\t} else {\n\t\t\t\t$tr.remove();\n\t\t\t}\n\n\t\t} else {\n\t\t\t$tr.find( ':text' ).val( '' );\n\t\t}\n\t}\n\n\t$( '.pageproperties_dynamictable_cancel_button' ).on( 'click', function () {\n\t\tvar input_value = false;\n\t\tvar cell_selector = null;\n\t\tvar $tr = $( this ).parents( '.pageproperties_dynamictable_row' ).eq( 0 );\n\n\t\tif ( $( this ).parents( '#form-section-semantic-manage-properties' ).get( 0 ) ) {\n\t\t\tcell_selector = 'td.pageproperties_dynamictable_key_cell';\n\n\t\t} else if ( $( this ).parents( '#form-section-semantic-properties' ).get( 0 ) ) {\n\t\t\tcell_selector = 'td.pageproperties_dynamictable_value_cell';\n\n\t\t// match id with section\n\t\t} else if ( $( this ).parents( 'div[id^=\"form-section-semantic-manage-properties/\"]' ).get( 0 ) ) {\n\t\t\tcell_selector = 'td.pageproperties_dynamictable_key_cell';\n\n\t\t// if encoded\n\t\t} else if ( $( this ).parents( 'div[id^=\"form-section-semantic-manage-properties.2F\"]' ).get( 0 ) ) {\n\t\t\tcell_selector = 'td.pageproperties_dynamictable_key_cell';\n\t\t}\n\t\tif ( cell_selector ) {\n\t\t\tvar $cell = $tr.find( cell_selector ).eq( 0 );\n\t\t\tvar $el = $cell.find( ':input' ).first();\n\t\t\tinput_value = $el.val().trim();\n\t\t}\n\t\tif ( input_value ) {\n\t\t\t// eslint-disable-next-line no-alert\n\t\t\tif ( !confirm( msg1 ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tremoveOrResetRow( $tr );\n\t\tvar $el = $( '#SEO_meta_robots_noindex_nofollow input' );\n\t\tupdate_noindex_nofollow( $el, false );\n\n\t} );\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction update_noindex_nofollow( $el, toggle ) {\n\t\tconst checked = $el.is( ':checked' );\n\t\tvar $table = closest( $el, '.pageproperties_dynamictable' );\n\n\t\tvar found = false;\n\t\tvar name;\n\n\t\t/*\n\t\t$table.find( 'tr' ).each( function () {\n\t\t\tvar $cell = $( this ).find( 'td.pageproperties_dynamictable_key_cell' ).eq( 0 );\n\t\t\tvar $el = $cell.find( ':input' ).first()\n\t\t\tvar input_value = $el.val().trim()\n\n\t\t\tif ( input_value === 'robots' ) {\n\t\t\t\tfound = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t})\n*/\n\t\t$( $table ).find( 'input' ).each( function () {\n\t\t\tname = $( this ).attr( 'name' );\n\t\t\tif ( name.indexOf( '_key_' ) !== -1 && $( this ).val().trim() === 'robots' ) {\n\t\t\t\tfound = true;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( !found ) {\n\t\t\t$table.find( 'input' ).each( function () {\n\t\t\t\tname = $( this ).attr( 'name' );\n\t\t\t\tif ( name.indexOf( '_key_' ) !== -1 && $( this ).val().trim() === '' &&\n\t\t\t\t\t$table.find( '[name=' + name.replace( '_key_', '_value_' ) + ']' ).eq( 0 ).val().trim() === ''\n\t\t\t\t) {\n\t\t\t\t\t$( this ).val( 'robots' );\n\t\t\t\t\tfound = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} );\n\t\t}\n\n\t\tif ( !found ) {\n\t\t\tif ( !checked ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// add row\n\t\t\t$table.find( '.pageproperties_dynamictable_add_button' ).trigger( 'click' );\n\t\t\tvar $el = $table.find( 'tr:last input' ).eq( 0 );\n\t\t\tname = $el.attr( 'name' );\n\t\t\t$el.val( 'robots' );\n\t\t}\n\n\t\tvar $el = $table.find( '[name=' + name.replace( '_key_', '_value_' ) + ']' ).eq( 0 );\n\t\tconst value = $el.val().trim();\n\n\t\tconst values = ( value !== '' ? value.split( /\\s*,\\s*/ ) : [] );\n\n\t\tif ( checked ) {\n\t\t\tvar parameters = { index: false, follow: false, noindex: true, nofollow: true };\n\n\t\t} else {\n\t\t\tvar parameters = { noindex: false, nofollow: false };\n\t\t}\n\n\t\tfor ( const i in parameters ) {\n\t\t\tif ( parameters[ i ] ) {\n\t\t\t\tif ( values.indexOf( i ) === -1 ) {\n\t\t\t\t\tvalues.push( i );\n\t\t\t\t}\n\n\t\t\t} else if ( values.indexOf( i ) > -1 ) {\n\t\t\t\tvalues.splice( values.indexOf( i ), 1 );\n\t\t\t}\n\t\t}\n\t\tif ( values.length ) {\n\t\t\t$el.val( values.join( ', ' ) );\n\n\t\t} else {\n\t\t\tremoveOrResetRow( $el.closest( 'tr' ) );\n\t\t}\n\n\t}\n\n\t$( '#SEO_meta_robots_noindex_nofollow input' ).on( 'change', function () {\n\t\tupdate_noindex_nofollow( $( this ), true );\n\t} );\n\n\t// eslint-disable-next-line no-unused-vars\n\t$( '#form-section-semantic-properties tr' ).each( function ( index ) {\n\t\tfor ( let selector of [ 'td.pageproperties_dynamictable_key_cell', 'td.pageproperties_dynamictable_value_cell' ] ) {\n\t\t\tlet input_value = null;\n\t\t\tvar $cell = $( this ).find( selector ).eq( 0 );\n\n\t\t\t// PHP rendered elements\n\t\t\t$cell.find( '[data-ooui]' ).each( function () {\n\t\t\t\tvar ooui_el = OO.ui.infuse( $( this ) );\n\n\t\t\t\tif ( !ooui_el || !ooui_el.constructor.name ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch ( selector ) {\n\t\t\t\t\tcase 'td.pageproperties_dynamictable_key_cell':\n\t\t\t\t\t\tinput_value = ooui_el.value;\n\t\t\t\t\t\tvar name = ooui_el.$input.attr( 'name' ).replace( '_key_', '_value_' );\n\n\t\t\t\t\t\tooui_el.on( 'change', ( value ) => {\n\t\t\t\t\t\t\tvar $el = $( '[name=\"' + name + '\"]' );\n\t\t\t\t\t\t\t$el.attr( 'placeholder', propertiesTypes[ value ] );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'td.pageproperties_dynamictable_value_cell':\n\t\t\t\t\t\tooui_el.$input.attr( 'placeholder', propertiesTypes[ input_value ] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/tabs.js","messages":[{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":8,"column":9,"nodeType":"CallExpression","endLine":8,"endColumn":30},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":26,"column":24,"nodeType":"CallExpression","endLine":26,"endColumn":45},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":126,"column":3,"nodeType":"CallExpression","endLine":126,"endColumn":30}],"suppressedMessages":[{"ruleId":"no-constant-condition","severity":2,"message":"Unexpected constant condition.","line":101,"column":8,"nodeType":"Literal","messageId":"unexpected","endLine":101,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * JavaScript for Special:Preferences: Tab navigation.\n */\n( function () {\n\t$( () => {\n\t\tlet tabs, previousTab, switchingNoHash;\n\n\t\tif ( !$( '.mw-prefs-tabs' ).get( 0 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// ***edited\n\t\tswitchingNoHash = true;\n\n\t\t// Make sure the accessibility tip is focussable so that keyboard users take notice,\n\t\t// but hide it by default to reduce visual clutter.\n\t\t// Make sure it becomes visible when focused.\n\t\t$( '<div>' )\n\t\t\t.addClass( 'mw-navigation-hint' )\n\t\t\t.text( mw.msg( 'prefs-tabs-navigation-hint' ) )\n\t\t\t.attr( {\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t.insertBefore( '.mw-htmlform-ooui-wrapper' );\n\n\t\ttabs = OO.ui.infuse( $( '.mw-prefs-tabs' ) );\n\n\t\ttabs.$element.addClass( 'mw-prefs-tabs-infused' );\n\n\t\tfunction enhancePanel( panel ) {\n\t\t\tif ( !panel.$element.data( 'mw-section-infused' ) ) {\n\t\t\t\tpanel.$element.removeClass( 'mw-htmlform-autoinfuse-lazy' );\n\t\t\t\tmw.hook( 'htmlform.enhance' ).fire( panel.$element );\n\t\t\t\tpanel.$element.data( 'mw-section-infused', true );\n\t\t\t}\n\t\t}\n\n\t\tfunction onTabPanelSet( panel ) {\n\t\t\tlet scrollTop, active;\n\n\t\t\tif ( switchingNoHash ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Handle hash manually to prevent jumping,\n\t\t\t// therefore save and restore scrollTop to prevent jumping.\n\t\t\tscrollTop = $( window ).scrollTop();\n\t\t\t// Changing the hash apparently causes keyboard focus to be lost?\n\t\t\t// Save and restore it. This makes no sense though.\n\t\t\tactive = document.activeElement;\n\t\t\tlocation.hash = '#' + panel.getName();\n\t\t\tif ( active ) {\n\t\t\t\tactive.focus();\n\t\t\t}\n\t\t\t$( window ).scrollTop( scrollTop );\n\t\t}\n\n\t\ttabs.on( 'set', onTabPanelSet );\n\n\t\t/**\n\t\t * @ignore\n\t\t * @param {string} name The name of a tab\n\t\t * @param {boolean} [noHash] A hash will be set according to the current\n\t\t * open section. Use this flag to suppress this.\n\t\t */\n\t\tfunction switchPrefTab( name, noHash ) {\n\t\t\tif ( noHash ) {\n\t\t\t\tswitchingNoHash = true;\n\t\t\t}\n\t\t\ttabs.setTabPanel( name );\n\t\t\tenhancePanel( tabs.getCurrentTabPanel() );\n\t\t\tif ( noHash ) {\n\t\t\t\tswitchingNoHash = false;\n\t\t\t}\n\t\t}\n\n\t\t// Jump to correct section as indicated by the hash.\n\t\t// This function is called onload and onhashchange.\n\t\tfunction detectHash() {\n\t\t\tlet hash = location.hash,\n\t\t\t\tmatchedElement,\n\t\t\t\t$parentSection;\n\t\t\tif ( hash.match( /^#mw-prefsection-[\\w]+$/ ) ) {\n\t\t\t\t// mw.storage.session.remove( 'mwpreferences-prevTab' );\n\t\t\t\tswitchPrefTab( hash.slice( 1 ) );\n\t\t\t} else if ( hash.match( /^#mw-[\\w-]+$/ ) ) {\n\t\t\t\tmatchedElement = document.getElementById( hash.slice( 1 ) );\n\t\t\t\t$parentSection = $( matchedElement ).closest(\n\t\t\t\t\t'.mw-prefs-section-fieldset'\n\t\t\t\t);\n\t\t\t\tif ( $parentSection.length ) {\n\t\t\t\t\t// mw.storage.session.remove( 'mwpreferences-prevTab' );\n\t\t\t\t\t// Switch to proper tab and scroll to selected item.\n\t\t\t\t\tswitchPrefTab( $parentSection.attr( 'id' ), true );\n\t\t\t\t\tmatchedElement.scrollIntoView();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// ***edited\n\t\t// eslint-disable-next-line no-constant-condition\n\t\tif ( false ) {\n\t\t\t$( window )\n\t\t\t\t.on( 'hashchange', () => {\n\n\t\t\t\t\tconst hash = location.hash;\n\t\t\t\t\tif ( hash.match( /^#mw-[\\w-]+/ ) ) {\n\t\t\t\t\t\tdetectHash();\n\t\t\t\t\t} else if ( hash === '' ) {\n\t\t\t\t\t\tswitchPrefTab( 'mw-prefsection-personal', true );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t// Run the function immediately to select the proper tab on startup.\n\t\t\t\t.trigger( 'hashchange' );\n\t\t}\n\n\t\t// Restore the active tab after saving the preferences\n\t\t// ***edited\n\t\tpreviousTab = mw.storage.session.get( 'pageproperties-prevTab' );\n\t\tif ( previousTab ) {\n\t\t\tswitchPrefTab( previousTab, true );\n\t\t\t// Deleting the key, the tab states should be reset until we press Save\n\t\t\tmw.storage.session.remove( 'pageproperties-prevTab' );\n\t\t}\n\n\t\t// ***edited\n\t\t$( '#pageproperties-form' ).on( 'submit', () => {\n\t\t\tconst currentTab = tabs.getCurrentTabPanelName();\n\t\t\t// ***edited\n\t\t\tif ( currentTab ) {\n\t\t\t\tmw.storage.session.set( 'pageproperties-prevTab', currentTab );\n\t\t\t}\n\t\t} );\n\t} );\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]
--- end ---
Disabling eslint rule 'no-jquery/no-done-fail' (broken in .eslintrc.json) on .eslintrc.json
$ /usr/bin/npm ci
--- stdout ---
added 404 packages, and audited 405 packages in 5s
91 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
--- end ---
$ /usr/bin/npm test
--- stdout ---
> test
> grunt test
Running "eslint:all" (eslint) task
/src/repo/resources/VersionCheck.js
31:3 warning Prefer .then to .done no-jquery/no-done-fail
57:7 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
59:18 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal
62:9 warning Where possible, maintain application state in JS to avoid slower DOM queries no-jquery/no-class-state
/src/repo/resources/dynamictable.js
52:10 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern
63:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
77:20 warning Positional selector extensions are not allowed no-jquery/no-sizzle
78:19 warning Positional selector extensions are not allowed no-jquery/no-sizzle
81:20 warning Positional selector extensions are not allowed no-jquery/no-sizzle
82:19 warning Positional selector extensions are not allowed no-jquery/no-sizzle
180:21 warning Selector extensions are not allowed no-jquery/no-sizzle
227:16 warning Selector extensions are not allowed no-jquery/no-sizzle
230:16 warning Selector extensions are not allowed no-jquery/no-sizzle
240:4 warning Selector extensions are not allowed no-jquery/no-sizzle
244:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
265:14 warning Selector extensions are not allowed no-jquery/no-sizzle
276:13 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
330:14 warning Positional selector extensions are not allowed no-jquery/no-sizzle
366:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
371:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
/src/repo/resources/tabs.js
8:9 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
26:24 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
126:3 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector
✖ 23 problems (0 errors, 23 warnings)
Running "stylelint:all" (stylelint) task
>> Linted 1 files without errors
Running "banana:PageProperties" (banana) task
>> 1 message directory checked.
Done.
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 0,
"high": 0,
"critical": 0,
"total": 0
},
"dependencies": {
"prod": 1,
"dev": 404,
"optional": 0,
"peer": 1,
"peerOptional": 0,
"total": 404
}
}
}
--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json
--- end ---
build: Updating eslint-config-wikimedia to 0.29.1
The following rules are failing and were disabled:
* no-jquery/no-done-fail
$ git add .
--- stdout ---
--- end ---
$ git commit -F /tmp/tmp3uq1ksmi
--- stdout ---
[master 08faeb0] build: Updating eslint-config-wikimedia to 0.29.1
3 files changed, 21 insertions(+), 17 deletions(-)
--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 08faeb075d3f0a05039b38576335aed01ace8863 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Mon, 31 Mar 2025 04:41:07 +0000
Subject: [PATCH] build: Updating eslint-config-wikimedia to 0.29.1
The following rules are failing and were disabled:
* no-jquery/no-done-fail
Change-Id: I4c5b34255ec209967e9fc928f62b7e9ba9ca58d2
---
.eslintrc.json | 3 ++-
package-lock.json | 33 ++++++++++++++++++---------------
package.json | 2 +-
3 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/.eslintrc.json b/.eslintrc.json
index 9de52e9..84fc218 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -21,7 +21,8 @@
"no-jquery/no-parse-html-literal": "warn",
"no-jquery/no-sizzle": "warn",
"no-jquery/variable-pattern": "warn",
- "es-x/no-async-functions": "off"
+ "es-x/no-async-functions": "off",
+ "no-jquery/no-done-fail": "warn"
},
"parserOptions": {
"ecmaVersion": 8
diff --git a/package-lock.json b/package-lock.json
index 41f2094..09c09cd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,7 @@
"": {
"name": "PageProperties",
"devDependencies": {
- "eslint-config-wikimedia": "0.28.2",
+ "eslint-config-wikimedia": "0.29.1",
"grunt": "1.6.1",
"grunt-banana-checker": "0.13.0",
"grunt-eslint": "24.3.0",
@@ -1386,9 +1386,9 @@
}
},
"node_modules/eslint-config-wikimedia": {
- "version": "0.28.2",
- "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
- "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
+ "version": "0.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz",
+ "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==",
"dev": true,
"dependencies": {
"browserslist-config-wikimedia": "^0.7.0",
@@ -1401,13 +1401,16 @@
"eslint-plugin-mediawiki": "^0.7.0",
"eslint-plugin-mocha": "^10.4.3",
"eslint-plugin-n": "^17.7.0",
- "eslint-plugin-no-jquery": "^3.0.1",
+ "eslint-plugin-no-jquery": "^3.1.1",
"eslint-plugin-qunit": "^8.1.1",
"eslint-plugin-security": "^1.7.1",
"eslint-plugin-unicorn": "^53.0.0",
"eslint-plugin-vue": "^9.26.0",
"eslint-plugin-wdio": "^8.24.12",
"eslint-plugin-yml": "^1.14.0"
+ },
+ "engines": {
+ "node": ">=18 <23"
}
},
"node_modules/eslint-plugin-compat": {
@@ -1605,9 +1608,9 @@
}
},
"node_modules/eslint-plugin-no-jquery": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.1.tgz",
- "integrity": "sha512-GrzdjIxox/3x8hpSwpxiMuEQFipiJHTGiVsp0T1TI6GH+KVSbXa4z/56xTV1WiIe66u3iRgvCIipu9CRthecpQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz",
+ "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==",
"dev": true,
"peerDependencies": {
"eslint": ">=8.0.0"
@@ -5859,9 +5862,9 @@
}
},
"eslint-config-wikimedia": {
- "version": "0.28.2",
- "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
- "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
+ "version": "0.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz",
+ "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==",
"dev": true,
"requires": {
"browserslist-config-wikimedia": "^0.7.0",
@@ -5874,7 +5877,7 @@
"eslint-plugin-mediawiki": "^0.7.0",
"eslint-plugin-mocha": "^10.4.3",
"eslint-plugin-n": "^17.7.0",
- "eslint-plugin-no-jquery": "^3.0.1",
+ "eslint-plugin-no-jquery": "^3.1.1",
"eslint-plugin-qunit": "^8.1.1",
"eslint-plugin-security": "^1.7.1",
"eslint-plugin-unicorn": "^53.0.0",
@@ -6009,9 +6012,9 @@
}
},
"eslint-plugin-no-jquery": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.1.tgz",
- "integrity": "sha512-GrzdjIxox/3x8hpSwpxiMuEQFipiJHTGiVsp0T1TI6GH+KVSbXa4z/56xTV1WiIe66u3iRgvCIipu9CRthecpQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz",
+ "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==",
"dev": true,
"requires": {}
},
diff --git a/package.json b/package.json
index 822aea1..8e3590c 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"test": "grunt test"
},
"devDependencies": {
- "eslint-config-wikimedia": "0.28.2",
+ "eslint-config-wikimedia": "0.29.1",
"grunt": "1.6.1",
"grunt-banana-checker": "0.13.0",
"grunt-eslint": "24.3.0",
--
2.39.2
--- end ---