mediawiki/extensions/CodeEditor: main (log #1389172)

sourcepatches

This run took 55 seconds.

From d92f710d3aa66244d806c81fdeffe08297b60d3d Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Thu, 20 Jun 2024 03:20:15 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* eslint-config-wikimedia: 0.28.0 → 0.28.2
  The following rules are failing and were disabled:
  * modules:
    * es-x/no-object-assign

* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

Change-Id: Ic603e46d510db344805408a972355249455a177e
---
 modules/.eslintrc.json       |  3 +-
 modules/jquery.codeEditor.js |  4 +--
 package-lock.json            | 60 ++++++++++++++++++------------------
 package.json                 |  6 ++--
 4 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/modules/.eslintrc.json b/modules/.eslintrc.json
index 67326f6..60d8f2d 100644
--- a/modules/.eslintrc.json
+++ b/modules/.eslintrc.json
@@ -7,6 +7,7 @@
 	],
 	"rules": {
 		"max-len": "off",
-		"no-jquery/no-extend": "warn"
+		"no-jquery/no-extend": "warn",
+		"es-x/no-object-assign": "warn"
 	}
 }
diff --git a/modules/jquery.codeEditor.js b/modules/jquery.codeEditor.js
index 7d799c2..753cc5b 100644
--- a/modules/jquery.codeEditor.js
+++ b/modules/jquery.codeEditor.js
@@ -58,7 +58,7 @@
 		 *
 		 * This is also where we can attach some extra information to the events.
 		 */
-		context.evt = $.extend( context.evt, {
+		context.evt = Object.assign( context.evt, {
 			keydown: returnFalse,
 			change: returnFalse,
 			delayedChange: returnFalse,
@@ -99,7 +99,7 @@
 		/**
 		 * Internally used functions
 		 */
-		context.fn = $.extend( context.fn, {
+		context.fn = Object.assign( context.fn, {
 			isCodeEditorActive: function () {
 				return context.codeEditorActive;
 			},
diff --git a/package-lock.json b/package-lock.json
index a23587f..c42a5dd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,15 +9,15 @@
 			"version": "0.0.0",
 			"devDependencies": {
 				"ace-builds": "1.32.7",
-				"eslint-config-wikimedia": "0.28.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
 				"grunt-contrib-clean": "2.0.1",
 				"grunt-contrib-copy": "1.0.0",
 				"grunt-eslint": "24.3.0",
 				"grunt-exec": "3.0.0",
-				"grunt-stylelint": "0.20.0",
-				"stylelint-config-wikimedia": "0.17.1"
+				"grunt-stylelint": "0.20.1",
+				"stylelint-config-wikimedia": "0.17.2"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -1408,9 +1408,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"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==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -1423,7 +1423,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -1626,12 +1626,12 @@
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"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==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -2591,9 +2591,9 @@
 			}
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -4472,9 +4472,9 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"dependencies": {
 				"@stylistic/stylelint-config": "1.0.1",
@@ -6148,9 +6148,9 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"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==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -6163,7 +6163,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -6298,9 +6298,9 @@
 			}
 		},
 		"eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"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==",
 			"dev": true,
 			"requires": {}
 		},
@@ -7044,9 +7044,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -8439,9 +8439,9 @@
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"requires": {
 				"@stylistic/stylelint-config": "1.0.1",
diff --git a/package.json b/package.json
index 7004d88..36b59ed 100644
--- a/package.json
+++ b/package.json
@@ -8,14 +8,14 @@
 	},
 	"devDependencies": {
 		"ace-builds": "1.32.7",
-		"eslint-config-wikimedia": "0.28.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
 		"grunt-contrib-clean": "2.0.1",
 		"grunt-contrib-copy": "1.0.0",
 		"grunt-eslint": "24.3.0",
 		"grunt-exec": "3.0.0",
-		"grunt-stylelint": "0.20.0",
-		"stylelint-config-wikimedia": "0.17.1"
+		"grunt-stylelint": "0.20.1",
+		"stylelint-config-wikimedia": "0.17.2"
 	}
 }
-- 
2.39.2

$ date
--- stdout ---
Thu Jun 20 03:19:37 UTC 2024

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-CodeEditor.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 ---
7a396da3a1740fa68a60daa0fdabe94f658ad150 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": 429,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 429
    }
  }
}

--- 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: 38 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.1.4)
  - Locking composer/semver (3.4.0)
  - Locking composer/spdx-licenses (1.5.8)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
  - Locking doctrine/deprecations (1.1.3)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v43.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.14.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (6.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.4.1)
  - Locking phan/phan (5.4.3)
  - 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.1.2)
  - Locking phpcsstandards/phpcsutils (1.0.9)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.4.1)
  - Locking phpdocumentor/type-resolver (1.8.2)
  - Locking phpstan/phpdoc-parser (1.29.1)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.0)
  - Locking sabre/event (5.1.4)
  - Locking squizlabs/php_codesniffer (3.8.1)
  - Locking symfony/console (v7.1.1)
  - Locking symfony/deprecation-contracts (v3.5.0)
  - Locking symfony/polyfill-ctype (v1.30.0)
  - Locking symfony/polyfill-intl-grapheme (v1.30.0)
  - Locking symfony/polyfill-intl-normalizer (v1.30.0)
  - Locking symfony/polyfill-mbstring (v1.30.0)
  - Locking symfony/polyfill-php80 (v1.30.0)
  - Locking symfony/service-contracts (v3.5.0)
  - Locking symfony/string (v7.1.1)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.8.1): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing composer/pcre (3.1.4): Extracting archive
  - Installing symfony/polyfill-php80 (v1.30.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.9): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.1.2): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.30.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.8): Extracting archive
  - Installing composer/semver (3.4.0): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v43.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.30.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.30.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.30.0): Extracting archive
  - Installing symfony/string (v7.1.1): Extracting archive
  - Installing symfony/deprecation-contracts (v3.5.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.5.0): Extracting archive
  - Installing symfony/console (v7.1.1): Extracting archive
  - Installing sabre/event (5.1.4): Extracting archive
  - Installing netresearch/jsonmapper (v4.4.1): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (1.29.1): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.3): Extracting archive
  - Installing phpdocumentor/type-resolver (1.8.2): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.4.1): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.0): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.3): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.14.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): 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/36 [>---------------------------]   0%
 23/36 [=================>----------]  63%
 35/36 [===========================>]  97%
 36/36 [============================] 100%
Generating autoload files
15 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.0 -> 0.28.2
Upgrading n:grunt-stylelint from 0.20.0 -> 0.20.1
Upgrading n:stylelint-config-wikimedia from 0.17.1 -> 0.17.2
$ /usr/bin/npm install
--- stdout ---

added 429 packages, and audited 430 packages in 5s

90 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 430 packages in 871ms

90 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 . --fix
--- stdout ---

/src/repo/modules/jquery.codeEditor.js
   61:17  error  ES2015 'Object.assign' method is forbidden  es-x/no-object-assign
  102:16  error  ES2015 'Object.assign' method is forbidden  es-x/no-object-assign

✖ 2 problems (2 errors, 0 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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-len","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":"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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":"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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":"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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":"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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/modules/.eslintrc.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":"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/modules/ext.codeEditor.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":24,"column":20,"nodeType":"CallExpression","endLine":24,"endColumn":38,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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/modules/jquery.codeEditor.js","messages":[{"ruleId":"es-x/no-object-assign","severity":2,"message":"ES2015 'Object.assign' method is forbidden.","line":61,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":61,"endColumn":30},{"ruleId":"es-x/no-object-assign","severity":2,"message":"ES2015 'Object.assign' method is forbidden.","line":102,"column":16,"nodeType":"MemberExpression","messageId":"forbidden","endLine":102,"endColumn":29}],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":284,"column":5,"nodeType":"CallExpression","endLine":284,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":285,"column":5,"nodeType":"CallExpression","endLine":285,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":286,"column":5,"nodeType":"CallExpression","endLine":286,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-parse-html-literal","severity":2,"message":"Prefer DOM building to parsing HTML literals","line":345,"column":53,"nodeType":"CallExpression","endLine":345,"endColumn":210,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/variable-pattern","severity":2,"message":"jQuery collection names must match the variablePattern","line":395,"column":11,"nodeType":"VariableDeclarator","endLine":395,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":427,"column":6,"nodeType":"CallExpression","endLine":427,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":470,"column":5,"nodeType":"CallExpression","endLine":470,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":665,"column":37,"nodeType":"CallExpression","endLine":665,"endColumn":94,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":674,"column":5,"nodeType":"CallExpression","endLine":674,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-map-util","severity":2,"message":"Prefer Array#map to $.map","line":688,"column":4,"nodeType":"CallExpression","endLine":703,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* Ace syntax-highlighting code editor extension for wikiEditor */\n/* global ace */\n/* eslint-disable no-jquery/no-global-selector */\n( function () {\n\t$.wikiEditor.modules.codeEditor = {\n\t\t/**\n\t\t * Core Requirements\n\t\t */\n\t\treq: [ 'codeEditor' ],\n\t\t/**\n\t\t * Configuration\n\t\t */\n\t\tcfg: {\n\t\t\t//\n\t\t},\n\t\t/**\n\t\t * API accessible functions\n\t\t */\n\t\tapi: {\n\t\t\t//\n\t\t},\n\t\t/**\n\t\t * Event handlers\n\t\t */\n\t\tevt: {\n\t\t\t//\n\t\t},\n\t\t/**\n\t\t * Internally used functions\n\t\t */\n\t\tfn: {\n\t\t}\n\n\t};\n\n\t$.wikiEditor.extensions.codeEditor = function ( context ) {\n\t\tvar saveAndExtend,\n\t\t\ttextSelectionFn,\n\t\t\thasErrorsOnSave = false,\n\t\t\tselectedLine = 0,\n\t\t\treturnFalse = function () {\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tapi = new mw.Api();\n\n\t\t// Initialize state\n\t\tvar cookieEnabled = parseInt( mw.cookie.get( 'codeEditor-' + context.instance + '-showInvisibleChars' ), 10 );\n\t\tcontext.showInvisibleChars = ( cookieEnabled === 1 );\n\t\tcookieEnabled = parseInt( mw.cookie.get( 'codeEditor-' + context.instance + '-lineWrappingActive' ), 10 );\n\t\tcontext.lineWrappingActive = ( cookieEnabled === 1 );\n\n\t\t/*\n\t\t * Event Handlers\n\t\t *\n\t\t * WikiEditor inspects the 'evt' object for event names and uses them if present as additional\n\t\t * event handlers that fire before the default handling.\n\t\t * To prevent WikiEditor from running its own handling, handlers should return false.\n\t\t *\n\t\t * This is also where we can attach some extra information to the events.\n\t\t */\n\t\tcontext.evt = Object.assign( context.evt, {\n\t\t\tkeydown: returnFalse,\n\t\t\tchange: returnFalse,\n\t\t\tdelayedChange: returnFalse,\n\t\t\tcut: returnFalse,\n\t\t\tpaste: returnFalse,\n\t\t\tready: returnFalse,\n\t\t\tcodeEditorSubmit: function () {\n\t\t\t\tvar form = this;\n\t\t\t\tcontext.evt.codeEditorSync();\n\t\t\t\tif ( hasErrorsOnSave ) {\n\t\t\t\t\thasErrorsOnSave = false;\n\t\t\t\t\tOO.ui.confirm( mw.msg( 'codeeditor-save-with-errors' ) ).done( function ( confirmed ) {\n\t\t\t\t\t\tif ( confirmed ) {\n\t\t\t\t\t\t\t// Programmatic submit doesn't retrigger this event listener\n\t\t\t\t\t\t\tform.submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tcodeEditorSave: function () {\n\t\t\t\tif ( context.codeEditor.getSession().getAnnotations().some( function ( ann ) {\n\t\t\t\t\treturn ann.type === 'error';\n\t\t\t\t} ) ) {\n\t\t\t\t\thasErrorsOnSave = true;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcodeEditorSync: function () {\n\t\t\t\tcontext.$textarea.val( context.$textarea.textSelection( 'getContents' ) );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Make sure to cast '0' to false\n\t\tcontext.codeEditorActive = !!Number( mw.user.options.get( 'usecodeeditor' ) );\n\n\t\t/**\n\t\t * Internally used functions\n\t\t */\n\t\tcontext.fn = Object.assign( context.fn, {\n\t\t\tisCodeEditorActive: function () {\n\t\t\t\treturn context.codeEditorActive;\n\t\t\t},\n\t\t\tisShowInvisibleChars: function () {\n\t\t\t\treturn context.showInvisibleChars;\n\t\t\t},\n\t\t\tisLineWrappingActive: function () {\n\t\t\t\treturn context.lineWrappingActive;\n\t\t\t},\n\t\t\tchangeCookieValue: function ( cookieName, value ) {\n\t\t\t\tmw.cookie.set(\n\t\t\t\t\t'codeEditor-' + context.instance + '-' + cookieName,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t},\n\t\t\taceGotoLineColumn: function () {\n\t\t\t\tOO.ui.prompt( mw.msg( 'codeeditor-gotoline-prompt' ), {\n\t\t\t\t\ttextInput: { placeholder: mw.msg( 'codeeditor-gotoline-placeholder' ) }\n\t\t\t\t} ).done( function ( result ) {\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar matches = result.split( ':' );\n\t\t\t\t\tvar line = 0;\n\t\t\t\t\tvar column = 0;\n\n\t\t\t\t\tif ( matches.length > 0 ) {\n\t\t\t\t\t\tline = +matches[ 0 ];\n\t\t\t\t\t\tif ( isNaN( line ) ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Lines are zero-indexed\n\t\t\t\t\t\t\tline--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length > 1 ) {\n\t\t\t\t\t\tcolumn = +matches[ 1 ];\n\t\t\t\t\t\tif ( isNaN( column ) ) {\n\t\t\t\t\t\t\tcolumn = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontext.codeEditor.navigateTo( line, column );\n\t\t\t\t\t// Scroll up a bit to give some context\n\t\t\t\t\tcontext.codeEditor.scrollToRow( line - 4 );\n\t\t\t\t} );\n\t\t\t},\n\t\t\tsetupCodeEditorToolbar: function () {\n\t\t\t\tvar toggleEditor = function ( ctx ) {\n\t\t\t\t\tctx.codeEditorActive = !ctx.codeEditorActive;\n\n\t\t\t\t\tctx.fn.setCodeEditorPreference( ctx.codeEditorActive );\n\t\t\t\t\tctx.fn.updateCodeEditorToolbarButton();\n\n\t\t\t\t\tif ( ctx.codeEditorActive ) {\n\t\t\t\t\t\t// set it back up!\n\t\t\t\t\t\tctx.fn.setupCodeEditor();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.fn.disableCodeEditor();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tvar toggleInvisibleChars = function ( ctx ) {\n\t\t\t\t\tctx.showInvisibleChars = !ctx.showInvisibleChars;\n\n\t\t\t\t\tctx.fn.changeCookieValue( 'showInvisibleChars', ctx.showInvisibleChars ? 1 : 0 );\n\t\t\t\t\tctx.fn.updateInvisibleCharsButton();\n\n\t\t\t\t\tctx.codeEditor.setShowInvisibles( ctx.showInvisibleChars );\n\t\t\t\t};\n\t\t\t\tvar toggleSearchReplace = function ( ctx ) {\n\t\t\t\t\tvar searchBox = ctx.codeEditor.searchBox;\n\t\t\t\t\tif ( searchBox && $( searchBox.element ).css( 'display' ) !== 'none' ) {\n\t\t\t\t\t\tsearchBox.hide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.codeEditor.execCommand(\n\t\t\t\t\t\t\tctx.codeEditor.getReadOnly() ? 'find' : 'replace'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tvar toggleLineWrapping = function ( ctx ) {\n\t\t\t\t\tctx.lineWrappingActive = !ctx.lineWrappingActive;\n\n\t\t\t\t\tctx.fn.changeCookieValue( 'lineWrappingActive', ctx.lineWrappingActive ? 1 : 0 );\n\t\t\t\t\tctx.fn.updateLineWrappingButton();\n\n\t\t\t\t\tctx.codeEditor.getSession().setUseWrapMode( ctx.lineWrappingActive );\n\t\t\t\t};\n\t\t\t\tvar indent = function ( ctx ) {\n\t\t\t\t\tctx.codeEditor.execCommand( 'indent' );\n\t\t\t\t};\n\t\t\t\tvar outdent = function ( ctx ) {\n\t\t\t\t\tctx.codeEditor.execCommand( 'outdent' );\n\t\t\t\t};\n\t\t\t\tvar gotoLine = function ( ctx ) {\n\t\t\t\t\tctx.codeEditor.execCommand( 'gotolinecolumn' );\n\t\t\t\t};\n\n\t\t\t\tcontext.api.addToToolbar( context, {\n\t\t\t\t\tsection: 'main',\n\t\t\t\t\tgroups: {\n\t\t\t\t\t\t'codeeditor-main': {\n\t\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\t\tcodeEditor: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-toolbar-toggle' ),\n\t\t\t\t\t\t\t\t\ttype: 'toggle',\n\t\t\t\t\t\t\t\t\toouiIcon: 'markup',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: toggleEditor\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'codeeditor-format': {\n\t\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\t\tindent: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-indent' ),\n\t\t\t\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\t\t\t\toouiIcon: 'indent',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: indent\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toutdent: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-outdent' ),\n\t\t\t\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\t\t\t\toouiIcon: 'outdent',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: outdent\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'codeeditor-style': {\n\t\t\t\t\t\t\ttools: {\n\t\t\t\t\t\t\t\tinvisibleChars: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-invisibleChars-toggle' ),\n\t\t\t\t\t\t\t\t\ttype: 'toggle',\n\t\t\t\t\t\t\t\t\toouiIcon: 'pilcrow',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: toggleInvisibleChars\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tlineWrapping: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-lineWrapping-toggle' ),\n\t\t\t\t\t\t\t\t\ttype: 'toggle',\n\t\t\t\t\t\t\t\t\toouiIcon: 'wrapping',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: toggleLineWrapping\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tgotoLine: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-gotoline' ),\n\t\t\t\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\t\t\t\toouiIcon: 'gotoLine',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: gotoLine\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttoggleSearchReplace: {\n\t\t\t\t\t\t\t\t\tlabel: mw.msg( 'codeeditor-searchReplace-toggle' ),\n\t\t\t\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\t\t\t\toouiIcon: 'articleSearch',\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\ttype: 'callback',\n\t\t\t\t\t\t\t\t\t\texecute: toggleSearchReplace\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tcontext.fn.updateCodeEditorToolbarButton();\n\t\t\t\tcontext.fn.updateInvisibleCharsButton();\n\t\t\t\tcontext.fn.updateLineWrappingButton();\n\t\t\t\t$( '.group-codeeditor-style' ).prependTo( '.section-main' );\n\t\t\t\t$( '.group-codeeditor-format' ).prependTo( '.section-main' );\n\t\t\t\t$( '.group-codeeditor-main' ).prependTo( '.section-main' );\n\t\t\t},\n\t\t\tupdateButtonIcon: function ( targetName, iconFn ) {\n\t\t\t\tvar target = '.tool[rel=' + targetName + ']',\n\t\t\t\t\t$button = context.modules.toolbar.$toolbar.find( target );\n\n\t\t\t\t$button.data( 'setActive' )( iconFn() );\n\t\t\t},\n\t\t\tupdateCodeEditorToolbarButton: function () {\n\t\t\t\tcontext.fn.updateButtonIcon( 'codeEditor', context.fn.isCodeEditorActive );\n\t\t\t},\n\t\t\tupdateInvisibleCharsButton: function () {\n\t\t\t\tcontext.fn.updateButtonIcon( 'invisibleChars', context.fn.isShowInvisibleChars );\n\t\t\t},\n\t\t\tupdateLineWrappingButton: function () {\n\t\t\t\tcontext.fn.updateButtonIcon( 'lineWrapping', context.fn.isLineWrappingActive );\n\t\t\t},\n\t\t\tsetCodeEditorPreference: function ( prefValue ) {\n\t\t\t\t// Abort any previous request\n\t\t\t\tapi.abort();\n\n\t\t\t\tapi.saveOption( 'usecodeeditor', prefValue ? 1 : 0 )\n\t\t\t\t\t.fail( function ( code, result ) {\n\t\t\t\t\t\tif ( code === 'http' && result.textStatus === 'abort' ) {\n\t\t\t\t\t\t\t// Request was aborted. Ignore error\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( code === 'notloggedin' ) {\n\t\t\t\t\t\t\t// Expected for non-registered users\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar message = 'Failed to set code editor preference: ' + code;\n\t\t\t\t\t\tif ( result.error && result.error.info ) {\n\t\t\t\t\t\t\tmessage += '\\n' + result.error.info;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmw.log.warn( message );\n\t\t\t\t\t} );\n\t\t\t},\n\t\t\t/**\n\t\t\t * Sets up the iframe in place of the textarea to allow more advanced operations\n\t\t\t */\n\t\t\tsetupCodeEditor: function () {\n\t\t\t\tvar $box = context.$textarea;\n\t\t\t\tvar lang = mw.config.get( 'wgCodeEditorCurrentLanguage' );\n\t\t\t\tvar basePath = mw.config.get( 'wgExtensionAssetsPath', '' );\n\t\t\t\tif ( basePath.slice( 0, 2 ) === '//' ) {\n\t\t\t\t\t// ACE uses web workers, which have importScripts, which don't like relative links.\n\t\t\t\t\t// This is a problem only when the assets are on another server, so this rewrite should suffice\n\t\t\t\t\t// Protocol relative\n\t\t\t\t\tbasePath = window.location.protocol + basePath;\n\t\t\t\t}\n\t\t\t\tace.config.set( 'basePath', basePath + '/CodeEditor/modules/lib/ace' );\n\n\t\t\t\tif ( lang ) {\n\t\t\t\t\t// Ace doesn't like replacing a textarea directly.\n\t\t\t\t\t// We'll stub this out to sit on top of it...\n\t\t\t\t\t// line-height is needed to compensate for oddity in WikiEditor extension, which zeroes the line-height on a parent container\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-parse-html-literal\n\t\t\t\t\tvar container = context.$codeEditorContainer = $( '<div style=\"position: relative\"><div class=\"editor\" style=\"line-height: 1.5em; top: 0; left: 0; right: 0; bottom: 0; position: absolute;\"></div></div>' ).insertAfter( $box );\n\t\t\t\t\tvar editdiv = container.find( '.editor' );\n\n\t\t\t\t\t$box.css( 'display', 'none' );\n\t\t\t\t\tcontainer.height( $box.height() );\n\n\t\t\t\t\t// Non-lazy loaded dependencies: Enable code completion\n\t\t\t\t\tace.require( 'ace/ext/language_tools' );\n\n\t\t\t\t\t// Load the editor now\n\t\t\t\t\tcontext.codeEditor = ace.edit( editdiv[ 0 ] );\n\t\t\t\t\tcontext.codeEditor.getSession().setValue( $box.val() );\n\t\t\t\t\t$box.textSelection( 'register', textSelectionFn );\n\n\t\t\t\t\t// Disable some annoying keybindings\n\t\t\t\t\tcontext.codeEditor.commands.bindKeys( {\n\t\t\t\t\t\t'Ctrl-T': null,\n\t\t\t\t\t\t'Ctrl-L': null,\n\t\t\t\t\t\t'Command-L': null\n\t\t\t\t\t} );\n\n\t\t\t\t\tcontext.codeEditor.setReadOnly( $box.prop( 'readonly' ) );\n\t\t\t\t\tcontext.codeEditor.setShowInvisibles( context.showInvisibleChars );\n\n\t\t\t\t\t// The options to enable\n\t\t\t\t\tcontext.codeEditor.setOptions( {\n\t\t\t\t\t\tenableBasicAutocompletion: true,\n\t\t\t\t\t\tenableSnippets: true\n\t\t\t\t\t} );\n\n\t\t\t\t\tcontext.codeEditor.commands.addCommand( {\n\t\t\t\t\t\tname: 'gotolinecolumn',\n\t\t\t\t\t\tbindKey: { mac: 'Command-Shift-L', windows: 'Ctrl-Alt-L' },\n\t\t\t\t\t\texec: context.fn.aceGotoLineColumn,\n\t\t\t\t\t\treadOnly: true\n\t\t\t\t\t} );\n\n\t\t\t\t\t$box.closest( 'form' )\n\t\t\t\t\t\t.on( 'submit', context.evt.codeEditorSubmit )\n\t\t\t\t\t\t.find( '#wpSave' ).on( 'click', context.evt.codeEditorSave );\n\n\t\t\t\t\tvar session = context.codeEditor.getSession();\n\n\t\t\t\t\t// Use proper tabs\n\t\t\t\t\tsession.setUseSoftTabs( false );\n\t\t\t\t\tsession.setUseWrapMode( context.lineWrappingActive );\n\n\t\t\t\t\t// Configure any workers\n\t\t\t\t\tsession.on( 'changeMode', function ( e, session2 ) {\n\t\t\t\t\t\t// eslint-disable-next-line no-jquery/variable-pattern\n\t\t\t\t\t\tvar mode = session2.getMode().$id;\n\t\t\t\t\t\tif ( mode === 'ace/mode/javascript' ) {\n\t\t\t\t\t\t\tsession2.$worker.send( 'changeOptions', [ {\n\t\t\t\t\t\t\t\tmaxerr: 1000\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\tmw.hook( 'codeEditor.configure' ).fire( session );\n\n\t\t\t\t\t// Add an Ace change handler to pass changes to Edit Recovery.\n\t\t\t\t\tmw.hook( 'editRecovery.loadEnd' ).add( function ( data ) {\n\t\t\t\t\t\tsession.on( 'change', data.fieldChangeHandler );\n\t\t\t\t\t} );\n\n\t\t\t\t\tace.config.loadModule( 'ace/ext/modelist', function ( modelist ) {\n\t\t\t\t\t\tif ( !modelist || !modelist.modesByName[ lang ] ) {\n\t\t\t\t\t\t\tlang = 'text';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsession.setMode( 'ace/mode/' + lang );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Use jQuery UI resizable() so that users can make the box taller\n\n\t\t\t\t\tcontainer.resizable( {\n\t\t\t\t\t\thandles: 's',\n\t\t\t\t\t\tminHeight: $box.height(),\n\t\t\t\t\t\tresize: function () {\n\n\t\t\t\t\t\t\tcontext.codeEditor.resize();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\t$( '.wikiEditor-ui-toolbar' ).addClass( 'codeEditor-ui-toolbar' );\n\n\t\t\t\t\tif ( selectedLine > 0 ) {\n\t\t\t\t\t\t// Line numbers in CodeEditor are zero-based\n\t\t\t\t\t\tcontext.codeEditor.navigateTo( selectedLine - 1, 0 );\n\t\t\t\t\t\t// Scroll up a bit to give some context\n\t\t\t\t\t\tcontext.codeEditor.scrollToRow( selectedLine - 4 );\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.fn.setupStatusBar();\n\n\t\t\t\t\tdocument.body.classList.remove( 'codeeditor-loading' );\n\n\t\t\t\t\t// Let modules know we're ready to start working with the content\n\t\t\t\t\tcontext.fn.trigger( 'ready' );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Turn off the code editor view and return to the plain textarea.\n\t\t\t * May be needed by some folks with funky browsers, or just to compare.\n\t\t\t */\n\t\t\tdisableCodeEditor: function () {\n\t\t\t\t// Kills it!\n\t\t\t\tcontext.$textarea.closest( 'form' )\n\t\t\t\t\t.off( 'submit', context.evt.codeEditorSubmit )\n\t\t\t\t\t.find( '#wpSave' ).off( 'click', context.evt.codeEditorSave );\n\n\t\t\t\t// Save contents\n\t\t\t\tcontext.$textarea.textSelection( 'unregister' );\n\t\t\t\tcontext.$textarea.val( textSelectionFn.getContents() );\n\n\t\t\t\t// @todo fetch cursor, scroll position\n\n\t\t\t\t// Drop the fancy editor widget...\n\t\t\t\tcontext.fn.removeStatusBar();\n\t\t\t\tcontext.$codeEditorContainer.remove();\n\t\t\t\tcontext.$codeEditorContainer = undefined;\n\t\t\t\tcontext.codeEditor = undefined;\n\n\t\t\t\t// Restore textarea\n\t\t\t\tcontext.$textarea.show();\n\t\t\t\t// Restore toolbar\n\t\t\t\t$( '.wikiEditor-ui-toolbar' ).removeClass( 'codeEditor-ui-toolbar' );\n\n\t\t\t\t// @todo restore cursor, scroll position\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Start monitoring the fragment of the current window for hash change\n\t\t\t * events. If the hash is already set, handle it as a new event.\n\t\t\t */\n\t\t\tcodeEditorMonitorFragment: function () {\n\t\t\t\tfunction onHashChange() {\n\t\t\t\t\tvar regexp = /#mw-ce-l(\\d+)/;\n\t\t\t\t\tvar result = regexp.exec( window.location.hash );\n\n\t\t\t\t\tif ( result === null ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tselectedLine = parseInt( result[ 1 ], 10 );\n\t\t\t\t\tif ( context.codeEditor && selectedLine > 0 ) {\n\t\t\t\t\t\t// Line numbers in CodeEditor are zero-based\n\t\t\t\t\t\tcontext.codeEditor.navigateTo( selectedLine - 1, 0 );\n\t\t\t\t\t\t// Scroll up a bit to give some context\n\t\t\t\t\t\tcontext.codeEditor.scrollToRow( selectedLine - 4 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tonHashChange();\n\t\t\t\t$( window ).on( 'hashchange', onHashChange );\n\t\t\t},\n\t\t\t/**\n\t\t\t * This creates a Statusbar, that allows you to see a count of the\n\t\t\t * errors, warnings and the warning of the current line, as well as\n\t\t\t * the position of the cursor.\n\t\t\t */\n\t\t\tsetupStatusBar: function () {\n\t\t\t\tvar shouldUpdateAnnotations,\n\t\t\t\t\tshouldUpdateSelection,\n\t\t\t\t\tshouldUpdateLineInfo,\n\t\t\t\t\tnextAnnotation,\n\t\t\t\t\tdelayedUpdate,\n\t\t\t\t\teditor = context.codeEditor,\n\t\t\t\t\tlang = ace.require( 'ace/lib/lang' ),\n\t\t\t\t\t$errors = $( '<span>' ).addClass( 'codeEditor-status-worker-cell ace_gutter-cell ace_error' ).text( '0' ),\n\t\t\t\t\t$warnings = $( '<span>' ).addClass( 'codeEditor-status-worker-cell ace_gutter-cell ace_warning' ).text( '0' ),\n\t\t\t\t\t$infos = $( '<span>' ).addClass( 'codeEditor-status-worker-cell ace_gutter-cell ace_info' ).text( '0' ),\n\t\t\t\t\t$message = $( '<div>' ).addClass( 'codeEditor-status-message' ),\n\t\t\t\t\t$lineAndMode = $( '<div>' ).addClass( 'codeEditor-status-line' ),\n\t\t\t\t\t$workerStatus = $( '<div>' )\n\t\t\t\t\t\t.addClass( 'codeEditor-status-worker' )\n\t\t\t\t\t\t.attr( 'title', mw.msg( 'codeeditor-next-annotation' ) )\n\t\t\t\t\t\t.append( $errors )\n\t\t\t\t\t\t.append( $warnings )\n\t\t\t\t\t\t.append( $infos );\n\n\t\t\t\tcontext.$statusBar = $( '<div>' )\n\t\t\t\t\t.addClass( 'codeEditor-status' )\n\t\t\t\t\t.append( $workerStatus )\n\t\t\t\t\t.append( $message )\n\t\t\t\t\t.append( $lineAndMode );\n\n\t\t\t\t/* Help function to concatenate strings with different separators */\n\t\t\t\tfunction addToStatus( status, str, separator ) {\n\t\t\t\t\tif ( str ) {\n\t\t\t\t\t\tstatus.push( str, separator || '|' );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Update all the information in the status bar\n\t\t\t\t */\n\t\t\t\tfunction updateStatusBar() {\n\t\t\t\t\tvar errors = 0,\n\t\t\t\t\t\twarnings = 0,\n\t\t\t\t\t\tinfos = 0,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\tshortestDistance = Infinity,\n\t\t\t\t\t\tclosestAnnotation,\n\t\t\t\t\t\tcurrentLine = editor.selection.lead.row,\n\t\t\t\t\t\tannotations = editor.getSession().getAnnotations(),\n\t\t\t\t\t\tclosestType;\n\n\t\t\t\t\t// Reset the next annotation\n\t\t\t\t\tnextAnnotation = null;\n\n\t\t\t\t\tfor ( var i = 0; i < annotations.length; i++ ) {\n\t\t\t\t\t\tvar annotation = annotations[ i ];\n\t\t\t\t\t\tdistance = Math.abs( currentLine - annotation.row );\n\n\t\t\t\t\t\tif ( distance < shortestDistance ) {\n\t\t\t\t\t\t\tshortestDistance = distance;\n\t\t\t\t\t\t\tclosestAnnotation = annotation;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( nextAnnotation === null && annotation.row > currentLine ) {\n\t\t\t\t\t\t\tnextAnnotation = annotation;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( annotations[ i ].type ) {\n\t\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\t\terrors++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'warning':\n\t\t\t\t\t\t\t\twarnings++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'info':\n\t\t\t\t\t\t\t\tinfos++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Wrap around to the beginning for nextAnnotation\n\t\t\t\t\tif ( nextAnnotation === null && annotations.length > 0 ) {\n\t\t\t\t\t\tnextAnnotation = annotations[ 0 ];\n\t\t\t\t\t}\n\t\t\t\t\t// Update the annotation counts\n\t\t\t\t\tif ( shouldUpdateAnnotations ) {\n\t\t\t\t\t\t$errors.text( errors );\n\t\t\t\t\t\t$warnings.text( warnings );\n\t\t\t\t\t\t$infos.text( infos );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Show the message of the current line, if we have not already done so\n\t\t\t\t\tif ( closestAnnotation &&\n\t\t\t\t\t\t\tcurrentLine === closestAnnotation.row &&\n\t\t\t\t\t\t\tclosestAnnotation !== $message.data( 'annotation' ) ) {\n\t\t\t\t\t\t$message.data( 'annotation', closestAnnotation );\n\t\t\t\t\t\tclosestType =\n\t\t\t\t\t\t\tclosestAnnotation.type.charAt( 0 ).toUpperCase() +\n\t\t\t\t\t\t\tclosestAnnotation.type.slice( 1 );\n\n\t\t\t\t\t\t$message.text( closestType + ': ' + closestAnnotation.text );\n\t\t\t\t\t} else if ( $message.data( 'annotation' ) !== null &&\n\t\t\t\t\t\t\t( !closestAnnotation || currentLine !== closestAnnotation.row ) ) {\n\t\t\t\t\t\t// If we are on a different line without an annotation, then blank the message\n\t\t\t\t\t\t$message.data( 'annotation', null );\n\t\t\t\t\t\t$message.text( '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// The cursor position has changed\n\t\t\t\t\tif ( shouldUpdateSelection || shouldUpdateLineInfo ) {\n\t\t\t\t\t\t// Adapted from Ajax.org's ace/ext/statusbar module\n\t\t\t\t\t\tvar status = [];\n\n\t\t\t\t\t\tif ( editor.$vimModeHandler ) {\n\t\t\t\t\t\t\taddToStatus( status, editor.$vimModeHandler.getStatusText() );\n\t\t\t\t\t\t} else if ( editor.commands.recording ) {\n\t\t\t\t\t\t\taddToStatus( status, 'REC' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar c = editor.selection.lead;\n\t\t\t\t\t\taddToStatus( status, ( c.row + 1 ) + ':' + c.column, '' );\n\t\t\t\t\t\tif ( !editor.selection.isEmpty() ) {\n\t\t\t\t\t\t\tvar r = editor.getSelectionRange();\n\t\t\t\t\t\t\taddToStatus( status, '(' + ( r.end.row - r.start.row ) + ':' + ( r.end.column - r.start.column ) + ')' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstatus.pop();\n\t\t\t\t\t\t$lineAndMode.text( status.join( '' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tshouldUpdateLineInfo = shouldUpdateSelection = shouldUpdateAnnotations = false;\n\t\t\t\t}\n\n\t\t\t\t// Function to delay/debounce updates for the StatusBar\n\t\t\t\tdelayedUpdate = lang.delayedCall( function () {\n\t\t\t\t\tupdateStatusBar( editor );\n\t\t\t\t} );\n\n\t\t\t\t/**\n\t\t\t\t * Click handler that allows you to skip to the next annotation\n\t\t\t\t */\n\t\t\t\t$workerStatus.on( 'click', function ( e ) {\n\t\t\t\t\tif ( nextAnnotation ) {\n\t\t\t\t\t\tcontext.codeEditor.navigateTo( nextAnnotation.row, nextAnnotation.column );\n\t\t\t\t\t\t// Scroll up a bit to give some context\n\t\t\t\t\t\tcontext.codeEditor.scrollToRow( nextAnnotation.row - 3 );\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\teditor.getSession().on( 'changeAnnotation', function () {\n\t\t\t\t\tshouldUpdateAnnotations = true;\n\t\t\t\t\tdelayedUpdate.schedule( 100 );\n\t\t\t\t} );\n\t\t\t\teditor.on( 'changeStatus', function () {\n\t\t\t\t\tshouldUpdateLineInfo = true;\n\t\t\t\t\tdelayedUpdate.schedule( 100 );\n\t\t\t\t} );\n\t\t\t\teditor.on( 'changeSelection', function () {\n\t\t\t\t\tshouldUpdateSelection = true;\n\t\t\t\t\tdelayedUpdate.schedule( 100 );\n\t\t\t\t} );\n\n\t\t\t\t// Force update\n\t\t\t\tshouldUpdateLineInfo = shouldUpdateSelection = shouldUpdateAnnotations = true;\n\t\t\t\tupdateStatusBar( editor );\n\n\t\t\t\tcontext.$statusBar.insertAfter( $( '.wikiEditor-ui-view-wikitext .wikiEditor-ui-bottom' ) );\n\t\t\t},\n\t\t\tremoveStatusBar: function () {\n\t\t\t\tcontext.codeEditor.getSession().removeListener( 'changeAnnotation' );\n\t\t\t\tcontext.codeEditor.removeListener( 'changeSelection' );\n\t\t\t\tcontext.codeEditor.removeListener( 'changeStatus' );\n\t\t\t\tcontext.nextAnnotation = null;\n\t\t\t\tcontext.$statusBar = null;\n\n\t\t\t\t$( '.codeEditor-status' ).remove();\n\t\t\t}\n\n\t\t} );\n\n\t\t/**\n\t\t * Override the base functions in a way that lets\n\t\t * us fall back to the originals when we turn off.\n\t\t *\n\t\t * @param {Object} base\n\t\t * @param {Object} extended\n\t\t */\n\t\tsaveAndExtend = function ( base, extended ) {\n\t\t\t// eslint-disable-next-line no-jquery/no-map-util\n\t\t\t$.map( extended, function ( func, name ) {\n\t\t\t\tif ( name in base ) {\n\t\t\t\t\tvar orig = base[ name ];\n\t\t\t\t\tbase[ name ] = function () {\n\t\t\t\t\t\tif ( context.codeEditorActive ) {\n\t\t\t\t\t\t\treturn func.apply( this, arguments );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( orig ) {\n\t\t\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new Error( 'CodeEditor: no original function to call for ' + name );\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tbase[ name ] = func;\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\tsaveAndExtend( context.fn, {\n\t\t\tsaveSelection: function () {\n\t\t\t\tmw.log( 'codeEditor stub function saveSelection called' );\n\t\t\t},\n\t\t\trestoreSelection: function () {\n\t\t\t\tmw.log( 'codeEditor stub function restoreSelection called' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Scroll an element to the top of the iframe\n\t\t\t */\n\t\t\tscrollToTop: function () {\n\t\t\t\tmw.log( 'codeEditor stub function scrollToTop called' );\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * Compatibility with the $.textSelection jQuery plug-in. When the iframe is in use, these functions provide\n\t\t * equivalant functionality to the otherwise textarea-based functionality.\n\t\t */\n\t\ttextSelectionFn = {\n\n\t\t\t/* Needed for search/replace */\n\t\t\tgetContents: function () {\n\t\t\t\treturn context.codeEditor.getSession().getValue();\n\t\t\t},\n\n\t\t\tsetContents: function ( newContents ) {\n\t\t\t\tcontext.codeEditor.getSession().setValue( newContents );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the currently selected text in the content\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @return {string}\n\t\t\t */\n\t\t\tgetSelection: function () {\n\t\t\t\treturn context.codeEditor.getCopyText();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Replace the current selection with the given text.\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @param {string} text\n\t\t\t */\n\t\t\treplaceSelection: function ( text ) {\n\t\t\t\tcontext.codeEditor.insert( text );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts text at the begining and end of a text selection, optionally inserting text at the caret when\n\t\t\t * selection is empty.\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @param {Object} options\n\t\t\t * @return {jQuery}\n\t\t\t */\n\t\t\tencapsulateSelection: function ( options ) {\n\t\t\t\t// Does not yet handle 'ownline', 'splitlines' option\n\t\t\t\tvar sel = context.codeEditor.getSelection();\n\t\t\t\tvar range = sel.getRange();\n\t\t\t\tvar selText = textSelectionFn.getSelection();\n\t\t\t\tvar isSample = false;\n\n\t\t\t\tif ( !selText ) {\n\t\t\t\t\tselText = options.peri;\n\t\t\t\t\tisSample = true;\n\t\t\t\t} else if ( options.replace ) {\n\t\t\t\t\tselText = options.peri;\n\t\t\t\t}\n\n\t\t\t\tvar text = options.pre;\n\t\t\t\ttext += selText;\n\t\t\t\ttext += options.post;\n\t\t\t\tcontext.codeEditor.insert( text );\n\t\t\t\tif ( isSample && options.selectPeri && !options.splitlines ) {\n\t\t\t\t\t// May esplode if anything has newlines, be warned. :)\n\t\t\t\t\trange.setStart( range.start.row, range.start.column + options.pre.length );\n\t\t\t\t\trange.setEnd( range.start.row, range.start.column + selText.length );\n\t\t\t\t\tsel.setSelectionRange( range );\n\t\t\t\t}\n\t\t\t\treturn context.$textarea;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the position (in resolution of bytes not nessecarily characters) in a textarea\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @param {Object} options\n\t\t\t * @param {Object} [options.startAndEnd=false] Return range of the selection rather than just start\n\t\t\t * @return {number|number[]} If options.startAndEnd is true, returns an array holding the start and\n\t\t\t * end of the selection, else returns only the start of the selection as a single number.\n\t\t\t */\n\t\t\tgetCaretPosition: function ( options ) {\n\t\t\t\tvar selection = context.codeEditor.getSelection(),\n\t\t\t\t\trange = selection.getRange(),\n\t\t\t\t\tdoc = context.codeEditor.getSession().getDocument(),\n\t\t\t\t\tstartOffset = doc.positionToIndex( range.start );\n\n\t\t\t\tif ( options.startAndEnd ) {\n\t\t\t\t\tvar endOffset = doc.positionToIndex( range.end );\n\t\t\t\t\treturn [ startOffset, endOffset ];\n\t\t\t\t}\n\n\t\t\t\treturn startOffset;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the selection of the content\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @param {Object} options\n\t\t\t * @return {jQuery}\n\t\t\t */\n\t\t\tsetSelection: function ( options ) {\n\t\t\t\t// Ace stores positions for ranges as row/column pairs.\n\t\t\t\t// To convert from character offsets, we'll need to iterate through the document\n\t\t\t\tvar doc = context.codeEditor.getSession().getDocument();\n\t\t\t\tvar lines = doc.getAllLines();\n\n\t\t\t\tvar offsetToPos = function ( offset ) {\n\t\t\t\t\tvar row, col, pos;\n\n\t\t\t\t\trow = 0;\n\t\t\t\t\tcol = 0;\n\t\t\t\t\tpos = 0;\n\n\t\t\t\t\twhile ( row < lines.length && pos + lines[ row ].length < offset ) {\n\t\t\t\t\t\tpos += lines[ row ].length;\n\t\t\t\t\t\tpos++; // for the newline\n\t\t\t\t\t\trow++;\n\t\t\t\t\t}\n\t\t\t\t\tcol = offset - pos;\n\t\t\t\t\treturn { row: row, column: col };\n\t\t\t\t};\n\t\t\t\tvar start = offsetToPos( options.start );\n\t\t\t\tvar end = offsetToPos( options.end );\n\n\t\t\t\tvar sel = context.codeEditor.getSelection();\n\t\t\t\tvar range = sel.getRange();\n\t\t\t\trange.setStart( start.row, start.column );\n\t\t\t\trange.setEnd( end.row, end.column );\n\t\t\t\tsel.setSelectionRange( range );\n\t\t\t\treturn context.$textarea;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Scroll a textarea to the current cursor position. You can set the cursor position with setSelection()\n\t\t\t * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead\n\t\t\t *\n\t\t\t * @return {jQuery}\n\t\t\t */\n\t\t\tscrollToCaretPosition: function () {\n\t\t\t\tmw.log( 'codeEditor stub function scrollToCaretPosition called' );\n\t\t\t\treturn context.$textarea;\n\t\t\t}\n\t\t};\n\n\t\t/* Setup the editor */\n\t\tcontext.fn.setupCodeEditorToolbar();\n\t\tif ( context.codeEditorActive ) {\n\t\t\tcontext.fn.setupCodeEditor();\n\t\t}\n\n\t};\n}() );\n","usedDeprecatedRules":[{"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/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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":"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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/tests/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"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":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","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":[]}]}]

--- end ---
$ ./node_modules/.bin/grunt stylelint
--- stdout ---
Running "stylelint:all" (stylelint) task
>> Linted 2 files without errors

Done.

--- end ---
$ /usr/bin/npm ci
--- stdout ---

added 429 packages, and audited 430 packages in 6s

90 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stdout ---

> codeeditor@0.0.0 test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/modules/jquery.codeEditor.js
   61:17  warning  ES2015 'Object.assign' method is forbidden  es-x/no-object-assign
  102:16  warning  ES2015 'Object.assign' method is forbidden  es-x/no-object-assign

✖ 2 problems (0 errors, 2 warnings)


Running "stylelint:all" (stylelint) task
>> Linted 2 files without errors

Running "banana:all" (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": 429,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 429
    }
  }
}

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
build: Updating npm dependencies

* eslint-config-wikimedia: 0.28.0 → 0.28.2
  The following rules are failing and were disabled:
  * modules:
    * es-x/no-object-assign

* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpha3hmbsg
--- stdout ---
[master d92f710] build: Updating npm dependencies
 4 files changed, 37 insertions(+), 36 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From d92f710d3aa66244d806c81fdeffe08297b60d3d Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Thu, 20 Jun 2024 03:20:15 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* eslint-config-wikimedia: 0.28.0 → 0.28.2
  The following rules are failing and were disabled:
  * modules:
    * es-x/no-object-assign

* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

Change-Id: Ic603e46d510db344805408a972355249455a177e
---
 modules/.eslintrc.json       |  3 +-
 modules/jquery.codeEditor.js |  4 +--
 package-lock.json            | 60 ++++++++++++++++++------------------
 package.json                 |  6 ++--
 4 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/modules/.eslintrc.json b/modules/.eslintrc.json
index 67326f6..60d8f2d 100644
--- a/modules/.eslintrc.json
+++ b/modules/.eslintrc.json
@@ -7,6 +7,7 @@
 	],
 	"rules": {
 		"max-len": "off",
-		"no-jquery/no-extend": "warn"
+		"no-jquery/no-extend": "warn",
+		"es-x/no-object-assign": "warn"
 	}
 }
diff --git a/modules/jquery.codeEditor.js b/modules/jquery.codeEditor.js
index 7d799c2..753cc5b 100644
--- a/modules/jquery.codeEditor.js
+++ b/modules/jquery.codeEditor.js
@@ -58,7 +58,7 @@
 		 *
 		 * This is also where we can attach some extra information to the events.
 		 */
-		context.evt = $.extend( context.evt, {
+		context.evt = Object.assign( context.evt, {
 			keydown: returnFalse,
 			change: returnFalse,
 			delayedChange: returnFalse,
@@ -99,7 +99,7 @@
 		/**
 		 * Internally used functions
 		 */
-		context.fn = $.extend( context.fn, {
+		context.fn = Object.assign( context.fn, {
 			isCodeEditorActive: function () {
 				return context.codeEditorActive;
 			},
diff --git a/package-lock.json b/package-lock.json
index a23587f..c42a5dd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,15 +9,15 @@
 			"version": "0.0.0",
 			"devDependencies": {
 				"ace-builds": "1.32.7",
-				"eslint-config-wikimedia": "0.28.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
 				"grunt-contrib-clean": "2.0.1",
 				"grunt-contrib-copy": "1.0.0",
 				"grunt-eslint": "24.3.0",
 				"grunt-exec": "3.0.0",
-				"grunt-stylelint": "0.20.0",
-				"stylelint-config-wikimedia": "0.17.1"
+				"grunt-stylelint": "0.20.1",
+				"stylelint-config-wikimedia": "0.17.2"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -1408,9 +1408,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"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==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -1423,7 +1423,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -1626,12 +1626,12 @@
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"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==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -2591,9 +2591,9 @@
 			}
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -4472,9 +4472,9 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"dependencies": {
 				"@stylistic/stylelint-config": "1.0.1",
@@ -6148,9 +6148,9 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"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==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -6163,7 +6163,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -6298,9 +6298,9 @@
 			}
 		},
 		"eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"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==",
 			"dev": true,
 			"requires": {}
 		},
@@ -7044,9 +7044,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -8439,9 +8439,9 @@
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"requires": {
 				"@stylistic/stylelint-config": "1.0.1",
diff --git a/package.json b/package.json
index 7004d88..36b59ed 100644
--- a/package.json
+++ b/package.json
@@ -8,14 +8,14 @@
 	},
 	"devDependencies": {
 		"ace-builds": "1.32.7",
-		"eslint-config-wikimedia": "0.28.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
 		"grunt-contrib-clean": "2.0.1",
 		"grunt-contrib-copy": "1.0.0",
 		"grunt-eslint": "24.3.0",
 		"grunt-exec": "3.0.0",
-		"grunt-stylelint": "0.20.0",
-		"stylelint-config-wikimedia": "0.17.1"
+		"grunt-stylelint": "0.20.1",
+		"stylelint-config-wikimedia": "0.17.2"
 	}
 }
-- 
2.39.2


--- end ---
Source code is licensed under the AGPL.