mediawiki/extensions/PageForms (main)

sourcepatches
From d81e5cf4e9eca012ae1d70027b117dcfb9eb8413 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 26 Jul 2024 02:50:15 +0000
Subject: [PATCH] build: Updating dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

composer:
* mediawiki/minus-x: 1.1.1 → 1.1.3
* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.27.0 → 0.28.2
* grunt-banana-checker: 0.11.1 → 0.13.0
* braces: 3.0.2 → 3.0.3
  * https://github.com/advisories/GHSA-grv7-fg5c-xmjg

Change-Id: I05c69c4538887ce1b97df3724fa68d1316d10fa6
---
 composer.json     |    4 +-
 package-lock.json | 1114 ++++++++++++++++++++++++++-------------------
 package.json      |    4 +-
 3 files changed, 661 insertions(+), 461 deletions(-)

diff --git a/composer.json b/composer.json
index 74624dc..62f9989 100644
--- a/composer.json
+++ b/composer.json
@@ -35,8 +35,8 @@
 	},
 	"require-dev": {
 		"mediawiki/mediawiki-codesniffer": "43.0.0",
-		"mediawiki/mediawiki-phan-config": "0.12.1",
-		"mediawiki/minus-x": "1.1.1",
+		"mediawiki/mediawiki-phan-config": "0.14.0",
+		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
 	},
diff --git a/package-lock.json b/package-lock.json
index d18d97c..4c57976 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,9 +6,9 @@
 		"": {
 			"name": "PageForms",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.27.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
-				"grunt-banana-checker": "0.11.1",
+				"grunt-banana-checker": "0.13.0",
 				"grunt-eslint": "24.3.0"
 			}
 		},
@@ -22,12 +22,12 @@
 			}
 		},
 		"node_modules/@babel/code-frame": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+			"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/highlight": "^7.24.2",
+				"@babel/highlight": "^7.24.7",
 				"picocolors": "^1.0.0"
 			},
 			"engines": {
@@ -35,21 +35,21 @@
 			}
 		},
 		"node_modules/@babel/helper-validator-identifier": {
-			"version": "7.22.20",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-			"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+			"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
 			"dev": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/highlight": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+			"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.7",
 				"chalk": "^2.4.2",
 				"js-tokens": "^4.0.0",
 				"picocolors": "^1.0.0"
@@ -82,11 +82,14 @@
 			}
 		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.42.0",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
-			"integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+			"version": "0.43.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz",
+			"integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==",
 			"dev": true,
 			"dependencies": {
+				"@types/eslint": "^8.56.5",
+				"@types/estree": "^1.0.5",
+				"@typescript-eslint/types": "^7.2.0",
 				"comment-parser": "1.4.1",
 				"esquery": "^1.5.0",
 				"jsdoc-type-pratt-parser": "~4.0.0"
@@ -111,9 +114,9 @@
 			}
 		},
 		"node_modules/@eslint-community/regexpp": {
-			"version": "4.10.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+			"version": "4.11.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+			"integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
 			"dev": true,
 			"engines": {
 				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -255,6 +258,22 @@
 				"node": ">= 8"
 			}
 		},
+		"node_modules/@types/eslint": {
+			"version": "8.56.11",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
+			"integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
+			"dev": true,
+			"dependencies": {
+				"@types/estree": "*",
+				"@types/json-schema": "*"
+			}
+		},
+		"node_modules/@types/estree": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+			"dev": true
+		},
 		"node_modules/@types/json-schema": {
 			"version": "7.0.15",
 			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -267,23 +286,17 @@
 			"integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
 			"dev": true
 		},
-		"node_modules/@types/semver": {
-			"version": "7.5.8",
-			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
-			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
-			"dev": true
-		},
 		"node_modules/@typescript-eslint/scope-manager": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz",
+			"integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0"
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -291,12 +304,12 @@
 			}
 		},
 		"node_modules/@typescript-eslint/types": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz",
+			"integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==",
 			"dev": true,
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -304,21 +317,22 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz",
+			"integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0",
 				"debug": "^4.3.4",
 				"globby": "^11.1.0",
 				"is-glob": "^4.0.3",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
+				"minimatch": "^9.0.4",
+				"semver": "^7.6.0",
+				"ts-api-utils": "^1.3.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -330,65 +344,63 @@
 				}
 			}
 		},
-		"node_modules/@typescript-eslint/utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+		"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+			"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/eslint-utils": "^4.2.0",
-				"@types/json-schema": "^7.0.9",
-				"@types/semver": "^7.3.12",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"eslint-scope": "^5.1.1",
-				"semver": "^7.3.7"
-			},
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/typescript-eslint"
-			},
-			"peerDependencies": {
-				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+				"balanced-match": "^1.0.0"
 			}
 		},
-		"node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+		"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 			"dev": true,
 			"dependencies": {
-				"esrecurse": "^4.3.0",
-				"estraverse": "^4.1.1"
+				"brace-expansion": "^2.0.1"
 			},
 			"engines": {
-				"node": ">=8.0.0"
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
-		"node_modules/@typescript-eslint/utils/node_modules/estraverse": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+		"node_modules/@typescript-eslint/utils": {
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz",
+			"integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==",
 			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@typescript-eslint/scope-manager": "7.17.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/typescript-estree": "7.17.0"
+			},
 			"engines": {
-				"node": ">=4.0"
+				"node": "^18.18.0 || >=20.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.56.0"
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz",
+			"integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"eslint-visitor-keys": "^3.3.0"
+				"@typescript-eslint/types": "7.17.0",
+				"eslint-visitor-keys": "^3.4.3"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -408,9 +420,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.11.3",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+			"version": "8.12.1",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+			"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -554,12 +566,12 @@
 			}
 		},
 		"node_modules/braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"dev": true,
 			"dependencies": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			},
 			"engines": {
 				"node": ">=8"
@@ -598,9 +610,9 @@
 			}
 		},
 		"node_modules/browserslist-config-wikimedia": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.6.1.tgz",
-			"integrity": "sha512-F3O+12ud7ZwBaiB/RZIMGDgz3nEuXz8RhtdPB4Lkd/WVP5Vy77EqBWRMz4vJ64x8LTTH3BOaHCD2ZuUcgShqyQ==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
+			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
 			"dev": true
 		},
 		"node_modules/builtin-modules": {
@@ -615,15 +627,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/builtins": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
-			"integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
-			"dev": true,
-			"dependencies": {
-				"semver": "^7.0.0"
-			}
-		},
 		"node_modules/callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -796,9 +799,9 @@
 			"dev": true
 		},
 		"node_modules/core-js-compat": {
-			"version": "3.37.0",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
-			"integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+			"version": "3.37.1",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+			"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
 			"dev": true,
 			"dependencies": {
 				"browserslist": "^4.23.0"
@@ -905,6 +908,19 @@
 			"integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==",
 			"dev": true
 		},
+		"node_modules/enhanced-resolve": {
+			"version": "5.17.1",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+			"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+			"dev": true,
+			"dependencies": {
+				"graceful-fs": "^4.2.4",
+				"tapable": "^2.2.0"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
 		"node_modules/error-ex": {
 			"version": "1.3.2",
 			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -991,9 +1007,9 @@
 			}
 		},
 		"node_modules/eslint-compat-utils": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz",
-			"integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+			"integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
 			"dev": true,
 			"dependencies": {
 				"semver": "^7.5.4"
@@ -1006,28 +1022,28 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.27.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.27.0.tgz",
-			"integrity": "sha512-KkZ54+MUnggz17C/RCEMXQSpiiqZRF7p9fjrz4phaaeKlTrjg0B+QbM5zcDWcjGiAWaJUptHaH17+RZldadkUw==",
+			"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.6.1",
+				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
 				"eslint-plugin-es-x": "^7.6.0",
-				"eslint-plugin-jest": "^27.9.0",
-				"eslint-plugin-jsdoc": "48.2.1",
-				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.6.0",
-				"eslint-plugin-mocha": "^10.4.1",
-				"eslint-plugin-n": "^16.6.2",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-jest": "^28.5.0",
+				"eslint-plugin-jsdoc": "48.2.5",
+				"eslint-plugin-json-es": "^1.6.0",
+				"eslint-plugin-mediawiki": "^0.7.0",
+				"eslint-plugin-mocha": "^10.4.3",
+				"eslint-plugin-n": "^17.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^51.0.1",
-				"eslint-plugin-vue": "^9.23.0",
+				"eslint-plugin-unicorn": "^53.0.0",
+				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
-				"eslint-plugin-yml": "^1.13.2"
+				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
 		"node_modules/eslint-plugin-compat": {
@@ -1052,39 +1068,40 @@
 			}
 		},
 		"node_modules/eslint-plugin-es-x": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz",
-			"integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==",
+			"version": "7.8.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+			"integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
 			"dev": true,
+			"funding": [
+				"https://github.com/sponsors/ota-meshi",
+				"https://opencollective.com/eslint"
+			],
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.1.2",
-				"@eslint-community/regexpp": "^4.6.0",
-				"eslint-compat-utils": "^0.5.0"
+				"@eslint-community/regexpp": "^4.11.0",
+				"eslint-compat-utils": "^0.5.1"
 			},
 			"engines": {
 				"node": "^14.18.0 || >=16.0.0"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/ota-meshi"
-			},
 			"peerDependencies": {
 				"eslint": ">=8"
 			}
 		},
 		"node_modules/eslint-plugin-jest": {
-			"version": "27.9.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
-			"integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+			"version": "28.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz",
+			"integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/utils": "^5.10.0"
+				"@typescript-eslint/utils": "^6.0.0 || ^7.0.0"
 			},
 			"engines": {
-				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+				"node": "^16.10.0 || ^18.12.0 || >=20.0.0"
 			},
 			"peerDependencies": {
-				"@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
-				"eslint": "^7.0.0 || ^8.0.0",
+				"@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0",
+				"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0",
 				"jest": "*"
 			},
 			"peerDependenciesMeta": {
@@ -1097,19 +1114,19 @@
 			}
 		},
 		"node_modules/eslint-plugin-jsdoc": {
-			"version": "48.2.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz",
-			"integrity": "sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==",
+			"version": "48.2.5",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz",
+			"integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.42.0",
+				"@es-joy/jsdoccomment": "~0.43.0",
 				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.4.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.5.0",
 				"is-builtin-module": "^3.2.1",
-				"semver": "^7.6.0",
+				"semver": "^7.6.1",
 				"spdx-expression-parse": "^4.0.0"
 			},
 			"engines": {
@@ -1120,9 +1137,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-json-es": {
-			"version": "1.5.7",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
-			"integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==",
+			"version": "1.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz",
+			"integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.3.0",
@@ -1133,9 +1150,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-mediawiki": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.6.0.tgz",
-			"integrity": "sha512-a2Zm18N5nPyflBajM2ZWATxucIpYPEmOSjFzUR1OBH3hAL0GY9fx1mpezEwzqAQ862d+kPkolgQOzktnZe8nKA==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz",
+			"integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-plugin-vue": "^9.23.0",
@@ -1163,52 +1180,73 @@
 			}
 		},
 		"node_modules/eslint-plugin-n": {
-			"version": "16.6.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
-			"integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+			"version": "17.10.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.0.tgz",
+			"integrity": "sha512-NmrSdEid+ch9SBVuqbsK5CUiEZGtMK32KSI+arWahZbFF0nvX1oEJrWiFOWmhkWFKW9Hqor0g3qPh4AvkvWwlA==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"builtins": "^5.0.1",
+				"enhanced-resolve": "^5.17.0",
 				"eslint-plugin-es-x": "^7.5.0",
 				"get-tsconfig": "^4.7.0",
-				"globals": "^13.24.0",
+				"globals": "^15.8.0",
 				"ignore": "^5.2.4",
-				"is-builtin-module": "^3.2.1",
-				"is-core-module": "^2.12.1",
-				"minimatch": "^3.1.2",
-				"resolve": "^1.22.2",
+				"minimatch": "^9.0.5",
 				"semver": "^7.5.3"
 			},
 			"engines": {
-				"node": ">=16.0.0"
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 			},
 			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
+				"url": "https://opencollective.com/eslint"
 			},
 			"peerDependencies": {
-				"eslint": ">=7.0.0"
+				"eslint": ">=8.23.0"
+			}
+		},
+		"node_modules/eslint-plugin-n/node_modules/brace-expansion": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+			"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+			"dev": true,
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/eslint-plugin-n/node_modules/globals": {
+			"version": "15.8.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz",
+			"integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
 		"node_modules/eslint-plugin-n/node_modules/minimatch": {
-			"version": "3.1.2",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 			"dev": true,
 			"dependencies": {
-				"brace-expansion": "^1.1.7"
+				"brace-expansion": "^2.0.1"
 			},
 			"engines": {
-				"node": "*"
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
 		"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.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -1234,17 +1272,17 @@
 			}
 		},
 		"node_modules/eslint-plugin-unicorn": {
-			"version": "51.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
-			"integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
+			"version": "53.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
+			"integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.5",
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/eslintrc": "^3.0.2",
 				"ci-info": "^4.0.0",
 				"clean-regexp": "^1.0.0",
-				"core-js-compat": "^3.34.0",
+				"core-js-compat": "^3.37.0",
 				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
 				"is-builtin-module": "^3.2.1",
@@ -1253,11 +1291,11 @@
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.27",
 				"regjsparser": "^0.10.0",
-				"semver": "^7.5.4",
+				"semver": "^7.6.1",
 				"strip-indent": "^3.0.0"
 			},
 			"engines": {
-				"node": ">=16"
+				"node": ">=18.18"
 			},
 			"funding": {
 				"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
@@ -1266,10 +1304,104 @@
 				"eslint": ">=8.56.0"
 			}
 		},
+		"node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+			"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+			"dev": true,
+			"dependencies": {
+				"ajv": "^6.12.4",
+				"debug": "^4.3.2",
+				"espree": "^10.0.1",
+				"globals": "^14.0.0",
+				"ignore": "^5.2.0",
+				"import-fresh": "^3.2.1",
+				"js-yaml": "^4.1.0",
+				"minimatch": "^3.1.2",
+				"strip-json-comments": "^3.1.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/argparse": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+			"dev": true
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+			"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/espree": {
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+			"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+			"dev": true,
+			"dependencies": {
+				"acorn": "^8.12.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^4.0.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/globals": {
+			"version": "14.0.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+			"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/js-yaml": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+			"dev": true,
+			"dependencies": {
+				"argparse": "^2.0.1"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/minimatch": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
 		"node_modules/eslint-plugin-vue": {
-			"version": "9.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz",
-			"integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==",
+			"version": "9.27.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
+			"integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.4.0",
@@ -1278,7 +1410,7 @@
 				"nth-check": "^2.1.1",
 				"postcss-selector-parser": "^6.0.15",
 				"semver": "^7.6.0",
-				"vue-eslint-parser": "^9.4.2",
+				"vue-eslint-parser": "^9.4.3",
 				"xml-name-validator": "^4.0.0"
 			},
 			"engines": {
@@ -1577,9 +1709,9 @@
 			}
 		},
 		"node_modules/fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"dev": true,
 			"dependencies": {
 				"to-regex-range": "^5.0.1"
@@ -1700,9 +1832,9 @@
 			}
 		},
 		"node_modules/get-tsconfig": {
-			"version": "4.7.3",
-			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-			"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+			"version": "4.7.6",
+			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+			"integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
 			"dev": true,
 			"dependencies": {
 				"resolve-pkg-maps": "^1.0.0"
@@ -1826,6 +1958,12 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/graceful-fs": {
+			"version": "4.2.11",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+			"dev": true
+		},
 		"node_modules/graphemer": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -1860,15 +1998,18 @@
 			}
 		},
 		"node_modules/grunt-banana-checker": {
-			"version": "0.11.1",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz",
-			"integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==",
+			"version": "0.13.0",
+			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz",
+			"integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==",
 			"dev": true,
+			"dependencies": {
+				"chalk": "4.1.2"
+			},
 			"bin": {
 				"banana-checker": "src/cli.js"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=16"
 			}
 		},
 		"node_modules/grunt-cli": {
@@ -2406,18 +2547,6 @@
 			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
 			"dev": true
 		},
-		"node_modules/lru-cache": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-			"dev": true,
-			"dependencies": {
-				"yallist": "^4.0.0"
-			},
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/make-iterator": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -2822,9 +2951,9 @@
 			}
 		},
 		"node_modules/postcss-selector-parser": {
-			"version": "6.0.16",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-			"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+			"version": "6.1.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+			"integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
 			"dev": true,
 			"dependencies": {
 				"cssesc": "^3.0.0",
@@ -3140,13 +3269,10 @@
 			"dev": true
 		},
 		"node_modules/semver": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+			"version": "7.6.3",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
 			"dev": true,
-			"dependencies": {
-				"lru-cache": "^6.0.0"
-			},
 			"bin": {
 				"semver": "bin/semver.js"
 			},
@@ -3221,9 +3347,9 @@
 			}
 		},
 		"node_modules/spdx-license-ids": {
-			"version": "3.0.17",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-			"integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+			"version": "3.0.18",
+			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+			"integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
 			"dev": true
 		},
 		"node_modules/sprintf-js": {
@@ -3292,6 +3418,15 @@
 				"url": "https://github.com/sponsors/ljharb"
 			}
 		},
+		"node_modules/tapable": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+			"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
 		"node_modules/text-table": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -3310,25 +3445,16 @@
 				"node": ">=8.0"
 			}
 		},
-		"node_modules/tslib": {
-			"version": "1.14.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-			"dev": true
-		},
-		"node_modules/tsutils": {
-			"version": "3.21.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+		"node_modules/ts-api-utils": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+			"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
 			"dev": true,
-			"dependencies": {
-				"tslib": "^1.8.1"
-			},
 			"engines": {
-				"node": ">= 6"
+				"node": ">=16"
 			},
 			"peerDependencies": {
-				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+				"typescript": ">=4.2.0"
 			}
 		},
 		"node_modules/type-check": {
@@ -3356,9 +3482,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "5.4.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-			"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+			"version": "5.5.4",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+			"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
 			"dev": true,
 			"peer": true,
 			"bin": {
@@ -3479,9 +3605,9 @@
 			}
 		},
 		"node_modules/vue-eslint-parser": {
-			"version": "9.4.2",
-			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
-			"integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+			"version": "9.4.3",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
 			"dev": true,
 			"dependencies": {
 				"debug": "^4.3.4",
@@ -3532,12 +3658,6 @@
 				"node": ">=12"
 			}
 		},
-		"node_modules/yallist": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-			"dev": true
-		},
 		"node_modules/yaml": {
 			"version": "2.4.1",
 			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
@@ -3588,28 +3708,28 @@
 			"dev": true
 		},
 		"@babel/code-frame": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+			"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
 			"dev": true,
 			"requires": {
-				"@babel/highlight": "^7.24.2",
+				"@babel/highlight": "^7.24.7",
 				"picocolors": "^1.0.0"
 			}
 		},
 		"@babel/helper-validator-identifier": {
-			"version": "7.22.20",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-			"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+			"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+			"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.7",
 				"chalk": "^2.4.2",
 				"js-tokens": "^4.0.0",
 				"picocolors": "^1.0.0"
@@ -3635,11 +3755,14 @@
 			}
 		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.42.0",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
-			"integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+			"version": "0.43.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz",
+			"integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==",
 			"dev": true,
 			"requires": {
+				"@types/eslint": "^8.56.5",
+				"@types/estree": "^1.0.5",
+				"@typescript-eslint/types": "^7.2.0",
 				"comment-parser": "1.4.1",
 				"esquery": "^1.5.0",
 				"jsdoc-type-pratt-parser": "~4.0.0"
@@ -3655,9 +3778,9 @@
 			}
 		},
 		"@eslint-community/regexpp": {
-			"version": "4.10.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+			"version": "4.11.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+			"integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
 			"dev": true
 		},
 		"@eslint/eslintrc": {
@@ -3764,6 +3887,22 @@
 				"fastq": "^1.6.0"
 			}
 		},
+		"@types/eslint": {
+			"version": "8.56.11",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
+			"integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
+			"dev": true,
+			"requires": {
+				"@types/estree": "*",
+				"@types/json-schema": "*"
+			}
+		},
+		"@types/estree": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+			"dev": true
+		},
 		"@types/json-schema": {
 			"version": "7.0.15",
 			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -3776,85 +3915,78 @@
 			"integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
 			"dev": true
 		},
-		"@types/semver": {
-			"version": "7.5.8",
-			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
-			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
-			"dev": true
-		},
 		"@typescript-eslint/scope-manager": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz",
+			"integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0"
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0"
 			}
 		},
 		"@typescript-eslint/types": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz",
+			"integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==",
 			"dev": true
 		},
 		"@typescript-eslint/typescript-estree": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz",
+			"integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0",
 				"debug": "^4.3.4",
 				"globby": "^11.1.0",
 				"is-glob": "^4.0.3",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
-			}
-		},
-		"@typescript-eslint/utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
-			"dev": true,
-			"requires": {
-				"@eslint-community/eslint-utils": "^4.2.0",
-				"@types/json-schema": "^7.0.9",
-				"@types/semver": "^7.3.12",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"eslint-scope": "^5.1.1",
-				"semver": "^7.3.7"
-			},
-			"dependencies": {
-				"eslint-scope": {
-					"version": "5.1.1",
-					"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-					"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+				"minimatch": "^9.0.4",
+				"semver": "^7.6.0",
+				"ts-api-utils": "^1.3.0"
+			},
+			"dependencies": {
+				"brace-expansion": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+					"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
 					"dev": true,
 					"requires": {
-						"esrecurse": "^4.3.0",
-						"estraverse": "^4.1.1"
+						"balanced-match": "^1.0.0"
 					}
 				},
-				"estraverse": {
-					"version": "4.3.0",
-					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-					"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-					"dev": true
+				"minimatch": {
+					"version": "9.0.5",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+					"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+					"dev": true,
+					"requires": {
+						"brace-expansion": "^2.0.1"
+					}
 				}
 			}
 		},
+		"@typescript-eslint/utils": {
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz",
+			"integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@typescript-eslint/scope-manager": "7.17.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/typescript-estree": "7.17.0"
+			}
+		},
 		"@typescript-eslint/visitor-keys": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz",
+			"integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"eslint-visitor-keys": "^3.3.0"
+				"@typescript-eslint/types": "7.17.0",
+				"eslint-visitor-keys": "^3.4.3"
 			}
 		},
 		"@ungap/structured-clone": {
@@ -3870,9 +4002,9 @@
 			"dev": true
 		},
 		"acorn": {
-			"version": "8.11.3",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+			"version": "8.12.1",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+			"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -3988,12 +4120,12 @@
 			}
 		},
 		"braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"dev": true,
 			"requires": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			}
 		},
 		"browserslist": {
@@ -4009,9 +4141,9 @@
 			}
 		},
 		"browserslist-config-wikimedia": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.6.1.tgz",
-			"integrity": "sha512-F3O+12ud7ZwBaiB/RZIMGDgz3nEuXz8RhtdPB4Lkd/WVP5Vy77EqBWRMz4vJ64x8LTTH3BOaHCD2ZuUcgShqyQ==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
+			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
 			"dev": true
 		},
 		"builtin-modules": {
@@ -4020,15 +4152,6 @@
 			"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
 			"dev": true
 		},
-		"builtins": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
-			"integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
-			"dev": true,
-			"requires": {
-				"semver": "^7.0.0"
-			}
-		},
 		"callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -4149,9 +4272,9 @@
 			"dev": true
 		},
 		"core-js-compat": {
-			"version": "3.37.0",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
-			"integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+			"version": "3.37.1",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+			"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
 			"dev": true,
 			"requires": {
 				"browserslist": "^4.23.0"
@@ -4225,6 +4348,16 @@
 			"integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==",
 			"dev": true
 		},
+		"enhanced-resolve": {
+			"version": "5.17.1",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+			"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+			"dev": true,
+			"requires": {
+				"graceful-fs": "^4.2.4",
+				"tapable": "^2.2.0"
+			}
+		},
 		"error-ex": {
 			"version": "1.3.2",
 			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -4319,37 +4452,37 @@
 			}
 		},
 		"eslint-compat-utils": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz",
-			"integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+			"integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
 			"dev": true,
 			"requires": {
 				"semver": "^7.5.4"
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.27.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.27.0.tgz",
-			"integrity": "sha512-KkZ54+MUnggz17C/RCEMXQSpiiqZRF7p9fjrz4phaaeKlTrjg0B+QbM5zcDWcjGiAWaJUptHaH17+RZldadkUw==",
+			"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.6.1",
+				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
 				"eslint-plugin-es-x": "^7.6.0",
-				"eslint-plugin-jest": "^27.9.0",
-				"eslint-plugin-jsdoc": "48.2.1",
-				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.6.0",
-				"eslint-plugin-mocha": "^10.4.1",
-				"eslint-plugin-n": "^16.6.2",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-jest": "^28.5.0",
+				"eslint-plugin-jsdoc": "48.2.5",
+				"eslint-plugin-json-es": "^1.6.0",
+				"eslint-plugin-mediawiki": "^0.7.0",
+				"eslint-plugin-mocha": "^10.4.3",
+				"eslint-plugin-n": "^17.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^51.0.1",
-				"eslint-plugin-vue": "^9.23.0",
+				"eslint-plugin-unicorn": "^53.0.0",
+				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
-				"eslint-plugin-yml": "^1.13.2"
+				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
 		"eslint-plugin-compat": {
@@ -4368,46 +4501,46 @@
 			}
 		},
 		"eslint-plugin-es-x": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz",
-			"integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==",
+			"version": "7.8.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+			"integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.1.2",
-				"@eslint-community/regexpp": "^4.6.0",
-				"eslint-compat-utils": "^0.5.0"
+				"@eslint-community/regexpp": "^4.11.0",
+				"eslint-compat-utils": "^0.5.1"
 			}
 		},
 		"eslint-plugin-jest": {
-			"version": "27.9.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
-			"integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+			"version": "28.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz",
+			"integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/utils": "^5.10.0"
+				"@typescript-eslint/utils": "^6.0.0 || ^7.0.0"
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "48.2.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz",
-			"integrity": "sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==",
+			"version": "48.2.5",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz",
+			"integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.42.0",
+				"@es-joy/jsdoccomment": "~0.43.0",
 				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.4.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.5.0",
 				"is-builtin-module": "^3.2.1",
-				"semver": "^7.6.0",
+				"semver": "^7.6.1",
 				"spdx-expression-parse": "^4.0.0"
 			}
 		},
 		"eslint-plugin-json-es": {
-			"version": "1.5.7",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
-			"integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==",
+			"version": "1.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz",
+			"integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0",
@@ -4415,9 +4548,9 @@
 			}
 		},
 		"eslint-plugin-mediawiki": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.6.0.tgz",
-			"integrity": "sha512-a2Zm18N5nPyflBajM2ZWATxucIpYPEmOSjFzUR1OBH3hAL0GY9fx1mpezEwzqAQ862d+kPkolgQOzktnZe8nKA==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz",
+			"integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==",
 			"dev": true,
 			"requires": {
 				"eslint-plugin-vue": "^9.23.0",
@@ -4436,39 +4569,51 @@
 			}
 		},
 		"eslint-plugin-n": {
-			"version": "16.6.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
-			"integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+			"version": "17.10.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.0.tgz",
+			"integrity": "sha512-NmrSdEid+ch9SBVuqbsK5CUiEZGtMK32KSI+arWahZbFF0nvX1oEJrWiFOWmhkWFKW9Hqor0g3qPh4AvkvWwlA==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"builtins": "^5.0.1",
+				"enhanced-resolve": "^5.17.0",
 				"eslint-plugin-es-x": "^7.5.0",
 				"get-tsconfig": "^4.7.0",
-				"globals": "^13.24.0",
+				"globals": "^15.8.0",
 				"ignore": "^5.2.4",
-				"is-builtin-module": "^3.2.1",
-				"is-core-module": "^2.12.1",
-				"minimatch": "^3.1.2",
-				"resolve": "^1.22.2",
+				"minimatch": "^9.0.5",
 				"semver": "^7.5.3"
 			},
 			"dependencies": {
+				"brace-expansion": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+					"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+					"dev": true,
+					"requires": {
+						"balanced-match": "^1.0.0"
+					}
+				},
+				"globals": {
+					"version": "15.8.0",
+					"resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz",
+					"integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==",
+					"dev": true
+				},
 				"minimatch": {
-					"version": "3.1.2",
-					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-					"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+					"version": "9.0.5",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+					"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 					"dev": true,
 					"requires": {
-						"brace-expansion": "^1.1.7"
+						"brace-expansion": "^2.0.1"
 					}
 				}
 			}
 		},
 		"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.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"requires": {}
 		},
@@ -4492,17 +4637,17 @@
 			}
 		},
 		"eslint-plugin-unicorn": {
-			"version": "51.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
-			"integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
+			"version": "53.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
+			"integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.5",
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/eslintrc": "^3.0.2",
 				"ci-info": "^4.0.0",
 				"clean-regexp": "^1.0.0",
-				"core-js-compat": "^3.34.0",
+				"core-js-compat": "^3.37.0",
 				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
 				"is-builtin-module": "^3.2.1",
@@ -4511,14 +4656,80 @@
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.27",
 				"regjsparser": "^0.10.0",
-				"semver": "^7.5.4",
+				"semver": "^7.6.1",
 				"strip-indent": "^3.0.0"
+			},
+			"dependencies": {
+				"@eslint/eslintrc": {
+					"version": "3.1.0",
+					"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+					"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+					"dev": true,
+					"requires": {
+						"ajv": "^6.12.4",
+						"debug": "^4.3.2",
+						"espree": "^10.0.1",
+						"globals": "^14.0.0",
+						"ignore": "^5.2.0",
+						"import-fresh": "^3.2.1",
+						"js-yaml": "^4.1.0",
+						"minimatch": "^3.1.2",
+						"strip-json-comments": "^3.1.1"
+					}
+				},
+				"argparse": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+					"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+					"dev": true
+				},
+				"eslint-visitor-keys": {
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+					"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+					"dev": true
+				},
+				"espree": {
+					"version": "10.1.0",
+					"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+					"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+					"dev": true,
+					"requires": {
+						"acorn": "^8.12.0",
+						"acorn-jsx": "^5.3.2",
+						"eslint-visitor-keys": "^4.0.0"
+					}
+				},
+				"globals": {
+					"version": "14.0.0",
+					"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+					"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+					"dev": true
+				},
+				"js-yaml": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+					"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+					"dev": true,
+					"requires": {
+						"argparse": "^2.0.1"
+					}
+				},
+				"minimatch": {
+					"version": "3.1.2",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+					"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+					"dev": true,
+					"requires": {
+						"brace-expansion": "^1.1.7"
+					}
+				}
 			}
 		},
 		"eslint-plugin-vue": {
-			"version": "9.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz",
-			"integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==",
+			"version": "9.27.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
+			"integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.4.0",
@@ -4527,7 +4738,7 @@
 				"nth-check": "^2.1.1",
 				"postcss-selector-parser": "^6.0.15",
 				"semver": "^7.6.0",
-				"vue-eslint-parser": "^9.4.2",
+				"vue-eslint-parser": "^9.4.3",
 				"xml-name-validator": "^4.0.0"
 			}
 		},
@@ -4718,9 +4929,9 @@
 			}
 		},
 		"fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"dev": true,
 			"requires": {
 				"to-regex-range": "^5.0.1"
@@ -4811,9 +5022,9 @@
 			"dev": true
 		},
 		"get-tsconfig": {
-			"version": "4.7.3",
-			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-			"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+			"version": "4.7.6",
+			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+			"integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
 			"dev": true,
 			"requires": {
 				"resolve-pkg-maps": "^1.0.0"
@@ -4906,6 +5117,12 @@
 				"slash": "^3.0.0"
 			}
 		},
+		"graceful-fs": {
+			"version": "4.2.11",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+			"dev": true
+		},
 		"graphemer": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -4934,10 +5151,13 @@
 			}
 		},
 		"grunt-banana-checker": {
-			"version": "0.11.1",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz",
-			"integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==",
-			"dev": true
+			"version": "0.13.0",
+			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz",
+			"integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==",
+			"dev": true,
+			"requires": {
+				"chalk": "4.1.2"
+			}
 		},
 		"grunt-cli": {
 			"version": "1.4.3",
@@ -5349,15 +5569,6 @@
 			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
 			"dev": true
 		},
-		"lru-cache": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-			"dev": true,
-			"requires": {
-				"yallist": "^4.0.0"
-			}
-		},
 		"make-iterator": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -5662,9 +5873,9 @@
 			"dev": true
 		},
 		"postcss-selector-parser": {
-			"version": "6.0.16",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-			"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+			"version": "6.1.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+			"integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
 			"dev": true,
 			"requires": {
 				"cssesc": "^3.0.0",
@@ -5882,13 +6093,10 @@
 			"dev": true
 		},
 		"semver": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-			"dev": true,
-			"requires": {
-				"lru-cache": "^6.0.0"
-			}
+			"version": "7.6.3",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+			"dev": true
 		},
 		"shebang-command": {
 			"version": "2.0.0",
@@ -5950,9 +6158,9 @@
 			}
 		},
 		"spdx-license-ids": {
-			"version": "3.0.17",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-			"integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+			"version": "3.0.18",
+			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+			"integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
 			"dev": true
 		},
 		"sprintf-js": {
@@ -6000,6 +6208,12 @@
 			"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 			"dev": true
 		},
+		"tapable": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+			"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+			"dev": true
+		},
 		"text-table": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6015,20 +6229,12 @@
 				"is-number": "^7.0.0"
 			}
 		},
-		"tslib": {
-			"version": "1.14.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-			"dev": true
-		},
-		"tsutils": {
-			"version": "3.21.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+		"ts-api-utils": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+			"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
 			"dev": true,
-			"requires": {
-				"tslib": "^1.8.1"
-			}
+			"requires": {}
 		},
 		"type-check": {
 			"version": "0.4.0",
@@ -6046,9 +6252,9 @@
 			"dev": true
 		},
 		"typescript": {
-			"version": "5.4.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-			"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+			"version": "5.5.4",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+			"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
 			"dev": true,
 			"peer": true
 		},
@@ -6131,9 +6337,9 @@
 			}
 		},
 		"vue-eslint-parser": {
-			"version": "9.4.2",
-			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
-			"integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+			"version": "9.4.3",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
 			"dev": true,
 			"requires": {
 				"debug": "^4.3.4",
@@ -6166,12 +6372,6 @@
 			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
 			"dev": true
 		},
-		"yallist": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-			"dev": true
-		},
 		"yaml": {
 			"version": "2.4.1",
 			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
diff --git a/package.json b/package.json
index 3a4480b..d880b45 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.27.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
-		"grunt-banana-checker": "0.11.1",
+		"grunt-banana-checker": "0.13.0",
 		"grunt-eslint": "24.3.0"
 	}
 }
-- 
2.39.2

$ date
--- stdout ---
Fri Jul 26 02:49:14 UTC 2024

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-PageForms.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 ---
7304cf4719ac06fae4a8d60fc0db5303a791a852 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "braces": {
      "name": "braces",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098094,
          "name": "braces",
          "dependency": "braces",
          "title": "Uncontrolled resource consumption in braces",
          "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1050"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.0.3"
        }
      ],
      "effects": [],
      "range": "<3.0.3",
      "nodes": [
        "node_modules/braces"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 1,
      "critical": 0,
      "total": 1
    },
    "dependencies": {
      "prod": 1,
      "dev": 305,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 305
    }
  }
}

--- 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: 40 installs, 0 updates, 0 removals
  - Locking composer/installers (v2.3.0)
  - Locking composer/pcre (3.2.0)
  - 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.12.1)
  - Locking mediawiki/minus-x (1.1.1)
  - Locking mediawiki/phan-taint-check-plugin (4.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.1)
  - Locking netresearch/jsonmapper (v4.4.1)
  - Locking phan/phan (5.4.1)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.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 (2.0.0)
  - Locking sabre/event (5.1.5)
  - Locking squizlabs/php_codesniffer (3.8.1)
  - Locking symfony/console (v5.4.41)
  - 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-php73 (v1.30.0)
  - Locking symfony/polyfill-php80 (v1.30.0)
  - Locking symfony/service-contracts (v3.5.0)
  - Locking symfony/string (v6.4.9)
  - 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: 40 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing composer/installers (v2.3.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.8.1): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing composer/pcre (3.2.0): 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 (v6.4.9): 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/polyfill-php73 (v1.30.0): Extracting archive
  - Installing symfony/console (v5.4.41): Extracting archive
  - Installing sabre/event (5.1.5): Extracting archive
  - Installing netresearch/jsonmapper (v4.4.1): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.1): 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 (2.0.0): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.1): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (4.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.12.1): Extracting archive
  - Installing mediawiki/minus-x (1.1.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/37 [>---------------------------]   0%
 22/37 [================>-----------]  59%
 36/37 [===========================>]  97%
 37/37 [============================] 100%
4 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 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.27.0 -> 0.28.2
Upgrading n:grunt-banana-checker from 0.11.1 -> 0.13.0
$ /usr/bin/npm install
--- stdout ---

added 314 packages, and audited 315 packages in 6s

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

1 high severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- 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 315 packages in 923ms

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

1 high severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

--- end ---
$ ./node_modules/.bin/eslint libs/PF_SpreadsheetComboBoxInput.js i18n/gsw.json i18n/io.json i18n/mwl.json i18n/shn.json i18n/om.json i18n/sk.json i18n/ar.json i18n/udm.json i18n/szy.json i18n/ksh.json i18n/os.json i18n/ps.json i18n/ca.json i18n/jbo.json composer.json i18n/hi.json i18n/ml.json i18n/dsb.json i18n/gu.json i18n/ug-arab.json i18n/nso.json i18n/rmc.json i18n/lv.json i18n/haw.json libs/PF_datetimepicker.js i18n/ht.json i18n/stq.json i18n/tr.json libs/PF_CreateForm.js i18n/pt-br.json i18n/jv.json i18n/fa.json i18n/ff.json i18n/sc.json i18n/kab.json i18n/diq.json package-lock.json libs/PF_rating.js libs/PF_datepicker.js i18n/ja.json i18n/kiu.json libs/PF_AutocompleteWidget.js i18n/tw.json i18n/pms.json i18n/ku-latn.json i18n/bn.json i18n/pnb.json i18n/rif.json i18n/mt.json i18n/avk.json i18n/sl.json Gruntfile.js i18n/nah.json i18n/es.json libs/PF_SpreadsheetAutocompleteWidget.js i18n/kw.json i18n/tcy.json i18n/kea.json i18n/gom-latn.json i18n/hsb.json libs/PF_upload.js libs/PF_preview.js libs/PF_wikieditor.js i18n/oc.json libs/PF_tree.js i18n/bgn.json i18n/te.json i18n/an.json i18n/arc.json i18n/bar.json i18n/ro.json i18n/krc.json i18n/de-formal.json libs/PF_collapsible.js i18n/sq.json libs/PF_CreateTemplate.js i18n/fi.json i18n/pam.json i18n/sco.json i18n/tl.json i18n/ia.json i18n/sh-latn.json i18n/lt.json libs/PF_simpleupload.js i18n/ka.json i18n/id.json i18n/min.json i18n/mhr.json i18n/sv.json i18n/am.json i18n/tet.json i18n/uz.json i18n/tzm.json libs/ext.pf.js i18n/cs.json i18n/el.json i18n/be.json libs/PF_editWarning.js i18n/br.json libs/PF_CreateClass.js i18n/inh.json i18n/hy.json libs/PF_checkboxes.js libs/PF_formInput.js i18n/ko.json i18n/bjn.json i18n/sr-el.json i18n/so.json i18n/myv.json i18n/gcr.json i18n/blk.json i18n/nl.json i18n/su.json i18n/azb.json i18n/skr-arab.json i18n/vo.json libs/ext.pf.select2.base.js i18n/krj.json i18n/ga.json libs/PF_ComboBoxInput.js i18n/mnw.json i18n/sjd.json i18n/ckb.json i18n/sms.json i18n/sr-ec.json i18n/cv.json i18n/ha.json i18n/fit.json i18n/ms.json i18n/lmo.json i18n/gv.json i18n/km.json i18n/mn.json libs/PF_submit.js i18n/af.json i18n/en.json i18n/lki.json i18n/zh-hant.json i18n/rue.json i18n/roa-tara.json i18n/frp.json i18n/tly.json i18n/uk.json i18n/is.json i18n/wuu-hans.json i18n/bcl.json i18n/zgh.json i18n/tt-cyrl.json libs/PF_PageSchemas.js i18n/cu.json i18n/mzn.json i18n/smn.json i18n/my.json i18n/atj.json i18n/mr.json i18n/nqo.json libs/PF_CreateProperty.js i18n/pa.json i18n/scn.json i18n/vi.json libs/PF_regexp.js i18n/be-tarask.json i18n/arz.json i18n/sd.json i18n/eo.json i18n/nds.json i18n/nb.json i18n/ky.json i18n/tyv.json i18n/nds-nl.json i18n/ru.json i18n/hr.json i18n/ne.json libs/PF_popupform.js i18n/tg-latn.json libs/PageForms.js package.json libs/PF_timepicker.js i18n/et.json i18n/qqq.json i18n/zh-tw.json i18n/syl.json i18n/grc.json i18n/bcc.json i18n/zh-hans.json i18n/bg.json i18n/eu.json i18n/th.json i18n/si.json i18n/dag.json i18n/it.json i18n/pap.json libs/ext.pf.select2.tokens.js i18n/ig.json i18n/wa.json i18n/fo.json i18n/tg-cyrl.json i18n/ba.json i18n/pl.json i18n/gl.json i18n/hu.json i18n/sa.json i18n/kn.json i18n/de.json libs/PF_autoedit.js extension.json i18n/ast.json i18n/ta.json i18n/nn.json libs/PF_maps.offline.js i18n/ce.json i18n/pfl.json i18n/bs.json i18n/tk.json i18n/fr.json i18n/li.json i18n/se.json libs/PF_spreadsheet.js i18n/he.json libs/PF_autogrow.js i18n/szl.json i18n/sw.json i18n/aln.json i18n/yi.json i18n/vep.json i18n/sah.json i18n/ti.json i18n/frr.json i18n/kjp.json libs/PF_AutoEditRating.js i18n/da.json libs/PF_FullCalendar.js i18n/ur.json libs/PF_imagePreview.js i18n/pt.json i18n/as.json libs/PF_maps.js i18n/az.json i18n/mk.json i18n/lb.json i18n/fy.json i18n/pdc.json --fix
--- stdout ---

/src/repo/libs/PF_AutoEditRating.js
   63:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  113:21  warning  '$' is already declared in the upper scope on line 1 column 13                no-shadow

/src/repo/libs/PF_AutocompleteWidget.js
  139:18  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/PF_ComboBoxInput.js
  120:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  136:51  warning  ES2015 default parameters are forbidden                                       es-x/no-default-parameters
  149:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  231:13  warning  'optionVal' is already declared in the upper scope on line 308 column 12      no-shadow
  232:13  warning  'optionLabel' is already declared in the upper scope on line 309 column 12    no-shadow
  307:12  warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  541:18  warning  Prefer `String#slice()` over `String#substr()`                                unicorn/prefer-string-slice
  550:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  555:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables

/src/repo/libs/PF_FullCalendar.js
   124:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   124:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   128:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   128:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   132:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   132:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   157:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   157:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   161:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   161:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   165:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   165:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   172:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   172:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   176:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   176:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   180:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   180:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   270:9   warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   270:9   warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   272:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   272:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   279:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   279:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   281:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   281:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   290:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   290:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   299:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   299:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   308:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   308:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   623:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
   754:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   754:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   764:18  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   764:18  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   771:52  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   771:52  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   779:54  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   779:54  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   780:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   780:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   790:51  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   790:51  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   791:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   791:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   826:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  1083:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1083:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1084:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1084:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1086:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1086:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1088:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1088:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1124:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1124:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1125:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1125:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1127:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1127:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1129:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1129:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1131:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1131:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1133:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1133:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1135:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1135:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1137:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1137:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:71  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:71  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1171:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1171:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes

/src/repo/libs/PF_SpreadsheetAutocompleteWidget.js
  114:9   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  131:5   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  135:21  warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  135:21  warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes
  177:17  warning  Prefer `String#slice()` over `String#substr()`          unicorn/prefer-string-slice

/src/repo/libs/PF_SpreadsheetComboBoxInput.js
   54:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
   56:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
  108:23  warning  'data' is already declared in the upper scope on line 46 column 4               no-shadow
  114:13  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:37  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:62  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  130:1   warning  Missing JSDoc @return type                                                      jsdoc/require-returns-type
  145:17  warning  Prefer `String#slice()` over `String#substr()`                                  unicorn/prefer-string-slice
  183:9   warning  ES2016 'Array.prototype.includes' method is forbidden                           es-x/no-array-prototype-includes
  183:9   warning  ES2015 'String.prototype.includes' method is forbidden                          es-x/no-string-prototype-includes
  189:1   warning  The type 'integer' is undefined                                                 jsdoc/no-undefined-types
  196:2   warning  jQuery collection names must match the variablePattern                          no-jquery/variable-pattern

/src/repo/libs/PF_autoedit.js
  15:16  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  83:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  95:38  warning  '$' is already declared in the upper scope on line 9 column 13                no-shadow

/src/repo/libs/PF_checkboxes.js
   4:1   warning  Missing JSDoc @param "$" type                                   jsdoc/require-param-type
   5:1   warning  Missing JSDoc @param "mw" type                                  jsdoc/require-param-type
  49:24  warning  '$' is already declared in the upper scope on line 9 column 14  no-shadow

/src/repo/libs/PF_collapsible.js
  30:8  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datepicker.js
   4:1  warning  Missing JSDoc @param "$" type                                                 jsdoc/require-param-type
   5:1  warning  Missing JSDoc @param "oo" type                                                jsdoc/require-param-type
   6:1  warning  Missing JSDoc @param "mw" type                                                jsdoc/require-param-type
   7:1  warning  Missing JSDoc @param "pf" type                                                jsdoc/require-param-type
  18:9  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datetimepicker.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "oo" type  jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_editWarning.js
  32:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  61:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_formInput.js
    6:1  warning  Missing JSDoc @param "$" type                jsdoc/require-param-type
    7:1  warning  Missing JSDoc @param "mw" type               jsdoc/require-param-type
   21:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
   78:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
   82:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
  106:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_imagePreview.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_maps.js
  201:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  208:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  209:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  210:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  262:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  263:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  264:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_popupform.js
  373:3   warning  jQuery collection names must match the variablePattern                        no-jquery/variable-pattern
  646:3   warning  ES2024 Resizable ArrayBuffer is forbidden                                     es-x/no-resizable-and-growable-arraybuffers
  757:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  771:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_preview.js
  56:3  warning  ES2024 Resizable ArrayBuffer is forbidden  es-x/no-resizable-and-growable-arraybuffers

/src/repo/libs/PF_rating.js
  43:4  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_simpleupload.js
  5:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_spreadsheet.js
   10:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   11:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   12:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   13:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   14:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   15:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   16:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   17:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   72:11  warning  ES2016 'Array.prototype.includes' method is forbidden                       es-x/no-array-prototype-includes
   72:11  warning  ES2015 'String.prototype.includes' method is forbidden                      es-x/no-string-prototype-includes
  394:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  440:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:6   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:11  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  692:7   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  692:12  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  753:10  warning  'columnParams' is already declared in the upper scope on line 855 column 9  no-shadow
  865:28  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  869:6   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  930:25  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  935:4   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle

/src/repo/libs/PF_submit.js
  141:46  warning  Prefer `String#slice()` over `String#substring()`                   unicorn/prefer-string-slice
  174:8   warning  '$form' is already declared in the upper scope on line 14 column 6  no-shadow

/src/repo/libs/PF_timepicker.js
  62:9  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_tree.js
  6:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  8:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_upload.js
  56:41  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PageForms.js
   199:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   230:19  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   241:9   warning  Selector extensions are not allowed                                                  no-jquery/no-sizzle
   406:61  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   413:58  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   770:9   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   770:9   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   771:5   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   771:5   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   834:6   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
   843:7   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
  1014:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1015:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1021:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1022:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1112:11  warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
  1112:11  warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
  1118:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1225:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1226:8   warning  ES2015 block-scoped variables are forbidden                                          es-x/no-block-scoped-variables
  1239:1   warning  JSDoc @return declaration present but return expression not available in function    jsdoc/require-returns-check
  1258:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1262:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1536:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1648:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1655:8   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1931:30  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1944:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1948:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1953:7   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state

/src/repo/libs/ext.pf.select2.base.js
   72:6  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
   92:8  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
  317:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice
  318:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/ext.pf.select2.tokens.js
   88:11  warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  287:9   warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  287:9   warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes

✖ 217 problems (0 errors, 217 warnings)


--- end ---
$ ./node_modules/.bin/eslint libs/PF_SpreadsheetComboBoxInput.js i18n/gsw.json i18n/io.json i18n/mwl.json i18n/shn.json i18n/om.json i18n/sk.json i18n/ar.json i18n/udm.json i18n/szy.json i18n/ksh.json i18n/os.json i18n/ps.json i18n/ca.json i18n/jbo.json composer.json i18n/hi.json i18n/ml.json i18n/dsb.json i18n/gu.json i18n/ug-arab.json i18n/nso.json i18n/rmc.json i18n/lv.json i18n/haw.json libs/PF_datetimepicker.js i18n/ht.json i18n/stq.json i18n/tr.json libs/PF_CreateForm.js i18n/pt-br.json i18n/jv.json i18n/fa.json i18n/ff.json i18n/sc.json i18n/kab.json i18n/diq.json package-lock.json libs/PF_rating.js libs/PF_datepicker.js i18n/ja.json i18n/kiu.json libs/PF_AutocompleteWidget.js i18n/tw.json i18n/pms.json i18n/ku-latn.json i18n/bn.json i18n/pnb.json i18n/rif.json i18n/mt.json i18n/avk.json i18n/sl.json Gruntfile.js i18n/nah.json i18n/es.json libs/PF_SpreadsheetAutocompleteWidget.js i18n/kw.json i18n/tcy.json i18n/kea.json i18n/gom-latn.json i18n/hsb.json libs/PF_upload.js libs/PF_preview.js libs/PF_wikieditor.js i18n/oc.json libs/PF_tree.js i18n/bgn.json i18n/te.json i18n/an.json i18n/arc.json i18n/bar.json i18n/ro.json i18n/krc.json i18n/de-formal.json libs/PF_collapsible.js i18n/sq.json libs/PF_CreateTemplate.js i18n/fi.json i18n/pam.json i18n/sco.json i18n/tl.json i18n/ia.json i18n/sh-latn.json i18n/lt.json libs/PF_simpleupload.js i18n/ka.json i18n/id.json i18n/min.json i18n/mhr.json i18n/sv.json i18n/am.json i18n/tet.json i18n/uz.json i18n/tzm.json libs/ext.pf.js i18n/cs.json i18n/el.json i18n/be.json libs/PF_editWarning.js i18n/br.json libs/PF_CreateClass.js i18n/inh.json i18n/hy.json libs/PF_checkboxes.js libs/PF_formInput.js i18n/ko.json i18n/bjn.json i18n/sr-el.json i18n/so.json i18n/myv.json i18n/gcr.json i18n/blk.json i18n/nl.json i18n/su.json i18n/azb.json i18n/skr-arab.json i18n/vo.json libs/ext.pf.select2.base.js i18n/krj.json i18n/ga.json libs/PF_ComboBoxInput.js i18n/mnw.json i18n/sjd.json i18n/ckb.json i18n/sms.json i18n/sr-ec.json i18n/cv.json i18n/ha.json i18n/fit.json i18n/ms.json i18n/lmo.json i18n/gv.json i18n/km.json i18n/mn.json libs/PF_submit.js i18n/af.json i18n/en.json i18n/lki.json i18n/zh-hant.json i18n/rue.json i18n/roa-tara.json i18n/frp.json i18n/tly.json i18n/uk.json i18n/is.json i18n/wuu-hans.json i18n/bcl.json i18n/zgh.json i18n/tt-cyrl.json libs/PF_PageSchemas.js i18n/cu.json i18n/mzn.json i18n/smn.json i18n/my.json i18n/atj.json i18n/mr.json i18n/nqo.json libs/PF_CreateProperty.js i18n/pa.json i18n/scn.json i18n/vi.json libs/PF_regexp.js i18n/be-tarask.json i18n/arz.json i18n/sd.json i18n/eo.json i18n/nds.json i18n/nb.json i18n/ky.json i18n/tyv.json i18n/nds-nl.json i18n/ru.json i18n/hr.json i18n/ne.json libs/PF_popupform.js i18n/tg-latn.json libs/PageForms.js package.json libs/PF_timepicker.js i18n/et.json i18n/qqq.json i18n/zh-tw.json i18n/syl.json i18n/grc.json i18n/bcc.json i18n/zh-hans.json i18n/bg.json i18n/eu.json i18n/th.json i18n/si.json i18n/dag.json i18n/it.json i18n/pap.json libs/ext.pf.select2.tokens.js i18n/ig.json i18n/wa.json i18n/fo.json i18n/tg-cyrl.json i18n/ba.json i18n/pl.json i18n/gl.json i18n/hu.json i18n/sa.json i18n/kn.json i18n/de.json libs/PF_autoedit.js extension.json i18n/ast.json i18n/ta.json i18n/nn.json libs/PF_maps.offline.js i18n/ce.json i18n/pfl.json i18n/bs.json i18n/tk.json i18n/fr.json i18n/li.json i18n/se.json libs/PF_spreadsheet.js i18n/he.json libs/PF_autogrow.js i18n/szl.json i18n/sw.json i18n/aln.json i18n/yi.json i18n/vep.json i18n/sah.json i18n/ti.json i18n/frr.json i18n/kjp.json libs/PF_AutoEditRating.js i18n/da.json libs/PF_FullCalendar.js i18n/ur.json libs/PF_imagePreview.js i18n/pt.json i18n/as.json libs/PF_maps.js i18n/az.json i18n/mk.json i18n/lb.json i18n/fy.json i18n/pdc.json -f json
--- stdout ---
[{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/af.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/aln.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/am.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/an.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/arc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/arz.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/as.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/atj.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/avk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/az.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/azb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bcc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bcl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bgn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bjn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/blk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ckb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/dag.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de-formal.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/diq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/eu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ff.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fit.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/frr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ga.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gcr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gom-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/grc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gsw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ha.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/haw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ht.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ig.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/inh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/is.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/jbo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/jv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kea.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kiu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kjp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/km.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/krc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/krj.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ku-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ky.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/li.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lki.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lmo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mhr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/min.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mnw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mwl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/my.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/myv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mzn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nah.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nds-nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nds.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ne.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nqo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nso.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/om.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/os.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pam.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pap.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pdc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pfl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ps.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/rif.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/rmc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/rue.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sah.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sco.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/se.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sh-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/shn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sjd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/smn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/so.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/stq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/su.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/syl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/szl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/szy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ta.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tcy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/te.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tet.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tg-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tg-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/th.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ti.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tly.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tt-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tyv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tzm.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/udm.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ug-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ur.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/uz.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vep.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/wa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/wuu-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/yi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zgh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-tw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_AutoEditRating.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":63,"column":21,"nodeType":"CallExpression","endLine":63,"endColumn":58},{"ruleId":"no-shadow","severity":1,"message":"'$' is already declared in the upper scope on line 1 column 13.","line":113,"column":21,"nodeType":"Identifier","messageId":"noShadow","endLine":113,"endColumn":22}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function( $, mw ) {\n\t'use strict';\n\n\tfunction sendData( $jtrigger ) {\n\t\tvar $jautoedit = $jtrigger.closest( '.autoedit' );\n\t\tvar $jresult = $jautoedit.find( '.autoedit-result' );\n\n\t\t$jresult.attr( 'class', 'autoedit-result autoedit-result-wait' );\n\t\t$jresult.text( mw.msg( 'pf-autoedit-wait' ) );\n\n\t\t// data array to be sent to the server\n\t\tvar data = {\n\t\t\taction: 'pfautoedit',\n\t\t\tformat: 'json'\n\t\t};\n\n\t\t// add form values to the data\n\t\tdata.query = $jautoedit.find( 'form.autoedit-data' )\n\t\t\t.serialize();\n\t\t$.ajax( {\n\t\t\ttype: 'POST', // request type ( GET or POST )\n\t\t\turl: mw.util.wikiScript( 'api' ), // URL to which the request is sent\n\t\t\tdata: data, // data to be sent to the server\n\t\t\tdataType: 'json', // type of data expected back from the server\n\t\t\tsuccess: function( result ) {\n\t\t\t\t$jresult.empty()\n\t\t\t\t\t.append( result.responseText );\n\t\t\t\tif ( result.status === 200 ) {\n\t\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' )\n\t\t\t\t\t\t.addClass( 'autoedit-result-ok' );\n\t\t\t\t} else {\n\t\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' )\n\t\t\t\t\t\t.addClass( 'autoedit-result-error' );\n\t\t\t\t}\n\t\t\t}, // function to be called if the request succeeds\n\t\t\terror: function( jqXHR ) {\n\t\t\t\t\tvar result = jQuery.parseJSON( jqXHR.responseText );\n\t\t\t\t\tvar text = result.responseText;\n\n\t\t\t\t\tfor ( var i = 0; i < result.errors.length; i++ ) {\n\t\t\t\t\t\ttext += ' ' + result.errors[ i ].message;\n\t\t\t\t\t}\n\n\t\t\t\t\t$jresult.empty()\n\t\t\t\t\t\t.append( text );\n\t\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' )\n\t\t\t\t\t\t.addClass( 'autoedit-result-error' );\n\t\t\t\t} // function to be called if the request fails\n\t\t} );\n\t}\n\n\tfunction handleAutoEditRating( $jtrigger, value ) {\n\t\tif ( mw.config.get( 'wgUserName' ) === null &&\n\t\t\t!confirm( mw.msg( 'pf_autoedit_anoneditwarning' ) ) ) {\n\t\t\treturn;\n\t\t}\n\t\tvar $jautoedit = $jtrigger.closest( '.autoedit' );\n\t\tvar $jeditdata = $jautoedit.find( 'form.autoedit-data' );\n\t\t$jeditdata.find( '#ratingInput' )\n\t\t\t.attr( \"value\", value );;\n\t\tvar targetpage = $jeditdata.find( 'input[name=target]' )\n\t\t\t.val();\n\t\tvar confirmEdit = $jeditdata.hasClass( 'confirm-edit' );\n\t\tif ( confirmEdit ) {\n\t\t\tOO.ui.confirm( mw.msg( 'pf_autoedit_confirm', targetpage ) )\n\t\t\t\t.done( function(confirmed) {\n\t\t\t\t\tif ( confirmed ) {\n\t\t\t\t\t\tsendData( $jtrigger );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t} else {\n\t\t\tsendData( $jtrigger );\n\t\t}\n\t};\n\n\tjQuery.fn.applyRatingInput = function( fromCalendar ) {\n\t\tvar starWidth = $( this )\n\t\t\t.attr( 'data-starwidth' );\n\t\tvar curValue = $( this )\n\t\t\t.attr( 'data-curvalue' );;\n\t\tvar numStars = $( this )\n\t\t\t.attr( 'data-numstars' );\n\t\tvar allowsHalf = $( this )\n\t\t\t.attr( 'data-allows-half' );\n\n\t\tif ( curValue === '' || curValue === undefined ) {\n\t\t\tcurValue = 0;\n\t\t}\n\n\t\tvar ratingsSettings = {\n\t\t\tnormalFill: '#ddd',\n\t\t\tstarWidth: starWidth,\n\t\t\tnumStars: numStars,\n\t\t\tmaxValue: numStars,\n\t\t\trating: curValue\n\t\t};\n\n\t\tif ( allowsHalf === undefined ) {\n\t\t\tratingsSettings.fullStar = true;\n\t\t} else {\n\t\t\tratingsSettings.halfStar = true;\n\t\t}\n\n\t\t$( this )\n\t\t\t.rateYo( ratingsSettings )\n\t\t\t.on( \"rateyo.set\", function( e, data ) {\n\t\t\t\thandleAutoEditRating( $( this )\n\t\t\t\t\t.parent(), data.rating );\n\t\t\t} );\n\t};\n\n\tjQuery( document )\n\t\t.ready( function( $ ) {\n\t\t\t$( this )\n\t\t\t\t.find( '.pfRating' )\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this )\n\t\t\t\t\t\t.applyRatingInput();\n\t\t\t\t} )\n\t\t} );\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_AutocompleteWidget.js","messages":[{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":139,"column":18,"nodeType":"CallExpression","messageId":"substr","endLine":139,"endColumn":58}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * An OOUI-based widget for an autocompleting text input that uses the\n * Page Forms 'pfautocomplete' API.\n *\n * @class\n * @extends OO.ui.TextInputWidget\n *\n * @constructor\n * @param {Object} config Configuration options\n * @author Yaron Koren\n * @author Sahaj Khandelwal\n * @author Yash Varshney\n */\n\npf.AutocompleteWidget = function( config ) {\n\t// Parent constructor\n\tvar textInputConfig = {\n\t\tname: 'page_name',\n\t\t// The following classes are used here:\n\t\t// * pfPageNameWithNamespace\n\t\t// * pfPageNameWithoutNamespace\n\t\tclasses: config.classes,\n\t\t// This turns off the local, browser-based autocompletion,\n\t\t// which would normally suggest values that the user has\n\t\t// typed before on that computer.\n\t\tautocomplete: false\n\t};\n\tif ( config.value !== undefined ) {\n\t\ttextInputConfig.value = config.value;\n\t}\n\tif ( config.placeholder !== undefined ) {\n\t\ttextInputConfig.placeholder = config.placeholder;\n\t}\n\tif ( config.autofocus !== undefined ) {\n\t\ttextInputConfig.autofocus = config.autofocus;\n\t}\n\tOO.ui.TextInputWidget.call( this, textInputConfig );\n\t// Mixin constructors\n\tif ( config.autocompletedatatype !== undefined ) {\n\t\tOO.ui.mixin.LookupElement.call( this, { highlightFirst: false } );\n\t}\n\n\tthis.config = config;\n\n\t// Initialization\n\tif ( config.size !== undefined && config.size !== '' ) {\n\t\tthis.$element.css('width', 'initial');\n\t\tthis.$input.css('width', 'initial');\n\t\tthis.$input.attr('size', config.size);\n\t}\n\n\t// dataCache will temporarily store entity id => entity data mappings of\n\t// entities, so that if we somehow then alter the text (add characters,\n\t// remove some) and then adjust our typing to form a known item,\n\t// it'll recognize it and know what the id was, without us having to\n\t// select it anew\n\tthis.dataCache = {};\n};\n\nOO.inheritClass( pf.AutocompleteWidget, OO.ui.TextInputWidget );\nOO.mixinClass( pf.AutocompleteWidget, OO.ui.mixin.LookupElement );\n\n/**\n * @inheritdoc\n */\npf.AutocompleteWidget.prototype.getLookupRequest = function() {\n\tvar\n\t\tvalue = this.getValue(),\n\t\tdeferred = $.Deferred(),\n\t\tapi,\n\t\trequestParams;\n\n\tapi = new mw.Api();\n\trequestParams = {\n\t\taction: 'pfautocomplete',\n\t\tformat: 'json',\n\t\tsubstr: value\n\t};\n\n\tif ( this.config.autocompletedatatype == 'category' ) {\n\t\trequestParams.category = this.config.autocompletesettings;\n\t} else if ( this.config.autocompletedatatype == 'namespace' ) {\n\t\trequestParams.namespace = this.config.autocompletesettings;\n\t}\n\n\treturn api.get( requestParams );\n};\n/**\n * @inheritdoc\n */\npf.AutocompleteWidget.prototype.getLookupCacheDataFromResponse = function( response ) {\n\treturn response || [];\n};\n/**\n * @inheritdoc\n */\npf.AutocompleteWidget.prototype.getLookupMenuOptionsFromData = function( data ) {\n\tvar i,\n\t\titem,\n\t\titems = [];\n\n\tdata = data.pfautocomplete;\n\tif ( this.maxSuggestions !== undefined ) {\n\t\tdata = data.slice( 0, this.maxSuggestions - 1 );\n\t}\n\tif ( !data ) {\n\t\treturn [];\n\t} else if ( data.length === 0 ) {\n\t\t// Generate a disabled option with a helpful message in case no results are found.\n\t\treturn [\n\t\t\tnew OO.ui.MenuOptionWidget( {\n\t\t\t\tdisabled: true,\n\t\t\t\tlabel: mw.message( 'pf-autocomplete-no-matches' ).text()\n\t\t\t} )\n\t\t];\n\t}\n\tfor ( i = 0; i < data.length; i++ ) {\n\t\titem = new OO.ui.MenuOptionWidget( {\n\t\t\t// this data will be passed to onLookupMenuChoose when item is selected\n\t\t\tdata: data[ i ].title.toString(),\n\t\t\tlabel: this.highlightText( data[ i ].title.toString() )\n\t\t} );\n\t\titems.push( item );\n\t}\n\treturn items;\n};\n\npf.AutocompleteWidget.prototype.highlightText = function( suggestion ) {\n\tvar searchTerm = this.getValue();\n\tvar searchRegexp = new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" +\n\t\tsearchTerm.replace(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi, \"\\\\$1\") +\n\t\t\")(?![^<>]*>)(?![^&;]+;)\", \"gi\");\n\tvar itemLabel = suggestion;\n\tvar loc = itemLabel.search(searchRegexp);\n\tvar t;\n\n\tif (loc >= 0) {\n\t\tt = itemLabel.slice(0, Math.max(0, loc)) +\n\t\t\t '<strong>' + itemLabel.substr(loc, searchTerm.length) + '</strong>' +\n\t\t\titemLabel.slice(loc + searchTerm.length);\n\t} else {\n\t\tt = itemLabel;\n\t}\n\n\treturn new OO.ui.HtmlSnippet( t );\n};\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_ComboBoxInput.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":120,"column":9,"nodeType":"CallExpression","endLine":120,"endColumn":65},{"ruleId":"es-x/no-default-parameters","severity":1,"message":"ES2015 default parameters are forbidden.","line":136,"column":51,"nodeType":"AssignmentPattern","messageId":"forbidden","endLine":136,"endColumn":71},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":149,"column":8,"nodeType":"CallExpression","endLine":149,"endColumn":48},{"ruleId":"no-shadow","severity":1,"message":"'optionVal' is already declared in the upper scope on line 308 column 12.","line":231,"column":13,"nodeType":"Identifier","messageId":"noShadow","endLine":231,"endColumn":22},{"ruleId":"no-shadow","severity":1,"message":"'optionLabel' is already declared in the upper scope on line 309 column 12.","line":232,"column":13,"nodeType":"Identifier","messageId":"noShadow","endLine":232,"endColumn":24},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":307,"column":12,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":307,"endColumn":19},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":541,"column":18,"nodeType":"CallExpression","messageId":"substr","endLine":541,"endColumn":58},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":550,"column":3,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":554,"endColumn":33},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":555,"column":3,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":555,"endColumn":89}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * PF_ComboBoxInput.js\n *\n * JavaScript code to use OOUI ComboBoxInput widget for comboBox.\n *\n * @class\n * @extends OO.ui.ComboBoxInputWidget\n * @param {jQuery} $\n * @param {Object} mw\n * @param {Object} pf\n * @license GNU GPL v2+\n * @author Jatin Mehta\n * @author Priyanshu Varshney\n * @author Yaron Koren\n * @author Sahaj Khandelwal\n * @author Yash Varshney\n * @author Dennis Groenewegen\n */\n(function($, mw, pf) {\n\tvar apiRequest = null;\n\n\tpf.ComboBoxInput = function(config) {\n\t\tthis.config = config || {}\n\t\tOO.ui.ComboBoxInputWidget.call(this, config);\n\t};\n\tOO.inheritClass(pf.ComboBoxInput, OO.ui.ComboBoxInputWidget);\n\n\t/**\n\t * Transform select/options to OOUI widget\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tpf.ComboBoxInput.prototype.apply = function(element) {\n\t\tvar curVal = element.val(); // 'value'\n\t\tvar curOptionLabel = element.find('option:selected').text();\n\t\tvar curLabel = (curOptionLabel !== undefined) ? curOptionLabel : curVal;\n\n\t\t// Add hidden input containing the value\n\t\tvar hiddenInput = new OO.ui.HiddenInputWidget({\n\t\t\tid: element.attr('id') + '-hidden',\n\t\t\tname: element.attr('name'),\n\t\t\tvalue: curVal\n\t\t});\n\t\telement.before(hiddenInput.$element);\n\n\t\t// Apply ComboBoxInput to the element. Omit name.\n\t\tthis.setInputId(element.attr('id'));\n\t\tthis.setValueAndLabel(curVal, curLabel);\n\t\tthis.setInputAttribute('origname', element.attr('origname'));\n\t\tthis.config['autocompletesettings'] = (element.attr('autocompletesettings') || '').replace(/\\\\'/g, \"'\");\n\t\tthis.config['autocompletedatatype'] = element.attr('autocompletedatatype');\n\t\tthis.config['existingvaluesonly'] = element.attr('existingvaluesonly');\n\t\tthis.setInputAttribute('autocompletesettings', this.config['autocompletesettings']);\n\t\tthis.setInputAttribute('placeholder', element.attr('placeholder'));\n\t\tthis.setInputAttribute('tabIndex', element.attr('tabindex'));\n\t\tthis.setInputAttribute('mappingproperty', element.attr('mappingproperty'));\n\t\tthis.setInputAttribute('mappingtemplate', element.attr('mappingtemplate'));\n\n\t\t// Initialize values in the combobox\n\t\tthis.setValues();\n\n\t\tif (this.config.autocompletesettings == 'external data') {\n\t\t\t// this is especially set for dependent on settings\n\t\t\t// when the source field has external data autocompletion\n\t\t\tvar input_id = \"#\" + this.getInputId();\n\t\t\tvar name = $(input_id).attr(this.nameAttr($(input_id)));\n\t\t\tvar positionOfBracket = name.indexOf('[');\n\t\t\tvar sliceFirst = name.slice(0, Math.max(0, positionOfBracket));\n\t\t\t// Previously using substring() :\n\t\t\tvar sliceSecond = name.slice(positionOfBracket + 1, name.length - 1);\n\t\t\tvar data_autocomplete = sliceFirst + '|' + sliceSecond;\n\t\t\tthis.setInputAttribute('data-autocomplete', data_autocomplete);\n\t\t}\n\n\t\tthis.bindEvents();\n\n\t\tvar $loadingIcon = $('<img>').attr( {\n\t\t\tsrc: mw.config.get( 'wgPageFormsScriptPath' ) + '/skins/loading.gif',\n\t\t\tid: 'loading-' + this.getInputId()\n\t\t} );\n\t\t$loadingIcon.hide();\n\t\t$(document.getElementById(this.getInputId())).parent().append( $loadingIcon );\n\n\t};\n\n\t/**\n\t * Bind events (blur, focus, keyup, focusout, etc.)\n\t */\n\tpf.ComboBoxInput.prototype.bindEvents = function() {\n\n\t\tthis.$input.blur(function() {\n\t\t\tvar presentLabel = this.$input.val().trim();\n\t\t\tvar selectedLabel = this.$input.attr('data-label').trim();\n\t\t\tif (presentLabel !== selectedLabel && this.config['existingvaluesonly']) {\n\t\t\t\t//Disallows non-existing value\n\t\t\t\tthis.setValueAndLabel(\"\", \"\");\n\t\t\t} else if (presentLabel !== selectedLabel) {\n\t\t\t\t//Update change to non-existing value\n\t\t\t\tthis.setValueAndLabel(presentLabel, presentLabel);\n\t\t\t\tthis.adjustWidth();\n\t\t\t} else {\n\t\t\t\t// Just resize input according to the value\n\t\t\t\tthis.adjustWidth();\n\t\t\t}\n\t\t}.bind(this));\n\n\t\tthis.$input.focus( function() {\n\t\t\tthis.setValues();\n\t\t}.bind(this));\n\n\t\tthis.$input.keyup( function(event) {\n\t\t\tif (event.keyCode !== 38 && event.keyCode !== 40 && event.keyCode !== 37 && event.keyCode !== 39) {\n\t\t\t\tthis.setValues(false);\n\t\t\t}\n\t\t}.bind(this));\n\n\t\t// Mouseup - click input\n\t\tthis.$element.mouseup( function(event) {\n\t\t\t// Avoid re-fetching values if the user clicks on the scrollbar.\n\t\t\tif ( $( event.target ).hasClass( 'oo-ui-labelElement-label' ) ) {\n\t\t\t\tthis.setValues( false );\n\t\t\t}\n\t\t}.bind(this));\n\n\t\tthis.$element.focusout( function() {\n\t\t\t$( '.combobox_map_feed' ).val( this.$input.val() );\n\t\t}.bind(this));\n\n\t};\n\n\t/**\n\t * Sets the values for combobox\n\t *\n\t * @param {boolean} showAllValues\n\t */\n\tpf.ComboBoxInput.prototype.setValues = function( showAllValues = true ) {\n\t\tvar input_id = \"#\" + this.getInputId(),\n\t\t\tvalues = [],\n\t\t\tdep_on = this.dependentOn(),\n\t\t\tself = this,\n\t\t\tdata,\n\t\t\ti,\n\t\t\tcurValue,\n\t\t\tmy_server,\n\t\t\twgPageFormsAutocompleteOnAllChars = mw.config.get( 'wgPageFormsAutocompleteOnAllChars' );\n\n\t\t// First, handle \"show on select\" stuff.\n\t\tvar $parentSpan = $(input_id).closest('span');\n\t\tif ( $parentSpan.hasClass('pfShowIfSelected') ) {\n\t\t\tmw.hook('pf.comboboxChange').fire($parentSpan);\n\t\t}\n\n\t\tthis.itemFound = false;\n\t\tif (this.config.autocompletedatatype !== undefined) {\n\t\t\tvar data_source = this.config.autocompletesettings,\n\t\t\t\tdata_type = this.config.autocompletedatatype;\n\t\t\tcurValue = this.getValue(); // current label or substring being typed\n\t\t\tvar curHiddenVal = this.getHiddenInputValue(); //submitted\n\n\t\t\tif (curValue.length == 0) {\n\t\t\t\tvalues.push({\n\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\tlabel: mw.message('pf-autocomplete-input-too-short', 1).text(),\n\t\t\t\t\tdisabled: true\n\t\t\t\t});\n\t\t\t\tthis.setOptions(values);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmy_server = mw.util.wikiScript( 'api' );\n\t\t\t// Cargo field, wikidata, ...\n\t\t\tif (data_type === 'cargo field') {\n\t\t\t\tvar table_and_field = data_source.split('|');\n\t\t\t\tmy_server += \"?action=pfautocomplete&format=json&cargo_table=\" + table_and_field[0] + \"&cargo_field=\" + table_and_field[1] + \"&substr=\" + curValue;\n\t\t\t\tif ( table_and_field.length > 2 ) {\n\t\t\t\t\tmy_server += '&cargo_where=' + table_and_field[2];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( data_type === 'wikidata' ) {\n\t\t\t\t\t// Support for getting query values from an existing field in the form\n\t\t\t\t\tvar terms = data_source.split( \"&\" );\n\t\t\t\t\tterms.forEach( function(element) {\n\t\t\t\t\t\tvar subTerms = element.split( \"=\" );\n\t\t\t\t\t\tvar matches = subTerms[1].match( /\\[(.*?)\\]/ );\n\t\t\t\t\t\tif ( matches ) {\n\t\t\t\t\t\t\tvar dep_value = $( '[name=\"' + subTerms[1] + '\"]' ).val();\n\t\t\t\t\t\t\tif ( dep_value && dep_value.trim().length ) {\n\t\t\t\t\t\t\t\tdata_source = data_source.replace( subTerms[1], dep_value );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tdata_source = encodeURIComponent( data_source );\n\t\t\t\t}\n\t\t\t\tmy_server += \"?action=pfautocomplete&format=json&\" + data_type + \"=\" + data_source + \"&substr=\" + curValue;\n\n\t\t\t\t// Mapping property (Semantic MediaWiki)\n\t\t\t\tvar mappingProperty = this.$input.attr('mappingproperty');\n\t\t\t\tif (typeof mappingProperty !== 'undefined' && mappingProperty !== false) {\n\t\t\t\t\tmy_server += \"&mappingproperty=\" + mappingProperty;\n\t\t\t\t}\n\t\t\t\t// Mapping template (exclusive to autocompletion?)\n\t\t\t\tvar mappingTemplate = this.$input.attr('mappingtemplate');\n\t\t\t\tif (typeof mappingTemplate !== 'undefined' && mappingTemplate !== false) {\n\t\t\t\t\tmy_server += \"&mappingtemplate=\" + mappingTemplate;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tapiRequest = $.ajax({\n\t\t\t\turl: my_server,\n\t\t\t\tdataType: 'json',\n\t\t\t\tbeforeSend: function() {\n\t\t\t\t\tif ( apiRequest !== null ) {\n\t\t\t\t\t\tapiRequest.abort();\n\t\t\t\t\t}\n\t\t\t\t\t$( '#loading-' + input_id.replace( '#', '' ) ).show();\n\t\t\t\t},\n\t\t\t\tsuccess: function(Data) {\n\t\t\t\t\t$( '#loading-' + input_id.replace( '#', '' ) ).hide();\n\t\t\t\t\tif (Data.pfautocomplete !== undefined) {\n\t\t\t\t\t\tData = Data.pfautocomplete;\n\t\t\t\t\t\tif (Data.length == 0) {\n\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\t\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor ( i = 0; i < Data.length; i++ ) {\n\t\t\t\t\t\t\t\tvar optionVal = Data[i].title;\n\t\t\t\t\t\t\t\tvar optionLabel = (Data[i].displaytitle !== undefined) ? Data[i].displaytitle : Data[i].title;\n\t\t\t\t\t\t\t\tif (optionLabel == curValue) {\n\t\t\t\t\t\t\t\t\tself.itemFound = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar item = {\n\t\t\t\t\t\t\t\t\tdata: optionVal,\n\t\t\t\t\t\t\t\t\tlabel: optionLabel,\n\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(optionLabel),\n\t\t\t\t\t\t\t\t\tdisabled: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tvalues.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tself.setOptions(values);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Autocompletedatatype undefined\n\t\t\tif (dep_on === null) {\n\t\t\t\tif (this.config['autocompletesettings'] === 'external data') {\n\t\t\t\t\t// External data\n\t\t\t\t\tcurValue = this.getValue();\n\t\t\t\t\tif ( showAllValues ) {\n\t\t\t\t\t\tcurValue = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tvar name = $(input_id).attr(this.nameAttr($(input_id)));\n\t\t\t\t\tvar wgPageFormsEDSettings = mw.config.get('wgPageFormsEDSettings');\n\t\t\t\t\tvar edgValues = mw.config.get('edgValues');\n\t\t\t\t\tdata = {};\n\t\t\t\t\tif (wgPageFormsEDSettings[name].title !== undefined && wgPageFormsEDSettings[name].title !== \"\") {\n\t\t\t\t\t\tdata.title = edgValues[wgPageFormsEDSettings[name].title];\n\t\t\t\t\t\tif (data.title !== undefined && data.title !== null) {\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\tdata.title.forEach(function() {\n\t\t\t\t\t\t\t\tif ( data.title[i] == curValue ) {\n\t\t\t\t\t\t\t\t\tself.itemFound = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (wgPageFormsAutocompleteOnAllChars) {\n\t\t\t\t\t\t\t\t\tif (self.getConditionForAutocompleteOnAllChars(data.title[i], curValue)) {\n\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\tdata: data.title[i],\n\t\t\t\t\t\t\t\t\t\t\tlabel: data.title[i],\n\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(data.title[i])\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (self.checkIfAnyWordStartsWithInputValue(data.title[i], curValue)) {\n\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\tdata: data.title[i],\n\t\t\t\t\t\t\t\t\t\t\tlabel: data.title[i],\n\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(data.title[i])\n\t\t\t\t\t\t\t\t\t\t});\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\ti++;\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} else {\n\t\t\t\t\t// Local autocompletion, not dependent, not external data\n\t\t\t\t\tvar wgPageFormsAutocompleteValues = mw.config.get('wgPageFormsAutocompleteValues');\n\t\t\t\t\tdata = wgPageFormsAutocompleteValues[this.config['autocompletesettings']];\n\t\t\t\t\tcurValue = this.getValue();\n\t\t\t\t\tif ( showAllValues ) {\n\t\t\t\t\t\tcurValue = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tvar arrayType = (Array.isArray(data)) ? 'indexed' : 'associative';\n\t\t\t\t\tif (Array.isArray(data) || typeof data == 'object') {\n\t\t\t\t\t\tfor (let key in data) {\n\t\t\t\t\t\t\tvar optionVal = (arrayType == 'indexed') ? data[key] : key;\n\t\t\t\t\t\t\tvar optionLabel = data[key];\n\t\t\t\t\t\t\tif (optionLabel == curValue) {\n\t\t\t\t\t\t\t\tself.itemFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(wgPageFormsAutocompleteOnAllChars && (this.getConditionForAutocompleteOnAllChars(optionLabel, curValue))) ||\n\t\t\t\t\t\t\t\t(this.checkIfAnyWordStartsWithInputValue(optionLabel, curValue))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\tdata: optionVal,\n\t\t\t\t\t\t\t\t\tlabel: optionLabel,\n\t\t\t\t\t\t\t\t\thighlighted: this.highlightText(optionLabel)\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} else {\n\t\t\t\t// Dependent field autocompletion (dep_on is not null)\n\t\t\t\tvar dep_field_opts = this.getDependentFieldOpts(dep_on);\n\t\t\t\tmy_server = mw.config.get('wgScriptPath') + \"/api.php\";\n\t\t\t\tmy_server += \"?action=pfautocomplete&format=json\";\n\t\t\t\t// URL depends on whether Cargo or Semantic MediaWiki\n\t\t\t\t// is being used.\n\t\t\t\tif (dep_field_opts.prop !== undefined && dep_field_opts.base_prop !== undefined && dep_field_opts.base_value !== undefined) {\n\t\t\t\t\tif (dep_field_opts.prop.indexOf('|') === -1) {\n\t\t\t\t\t\t// SMW\n\t\t\t\t\t\tmy_server += \"&property=\" + dep_field_opts.prop + \"&baseprop=\" + dep_field_opts.base_prop + \"&basevalue=\" + dep_field_opts.base_value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Cargo\n\t\t\t\t\t\tvar cargoTableAndFieldStr = dep_field_opts.prop;\n\t\t\t\t\t\tvar cargoTableAndField = cargoTableAndFieldStr.split('|');\n\t\t\t\t\t\tvar cargoTable = cargoTableAndField[0];\n\t\t\t\t\t\tvar cargoField = cargoTableAndField[1];\n\t\t\t\t\t\tvar baseCargoTableAndFieldStr = dep_field_opts.base_prop;\n\t\t\t\t\t\tvar baseCargoTableAndField = baseCargoTableAndFieldStr.split('|');\n\t\t\t\t\t\tvar baseCargoTable = baseCargoTableAndField[0];\n\t\t\t\t\t\tvar baseCargoField = baseCargoTableAndField[1];\n\t\t\t\t\t\tmy_server += \"&cargo_table=\" + cargoTable + \"&cargo_field=\" + cargoField + \"&base_cargo_table=\" + baseCargoTable + \"&base_cargo_field=\" + baseCargoField + \"&basevalue=\" + dep_field_opts.base_value;\n\t\t\t\t\t}\n\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\turl: my_server,\n\t\t\t\t\t\tdataType: 'json',\n\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t\t\tif ( response.error !== undefined || response.pfautocomplete.length == 0 ) {\n\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\t\t\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\t\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn values;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresponse.pfautocomplete.forEach(function(item) {\n\t\t\t\t\t\t\t\tcurValue = self.getValue();\n\t\t\t\t\t\t\t\tif ( item.displaytitle == curValue || item.title == curValue ) {\n\t\t\t\t\t\t\t\t\tself.itemFound = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (wgPageFormsAutocompleteOnAllChars) {\n\t\t\t\t\t\t\t\t\t// dependent\n\t\t\t\t\t\t\t\t\tif (item.displaytitle !== undefined) {\n\t\t\t\t\t\t\t\t\t\tif (self.getConditionForAutocompleteOnAllChars(item.displaytitle, curValue)) {\n\t\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\t\tdata: item.displaytitle,\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: item.displaytitle,\n\t\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(item.displaytitle)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// no displaytitle\n\t\t\t\t\t\t\t\t\t\tif (self.getConditionForAutocompleteOnAllChars(item.title, curValue)) {\n\t\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\t\tdata: item.title,\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: item.title,\n\t\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(item.title)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// dependent, wgPageFormsAutocompleteOnAllChars = false\n\t\t\t\t\t\t\t\t\tif (item.displaytitle !== undefined) {\n\t\t\t\t\t\t\t\t\t\tif (self.checkIfAnyWordStartsWithInputValue(item.displaytitle, curValue)) {\n\t\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\t\tdata: item.displaytitle,\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: item.displaytitle,\n\t\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(item.displaytitle)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// displaytitle undefined\n\t\t\t\t\t\t\t\t\t\tif (self.checkIfAnyWordStartsWithInputValue(item.title, curValue)) {\n\t\t\t\t\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\t\t\t\t\tdata: item.title,\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: item.title,\n\t\t\t\t\t\t\t\t\t\t\t\thighlighted: self.highlightText(item.title)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\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\treturn values;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// this condition will come when the wrong parameters are used in form definition\n\t\t\t\t\tvalues.push({\n\t\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\t\t\t\tdisabled: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (values.length == 0) {\n\t\t\t\tvalues.push({\n\t\t\t\t\tdata: self.getHiddenInputValue(),\n\t\t\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\t\t\tdisabled: true\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.setOptions(values);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the name attribute of the field depending on\n\t * whether it is a part of a multiple instance template or not\n\t *\n\t * @param {HTMLElement} element\n\t *\n\t * @return {string}\n\t */\n\tpf.ComboBoxInput.prototype.nameAttr = function(element) {\n\t\treturn this.partOfMultiple(element) ? \"origname\" : \"name\";\n\t};\n\n\t/**\n\t * Checks whether the field is part of a multiple instance template or not\n\t *\n\t * @param {HTMLElement} element\n\t *\n\t * @return {boolean}\n\t */\n\tpf.ComboBoxInput.prototype.partOfMultiple = function(element) {\n\t\treturn element.attr(\"origname\") !== undefined ? true : false;\n\t};\n\n\t/**\n\t * If a field is dependent on some other field in the form\n\t * then it returns its name.\n\t *\n\t * @return {string}\n\t */\n\tpf.ComboBoxInput.prototype.dependentOn = function() {\n\t\tvar input_id = \"#\" + this.getInputId();\n\t\tvar name_attr = this.nameAttr($(input_id));\n\t\tvar name = $(input_id).attr(name_attr);\n\n\t\tvar wgPageFormsDependentFields = mw.config.get('wgPageFormsDependentFields');\n\t\tfor (var i = 0; i < wgPageFormsDependentFields.length; i++) {\n\t\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\t\tif (dependentFieldPair[1] === name) {\n\t\t\t\treturn dependentFieldPair[0];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\t/**\n\t * Gives dependent field options which include\n\t * property, base property and base value\n\t *\n\t * @param {string} dep_on\n\t *\n\t * @return {Object} dep_field_opts\n\t */\n\tpf.ComboBoxInput.prototype.getDependentFieldOpts = function(dep_on) {\n\t\tvar input_id = \"#\" + this.getInputId();\n\t\tvar dep_field_opts = {};\n\t\tvar $baseElement;\n\t\tif (this.partOfMultiple($(input_id))) {\n\t\t\t$baseElement = $(input_id).closest(\".multipleTemplateInstance\")\n\t\t\t\t.find('[origname =\"' + dep_on + '\" ]');\n\t\t} else {\n\t\t\t$baseElement = $('[name =\"' + dep_on + '\" ]');\n\t\t}\n\t\tdep_field_opts.base_value = $baseElement.val();\n\t\tdep_field_opts.base_prop = mw.config.get('wgPageFormsFieldProperties')[dep_on] ||\n\t\t\t(\n\t\t\t\t$baseElement.attr(\"autocompletesettings\") == 'external data' ?\n\t\t\t\t$baseElement.attr(\"data-autocomplete\") : $baseElement.attr(\"autocompletesettings\")\n\t\t\t);\n\t\tdep_field_opts.prop = $(input_id).attr(\"autocompletesettings\").split(\",\")[0];\n\n\t\treturn dep_field_opts;\n\t};\n\n\t/**\n\t * Returns the array of names of fields in the form which are dependent\n\t * on the field passed as a param to this function,\n\t *\n\t * @param {HTMLElement} element\n\t *\n\t * @return {Array} dependent_on_me (associative array)\n\t */\n\tpf.ComboBoxInput.prototype.dependentOnMe = function() {\n\t\tvar input_id = \"#\" + this.getInputId();\n\t\tvar name_attr = this.nameAttr($(input_id));\n\t\tvar name = $(input_id).attr(name_attr);\n\t\tvar dependent_on_me = [];\n\t\tvar wgPageFormsDependentFields = mw.config.get('wgPageFormsDependentFields');\n\t\tfor (var i = 0; i < wgPageFormsDependentFields.length; i++) {\n\t\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\t\tif (dependentFieldPair[0] === name) {\n\t\t\t\tdependent_on_me.push(dependentFieldPair[1]);\n\t\t\t}\n\t\t}\n\n\t\treturn dependent_on_me;\n\t};\n\n\tpf.ComboBoxInput.prototype.highlightText = function(suggestion) {\n\t\tvar searchTerm = this.getValue();\n\t\tvar searchRegexp = new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" +\n\t\t\tsearchTerm.replace(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi, \"\\\\$1\") +\n\t\t\t\")(?![^<>]*>)(?![^&;]+;)\", \"gi\");\n\t\tvar itemLabel = suggestion.toString();\n\t\tvar loc = itemLabel.search(searchRegexp);\n\t\tvar t;\n\n\t\tif (loc >= 0) {\n\t\t\tt = itemLabel.slice(0, Math.max(0, loc)) +\n\t\t\t\t'<strong>' + itemLabel.substr(loc, searchTerm.length) + '</strong>' +\n\t\t\t\titemLabel.slice(loc + searchTerm.length);\n\t\t} else {\n\t\t\tt = itemLabel;\n\t\t}\n\t\treturn new OO.ui.HtmlSnippet(t);\n\t};\n\n\tpf.ComboBoxInput.prototype.checkIfAnyWordStartsWithInputValue = function(string, curValue) {\n\t\tlet wordSeparators = [\n\t\t\t'/', '(', ')', '|', 's'\n\t\t].map(function(p) {\n\t\t\treturn \"\\\\\" + p\n\t\t}).concat('^', '-', \"'\", '\"');\n\t\tlet regex = new RegExp('(' + wordSeparators.join('|') + ')' + curValue.toLowerCase());\n\t\treturn string.toString().toLowerCase().match(regex) !== null;\n\t};\n\n\tpf.ComboBoxInput.prototype.getConditionForAutocompleteOnAllChars = function(str, curStr) {\n\t\tvar containsSubstr = str.toLowerCase().indexOf(curStr.toLowerCase()) !== -1;\n\t\treturn containsSubstr;\n\t};\n\n\tpf.ComboBoxInput.prototype.setInputAttribute = function(attr, value) {\n\t\tif (typeof value !== 'undefined' && value !== false) {\n\t\t\tthis.$input.attr(attr, value);\n\t\t}\n\t};\n\n\t/**\n\t * Override default to handle menu item 'choose' event\n\t * Update two inputs to clicked item\n\t * Use getTitle not getLabel to get non-highlighted label\n\t *\n\t * @param {OO.ui.MenuOptionWidget} item Selected item\n\t */\n\tpf.ComboBoxInput.prototype.onMenuChoose = function(item) {\n\t\tvar inputVal = item.getData();\n\t\tvar inputLabel = item.getTitle();\n\t\tvar inputId = this.getInputId();\n\t\tthis.$input.attr(\"data-input-id\", inputId);\n\t\tthis.setValueAndLabel(inputVal, inputLabel);\n\t\tthis.adjustWidth();\n\t};\n\n\t/**\n\t * Return hidden input associated with combobox, which contains the value\n\t * Accepts id of combobox input\n\t *\n\t * @return {HTMLElement}\n\t */\n\tpf.ComboBoxInput.prototype.getHiddenInput = function() {\n\t\tvar inputId = this.getInputId();\n\t\treturn this.$input.closest('.comboboxSpan').find('#' + inputId + '-hidden');\n\t};\n\n\tpf.ComboBoxInput.prototype.getHiddenInputValue = function() {\n\t\tvar inputId = this.getInputId();\n\t\tvar $hiddenInput = this.$input.closest('.comboboxSpan').find('#' + inputId + '-hidden');\n\t\treturn $hiddenInput.val();\n\t};\n\n\t/**\n\t * Set value and label for combobox and hidden input\n\t *\n\t * @param {string} val\n\t * @param {string} label\n\t */\n\tpf.ComboBoxInput.prototype.setValueAndLabel = function(val, label) {\n\t\tvar hiddenInput = this.getHiddenInput();\n\t\t$(hiddenInput).val(val);\n\t\tthis.setValue(label);\n\t\tthis.setTitle(label);\n\t\tthis.$input.attr('data-value', val); // required as reference\n\t\tthis.$input.attr('data-label', label); // required as reference\n\t\tvar stringType = (val == label) ? 'value' : 'label';\n\t\tthis.updateStringType(stringType);\n\t};\n\n\t/**\n\t * Override default to create options in dropdown\n\t * Allow for values, labels, highlighted text and boolean 'disabled'\n\t *\n\t * @param {Object[]} options\n\t * @return {OO.ui.Widget}\n\t */\n\tpf.ComboBoxInput.prototype.setOptions = function(options) {\n\t\tthis.getMenu()\n\t\t\t.clearItems()\n\t\t\t.addItems(options.map(function(opt) {\n\t\t\t\tvar isDisabled = (opt.disabled !== undefined) ? opt.disabled : false;\n\t\t\t\tvar label = (opt.label !== undefined) ? opt.label : opt.data;\n\t\t\t\tvar highlighted = (opt.highlighted !== undefined) ? opt.highlighted : label;\n\t\t\t\treturn new OO.ui.MenuOptionWidget({\n\t\t\t\t\tdata: opt.data,\n\t\t\t\t\tlabel: highlighted,\n\t\t\t\t\ttitle: label,\n\t\t\t\t\tdisabled: isDisabled\n\t\t\t\t});\n\t\t\t}));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Allow for distinct styling of labels and values\n\t * Assume 'label' when value and label are not identical\n\t * Not fully reality-proof as displaytitle may be\n\t * identical with pagename\n\t *\n\t * @param {string} newType\n\t */\n\tpf.ComboBoxInput.prototype.updateStringType = function(newType) {\n\t\tvar className = 'pf-string-type--' + newType;\n\t\t// The following classes are used here:\n\t\t// * pf-string-type--label\n\t\t// * pf-string-type--value\n\t\tthis.$input.removeClass([ 'pf-string-type--label', 'pf-string-type--value' ]).addClass([ className ]);\n\t\tthis.setInputAttribute('data-string-type', newType);\n\t};\n\n\tpf.ComboBoxInput.prototype.adjustWidth = function() {\n\t\tvar suggWidth = this.getValue().length * 11;\n\t\tthis.$element.css(\"width\", \"100%\");\n\t\tvar maxWidth = parseInt(this.$element.css(\"width\"));\n\t\tvar newWidth = (suggWidth >= maxWidth) ? maxWidth : suggWidth;\n\t\tthis.$element.css(\"width\", newWidth);\n\t};\n\n}(jQuery, mediaWiki, pageforms));\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_CreateClass.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_CreateForm.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_CreateProperty.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_CreateTemplate.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_FullCalendar.js","messages":[{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":124,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":124,"endColumn":32},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":124,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":124,"endColumn":32},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":128,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":128,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":128,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":128,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":132,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":132,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":132,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":132,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":157,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":157,"endColumn":32},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":157,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":157,"endColumn":32},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":161,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":161,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":161,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":161,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":165,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":165,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":165,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":165,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":172,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":172,"endColumn":32},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":172,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":172,"endColumn":32},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":176,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":176,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":176,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":176,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":180,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":180,"endColumn":40},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":180,"column":19,"nodeType":"MemberExpression","messageId":"forbidden","endLine":180,"endColumn":40},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":270,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":270,"endColumn":41},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":270,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":270,"endColumn":41},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":272,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":272,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":272,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":272,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":279,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":279,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":279,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":279,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":281,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":281,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":281,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":281,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":290,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":290,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":290,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":290,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":299,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":299,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":299,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":299,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":308,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":308,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":308,"column":17,"nodeType":"MemberExpression","messageId":"forbidden","endLine":308,"endColumn":49},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":623,"column":11,"nodeType":"CallExpression","endLine":623,"endColumn":43},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":754,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":754,"endColumn":24},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":754,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":754,"endColumn":24},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":764,"column":18,"nodeType":"MemberExpression","messageId":"forbidden","endLine":764,"endColumn":31},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":764,"column":18,"nodeType":"MemberExpression","messageId":"forbidden","endLine":764,"endColumn":31},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":771,"column":52,"nodeType":"MemberExpression","messageId":"forbidden","endLine":771,"endColumn":65},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":771,"column":52,"nodeType":"MemberExpression","messageId":"forbidden","endLine":771,"endColumn":65},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":779,"column":54,"nodeType":"MemberExpression","messageId":"forbidden","endLine":779,"endColumn":67},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":779,"column":54,"nodeType":"MemberExpression","messageId":"forbidden","endLine":779,"endColumn":67},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":780,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":780,"endColumn":43},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":780,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":780,"endColumn":43},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":790,"column":51,"nodeType":"MemberExpression","messageId":"forbidden","endLine":790,"endColumn":64},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":790,"column":51,"nodeType":"MemberExpression","messageId":"forbidden","endLine":790,"endColumn":64},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":791,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":791,"endColumn":43},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":791,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":791,"endColumn":43},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":826,"column":11,"nodeType":"CallExpression","endLine":826,"endColumn":43},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1083,"column":12,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1083,"endColumn":41},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1083,"column":12,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1083,"endColumn":41},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1084,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1084,"endColumn":42},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1084,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1084,"endColumn":42},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1086,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1086,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1086,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1086,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1088,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1088,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1088,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1088,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1124,"column":12,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1124,"endColumn":41},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1124,"column":12,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1124,"endColumn":41},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1125,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1125,"endColumn":42},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1125,"column":13,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1125,"endColumn":42},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1127,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1127,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1127,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1127,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1129,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1129,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1129,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1129,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1131,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1131,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1131,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1131,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1133,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1133,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1133,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1133,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1135,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1135,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1135,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1135,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1137,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1137,"endColumn":49},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1137,"column":20,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1137,"endColumn":49},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1157,"column":14,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1157,"endColumn":43},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1157,"column":14,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1157,"endColumn":43},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1157,"column":71,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1157,"endColumn":100},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1157,"column":71,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1157,"endColumn":100},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1171,"column":14,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1171,"endColumn":43},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1171,"column":14,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1171,"endColumn":43}],"suppressedMessages":[{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":193,"column":5,"nodeType":"CallExpression","endLine":193,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":195,"column":7,"nodeType":"CallExpression","endLine":195,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":196,"column":7,"nodeType":"CallExpression","endLine":196,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":197,"column":7,"nodeType":"CallExpression","endLine":197,"endColumn":50,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":205,"column":5,"nodeType":"CallExpression","endLine":205,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":207,"column":7,"nodeType":"CallExpression","endLine":207,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":208,"column":7,"nodeType":"CallExpression","endLine":208,"endColumn":51,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":209,"column":7,"nodeType":"CallExpression","endLine":209,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":210,"column":7,"nodeType":"CallExpression","endLine":210,"endColumn":52,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":211,"column":7,"nodeType":"CallExpression","endLine":211,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":212,"column":7,"nodeType":"CallExpression","endLine":212,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":218,"column":16,"nodeType":"CallExpression","endLine":218,"endColumn":63,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":219,"column":44,"nodeType":"CallExpression","endLine":219,"endColumn":92,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":220,"column":18,"nodeType":"CallExpression","endLine":220,"endColumn":64,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":221,"column":16,"nodeType":"CallExpression","endLine":221,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":222,"column":44,"nodeType":"CallExpression","endLine":222,"endColumn":90,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":223,"column":18,"nodeType":"CallExpression","endLine":223,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":225,"column":16,"nodeType":"CallExpression","endLine":225,"endColumn":63,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":226,"column":8,"nodeType":"CallExpression","endLine":226,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":227,"column":18,"nodeType":"CallExpression","endLine":227,"endColumn":64,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":228,"column":16,"nodeType":"CallExpression","endLine":228,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":229,"column":8,"nodeType":"CallExpression","endLine":229,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":230,"column":18,"nodeType":"CallExpression","endLine":230,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":232,"column":11,"nodeType":"CallExpression","endLine":232,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":233,"column":9,"nodeType":"CallExpression","endLine":233,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":234,"column":9,"nodeType":"CallExpression","endLine":234,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":235,"column":9,"nodeType":"CallExpression","endLine":235,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":236,"column":9,"nodeType":"CallExpression","endLine":236,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":237,"column":9,"nodeType":"CallExpression","endLine":237,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":238,"column":23,"nodeType":"CallExpression","endLine":238,"endColumn":70,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":239,"column":11,"nodeType":"CallExpression","endLine":239,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":240,"column":11,"nodeType":"CallExpression","endLine":240,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":241,"column":23,"nodeType":"CallExpression","endLine":241,"endColumn":68,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":242,"column":11,"nodeType":"CallExpression","endLine":242,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":243,"column":11,"nodeType":"CallExpression","endLine":243,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":621,"column":5,"nodeType":"CallExpression","endLine":621,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":652,"column":6,"nodeType":"CallExpression","endLine":652,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":653,"column":6,"nodeType":"CallExpression","endLine":653,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":655,"column":7,"nodeType":"CallExpression","endLine":655,"endColumn":50,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":657,"column":7,"nodeType":"CallExpression","endLine":657,"endColumn":50,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":684,"column":6,"nodeType":"CallExpression","endLine":684,"endColumn":52,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":685,"column":6,"nodeType":"CallExpression","endLine":685,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":687,"column":7,"nodeType":"CallExpression","endLine":687,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":689,"column":7,"nodeType":"CallExpression","endLine":689,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":691,"column":6,"nodeType":"CallExpression","endLine":691,"endColumn":50,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":692,"column":6,"nodeType":"CallExpression","endLine":692,"endColumn":51,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":694,"column":7,"nodeType":"CallExpression","endLine":694,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":696,"column":7,"nodeType":"CallExpression","endLine":696,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":757,"column":9,"nodeType":"CallExpression","endLine":757,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":759,"column":9,"nodeType":"CallExpression","endLine":759,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":762,"column":8,"nodeType":"CallExpression","endLine":762,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":765,"column":7,"nodeType":"CallExpression","endLine":765,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":769,"column":9,"nodeType":"CallExpression","endLine":769,"endColumn":59,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":775,"column":25,"nodeType":"CallExpression","endLine":775,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":777,"column":9,"nodeType":"CallExpression","endLine":777,"endColumn":38,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":783,"column":11,"nodeType":"CallExpression","endLine":783,"endColumn":59,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":786,"column":10,"nodeType":"CallExpression","endLine":786,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":802,"column":8,"nodeType":"CallExpression","endLine":802,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":824,"column":5,"nodeType":"CallExpression","endLine":824,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":78,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Code to integrate the FullCalendar JavaScript library into Page Forms.\n *\n * @author Priyanshu Varshney\n */\n/* global moment */\n/* eslint-disable no-jquery/no-sizzle */\n( function( $, mw, pf ) {\n\t'use strict';\n\n\t$( '.pfFullCalendarJS' ).each( function() {\n\n\t\t$( '#fullCalendarLoading' ).css(\"display\", \"block\");\n\n\t\t// This counter is used to assign unique ids to the calendar events.\n\t\t// If the event is deleted, we lose that unique id and can't be used gain.\n\t\tvar counter = 0;\n\t\tvar monthNames = mw.config.get('monthMessages');\n\t\t// Stuff from PF_FormPrinter.php\n\t\tvar calendarParams = mw.config.get( 'wgPageFormsCalendarParams' );\n\t\tvar calendarGridValues = mw.config.get( 'wgPageFormsCalendarValues' );\n\t\tvar calendarHTML = mw.config.get('wgPageFormsCalendarHTML');\n\n\t\tvar $fcDiv = $( this );\n\t\tvar calendarId = $fcDiv.attr( 'id' );\n\t\tvar templateName = $fcDiv.attr( 'template-name' );\n\t\tvar eventTitleField = $fcDiv.attr( 'title-field' );\n\t\tvar eventDateField = $fcDiv.attr( 'event-date-field' );\n\t\tvar eventStartDateField = $fcDiv.attr( 'event-start-date-field' );\n\t\tvar eventEndDateField = $fcDiv.attr( 'event-end-date-field' );\n\t\tvar flagOneDayEvent = true;\n\t\tvar pageLoaded = false;\n\t\tvar isEventEndDateTime = false;\n\t\tvar isEventStartTime = false;\n\n\t\tif( eventDateField === undefined ) {\n\n\t\t\tflagOneDayEvent = false;\n\t\t}\n\n\t\tvar fieldType=[];\n\t\tvar englishMonthNames = [ 'January', 'February',\n\t\t\t'March', 'April', 'May', 'June', 'July',\n\t\t\t'August', 'September', 'October', 'November',\n\t\t\t'December' ];\n\n\t\t// From here the game begins - getting the form HTML to be used as the popup form -\n\t\t// for the calendar interface\n\t\tvar formHtml = calendarHTML[templateName];\n\t\tvar popup = '<form id=\"popupForm\">';\n\t\tvar deleteButton = '<button id=\"event_delete\" class = \"delete-event-button\" name=\"data\" type=\"button\" >' + mw.msg('pf-calendar-deleteevent') + '</button>';\n\t\tvar createButton = '<button id=\"form_submit\" class = \"submit-event-button\" name=\"data\" type=\"button\" >' + mw.msg('pf-calendar-createevent') + '</button>';\n\t\tvar updateButton = '<button id=\"form_submit\" class = \"submit-event-button\" name=\"data\" type=\"button\" >' + mw.msg('pf-calendar-updateevent') + '</button>';\n\t\tpopup += formHtml;\n\t\tvar createEventPopup = popup + createButton;\n\t\tvar updateEventPopup = popup + updateButton;\n\t\tvar suitableForCalendar = true;\n\t\tvar calendarIdSelector = '#' + calendarId;\n\t\tvar events = [], data = [], dateFields = [], dateStartFields = [], dateEndFields = [], eventsNoDate = [], checkboxesNum = [];\n\t\tvar segment, dateSegment, yearFC, monthFC, dateFC,\n\t\t\ttimeSegment, hourFC, minuteFC, secondFC, ampm24h,\n\t\t\tdateEntry, monthEntry, yearEntry, hourEntry,\n\t\t\tminuteEntry, secondEntry, ampm24hEntry, regularEntry,\n\t\t\teventData, preEventData, currParam, temp, titleIndex, monthIndex,\n\t\t\teventDate, eventDateDay,eventDateYear, eventDateMonth, eventDateHour,\n\t\t\teventStartDate, eventEndDate , eventDateMinute, eventDateSecond, eventDateAmPm24h, reserveDate, idForm,\n\t\t\teventStartDateDay, eventStartDateYear, eventStartDateMonth, eventStartDateHour,\n\t\t\teventStartDateMinute, eventStartDateSecond, eventStartDateAmPm24;\n\t\tvar currentEndDateMoment;\n\t\tvar checkboxesValues = [];\n\t\tvar listboxValues = [];\n\t\tvar tokensProto, comboboxProto, result, eventTemplateName, parameterName, eventContents, allEvents,\n\t\t\tdateElement, nextDate, formatted, i, j;\n\n\t\tvar autoFillDay = templateName + '[cf][' + eventDateField + '][day]',\n\t\t\tautoFillMonth = templateName + '[cf][' + eventDateField + '][month]',\n\t\t\tautoFillYear = templateName + '[cf][' + eventDateField + '][year]',\n\t\t\tautoFillHour = templateName+'[cf]['+ eventDateField + '][hour]',\n\t\t\tautoFillMinute = templateName+'[cf]['+ eventDateField + '][minute]',\n\t\t\tautoFillSecond = templateName+'[cf]['+ eventDateField + '][second]',\n\t\t\tautoFillAmPm24h = templateName+'[cf]['+ eventDateField + '][ampm24h]',\n\t\t\tautoFillStartDay = templateName + '[cf][' + eventStartDateField + '][day]',\n\t\t\tautoFillStartMonth = templateName + '[cf][' + eventStartDateField + '][month]',\n\t\t\tautoFillStartYear = templateName + '[cf][' + eventStartDateField + '][year]',\n\t\t\tautoFillEndDay = templateName + '[cf][' + eventEndDateField + '][day]',\n\t\t\tautoFillEndMonth = templateName + '[cf][' + eventEndDateField + '][month]',\n\t\t\tautoFillEndYear = templateName + '[cf][' + eventEndDateField + '][year]',\n\t\t\tautoFillStartHour = templateName+'[cf]['+ eventStartDateField + '][hour]',\n\t\t\tautoFillStartMinute = templateName+'[cf]['+ eventStartDateField + '][minute]',\n\t\t\tautoFillStartSecond = templateName+'[cf]['+ eventStartDateField + '][second]',\n\t\t\tautoFillStartAmPm24h = templateName+'[cf]['+ eventStartDateField + '][ampm24h]',\n\t\t\tautoFillEndHour = templateName+'[cf]['+ eventEndDateField + '][hour]',\n\t\t\tautoFillEndMinute = templateName+'[cf]['+ eventEndDateField + '][minute]',\n\t\t\tautoFillEndSecond = templateName+'[cf]['+ eventEndDateField + '][second]',\n\t\t\tautoFillEndAmPm24h = templateName+'[cf]['+ eventEndDateField + '][ampm24h]';\n\t\tfor( i = 0; i<calendarParams[templateName].length; i++ ) {\n\t\t\tfieldType[calendarParams[templateName][i].name]=calendarParams[templateName][i].type;\n\t\t}\n\n\t\tif( fieldType[eventStartDateField] === \"datetime\" || fieldType[eventDateField] === \"datetime\" ) {\n\t\t\tisEventStartTime = true;\n\t\t}\n\n\t\tif( fieldType[eventEndDateField] === \"datetime\") {\n\t\t\tisEventEndDateTime = true;\n\t\t}\n\n\t\tfunction saveData( flag ) {\n\t\t\tif(flag === 'single' ) {\n\t\t\t\tdata = $('#popupForm').serializeArray();\n\t\t\t\ttitleIndex = -1;\n\t\t\t\tdateFields = [];\n\t\t\t\teventDate = '';\n\t\t\t\tfor(j=0;j<data.length;j++){\n\t\t\t\t\tresult = data[j].name.split(\"[\");\n\t\t\t\t\teventTemplateName = result[0];\n\t\t\t\t\tparameterName = result[2].split(\"]\")[0];\n\t\t\t\t\tif( parameterName === eventTitleField ) {\n\t\t\t\t\t\tif( titleIndex === -1 ) {\n\t\t\t\t\t\t\ttitleIndex = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( parameterName === eventDateField ) {\n\t\t\t\t\t\tdateFields.push({'name':data[j].name,'value':data[j].value});\n\t\t\t\t\t\tif( data[j].name.includes('second') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '59';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('hour') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '23';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('minute') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '59';\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} else if ( flag === 'multiple' ) {\n\t\t\t\tdata = $('#popupForm').serializeArray();\n\t\t\t\ttitleIndex = -1;\n\t\t\t\tdateStartFields = [];\n\t\t\t\tdateEndFields = [];\n\t\t\t\teventStartDate = '';\n\t\t\t\teventEndDate = '';\n\t\t\t\tfor(j=0;j<data.length;j++) {\n\t\t\t\t\tresult = data[j].name.split(\"[\");\n\t\t\t\t\teventTemplateName = result[0];\n\t\t\t\t\tparameterName = result[2].split(\"]\")[0];\n\n\t\t\t\t\tif( parameterName === eventTitleField ) {\n\t\t\t\t\t\tif( titleIndex === -1 ) {\n\t\t\t\t\t\t\ttitleIndex = j;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( parameterName === eventStartDateField ) {\n\t\t\t\t\t\tdateStartFields.push({'name':data[j].name,'value':data[j].value});\n\t\t\t\t\t\tif( data[j].name.includes('second') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '00';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('hour') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '00';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('minute') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '00';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( parameterName === eventEndDateField ) {\n\t\t\t\t\t\tdateEndFields.push({'name':data[j].name,'value':data[j].value});\n\t\t\t\t\t\tif( data[j].name.includes('second') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '59';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('hour') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '23';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( data[j].name.includes('minute') ) {\n\t\t\t\t\t\t\tif( data[j].value === '' ) {\n\t\t\t\t\t\t\t\tdata[j].value = '59';\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}\n\t\t}\n\t\t// Checks if the date field parts are empty or not - if not,\n\t\t// don't allow the user to submit\n\t\tfunction checkAndSave( flag ) {\n\t\t\tif( flag === 'single' ) {\n\t\t\t\t$( ':input' ).on('keyup',function() {\n\t\t\t\t\tif(\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillDay + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillYear + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillMonth + '\"]' ).val() === ''\n\t\t\t\t\t) {\n\t\t\t\t\t\t$(\"#form_submit\").attr(\"disabled\", \"disabled\").css({'background-color':'#c8ccd1','color':'#fff'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(\"#form_submit\").removeAttr(\"disabled\").css({'background-color': '#3366CC','color': 'white'});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if ( flag === 'multiple' ) {\n\t\t\t\t$( ':input' ).on('keyup',function() {\n\t\t\t\t\tif(\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartDay + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndDay + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartYear + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndYear + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartMonth + '\"]' ).val() === '' ||\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndMonth + '\"]' ).val() === ''\n\t\t\t\t\t) {\n\t\t\t\t\t\t$(\"#form_submit\").attr(\"disabled\", \"disabled\").css({'background-color':'#c8ccd1','color':'#fff'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar date1, date2;\n\t\t\t\t\t\tif( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\tdate1 = $( ':input[name=\"' + autoFillStartYear + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\tpadNumber(englishMonthNames.indexOf($( ':input[name=\"' + autoFillStartMonth + '\"]' ).val())) + '-' +\n\t\t\t\t\t\t\tpadNumber($( ':input[name=\"' + autoFillStartDay + '\"]' ).val());\n\t\t\t\t\t\t\tdate2 = $( ':input[name=\"' + autoFillEndYear + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\tpadNumber(englishMonthNames.indexOf($( ':input[name=\"' + autoFillEndMonth + '\"]' ).val())) + '-' +\n\t\t\t\t\t\t\tpadNumber($( ':input[name=\"' + autoFillEndDay + '\"]' ).val());\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdate1 = $( ':input[name=\"' + autoFillStartYear + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartMonth + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\tpadNumber($( ':input[name=\"' + autoFillStartDay + '\"]' ).val());\n\t\t\t\t\t\t\tdate2 = $( ':input[name=\"' + autoFillEndYear + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndMonth + '\"]' ).val() + '-' +\n\t\t\t\t\t\t\tpadNumber($( ':input[name=\"' + autoFillEndDay + '\"]' ).val());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( $( ':input[name=\"' + autoFillStartHour + '\"]' ).val() !== undefined &&\n\t\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartMinute + '\"]' ).val() !== undefined &&\n\t\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartSecond + '\"]' ).val() !== undefined &&\n\t\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndHour + '\"]' ).val() !== undefined &&\n\t\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndMinute + '\"]' ).val() !== undefined &&\n\t\t\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndSecond + '\"]' ).val() !== undefined) {\n\t\t\t\t\t\t\tdate1 += ' ' + $( ':input[name=\"' + autoFillStartHour + '\"]' ).val() + ':'\n\t\t\t\t\t\t\t\t+ $( ':input[name=\"' + autoFillStartMinute + '\"]' ).val() + ':'\n\t\t\t\t\t\t\t\t+ $( ':input[name=\"' + autoFillStartSecond + '\"]' ).val();\n\t\t\t\t\t\t\tdate2 += ' ' + $( ':input[name=\"' + autoFillEndHour + '\"]' ).val() + ':'\n\t\t\t\t\t\t\t\t+ $( ':input[name=\"' + autoFillEndMinute + '\"]' ).val() + ':'\n\t\t\t\t\t\t\t\t+ $( ':input[name=\"' + autoFillEndSecond + '\"]' ).val();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdate1 = moment(date1);\n\t\t\t\t\t\tdate2 = moment(date2);\n\t\t\t\t\t\tif ( date1 <= date2 ) {\n\t\t\t\t\t\t\t$(\"#form_submit\").removeAttr(\"disabled\").css({'background-color': '#3366CC','color': 'white'});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$(\"#form_submit\").attr(\"disabled\", \"disabled\").css({'background-color':'#c8ccd1','color':'#fff'});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction resetDateAndTime() {\n\t\t\teventDateDay = '01';\n\t\t\teventDateYear = '2010';\n\t\t\teventDateMonth = '00';\n\t\t\teventDateHour = '00';\n\t\t\teventDateMinute = '00';\n\t\t\teventDateSecond = '00';\n\t\t\teventDateAmPm24h = \"\";\n\t\t}\n\n\t\t// flag : 0 - one day , 1 - start, 2 - end\n\t\tfunction setDateAndTime( arrData, flag ) {\n\t\t\tfor( dateEntry=0; dateEntry < arrData.length ; dateEntry++ ) {\n\t\t\t\tif( arrData[dateEntry].name.includes('year') ) {\n\t\t\t\t\teventDateYear = arrData[dateEntry].value;\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('month') ) {\n\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\tmonthIndex = englishMonthNames.indexOf( arrData[dateEntry].value );\n\t\t\t\t\t\teventDateMonth = padNumber(monthIndex + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\teventDateMonth = padNumber(arrData[dateEntry].value);\n\t\t\t\t\t}\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('day') ) {\n\t\t\t\t\teventDateDay = padNumber( arrData[dateEntry].value ) ;\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('hour') ) {\n\t\t\t\t\teventDateHour = arrData[dateEntry].value ;\n\t\t\t\t\tif( eventDateHour === '' ) {\n\t\t\t\t\t\tif ( flag === '1' ) {\n\t\t\t\t\t\t\teventDateHour = '00';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teventDateHour = '23';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('minute') ) {\n\t\t\t\t\teventDateMinute = arrData[dateEntry].value ;\n\t\t\t\t\tif( eventDateMinute === '' ) {\n\t\t\t\t\t\tif ( flag === '1' ) {\n\t\t\t\t\t\t\teventDateMinute = '00';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teventDateMinute = '59';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('second') ) {\n\t\t\t\t\teventDateSecond = arrData[dateEntry].value ;\n\t\t\t\t\tif( eventDateSecond === '' ) {\n\t\t\t\t\t\tif ( flag === '1' ) {\n\t\t\t\t\t\t\teventDateSecond = '00';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teventDateSecond = '59';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ( arrData[dateEntry].name.includes('ampm24h') ) {\n\t\t\t\t\teventDateAmPm24h = arrData[dateEntry].value ;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkDateTime( arrData, date ) {\n\t\t\tif( arrData.length === 7 ) {\n\t\t\t\tif( eventDateAmPm24h === \"\" ) {\n\t\t\t\t\tdate = date + 'T' + padNumber( eventDateHour ) + ':' + padNumber( eventDateMinute ) + ':' + padNumber( eventDateSecond );\n\t\t\t\t} else if ( eventDateAmPm24h === \"AM\" ) {\n\t\t\t\t\tif( eventDateHour === \"12\" ) {\n\t\t\t\t\t\tdate = date + 'T' + '00' + ':' + padNumber( eventDateMinute ) + ':' + padNumber( eventDateSecond );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdate = date + 'T' + padNumber( eventDateHour ) + ':' + padNumber( eventDateMinute ) + ':' + padNumber( eventDateSecond );\n\t\t\t\t\t}\n\t\t\t\t} else if ( eventDateAmPm24h === \"PM\" ) {\n\t\t\t\t\tif( eventDateHour === \"12\" ) {\n\t\t\t\t\t\tdate = date + 'T' + '12' + ':' + padNumber( eventDateMinute ) + ':' + padNumber( eventDateSecond );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdate = date + 'T' + padNumber( parseInt(eventDateHour) + 12 ) + ':' + padNumber( eventDateMinute ) + ':' + padNumber( eventDateSecond );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t}\n\n\t\t// Check if the date/datetime formats are suitable for the\n\t\t// calendar eventStartDate - if not, these are not proper\n\t\t// events, and they will be stored in eventsNoDate.\n\t\tfunction isValidDate(dateString) {\n\t\t\tif( mw.config.get( 'wgAmericanDates' ) ) {\n\t\t\t\tvar reg = /^(January?|February?|March?|April?|May|June?|July?|August?|September?|October?|November?|December?)\\s\\d{1,2},\\s\\d{4}$/;\n\t\t\t\tif(!dateString.match(reg)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdateString = dateString.replace('/','-');\n\t\t\t\tdateString = dateString.replace('/','-');\n\t\t\t\tvar regEx = /^\\d{4}-\\d{2}-\\d{2}$/;\n\t\t\t\tif(!dateString.match(regEx)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} // Invalid format\n\t\t\t\tvar d = new Date(dateString);\n\t\t\t\tvar dNum = d.getTime();\n\t\t\t\tif(!dNum && dNum !== 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t} // NaN value, Invalid date\n\t\t\t\treturn d.toISOString().slice(0,10) === dateString;\n\t\t\t}\n\t\t}\n\n\t\tfunction dateTimeValidation(dateString) {\n\t\t\tif( mw.config.get( 'wgAmericanDates' ) ) {\n\t\t\t\tvar reg = /^(January?|February?|March?|April?|May|June?|July?|August?|September?|October?|November?|December?)\\s\\d{1,2},\\s\\d{4}\\s\\d{2}:\\d{2}:\\d{2}$/;\n\t\t\t\tif ( !dateString.match( reg ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdateString = dateString.replace('/','-');\n\t\t\t\tdateString = dateString.replace('/','-');\n\t\t\t\tvar regEx = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/;\n\t\t\t\tif ( !dateString.match( regEx ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t} // Invalid format\n\t\t\t\treturn !!new Date(dateString).getTime();\n\t\t\t}\n\t\t}\n\n\t\tfunction addDays(myDate,days) {\n\t\t\treturn new Date(myDate.getTime() + days*24*60*60*1000);\n\t\t}\n\n\t\tfunction padNumber(number) {\n\t\t\tvar string = '' + number;\n\t\t\tstring = string.length < 2 ? '0' + string : string;\n\t\t\treturn string;\n\t\t}\n\n\t\t$( calendarIdSelector ).fullCalendar({\n\n\t\t\teditable: true,\n\t\t\teventLimit: true, // when too many events in a day, show the popover\n\t\t\theader: {\n\t\t\t\tleft: 'prev,next today',\n\t\t\t\tcenter: 'title',\n\t\t\t\tright: 'month,agendaWeek,agendaDay'\n\t\t\t},\n\t\t\tnavLinks: true, // can click day/week names to navigate views\n\t\t\tselectable: true,\n\t\t\tselectHelper: true,\n\t\t\tnextDayThreshold: \"00:00:00\",\n\n\t\t\t// Populate the calendar with the already saved events - if any\n\t\t\tevents: function( start, end, timezone, callback ) {\n\t\t\t\tvar calendarValues = calendarGridValues[templateName];\n\t\t\t\tfor( i = 0; i < calendarValues.length; i++ ) {\n\t\t\t\t\tdata = [];\n\t\t\t\t\teventData = calendarValues[i];\n\t\t\t\t\tfor( j=0; j<calendarParams[templateName].length;j++ ) {\n\t\t\t\t\t\tcurrParam = calendarParams[templateName][j];\n\t\t\t\t\t\ttemp = eventData[currParam.name];\n\t\t\t\t\t\tif( fieldType[currParam.name] === 'date' && isValidDate(temp) === false ) {\n\t\t\t\t\t\t\teventsNoDate.push(eventData);\n\t\t\t\t\t\t\tsuitableForCalendar = false;\n\t\t\t\t\t\t} else if ( fieldType[currParam.name] === 'datetime' && dateTimeValidation(temp) === false ) {\n\t\t\t\t\t\t\teventsNoDate.push(eventData);\n\t\t\t\t\t\t\tsuitableForCalendar = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(suitableForCalendar === true ) {\n\t\t\t\t\t\tfor( j=0; j<calendarParams[templateName].length;j++ ) {\n\t\t\t\t\t\t\tcurrParam = calendarParams[templateName][j];\n\t\t\t\t\t\t\ttemp = eventData[currParam.name];\n\t\t\t\t\t\t\tif( fieldType[currParam.name] === 'date' ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get( 'wgAmericanDates' ) ) { //check for date-style format.\n\t\t\t\t\t\t\t\t\tdateSegment = temp.split(' ');\n\t\t\t\t\t\t\t\t\tyearFC = dateSegment[2];\n\t\t\t\t\t\t\t\t\tmonthFC = dateSegment[0];\n\t\t\t\t\t\t\t\t\tdateFC = padNumber(dateSegment[1].split(',')[0]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdateSegment = temp.split('/');\n\t\t\t\t\t\t\t\t\tyearFC = dateSegment[0];\n\t\t\t\t\t\t\t\t\tmonthFC = dateSegment[1];\n\t\t\t\t\t\t\t\t\tdateFC = padNumber(dateSegment[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdateEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName + '[cf]['+currParam.name+'][day]',\n\t\t\t\t\t\t\t\t\t'value': dateFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( dateEntry );\n\t\t\t\t\t\t\t\tmonthEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName + '[cf]['+currParam.name+'][month]',\n\t\t\t\t\t\t\t\t\t'value': monthFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( monthEntry );\n\t\t\t\t\t\t\t\tyearEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName + '[cf]['+currParam.name+'][year]',\n\t\t\t\t\t\t\t\t\t'value': yearFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( yearEntry );\n\t\t\t\t\t\t\t} else if ( fieldType[currParam.name] === \"datetime\" ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\t\t\t\tdateSegment = temp.split(' ');\n\t\t\t\t\t\t\t\t\tyearFC = dateSegment[2];\n\t\t\t\t\t\t\t\t\tmonthFC = dateSegment[0];\n\t\t\t\t\t\t\t\t\tdateFC = padNumber(dateSegment[1].split(',')[0]);\n\t\t\t\t\t\t\t\t\ttimeSegment = dateSegment[3].split(':');\n\t\t\t\t\t\t\t\t\thourFC = timeSegment[0];\n\t\t\t\t\t\t\t\t\tminuteFC = timeSegment[1];\n\t\t\t\t\t\t\t\t\tsecondFC = timeSegment[2];\n\t\t\t\t\t\t\t\t\tampm24h = dateSegment[4];\n\t\t\t\t\t\t\t\t\tif( ampm24h === undefined ) {\n\t\t\t\t\t\t\t\t\t\tampm24h = '';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsegment = temp.split(' '); // will be used\n\t\t\t\t\t\t\t\t\tdateSegment = segment[0].split('/');\n\t\t\t\t\t\t\t\t\ttimeSegment = segment[1].split(':');\n\t\t\t\t\t\t\t\t\tyearFC = dateSegment[0];\n\t\t\t\t\t\t\t\t\tmonthFC = dateSegment[1];\n\t\t\t\t\t\t\t\t\tdateFC = padNumber(dateSegment[2]);\n\t\t\t\t\t\t\t\t\thourFC = timeSegment[0];\n\t\t\t\t\t\t\t\t\tminuteFC = timeSegment[1];\n\t\t\t\t\t\t\t\t\tsecondFC = timeSegment[2];\n\t\t\t\t\t\t\t\t\tampm24h = segment[2];\n\t\t\t\t\t\t\t\t\tif( ampm24h === undefined ) {\n\t\t\t\t\t\t\t\t\t\tampm24h = '';\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\tdateEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][day]',\n\t\t\t\t\t\t\t\t\t'value': dateFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( dateEntry );\n\t\t\t\t\t\t\t\tmonthEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][month]',\n\t\t\t\t\t\t\t\t\t'value': monthFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( monthEntry );\n\t\t\t\t\t\t\t\tyearEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][year]',\n\t\t\t\t\t\t\t\t\t'value': yearFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push(yearEntry);\n\t\t\t\t\t\t\t\thourEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][hour]',\n\t\t\t\t\t\t\t\t\t'value': hourFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( hourEntry );\n\t\t\t\t\t\t\t\tminuteEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][minute]',\n\t\t\t\t\t\t\t\t\t'value': minuteFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( minuteEntry );\n\t\t\t\t\t\t\t\tsecondEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][second]',\n\t\t\t\t\t\t\t\t\t'value': secondFC\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( secondEntry );\n\t\t\t\t\t\t\t\tampm24hEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+'][ampm24h]',\n\t\t\t\t\t\t\t\t\t'value': ampm24h\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( ampm24hEntry );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tregularEntry = {\n\t\t\t\t\t\t\t\t\t'name': templateName+'[cf]['+currParam.name+']',\n\t\t\t\t\t\t\t\t\t'value':temp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdata.push( regularEntry );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tif( flagOneDayEvent === true ) {\n\t\t\t\t\t\ttitleIndex = -1;\n\t\t\t\t\t\tdateFields = [];\n\t\t\t\t\t\teventDate = '';\n\t\t\t\t\t\tfor(j=0;j<data.length;j++){\n\t\t\t\t\t\t\tresult = data[j].name.split(\"[\");\n\t\t\t\t\t\t\teventTemplateName = result[0];\n\t\t\t\t\t\t\tparameterName = result[2].split(\"]\")[0];\n\n\t\t\t\t\t\t\tif ( parameterName === eventTitleField ) {\n\t\t\t\t\t\t\t\tif( titleIndex === -1 ) {\n\t\t\t\t\t\t\t\t\ttitleIndex = j;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( parameterName === eventDateField ) {\n\t\t\t\t\t\t\t\tdateFields.push( {'name':data[j].name, 'value':data[j].value} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateFields );\n\t\t\t\t\t\teventDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventDate;\n\t\t\t\t\t\teventDate = checkDateTime( dateFields, eventDate );\n\t\t\t\t\t\tidForm = eventDate + \"_fc\" + counter;\n\t\t\t\t\t\tpreEventData = {\n\t\t\t\t\t\t\ttitle: data[titleIndex].value,\n\t\t\t\t\t\t\tstart: eventDate,\n\t\t\t\t\t\t\tend: reserveDate + 'T23:59:59',\n\t\t\t\t\t\t\tcontents: data,\n\t\t\t\t\t\t\tid: idForm\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif(!pageLoaded){\n\t\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'renderEvent', preEventData, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttitleIndex = -1;\n\t\t\t\t\t\tdateStartFields = [];\n\t\t\t\t\t\tdateEndFields = [];\n\t\t\t\t\t\teventStartDate = '';\n\t\t\t\t\t\teventEndDate = '';\n\t\t\t\t\t\tfor( j = 0; j < data.length; j++ ){\n\t\t\t\t\t\t\tresult = data[j].name.split(\"[\");\n\t\t\t\t\t\t\teventTemplateName = result[0];\n\t\t\t\t\t\t\tparameterName = result[2].split(\"]\")[0];\n\n\t\t\t\t\t\t\tif ( parameterName === eventTitleField ) {\n\t\t\t\t\t\t\t\tif( titleIndex === -1 ) {\n\t\t\t\t\t\t\t\t\ttitleIndex = j;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( parameterName === eventStartDateField ) {\n\t\t\t\t\t\t\t\tdateStartFields.push({'name': data[j].name, 'value': data[j].value});\n\t\t\t\t\t\t\t} else if ( parameterName === eventEndDateField ) {\n\t\t\t\t\t\t\t\tdateEndFields.push({'name': data[j].name, 'value': data[j].value});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateStartFields );\n\t\t\t\t\t\teventStartDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventStartDate;\n\t\t\t\t\t\teventStartDate = checkDateTime( dateStartFields, eventStartDate );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateEndFields );\n\t\t\t\t\t\teventEndDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventEndDate;\n\t\t\t\t\t\teventEndDate = checkDateTime( dateEndFields, eventEndDate );\n\t\t\t\t\t\tidForm = eventStartDate +\"_fc\"+counter;\n\t\t\t\t\t\tif ( fieldType[eventEndDateField] === 'date' ) {\n\t\t\t\t\t\t\tdateElement = new Date(eventEndDate);\n\t\t\t\t\t\t\tnextDate = new Date(dateElement.setDate(dateElement.getDate() + 1));\n\t\t\t\t\t\t\tformatted = nextDate.getUTCFullYear() + '-' + padNumber(nextDate.getUTCMonth() + 1) + '-' + padNumber(nextDate.getUTCDate());\n\t\t\t\t\t\t\teventEndDate = formatted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpreEventData = {\n\t\t\t\t\t\t\ttitle: eventData[eventTitleField],\n\t\t\t\t\t\t\tstart: eventStartDate,\n\t\t\t\t\t\t\tend: eventEndDate,\n\t\t\t\t\t\t\tcontents: data,\n\t\t\t\t\t\t\tid: idForm\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif(!pageLoaded){\n\t\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'renderEvent', preEventData, true );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsuitableForCalendar = true;\n\t\t\t\t}\n\t\t\t\tcallback(events);\n\t\t\t\tpageLoaded = true;\n\t\t\t},\n\n\t\t\t// Select : JS method to put events on the calendar by selecting\n\t\t\t// one or more dates\n\t\t\tselect: function( start, end ) {\n\t\t\t\t// Open the popup form to allow the user to create the event\n\t\t\t\t$.fancybox.open( createEventPopup + '</form>' );\n\t\t\t\t$(\"[class|='fancybox-close-small']\").attr(\"type\", \"button\");\n\t\t\t\t// Handle token input type\n\t\t\t\t$(':input').each( function() {\n\t\t\t\t\ttokensProto = new pf.select2.tokens();\n\t\t\t\t\tif ( $( this ).hasClass( 'pfTokens' ) ){\n\t\t\t\t\t\ttokensProto.apply( $(this) );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Handling the text with autocomplete\n\t\t\t\t$('#popupForm').find(\".autocompleteInput\").each( function() {\n\t\t\t\t\t$(this).attachAutocomplete();\n\t\t\t\t});\n\t\t\t\t// Handle combobox input type\n\t\t\t\t// $(':input').each( function() {\n\t\t\t\t// \tcomboboxProto = new pf.select2.combobox();\n\t\t\t\t// \tif ( $( this ).hasClass( 'pfComboBox' ) ){\n\t\t\t\t// \t\tcomboboxProto.apply( $(this) );\n\t\t\t\t// \t}\n\t\t\t\t// });\n\n\t\t\t\t// Handle the tree input types\n\t\t\t\t$('#popupForm').find(\".pfTreeInput\").each( function() {\n\t\t\t\t\t$(this).applyJSTree();\n\t\t\t\t});\n\t\t\t\t$('#popupForm').find(\".pfRating\").each( function() {\n\t\t\t\t\t$(this).applyRatingInput();\n\t\t\t\t});\n\t\t\t\t// Check if the event is only one day long\n\t\t\t\t// For current code - it is required to see if the event is one day long or not.\n\t\t\t\t// In future the code can be reduced and this if-else condition can be removed\n\t\t\t\tif ( flagOneDayEvent === true ) {\n\t\t\t\t\tidForm = start.format() + \"_fc\" + counter;\n\t\t\t\t\t// Atuomatically set the event date value\n\t\t\t\t\t$( ':input[name=\"' + autoFillDay + '\"]' ).val( start.format( 'DD' ) );\n\t\t\t\t\t$( ':input[name=\"' + autoFillYear + '\"]' ).val( start.format( 'YYYY' ) );\n\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillMonth + '\"]' ).val( englishMonthNames[parseInt( start.format( 'MM' ) ) -1 ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillMonth + '\"]' ).val( start.format( 'MM' ) );\n\t\t\t\t\t}\n\t\t\t\t\tcheckAndSave( 'single' );\n\t\t\t\t\t// Save all the data of the popup form and set the title, event date and the unique ID of the event\n\t\t\t\t\t$( \"#form_submit\" ).click(function( event ) {\n\t\t\t\t\t\tsaveData( 'single' );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateFields );\n\t\t\t\t\t\teventDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventDate;\n\t\t\t\t\t\teventDate = checkDateTime( dateFields, eventDate );\n\t\t\t\t\t\teventData = {\n\t\t\t\t\t\t\ttitle: data[titleIndex].value,\n\t\t\t\t\t\t\tstart: eventDate,\n\t\t\t\t\t\t\tend: reserveDate + 'T23:59:59',\n\t\t\t\t\t\t\tcontents: data,\n\t\t\t\t\t\t\tid:idForm\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t$( '.fancybox-close-small' ).click();\n\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'renderEvent', eventData, true );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tidForm = start.format() + \"_fc\" + counter;\n\t\t\t\t\tcurrentEndDateMoment = moment(end);\n\t\t\t\t\tcurrentEndDateMoment = currentEndDateMoment.subtract(1 , 'days');\n\t\t\t\t\t$( ':input[name=\"' + autoFillStartDay + '\"]' ).val( Number(start.format( 'DD' )) );\n\t\t\t\t\t$( ':input[name=\"' + autoFillStartYear + '\"]' ).val( start.format( 'YYYY' ) );\n\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartMonth + '\"]' ).val( englishMonthNames[parseInt( start.format( 'MM' ) ) -1 ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillStartMonth + '\"]' ).val( start.format( 'MM' ) );\n\t\t\t\t\t}\n\t\t\t\t\t$( ':input[name=\"' + autoFillEndDay + '\"]' ).val( Number(currentEndDateMoment.format( 'DD' )) );\n\t\t\t\t\t$( ':input[name=\"' + autoFillEndYear + '\"]' ).val( currentEndDateMoment.format( 'YYYY' ) );\n\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndMonth + '\"]' ).val( englishMonthNames[parseInt( currentEndDateMoment.format( 'MM' ) ) -1 ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( ':input[name=\"' + autoFillEndMonth + '\"]' ).val( currentEndDateMoment.format( 'MM' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tcheckAndSave( 'multiple' );\n\t\t\t\t\t$( \"#form_submit\" ).click(function( event ) {\n\t\t\t\t\t\tsaveData( 'multiple' );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateStartFields, '1' );\n\t\t\t\t\t\teventStartDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventStartDate;\n\t\t\t\t\t\teventStartDate = checkDateTime( dateStartFields, eventStartDate );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateEndFields, '2' );\n\t\t\t\t\t\teventEndDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\treserveDate = eventEndDate;\n\t\t\t\t\t\teventEndDate = checkDateTime( dateEndFields, eventEndDate );\n\n\t\t\t\t\t\tif ( fieldType[eventEndDateField] === 'date' ) {\n\t\t\t\t\t\t\tdateElement = new Date(eventEndDate);\n\t\t\t\t\t\t\tnextDate = new Date(dateElement.setDate(dateElement.getDate() + 1));\n\t\t\t\t\t\t\tformatted = nextDate.getUTCFullYear() + '-' + padNumber(nextDate.getUTCMonth() + 1) + '-' + padNumber(nextDate.getUTCDate());\n\t\t\t\t\t\t\teventEndDate = formatted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\teventData = {\n\t\t\t\t\t\t\ttitle: data[titleIndex].value,\n\t\t\t\t\t\t\tstart: eventStartDate,\n\t\t\t\t\t\t\tend: eventEndDate,\n\t\t\t\t\t\t\tresourceEditable:true,\n\t\t\t\t\t\t\tcontents: data,\n\t\t\t\t\t\t\tid:idForm\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\t$( '.fancybox-close-small' ).click();\n\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'renderEvent', eventData, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// // Edit an event placed on the calendar by simply clicking on it\n\t\t\teventClick: function( info ) {\n\t\t\t\tvar content = $( calendarIdSelector ).fullCalendar( 'clientEvents', info.id );\n\t\t\t\tvar formContents = content[0].contents;\n\t\t\t\tvar ratingArr = [];\n\t\t\t\tcheckboxesValues = [];\n\t\t\t\tvar paramName, rateSample = 0;\n\t\t\t\t// Open the popup form and populate it with the values to allow editing\n\t\t\t\t$.fancybox.open( updateEventPopup + deleteButton + '</form>' );\n\t\t\t\t$(\"[class|='fancybox-close-small']\").attr(\"type\", \"button\");\n\n\t\t\t\t$('#popupForm').find(\".pfTreeInput\").each( function() {\n\t\t\t\t\t$(this).applyFancytree();\n\t\t\t\t});\n\n\t\t\t\t// Prepare the popup form for editing\n\t\t\t\tfor( i = 0; i < formContents.length; i++ ) {\n\t\t\t\t\ttemp = formContents[i].name;\n\t\t\t\t\tparamName = temp.split('[')[2].split(']')[0];\n\t\t\t\t\t// If there is a month field, set according to the date format\n\t\t\t\t\tif ( temp.includes('month') ) {\n\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) { //check for date-style format.\n\t\t\t\t\t\t\tif ( englishMonthNames.indexOf( formContents[i].value ) !== - 1 ) {\n\t\t\t\t\t\t\t\t$(':input[name=\"'+temp+'\"]').val( formContents[i].value );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$(':input[name=\"'+temp+'\"]').val( englishMonthNames[ parseInt(formContents[i].value) - 1] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$(':input[name=\"'+temp+'\"]').val(formContents[i].value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( temp.includes('day') ) {\n\t\t\t\t\t\t$(':input[name=\"'+temp+'\"]').val( Number(formContents[i].value) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(fieldType[paramName] === 'radiobutton' || fieldType[paramName] === 'checkbox' || fieldType[paramName] === 'checkboxes' || fieldType[paramName] === 'listbox' ) {\n\t\t\t\t\t\t\tif( fieldType[paramName] === 'radiobutton' ) {\n\t\t\t\t\t\t\t\t$(':input[value=\"' + formContents[i].value + '\"]').attr('checked',true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( fieldType[paramName] === 'checkbox' && !temp.includes('[is_checkbox]')) {\n\t\t\t\t\t\t\t\ttemp = temp.replace('[value]','');\n\t\t\t\t\t\t\t\ttemp = temp.replace('[is_checkbox]','');\n\t\t\t\t\t\t\t\ttemp+='[is_checkbox]';\n\t\t\t\t\t\t\t\tvar checkId1 = ($(':hidden[name=\"'+temp+'\"]')[0].nextElementSibling.id);\n\t\t\t\t\t\t\t\t$('#'+ checkId1).prop('checked',formContents[i].value);\n\t\t\t\t\t\t\t\t$(':hidden[name=\"'+temp+'\"]').attr('value',0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( fieldType[paramName] === 'checkboxes' && !temp.includes('[is_list]')) {\n\t\t\t\t\t\t\t\tif( formContents[i].value.includes(',') ) {\n\t\t\t\t\t\t\t\t\tcheckboxesValues = formContents[i].value.split(', ');\n\t\t\t\t\t\t\t\t\tfor( var p = 0; p<checkboxesValues.length; p++ ) {\n\t\t\t\t\t\t\t\t\t\t$(':input[value=\"' + checkboxesValues[p] + '\"]').attr('checked',true);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t$(':input[value=\"' + formContents[i].value + '\"]').attr('checked',true);\n\t\t\t\t\t\t\t\t\t// checkboxes_values.push(formContents[i].value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( fieldType[paramName] === 'listbox' && !temp.includes('[is_list]')) {\n\t\t\t\t\t\t\t\tif( formContents[i].value.includes(',') ) {\n\t\t\t\t\t\t\t\t\tlistboxValues = formContents[i].value.split(', ');\n\t\t\t\t\t\t\t\t\tfor( var list = 0; list<listboxValues.length; list++ ) {\n\t\t\t\t\t\t\t\t\t\t$('option[value=\"' + listboxValues[list] + '\"]').attr(\"selected\", \"selected\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t$('option[value=\"' + formContents[i].value + '\"]').attr(\"selected\", \"selected\");\n\t\t\t\t\t\t\t\t\t// checkboxes_values.push(form_contents[i].value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$(':input[name=\"'+temp+'\"]').val( formContents[i].value );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( fieldType[paramName] === 'rating' ) {\n\t\t\t\t\t\t\tratingArr.push( formContents[i].value );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// checkboxesNum.push(checkboxes_values);\n\t\t\t\t}\n\t\t\t\t// This is my little experiment to include rating input type to the calendar interface\n\t\t\t\t// This can improve in future version of this file.\n\t\t\t\t// I have saved the rating values in the ratingArr and just filling it in the 'each'\n\t\t\t\t// This may seem like a risky bet..\n\t\t\t\t$('#popupForm').find(\".pfRating\").each( function() {\n\t\t\t\t\t$(this).applyRatingInput( ratingArr[rateSample] );\n\t\t\t\t\trateSample++;\n\t\t\t\t});\n\t\t\t\t// Handling the text with autocomplete\n\t\t\t\t$('#popupForm').find(\".autocompleteInput\").each( function() {\n\t\t\t\t\t$(this).attachAutocomplete();\n\t\t\t\t});\n\n\t\t\t\t// Handling token input type\n\t\t\t\t$(':input').each(function() {\n\t\t\t\t\ttokensProto = new pf.select2.tokens();\n\t\t\t\t\tif ( $( this ).hasClass( 'pfTokens' ) ) {\n\t\t\t\t\t\ttokensProto.apply( $(this) );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// FIXME: This is not yet working correctly - possibly due\n\t\t\t\t// to z-index of fancybox popup or select2\n\t\t\t\t// $(':input').each( function() {\n\t\t\t\t// \tcomboboxProto = new pf.select2.combobox();\n\t\t\t\t// \tif ( $( this ).hasClass( 'pfComboBox' ) ) {\n\t\t\t\t// \t\tcomboboxProto.apply( $(this) );\n\t\t\t\t// \t}\n\t\t\t\t// });\n\t\t\t\t// Delete button for the existing event\n\t\t\t\t$( \"#event_delete\" ).click(function( event ) {\n\t\t\t\t\t$( calendarIdSelector ).fullCalendar('removeEvents',info.id);\n\t\t\t\t\t$( '.fancybox-close-small' ).click();\n\t\t\t\t});\n\n\t\t\t\tif ( flagOneDayEvent === true ) {\n\t\t\t\t\t// Check if the date fields are left empty or not\n\t\t\t\t\tcheckAndSave( 'single' );\n\t\t\t\t\t// Save everything again once the submit button is pressed\n\t\t\t\t\t$( \"#form_submit\" ).click(function( event ) {\n\t\t\t\t\t\tsaveData( 'single' );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateFields );\n\t\t\t\t\t\teventDate = eventDateYear + '-' + padNumber(eventDateMonth) + '-' + padNumber(eventDateDay);\n\t\t\t\t\t\teventDate = checkDateTime( dateFields, eventDate );\n\t\t\t\t\t\tinfo.title = data[titleIndex].value;\n\t\t\t\t\t\tinfo.contents = data;\n\t\t\t\t\t\tinfo.start = eventDate;\n\t\t\t\t\t\t$('.fancybox-close-small').click();\n\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'updateEvent' , info , true );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar end = info.end;\n\t\t\t\t\tvar start = info.start;\n\t\t\t\t\tcheckAndSave( 'multiple' );\n\t\t\t\t\t$( \"#form_submit\" ).click(function( event ) {\n\t\t\t\t\t\tsaveData( 'multiple' );\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateStartFields , '1' );\n\t\t\t\t\t\teventStartDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\teventStartDate = checkDateTime( dateStartFields, eventStartDate );\n\n\t\t\t\t\t\tresetDateAndTime();\n\t\t\t\t\t\tsetDateAndTime( dateEndFields , '2' );\n\t\t\t\t\t\teventEndDate = eventDateYear + '-' + eventDateMonth + '-' + eventDateDay;\n\t\t\t\t\t\teventEndDate = checkDateTime( dateEndFields, eventEndDate );\n\n\t\t\t\t\t\tif ( fieldType[eventEndDateField] === 'date' ) {\n\t\t\t\t\t\t\tdateElement = new Date(eventEndDate);\n\t\t\t\t\t\t\tnextDate = new Date(dateElement.setDate(dateElement.getDate() + 1));\n\t\t\t\t\t\t\tformatted = nextDate.getUTCFullYear() + '-' + padNumber(nextDate.getUTCMonth() + 1) + '-' + padNumber(nextDate.getUTCDate());\n\t\t\t\t\t\t\teventEndDate = formatted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinfo.title = data[titleIndex].value;\n\t\t\t\t\t\tinfo.contents = data;\n\t\t\t\t\t\tinfo.start = eventStartDate;\n\t\t\t\t\t\tinfo.end = eventEndDate;\n\t\t\t\t\t\t$( '.fancybox-close-small') .click();\n\t\t\t\t\t\t$( calendarIdSelector ).fullCalendar( 'updateEvent', info, true );\n\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\teventResize: function(event) {\n\t\t\t\tevent.start._i = event.start.format();\n\t\t\t\tevent.end._i = event.end.format();\n\t\t\t\tcurrentEndDateMoment = moment(event.end);\n\t\t\t\tif( fieldType[eventStartDateField] === 'date' && event.allDay ) {\n\t\t\t\t\tcurrentEndDateMoment = currentEndDateMoment.subtract(1 , 'days');\n\t\t\t\t}\n\n\t\t\t\teventContents = event.contents;\n\t\t\t\tfor ( i = 0; i < eventContents.length; i++ ) {\n\t\t\t\t\tif ( eventContents[i].name === autoFillStartDay ) {\n\t\t\t\t\t\teventContents[i].value = event.start.format('DD');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartMonth ) {\n\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt(event.start.format('MM')) - 1 ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('MM');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartYear ) {\n\t\t\t\t\t\teventContents[i].value = event.start.format('YYYY');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndDay ) {\n\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('DD');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndMonth ) {\n\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt(currentEndDateMoment.format('MM')) - 1 ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('MM');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndYear ) {\n\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('YYYY');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartHour ) {\n\t\t\t\t\t\teventContents[i].value = event.start.format('hh');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartMinute ) {\n\t\t\t\t\t\teventContents[i].value = event.start.format('mm');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartSecond ) {\n\t\t\t\t\t\teventContents[i].value = event.start.format('ss');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartAmPm24h ) {\n\t\t\t\t\t\teventContents[i].value = ( event.start.format('t') === 'p' ? 'PM' : 'AM' );\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndHour ) {\n\t\t\t\t\t\teventContents[i].value = event.end.format('hh');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndMinute ) {\n\t\t\t\t\t\teventContents[i].value = event.end.format('mm');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndSecond ) {\n\t\t\t\t\t\teventContents[i].value = event.end.format('ss');\n\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndAmPm24h ) {\n\t\t\t\t\t\teventContents[i].value = ( event.end.format('t') === 'p' ? 'PM' : 'AM' );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tevent.contents = eventContents;\n\t\t\t\t$( calendarIdSelector ).fullCalendar('updateEvent',event);\n\n\t\t\t},\n\n\t\t\teventDrop: function( event, delta, revertFunc ) {\n\t\t\t\tvar oldEvent = $( calendarIdSelector ).fullCalendar( 'clientEvents', event.id );\n\t\t\t\t$( calendarIdSelector ).fullCalendar('removeEvents',oldEvent[0].id);\n\t\t\t\tevent.start._i = event.start.format();\n\n\t\t\t\tif ( flagOneDayEvent === false ) {\n\t\t\t\t\tif ( event.end !== null ) {\n\t\t\t\t\t\tevent.end._i = event.end.format() ;\n\t\t\t\t\t\tcurrentEndDateMoment = moment(event.end);\n\t\t\t\t\t\tif( fieldType[eventStartDateField] === 'date' && event.allDay ) {\n\t\t\t\t\t\t\tcurrentEndDateMoment = currentEndDateMoment.subtract(1 , 'days');\n\t\t\t\t\t\t}\n\t\t\t\t\t\teventContents = event.contents;\n\t\t\t\t\t\tfor( i = 0; i<eventContents.length; i++ ) {\n\t\t\t\t\t\t\tif ( eventContents[i].name === autoFillStartDay ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('DD');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartMonth ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt( event.start.format('MM')) - 1 ];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('MM');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartYear ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('YYYY');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndDay ) {\n\t\t\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('DD');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndMonth ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt(currentEndDateMoment.format('MM')) - 1 ];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('MM');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndYear ) {\n\t\t\t\t\t\t\t\teventContents[i].value = currentEndDateMoment.format('YYYY');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartHour ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('hh');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartMinute ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('mm');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartSecond ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('ss');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartAmPm24h ) {\n\t\t\t\t\t\t\t\teventContents[i].value = ( event.start.format('t') ==='p' ? 'PM' : 'AM' );\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndHour ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.end.format('hh');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndMinute ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.end.format('mm');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndSecond ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.end.format('ss');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndAmPm24h ) {\n\t\t\t\t\t\t\t\teventContents[i].value = ( event.end.format('t') ==='p' ? 'PM' : 'AM' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\teventContents = event.contents;\n\t\t\t\t\t\tfor ( i = 0; i < eventContents.length; i++ ) {\n\t\t\t\t\t\t\tif ( eventContents[i].name === autoFillStartDay ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('DD');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartMonth ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt( event.start.format('MM')) - 1 ];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('MM');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillStartYear ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('YYYY');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndDay ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('DD');\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndMonth ) {\n\t\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt( event.start.format('MM')) - 1 ];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('MM');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillEndYear ) {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('YYYY');\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} else {\n\t\t\t\t\teventContents = event.contents;\n\t\t\t\t\tevent.end._i = event.start.format( 'YYYY' ) + '-' + event.start.format('MM') + '-' + event.start.format('DD') + \"T23:59:59\";\n\t\t\t\t\tfor( i = 0; i<eventContents.length; i++ ) {\n\t\t\t\t\t\tif ( eventContents[i].name === autoFillDay ) {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('DD');\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillMonth ) {\n\t\t\t\t\t\t\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\t\teventContents[i].value = englishMonthNames[ parseInt( event.start.format('MM')) - 1 ];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\teventContents[i].value = event.start.format('MM');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillYear ) {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('YYYY');\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillHour ) {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('hh');\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillMinute ) {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('mm');\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillSecond ) {\n\t\t\t\t\t\t\teventContents[i].value = event.start.format('ss');\n\t\t\t\t\t\t} else if ( eventContents[i].name === autoFillAmPm24h ) {\n\t\t\t\t\t\t\teventContents[i].value = ( event.start.format('t') ==='p' ? 'PM' : 'AM' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$( calendarIdSelector ).fullCalendar( 'renderEvent', event, true );\n\t\t\t},\n\t\t\tdisplayEventEnd: isEventEndDateTime,\n\t\t\ttimeFormat: 'H(:mm:ss)t',\n\t\t\teventDurationEditable: true,\n\t\t\tdisplayEventTime: isEventStartTime\n\t\t});\n\t\t$('#fullCalendarLoading').css(\"display\", \"none\");\n\n\t\t// Handle the \"Save page\" button\n\t\t$( \"#pfForm\" ).submit(function( event ) {\n\t\t\tallEvents = $( calendarIdSelector ).fullCalendar('clientEvents');\n\t\t\tvar dateValue = '';\n\t\t\tvar day = '';\n\t\t\tvar month = '';\n\t\t\tvar year = '';\n\t\t\tvar hour = '';\n\t\t\tvar minute = '';\n\t\t\tvar second = '';\n\t\t\tampm24h = ' ';\n\t\t\tfor( i =0;i<allEvents.length;i++ ) {\n\t\t\t\tvar eventContent = allEvents[i].contents;\n\t\t\t\tvar finalFieldValues = [];\n\t\t\t\tfor( var ii=0; ii < calendarParams[templateName].length; ii++ ) {\n\t\t\t\t\tparameterName = calendarParams[templateName][ii].name;\n\t\t\t\t\tvar inputValue = '';\n\t\t\t\t\tif( fieldType[parameterName] === \"date\" ) {\n\t\t\t\t\t\tdateValue = '';\n\t\t\t\t\t\tday = '';\n\t\t\t\t\t\tmonth = '';\n\t\t\t\t\t\tyear = '';\n\t\t\t\t\t\tfor ( j = 0; j < eventContent.length; j++ ) {\n\t\t\t\t\t\t\tif( eventContent[j].name.includes('['+parameterName+']') ) {\n\t\t\t\t\t\t\t\tif( eventContent[j].name.includes('[day]') ) {\n\t\t\t\t\t\t\t\t\tday = eventContent[j].value.replace(/(^|-)0+/g, \"$1\");\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[year]') ) {\n\t\t\t\t\t\t\t\t\tyear = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[month]') ) {\n\t\t\t\t\t\t\t\t\tmonth = eventContent[j].value;\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\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\tif( englishMonthNames.indexOf(month) ) {\n\t\t\t\t\t\t\t\tdateValue = month + ' ' + day + ', ' + year;\n\t\t\t\t\t\t\t} else if ( englishMonthNames.indexOf(month) === -1 ) {\n\t\t\t\t\t\t\t\tdateValue = englishMonthNames[ parseInt(month) - 1 ] + ' ' + day + ', ' + year;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdateValue = year + '/' + month + '/' + padNumber(day);\n\t\t\t\t\t\t\tif( year === '' && month === '' && day === '' || year === '' && month === '' ) {\n\t\t\t\t\t\t\t\tdateValue = '';\n\t\t\t\t\t\t\t} else if ( day === '' ) {\n\t\t\t\t\t\t\t\tif( month === '' && year !== '' ) {\n\t\t\t\t\t\t\t\t\tdateValue = month;\n\t\t\t\t\t\t\t\t} else if ( month !== '' && year === '' ) {\n\t\t\t\t\t\t\t\t\tdateValue = year;\n\t\t\t\t\t\t\t\t} else if ( month !== '' && year !== '' ) {\n\t\t\t\t\t\t\t\t\tdateValue = month + ' ' + year;\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\tinputValue = dateValue;\n\t\t\t\t\t} else if ( fieldType[parameterName] === \"datetime\" ) {\n\t\t\t\t\t\tdateValue = '';\n\t\t\t\t\t\tday = '';\n\t\t\t\t\t\tmonth = '';\n\t\t\t\t\t\tyear = '';\n\t\t\t\t\t\thour = '';\n\t\t\t\t\t\tminute = '';\n\t\t\t\t\t\tsecond = '';\n\t\t\t\t\t\tampm24h = ' ';\n\t\t\t\t\t\tfor( j = 0; j < eventContent.length; j++ ) {\n\t\t\t\t\t\t\tif( eventContent[j].name.includes('['+parameterName+']') ) {\n\t\t\t\t\t\t\t\tif( eventContent[j].name.includes('[day]') ) {\n\t\t\t\t\t\t\t\t\tday = eventContent[j].value.replace(/(^|-)0+/g, \"$1\");\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[year]') ) {\n\t\t\t\t\t\t\t\t\tyear = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[month]') ) {\n\t\t\t\t\t\t\t\t\tmonth = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[hour]') ) {\n\t\t\t\t\t\t\t\t\thour = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[minute]') ) {\n\t\t\t\t\t\t\t\t\tminute = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[second]') ) {\n\t\t\t\t\t\t\t\t\tsecond = eventContent[j].value;\n\t\t\t\t\t\t\t\t} else if( eventContent[j].name.includes('[ampm24h]') ) {\n\t\t\t\t\t\t\t\t\tampm24h = (eventContent[j].value !== '' ) ? eventContent[j].value : ' ';\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\tif ( mw.config.get('wgAmericanDates') ) {\n\t\t\t\t\t\t\tif( englishMonthNames.indexOf(month) ) {\n\t\t\t\t\t\t\t\tdateValue = month + ' ' + day + ', ' + year + ' ' + padNumber(hour) + ':' + padNumber(minute) + ':' + padNumber(second) + ' ' + ampm24h;\n\t\t\t\t\t\t\t} else if ( englishMonthNames.indexOf(month) === -1 ) {\n\t\t\t\t\t\t\t\tdateValue = englishMonthNames[ parseInt(month) - 1 ] + ' ' + day + ', ' + year + ' ' + padNumber(hour) + ':' + padNumber(minute) + ':' + padNumber(second) + ' ' + ampm24h;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdateValue = year + '/' + month + '/' + padNumber( day ) + ' ' + padNumber(hour) + ':' + padNumber(minute) + ':' + padNumber(second) + ' ' + ampm24h;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinputValue = dateValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar checkboxesFinal = '';\n\t\t\t\t\t\tcheckboxesNum= [];\n\t\t\t\t\t\tif ( fieldType[parameterName] === 'checkboxes' || fieldType[parameterName] === 'listbox' ) {\n\t\t\t\t\t\t\tfor ( j = 0; j < eventContent.length; j++ ) {\n\t\t\t\t\t\t\t\tif ( eventContent[j].name.includes('['+parameterName+']') && !eventContent[j].name.includes('[is_list]') ) {\n\t\t\t\t\t\t\t\t\tcheckboxesNum.push(eventContent[j].value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor ( var t = 0; t < checkboxesNum.length; t++ ) {\n\t\t\t\t\t\t\t\tif( t < checkboxesNum.length -1 ) {\n\t\t\t\t\t\t\t\t\tcheckboxesFinal += checkboxesNum[t] + ', ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcheckboxesFinal += checkboxesNum[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\tinputValue = checkboxesFinal;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor ( j = 0; j < eventContent.length; j++ ) {\n\t\t\t\t\t\t\t\tif ( eventContent[j].name.includes('['+parameterName+']') ) {\n\t\t\t\t\t\t\t\t\tinputValue = eventContent[j].value;\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\tvar inputName = templateName + '['+ (i+1) +'][' + parameterName + ']';\n\t\t\t\t\tfinalFieldValues[inputName] = inputValue;\n\t\t\t\t\t$('<input>').attr( 'type', 'hidden' ).attr( 'name', inputName ).attr( 'value',finalFieldValues[inputName] ).appendTo( '#pfForm' );\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ( var k = 0; k < eventsNoDate.length; k++ ) {\n\t\t\t\tvar index = i+1;\n\t\t\t\tfor( var jj = 0; jj < calendarParams[templateName].length; jj++ ) {\n\t\t\t\t\tparameterName = calendarParams[templateName][jj].name;\n\t\t\t\t\tvar entryName = templateName + '['+ (index) +'][' + parameterName + ']';\n\t\t\t\t\t$('<input>').attr( 'type', 'hidden' ).attr( 'name', entryName ).attr( 'value',eventsNoDate[k][parameterName] ).appendTo( '#pfForm' );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t});\n}( jQuery, mediaWiki, pf ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_PageSchemas.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_SpreadsheetAutocompleteWidget.js","messages":[{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":114,"column":9,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":114,"endColumn":18},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":131,"column":5,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":131,"endColumn":15},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":135,"column":21,"nodeType":"MemberExpression","messageId":"forbidden","endLine":135,"endColumn":57},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":135,"column":21,"nodeType":"MemberExpression","messageId":"forbidden","endLine":135,"endColumn":57},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":177,"column":17,"nodeType":"CallExpression","messageId":"substr","endLine":177,"endColumn":57}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * An OOUI-based widget for an autocompleting text input\n * within the spreadsheet-style display that uses the\n * Page Forms 'pfautocomplete' API.\n *\n * @class\n * @extends OO.ui.TextInputWidget\n * @param {Object} config Configuration Options\n * @author Yash Varshney\n */\n pf.spreadsheetAutocompleteWidget = function( config ) {\n\tthis.config = config || {};\n\t// Parent constructor\n\tvar textInputConfig = {\n\t\t// This turns off the local, browser-based autocompletion,\n\t\t// which would normally suggest values that the user has\n\t\t// typed before on that computer.\n\t\tautocomplete: false\n\t};\n\n\tOO.ui.TextInputWidget.call(this, textInputConfig);\n\t// Mixin constructor\n\tOO.ui.mixin.LookupElement.call(this, { highlightFirst: false });\n\n\t// dataCache will temporarily store entity id => entity data mappings of\n\t// entities, so that if we somehow then alter the text (add characters,\n\t// remove some) and then adjust our typing to form a known item,\n\t// it'll recognize it and know what the id was, without us having to\n\t// select it anew\n\tthis.dataCache = {};\n};\n\nOO.inheritClass( pf.spreadsheetAutocompleteWidget, OO.ui.TextInputWidget );\nOO.mixinClass( pf.spreadsheetAutocompleteWidget, OO.ui.mixin.LookupElement );\n\n/**\n * @inheritdoc\n */\npf.spreadsheetAutocompleteWidget.prototype.getLookupRequest = function() {\n\tvar\n\t\tvalue = this.getValue(),\n\t\tdeferred = $.Deferred(),\n\t\tapi,\n\t\trequestParams;\n\t// sometimes it happens that on double clicking the cell\n\t// a space is automatically added to the value inside the\n\t// editor and hence we get \"No Matches found\" so we can\n\t// simply remove that space.\n\tif ( value[0] == ' ' ) {\n\t\tvalue = value.slice(1);\n\t}\n\tapi = new mw.Api();\n\trequestParams = {\n\t\taction: 'pfautocomplete',\n\t\tformat: 'json',\n\t\tsubstr: value,\n\t};\n\tif( this.config.autocompletedatatype == 'category' ) {\n\t\trequestParams.category = this.config.autocompletesettings;\n\t} else if ( this.config.autocompletedatatype == 'cargo field' ) {\n\t\tvar table_and_field = this.config.autocompletesettings.split( '|' );\n\t\trequestParams.cargo_table = table_and_field[0];\n\t\trequestParams.cargo_field = table_and_field[1];\n\t} else if ( this.config.autocompletedatatype == 'property' ) {\n\t\trequestParams.property = this.config.autocompletesettings;\n\t} else if ( this.config.autocompletedatatype == 'concept' ) {\n\t\trequestParams.concept = this.config.autocompletesettings;\n\t} else if( this.config.autocompletedatatype == 'dep_on' ) {\n\t\tvar dep_field_opts = this.getDependentFieldOpts( this.config.data_y, this.config.dep_on_field );\n\n\t\tif (dep_field_opts.prop.indexOf('|') === -1) {\n\t\t\trequestParams.property = dep_field_opts.prop;\n\t\t\trequestParams.baseprop = dep_field_opts.base_prop;\n\t\t\trequestParams.basevalue = dep_field_opts.base_value;\n\t\t} else {\n\t\t\tvar cargoTableAndFieldStr = dep_field_opts.prop;\n\t\t\tvar baseCargoTableAndFieldStr = dep_field_opts.base_prop;\n\t\t\trequestParams.cargo_table = cargoTableAndFieldStr.split( '|' )[0];\n\t\t\trequestParams.cargo_field = cargoTableAndFieldStr.split( '|' )[1];\n\t\t\trequestParams.base_cargo_table = baseCargoTableAndFieldStr.split('|')[0];\n\t\t\trequestParams.base_cargo_field = baseCargoTableAndFieldStr.split('|')[1];\n\t\t}\n\t\trequestParams.basevalue = dep_field_opts.base_value;\n\t}\n\treturn api.get( requestParams );\n}\n\n/**\n * @inheritdoc\n */\n pf.spreadsheetAutocompleteWidget.prototype.getLookupCacheDataFromResponse = function( response ) {\n\treturn response || [];\n};\n\n/**\n * @inheritdoc\n */\n pf.spreadsheetAutocompleteWidget.prototype.getLookupMenuOptionsFromData = function( data ) {\n\tvar item,\n\t\titems = [];\n\n\tif ( data.error ) {\n\t\treturn this.getNoMatchesOOUIMenuOptionWidget();\n\t}\n\tif( this.config.autocompletedatatype == 'category'\n\t\t|| this.config.autocompletedatatype == 'cargo field'\n\t\t|| this.config.autocompletedatatype == 'dep_on'\n\t\t|| this.config.autocompletedatatype == 'concept'\n\t\t|| this.config.autocompletedatatype == 'property' ) {\n\t\tdata = data.pfautocomplete;\n\t\tif ( data.length === 0 ) {\n\t\t\treturn this.getNoMatchesOOUIMenuOptionWidget();\n\t\t}\n\t\tfor ( let i = 0; i < data.length; i++ ) {\n\t\t\titem = new OO.ui.MenuOptionWidget( {\n\t\t\t\tdata: data[ i ].title,\n\t\t\t\tlabel: this.highlightText( data[ i ].title )\n\t\t\t} );\n\t\t\titems.push( item );\n\t\t}\n\t} else if( this.config.autocompletedatatype == 'external data' ) {\n\t\tvar self = this,\n\t\t\twgPageFormsEDSettings = mw.config.get('wgPageFormsEDSettings'),\n\t\t\tname = this.config.autocompletesettings,\n\t\t\tedgValues = mw.config.get('edgValues'),\n\t\t\tvalueFilter;\n\t\tdata = {};\n\t\tif ( wgPageFormsEDSettings !== null && wgPageFormsEDSettings[name].title !== undefined && wgPageFormsEDSettings[name].title !== \"\" ) {\n\t\t\tdata.title = edgValues[wgPageFormsEDSettings[name].title];\n\t\t\tif (data.title !== undefined && data.title !== null) {\n\t\t\t\tlet i = 0;\n\t\t\t\tdata.title.forEach(function() {\n\t\t\t\t\tvar wgPageFormsAutocompleteOnAllChars = mw.config.get( 'wgPageFormsAutocompleteOnAllChars' );\n\t\t\t\t\tif ( wgPageFormsAutocompleteOnAllChars ) {\n\t\t\t\t\t\tvalueFilter = data.title[i].toLowerCase().includes(self.getValue().toLowerCase());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueFilter = self.checkIfAnyWordStartsWithInputValue( data.title[i], self.getValue() );\n\t\t\t\t\t}\n\t\t\t\t\tif ( valueFilter ) {\n\t\t\t\t\t\titem = new OO.ui.MenuOptionWidget( {\n\t\t\t\t\t\t\tdata: data.title[i], label: self.highlightText(data.title[i])\n\t\t\t\t\t\t} );\n\t\t\t\t\t\titems.push(item);\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t});\n\t\t\t\tif( items.length == 0 ) {\n\t\t\t\t\treturn this.getNoMatchesOOUIMenuOptionWidget();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// this case will possibly come when the external data can't be fetched due to wrong data provided\n\t\t\treturn this.getNoMatchesOOUIMenuOptionWidget();\n\t\t}\n\t}\n\n\treturn items;\n};\n\n/**\n * @param {string} suggestion\n * @return {Mixed} HtmlSnipppet\n */\npf.spreadsheetAutocompleteWidget.prototype.highlightText = function( suggestion ) {\n\tvar searchTerm = this.getValue();\n\tif ( searchTerm[0] == ' ' ) {\n\t\tsearchTerm = searchTerm.slice(1);\n\t}\n\tvar searchRegexp = new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" +\n\t\tsearchTerm.replace(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi, \"\\\\$1\") +\n\t\t\")(?![^<>]*>)(?![^&;]+;)\", \"gi\");\n\tvar itemLabel = suggestion;\n\tvar loc = itemLabel.search(searchRegexp);\n\tvar t;\n\tif (loc >= 0) {\n\t\tt = itemLabel.slice(0, Math.max(0, loc)) +\n\t\t\t'<strong>' + itemLabel.substr(loc, searchTerm.length) + '</strong>' +\n\t\t\titemLabel.slice(loc + searchTerm.length);\n\t} else {\n\t\tt = itemLabel;\n\t}\n\treturn new OO.ui.HtmlSnippet(t);\n};\n/**\n * Provides an OOUI's MenuOptionWidget with a \"No Matches\" label\n *\n * @return {Mixed} OOUi's MenuOptionWidget\n */\npf.spreadsheetAutocompleteWidget.prototype.getNoMatchesOOUIMenuOptionWidget = function() {\n\treturn [\n\t\tnew OO.ui.MenuOptionWidget( {\n\t\t\tdata: this.getValue(),\n\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\tdisabled: true\n\t\t} )\n\t];\n}\n\n/**\n * Checks if any \"word\" in the given string starts with the given search term.\n *\n * @param {string} string\n *\n * @param {string} curValue\n *\n * @return {boolean}\n */\npf.spreadsheetAutocompleteWidget.prototype.checkIfAnyWordStartsWithInputValue = function( string, curValue ) {\n\tvar regex = new RegExp('\\\\b' + curValue.toLowerCase());\n\treturn string.toLowerCase().match(regex) !== null;\n}\n\n/**\n * Gives dependent field options which include\n * property, base property and base value\n *\n * @param {string} data_y\n * @param {string} dep_on_field\n * @return {Object} dep_field_opts\n */\npf.spreadsheetAutocompleteWidget.prototype.getDependentFieldOpts = function( data_y, dep_on_field ) {\n\tvar dep_field_opts = {};\n\tvar $baseElement;\n\t$baseElement = $('td[data-y=\"'+data_y+'\"][origname=\"'+dep_on_field+'\"]');\n\tdep_field_opts.base_value = $baseElement.html();\n\tdep_field_opts.base_prop = mw.config.get('wgPageFormsFieldProperties')[dep_on_field] ||\n\t\t$baseElement.attr('name');\n\tdep_field_opts.prop = this.config['autocompletesettings'];\n\n\treturn dep_field_opts;\n}\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_SpreadsheetComboBoxInput.js","messages":[{"ruleId":"block-scoped-var","severity":1,"message":"'valueFilter' declared on line 56 column 11 is used outside of binding context.","line":54,"column":11,"nodeType":"Identifier","messageId":"outOfScope","endLine":54,"endColumn":22},{"ruleId":"block-scoped-var","severity":1,"message":"'valueFilter' declared on line 54 column 11 is used outside of binding context.","line":56,"column":11,"nodeType":"Identifier","messageId":"outOfScope","endLine":56,"endColumn":22},{"ruleId":"block-scoped-var","severity":1,"message":"'valueFilter' declared on line 54 column 11 is used outside of binding context.","line":58,"column":11,"nodeType":"Identifier","messageId":"outOfScope","endLine":58,"endColumn":22},{"ruleId":"block-scoped-var","severity":1,"message":"'valueFilter' declared on line 56 column 11 is used outside of binding context.","line":58,"column":11,"nodeType":"Identifier","messageId":"outOfScope","endLine":58,"endColumn":22},{"ruleId":"no-shadow","severity":1,"message":"'data' is already declared in the upper scope on line 46 column 4.","line":108,"column":23,"nodeType":"Identifier","messageId":"noShadow","endLine":108,"endColumn":27},{"ruleId":"block-scoped-var","severity":1,"message":"'i' declared on line 50 column 9 is used outside of binding context.","line":114,"column":13,"nodeType":"Identifier","messageId":"outOfScope","endLine":114,"endColumn":14},{"ruleId":"block-scoped-var","severity":1,"message":"'i' declared on line 50 column 9 is used outside of binding context.","line":114,"column":20,"nodeType":"Identifier","messageId":"outOfScope","endLine":114,"endColumn":21},{"ruleId":"block-scoped-var","severity":1,"message":"'i' declared on line 50 column 9 is used outside of binding context.","line":114,"column":37,"nodeType":"Identifier","messageId":"outOfScope","endLine":114,"endColumn":38},{"ruleId":"block-scoped-var","severity":1,"message":"'i' declared on line 50 column 9 is used outside of binding context.","line":116,"column":20,"nodeType":"Identifier","messageId":"outOfScope","endLine":116,"endColumn":21},{"ruleId":"block-scoped-var","severity":1,"message":"'i' declared on line 50 column 9 is used outside of binding context.","line":116,"column":62,"nodeType":"Identifier","messageId":"outOfScope","endLine":116,"endColumn":63},{"ruleId":"jsdoc/require-returns-type","severity":1,"message":"Missing JSDoc @return type.","line":130,"column":1,"nodeType":"Block","endLine":130,"endColumn":1},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":145,"column":17,"nodeType":"CallExpression","messageId":"substr","endLine":145,"endColumn":57},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":183,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":183,"endColumn":38},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":183,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":183,"endColumn":38},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'integer' is undefined.","line":189,"column":1,"nodeType":"Block","endLine":189,"endColumn":1},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":196,"column":2,"nodeType":"AssignmentExpression","endLine":196,"endColumn":73}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":16,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\n/**\n * An OOUI-based widget for an autocompleting ComboBox input\n * within the spreadsheet-style display that uses the\n * Page Forms 'pfautocomplete' API.\n *\n * @class\n * @extends OO.ui.ComboBoxInputWidget\n * @param {Object} config Configuration Options\n * @author Yash Varshney\n */\n pf.SpreadsheetComboBoxInput = function( config ) {\n\tthis.config = config || {};\n\tOO.ui.ComboBoxInputWidget.call( this, config );\n\tthis.$input.focus( function() {\n\t\tthis.setValues();\n\t}.bind(this));\n\tthis.$input.keyup( function(event) {\n\t\tif (event.keyCode !== 38 && event.keyCode !== 40 && event.keyCode !== 37 && event.keyCode !== 39) {\n\t\t\tthis.setValues();\n\t\t}\n\t}.bind(this));\n}\nOO.inheritClass( pf.SpreadsheetComboBoxInput, OO.ui.ComboBoxInputWidget );\n/**\n *\n * A function for setting the options for combobox whenever something is typed\n */\npf.SpreadsheetComboBoxInput.prototype.setValues = function() {\n\tvar data_source = this.config.autocompletesettings,\n\t\tdata_type = this.config.autocompletedatatype,\n\t\tcurValue = this.getValue(),\n\t\tself = this,\n\t\tvalues = [];\n\t// sometimes it happens that on double clicking the cell\n\t// a space is automatically added to the value inside the\n\t// editor and hence we get \"No Matches found\" so we can\n\t// simply remove that space.\n\tif ( curValue[0] == ' ' ) {\n\t\tcurValue = curValue.slice(1);\n\t}\n\tif ( data_type == 'external data' ) { // External Data Autocompletion\n\t\tvar\twgPageFormsEDSettings = mw.config.get( 'wgPageFormsEDSettings' ),\n\t\t\tname = data_source,\n\t\t\tedgValues = mw.config.get( 'edgValues' ),\n\t\t\tdata = {};\n\t\tif ( wgPageFormsEDSettings !== null && wgPageFormsEDSettings[name].title !== undefined && wgPageFormsEDSettings[name].title !== \"\" ) {\n\t\t\tdata.title = edgValues[ wgPageFormsEDSettings[ name ].title ];\n\t\t\tif ( data.title !== undefined && data.title !== null ) {\n\t\t\t\tvar i = 0;\n\t\t\t\tdata.title.forEach( function() {\n\t\t\t\t\tvar wgPageFormsAutocompleteOnAllChars = mw.config.get( 'wgPageFormsAutocompleteOnAllChars' );\n\t\t\t\t\tif ( wgPageFormsAutocompleteOnAllChars ) {\n\t\t\t\t\t\tvar valueFilter = self.getConditionForAutocompleteOnAllChars( data.title[i], curValue.toLowerCase() )\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar valueFilter = self.checkIfAnyWordStartsWithInputValue( data.title[i], curValue );\n\t\t\t\t\t}\n\t\t\t\t\tif ( valueFilter ) {\n\t\t\t\t\t\tvalues.push( {\n\t\t\t\t\t\t\tdata: data.title[i], label: self.highlightText( data.title[i] )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t} );\n\t\t\t\tif( values.length == 0 ) {\n\t\t\t\t\tvalues.push( self.getNoMatchesOption() );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// this case will possibly come when the external data can't be fetched due to wrong parameters provided\n\t\t\tvalues.push( this.getNoMatchesOption() );\n\t\t}\n\t\tthis.setOptions( values );\n\t} else {\n\t\tif ( curValue.length == 0 ) {\n\t\t\tvalues.push({\n\t\t\t\tlabel: mw.message('pf-autocomplete-input-too-short',1).text(), disabled: true\n\t\t\t});\n\t\t\tthis.setOptions(values);\n\t\t\treturn;\n\t\t}\n\t\tvar my_server = mw.util.wikiScript( 'api' );\n\t\tmy_server += \"?action=pfautocomplete&format=json\";\n\t\tif ( data_type == 'cargo field' ) {\n\t\t\tvar table_and_field = data_source.split('|');\n\t\t\tmy_server += \"&cargo_table=\" + table_and_field[0] + \"&cargo_field=\" + table_and_field[1] + \"&substr=\" + curValue;\n\t\t} else if ( data_type == 'dep_on' ) {\n\t\t\tvar dep_field_opts = this.getDependentFieldOpts( this.config.data_y, this.config.dep_on_field );\n\t\t\tif (dep_field_opts.prop.indexOf('|') === -1) {\n\t\t\t\tmy_server += \"&property=\" + dep_field_opts.prop + \"&baseprop=\" + dep_field_opts.base_prop + \"&basevalue=\" + dep_field_opts.base_value + \"&substr=\" + curValue;\n\t\t\t} else {\n\t\t\t\tvar cargoTableAndFieldStr = dep_field_opts.prop;\n\t\t\t\tvar cargoTableAndField = cargoTableAndFieldStr.split('|');\n\t\t\t\tvar cargoTable = cargoTableAndField[0];\n\t\t\t\tvar cargoField = cargoTableAndField[1];\n\t\t\t\tvar baseCargoTableAndFieldStr = dep_field_opts.base_prop;\n\t\t\t\tvar baseCargoTableAndField = baseCargoTableAndFieldStr.split('|');\n\t\t\t\tvar baseCargoTable = baseCargoTableAndField[0];\n\t\t\t\tvar baseCargoField = baseCargoTableAndField[1];\n\t\t\t\tmy_server += \"&cargo_table=\" + cargoTable + \"&cargo_field=\" + cargoField + \"&base_cargo_table=\" + baseCargoTable + \"&base_cargo_field=\" + baseCargoField + \"&basevalue=\" + dep_field_opts.base_value + \"&substr=\" + curValue;\n\t\t\t}\n\t\t} else {\n\t\t\tmy_server += \"&\" + data_type + \"=\" + data_source + \"&substr=\" + curValue;\n\t\t}\n\t\t$.ajax( {\n\t\t\turl: my_server,\n\t\t\tdataType: 'json',\n\t\t\tsuccess: function( data ) {\n\t\t\t\tif ( data.pfautocomplete !== undefined ) {\n\t\t\t\t\tdata = data.pfautocomplete;\n\t\t\t\t\tif ( data.length == 0 ) {\n\t\t\t\t\t\tvalues.push( self.getNoMatchesOption() )\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor ( i = 0; i < data.length; i++ ) {\n\t\t\t\t\t\t\tvalues.push( {\n\t\t\t\t\t\t\t\tdata: data[i].title, label: self.highlightText( data[i].title )\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} else {\n\t\t\t\t\tvalues.push( self.getNoMatchesOption() )\n\t\t\t\t}\n\t\t\t\tself.setOptions( values );\n\t\t\t}\n\t\t} );\n\t}\n}\n/**\n * @param {string} suggestion\n * @return HtmlSnippet\n */\npf.SpreadsheetComboBoxInput.prototype.highlightText = function( suggestion ) {\n\tvar searchTerm = this.getValue();\n\tif ( searchTerm[0] == ' ' ) {\n\t\tsearchTerm = searchTerm.slice(1);\n\t}\n\tvar searchRegexp = new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" +\n\t\tsearchTerm.replace(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/gi, \"\\\\$1\") +\n\t\t\t\")(?![^<>]*>)(?![^&;]+;)\", \"gi\");\n\tvar itemLabel = suggestion;\n\tvar loc = itemLabel.search(searchRegexp);\n\tvar t;\n\tif (loc >= 0) {\n\t\tt = itemLabel.slice(0, Math.max(0, loc)) +\n\t\t\t'<strong>' + itemLabel.substr(loc, searchTerm.length) + '</strong>' +\n\t\titemLabel.slice(loc + searchTerm.length);\n\t} else {\n\t\tt = itemLabel;\n\t}\n\treturn new OO.ui.HtmlSnippet(t);\n};\n/**\n * Provides an option with \"No Matches\" label\n *\n * @return {Object}\n */\npf.SpreadsheetComboBoxInput.prototype.getNoMatchesOption = function() {\n\treturn {\n\t\t\tdata: this.getValue(),\n\t\t\tlabel: mw.message('pf-autocomplete-no-matches').text(),\n\t\t\tdisabled: true\n\t\t}\n}\n/**\n * Checks if any \"word\" in the given string starts with the given search term.\n *\n * @param {string} string\n * @param {string} curValue\n * @return {boolean}\n */\npf.SpreadsheetComboBoxInput.prototype.checkIfAnyWordStartsWithInputValue = function( string, curValue ) {\n\tvar regex = new RegExp('\\\\b' + curValue.toLowerCase());\n\treturn string.toLowerCase().match(regex) !== null;\n}\n/**\n * Checks if the given string contains the word or not\n *\n * @param {string} string\n * @param {string} curValue\n * @return {boolean}\n */\npf.SpreadsheetComboBoxInput.prototype.getConditionForAutocompleteOnAllChars = function(string, curValue) {\n\treturn string.toLowerCase().includes(curValue.toLowerCase())\n}\n/**\n * Gives dependent field options which include\n * property, base property and base value\n *\n * @param {integer} data_y\n * @param {string} dep_on_field\n * @return {Object} dep_field_opts\n */\npf.SpreadsheetComboBoxInput.prototype.getDependentFieldOpts = function( data_y, dep_on_field ) {\n\tvar dep_field_opts = {};\n\tvar baseElement;\n\tbaseElement = $('td[data-y=\"'+data_y+'\"][origname=\"'+dep_on_field+'\"]');\n\tdep_field_opts.base_value = baseElement.html();\n\tdep_field_opts.base_prop = mw.config.get('wgPageFormsFieldProperties')[dep_on_field] ||\n\t\tbaseElement.attr('name');\n\tdep_field_opts.prop = this.config['autocompletesettings'];\n\treturn dep_field_opts;\n}\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_autoedit.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":15,"column":16,"nodeType":"CallExpression","endLine":15,"endColumn":46},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":83,"column":21,"nodeType":"CallExpression","endLine":83,"endColumn":58},{"ruleId":"no-shadow","severity":1,"message":"'$' is already declared in the upper scope on line 9 column 13.","line":95,"column":38,"nodeType":"Identifier","messageId":"noShadow","endLine":95,"endColumn":39}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript handler for the autoedit parser function\n *\n * @author Stephan Gambke\n */\n\n/*global confirm */\n\n( function( $, mw ) {\n\n\t'use strict';\n\tfunction sendData( $jtrigger ){\n\t\tvar $jautoedit = $jtrigger.closest( '.autoedit' );\n\t\tvar $jresult = $jautoedit.find( '.autoedit-result' );\n\t\tvar reload = $jtrigger.hasClass( 'reload' );\n\n\t\t$jtrigger.attr( 'class', 'autoedit-trigger autoedit-trigger-wait' );\n\t\t$jresult.attr( 'class', 'autoedit-result autoedit-result-wait' );\n\n\t\t$jresult.text( mw.msg( 'pf-autoedit-wait' ) );\n\n\n\t\t// data array to be sent to the server\n\t\tvar data = {\n\t\t\taction: 'pfautoedit',\n\t\t\tformat: 'json'\n\t\t};\n\n\t\t// add form values to the data\n\t\tdata.query = $jautoedit.find( 'form.autoedit-data' ).serialize();\n\n\t\t$.ajax( {\n\n\t\t\ttype:     'POST', // request type ( GET or POST )\n\t\t\turl:      mw.util.wikiScript( 'api' ), // URL to which the request is sent\n\t\t\tdata:     data, // data to be sent to the server\n\t\t\tdataType: 'json', // type of data expected back from the server\n\t\t\tsuccess:  function( result ){\n\t\t\t\t$jresult.empty().append( result.responseText );\n\n\t\t\t\tif ( result.status === 200 ) {\n\n\t\t\t\t\tif ( reload ) {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t}\n\n\t\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' ).addClass( 'autoedit-result-ok' );\n\t\t\t\t\t$jtrigger.removeClass( 'autoedit-trigger-wait' ).addClass( 'autoedit-trigger-ok' );\n\t\t\t\t} else {\n\t\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' ).addClass( 'autoedit-result-error' );\n\t\t\t\t\t$jtrigger.removeClass( 'autoedit-trigger-wait' ).addClass( 'autoedit-trigger-error' );\n\t\t\t\t}\n\t\t\t}, // function to be called if the request succeeds\n\t\t\terror:  function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\tvar result = jQuery.parseJSON(jqXHR.responseText);\n\t\t\t\tvar text = result.responseText;\n\n\t\t\t\tfor ( var i = 0; i < result.errors.length; i++ ) {\n\t\t\t\t\ttext += ' ' + result.errors[i].message;\n\t\t\t\t}\n\n\t\t\t\t$jresult.empty().append( text );\n\t\t\t\t$jresult.removeClass( 'autoedit-result-wait' ).addClass( 'autoedit-result-error' );\n\t\t\t\t$jtrigger.removeClass( 'autoedit-trigger-wait' ).addClass( 'autoedit-trigger-error' );\n\t\t\t} // function to be called if the request fails\n\t\t} );\n\t}\n\n\tvar autoEditHandler = function handleAutoEdit( e ){\n\n\t\t// Prevents scroll from jumping to the top of the page due to anchor #\n\t\te.preventDefault();\n\n\t\tif ( mw.config.get( 'wgUserName' ) === null &&\n\t\t\t! confirm( mw.msg( 'pf_autoedit_anoneditwarning' ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $jtrigger = jQuery( this );\n\t\tvar $jautoedit = $jtrigger.closest( '.autoedit' );\n\t\tvar $jeditdata = $jautoedit.find( 'form.autoedit-data' );\n\t\tvar targetpage = $jeditdata.find( 'input[name=target]' ).val();\n\t\tvar confirmEdit = $jeditdata.hasClass( 'confirm-edit' );\n\t\tif ( confirmEdit ) {\n\t\t\tOO.ui.confirm( mw.msg( 'pf_autoedit_confirm', targetpage ) ).done( function(confirmed) {\n\t\t\t\tif ( confirmed ) {\n\t\t\t\t\tsendData( $jtrigger );\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tsendData( $jtrigger );\n\t\t}\n\t};\n\n\tjQuery( document ).ready( function( $ ) {\n\t\t$( '.autoedit-trigger' ).click( autoEditHandler );\n\t} );\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_autogrow.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_checkboxes.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":4,"column":1,"nodeType":"Block","endLine":4,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"no-shadow","severity":1,"message":"'$' is already declared in the upper scope on line 9 column 14.","line":49,"column":24,"nodeType":"Identifier","messageId":"noShadow","endLine":49,"endColumn":25}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript handler for the checkboxes input type\n *\n * @param $\n * @param mw\n * @author Stephan Gambke\n */\n\n( function ( $, mw ) {\n\n\t'use strict';\n\n\t// jQuery plugin that will attach a select all/select none switch to all checkboxes in \"this\" element\n\t$.fn.appendSelectionSwitches = function () {\n\n\t\tfunction insertSwitch( switchesWrapper, label, checked  ) {\n\t\t\t// create a link element that will trigger the selection of all checkboxes\n\t\t\tvar $link = $( '<a href=\"#\">' + label + '</a>' );\n\n\t\t\t// will be initialized only when the event is triggered to avoid lag during page loading\n\t\t\tvar $checkboxes;\n\n\t\t\t// attach an event handler\n\t\t\t$link.click( function ( event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// store checkboxes during first method call so the DOM is not searched on every click on the link\n\t\t\t\t$checkboxes = $checkboxes || switchesWrapper.siblings().find( 'input[type=\"checkbox\"]' );\n\n\t\t\t\t$checkboxes.prop( 'checked', checked );\n\t\t\t} );\n\n\t\t\t// wrap the link into a span to simplify styling\n\t\t\tvar $switchWrapper = $('<span class=\"checkboxSwitch\">' ).append( $link );\n\n\t\t\t// insert the complete switch into the DOM\n\t\t\tswitchesWrapper.append( $switchWrapper );\n\t\t}\n\n\t\tthis.each( function ( index, element ) {\n\t\t\tvar $switchesWrapper = $( '<span class=\"checkboxSwitches\">' ).prependTo( element );\n\t\t\tinsertSwitch( $switchesWrapper, mw.message( 'pf_forminputs_checkboxes_select_all' ).escaped(), true );\n\t\t\tinsertSwitch( $switchesWrapper, mw.message( 'pf_forminputs_checkboxes_select_none' ).escaped(), false );\n\t\t} );\n\n\t\treturn this;\n\t};\n\n\t$().ready( function ( $ ) {\n\t\t$( '.checkboxesSpan.select-all' ).appendSelectionSwitches();\n\t} );\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_collapsible.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":30,"column":8,"nodeType":"CallExpression","endLine":30,"endColumn":49}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * PF_collapsible.js\n *\n * Allows for collapsible fieldsets.\n *\n * This code was originally based heavily on the 'coolfieldset' jQuery plugin:\n * http://w3shaman.com/article/jquery-plugin-collapsible-fieldset\n *\n * Now it's less so, because that code used a .toggle() function that was\n * removed in jQuery 1.9.\n */\n\nfunction pfHideFieldsetContent($obj){\n\t$obj.find('div').slideUp( 'medium' );\n\t$obj.removeClass(\"pfExpandedFieldset\");\n\t$obj.addClass(\"pfCollapsedFieldset\");\n}\n\nfunction pfShowFieldsetContent($obj){\n\t$obj.find('div').slideDown( 'medium' );\n\t$obj.removeClass(\"pfCollapsedFieldset\");\n\t$obj.addClass(\"pfExpandedFieldset\");\n}\n\njQuery.fn.pfMakeCollapsible = function(){\n\tthis.each(function(){\n\t\tvar $fieldset = jQuery(this);\n\n\t\t$fieldset.children('legend').click( function() {\n\t\t\tif ($fieldset.hasClass('pfCollapsedFieldset')) {\n\t\t\t\tpfShowFieldsetContent($fieldset);\n\t\t\t} else {\n\t\t\t\tpfHideFieldsetContent($fieldset);\n\t\t\t}\n\t\t});\n\t\tpfHideFieldsetContent($fieldset);\n\t});\n};\n\njQuery(document).ready(function() {\n\tjQuery('.pfCollapsibleFieldset').pfMakeCollapsible();\n});\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_datepicker.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":4,"column":1,"nodeType":"Block","endLine":4,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"oo\" type.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"pf\" type.","line":7,"column":1,"nodeType":"Block","endLine":7,"endColumn":1},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":18,"column":9,"nodeType":"CallExpression","endLine":18,"endColumn":50}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * JavaScript code to be used with input type datepicker.\n *\n * @param $\n * @param oo\n * @param mw\n * @param pf\n * @author Sam Wilson\n * @author Yaron Koren\n */\n\n( function( $, oo, mw, pf ) {\n\t'use strict';\n\n\tjQuery.fn.applyDatePicker = function() {\n\t\treturn this.each(function() {\n\t\t\t// Don't apply datepicker control if disabled.\n\t\t\tif ( $(this).hasClass('oo-ui-widget-disabled') ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\too.ui.infuse( this );\n\t\t});\n\t};\n\n} )( jQuery, OO, mediaWiki, pf )\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_datetimepicker.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":4,"column":1,"nodeType":"Block","endLine":4,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"oo\" type.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"pf\" type.","line":7,"column":1,"nodeType":"Block","endLine":7,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * JavaScript code to be used with input type datetimepicker.\n *\n * @param $\n * @param oo\n * @param mw\n * @param pf\n * @author Sam Wilson\n * @author Yaron Koren\n */\n\n( function( $, oo, mw, pf ) {\n\t'use strict';\n\n\tvar localeOptions = {\n\t\ttimeZoneName: 'long',\n\t\tyear: 'numeric',\n\t\tmonth: 'long',\n\t\tday: 'numeric',\n\t\thour: 'numeric',\n\t\tminute: 'numeric'\n\t};\n\n\tjQuery.fn.applyDateTimePicker = function() {\n\t\treturn this.each( function() {\n\t\t\tvar widget = oo.ui.infuse( this );\n\t\t\tvar $localDatetimeLabel = $( '<label>' );\n\t\t\tvar $localDatetime = $( '<strong>' );\n\t\t\t// Add the label even when there isn't going to be a displayed date, to make sure it takes up vertical\n\t\t\t// space and avoid the form layout shifting when a date is selected.\n\t\t\t$localDatetimeLabel.append( mw.msg( 'pf-datetimepicker-localtime' ), ' ', $localDatetime );\n\t\t\twidget.$element\n\t\t\t\t.next( '.pf-datetimepicker-help' )\n\t\t\t\t.append( '<br>', $localDatetimeLabel );\n\t\t\twidget.connect( this, { change: function ( newDatetimeVal ) {\n\t\t\t\tif ( newDatetimeVal === '' || newDatetimeVal === undefined ) {\n\t\t\t\t\t$localDatetime.text( '' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar date = new Date( Date.parse( newDatetimeVal ) );\n\t\t\t\tvar localDatetime = date.toLocaleString( [], localeOptions );\n\t\t\t\t$localDatetime.text( localDatetime );\n\t\t\t} } );\n\t\t\t// Also fire the change handler once when instantiating, to operate on the default value.\n\t\t\twidget.emit( 'change', widget.getValue() );\n\t\t} );\n\t};\n\n} )( jQuery, OO, mediaWiki, pf )\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_editWarning.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":32,"column":9,"nodeType":"CallExpression","endLine":32,"endColumn":42},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":61,"column":11,"nodeType":"CallExpression","endLine":61,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*\n * JavaScript for displaying a popup warning if the user has made changes in\n * the form without saving the page.\n *\n * Heavily based on the file mediawiki.action.edit.editWarning.js in core\n * MediaWiki.\n *\n * @author Yaron Koren\n */\n( function() {\n\t'use strict';\n\n\tvar changesWereMade = false;\n\n\tmw.hook('pf.addTemplateInstance').add( function( $newInstance ) {\n\t\tchangesWereMade = true;\n\t});\n\n\n\t$( function() {\n\t\tvar allowCloseWindow, origText, newText, origValues = {},\n\t\t\t$allInputs = $( 'form#pfForm textarea, form#pfForm input[type=text], form#pfForm input:not([type]), form#pfForm select, #wpSummary' );\n\n\t\t// Check if EditWarning is enabled and if we need it.\n\t\tif ( !mw.user.options.get( 'useeditwarning' ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Save the original value of the inputs.\n\t\t$allInputs.each( function( index, element ) {\n\t\t\tvar $element = $( element );\n\t\t\tif ( $element.hasClass( 'pfComboBox' ) ) {\n\t\t\t\t// data() can't be used for combobox inputs, probably because they use OOUI.\n\t\t\t\torigValues[element.id] = $element.textSelection( 'getContents' );\n\t\t\t} else {\n\t\t\t\t$element.data( 'origtext', $element.textSelection( 'getContents' ) );\n\t\t\t}\n\t\t});\n\n\t\tallowCloseWindow = mw.confirmCloseWindow( {\n\t\t\ttest: function() {\n\t\t\t\t// Don't show a warning if the form is being\n\t\t\t\t// submitted.\n\t\t\t\tif ( mw.config.get( 'wgAction' ) === 'submit' ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Don't show a warning if we're in Special:RunQuery,\n\t\t\t\t// or a page where Special:RunQuery is embedded.\n\t\t\t\tif ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'FormEdit' &&\n\t\t\t\t\tmw.config.get( 'wgAction' ) !== 'formedit' ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// We use .textSelection, because editors might not have updated the form yet.\n\t\t\t\t$allInputs.each( function( index, element ) {\n\t\t\t\t\tvar $element = $( element );\n\n\t\t\t\t\t// The setting of both origText and\n\t\t\t\t\t// newText have to be different for the\n\t\t\t\t\t// combobox input, due to its use of\n\t\t\t\t\t// OOUI.\n\t\t\t\t\tif ( $element.hasClass( 'pfComboBox' ) ) {\n\t\t\t\t\t\torigText = origValues[element.id];\n\t\t\t\t\t\tnewText = $('#' + element.id).val();\n\t\t\t\t\t} else {\n\t\t\t\t\t\torigText = $element.data( 'origtext' );\n\t\t\t\t\t\t// For some reason, the addition of a blank string is sometimes\n\t\t\t\t\t\t// necessary, to get the type right.\n\t\t\t\t\t\tnewText = $element.textSelection( 'getContents' ) + '';\n\t\t\t\t\t}\n\t\t\t\t\tif ( origText != newText ) {\n\t\t\t\t\t\tchangesWereMade = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn changesWereMade;\n\t\t\t},\n\n\t\t\tnamespace: 'editwarning'\n\t\t} );\n\n\t\t// Add form submission handler\n\t\t$( '#pfForm' ).on( 'submit', function() {\n\t\t\tallowCloseWindow.release();\n\t\t} );\n\t} );\n\n}() );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_formInput.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":7,"column":1,"nodeType":"Block","endLine":7,"endColumn":1},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":21,"column":4,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":26,"endColumn":5},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":78,"column":4,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":78,"endColumn":78},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":82,"column":4,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":87,"endColumn":5},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":106,"column":4,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":106,"endColumn":78}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * PF_formInput.js\n *\n * JS handling for #forminput and Special:FormStart.\n *\n * @param $\n * @param mw\n * @author Yaron Koren\n */\n\n( function( $, mw ) {\n\n\t$.fn.displayPFFormInput = function() {\n\t\tvar formLayouts = [];\n\t\tvar autocompleteWidgetConfig = {};\n\t\tvar possibleFormsStr = this.attr('data-possible-forms');\n\t\tvar menuOptions = [],\n\t\t\tlayout;\n\t\tif ( possibleFormsStr !== undefined ) {\n\t\t\tvar possibleForms = possibleFormsStr.split('|');\n\t\t\tfor ( var possibleForm of possibleForms ) {\n\t\t\t\tmenuOptions.push( {\n\t\t\t\t\tdata: possibleForm,\n\t\t\t\t\tlabel: possibleForm\n\t\t\t\t} );\n\t\t\t}\n\t\t\tvar formChooserText = new OO.ui.LabelWidget( {\n\t\t\t\tlabel: this.attr('data-form-label')\n\t\t\t} )\n\t\t\tvar formChooserDropdown = new OO.ui.DropdownInputWidget( {\n\t\t\t\tname: 'form',\n\t\t\t\toptions: menuOptions,\n\t\t\t\tclasses: [ 'pfFormChooserDropdown' ]\n\t\t\t} );\n\t\t\tvar formChooserHorizontalLayout = new OO.ui.HorizontalLayout( {\n\t\t\t\titems: [ formChooserText,  formChooserDropdown ],\n\t\t\t} );\n\t\t\tformLayouts.push(formChooserHorizontalLayout);\n\t\t} else {\n\t\t\t// Only provide autofocus if there's no \"form\" dropdown -\n\t\t\t// otherwise, it might be confusing.\n\t\t\tif ( this.attr('data-autofocus') !== undefined ) {\n\t\t\t\tautocompleteWidgetConfig['autofocus'] = this.attr('data-autofocus');\n\t\t\t}\n\t\t}\n\n\t\tif ( this.attr('data-default-value') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['value'] = this.attr('data-default-value');\n\t\t}\n\t\tif ( this.attr('data-autocomplete-data-type') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['autocompletedatatype'] = this.attr('data-autocomplete-data-type');\n\t\t}\n\t\tif ( this.attr('data-autocomplete-settings') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['autocompletesettings'] = this.attr('data-autocomplete-settings');\n\t\t}\n\t\tif ( this.attr('data-placeholder') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['placeholder'] = this.attr('data-placeholder');\n\t\t}\n\t\tif ( this.attr('data-autocapitalize') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['autocapitalize'] = this.attr('data-autocapitalize');\n\t\t}\n\t\tif ( this.attr('data-size') !== undefined ) {\n\t\t\tautocompleteWidgetConfig['size'] = this.attr('data-size');\n\t\t}\n\t\tvar createOrEditButton = new OO.ui.ButtonInputWidget( {\n\t\t\ttype: 'submit',\n\t\t\tlabel: this.attr('data-button-label'),\n\t\t\tvalue: 'Submit',\n\t\t\tclasses: [ 'pfCreateOrEditButton' ]\n\t\t} );\n\t\tvar possibleNamespacesStr = this.attr('data-possible-namespaces');\n\t\tif ( possibleNamespacesStr !== undefined ) {\n\t\t\t// Special, non-OOUI-standard handling so that the\n\t\t\t// namespace and page name inputs can be on the same\n\t\t\t// line, replicating a full page name.\n\t\t\tvar pageWithNamespaceItems = [];\n\t\t\tautocompleteWidgetConfig['classes'] = [ 'pfPageNameWithNamespace' ];\n\t\t\tlet pageNameInput = new pf.AutocompleteWidget( autocompleteWidgetConfig );\n\n\t\t\tvar possibleNamespaces = possibleNamespacesStr.split('|');\n\t\t\tmenuOptions = [];\n\t\t\tfor ( var possibleNamespace of possibleNamespaces ) {\n\t\t\t\tmenuOptions.push( {\n\t\t\t\t\tdata: possibleNamespace,\n\t\t\t\t\tlabel: possibleNamespace\n\t\t\t\t} );\n\t\t\t}\n\t\t\tvar namespaceDropdown = new OO.ui.DropdownInputWidget( {\n\t\t\t\tname: 'namespace',\n\t\t\t\toptions: menuOptions,\n\t\t\t\tclasses: [ 'pfNamespaceDropdown' ]\n\t\t\t} );\n\t\t\tpageWithNamespaceItems.push( namespaceDropdown );\n\t\t\tvar colonLabel = new OO.ui.LabelWidget( {\n\t\t\t\tlabel: \":\"\n\t\t\t} );\n\t\t\tpageWithNamespaceItems.push( colonLabel );\n\t\t\tpageWithNamespaceItems.push( pageNameInput );\n\t\t\tpageWithNamespaceItems.push( createOrEditButton );\n\t\t\tlayout = new OO.ui.HorizontalLayout( {\n\t\t\t\titems: pageWithNamespaceItems,\n\t\t\t\tclasses: [ 'pfPageWithNamespace' ]\n\t\t\t} );\n\t\t} else {\n\t\t\tautocompleteWidgetConfig['classes'] = [ 'pfPageNameWithoutNamespace' ];\n\t\t\tlet pageNameInput = new pf.AutocompleteWidget( autocompleteWidgetConfig );\n\t\t\tlayout = new OO.ui.HorizontalLayout( {\n\t\t\t\titems: [ pageNameInput, createOrEditButton ]\n\t\t\t} );\n\t\t}\n\t\tformLayouts.push(layout);\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\titems: formLayouts\n\t\t} );\n\n\t\tthis.append( fieldset.$element );\n\n\t\t// We could put this all into an OO.ui.FormLayout instance,\n\t\t// but it would get complicated, due to the hidden inputs\n\t\t// needed, so we'll leave that to the PHP to do.\n\t};\n\n\t$(document).ready( function() {\n\t\t$( '.pfFormInputWrapper' ).each( function() {\n\t\t\t$(this).displayPFFormInput();\n\t\t});\n\t});\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_imagePreview.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":4,"column":1,"nodeType":"Block","endLine":4,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * JavaScript for the Page Forms MediaWiki extension.\n *\n * @param $\n * @param mw\n * @license GNU GPL v3+\n * @author Jeroen De Dauw <jeroendedauw at gmail dot com>\n */\n\n( function ( $, mw ) {\n\tvar _this = this;\n\n\tthis.getPreviewImage = function( args, callback ) {\n\t\t$.getJSON(\n\t\t\tmw.config.get( 'wgScriptPath' ) + '/api.php',\n\t\t\t{\n\t\t\t\t'action': 'query',\n\t\t\t\t'format': 'json',\n\t\t\t\t'prop': 'imageinfo',\n\t\t\t\t'iiprop': 'url',\n\t\t\t\t'titles': 'File:' + args.title,\n\t\t\t\t'iiurlwidth': args.width\n\t\t\t},\n\t\t\tfunction( data ) {\n\t\t\t\tif ( data.query && data.query.pages ) {\n\t\t\t\t\tvar pages = data.query.pages;\n\n\t\t\t\t\tfor ( var p in pages ) { // object, not an array\n\t\t\t\t\t\tvar info = pages[p].imageinfo;\n\t\t\t\t\t\tif ( info && info.length > 0 ) {\n\t\t\t\t\t\t\tcallback( info[0].thumburl );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcallback( false );\n\t\t\t}\n\t\t);\n\t};\n\n\t$( document ).ready( function() {\n\t\tvar showPreview = function( inputId ) {\n\t\t\tvar $input = $( '#' + inputId );\n\t\t\tvar $previewDiv = $( '#' + inputId + '_imagepreview' );\n\t\t\t_this.getPreviewImage(\n\t\t\t\t{\n\t\t\t\t\t'title': $input.val(),\n\t\t\t\t\t'width': 200\n\t\t\t\t},\n\t\t\t\tfunction( url ) {\n\t\t\t\t\tif ( url === false ) {\n\t\t\t\t\t\t$previewDiv.html( '' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$previewDiv.html( $( '<img />' ).attr( { 'src': url } ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t$( '.pfImagePreview' ).each( function( index, domElement ) {\n\t\t\tvar $uploadLink = $( domElement );\n\t\t\tvar inputId = $uploadLink.attr( 'data-input-id' );\n\t\t\tvar $input = $( '#' + inputId );\n\t\t\t$input.change( function() {\n\t\t\t\tshowPreview( inputId );\n\t\t\t} );\n\t\t} );\n\n\t\tmw.hook( 'pf.comboboxChange2' ).add( function( inputId ) {\n\t\t\tshowPreview( inputId );\n\t\t} );\n\t} );\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_maps.js","messages":[{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":201,"column":5,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":201,"endColumn":49},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":208,"column":5,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":208,"endColumn":65},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":209,"column":5,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":209,"endColumn":50},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":210,"column":5,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":210,"endColumn":103},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":262,"column":6,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":262,"endColumn":66},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":263,"column":6,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":263,"endColumn":51},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":264,"column":6,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":264,"endColumn":103}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @author Yaron Koren\n */\n\n/* global L */\n\nfunction setupMapFormInput( inputDiv, mapService ) {\n\tvar map, marker, markers, mapCanvas, mapOptions;\n\tvar imageHeight = null, imageWidth = null;\n\tvar numClicks = 0, timer = null, geocoder;\n\n\tif ( mapService === \"Google Maps\" ) {\n\t\tmapCanvas = inputDiv.find('.pfMapCanvas')[0];\n\t\tmapOptions = {\n\t\t\tzoom: 1,\n\t\t\tcenter: new google.maps.LatLng(0,0)\n\t\t};\n\t\tmap = new google.maps.Map(mapCanvas, mapOptions);\n\t\tgeocoder = new google.maps.Geocoder();\n\n\t\t// Let a click set the marker, while keeping the default\n\t\t// behavior (zoom and center) for double clicks.\n\t\t// Code copied from http://stackoverflow.com/a/8417447\n\t\tgoogle.maps.event.addListener( map, 'click', function( event ) {\n\t\t\ttimer = setTimeout( function() {\n\t\t\t\tgoogleMapsSetMarker( event.latLng );\n\t\t\t}, 200 );\n\t\t});\n\t\tgoogle.maps.event.addListener( map, 'dblclick', function( event ) {\n\t\t\tclearTimeout( timer );\n\t\t});\n\t} else if (mapService === \"Leaflet\") {\n\t\tmapCanvas = inputDiv.find('.pfMapCanvas').get(0);\n\t\tmapOptions = {\n\t\t\tzoom: 1,\n\t\t\tcenter: [ 0, 0 ]\n\t\t};\n\t\tvar layerOptions = {\n\t\t\tattribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n\t\t};\n\n\t\tvar imageUrl = inputDiv.attr('data-image-path');\n\t\tif ( imageUrl !== undefined ) {\n\t\t\timageHeight = inputDiv.attr('data-height');\n\t\t\timageWidth = inputDiv.attr('data-width');\n\t\t\tmapOptions.crs = L.CRS.Simple;\n\t\t}\n\n\t\tmap = L.map(mapCanvas, mapOptions);\n\n\t\tif ( imageUrl !== undefined ) {\n\t\t\tvar imageBounds = [ [ 0, 0 ], [ imageHeight, imageWidth ] ];\n\t\t\tL.imageOverlay(imageUrl, imageBounds).addTo(map);\n\t\t\tmap.fitBounds(imageBounds);\n\t\t} else {\n\t\t\tnew L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', layerOptions).addTo(map);\n\t\t}\n\n\t\tmap.on( 'click', function( event ) {\n\t\t\t// Place/move the marker only on a single click, not a\n\t\t\t// double click (double clicks do a zoom).\n\t\t\t// Code based on https://stackoverflow.com/a/7845282\n\t\t\tnumClicks++;\n\t\t\tif (numClicks === 1) {\n\t\t\t\ttimer = setTimeout( function() {\n\t\t\t\t\tleafletSetMarker( event.latlng );\n\t\t\t\t\tnumClicks = 0;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tnumClicks = 0;\n\t\t\t}\n\t\t});\n\t} else { // if ( mapService === \"OpenLayers\" ) {\n\t\tmapCanvas = inputDiv.find('.pfMapCanvas');\n\t\tvar mapCanvasID = mapCanvas.attr('id');\n\t\tif ( mapCanvasID === undefined ) {\n\t\t\t// If no ID is set, it's probably in a multiple-\n\t\t\t// instance template; just set the ID to a random\n\t\t\t// string, so we can attach the map to it.\n\t\t\tmapCanvasID = mapCanvas.attr('data-origID') + '-' +\n\t\t\t\tMath.random().toString(36).slice(2, 15);\n\t\t\tmapCanvas.attr('ID', mapCanvasID);\n\t\t}\n\t\tmap = new OpenLayers.Map( mapCanvasID );\n\t\t// We do this more complex initialization, rather than just\n\t\t// calling OpenLayers.Layer.OSM(), so that the tiles will be\n\t\t// loaded via either HTTP or HTTPS, depending on what we are\n\t\t// using.\n\t\tmap.addLayer( new OpenLayers.Layer.OSM(\n\t\t\t\"OpenStreetMap\",\n\t\t\t// Official OSM tileset as protocol-independent URLs\n\t\t\t[\n\t\t\t\t'//a.tile.openstreetmap.org/${z}/${x}/${y}.png',\n\t\t\t\t'//b.tile.openstreetmap.org/${z}/${x}/${y}.png',\n\t\t\t\t'//c.tile.openstreetmap.org/${z}/${x}/${y}.png'\n\t\t\t],\n\t\t\tnull\n\t\t) );\n\n\t\tmap.zoomTo(0);\n\t\tmarkers = new OpenLayers.Layer.Markers( \"Markers\" );\n\t\tmap.addLayer( markers );\n\n\t\tmap.events.register(\"click\", map, function(e) {\n\t\t\tnumClicks++;\n\t\t\tif (numClicks === 1) {\n\t\t\t\ttimer = setTimeout( function() {\n\t\t\t\t\tvar loc = map.getLonLatFromPixel( e.xy );\n\t\t\t\t\topenLayersSetMarker( loc );\n\t\t\t\t\tnumClicks = 0;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tnumClicks = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\tvar coordsInput = inputDiv.find('.pfCoordsInput');\n\tcoordsInput.keypress( function( e ) {\n\t\t// Is this still necessary for IE compatibility?\n\t\tvar keycode = (e.keyCode ? e.keyCode : e.which);\n\t\tif ( keycode == 13 ) {\n\t\t\tsetMarkerFromCoordinates();\n\t\t\t// Prevent the form from getting submitted.\n\t\t\te.preventDefault();\n\t\t\t$(this).removeClass( 'modifiedInput' )\n\t\t\t\t.parent().find('.pfCoordsInputHelpers').remove();\n\t\t}\n\t});\n\n\tcoordsInput.keydown( function( e ) {\n\t\tif ( ! coordsInput.hasClass( 'modifiedInput' ) ) {\n\t\t\tcoordsInput.addClass( 'modifiedInput' );\n\t\t\tvar $checkMark = $('<a></a>').addClass( 'pfCoordsCheckMark' ).css( 'color', 'green' ).html( '&#10004;' );\n\t\t\tvar $xMark = $('<a></a>').addClass( 'pfCoordsX' ).css( 'color', 'red' ).html( '&#10008;' );\n\t\t\tvar $marksDiv = $('<span></span>').addClass( 'pfCoordsInputHelpers' )\n\t\t\t\t.append( $checkMark ).append( ' ' ).append( $xMark );\n\t\t\tcoordsInput.parent().append( $marksDiv );\n\n\t\t\t$checkMark.click( function() {\n\t\t\t\tsetMarkerFromCoordinates();\n\t\t\t\tcoordsInput.removeClass( 'modifiedInput' );\n\t\t\t\t$marksDiv.remove();\n\t\t\t});\n\n\t\t\t$xMark.click( function() {\n\t\t\t\tcoordsInput.removeClass( 'modifiedInput' )\n\t\t\t\t\t.val( coordsInput.attr('data-original-value') );\n\t\t\t\t$marksDiv.remove();\n\t\t\t});\n\t\t}\n\t});\n\n\tinputDiv.find('.pfAddressInput').keypress( function( e ) {\n\t\t// Is this still necessary fro IE compatibility?\n\t\tvar keycode = (e.keyCode ? e.keyCode : e.which);\n\t\tif ( keycode == 13 ) {\n\t\t\tsetMarkerFromAddress();\n\t\t\t// Prevent the form from getting submitted.\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\n\tinputDiv.find('.pfLookUpAddress').click( function() {\n\t\tsetMarkerFromAddress();\n\t});\n\n\n\tif ( coordsInput.val() != '' ) {\n\t\tif ( mapService == 'OpenLayers' ) {\n\t\t\tmap.zoomTo( 14 );\n\t\t} else {\n\t\t\tmap.setZoom( 14 );\n\t\t}\n\t\t// This has to be called after the zooming, for the OpenLayers\n\t\t// zoom to work correctly.\n\t\tsetMarkerFromCoordinates();\n\t} else {\n\t\tif ( coordsInput.attr('data-bound-coords') ) {\n\t\t\tvar boundCoords = coordsInput.attr('data-bound-coords');\n\t\t\tvar coords = boundCoords.split(\";\");\n\t\t\tvar boundCoords1 = coords[0];\n\t\t\tvar lat1 = boundCoords1.split(\",\")[0].trim();\n\t\t\tvar lon1 = boundCoords1.split(\",\")[1].trim();\n\t\t\tvar boundCoords2 = coords[1];\n\t\t\tvar lat2 = boundCoords2.split(\",\")[0].trim();\n\t\t\tvar lon2 = boundCoords2.split(\",\")[1].trim();\n\t\t\tif ( !jQuery.isNumeric( lat1 ) || !jQuery.isNumeric( lon1 ) ||\n\t\t\t!jQuery.isNumeric( lat2 ) || !jQuery.isNumeric( lon2 ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( lat1 < -90 || lat1 > 90 || lon1 < -180 || lon1 > 180 ||\n\t\t\t\tlat2 < -90 || lat2 > 90 || lon2 < -180 || lon2 > 180 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( mapService === \"Google Maps\" ) {\n\t\t\t\tvar bound1 = new google.maps.LatLng(lat1, lon1);\n\t\t\t\tvar bound2 = new google.maps.LatLng(lat2, lon2);\n\t\t\t\tlet bounds = new google.maps.LatLngBounds();\n\t\t\t\tbounds.extend(bound1);\n\t\t\t\tbounds.extend(bound2);\n\t\t\t\tmap.fitBounds(bounds);\n\t\t\t} else if ( mapService === \"Leaflet\" ){\n\t\t\t\tmap.fitBounds([ [ lat1, lon1 ], [ lat2, lon2 ] ]);\n\t\t\t} else { // if ( mapService === \"OpenLayers\" ) {\n\t\t\t\tlet fromProjection = new OpenLayers.Projection(\"EPSG:4326\"); // transform from WGS 1984\n\t\t\t\tlet toProjection = map.getProjectionObject(); // to Spherical Mercator Projection\n\t\t\t\tlet bounds = new OpenLayers.Bounds(lon1, lat1, lon2, lat2).transform(fromProjection,toProjection);\n\t\t\t\tmap.zoomToExtent(bounds);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setMarkerFromAddress() {\n\t\tvar currentMapName = coordsInput.attr('name');\n\t\tvar addressText;\n\t\tvar allFeedersForCurrentMap = jQuery('[data-feeds-to-map=\"' + currentMapName + '\"]').map( function() {\n\t\t\treturn $( this ).val()\n\t\t}).get();\n\t\tif ( allFeedersForCurrentMap.length > 0 ) {\n\t\t\t// Assemble a single string from all the address inputs that feed to this map.\n\t\t\taddressText = allFeedersForCurrentMap.join( ', ' );\n\t\t} else {\n\t\t\t// No other inputs feed to this map, so use the standard \"Enter address here\" input.\n\t\t\taddressText = inputDiv.find('.pfAddressInput input').val();\n\t\t}\n\t\tif ( mapService === \"Google Maps\" ) {\n\t\t\tgeocoder.geocode( { 'address': addressText }, function(results, status) {\n\t\t\t\tif (status == google.maps.GeocoderStatus.OK) {\n\t\t\t\t\tmap.setCenter(results[0].geometry.location);\n\t\t\t\t\tgoogleMapsSetMarker( results[0].geometry.location );\n\t\t\t\t\tmap.setZoom(14);\n\t\t\t\t} else {\n\t\t\t\t\talert(\"Geocode was not successful for the following reason: \" + status);\n\t\t\t\t}\n\t\t\t});\n\t\t} else { // Leaflet, OpenLayers\n\t\t\t$.ajax( 'https://nominatim.openstreetmap.org/search?format=json&q=' + encodeURIComponent( addressText ) )\n\t\t\t.done( function( result ) {\n\t\t\t\tif ( result.length === 0 ) {\n\t\t\t\t\talert(\"Geocode was not successful\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar lat = result[0].lat;\n\t\t\t\tvar lon = result[0].lon;\n\t\t\t\t// Use the specified bounds - this is better\n\t\t\t\t// than a preset zoom, because it handles the\n\t\t\t\t// precision correctly for countries, cities,\n\t\t\t\t// etc.\n\t\t\t\tvar boundsStr = String(result[0].boundingbox);\n\t\t\t\tvar vals = boundsStr.split(\",\");\n\t\t\t\tvar bottom = vals[0];\n\t\t\t\tvar top = vals[1];\n\t\t\t\tvar left = vals[2];\n\t\t\t\tvar right = vals[3];\n\t\t\t\tif ( mapService === \"OpenLayers\" ) {\n\t\t\t\t\tvar olPoint = toOpenLayersLonLat( map, lat, lon );\n\t\t\t\t\topenLayersSetMarker( olPoint );\n\t\t\t\t\tmap.setCenter( olPoint );\n\t\t\t\t\tlet fromProjection = new OpenLayers.Projection(\"EPSG:4326\"); // transform from WGS 1984\n\t\t\t\t\tlet toProjection = map.getProjectionObject(); // to Spherical Mercator Projection\n\t\t\t\t\tlet bounds = new OpenLayers.Bounds(left,bottom,right,top).transform(fromProjection,toProjection);\n\t\t\t\t\tmap.zoomToExtent(bounds);\n\t\t\t\t} else if ( mapService === \"Leaflet\" ) {\n\t\t\t\t\tvar lPoint = L.latLng( lat, lon );\n\t\t\t\t\tleafletSetMarker( lPoint );\n\t\t\t\t\tmap.fitBounds([ [ bottom, left ], [ top, right ] ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction setMarkerFromCoordinates() {\n\t\tvar coordsText = coordsInput.val();\n\t\tvar coordsParts = coordsText.split(\",\");\n\t\tif ( coordsParts.length != 2 ) {\n\t\t\tcoordsInput.val('');\n\t\t\treturn;\n\t\t}\n\t\tvar lat = coordsParts[0].trim();\n\t\tvar lon = coordsParts[1].trim();\n\t\tif ( !jQuery.isNumeric( lat ) || !jQuery.isNumeric( lon ) ) {\n\t\t\tcoordsInput.val('');\n\t\t\treturn;\n\t\t}\n\t\tif ( lat < -90 || lat > 90 || lon < -180 || lon > 180 ) {\n\t\t\tcoordsInput.val('');\n\t\t\treturn;\n\t\t}\n\t\tif ( mapService === \"Google Maps\" ) {\n\t\t\tvar gmPoint = new google.maps.LatLng( lat, lon );\n\t\t\tgoogleMapsSetMarker( gmPoint );\n\t\t\tmap.setCenter( gmPoint );\n\t\t} else if ( mapService === \"Leaflet\" ){\n\t\t\tif ( imageHeight !== null && imageWidth !== null ) {\n\t\t\t\tlat *= imageWidth / 100;\n\t\t\t\tlon *= imageWidth / 100;\n\t\t\t}\n\t\t\tvar lPoint = L.latLng( lat, lon );\n\t\t\tleafletSetMarker( lPoint );\n\t\t\tif ( imageHeight == null && imageWidth == null ) {\n\t\t\t\tmap.setView( lPoint, 14 );\n\t\t\t}\n\t\t} else { // if ( mapService === \"OpenLayers\" ) {\n\t\t\tvar olPoint = toOpenLayersLonLat( map, lat, lon );\n\t\t\topenLayersSetMarker( olPoint );\n\t\t\tmap.setCenter( olPoint );\n\t\t}\n\t}\n\n\tfunction toOpenLayersLonLat( maps, lat, lon ) {\n\t\treturn new OpenLayers.LonLat( lon, lat ).transform(\n\t\t\tnew OpenLayers.Projection(\"EPSG:4326\"), // transform from WGS 1984\n\t\t\tmaps.getProjectionObject() // to Spherical Mercator Projection\n\t\t);\n\t}\n\n\t/**\n\t * Round off a number to five decimal places - that's the most\n\t * we need for coordinates, one would think.\n\t *\n\t * @param {Mixed} num\n\t * @return {Mixed}\n\t */\n\tfunction pfRoundOffDecimal( num ) {\n\t\treturn Math.round( num * 100000 ) / 100000;\n\t}\n\n\tfunction googleMapsSetMarker(location) {\n\t\tif (marker == undefined){\n\t\t\tmarker = new google.maps.Marker({\n\t\t\t\tposition: location,\n\t\t\t\tmap: map,\n\t\t\t\tdraggable: true\n\t\t\t});\n\t\t\tgoogle.maps.event.addListener( marker, 'dragend', function( event ) {\n\t\t\t\tgoogleMapsSetMarker( event.latLng );\n\t\t\t});\n\n\t\t} else {\n\t\t\tmarker.setPosition(location);\n\t\t}\n\t\tvar stringVal = pfRoundOffDecimal( location.lat() ) + ', ' + pfRoundOffDecimal( location.lng() );\n\t\tcoordsInput.val( stringVal )\n\t\t\t.attr( 'data-original-value', stringVal )\n\t\t\t.removeClass( 'modifiedInput' )\n\t\t\t.parent().find('.pfCoordsInputHelpers').remove();\n\t}\n\n\tfunction leafletSetMarker( location ) {\n\t\tif ( marker == null) {\n\t\t\tmarker = L.marker( location ).addTo( map );\n\t\t} else {\n\t\t\tmarker.setLatLng( location, { draggable: true } );\n\t\t}\n\t\tmarker.dragging.enable();\n\n\t\tfunction setInput() {\n\t\t\tvar lat = marker.getLatLng().lat;\n\t\t\tvar lng = marker.getLatLng().lng;\n\t\t\tif ( imageHeight == null && imageWidth == null ) {\n\t\t\t\t// Normal map.\n\t\t\t\t// Leaflet permits longitude beyond ±180, so\n\t\t\t\t// we have to normalize this here.\n\t\t\t\t// Google Maps and OpenLayers don't have this\n\t\t\t\t// issue.\n\t\t\t\twhile ( lng < -180 ) {\n\t\t\t\t\tlng += 360;\n\t\t\t\t}\n\t\t\t\twhile ( lng > 180 ) {\n\t\t\t\t\tlng -= 360;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlat *= 100 / imageWidth;\n\t\t\t\tlng *= 100 / imageWidth;\n\t\t\t}\n\t\t\tvar stringVal = pfRoundOffDecimal( lat ) + ', ' +\n\t\t\t\tpfRoundOffDecimal( lng );\n\t\t\tcoordsInput.val( stringVal )\n\t\t\t\t.attr( 'data-original-value', stringVal )\n\t\t\t\t.removeClass( 'modifiedInput' )\n\t\t\t\t.parent().find('.pfCoordsInputHelpers').remove();\n\t\t}\n\n\t\tmarker.off('dragend').on('dragend', function( event ) {\n\t\t\tsetInput();\n\t\t});\n\t\tsetInput();\n\t}\n\n\tfunction openLayersSetMarker( location ) {\n\t\t// OpenLayers does not have a real marker move\n\t\t// option - instead, just delete the old marker\n\t\t// and add a new one.\n\t\tmarkers.clearMarkers();\n\t\tmarker = new OpenLayers.Marker( location );\n\t\tmarkers.addMarker( marker );\n\n\t\t// Transform the coordinates back, in order to display them.\n\t\tvar realLonLat = location.clone();\n\t\trealLonLat.transform(\n\t\t\tmap.getProjectionObject(), // transform from Spherical Mercator Projection\n\t\t\tnew OpenLayers.Projection(\"EPSG:4326\") // to WGS 1984\n\t\t);\n\t\tvar stringVal = pfRoundOffDecimal( realLonLat.lat ) + ', ' + pfRoundOffDecimal( realLonLat.lon );\n\t\tcoordsInput.val( stringVal )\n\t\t\t.attr( 'data-original-value', stringVal )\n\t\t\t.removeClass( 'modifiedInput' )\n\t\t\t.parent().find('.pfCoordsInputHelpers').remove();\n\t}\n}\n\njQuery(document).ready( function() {\n\tjQuery(\".pfGoogleMapsInput\").each( function() {\n\t\t// Ignore the hidden \"starter\" div in multiple-instance templates.\n\t\tif ( $(this).closest(\".multipleTemplateStarter\").length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tsetupMapFormInput( jQuery(this), \"Google Maps\" );\n\t});\n\tjQuery(\".pfLeafletInput\").each( function() {\n\t\tif ( $(this).closest(\".multipleTemplateStarter\").length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tsetupMapFormInput( jQuery(this), \"Leaflet\" );\n\t});\n\tjQuery(\".pfOpenLayersInput\").each( function() {\n\t\tif ( $(this).closest(\".multipleTemplateStarter\").length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tsetupMapFormInput( jQuery(this), \"OpenLayers\" );\n\t});\n});\n\n// Activate maps in a new instance of a multiple-instance template.\nmw.hook('pf.addTemplateInstance').add( function( $newInstance ) {\n\t$newInstance.find(\".pfGoogleMapsInput\").each( function() {\n\t\tsetupMapFormInput( jQuery(this), \"Google Maps\" );\n\t});\n\t$newInstance.find(\".pfLeafletInput\").each( function() {\n\t\tsetupMapFormInput( jQuery(this), \"Leaflet\" );\n\t});\n\t$newInstance.find(\".pfOpenLayersInput\").each( function() {\n\t\tsetupMapFormInput( jQuery(this), \"OpenLayers\" );\n\t});\n});\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_maps.offline.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_popupform.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":373,"column":3,"nodeType":"AssignmentExpression","endLine":373,"endColumn":61},{"ruleId":"es-x/no-resizable-and-growable-arraybuffers","severity":1,"message":"ES2024 Resizable ArrayBuffer is forbidden.","line":646,"column":3,"nodeType":"MemberExpression","messageId":"forbiddenForResizableArrayBuffer","endLine":646,"endColumn":26},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":757,"column":12,"nodeType":"CallExpression","endLine":757,"endColumn":38},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":771,"column":12,"nodeType":"CallExpression","endLine":771,"endColumn":38}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript code to be used with extension PageForms for popup forms.\n *\n * @author Stephan Gambke\n */\n/*global escape*/\n\n// initialise\njQuery( function() {\n\n\t// register eventhandlers on 'edit' links and buttons\n\n\t// register formlink with link\n\tjQuery('a.popupformlink').click(function(evt){\n\t\treturn ext.popupform.handlePopupFormLink( this.getAttribute('href'), this );\n\t});\n\n\t// register formlink with button\n\tjQuery( 'form.popupformlink' ).submit(function(evt){\n\t\treturn ext.popupform.handlePopupFormLink( this.getAttribute( 'action' ), this );\n\t});\n\n\t// register forminput\n\tjQuery( 'form.popupforminput' ).submit(function(evt){\n\t\treturn ext.popupform.handlePopupFormInput( this.getAttribute( 'action' ), this );\n\t});\n\n} );\n\n// create ext if it does not exist yet\nif ( typeof( window.ext ) === \"undefined\" ) {\n\twindow.ext = {};\n}\n\nwindow.ext.popupform = ( function() {\n\tvar $wrapper;\n\tvar $background;\n\tvar container;\n\tvar $innerContainer;\n\tvar $iframe;\n\tvar $content;\n\tvar $waitIndicator;\n\tvar instance = 0;\n\n\tvar timer;\n\tvar needsRender = true;\n\n\tvar doc;\n\n\tvar brokenBrowser, brokenChrome;\n\n\tvar padding = 20;\n\tvar reload;\n\tfunction fadeOut($elem, callback ) {\n\t\t// no fading for broken browsers\n\t\tif ( brokenBrowser ){\n\t\t\t$elem.hide();\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t} else {\n\t\t\t// what an ugly hack\n\t\t\tif ( $elem === $waitIndicator ) {\n\t\t\t\t$elem.fadeOut( 200, callback );\n\t\t\t} else {\n\t\t\t\t$elem.fadeOut( callback );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction adjustFrameSize( animate ) {\n\t\t// set some inputs\n\t\tvar oldFrameW = container.width();\n\t\tvar oldFrameH = container.height();\n\t\tvar oldContW = $content.width();\n\t\tvar oldContH = $content.height();\n\n\t\tvar availW = Math.floor( jQuery(window).width() * 0.8 );\n\t\tvar availH = Math.floor( jQuery(window).height() * 0.8 );\n\n\t\tvar emergencyW = Math.floor( jQuery(window).width() * 0.85 );\n\t\tvar emergencyH = Math.floor( jQuery(window).height() * 0.85 );\n\n\t\t// FIXME: these might not be the true values\n\t\tvar scrollW = 25;\n\t\tvar scrollH = 25;\n\n\t\t// find the dimensions of the document\n\n\t\tvar $body = $content.closest('body');\n\t\tvar $html = $body.parent();\n\n\t\tvar $scrollTgt = $html;\n\n\t\tif ( jQuery.browser.webkit || jQuery.browser.safari ) {\n\t\t\t$scrollTgt = $body;\n\t\t}\n\n\t\tvar scrollTop = $scrollTgt.scrollTop();\n\t\tvar scrollLeft = $scrollTgt.scrollLeft();\n\n\t\tif ( jQuery.browser.mozilla ) {\n\t\t\tsetTimeout(function() {\n\t\t\t\t$content\n\t\t\t\t.css('position', 'absolute')\n\t\t\t\t.width( 'auto' )\n\t\t\t\t.height( 'auto' );\n\t\t\t}, 0);\n\t\t} else {\n\t\t\t$content\n\t\t\t.css('position', 'absolute')\n\t\t\t.width( 'auto' )\n\t\t\t.height( 'auto' );\n\t\t}\n\n\t\t// set max dimensions for layout of content\n\t\t$iframe\n\t\t.width( emergencyW )\n\t\t.height( emergencyH );\n\n\t\t// get dimension values\n\t\tvar docW = $content.width();\n\t\tvar docH = $content.height();\n\t\t// On Firefox, this doesn't work for some reason, so use\n\t\t// this roundabout method to set the dimensions.\n\t\tif ( docW === 0 || docH === 0 ) {\n\t\t\tdocW = availW * 0.95;\n\t\t\tdocH = availH * 0.95;\n\t\t}\n\n\t\t// set old dimensions for layout of content\n\t\t$iframe\n\t\t.width( '100%' )\n\t\t.height( '100%' );\n\n\t\t$content\n\t\t.css('position', 'relative')\n\t\t.width( oldContW )\n\t\t.height( oldContH );\n\n\t\tvar docpW = docW + 2 * padding;\n\t\tvar docpH = docH + 2 * padding;\n\n\t\t// Flags\n\n\t\tvar needsHScroll = docpW > emergencyW || ( docpW > emergencyW - scrollW && docpH > emergencyH );\n\t\tvar needsVScroll = docpH > emergencyH || ( docpH > emergencyH - scrollH && docpW > emergencyW );\n\n\t\tvar needsWStretch =\n\t\t( docpW > availW && docpW <= emergencyW ) && ( docpH <= emergencyH ) ||\n\t\t( docpW > availW - scrollW && docpW <= emergencyW - scrollW ) && ( docpH > emergencyH );\n\n\t\tvar needsHStretch =\n\t\t( docpH > availH && docpH <= emergencyH ) && ( docpW <= emergencyW ) ||\n\t\t( docpH > availH - scrollH && docpH <= emergencyH - scrollH ) && ( docpW > emergencyW );\n\n\t\t// Outputs\n\n\t\tvar frameW;\n\t\tvar frameH;\n\n\t\tvar contW;\n\t\tvar contH;\n\n\t\tif ( needsWStretch ) {\n\t\t\tcontW = docW;\n\t\t\tframeW = docpW;\n\t\t} else if ( docpW > availW ) { // form does not even fit with stretching\n\t\t\tcontW = docW;\n\t\t\tframeW = availW;\n\t\t} else {\n\t\t\t//contW = Math.max( Math.min( 1.5 * docW, availW ), availW / 2 );\n\t\t\tcontW = docW;\n\t\t\tframeW = docpW;\n\t\t}\n\n\t\tif ( needsVScroll ){\n\t\t\tframeW += scrollW;\n\t\t} else {\n\t\t\tscrollTop = 0;\n\t\t}\n\n\t\tif ( needsHStretch ) {\n\t\t\tcontH = docH;\n\t\t\tframeH = docpH;\n\t\t} else if ( docpH > availH ) { // form does not even fit with stretching\n\t\t\tcontH = docH;\n\t\t\tframeH = availH;\n\t\t} else {\n\t\t\t//contH = Math.min( 1.1 * docH, availH);\n\t\t\tcontH = docH;\n\t\t\tframeH = docpH;\n\t\t}\n\n\t\tif ( needsHScroll ){\n\t\t\tframeH += scrollH;\n\t\t} else {\n\t\t\tscrollLeft = 0;\n\t\t}\n\n\t\tif ( frameW !== oldFrameW || frameH !== oldFrameH ) {\n\n\t\t\tif ( jQuery.browser.safari ) {\n\t\t\t\t$html[0].style.overflow=\"hidden\";\n\t\t\t} else {\n\t\t\t\t$iframe[0].style.overflow=\"hidden\";\n\t\t\t}\n\n\t\t\tif ( animate ) {\n\t\t\t\t$content\n\t\t\t\t.width ( 'auto' )\n\t\t\t\t.height ( 'auto' );\n\n\t\t\t\tcontainer.animate({\n\t\t\t\t\twidth: frameW,\n\t\t\t\t\theight: frameH,\n\t\t\t\t\ttop: Math.floor(( - frameH ) / 2),\n\t\t\t\t\tleft: Math.floor(( - frameW ) / 2)\n\t\t\t\t}, {\n\t\t\t\t\tduration: 500,\n\t\t\t\t\tcomplete: function() {\n\n\t\t\t\t\t\tif ( jQuery.browser.safari ) {\n\t\t\t\t\t\t\t$html[0].style.overflow=\"visible\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$iframe[0].style.overflow=\"visible\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( jQuery.browser.mozilla ) {\n\t\t\t\t\t\t\t$content\n\t\t\t\t\t\t\t.width ( contW )\n\t\t\t\t\t\t\t.height ( contH );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$content\n\t\t\t\t\t\t\t.width ( 'auto' )\n\t\t\t\t\t\t\t.height ( 'auto' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t.width( frameW )\n\t\t\t\t.height ( frameH );\n\n\t\t\t\tcontainer[0].style.top = (Math.floor(( - frameH ) / 2)) + \"px\";\n\t\t\t\tcontainer[0].style.left = (Math.floor(( - frameW ) / 2)) + \"px\";\n\n\n\t\t\t\tsetTimeout(function(){\n\n\t\t\t\t\t\tif ( jQuery.browser.safari ) {\n\t\t\t\t\t\t\t$html[0].style.overflow=\"visible\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$iframe[0].style.overflow=\"visible\";\n\t\t\t\t\t\t}\n\n\t\t\t\t}, 100);\n\n\t\t\t\tif ( jQuery.browser.mozilla ) {\n\t\t\t\t\t$content\n\t\t\t\t\t.width ( contW )\n\t\t\t\t\t.height ( contH );\n\t\t\t\t} else {\n\t\t\t\t\t$content\n\t\t\t\t\t.width ( 'auto' )\n\t\t\t\t\t.height ( 'auto' );\n\t\t\t\t}\n\n\t\t\t}\n\t\t} else {\n\t\t\t$content\n\t\t\t.width ( 'auto' )\n\t\t\t.height ( 'auto' );\n\n\t\t\tif ( jQuery.browser.safari ) { // Google chrome needs a kick\n\n\t\t\t\t// turn scrollbars off and on again to really only show them when needed\n\t\t\t\t\t$html[0].style.overflow=\"hidden\";\n\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t$html[0].style.overflow=\"visible\";\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\n\t\t$scrollTgt\n\t\t.css('overflow', 'auto')\n\t\t.scrollTop(Math.min(scrollTop, docpH - frameH))\n\t\t.scrollLeft(scrollLeft);\n\n\t\tif ( jQuery.browser.mozilla ) {\n\t\t\t$body\n\t\t\t.css('overflow', 'auto');\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction handleCloseFrame( event ){\n\t\tjQuery(window).unbind( \"resize\", adjustFrameSize );\n\t\tclearTimeout(timer);\n\n\t\tfadeOut( container, function(){\n\t\t\t$background.fadeOut( function(){\n\t\t\t\t$wrapper.remove();\n\t\t\t});\n\t\t});\n\t\treturn false;\n\t}\n\n\tfunction fadeIn( $elem, callback ) {\n\t\t// no fading for broken browsers\n\t\tif ( brokenBrowser ){\n\t\t\t$elem.show();\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t} else {\n\t\t\t// what an ugly hack\n\t\t\tif ( $elem === $waitIndicator ) {\n\t\t\t\t$elem.fadeIn( 200, callback );\n\t\t\t} else {\n\t\t\t\t$elem.fadeIn( callback );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction fadeTo($elem, time, target, callback) {\n\t\t// no fading for broken browsers\n\t\tif ( brokenBrowser ){\n\n\t\t\tif (target > 0) {\n\t\t\t\t$elem[0].style.visibility = \"visible\";\n\t\t\t} else {\n\t\t\t\t$elem[0].style.visibility = \"hidden\";\n\t\t\t}\n\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\n\t\t} else {\n\t\t\t$elem.fadeTo(time, target, callback);\n\t\t}\n\t}\n\n\tfunction showForm() {\n\t\tinstance++;\n\n\t\tbrokenChrome =\n\t\t( navigator.userAgent.indexOf(\"Chrome\") >= 0 &&\n\t\t\tnavigator.platform.indexOf(\"Linux x86_64\") >= 0 );\n\n\t\tbrokenBrowser = brokenChrome;\n\n\t\tvar maxZIndex = 0;\n\n\t\tjQuery(\"*\").each(function() {\n\t\t\tvar curr = parseInt( jQuery( this ).css( \"z-index\" ) );\n\t\t\tmaxZIndex = curr > maxZIndex ? curr : maxZIndex;\n\t\t});\n\n\t\t$wrapper = jQuery( \"<div class='popupform-wrapper' >\" );\n\t\t$background = jQuery( \"<div class='popupform-background' >\" );\n\n\t\tvar $waitIndicatorWrapper = jQuery( \"<div class='popupform-loading'>\" );\n\n\t\t$waitIndicator = jQuery( \"<div class='popupform-loadingbg'></div><div class='popupform-loadingfg'></div>\" );\n\n\t\tvar $anchor = jQuery( \"<div class='popupform-anchor' >\" );\n\n\t\tcontainer = jQuery( \"<div class='popupform-container' >\" );\n\t\t$innerContainer = jQuery( \"<div class='popupform-innercontainer' >\" );\n\t\t$iframe = jQuery( \"<iframe class='popupform-innerdocument' name='popupform-iframe\" + instance + \"' id='popupform-iframe\" + instance + \"' >\");\n\n\t\tvar $closeBtn = jQuery( \"<div class='popupform-close'></div> \" );\n\n\t\t// initially hide background and waitIndicator\n\t\tif (brokenChrome) {\n\t\t\t$background.css(\"background\", \"transparent\");\n\t\t} else {\n\t\t\t$background.css(\"opacity\", 0.0);\n\t\t}\n\n\t\t$waitIndicator.hide();\n\t\tcontainer.hide();\n\n\t\t// insert background and wait indicator into wrapper and all into document\n\t\t$waitIndicatorWrapper\n\t\t.append( $waitIndicator );\n\n\t\t$innerContainer\n\t\t.append( $iframe );\n\n\t\tcontainer\n\t\t.append( $closeBtn )\n\t\t.append( $innerContainer );\n\n\t\t$anchor\n\t\t.append(container);\n\n\t\t$wrapper\n\t\t.css( \"z-index\", maxZIndex + 1 )\n\t\t.append( $background )\n\t\t.append( $waitIndicatorWrapper )\n\t\t.append( $anchor )\n\t\t.appendTo( \"body\" );\n\n\t\t// fade background in\n\t\tif ( !brokenChrome ) {\n\t\t\t$background.fadeTo( 400, 0.6 );\n\t\t}\n\t\tfadeIn( $waitIndicator );\n\n\t\t// attach event handler to close button\n\t\t$closeBtn.click( handleCloseFrame );\n\t}\n\n\tfunction purgePage() {\n\t\tvar path = location.pathname;\n\t\t// get name of the current page from the url\n\t\tvar pageName = path.split(\"/\").pop();\n\t\treturn ( new mw.Api() ).post( { action: 'purge', titles: pageName } );\n\t}\n\n\tfunction handleSubmitData( event, returnedData, textStatus, XMLHttpRequest ){\n\t\tfadeOut( container, function() {\n\t\t\tfadeIn( $waitIndicator );\n\t\t});\n\n\t\tvar $form = jQuery( event.target );\n\t\tvar formdata = $form.serialize() + \"&wpSave=\" + encodeURIComponent($form.find(\"#wpSave\").attr(\"value\"));\n\n\t\tfunction handleInnerSubmit() {\n\t\t\t// find form in fake edit page\n\t\t\tvar $innerform = jQuery(\"<div>\" + returnedData + \"</div>\").find(\"form\");\n\n\t\t\t// check if we got an error page\n\t\t\tif ( $innerform.length === 0 ) {\n\n\t\t\t\t$form.unbind( event );\n\n\t\t\t\t$iframe = container.find(\"iframe\");\n\t\t\t\tdoc = $iframe[0].contentWindow || $iframe[0].contentDocument;\n\t\t\t\tif (doc.document) {\n\t\t\t\t\tdoc = doc.document;\n\t\t\t\t}\n\n\t\t\t\tdoc.open();\n\t\t\t\tdoc.write(returnedData);\n\t\t\t\tdoc.close();\n\n\t\t\t\thandleCloseFrame();\n\t\t\t\tif ( reload ) {\n\t\t\t\t\tpurgePage().then( function( data ) {\n\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Send the form data off, we do not care for the returned data\n\t\t\tvar innerformdata = $innerform.serialize();\n\t\t\tjQuery.post( $innerform.attr(\"action\"), innerformdata );\n\n\t\t\t// build new url for outer page (we have to ask for a purge)\n\n\t\t\tvar url = location.href;\n\n\t\t\t// does a querystring exist?\n\t\t\tvar start = url.indexOf(\"action=\");\n\n\t\t\tif ( start >= 0 ) {\n\n\t\t\t\tvar stop = url.indexOf(\"&\", start);\n\n\t\t\t\tif ( stop >= 0 ) {\n\t\t\t\t\turl = url.slice( 0, Math.max(0, start - 1) ) + url.slice(stop + 1);\n\t\t\t\t} else {\n\t\t\t\t\turl = url.slice( 0, Math.max(0, start - 1) );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t$form = jQuery('<form action=\"' + url + '\" method=\"POST\"><input type=\"hidden\" name=\"action\" value=\"purge\"></form>')\n\t\t\t.appendTo('body');\n\n\t\t\t$form\n\t\t\t.submit();\n\n\t\t\tfadeOut( container, function(){\n\t\t\t\tfadeIn( $waitIndicator );\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// Send form data off. PF will send back a fake edit page\n\t\t//\n\t\t// Normally we should check this.action first and only if it is empty\n\t\t// revert to this.ownerDocument.URL. Tough luck, IE does not return an\n\t\t// empty action but fills in some bogus\n\t\tjQuery.post( event.target.ownerDocument.URL , formdata, handleInnerSubmit);\n\n\t\treturn false;\n\t}\n\n\tfunction closeFrameAndFollowLink( link ){\n\t\tclearTimeout(timer);\n\n\t\tfadeOut( container, function(){\n\t\t\tfadeIn ( $waitIndicator );\n\t\t\twindow.location.href = link;\n\t\t});\n\t}\n\n\t// Saw it on http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element\n\t// and liked it\n\tfunction getStyle(oElm, strCssRule){\n\t\tvar strValue = \"\";\n\t\tif(document.defaultView && document.defaultView.getComputedStyle){\n\t\t\tstrValue = document.defaultView.getComputedStyle(oElm, \"\").getPropertyValue(strCssRule);\n\t\t} else if(oElm.currentStyle){\n\t\t\tstrCssRule = strCssRule.replace(/\\-(\\w)/g, function(strMatch, p1) {\n\t\t\t\treturn p1.toUpperCase();\n\t\t\t});\n\t\t\tstrValue = oElm.currentStyle[strCssRule];\n\t\t}\n\t\treturn strValue;\n\t}\n\n\tfunction handleLoadFrame() {\n\t\tvar $iframecontents = $iframe.contents();\n\n\t\tvar containerAlreadyVisible = container.is( ':visible' );\n\n\t\tif ( !containerAlreadyVisible ) {\n\t\t\t// no need to hide it again\n\t\t\tif ( brokenBrowser ) {\n\t\t\t\tcontainer[0].style.visibility = \"hidden\";\n\t\t\t} else {\n\t\t\t\tcontainer[0].style.opacity = 0;\n\t\t\t}\n\t\t}\n\n\t\tcontainer.show();\n\n\t\t// GuMaxDD has #content but keeps headlines in #gumax-content-body\n\t\t$content = $iframecontents.find(\"#gumax-content-body\");\n\n\t\t// Normal skins use #content (e.g. Vector, Monobook)\n\t\tif ( $content.length === 0 ) {\n\t\t\t$content = $iframecontents.find(\"#content\");\n\t\t}\n\n\t\t// Some skins use #mw_content (e.g. Modern)\n\t\tif ( $content.length === 0 ) {\n\t\t\t$content = $iframecontents.find(\"#mw_content\");\n\t\t}\n\n\t\tvar $iframebody = $content.closest(\"body\");\n\t\tvar $iframedoc = $iframebody.parent();\n\n\t\t// This is not a normal MW page (or it uses an unknown skin)\n\t\tif ( $content.length === 0 ) {\n\t\t\t$content = $iframebody;\n\t\t}\n\n\t\t// The huge left margin looks ugly in Vector - reduce it.\n\t\t// (How does this look for other skins?)\n\t\tvar $siblings = $content\n\t\t.css( {\n\t\t\tmargin: 0,\n\t\t\tpadding: padding,\n\t\t\twidth: \"auto\",\n\t\t\theight: \"auto\",\n\t\t\tminWidth: \"0px\",\n\t\t\tminHeight:\"0px\",\n//\t\t\toverflow: \"visible\",\n//\t\t\tposition: \"relative\",\n//\t\t\ttop: \"0\",\n//\t\t\tleft: \"0\",\n\t\t\tborder: \"none\"\n\t\t} )\n\t\t.parentsUntil('html')\n\t\t.css( {\n\t\t\tmargin: 0,\n\t\t\tpadding: 0,\n\t\t\twidth: \"auto\",\n\t\t\theight: \"auto\",\n\t\t\tminWidth: \"0px\",\n\t\t\tminHeight: \"0px\",\n\t\t\t\"float\": \"none\", // Cavendish skin uses floating -> unfloat content\n//\t\t\tposition: \"relative\",\n//\t\t\ttop: \"0\",\n//\t\t\tleft: \"0\",\n\t\t\tbackground: \"transparent\"\n\t\t})\n\t\t.addBack().siblings();\n\n\t\t$iframedoc.height('100%').width('100%');\n\t\t$iframebody.height('100%').width('100%');\n\n\t\t$siblings.each( function(){\n\t\t\tvar $elem = jQuery(this);\n\n\t\t\t// TODO: Does this really help?\n\t\t\tif ( getStyle(this, \"display\") !== \"none\" && ! (\n\t\t\t\t\t( this.offsetLeft + $elem.outerWidth(true) < 0 ) ||\t\t// left of document\n\t\t\t\t\t( this.offsetTop + $elem.outerHeight(true) < 0 ) || // above document\n\t\t\t\t\t( this.offsetLeft > 100000 ) ||\t\t// right of document\n\t\t\t\t\t( this.offsetTop > 100000 ) // below document\n\t\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tjQuery(this).hide();\n\t\t\t\t//\t\t\t\t\tcss({\n\t\t\t\t//\t\t\t\t\t\theight : \"0px\",\n\t\t\t\t//\t\t\t\t\t\twidth : \"0px\",\n\t\t\t\t//\t\t\t\t\t\tminWidth : \"0px\",\n\t\t\t\t//\t\t\t\t\t\tminHeight : \"0px\",\n\t\t\t\t//\t\t\t\t\t\tmargin : \"0px\",\n\t\t\t\t//\t\t\t\t\t\tpadding : \"0px\"\n\t\t\t\t//\t\t\t\t\t\tborder : \"none\",\n\t\t\t\t//\t\t\t\t\t\toverflow: \"hidden\"\n\t\t\t\t//\t\t\t\t\t//position: \"static\"\n\t\t\t\t//\t\t\t\t\t});\n\t\t\t}\n\t\t\tif ( ( this.offsetLeft + $elem.outerWidth() < 0 ) ||\n\t\t\t\t( this.offsetTop + $elem.outerHeight() < 0 )\n\t\t\t\t) {\n\t\t\t\tthis.style.left = (-$elem.outerWidth(true)) + \"px\";\n\t\t\t\tthis.style.top = (-$elem.outerHeight(true)) + \"px\";\n\t\t\t}\n\t\t});\n\t\t//.children().css(\"position\", \"static\");\n\n\t\tcontainer.show();\n\n\t\t// adjust frame size to dimensions just calculated\n\t\tadjustFrameSize();\n\n\t\t// and attach event handler to adjust frame size every time the window\n\t\t// size changes\n\t\tjQuery( window ).resize( function() {\n\t\t\tadjustFrameSize();\n\t\t} );\n\n\t\t//interval = setInterval(adjustFrameSize, 100);\n\n\t\tvar $form = $content.find(\"#pfForm\");\n\t\tvar innerwdw = document.getElementById( 'popupform-iframe' + instance ).contentWindow;\n\t\tvar innerJ = innerwdw.jQuery;\n\n\t\t// if we have a form and it is not a RunQuery form\n\t\tif ($form.length > 0 && ( typeof $form[0].wpRunQuery === 'undefined') ) {\n\t\t\tvar submitok = false;\n\t\t\tvar innersubmitprocessed = false;\n\n\t\t\t// catch form submit event\n\t\t\t$form\n\t\t\t.bind( \"submit\", function( event ){\n\t\t\t\tvar interval = setInterval(function(){\n\t\t\t\t\tif ( innersubmitprocessed ) {\n\t\t\t\t\t\tclearInterval( interval );\n\t\t\t\t\t\tinnersubmitprocessed = false;\n\t\t\t\t\t\tif ( submitok ) {\n\t\t\t\t\t\t\thandleSubmitData( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}, 10);\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t// catch inner form submit event\n\t\t\tif ( innerJ ) {\n\t\t\t\tinnerwdw.jQuery($form[0])\n\t\t\t\t.bind( \"submit\", function( event ) {\n\t\t\t\t\t\tsubmitok = ( event.result === undefined ) ? true : event.result;\n\t\t\t\t\t\tinnersubmitprocessed = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsubmitok = true;\n\t\t\t\tinnersubmitprocessed = true;\n\t\t\t}\n\t\t}\n\n\t\tif (innerJ) {\n\t\t\t// FIXME: Why did I put this in?\n\t\t\tinnerwdw.jQuery( innerwdw[0] ).on('unload', function(event) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t//\n\t\t\t$content.bind( 'click', function() {\n\t\t\t\tvar foundQueue = false;\n\t\t\t\tinnerJ('*', $content[0]).each( function() {\n\t\t\t\t\tif ( innerJ(this).queue().length > 0 ) {\n\t\t\t\t\t\tfoundQueue = true;\n\t\t\t\t\t\tinnerJ(this).queue( function(){\n\t\t\t\t\t\t\tsetTimeout( adjustFrameSize, 100, true );\n\t\t\t\t\t\t\tinnerJ(this).dequeue();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif ( ! foundQueue ) {\n\t\t\t\t\tadjustFrameSize( true );\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t} else {\n\t\t\t$content.bind( 'click', function() {\n\t\t\t\t\tadjustFrameSize( true );\n\t\t\t});\n\t\t}\n\n\t\t// find all links. Have to use inner jQuery so event.result below\n\t\t// reflects the result of inner event handlers. We (hopefully) come last\n\t\t// in the chain of event handlers as we only attach when the frame is\n\t\t// already completely loaded, i.e. every inner event handler is already\n\t\t// attached.\n\t\tvar allLinks = (innerJ)?innerJ(\"a[href]\"):jQuery(\"a[href]\");\n\n\t\t// catch 'Cancel'-Link (and other 'back'-links) and close frame instead of going back\n\t\tvar backlinks = allLinks.filter('a[href=\"javascript:history.go(-1);\"]');\n\t\tbacklinks.click(handleCloseFrame);\n\n\t\t// promote any other links to open in main window, prevent nested browsing\n\t\tallLinks\n\t\t.not('a[href*=\"javascript:\"]') // scripted links\n\t\t.not('a[target]')              // targeted links\n\t\t.not('a[href^=\"#\"]')           // local links\n\t\t.not('a.pfUploadable')         // link to file upload\n\t\t.click(function(event){\n\t\t\tif ( event.result !== false ) { // if not already caught by somebody else\n\t\t\t\tcloseFrameAndFollowLink( event.target.getAttribute('href') );\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\t// finally show the frame, but only if it is not already visible\n\t\tif ( ! containerAlreadyVisible ) {\n\t\t\t\tfadeOut ( $waitIndicator, function() {\n\t\t\t\tfadeTo( container, 400, 1 );\n\t\t\t} );\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction handlePopupFormInput( ptarget, elem ) {\n\t\tshowForm();\n\t\treload = $(elem).hasClass('reload');\n\n\t\t$iframe.on( 'load', function(){\n\t\t\t// attach event handler to iframe\n\t\t\t$iframe.bind( 'load', handleLoadFrame );\n\t\t\treturn false;\n\t\t});\n\n\t\telem.target = 'popupform-iframe' + instance;\n\t\treturn true;\n\t}\n\n\tfunction handlePopupFormLink( ptarget, elem ) {\n\t\tshowForm();\n\t\treload = $(elem).hasClass('reload');\n\t\t// store initial readystate\n\t\tvar readystate = $iframe.contents()[0].readyState;\n\n\t\t// set up timer for waiting on the document in the iframe to be dom-ready\n\t\t// this sucks, but there is no other way to catch that event\n\t\t// onload is already too late\n\t\ttimer = setInterval(function(){\n\t\t\t// if the readystate changed\n\t\t\tif ( readystate !== $iframe.contents()[0].readyState ) {\n\t\t\t\t// store new readystate\n\t\t\t\treadystate = $iframe.contents()[0].readyState;\n\n\t\t\t\t// if dom is built but document not yet displayed\n\t\t\t\tif ( readystate === 'interactive' || readystate === 'complete' ) {\n\t\t\t\t\tneedsRender = false; // flag that rendering is already done\n\t\t\t\t\thandleLoadFrame();\n\t\t\t\t}\n\t\t\t}\n\t\t}, 100 );\n\n\t\t// fallback in case we did not catch the dom-ready state\n\t\t$iframe.on('load', function( event ){\n\t\t\tif ( needsRender ) { // rendering not already done?\n\t\t\t\thandleLoadFrame( event );\n\t\t\t}\n\t\t\tneedsRender = true;\n\t\t});\n\n\t\tif ( elem.tagName === 'FORM' ) {\n\t\t\telem.target = 'popupform-iframe' + instance;\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar delim = ptarget.indexOf( '?' );\n\t\t\tvar form = document.createElement(\"form\");\n\n\t\t\tform.target = 'popupform-iframe' + instance;\n\n\t\t\t// Do we have parameters?\n\t\t\tif ( delim > 0 ) {\n\t\t\t\tform.action = ptarget.slice( 0, Math.max(0, delim) );\n\t\t\t\tvar params = String( ptarget.slice( delim + 1 ) ).split(\"&\");\n\t\t\t\tfor ( var i = 0; i < params.length; ++i ) {\n\n\t\t\t\t\tvar input = document.createElement(\"input\");\n\t\t\t\t\tvar param = String( params[i] ).split('=');\n\t\t\t\t\tinput.type = 'hidden';\n\t\t\t\t\tinput.name = decodeURIComponent( param[0] );\n\t\t\t\t\tinput.value = decodeURIComponent( param[1] );\n\t\t\t\t\tform.appendChild( input );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tform.action = ptarget;\n\t\t\t}\n\n\t\t\tdocument.getElementsByTagName('body')[0].appendChild(form);\n\t\t\tform.submit();\n\t\t\tdocument.getElementsByTagName('body')[0].removeChild(form);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// export public funcitons\n\tthis.handlePopupFormInput = handlePopupFormInput;\n\tthis.handlePopupFormLink = handlePopupFormLink;\n\tthis.adjustFrameSize = adjustFrameSize;\n\n\treturn this;\n}() );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_preview.js","messages":[{"ruleId":"es-x/no-resizable-and-growable-arraybuffers","severity":1,"message":"ES2024 Resizable ArrayBuffer is forbidden.","line":56,"column":3,"nodeType":"MemberExpression","messageId":"forbiddenForResizableArrayBuffer","endLine":56,"endColumn":21}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Handles dynamic Page Preview for Page Forms.\n *\n * @author Stephan Gambke\n */\n\n/*global validateAll */\n\n( function( $, mw ) {\n\n\t'use strict';\n\n\tvar $form;\n\tvar $previewpane;\n\tvar previewHeight;\n\n\t/**\n\t * Called when the content is loaded into the preview pane\n\t *\n\t * @return {Mixed}\n\t */\n\tvar loadFrameHandler = function handleLoadFrame() {\n\n\t\tvar $iframe = $( this );\n\t\tvar $iframecontents = $iframe.contents();\n\n\t\t// find div containing the preview\n\t\tvar $content = $iframecontents.find( '#wikiPreview' );\n\n\t\tvar $iframebody = $content.closest( 'body' );\n\t\tvar $iframedoc = $iframebody.parent();\n\t\t$iframedoc.height( 'auto' );\n\n\t\t// this is not a normal MW page (or it uses an unknown skin)\n\t\tif ( $content.length === 0 ) {\n\t\t\t$content = $iframebody;\n\t\t}\n\n\t\t$content.parentsUntil( 'html' ).addBack()\n\t\t.css( {\n\t\t\tmargin: 0,\n\t\t\tpadding: 0,\n\t\t\twidth: '100%',\n\t\t\theight: 'auto',\n\t\t\tminWidth: '0px',\n\t\t\tminHeight: '0px',\n\t\t\t'float': 'none', // Cavendish skin uses floating -> unfloat content\n\t\t\tborder: 'none',\n\t\t\tbackground: 'transparent'\n\t\t} )\n\t\t.siblings()\n\t\t.hide(); // FIXME: Some JS scripts don't like working on hidden elements\n\n\t\t// and attach event handler to adjust frame size every time the window\n\t\t// size changes\n\t\t$( window ).resize( function() {\n\t\t\t$iframe.height( $iframedoc.height() );\n\t\t} );\n\n\t\t$previewpane.show();\n\n\t\tvar newPreviewHeight = $iframedoc.height();\n\n\t\t$iframe.height( newPreviewHeight );\n\n\t\t$( 'html, body' )\n\t\t.scrollTop( $( 'html, body' ).scrollTop() + newPreviewHeight - previewHeight )\n\t\t.animate( {\n\t\t\tscrollTop: $previewpane.offset().top\n\t\t}, 1000 );\n\n\t\tpreviewHeight = newPreviewHeight;\n\n\t\t$( function() {\n\t\t\twindow.dispatchEvent( new Event( 'resize' ) ); // It fixes form preview\n\t\t} );\n\n\t\treturn false;\n\t};\n\n\t/**\n\t * Called when the server has sent the preview\n\t *\n\t * @param {Mixed} result\n\t */\n\tvar resultReceivedHandler = function handleResultReceived( result ) {\n\n\t\tvar htm = result.result;\n\n\t\tvar $iframe = $previewpane.children();\n\n\t\tif ( $iframe.length === 0 ) {\n\n\t\t\t// set initial height of preview area\n\t\t\tpreviewHeight = 0;\n\n\t\t\t$iframe = $( '<iframe>' )\n\t\t\t.css( { //FIXME: Should this go in a style file?\n\t\t\t\t'width': '100%',\n\t\t\t\t'height': previewHeight,\n\t\t\t\t'border': 'none',\n\t\t\t\t'overflow': 'hidden'\n\t\t\t} )\n\t\t\t.load( loadFrameHandler )\n\t\t\t.appendTo( $previewpane );\n\n\t\t}\n\n\t\tvar ifr = $iframe[0];\n\t\tvar doc = ifr.contentDocument || ifr.contentWindow.document || ifr.Document;\n\n\t\tdoc.open();\n\t\tdoc.write( htm );\n\t\tdoc.close();\n\n\t};\n\n\t/**\n\t * Called when the preview button was clicked\n\t */\n\tvar previewButtonClickedHandler = function handlePreviewButtonClicked() {\n\n\t\tif ( !validateAll() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// data array to be sent to the server\n\t\tvar data = {\n\t\t\taction: 'pfautoedit',\n\t\t\tformat: 'json'\n\t\t};\n\n\t\t// do we have a URL like .../index.php?title=pagename&action=formedit ?\n\t\tif ( mw.config.get( 'wgAction' ) === 'formedit' ) {\n\n\t\t\t// set the title, server has to find a suitable form\n\t\t\tdata.target = mw.config.get( 'wgPageName' );\n\n\t\t\t// do we have a URL like .../Special:FormEdit/formname/pagename ?\n\t\t} else if ( mw.config.get( 'wgCanonicalNamespace' ) === 'Special' && mw.config.get( 'wgCanonicalSpecialPageName' ) === 'FormEdit' ) {\n\n\t\t\t// get the pagename and split it into parts\n\t\t\tvar pageName = mw.config.get( 'wgPageName' );\n\t\t\tvar parts = pageName.split( '/' );\n\n\t\t\tif ( mw.util.getParamValue( 'form' ) ) {\n\t\t\t\tdata.form = mw.util.getParamValue( 'form' );\n\t\t\t} else if ( parts.length > 1 ) { // found a formname\n\t\t\t\tdata.form = parts[1];\n\t\t\t}\n\n\t\t\tif ( mw.util.getParamValue( 'target' ) ) {\n\t\t\t\tdata.target = mw.util.getParamValue( 'target' );\n\t\t\t} else if ( parts.length > 2 ) { // found a pagename\n\t\t\t\t// Put the name back together, if it contains slashes.\n\t\t\t\tdata.target = parts.slice(2).join( '/' );\n\t\t\t}\n\t\t}\n\n\t\t// add form values to the data\n\t\tdata.query = $form.serialize();\n\n\t\tif ( data.query.length > 0 ) {\n\t\t\tdata.query += '&';\n\t\t}\n\n\t\tdata.query += 'wpPreview=' + encodeURIComponent( $( this ).attr( 'value' ) );\n\n\t\t$.ajax( {\n\n\t\t\ttype: 'POST', // request type ( GET or POST )\n\t\t\turl: mw.util.wikiScript( 'api' ), // URL to which the request is sent\n\t\t\tdata: data, // data to be sent to the server\n\t\t\tdataType: 'json', // type of data expected back from the server\n\t\t\tsuccess: resultReceivedHandler // function to be called if the request succeeds\n\t\t} );\n\t};\n\n\t/**\n\t * Register plugin\n\t *\n\t *  @return {Mixed}\n\t */\n\t$.fn.pfAjaxPreview = function() {\n\n\t\t$form = this.closest( 'form' );\n\t\t$previewpane = $( '#wikiPreview' );\n\n\t\t// do some sanity checks\n\t\tif ( $previewpane.length === 0 || // no ajax preview without preview area\n\t\t\t$previewpane.contents().length > 0 || // preview only on an empty previewpane\n\t\t\t$form.length === 0 ) { // no ajax preview without form\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// register event handler\n\t\tthis.click( previewButtonClickedHandler );\n\n\t\treturn this;\n\t};\n\n\t$( document ).ready( function() {\n\t\tif ( mw.config.get( 'wgAction' ) === 'formedit' ||\n\t\t\tmw.config.get( 'wgCanonicalSpecialPageName' ) === 'FormEdit' ) {\n\t\t\t$( '#wpPreview' ).pfAjaxPreview();\n\t\t\t$( document ).on( 'VEForAllLoaded', function() {\n\t\t\t\tif ( $('.visualeditor').length > 0 ) {\n\t\t\t\t\t$( '#wpPreview' ).off('click', previewButtonClickedHandler).on('click', function( event ) {\n\t\t\t\t\t\tmw.pageFormsActivateVEFields( function() {\n\t\t\t\t\t\t\tpreviewButtonClickedHandler( event );\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} );\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_rating.js","messages":[{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":43,"column":4,"nodeType":"CallExpression","endLine":43,"endColumn":40}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function( $, mw, pf ) {\n\t'use strict';\n\n\tjQuery.fn.applyRatingInput = function( fromCalendar ) {\n\t\tvar starWidth = $(this).attr('data-starwidth');\n\t\tvar curValue = '';\n\t\tif ( starWidth === undefined ) {\n\t\t\t// This is probably because we're in a multple-instance\n\t\t\t// template \"starter\", but, in any case, just exit.\n\t\t\treturn;\n\t\t}\n\n\t\tif( fromCalendar !== undefined ) {\n\t\t\tcurValue = fromCalendar;\n\t\t} else {\n\t\t\tcurValue = $(this).attr('data-curvalue');\n\t\t}\n\t\tif ( curValue === '' || curValue === undefined ) {\n\t\t\tcurValue = 0;\n\t\t}\n\t\tvar numStars = $(this).attr('data-numstars');\n\t\tvar allowsHalf = $(this).attr('data-allows-half');\n\t\tvar disabled = $(this).attr('disabled');\n\t\tvar ratingsSettings = {\n\t\t\tnormalFill: '#ddd',\n\t\t\tstarWidth: starWidth,\n\t\t\tnumStars: numStars,\n\t\t\tmaxValue: numStars,\n\t\t\trating: curValue\n\t\t};\n\t\tif ( allowsHalf === undefined ) {\n\t\t\tratingsSettings.fullStar = true;\n\t\t} else {\n\t\t\tratingsSettings.halfStar = true;\n\t\t}\n\t\tif ( disabled === \"disabled\" ) {\n\t\t\tratingsSettings.readOnly = true;\n\t\t}\n\n\t\t$(this).rateYo(ratingsSettings)\n\t\t.on(\"rateyo.set\", function (e, data) {\n\n\t\t\t$(this).parent().children(\":hidden\").attr(\"value\", data.rating);\n\t\t});\n\t};\n\n}( jQuery, mediaWiki, pf ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_regexp.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_simpleupload.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":5,"column":1,"nodeType":"Block","endLine":5,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript Code to enable simple upload functionality using OOUI's SelectFileInputWidget\n * for \"combobox\" and \"text\" input types\n *\n * @param $\n * @param mw\n * @author Nischay Nahata\n * @author Yaron Koren\n * @author Yash Varshney\n */\n\n( function( $, mw ) {\n\t$.fn.initializeSimpleUpload = function() {\n\n\t\tvar inputSpan = this.parent();\n\t\tvar uploadWidget = new OO.ui.SelectFileInputWidget( {\n\t\t\tbutton: {\n\t\t\t\tflags: [\n\t\t\t\t\t'progressive'\n\t\t\t\t],\n\t\t\t\ticon: 'upload',\n\t\t\t\tlabel: mw.message( 'pf-simpleupload' ).text()\n\t\t\t},\n\t\t\tclasses: [ 'simpleUpload' ]\n\t\t} );\n\n\t\tvar removeButton = new OO.ui.ButtonWidget( {\n\t\t\tlabel: mw.message( 'htmlform-cloner-delete' ).text(),\n\t\t\tflags: [\n\t\t\t\t'destructive'\n\t\t\t],\n\t\t\ticon: 'trash',\n\t\t\tclasses: [ 'simpleupload_rmv_btn' ]\n\t\t} );\n\n\t\tvar buttonRow = new OO.ui.HorizontalLayout( {\n\t\t\titems: [\n\t\t\t\tuploadWidget,\n\t\t\t\tremoveButton\n\t\t\t]\n\t\t} );\n\n\t\tvar input,\n\t\t\tcur_value = '',\n\t\t\tloadingImage = inputSpan.find('img.loading');\n\n\t\t// append a row of buttons for upload and remove\n\t\tinputSpan.find('span.simpleUploadInterface').append(buttonRow.$element);\n\n\t\tif ( inputSpan.attr('data-input-type') == 'combobox' ) {\n\t\t\tinput = inputSpan.find('input[role=\"combobox\"]');\n\t\t\tloadingImage.remove();\n\t\t\tinputSpan.prepend(loadingImage);\n\t\t\t// this has been done to align all buttons with combobox properly\n\t\t\t// in a horizontal manner\n\t\t\tinputSpan.find('span.simpleUploadInterface > div.oo-ui-layout').css( {\n\t\t\t\t'display': 'inline',\n\t\t\t\t'margin-left': '-15px'\n\t\t\t} );\n\t\t\tinputSpan.find('div.oo-ui-textInputWidget').css( {\n\t\t\t\t'margin-top': '-15px',\n\t\t\t\t'display': 'inline-block'\n\t\t\t} );\n\t\t\tinputSpan.find('div.simpleUpload').css('margin-top','-6px');\n\t\t\tinputSpan.find('span.simpleupload_rmv_btn').css('margin-top','-6px');\n\t\t} else {\n\t\t\tinput = inputSpan.find('input.createboxInput');\n\t\t}\n\n\t\tcur_value = input.val();\n\n\t\t// hide the remove button for now considering that no file is displayed\n\t\tremoveButton.$element.hide()\n\n\t\t// remove the input part from SelectInputWidget leaving only button\n\t\tinputSpan.find('div.oo-ui-actionFieldLayout-input').remove();\n\t\t// adjust the size of the parent div\n\t\tinputSpan.find('div.simpleUpload').css('width', '100px');\n\t\tif ( inputSpan.attr('data-input-type') == 'text' ) {\n\t\t\tinput.hide();\n\t\t}\n\n\t\tif ( cur_value !== '' && typeof cur_value !== 'undefined' ) {\n\t\t\tvar previewURL = mw.config.get('wgArticlePath').replace('$1', 'Special:Redirect/file/' + encodeURIComponent( cur_value ) );\n\t\t\tpreviewURL += ( previewURL.indexOf('?') < 0 ) ? '?' : '&';\n\t\t\tpreviewURL += 'width=100';\n\t\t\tinputSpan.prepend($('<img class=\"simpleupload_prv\" src=\"' + previewURL + '\">'));\n\n\t\t\t// now display the remove button for removing the file displayed\n\t\t\tremoveButton.$element.show();\n\t\t}\n\n\t\tremoveButton.$element.find('a').click( function () {\n\t\t\tinputSpan.find('img.simpleupload_prv').remove();\n\t\t\tcur_value = '';\n\t\t\tinput.val('');\n\t\t\tremoveButton.$element.hide();\n\t\t});\n\n\t\tinputSpan.find('span.simpleUploadInterface').find('input[type=\"file\"]').change( function(event) {\n\t\t\tvar fileToUpload = event.target.files[0]; // get (first) File\n\t\t\tvar fileName = event.target.files[0].name;\n\n\t\t\tvar formdata = new FormData(); // see https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects\n\t\t\tformdata.append(\"action\", \"upload\");\n\t\t\tformdata.append(\"format\", \"json\");\n\t\t\tformdata.append(\"ignorewarnings\", \"true\");\n\t\t\tformdata.append(\"filename\", fileName);\n\t\t\tformdata.append(\"token\", mw.user.tokens.get( 'csrfToken' ) );\n\t\t\tformdata.append(\"file\", fileToUpload);\n\n\t\t\tloadingImage.show();\n\t\t\t// As we now have created the data to send, we send it...\n\t\t\t$.ajax( { // http://stackoverflow.com/questions/6974684/how-to-send-formdata-objects-with-ajax-requests-in-jquery\n\t\t\t\turl: mw.util.wikiScript( 'api' ), // url to api.php\n\t\t\t\tcontentType:false,\n\t\t\t\tprocessData:false,\n\t\t\t\ttype:'POST',\n\t\t\t\tdata: formdata,// the formdata object we created above\n\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t// do what you like, console logs are just for demonstration :-)\n\t\t\t\t\tif ( !data.error ) {\n\t\t\t\t\t\tcur_value = fileName;\n\n\t\t\t\t\t\t// give the fileName to the field overwriting whatever was wrtitten there\n\t\t\t\t\t\tinput.val(fileName);\n\n\t\t\t\t\t\tinputSpan.find('img.simpleupload_prv').remove();\n\t\t\t\t\t\tvar imagePreviewURL = mw.config.get('wgArticlePath').replace( '$1', 'Special:Redirect/file/' + encodeURIComponent( cur_value ) );\n\t\t\t\t\t\timagePreviewURL += ( imagePreviewURL.indexOf('?') === -1 ) ? '?' : '&';\n\t\t\t\t\t\timagePreviewURL += 'width=100';\n\t\t\t\t\t\tinputSpan.prepend('<img class=\"simpleupload_prv\" src=\"' + imagePreviewURL + '\">');\n\t\t\t\t\t\tloadingImage.hide();\n\t\t\t\t\t\tremoveButton.$element.show();\n\t\t\t\t\t} else {\n\t\t\t\t\t\twindow.alert(\"Error: \" + data.error.info);\n\t\t\t\t\t\t// if any error pops up, just hide the remove button\n\t\t\t\t\t\tremoveButton.$element.hide();\n\t\t\t\t\t\tloadingImage.hide();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function( xhr,status, error ) {\n\t\t\t\t\twindow.alert('Something went wrong! Please check the log for errors');\n\t\t\t\t\tremoveButton.$element.hide();\n\t\t\t\t\tloadingImage.hide();\n\t\t\t\t\tmw.log(error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t};\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_spreadsheet.js","messages":[{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":10,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":10,"endColumn":28},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":11,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":11,"endColumn":256},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":12,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":12,"endColumn":239},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":13,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":13,"endColumn":248},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":14,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":14,"endColumn":229},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":15,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":15,"endColumn":233},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":16,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":16,"endColumn":239},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":17,"column":1,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":17,"endColumn":36},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":72,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":72,"endColumn":27},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":72,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":72,"endColumn":27},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":394,"column":3,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":429,"endColumn":4},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":440,"column":3,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":442,"endColumn":4},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":689,"column":6,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":700,"endColumn":7},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":689,"column":11,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":689,"endColumn":29},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":692,"column":7,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":698,"endColumn":8},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":692,"column":12,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":692,"endColumn":23},{"ruleId":"no-shadow","severity":1,"message":"'columnParams' is already declared in the upper scope on line 855 column 9.","line":753,"column":10,"nodeType":"Identifier","messageId":"noShadow","endLine":753,"endColumn":22},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":865,"column":28,"nodeType":"CallExpression","endLine":865,"endColumn":62},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":869,"column":6,"nodeType":"CallExpression","endLine":869,"endColumn":40},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":930,"column":25,"nodeType":"CallExpression","endLine":930,"endColumn":59},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Positional selector extensions are not allowed","line":935,"column":4,"nodeType":"CallExpression","endLine":935,"endColumn":38}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":21,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Code to integrate the jExcel JavaScript library into Page Forms.\n *\n * @author Yaron Koren\n * @author Balabky9\n * @author Amr El-Absy\n */\n\n// @TODO - make this based on the API limit, which in turn is based on whether the user has the \"apihighlimits\" right.\nconst numPagesToQuery = 50;\nconst saveIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-check oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + mw.msg( 'upload-dialog-button-save' ) + '\"></span>';\nconst cancelIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-close oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + mw.msg( 'cancel' ) + '\"></span>';\nconst addIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-add oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + mw.msg( 'apisandbox-add-multi' ) + '\"></span>';\nconst upIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-upTriangle oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + 'Raise' + '\"></span>';\nconst downIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-downTriangle oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + 'Lower' + '\"></span>';\nconst deleteIcon = '<span class=\"oo-ui-widget oo-ui-widget-enabled oo-ui-iconElement oo-ui-iconElement-icon oo-ui-icon-trash oo-ui-labelElement-invisible oo-ui-iconWidget\" aria-disabled=\"false\" title=\"' + mw.msg( 'delete' ) + '\"></span>';\nconst manageColumnTitle = '\\u2699';\nvar dataValues = [];\n\n( function( jexcel, mw ) {\n\tvar baseUrl = mw.config.get( 'wgScriptPath' );\n\tmw.spreadsheets = {};\n\n\t// Handle any possible Boolean values from the wiki page.\n\tjexcel.prototype.valueIsYes = function(value) {\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( typeof value === 'boolean' ) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( typeof value === 'string' ) {\n\t\t\tvalue = value.toLowerCase();\n\t\t}\n\t\tvar possibleYesMessages = [\n\t\t\tmw.config.get( 'wgPageFormsContLangYes' ).toLowerCase(),\n\t\t\t// Add in '1', and some hardcoded English.\n\t\t\t'1', 'yes', 'true'\n\t\t];\n\t\treturn ( possibleYesMessages.indexOf( value ) >= 0 );\n\t};\n\n\tjexcel.prototype.getjExcelValue = function( mwValue, columnAttributes ) {\n\t\tvar date,\n\t\t\tmonthNum;\n\t\tif ( mwValue == null ) {\n\t\t\treturn null;\n\t\t}\n\t\tmwValue = this.decodeValues( mwValue );\n\t\tif ( columnAttributes['type'] == 'checkbox' ) {\n\t\t\treturn jexcel.prototype.valueIsYes(mwValue);\n\t\t} else if ( columnAttributes['list'] == true ) {\n\t\t\t// The list delimiter unfortunately can't be set for\n\t\t\t// jExcel - it's hardcoded to a semicolon - and values\n\t\t\t// can't have spaces around them. So we have to\n\t\t\t// modify the current value for it to be handled\n\t\t\t// correctly.\n\t\t\tvar individualValues = mwValue.split( columnAttributes['delimiter'] );\n\t\t\treturn $.map( individualValues, $.trim ).join(';');\n\t\t} else if ( columnAttributes['type'] == 'date' ) {\n\t\t\tdate = new Date( mwValue );\n\t\t\t// Avoid timezone strangeness.\n\t\t\tdate.setTime( date.getTime() + 60000 * date.getTimezoneOffset());\n\t\t\tmonthNum = date.getMonth() + 1;\n\t\t\treturn date.getFullYear() + '-' + monthNum + '-' + date.getDate();\n\t\t} else if ( columnAttributes['type'] == 'datetime' ) {\n\t\t\tdate = new Date( mwValue );\n\t\t\t// Avoid timezone strangeness, if what we're handling\n\t\t\t// is just a date.\n\t\t\tif ( ! mwValue.includes(':') ) {\n\t\t\t\tdate.setTime( date.getTime() + 60000 * date.getTimezoneOffset());\n\t\t\t}\n\t\t\tmonthNum = date.getMonth() + 1;\n\t\t\treturn date.getFullYear() + '-' + monthNum + '-' + date.getDate() +\n\t\t\t\t' ' + date.getHours() + ':' + date.getMinutes();\n\t\t} else {\n\t\t\treturn mwValue;\n\t\t}\n\t}\n\n\tjexcel.prototype.getMWValueFromCell = function( $cell, columnAttributes ) {\n\t\tvar jExcelValue;\n\t\tif ( columnAttributes['type'] == 'checkbox' ) {\n\t\t\tjExcelValue = $cell.find('input').prop( 'checked' );\n\t\t} else {\n\t\t\tjExcelValue = $cell.html();\n\t\t}\n\t\treturn jexcel.prototype.getMWValueFromjExcelValue( jExcelValue, columnAttributes );\n\t}\n\n\tjexcel.prototype.getMWValueFromjExcelValue = function( jExcelValue, columnAttributes ) {\n\t\tif ( jExcelValue == null ) {\n\t\t\treturn null;\n\t\t}\n\t\tjExcelValue = this.decodeValues( jExcelValue );\n\t\tif ( columnAttributes['type'] == 'checkbox' ) {\n\t\t\treturn ( jExcelValue == 'true' ) ?\n\t\t\t\tmw.config.get( 'wgPageFormsContLangYes' ) :\n\t\t\t\tmw.config.get( 'wgPageFormsContLangNo' );\n\t\t} else if ( columnAttributes['list'] == true ) {\n\t\t\tvar delimiter = columnAttributes['delimiter'] + ' ';\n\t\t\treturn jExcelValue.replace(/;/g, delimiter);\n\t\t} else if ( columnAttributes['type'] == 'date' || columnAttributes['type'] == 'datetime' ) {\n\t\t\treturn jExcelValue;\n\t\t} else {\n\t\t\tvar mwValue = jExcelValue.replace( /\\<br\\>/g, \"\\n\" );\n\t\t\treturn mwValue;\n\t\t}\n\t}\n\n\tjexcel.prototype.generateQueryStringForSave = function( formName, templateName, pageName, rowValues, columns ) {\n\t\tvar queryString = 'form=' + formName + '&target=' + encodeURIComponent( pageName );\n\t\tvar curColumn;\n\t\tfor ( var columnName in rowValues ) {\n\t\t\tif ( columnName == 'page' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor ( var columnNum in columns ) {\n\t\t\t\tif ( columns[columnNum]['title'] == columnName ) {\n\t\t\t\t\tcurColumn = columns[columnNum];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tqueryString += '&' + templateName + '[' + columnName + ']=' +\n\t\t\t\tencodeURIComponent( jexcel.prototype.getMWValueFromjExcelValue( rowValues[columnName], curColumn ) );\n\t\t}\n\t\treturn queryString;\n\t}\n\n\tjexcel.prototype.saveChanges = function( spreadsheetID, templateName, pageName, newPageName, formName, rowNum, rowValues, columns, editMultiplePages ) {\n\t\t$(\"div#\" + spreadsheetID + \" table.jexcel td[data-y = \" + rowNum + \"]\").not(\".jexcel_row\").each( function() {\n\t\t\tvar columnNum = $(this).attr(\"data-x\");\n\t\t\tvar curColumn = columns[columnNum]['title'];\n\t\t\tvar curValue = rowValues[curColumn];\n\t\t\tif ( rowValues[curColumn] !== undefined ) {\n\t\t\t\tmw.spreadsheets[spreadsheetID].setValue( this, curValue );\n\t\t\t}\n\t\t});\n\n\t\tif ( editMultiplePages === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar data = {\n\t\t\taction: 'pfautoedit',\n\t\t\tformat: 'json',\n\t\t\tquery: jexcel.prototype.generateQueryStringForSave( formName, templateName, pageName, rowValues, columns )\n\t\t};\n\t\treturn $.ajax({\n\t\t\ttype: 'POST',\n\t\t\turl: baseUrl + '/api.php',\n\t\t\tdata: data,\n\t\t\tdataType: 'json',\n\t\t\tsuccess: function(successData) {\n\t\t\t\tif ( newPageName !== '' && newPageName !== undefined && newPageName !== pageName ) {\n\t\t\t\t\tjexcel.prototype.movePage( pageName, newPageName );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjexcel.prototype.getToken = function() {\n\t\tvar url = baseUrl + '/api.php?action=query&format=json&meta=tokens&type=csrf';\n\t\treturn $.post( url );\n\t}\n\n\tjexcel.prototype.movePage = function( fromPage, toPage ) {\n\t\treturn $.when( jexcel.prototype.getToken() ).then( function successHandler( postResult ){\n\t\t\tvar data = {\n\t\t\t\ttoken: postResult.query.tokens.csrftoken\n\t\t\t};\n\t\t\tvar query = 'from=' + encodeURIComponent( fromPage ) + \"&to=\" + encodeURIComponent( toPage ) + \"&movetalk&noredirect\";\n\t\t\treturn $.ajax( {\n\t\t\t\ttype: 'POST',\n\t\t\t\turl: baseUrl + '/api.php?action=move&format=json&' + query,\n\t\t\t\tdataType: 'json',\n\t\t\t\tdata: data\n\t\t\t} );\n\t\t});\n\t}\n\n\tjexcel.prototype.cancelChanges = function( spreadsheetID, rowValues, rowNum, columnNames ) {\n\t\t$(\"div#\" + spreadsheetID + \" table.jexcel td[data-y = \" + rowNum + \"]\").not(\".jexcel_row\").each( function() {\n\t\t\tvar columnNum = $(this).attr(\"data-x\");\n\t\t\tvar curColumn = columnNames[columnNum];\n\t\t\tif ( rowValues[curColumn] !== undefined ) {\n\t\t\t\tmw.spreadsheets[spreadsheetID].setValue( this, rowValues[curColumn] );\n\t\t\t} else {\n\t\t\t\tmw.spreadsheets[spreadsheetID].setValue( this, \"\" );\n\t\t\t}\n\t\t} );\n\n\t\t$(\"div#\" + spreadsheetID + \" td[data-y = \" + rowNum + \"] .save-changes\").each( function() {\n\t\t\t$(this).parent().hide();\n\t\t\t$(this).parent().siblings('.mit-row-icons').show();\n\t\t} );\n\t}\n\n\t// Add a new page.\n\tjexcel.prototype.saveNewRow = function( spreadsheetID, templateName, formName, rowNum, pageName, rowValues, columns, editMultiplePages ) {\n\t\tvar $manageCell = $( \"div#\" + spreadsheetID + \" td[data-y=\" + rowNum + \"]\" ).last();\n\n\t\tvar spanContents = '<a href=\"#\" class=\"save-changes\">' + saveIcon + '</a> | ' +\n\t\t\t'<a href=\"#\" class=\"cancel-changes\">' + cancelIcon + '</a>';\n\n\t\t$manageCell.children('span.save-or-cancel')\n\t\t\t.attr('id', 'page-span-' + pageName)\n\t\t\t.html( spanContents )\n\t\t\t.hide();\n\n\t\tif ( editMultiplePages == undefined ) {\n\t\t\t$manageCell.children('.mit-row-icons').show();\n\t\t\treturn;\n\t\t}\n\n\t\tvar data = {\n\t\t\taction: 'pfautoedit',\n\t\t\tformat: 'json',\n\t\t\tquery: jexcel.prototype.generateQueryStringForSave( formName, templateName, pageName, rowValues, columns )\n\t\t};\n\t\treturn $.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: baseUrl + '/api.php',\n\t\t\tdata: data,\n\t\t\tdataType: 'json'\n\t\t} );\n\t}\n\n\t// Decode values\n\tjexcel.prototype.decodeValues = function( value ) {\n\t\tvalue = $('<div />').html( value ).text();\n\t\treturn value;\n\t}\n\n\tjexcel.prototype.deleteRow = function( spreadsheetID, rowNum ) {\n\t\trowNum = parseInt(rowNum);\n\t\tmw.spreadsheets[spreadsheetID].deleteRow(rowNum);\n\t\tdataValues[spreadsheetID].splice(rowNum, 1);\n\t}\n\n\tjexcel.prototype.getAutocompleteAttributes = function( cell ) {\n\t\tvar autocompletedatatype = jQuery(cell).attr('data-autocomplete-data-type');\n\t\tvar autocompletesettings = jQuery(cell).attr('data-autocomplete-settings');\n\t\tif ( autocompletedatatype == undefined || autocompletesettings == undefined ) {\n\t\t\t// that means we are in Special:MultipageEdit\n\t\t\t// here we take attributes from the column head,\n\t\t\t// to use other types of autocompletion( apart from\n\t\t\t// \"cargo field\" and \"property\" ), the attributes in\n\t\t\t// each cell can also be set.\n\t\t\tvar data_x = jQuery(cell).attr('data-x');\n\t\t\tvar $table = jQuery(cell).parents().find('table');\n\t\t\tautocompletedatatype = jQuery($table).find('thead td[data-x=\"'+data_x+'\"]').attr('data-autocomplete-data-type');\n\t\t\tautocompletesettings = jQuery($table).find('thead td[data-x=\"'+data_x+'\"]').attr('data-autocomplete-settings');\n\t\t}\n\t\treturn {\n\t\t\tautocompletedatatype: autocompletedatatype, autocompletesettings: autocompletesettings\n\t\t};\n\t}\n\n\t// If a field is dependent on some other field in the form\n\t// then it returns its name.\n\tjexcel.prototype.dependenton = function(origname) {\n\t\tvar wgPageFormsDependentFields = mw.config.get('wgPageFormsDependentFields');\n\t\t\tfor (var i = 0; i < wgPageFormsDependentFields.length; i++) {\n\t\t\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\t\t\tif (dependentFieldPair[1] === origname) {\n\t\t\t\t\treturn dependentFieldPair[0];\n\t\t\t\t}\n\t\t\t}\n\t};\n\n\tjexcel.prototype.getEditorForAutocompletion = function( inputType, x, y, autocompletedatatype, autocompletesettings, cell, type ) {\n\t\tvar editor;\n\t\tvar pfSpreadsheetAutocomplete = false,\n\t\t\twidget;\n\t\tvar config = {\n\t\t\tdata_x: x,\n\t\t\tdata_y: y,\n\t\t\tautocompletedatatype: autocompletedatatype,\n\t\t};\n\t\tif ( autocompletedatatype == 'category' || autocompletedatatype == 'cargo field'\n\t\t\t|| autocompletedatatype == 'property' || autocompletedatatype == 'concept' ) {\n\t\t\tpfSpreadsheetAutocomplete = true;\n\t\t\tconfig['autocompletesettings'] = autocompletesettings;\n\t\t\tif ( inputType == 'combobox' ) {\n\t\t\t\twidget = new pf.SpreadsheetComboBoxInput(config);\n\t\t\t} else {\n\t\t\t\twidget = new pf.spreadsheetAutocompleteWidget(config);\n\t\t\t}\n\t\t} else if ( autocompletedatatype == 'dep_on' ) {\n\t\t\t// values dependent on\n\t\t\tvar dep_on_field = jexcel.prototype.dependenton(cell.getAttribute('origname'));\n\t\t\tif ( dep_on_field !== null ) {\n\t\t\t\tpfSpreadsheetAutocomplete = true;\n\t\t\t\tconfig['autocompletesettings'] = cell.getAttribute('name');\n\t\t\t\tconfig['dep_on_field'] = dep_on_field;\n\t\t\t\tif ( inputType == 'combobox' ) {\n\t\t\t\t\twidget = new pf.SpreadsheetComboBoxInput(config);\n\t\t\t\t} else {\n\t\t\t\t\twidget = new pf.spreadsheetAutocompleteWidget(config);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// this is probably the case where some parameters are set\n\t\t\t\t// in a wrong way in form definition, in that case use the default jexcel editor\n\t\t\t\tpfSpreadsheetAutocomplete = false;\n\t\t\t}\n\t\t} else if ( autocompletedatatype == 'external data' ) {\n\t\t\t// values from external data\n\t\t\tif ( autocompletesettings == cell.getAttribute('origname') ) {\n\t\t\t\tpfSpreadsheetAutocomplete = true;\n\t\t\t\tconfig['autocompletesettings'] = autocompletesettings;\n\t\t\t\tif ( inputType == 'combobox' ) {\n\t\t\t\t\twidget = new pf.SpreadsheetComboBoxInput(config);\n\t\t\t\t} else {\n\t\t\t\t\twidget = new pf.spreadsheetAutocompleteWidget(config);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// this is probably the case where some autocomplete parameters are set\n\t\t\t\t// in a wrong way in form definition, in that case use the default jexcel editor\n\t\t\t\tpfSpreadsheetAutocomplete = false;\n\t\t\t}\n\t\t}\n\n\t\teditor = pfSpreadsheetAutocomplete ? widget.$element[0] : document.createElement(type);\n\n\t\treturn {\n\t\t\teditor: editor, pfSpreadsheetAutocomplete: pfSpreadsheetAutocomplete\n\t\t};\n\t}\n\n\tjexcel.prototype.getValueToBeSavedAfterClosingEditor = function( cell, pfSpreadsheetAutocomplete, ooui_input_val ) {\n\t\tif (pfSpreadsheetAutocomplete) {\n\t\t\t// setting the value to be saved after closing the editor\n\t\t\treturn ooui_input_val;\n\t\t} else {\n\t\t\treturn cell.children[0].value;\n\t\t}\n\t}\n\n\tjexcel.prototype.setAutocompleteAttributesOfColumns = function( cell, gridParams, templateName, fieldNum ) {\n\t\t$(cell).attr( 'name', templateName + '[' + $(cell).attr('title') + ']' );\n\t\tif ( gridParams[templateName][fieldNum]['autocompletedatatype'] == undefined ) {\n\t\t\t$(cell).attr( 'data-autocomplete-data-type', '' );\n\t\t\t$(cell).attr( 'data-autocomplete-settings', '' );\n\t\t} else {\n\t\t\t$(cell).attr( 'data-autocomplete-data-type', gridParams[templateName][fieldNum]['autocompletedatatype'] );\n\t\t\t$(cell).attr( 'data-autocomplete-settings', gridParams[templateName][fieldNum]['autocompletesettings'] );\n\t\t}\n\t}\n\n\tjexcel.prototype.setAutocompleteAttributesOfCells = function( table, templateName, data_x, cell ) {\n\t\tvar autocompletedatatype = $(table).find('thead td[data-x=\"'+data_x+'\"]').attr('data-autocomplete-data-type'),\n\t\t\tautocompletesettings = $(table).find('thead td[data-x=\"'+data_x+'\"]').attr('data-autocomplete-settings');\n\t\t$(cell).attr({\n\t\t\t'name': templateName +'|'+$(table).find('thead td[data-x=\"'+data_x+'\"]').attr('title'),\n\t\t\t'origname': templateName +'['+$(table).find('thead td[data-x=\"'+data_x+'\"]').attr('title')+']',\n\t\t\t'data-autocomplete-data-type': autocompletedatatype,\n\t\t\t'data-autocomplete-settings': autocompletesettings\n\t\t});\n\t}\n\n})( jexcel, mediaWiki );\n\n( function( $, mw, pf ) {\n\tvar baseUrl = mw.config.get( 'wgScriptPath' ),\n\t\tgridParams = mw.config.get( 'wgPageFormsGridParams' ),\n\t\tgridValues = mw.config.get( 'wgPageFormsGridValues' );\n\n\t$( '.pfSpreadsheet' ).each( function() {\n\t\tvar table = this;\n\t\tvar templateName = $(this).attr( 'data-template-name' ),\n\t\t\tformName = $(this).attr( 'data-form-name' ),\n\t\t\tspreadsheetID = $(this).attr( 'id' ),\n\t\t\teditMultiplePages = $(this).attr( 'editMultiplePages' );\n\t\tvar columns = [];\n\n\t\t// Somewhat crude attempt at setting reasonable column widths,\n\t\t// based on the browser width and the number of columns, with\n\t\t// built-in maximum and minimum widths.\n\t\tvar numColumns = Object.keys(gridParams[templateName]).length;\n\t\tvar columnWidth = ( $('#content').width() - 150 ) / numColumns;\n\t\tif ( isNaN(columnWidth) ) {\n\t\t\tcolumnWidth = 200;\n\t\t}\n\t\tif ( columnWidth < 100 ) {\n\t\t\tcolumnWidth = 100;\n\t\t} else if ( columnWidth > 400 ) {\n\t\t\tcolumnWidth = 400;\n\t\t}\n\n\t\tvar columnName;\n\t\tfor ( var templateParam of gridParams[templateName] ) {\n\t\t\tcolumnName = templateParam['name'];\n\t\t\tvar columnType = templateParam['type'];\n\t\t\tvar jExcelType = 'text';\n\t\t\tvar columnAttributes = {\n\t\t\t\ttitle: columnName,\n\t\t\t\twidth: columnWidth + \"px\"\n\t\t\t};\n\t\t\tif ( columnType == 'checkbox' ) {\n\t\t\t\tjExcelType = 'checkbox';\n\t\t\t} else if ( columnType == 'date' ) {\n\t\t\t\tjExcelType = 'calendar';\n\t\t\t\tcolumnAttributes['options'] = {\n\t\t\t\t\tformat: 'YYYY-MM-DD'\n\t\t\t\t}\n\t\t\t} else if ( columnType == 'datetime' ) {\n\t\t\t\tjExcelType = 'calendar';\n\t\t\t\tcolumnAttributes['options'] = {\n\t\t\t\t\ttime: 1,\n\t\t\t\t\tformat: 'YYYY-MM-DD HH:MI'\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar allowedValues = templateParam['values'];\n\t\t\tif ( allowedValues !== undefined ) {\n\t\t\t\tjExcelType = 'dropdown';\n\t\t\t\tcolumnAttributes['source'] = allowedValues;\n\t\t\t\tif ( templateParam['list'] === true ) {\n\t\t\t\t\tcolumnAttributes['multiple'] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( jExcelType == 'text' ) {\n\t\t\t\tcolumnAttributes['wordWrap'] = true;\n\t\t\t}\n\t\t\tcolumnAttributes['type'] = jExcelType;\n\t\t\tcolumns.push( columnAttributes );\n\t\t}\n\n\t\t// One more column, for the management icons.\n\t\tcolumns.push( {\n\t\t\ttitle: manageColumnTitle,\n\t\t\twidth: \"100px\",\n\t\t\ttype: \"html\",\n\t\t\treadOnly: true\n\t\t} );\n\n\t\tvar columnNames = [];\n\t\tfor ( var column of columns ) {\n\t\t\tcolumnNames.push( column.title );\n\t\t}\n\n\t\tvar pageIDs = [];\n\t\tvar pagesData = [];\n\t\tvar myData = [];\n\t\tvar newPageNames = [];\n\t\tvar modifiedDataValues = [];\n\n\t\tif ( editMultiplePages == undefined ) {\n\t\t\tpopulateSpreadsheet();\n\t\t} else {\n\t\t\tgetPagesForTemplate( templateName, null );\n\t\t}\n\n\t\tfunction getPagesForTemplate( templateNamed, continueStr ) {\n\t\t\tvar apiUrl = baseUrl + '/api.php?action=query&format=json&list=embeddedin&eilimit=500&eititle=Template:' + templateNamed;\n\t\t\tif ( continueStr !== null ) {\n\t\t\t\tapiUrl += \"&eicontinue=\" + continueStr;\n\t\t\t}\n\t\t\t$.ajax({\n\t\t\t\t// We get 500 pages because that's the limit\n\t\t\t\t// for \"prop=revision\".\n\t\t\t\turl: apiUrl,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttype: 'POST',\n\t\t\t\tasync: false,\n\t\t\t\theaders: { 'Api-User-Agent': 'Example/1.0' },\n\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\tvar pageObjects = data.query.embeddedin;\n\t\t\t\t\tfor ( var i = 0; i < pageObjects.length; i++ ) {\n\t\t\t\t\t\tpageIDs.push(pageObjects[i].pageid);\n\t\t\t\t\t}\n\t\t\t\t\tif ( data.continue !== undefined ) {\n\t\t\t\t\t\tgetPagesForTemplate( templateNamed, data.continue.eicontinue );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgetAllPageDataAndPopulateSpreadsheet( 0 );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error){\n\t\t\t\t\tmw.notify( \"ERROR: Unable to retrieve pages for the selected template\", { type: 'error' } );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Recursive function to get the contents of each page from\n\t\t// the API, some number of pages at a time.\n\t\tfunction getAllPageDataAndPopulateSpreadsheet( offset ) {\n\t\t\tvar curPageIDs = pageIDs.slice(offset, offset + numPagesToQuery);\n\t\t\tvar pageIDsStr = curPageIDs.join('|');\n\t\t\t$.ajax({\n\t\t\t\turl: baseUrl + '/api.php?action=query&format=json&prop=revisions&rvprop=content&rvslots=main&formatversion=2&pageids=' + pageIDsStr,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttype: 'POST',\n\t\t\t\theaders: { 'Api-User-Agent': 'Example/1.0' },\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tif ( data.query == undefined ) {\n\t\t\t\t\t\t// There are no calls to this template.\n\t\t\t\t\t\tpopulateSpreadsheet();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tfor ( var pageNum = 0; pageNum < data.query.pages.length; pageNum++ ) {\n\t\t\t\t\t\tvar curRevision = data.query.pages[pageNum].revisions[0];\n\t\t\t\t\t\tvar pageContents = curRevision.slots.main.content;\n\t\t\t\t\t\tpagesData.push( {\n\t\t\t\t\t\t\ttitle: data.query.pages[pageNum].title,\n\t\t\t\t\t\t\tcontents: pageContents\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tif ( curPageIDs.length == numPagesToQuery ) {\n\t\t\t\t\t\tgetAllPageDataAndPopulateSpreadsheet( offset + numPagesToQuery );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpopulateSpreadsheet();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction getTemplateCalls( pageContent, pageName ) {\n\t\t\t// Match all the template calls and their contents\n\t\t\tvar startDelimiter = '{{' + templateName.toLowerCase() + '\\\\b';\n\t\t\tvar endDelimiter = '}}';\n\t\t\tvar regex = new RegExp( startDelimiter, 'g' );\n\t\t\tvar contents = [];\n\t\t\tvar contentStart, contentEnd;\n\t\t\tcontentStart = contentEnd = 0;\n\t\t\tvar match;\n\t\t\t// Parse contents of individual templates\n\t\t\twhile ( ( match = regex.exec( pageContent.toLowerCase() ) ) !== null ) {\n\t\t\t\tcontentStart = match['index'];\n\t\t\t\tvar content = '';\n\t\t\t\tvar numOpenCurlyBracketPairs = 1;\n\t\t\t\tvar curPos = contentStart + startDelimiter.length - 2;\n\t\t\t\tvar curPair;\n\t\t\t\tdo {\n\t\t\t\t\tvar curChar = pageContent.charAt(curPos);\n\t\t\t\t\tcurPair = curChar + pageContent.charAt(curPos + 1);\n\t\t\t\t\tif ( curPair == '{{' ) {\n\t\t\t\t\t\tnumOpenCurlyBracketPairs++;\n\t\t\t\t\t} else if ( curPair == '}}' ) {\n\t\t\t\t\t\tnumOpenCurlyBracketPairs--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( numOpenCurlyBracketPairs > 0 ) {\n\t\t\t\t\t\tcontent += curChar;\n\t\t\t\t\t}\n\t\t\t\t\tcurPos++;\n\t\t\t\t} while ( numOpenCurlyBracketPairs > 0 && curPair !== '' );\n\n\t\t\t\tcontent = content.trim();\n\t\t\t\t// If this is actually a call to a template with\n\t\t\t\t// a different name, ignore it.\n\t\t\t\tif ( content !== '' && content.charAt(0) !== '|' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcontents.push( 'page=' + pageName + content );\n\t\t\t}\n\t\t\treturn contents;\n\t\t}\n\n\t\tfunction getTemplateParams( templateText ) {\n\t\t\tvar params = [];\n\t\t\tif ( templateText == '' ) {\n\t\t\t\treturn params;\n\t\t\t}\n\n\t\t\tvar numOpenCurlyBrackets = 0;\n\t\t\tvar numOpenSquareBrackets = 0;\n\t\t\tvar curReturnValue = '';\n\n\t\t\tfor ( var i = 0; i < templateText.length; i++ ) {\n\t\t\t\tvar curChar = templateText.charAt(i);\n\t\t\t\tif ( curChar == '{' ) {\n\t\t\t\t\tnumOpenCurlyBrackets++;\n\t\t\t\t} else if ( curChar == '}' ) {\n\t\t\t\t\tnumOpenCurlyBrackets--;\n\t\t\t\t}\n\t\t\t\tif ( curChar == '[' ) {\n\t\t\t\t\tnumOpenSquareBrackets++;\n\t\t\t\t} else if ( curChar == ']' ) {\n\t\t\t\t\tnumOpenSquareBrackets--;\n\t\t\t\t}\n\n\t\t\t\tif ( curChar == '|' && numOpenCurlyBrackets == 0 && numOpenSquareBrackets == 0 ) {\n\t\t\t\t\tparams.push( curReturnValue.trim() );\n\t\t\t\t\tcurReturnValue = '';\n\t\t\t\t} else {\n\t\t\t\t\tcurReturnValue += curChar;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparams.push( curReturnValue.trim() );\n\n\t\t\treturn params;\n\t\t}\n\n\t\t//(function getData () {\n\t\t\tvar page = \"\";\n\n\t\t\t// Called whenever the user makes a change to the data.\n\t\t\tfunction editMade( instance, cell, x, y, value ) {\n\t\t\t\tspreadsheetID = $(instance).attr('id');\n\t\t\t\tcolumnName = columnNames[x];\n\t\t\t\tif ( columnName === \"page\" ) {\n\t\t\t\t\tnewPageNames[y] = value;\n\t\t\t\t\tpage = value === '' ? \" \" : value;\n\t\t\t\t}\n\n\t\t\t\t// Update either the \"save\" or the \"add\" icon,\n\t\t\t\t// depending on which one exists for this row.\n\t\t\t\t$( \"div#\" + spreadsheetID + \" td[data-y = \" + y + \"] .save-changes\" ).each( function() {\n\t\t\t\t\tif ( modifiedDataValues[spreadsheetID] === undefined ) {\n\t\t\t\t\t\tmodifiedDataValues[spreadsheetID] = {};\n\t\t\t\t\t}\n\t\t\t\t\tvar pageName = $(this).parent().attr(\"id\").replace(\"page-span-\", \"\");\n\t\t\t\t\tif ( modifiedDataValues[spreadsheetID][y] === undefined ) {\n\t\t\t\t\t\t// Hacky way to do a \"deep copy\".\n\t\t\t\t\t\tmodifiedDataValues[spreadsheetID][y] = JSON.parse(JSON.stringify(dataValues[spreadsheetID][y]));\n\t\t\t\t\t}\n\t\t\t\t\tmodifiedDataValues[spreadsheetID][y][columnName] = value;\n\t\t\t\t\t// @HACK - there's probably a better way to only\n\t\t\t\t\t// attach one click listener to this icon.\n\t\t\t\t\t$(this).off();\n\t\t\t\t\t$(this).click( function( event ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tjexcel.prototype.saveChanges(\n\t\t\t\t\t\t\tspreadsheetID,\n\t\t\t\t\t\t\ttemplateName,\n\t\t\t\t\t\t\tpageName,\n\t\t\t\t\t\t\tnewPageNames[y],\n\t\t\t\t\t\t\tformName,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tmodifiedDataValues[spreadsheetID][y],\n\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\teditMultiplePages\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdataValues[spreadsheetID][y] = JSON.parse(JSON.stringify(modifiedDataValues[spreadsheetID][y]));\n\t\t\t\t\t\t$(this).parent().hide();\n\t\t\t\t\t\t$(this).parent().siblings('.mit-row-icons').show();\n\t\t\t\t\t} );\n\t\t\t\t\t// Use this opportunity to make the icons appear.\n\t\t\t\t\t$(this).parent().show();\n\t\t\t\t\t$(this).parent().siblings('.mit-row-icons').hide();\n\t\t\t\t});\n\t\t\t\t$(\"div#\" + spreadsheetID + \" td[data-y = \" + y + \"] .save-new-row\").each(function() {\n\t\t\t\t\tdataValues[spreadsheetID][y][columnName] = value;\n\t\t\t\t\t// @HACK - see above\n\t\t\t\t\t$(this).off();\n\t\t\t\t\t$(this).click( function( event ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tjexcel.prototype.saveNewRow(\n\t\t\t\t\t\t\tspreadsheetID,\n\t\t\t\t\t\t\ttemplateName,\n\t\t\t\t\t\t\tformName,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tpage,\n\t\t\t\t\t\t\tdataValues[spreadsheetID][y],\n\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\teditMultiplePages\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$(this).parent().hide();\n\t\t\t\t\t} );\n\t\t\t\t});\n\t\t\t\t$( \"div#\" + spreadsheetID + \" td[data-y = \" + y + \"] .cancel-changes\" ).each( function() {\n\t\t\t\t\t// @HACK - see above\n\t\t\t\t\t$(this).off();\n\t\t\t\t\t$(this).click( function( event ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tjexcel.prototype.cancelChanges(\n\t\t\t\t\t\t\tspreadsheetID,\n\t\t\t\t\t\t\tdataValues[spreadsheetID][y],\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tcolumnNames\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$(this).parent().hide();\n\t\t\t\t\t\t$(this).parent().siblings('.mit-row-icons').show();\n\t\t\t\t\t} );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Populate the starting spreadsheet.\n\t\t\tfunction populateSpreadsheet() {\n\t\t\t\tif ( dataValues[spreadsheetID] == undefined ) {\n\t\t\t\t\tdataValues[spreadsheetID] = [];\n\t\t\t\t}\n\t\t\t\tvar templateCalls = [];\n\t\t\t\tvar numRows = pagesData.length;\n\t\t\t\tvar columnNum;\n\t\t\t\tfor (var j = 0; j < numRows; j++) {\n\t\t\t\t\ttemplateCalls = getTemplateCalls(pagesData[j].contents, pagesData[j].title);\n\t\t\t\t\tfor (const templateCall of templateCalls) {\n\t\t\t\t\t\tvar fieldArray = getTemplateParams( templateCall );\n\t\t\t\t\t\tvar fieldValueObject = {};\n\t\t\t\t\t\tfor (const field of fieldArray) {\n\t\t\t\t\t\t\tvar equalPos = field.indexOf('=');\n\t\t\t\t\t\t\tvar fieldLabel = field.slice(0, Math.max(0, equalPos));\n\t\t\t\t\t\t\tvar fieldValue = field.slice(Math.max(0, equalPos + 1));\n\t\t\t\t\t\t\tfieldLabel = fieldLabel.trim();\n\t\t\t\t\t\t\tfieldValueObject[fieldLabel] = fieldValue.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataValues[spreadsheetID].push(fieldValueObject);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( editMultiplePages == undefined ) {\n\t\t\t\t\tdataValues[spreadsheetID] = gridValues[templateName];\n\t\t\t\t}\n\t\t\t\tfor ( var rowNum = 0; rowNum < dataValues[spreadsheetID].length; rowNum++ ) {\n\t\t\t\t\tvar rowValues = dataValues[spreadsheetID][rowNum];\n\t\t\t\t\tvar pageName;\n\t\t\t\t\tfor ( columnNum = 0; columnNum < columnNames.length; columnNum++ ) {\n\t\t\t\t\t\tcolumnName = columnNames[columnNum];\n\t\t\t\t\t\tvar curValue = rowValues[columnName];\n\t\t\t\t\t\tif ( myData[rowNum] == undefined ) {\n\t\t\t\t\t\t\tmyData[rowNum] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( columnName == 'page' ) {\n\t\t\t\t\t\t\tpageName = curValue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( curValue !== undefined ) {\n\t\t\t\t\t\t\tvar jExcelValue = jexcel.prototype.getjExcelValue( curValue, gridParams[templateName][columnNum] );\n\t\t\t\t\t\t\tmyData[rowNum].push( jExcelValue );\n\t\t\t\t\t\t\tdataValues[spreadsheetID][rowNum][columnName] = jExcelValue;\n\t\t\t\t\t\t} else if ( columnName === manageColumnTitle ) {\n\t\t\t\t\t\t\tvar cellContents = '<span class=\"save-or-cancel\" style=\"display: none\" id=\"page-span-' + pageName + '\">' +\n\t\t\t\t\t\t\t\t'<a href=\"#\" class=\"save-changes\">' + saveIcon + '</a> | ' +\n\t\t\t\t\t\t\t\t'<a href=\"#\" class=\"cancel-changes\">' + cancelIcon + '</a>' +\n\t\t\t\t\t\t\t\t'</span>';\n\n\t\t\t\t\t\t\tif ( editMultiplePages === undefined ) {\n\t\t\t\t\t\t\t\tcellContents += '<span class=\"mit-row-icons\">' + // \"mit\" = \"multiple-instance template\"\n\t\t\t\t\t\t\t\t\t'<a href=\"#\" class=\"raise-row\">' + upIcon + '</a>' +\n\t\t\t\t\t\t\t\t\t' <a href=\"#\" class=\"lower-row\">' + downIcon + '</a>' +\n\t\t\t\t\t\t\t\t\t' | <a href=\"#\" class=\"delete-row\">' + deleteIcon + '</a>' +\n\t\t\t\t\t\t\t\t\t'</span>';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmyData[rowNum].push( cellContents );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmyData[rowNum].push(\"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Called after a new row is added.\n\t\t\t\tfunction rowAdded(instance) {\n\t\t\t\t\tvar $instance = $(instance);\n\t\t\t\t\tvar spreadsheetId = $instance.attr('id');\n\t\t\t\t\trowAdded2( $instance, spreadsheetId );\n\t\t\t\t}\n\n\t\t\t\tfunction rowAdded2( $instance, spreadsheetId ) {\n\t\t\t\t\tvar $newRow = $instance.find(\"tr\").last();\n\t\t\t\t\tvar columnParams = gridParams[templateName];\n\t\t\t\t\tfor ( columnNum = 0; columnNum < columnParams.length; columnNum++ ) {\n\t\t\t\t\t\tvar defaultValue = columnParams[columnNum]['default'];\n\t\t\t\t\t\tif ( defaultValue == undefined ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar realDefaultValue = defaultValue;\n\t\t\t\t\t\t// Special handling for some default values.\n\t\t\t\t\t\tif ( defaultValue == 'now' ) {\n\t\t\t\t\t\t\tvar date = new Date();\n\t\t\t\t\t\t\tvar monthNum = date.getMonth() + 1;\n\t\t\t\t\t\t\trealDefaultValue = date.getFullYear() + '-' + monthNum + '-' + date.getDate() +\n\t\t\t\t\t\t\t\t' ' + date.getHours() + ':' + date.getMinutes();\n\t\t\t\t\t\t} else if ( defaultValue == 'current user' ) {\n\t\t\t\t\t\t\trealDefaultValue = mw.config.get( 'wgUserName' );\n\t\t\t\t\t\t} else if ( defaultValue == 'uuid' ) {\n\t\t\t\t\t\t\trealDefaultValue = window.pfGenerateUUID();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar $curCell = $newRow.find(\"td:nth-child(\" + ( columnNum + 2 ) + \")\");\n\t\t\t\t\t\t$curCell.html(realDefaultValue);\n\t\t\t\t\t}\n\t\t\t\t\tvar $cell = $newRow.find(\"td\").last();\n\t\t\t\t\tvar manageCellContents = '';\n\n\t\t\t\t\tif ( editMultiplePages === undefined ) {\n\t\t\t\t\t\tmanageCellContents = '<span class=\"mit-row-icons\">' +\n\t\t\t\t\t\t\t'<a href=\"#\" class=\"raise-row\">' + upIcon + '</a>' +\n\t\t\t\t\t\t\t' <a href=\"#\" class=\"lower-row\">' + downIcon + '</a>' +\n\t\t\t\t\t\t\t' | <a href=\"#\" class=\"delete-row\">' + deleteIcon + '</a>' +\n\t\t\t\t\t\t\t'</span>';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmanageCellContents = '<span class=\"save-or-cancel\">' +\n\t\t\t\t\t\t\t'<a class=\"save-new-row\">' + addIcon + '</a> | ' +\n\t\t\t\t\t\t\t'<a class=\"cancel-adding\">' + cancelIcon + '</a></span>';\n\t\t\t\t\t}\n\t\t\t\t\t$cell.html(manageCellContents);\n\n\t\t\t\t\t// Don't activate the \"add page\" icon\n\t\t\t\t\t// yet, because the row doesn't have a\n\t\t\t\t\t// page name.\n\t\t\t\t\t// @TODO - should the icon even be there?\n\t\t\t\t\t$cell.find(\"a.cancel-adding\").click( function( event ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tjexcel.prototype.deleteRow(spreadsheetId, dataValues[spreadsheetId].length);\n\t\t\t\t\t} );\n\t\t\t\t\tif ( editMultiplePages === undefined ) {\n\t\t\t\t\t\t$cell.find(\"a.delete-row\").click( function( event ) {\n\t\t\t\t\t\t\tvar y = $cell.attr(\"data-y\");\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tjexcel.prototype.deleteRow( spreadsheetId, y );\n\t\t\t\t\t\t\t//dataValues[spreadsheetId].splice(y, 1);\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t$cell.find(\"a.raise-row\").click( function( event ) {\n\t\t\t\t\t\t\tvar y = $cell.attr(\"data-y\");\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tif ( y > 0 ) {\n\t\t\t\t\t\t\t\tmw.spreadsheets[spreadsheetId].moveRow( y, y - 1 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t$cell.find(\"a.lower-row\").click( function( event ) {\n\t\t\t\t\t\t\tvar curSpreadsheet = mw.spreadsheets[spreadsheetId];\n\t\t\t\t\t\t\tvar y = parseInt( $cell.attr(\"data-y\") );\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tif ( y + 1 < curSpreadsheet.getData().length ) {\n\t\t\t\t\t\t\t\tcurSpreadsheet.moveRow( y, y + 1 );\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\t// Providing the autocomplete attributes whenever a new row is added\n\t\t\t\t\tif ( editMultiplePages === undefined ) {\n\t\t\t\t\t\t$(table).find('tbody td').not('.jexcel_row').each(function() {\n\t\t\t\t\t\t\tvar data_x = $(this).attr('data-x');\n\t\t\t\t\t\t\tjexcel.prototype.setAutocompleteAttributesOfCells( table, templateName, data_x, this );\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdataValues[spreadsheetId].push( {} );\n\t\t\t\t}\n\n\t\t\t\tmw.spreadsheets[spreadsheetID] = jexcel( table, {\n\t\t\t\t\tdata: myData,\n\t\t\t\t\tcolumns: columns,\n\t\t\t\t\ttableOverflow: true,\n\t\t\t\t\tloadingSpin: true,\n\t\t\t\t\tonchange: editMade,\n\t\t\t\t\tcolumnSorting: true,\n\t\t\t\t\tallowInsertColumn: false,\n\t\t\t\t\tallowDeletingAllRows: true,\n\t\t\t\t\toninsertrow: rowAdded,\n\t\t\t\t\tcontextMenu: function() {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t},\n\t\t\t\t\ttableHeight: \"2500px\",\n\t\t\t\t\tpagination: (editMultiplePages === undefined ) ? false : 100,\n\t\t\t\t\tsearch: (editMultiplePages !== undefined ),\n\t\t\t\t\tfilters: (editMultiplePages !== undefined ),\n\t\t\t\t\ttext: {\n\t\t\t\t\t\tsearch: mw.msg( 'search' )\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t// Set the \"label\" for columns that have a label defined.\n\t\t\t\tvar columnParams = gridParams[templateName];\n\t\t\t\tfor ( columnNum = 0; columnNum < columnParams.length; columnNum++ ) {\n\t\t\t\t\tvar columnLabel = columnParams[columnNum]['label'];\n\t\t\t\t\tif ( columnLabel == undefined ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t$(table).find('thead').find('td[data-x=' + columnNum + ']').html(columnLabel);\n\t\t\t\t}\n\n\t\t\t\tif ( editMultiplePages !== undefined ) {\n\t\t\t\t\tvar numberOfColumns = $(table).find('thead tr:first td').not('.jexcel_selectall').length,\n\t\t\t\t\t\tfieldNum = 0;\n\t\t\t\t\t// Provide the autocomplete attributes to each column of the spreadsheet\n\t\t\t\t\t// which is populated at the starting.\n\t\t\t\t\t$(table).find('thead tr:first td').not('.jexcel_selectall').each( function() {\n\t\t\t\t\t\t// to avoid the last column, used numberOfColumns-1\n\t\t\t\t\t\tif ( fieldNum < numberOfColumns-1 ) {\n\t\t\t\t\t\t\tjexcel.prototype.setAutocompleteAttributesOfColumns( this, gridParams, templateName, fieldNum );\n\t\t\t\t\t\t\tfieldNum++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tvar addRowButton = new OO.ui.FieldLayout( new OO.ui.ButtonWidget( {\n\t\t\t\t\tclasses: [ 'add-row' ],\n\t\t\t\t\ticon: 'add',\n\t\t\t\t\tlabel: mw.msg( 'pf-spreadsheet-addrow' )\n\t\t\t\t} ) );\n\n\t\t\t\t$(table).append(addRowButton.$element);\n\n\t\t\t\t$('div#' + spreadsheetID + ' span.add-row').click( function( event ) {\n\t\t\t\t\tvar curSpreadsheet = mw.spreadsheets[spreadsheetID];\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( curSpreadsheet.getData().length > 0 ) {\n\t\t\t\t\t\tcurSpreadsheet.insertRow();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurSpreadsheet.setData([ ' ' ]);\n\t\t\t\t\t\tvar $curSpreadsheetDiv = $(this).closest('.pfSpreadsheet');\n\t\t\t\t\t\trowAdded2($curSpreadsheetDiv, spreadsheetID);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t$('div#' + spreadsheetID + ' a.raise-row').click( function( event ) {\n\t\t\t\t\tvar y = $(this).parents('td').attr(\"data-y\");\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( y > 0 ) {\n\t\t\t\t\t\tmw.spreadsheets[spreadsheetID].moveRow( y, y - 1 );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t$('div#' + spreadsheetID + ' a.lower-row').click( function( event ) {\n\t\t\t\t\tvar curSpreadsheet = mw.spreadsheets[spreadsheetID];\n\t\t\t\t\tvar y = parseInt( $(this).parents('td').attr(\"data-y\") );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( y + 1 < curSpreadsheet.getData().length ) {\n\t\t\t\t\t\tmw.spreadsheets[spreadsheetID].moveRow( y, y + 1 );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\t$('div#' + spreadsheetID + ' a.delete-row').click( function( event ) {\n\t\t\t\t\tvar y = $(this).parents('td').attr(\"data-y\");\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tjexcel.prototype.deleteRow( spreadsheetID, y );\n\t\t\t\t\t//dataValues[spreadsheetID].splice(y, 1);\n\t\t\t\t} );\n\n\t\t\t\t$('div#' + spreadsheetID + ' div.loadingImage').css( \"display\", \"none\" );\n\n\t\t\t}\n\t\t//})();\n\t});\n\n\t$('.pfSpreadsheet').each( function() {\n\t\tvar templateName = $(this).attr( 'data-template-name' ),\n\t\t\ttable = this,\n\t\t\tfieldNum = 0,\n\t\t\teditMultiplePages = $(this).attr('editmultiplepages');\n\t\tvar numberOfColumns = $(table).find('thead tr:first td').not('.jexcel_selectall').length;\n\n\t\tif ( editMultiplePages == undefined ) {\n\t\t\t// Provide the autocomplete attributes to each column of the spreadsheet\n\t\t\t// which is populated at the starting.\n\t\t\t$(table).find('thead tr:first td').not('.jexcel_selectall').each( function() {\n\t\t\t\t// to avoid the last column, used numberOfColumns-1\n\t\t\t\tif ( fieldNum < numberOfColumns-1 ) {\n\t\t\t\t\tjexcel.prototype.setAutocompleteAttributesOfColumns( this, gridParams, templateName, fieldNum );\n\t\t\t\t\tfieldNum++;\n\t\t\t\t}\n\t\t\t} );\n\t\t\t// Providing \"name\" and \"origname\" and autocomplete attributes to every cell of the spreadsheet\n\t\t\t$(table).find('tbody td').not('.jexcel_row').each(function() {\n\t\t\t\tvar data_x = $(this).attr('data-x');\n\t\t\t\tjexcel.prototype.setAutocompleteAttributesOfCells( table, templateName, data_x, this );\n\t\t\t});\n\t\t}\n\t} )\n\n\t// If this is a spreadsheet display within a form, create hidden\n\t// inputs for every cell when the form is submitted, so that all the\n\t// data will actually get submitted.\n\t$( \"#pfForm\" ).submit(function( event ) {\n\t\t$( '.pfSpreadsheet' ).each( function() {\n\t\t\tvar $grid = $(this),\n\t\t\t\ttemplateName = $(this).attr( 'data-template-name' ),\n\t\t\t\tformName = $(this).attr( 'data-form-name' ),\n\t\t\t\teditMultiplePages = $(this).attr( 'editMultiplePages' );\n\n\t\t\t// Add a hidden input for each template, so that the PHP code can know\n\t\t\t// which values came from a spreadsheet.\n\t\t\tif ( !editMultiplePages ) {\n\t\t\t\t$('<input>').attr( 'type', 'hidden' ).attr( 'name', 'spreadsheet_templates[' + templateName + ']' ).attr( 'value', 'true' ).appendTo( '#pfForm' );\n\t\t\t}\n\n\t\t\t$grid.find( \"td\" ).not('.readonly').each( function() {\n\t\t\t\tvar rowNum = $(this).attr('data-y');\n\t\t\t\tvar columnNum = $(this).attr('data-x');\n\t\t\t\tif ( rowNum == undefined || columnNum == undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar mwValue = jexcel.prototype.getMWValueFromCell( $(this), gridParams[templateName][columnNum] );\n\t\t\t\tvar paramName = gridParams[templateName][columnNum].name;\n\t\t\t\tvar inputName = templateName + '[' + ( rowNum + 1 ) + '][' + paramName + ']';\n\t\t\t\t$('<input>').attr( 'type', 'hidden' ).attr( 'name', inputName ).attr( 'value', mwValue ).appendTo( '#pfForm' );\n\t\t\t});\n\t\t});\n\t});\n\n\n}( jQuery, mediaWiki, pf ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_submit.js","messages":[{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substring()`.","line":141,"column":46,"nodeType":"CallExpression","messageId":"substring","endLine":141,"endColumn":74},{"ruleId":"no-shadow","severity":1,"message":"'$form' is already declared in the upper scope on line 14 column 6.","line":174,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":174,"endColumn":13}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript handler for the save-and-continue button\n *\n * @author Stephan Gambke\n */\n\n/*global validateAll */\n\n( function( $, mw ) {\n\n\t'use strict';\n\n\tvar $sacButtons;\n\tvar $form;\n\n\tfunction setChanged( event ) {\n\t\t$sacButtons\n\t\t\t.addClass( 'pf-save_and_continue-changed' )\n\t\t\t.addClass( 'oo-ui-widget-enabled' )\n\t\t\t.removeClass( 'oo-ui-widget-disabled' );\n\t\t$sacButtons.children('button').prop( 'disabled', false );\n\n\t\treturn true;\n\t}\n\n\t// Prevent multiple submission of form\n\tjQuery.fn.preventDoubleSubmission = function() {\n\t\t$( this ).on( 'submit', function(e) {\n\t\t\tif ( $form.data('submitted') === true ) {\n\t\t\t\t// Previously submitted - don't submit again\n\t\t\t\te.preventDefault();\n\t\t\t} else {\n\t\t\t\t// Mark it so that the next submit can be ignored\n\t\t\t\t$form.data('submitted', true);\n\t\t\t\t$( '.editButtons > .oo-ui-buttonElement' ).removeClass( 'oo-ui-widget-enabled' ).addClass( 'oo-ui-widget-disabled' );\n\t\t\t}\n\t\t});\n\t\t// Keep chainability\n\t\treturn this;\n\t};\n\t$( '#pfForm' ).preventDoubleSubmission();\n\t/**\n\t * Called when the server has sent the preview\n\t *\n\t * @param {Mixed} result\n\t * @param {Mixed} textStatus\n\t * @param {Mixed} jqXHR\n\t */\n\tvar resultReceivedHandler = function handleResultReceived( result, textStatus, jqXHR ) {\n\t\t// Store the target name\n\t\tvar $target = $form.find( 'input[name=\"target\"]' );\n\n\t\tif ( $target.length === 0 ) {\n\t\t\t$target = $( '<input type=\"hidden\" name=\"target\">' );\n\t\t\t$form.append ( $target );\n\t\t}\n\n\t\t$target.attr( 'value', result.$target );\n\n\t\t// Store the form name\n\t\t$target = $form.find( 'input[name=\"form\"]' );\n\n\t\tif ( $target.length === 0 ) {\n\t\t\t$target = $( '<input type=\"hidden\" name=\"form\">' );\n\t\t\t$form.append ( $target );\n\t\t}\n\n\t\t$target.attr( 'value', result.form.title );\n\n\t\t$sacButtons\n\t\t.addClass( 'pf-save_and_continue-ok' )\n\t\t.removeClass( 'pf-save_and_continue-wait' )\n\t\t.removeClass( 'pf-save_and_continue-error' );\n\n\t};\n\n\tvar resultReceivedErrorHandler = function handleError( jqXHR ){\n\t\tvar errors = $.parseJSON( jqXHR.responseText ).errors;\n\n\t\t$sacButtons\n\t\t.addClass( 'pf-save_and_continue-error' )\n\t\t.removeClass( 'pf-save_and_continue-wait' );\n\n\t\t// Remove all old error messages and set new ones\n\t\t$( '.errorbox' ).remove();\n\n\n\t\tif ( errors.length > 0 ){\n\t\t\tvar i;\n\t\t\tfor ( i = 0; i < errors.length; i += 1 ) {\n\t\t\t\tif ( errors[i].level < 2 ) { // show errors and warnings\n\t\t\t\t\t$( '#contentSub' )\n\t\t\t\t\t.append( '<div id=\"form_error_header\" class=\"errorbox\" style=\"font-size: medium\">' +\n\t\t\t\t\t\t'<img src=\"' + mw.config.get( 'wgPageFormsScriptPath' ) + '/skins/MW-Icon-AlertMark.png\" />' +\n\t\t\t\t\t\t'&nbsp;' + errors[i].message + '</div><br clear=\"both\" />' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( 'html, body' ).scrollTop( $( '#contentSub' ).offset().top );\n\t\t}\n\t};\n\n\tfunction collectData() {\n\t\tvar $summaryfield = jQuery( '#wpSummary', $form );\n\t\tvar saveAndContinueSummary = mw.msg( 'pf_formedit_saveandcontinue_summary', mw.msg( 'pf_formedit_saveandcontinueediting' ) );\n\t\tvar params;\n\n\t\tif ( $summaryfield.length > 0 ) {\n\n\t\t\tvar oldsummary = $summaryfield.attr( 'value' );\n\n\t\t\tif ( oldsummary !== '' ) {\n\t\t\t\t$summaryfield.attr( 'value', oldsummary + ' (' + saveAndContinueSummary + ')' );\n\t\t\t} else {\n\t\t\t\t$summaryfield.attr( 'value', saveAndContinueSummary );\n\t\t\t}\n\n\t\t\tparams = $form.serialize();\n\n\t\t\t$summaryfield.attr( 'value', oldsummary );\n\t\t} else {\n\t\t\tparams = $form.serialize();\n\t\t\tparams += '&wpSummary=' + saveAndContinueSummary;\n\t\t}\n\n\t\tif ( mw.config.get( 'wgAction' ) === 'formedit' ) {\n\t\t\tparams += '&target=' + encodeURIComponent( mw.config.get( 'wgPageName' ) );\n\t\t} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'FormEdit' ) {\n\t\t\tvar url = mw.config.get( 'wgPageName' );\n\n\t\t\tvar start = url.indexOf( '/' ) + 1; // find start of subpage\n\t\t\tvar stop;\n\n\t\t\tif ( start >= 0 ) {\n\t\t\t\tstop = url.indexOf( '/', start ); // find end of first subpage\n\t\t\t} else {\n\t\t\t\tstop = -1;\n\t\t\t}\n\n\t\t\tif ( stop >= 0 ) {\n\t\t\t\tparams += '&form=' + encodeURIComponent( url.substring( start, stop ) );\n\n\t\t\t\tstart = stop + 1;\n\t\t\t\tparams += '&target=' + encodeURIComponent( url.slice( start ) );\n\n\t\t\t} else {\n\t\t\t\tparams += '&form=' + encodeURIComponent( url.slice( start ) );\n\t\t\t}\n\t\t}\n\n\t\tparams += '&wpMinoredit=1';\n\n\t\treturn params;\n\t}\n\n\tfunction handleSaveAndContinue( event ) {\n\n\t\tevent.stopImmediatePropagation();\n\n\t\t// remove old error messages\n\t\tvar el = document.getElementById( 'form_error_header' );\n\n\t\tif ( el ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\tif ( validateAll() ) {\n\t\t\t// disable save and continue button\n\t\t\t$sacButtons\n\t\t\t.attr( 'disabled', 'disabled' )\n\t\t\t.addClass( 'pf-save_and_continue-wait' )\n\t\t\t.removeClass( 'pf-save_and_continue-changed' );\n\n\t\t\tvar $form = $( '#pfForm' );\n\n\t\t\tvar data = {\n\t\t\t\taction: 'pfautoedit',\n\t\t\t\tformat: 'json',\n\t\t\t\tquery: collectData() // add form values to the data\n\t\t\t};\n\n\t\t\tdata.query += '&wpSave=' + encodeURIComponent( $( event.currentTarget ).attr( 'value' ) );\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: 'POST', // request type ( GET or POST )\n\t\t\t\turl: mw.util.wikiScript( 'api' ), // URL to which the request is sent\n\t\t\t\tdata: data, // data to be sent to the server\n\t\t\t\tdataType: 'json', // type of data expected back from the server\n\t\t\t\tsuccess: resultReceivedHandler, // function to be called if the request succeeds\n\t\t\t\terror: resultReceivedErrorHandler // function to be called on error\n\t\t\t} );\n\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tmw.pageFormsActivateVEFields = function( callback ) {\n\t\tvar visualEditors = $.fn.getVEInstances();\n\t\tif ( visualEditors.length > 0 ) {\n\t\t\tvar savingQueue = [];\n\t\t\t$(visualEditors).each( function( i, ve ) {\n\t\t\t\tsavingQueue.push( ve.target.updateContent() );\n\t\t\t});\n\t\t\t$.when.apply( $, savingQueue ).then( function() {\n\t\t\t\tcallback();\n\t\t\t});\n\t\t} else {\n\t\t\tcallback();\n\t\t}\n\t};\n\n\tif ( mw.config.get( 'wgAction' ) === 'formedit' || mw.config.get( 'wgCanonicalSpecialPageName' ) === 'FormEdit' ) {\n\t\t$(function() { // Wait until DOM is loaded.\n\t\t\t$form = $( '#pfForm' );\n\t\t\t$sacButtons = $( '.pf-save_and_continue', $form );\n\t\t\t$sacButtons.click( handleSaveAndContinue );\n\n\t\t\t$form\n\t\t\t.on( 'keyup', 'input,select,textarea', function( event ) {\n\t\t\t\tif ( event.which < 32 ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn setChanged( event );\n\t\t\t} )\n\t\t\t.on( 'change', 'input,select,textarea', setChanged )\n\t\t\t.on( 'click', '.multipleTemplateAdder', setChanged )\n\t\t\t.on( 'mousedown', '.instanceRearranger,.removeButton', setChanged );\n\n\t\t\t// Run only when VEForAll extension is present\n\t\t\t$( document ).on( 'VEForAllLoaded', function() {\n\t\t\t\t// Special submit form & other actions handling when VEForAll editor is present\n\t\t\t\tif ( $('.visualeditor').length > 0 ) {\n\t\t\t\t\t// Interrupt \"Save page\", \"Show preview\" and \"Show changes\" actions\n\t\t\t\t\tvar $formButtons = $( '#wpSave, #wpPreview, #wpDiff' );\n\t\t\t\t\tvar canSubmit = false;\n\n\t\t\t\t\tif ( $formButtons.length > 0 ) {\n\t\t\t\t\t\t$formButtons.each( function( i, button ) {\n\t\t\t\t\t\t\t$( button ).on( 'click', function( event ) {\n\t\t\t\t\t\t\t\tif ( !canSubmit ) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tmw.pageFormsActivateVEFields( function() {\n\t\t\t\t\t\t\t\t\t\tif ( validateAll() ) {\n\t\t\t\t\t\t\t\t\t\t\tcanSubmit = true;\n\t\t\t\t\t\t\t\t\t\t\t$( button ).find(\"[type='submit']\").click();\n\t\t\t\t\t\t\t\t\t\t}\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\t// Interrupt \"Save and continue\" action\n\t\t\t\t\t$sacButtons.off('click', handleSaveAndContinue).click( function( event ) {\n\t\t\t\t\t\tmw.pageFormsActivateVEFields( function() {\n\t\t\t\t\t\t\thandleSaveAndContinue( event );\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_timepicker.js","messages":[{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":62,"column":9,"nodeType":"CallExpression","endLine":62,"endColumn":60}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript code to be used with input type timepicker.\n *\n * @author Stephan Gambke\n */\n\n/**\n * Initializes a timepicker input\n *\n * @param {string} inputID the id of the input to initialize\n * @param {Object} params the parameter object for the timepicker, contains\n *\t\tminTime: (String) the minimum time to be shown (format hh:mm)\n *\t\tmaxTime: (String) the maximum time to be shown (format hh:mm)\n *\t\tinterval: (String) the interval between selectable times in minutes\n *\t\tformat: (String) a format string (unused) (do we even need it?)\n */\nwindow.PF_TP_init = function( inputID, params ) { // minTime, maxTime, interval, format\n\n\tvar inputIDshow = inputID + '_show';\n\n\tvar $inputShow = jQuery( '#' + inputID );\n\t$inputShow.attr( 'id', inputIDshow );\n\n\tvar $input;\n\n\t// set up hidden input if this timepicker is not part of a datetimepicker\n\tif ( ! params.partOfDTP ) {\n\n\t\t$input = jQuery( '<input type=\"hidden\" >');\n\t\t$input.attr( {\n\t\t\tid: inputID,\n\t\t\tname: $inputShow.attr( 'name' ),\n\t\t\tvalue: $inputShow.val()\n\t\t} );\n\t\t$input.val($inputShow.val());\n\n\t\t$inputShow.after( $input );\n\t\t$inputShow.removeAttr( 'name' );\n\n\t} else {\n\t\t$input = $inputShow;\n\t}\n\n\tvar tabindex = $inputShow.attr('tabindex');\n\n\t// append time picker button\n\tvar $button = jQuery( '<button type=\"button\" ></button>' );\n\t$button.attr({\n\t\t'class': params.userClasses,\n\t\t'id': inputID + '_button',\n\t\t'tabindex': tabindex\n\t});\n\n\n\tif ( params.disabled ) {\n\n\t\t$button.attr( 'disabled', 'disabled' );\n\n\t} else {\n\n\t\t$button.click( function(){\n\t\t\tif ( jQuery( '#' + inputID + '_tree>ul' ).is(':visible') ) {\n\t\t\t\t$inputShow.blur();\n\t\t\t} else {\n\t\t\t\t$inputShow.focus();\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tvar $img = jQuery( '<img>' );\n\t$img.attr( 'src', params.buttonImage );\n\n\t$button.append( $img );\n\n\t$input.after( $button );\n\n\t// sanitize inputs\n\tvar re = /^\\d+:\\d\\d$/;\n\tvar minh = 0;\n\tvar minm = 0;\n\n\tvar maxh = 23;\n\tvar maxm = 59;\n\n\tif ( re.test( params.minTime ) ) {\n\n\t\tvar min = params.minTime.split( ':', 2 );\n\t\tminh = Number( min[0] );\n\t\tminm = Number( min[1] );\n\n\t\tif ( minm > 59 ) {\n\t\t\tminm = 59;\n\t\t}\n\t}\n\n\tif ( re.test( params.maxTime ) ) {\n\n\t\tvar max = params.maxTime.split( ':', 2 );\n\t\tmaxh = Number( max[0] );\n\t\tmaxm = Number( max[1] );\n\n\t\tif ( maxm > 59 ) {\n\t\t\tmaxm = 59;\n\t\t}\n\t}\n\n\tvar interv = Number( params.interval );\n\n\tif ( interv < 1 ) {\n\t\tinterv = 1;\n\t} else if ( interv > 60 ) {\n\t\tinterv = 60;\n\t}\n\n\t// build html structure\n\tvar $sp = jQuery( '<span class=\"PF_timepicker\" id=\"' + inputID + '_tree\" ></span>' ).insertBefore( $inputShow );\n\n\tvar $ulh = jQuery( '<ul class=\"PF_timepicker_hours\" >' ).appendTo( $sp );\n\n\n\tfor ( var h = minh; h <= maxh; ++h ) {\n\n\t\tvar $lih = jQuery( '<li class=\"ui-state-default PF_timepicker_hour\">' + ( ( h < 10 ) ? '0' : '' ) + h + '</li>' ).appendTo( $ulh );\n\n\t\t//TODO: Replace value for \"show\" by formatted string\n\t\t$lih\n\t\t.data( 'value', ( ( h < 10 ) ? '0' : '' ) + h + ':00' )\n\t\t.data( 'show', ( ( h < 10 ) ? '0' : '' ) + h + ':00' );\n\n\t\tvar $ulm = jQuery( '<ul class=\"PF_timepicker_minutes\" >' ).appendTo( $lih );\n\n\t\tfor ( var m = ( (h === minh) ? minm : 0 ) ; m <= ( (h === maxh) ? maxm : 59 ); m += interv ) {\n\n\t\t\tvar $lim = jQuery( '<li class=\"ui-state-default PF_timepicker_minute\">' + ( ( m < 10 ) ? '0' : '' ) + m  + '</li>' ).appendTo( $ulm );\n\n\t\t\t//TODO: Replace value for \"show\" by formatted string\n\t\t\t$lim\n\t\t\t.data( 'value', ( ( h < 10 ) ? '0' : '' ) + h + ':' + ( ( m < 10 ) ? '0' : \"\" ) + m )\n\t\t\t.data( 'show', ( ( h < 10 ) ? '0' : '' ) + h + ':' + ( ( m < 10 ) ? '0' : \"\" ) + m );\n\n\t\t}\n\n\t}\n\n\t// initially hide everything\n\tjQuery( '#' + inputID + '_tree ul' )\n\t.hide();\n\n\t// attach event handlers\n\tjQuery( '#' + inputID + '_tree li' ) // hours\n\t.mouseover(function(evt){\n\n\t\t// clear any timeout that may still run on the last list item\n\t\tclearTimeout( jQuery( evt.currentTarget ).data( 'timeout' ) );\n\n\t\tjQuery( evt.currentTarget )\n\n\t\t// switch classes to change display style\n\t\t.removeClass( 'ui-state-default' )\n\t\t.addClass( 'ui-state-hover' )\n\n\t\t// set timeout to show minutes for selected hour\n\t\t.data( 'timeout', setTimeout(\n\t\t\tfunction(){\n\t\t\t\tjQuery( evt.currentTarget ).children().fadeIn();\n\t\t\t}, 400 ) );\n\n\t})\n\n\t.mouseout(function(evt){\n\n\t\t// clear any timeout that may still run on this jQuery list item\n\t\tclearTimeout( jQuery( evt.currentTarget ).data( 'timeout' ) );\n\n\t\tjQuery( evt.currentTarget )\n\n\t\t// switch classes to change display style\n\t\t.removeClass( 'ui-state-hover' )\n\t\t.addClass( 'ui-state-default' )\n\n\t\t// hide minutes after a short pause\n\t\t.data( 'timeout', setTimeout(\n\t\t\tfunction(){\n\t\t\t\tjQuery(evt.currentTarget).children().fadeOut();\n\t\t\t}, 400 ) );\n\n\t});\n\n\tjQuery( '#' + inputID + '_tree li' ) // hours, minutes\n\t.mousedown(function(evt){\n\n\t\t// set values and leave input\n\t\t$inputShow\n\t\t// Are both these calls necessary? At least the 2nd one is.\n\t\t.attr( 'value', jQuery( this ).data( 'show' ) )\n\t\t.val(jQuery( this ).data( 'show' ) )\n\t\t.blur()\n\t\t.change();\n\n\t\t// clear any timeout that may still run on this jQuery list item\n\t\tclearTimeout( jQuery( evt.currentTarget ).data( 'timeout' ) );\n\n\t\tjQuery( evt.currentTarget )\n\n\t\t// switch classes to change display style\n\t\t.removeClass( 'ui-state-hover' )\n\t\t.addClass( 'ui-state-default' );\n\n\t\t// avoid propagation to parent list item (e.g. hours),\n\t\t// they would overwrite the input value\n\t\treturn false;\n\t});\n\n\t// show timepicker when input gets focus\n\t$inputShow\n\t.focus(function() {\n\t\tjQuery( '#' + inputID + '_tree>ul' ).fadeIn();\n\t});\n\n\t// hide timepicker when input loses focus\n\t$inputShow\n\t.blur(function() {\n\t\tjQuery( '#' + inputID + '_tree ul' ).fadeOut( 'normal', function() {\n\t\t\tjQuery(this).hide();\n\t\t});\n\t});\n\n\tif ( ! params.partOfDTP ) {\n\t\t$inputShow\n\t\t.change(function() {\n\t\t\tjQuery( '#' + inputID ).val( jQuery(this).val() );\n\t\t});\n\t}\n\n\tjQuery( '#' + inputID + '_show ~ button[name=\"button\"]' )\n\t.click( function() {\n\t\t$inputShow.focus();\n\t});\n\n};\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_tree.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"$\" type.","line":6,"column":1,"nodeType":"Block","endLine":6,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":7,"column":1,"nodeType":"Block","endLine":7,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"pf\" type.","line":8,"column":1,"nodeType":"Block","endLine":8,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Defines the applyJStree() function, which turns an HTML \"tree\" of\n * checkboxes or radiobuttons into a dynamic and collapsible tree of options\n * using the jsTree JS library.\n *\n * @param $\n * @param mw\n * @param pf\n * @author Mathias Lidal\n * @author Yaron Koren\n * @author Priyanshu Varshney\n * @author Amr El-Absy\n */\n\n ( function($, mw, pf) {\n\n\tpf.TreeInput = function(elem) {\n\t\tthis.element = elem;\n\t\tthis.id = $(this.element).attr('id');\n\t};\n\n\tvar TreeInput_proto = new pf.TreeInput();\n\n\tTreeInput_proto.setOptions = function() {\n\t\tvar data = $(this.element).attr('data');\n\t\tthis.data = JSON.parse(data);\n\t\tvar params = $(this.element).attr('params');\n\t\tthis.params = JSON.parse(params);\n\t\tthis.delimiter = this.params.delimiter;\n\t\tthis.multiple = this.params.multiple;\n\t\tthis.values = [];\n\t\tthis.cur_value = this.params.cur_value;\n\n\t\tvar options = {\n\t\t\t'plugins' :  [ 'checkbox' ],\n\t\t\t'core' : {\n\t\t\t\t'data' : this.data,\n\t\t\t\t'multiple': this.multiple,\n\t\t\t\t'themes' : {\n\t\t\t\t\t\"icons\": false\n\t\t\t\t}\n\t\t\t},\n\t\t\t'checkbox': {\n\t\t\t\t'three_state': false,\n\t\t\t\t'cascade': \"none\"\n\t\t\t}\n\t\t};\n\n\t\treturn options;\n\t};\n\n\tTreeInput_proto.check = function( data ) {\n\t\tvar $input = $(this.element).next('input.PFTree_data');\n\n\t\tif ( this.multiple ) {\n\t\t\tthis.values.push( data );\n\t\t\tvar data_string = this.values.join( this.delimiter );\n\t\t\t$input.attr( 'value', data_string );\n\t\t} else {\n\t\t\tthis.values.push( data );\n\t\t\t$input.attr('value', data);\n\t\t}\n\t};\n\n\tTreeInput_proto.uncheck = function( data ) {\n\t\tvar $input = $( this.element ).next( 'input.PFTree_data' );\n\n\t\tthis.values.splice( this.values.indexOf( data ), 1 );\n\t\tvar data_string = this.values.join( this.delimiter );\n\t\t$input.attr( 'value', data_string );\n\t};\n\n\tTreeInput_proto.setCurValue = function() {\n\t\tif ( this.cur_value !== null && this.cur_value !== undefined && this.cur_value !== \"\" ) {\n\t\t\tvar $input = $( this.element ).next( 'input.PFTree_data' );\n\n\t\t\t$input.attr( 'value', this.cur_value );\n\t\t\tthis.values = this.cur_value.split( this.delimiter );\n\t\t}\n\t};\n\n\tpf.TreeInput.prototype = TreeInput_proto;\n\n} (jQuery, mediaWiki, pf) );\n\n$.fn.extend({\n\tapplyJSTree: function() {\n\t\tvar tree = new pf.TreeInput(this);\n\t\tvar options = tree.setOptions();\n\n\t\t$(this).jstree(options);\n\n\t\t$(this).bind('select_node.jstree', function(evt, data) {\n\t\t\ttree.check(data.node.text);\n\t\t});\n\t\t$(this).bind('deselect_node.jstree', function(evt, data) {\n\t\t\ttree.uncheck(data.node.text);\n\t\t});\n\n\t\ttree.setCurValue();\n\t}\n});\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_upload.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":56,"column":41,"nodeType":"CallExpression","endLine":56,"endColumn":89}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @author Yaron Koren\n *\n * JavaScript for Page Forms' Special:UploadForm.\n *\n * This is a major @HACK. This code is copied from MediaWiki's file\n * mediawiki.special.upload/upload.js, which used to work directly, but no\n * longer does, due to a change in either the FancyBox JS library or\n * something in core MediaWiki. I haven't been able to get JS code defined\n * outside the popup window to either directly modify, or interact with JS\n * inside, the popup window; so instead we have to define our own set of JS,\n * including loading jQuery inside the window. The main upload.js file does\n * a number of things; this file does only one thing, which is to set the\n * \"Destination filename\" input when a file is specified. Still, that's the\n * most important thing.\n *\n * @todo - figure out how to get the real upload JS code to work within the\n * window, in one way or another.\n */\n\n/* global Uint8Array */\n\n//( function( $, jQuery, mw ) {\n\tvar uploadWarning, $license = $( '#wpLicense' );\n\n\t$( function() {\n\t\t// fillDestFile setup\n\t\t//mw.config.get( 'wgUploadSourceIds' ).forEach( function( sourceId ) {\n\t\tvar sourceIDs = [ 'wpUploadFile' ];\n\t\tsourceIDs.forEach( function( sourceId ) {\n\t\t\t$( '#' + sourceId ).on( 'change', function() {\n\t\t\t\tvar path, slash, backslash, fname;\n\t\t\t\t// Remove any previously flagged errors\n\t\t\t\t$( '#mw-upload-permitted, #mw-upload-prohibited' ).removeClass();\n\n\t\t\t\tpath = $( this ).val();\n\t\t\t\t// Find trailing part\n\t\t\t\tslash = path.lastIndexOf( '/' );\n\t\t\t\tbackslash = path.lastIndexOf( '\\\\' );\n\t\t\t\tif ( slash === -1 && backslash === -1 ) {\n\t\t\t\t\tfname = path;\n\t\t\t\t} else if ( slash > backslash ) {\n\t\t\t\t\tfname = path.slice( slash + 1 );\n\t\t\t\t} else {\n\t\t\t\t\tfname = path.slice( backslash + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Replace spaces by underscores\n\t\t\t\tfname = fname.replace( / /g, '_' );\n\t\t\t\t// Capitalise first letter if needed\n//\t\t\t\tif ( mw.config.get( 'wgCapitalizeUploads' ) ) {\n\t\t\t\t\tfname = fname[ 0 ].toUpperCase() + fname.slice( 1 );\n//\t\t\t\t}\n\n\t\t\t\t// Output result\n\t\t\t\tif ( $( '#wpDestFile' ).length && ! $( '#wpDestFile' ).hasClass( 'defaultFilename' ) ) {\n\t\t\t\t\t// Call decodeURIComponent function to remove possible URL-encoded characters\n\t\t\t\t\t// from the file name (T32390). Especially likely with upload-form-url.\n\t\t\t\t\t// decodeURIComponent can throw an exception if input is invalid utf-8\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$( '#wpDestFile' ).val( decodeURIComponent( fname ) );\n\t\t\t\t\t} catch ( err ) {\n\t\t\t\t\t\t$( '#wpDestFile' ).val( fname );\n\t\t\t\t\t}\n\t\t\t\t\t//uploadWarning.checkNow( fname );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} );\n\n//}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PF_wikieditor.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/PageForms.js","messages":[{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":199,"column":10,"nodeType":"CallExpression","endLine":199,"endColumn":56},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":230,"column":19,"nodeType":"CallExpression","endLine":230,"endColumn":46},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":241,"column":9,"nodeType":"CallExpression","endLine":241,"endColumn":30},{"ruleId":"mediawiki/msg-doc","severity":1,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":406,"column":61,"nodeType":"CallExpression","endLine":406,"endColumn":79},{"ruleId":"mediawiki/msg-doc","severity":1,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":413,"column":58,"nodeType":"CallExpression","endLine":413,"endColumn":76},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":770,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":770,"endColumn":28},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":770,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":770,"endColumn":28},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":771,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":771,"endColumn":24},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":771,"column":5,"nodeType":"MemberExpression","messageId":"forbidden","endLine":771,"endColumn":24},{"ruleId":"block-scoped-var","severity":1,"message":"'negative' declared on line 837 column 7 is used outside of binding context.","line":834,"column":6,"nodeType":"Identifier","messageId":"outOfScope","endLine":834,"endColumn":14},{"ruleId":"block-scoped-var","severity":1,"message":"'negative' declared on line 837 column 7 is used outside of binding context.","line":843,"column":7,"nodeType":"Identifier","messageId":"outOfScope","endLine":843,"endColumn":15},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1014,"column":6,"nodeType":"VariableDeclarator","endLine":1014,"endColumn":66},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1015,"column":6,"nodeType":"VariableDeclarator","endLine":1015,"endColumn":62},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1021,"column":6,"nodeType":"VariableDeclarator","endLine":1021,"endColumn":74},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1022,"column":6,"nodeType":"VariableDeclarator","endLine":1022,"endColumn":70},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":1112,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1112,"endColumn":38},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":1112,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":1112,"endColumn":38},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1118,"column":9,"nodeType":"CallExpression","endLine":1118,"endColumn":42},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1225,"column":7,"nodeType":"VariableDeclarator","endLine":1225,"endColumn":66},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":1226,"column":8,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":1226,"endColumn":17},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":1239,"column":1,"nodeType":"Block","endLine":1244,"endColumn":4},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1258,"column":10,"nodeType":"CallExpression","endLine":1258,"endColumn":55},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1262,"column":8,"nodeType":"CallExpression","endLine":1262,"endColumn":53},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1536,"column":8,"nodeType":"CallExpression","endLine":1536,"endColumn":39},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1648,"column":7,"nodeType":"VariableDeclarator","endLine":1648,"endColumn":70},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1655,"column":8,"nodeType":"VariableDeclarator","endLine":1655,"endColumn":28},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1931,"column":30,"nodeType":"CallExpression","endLine":1931,"endColumn":64},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1944,"column":8,"nodeType":"CallExpression","endLine":1944,"endColumn":47},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1948,"column":8,"nodeType":"CallExpression","endLine":1948,"endColumn":46},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1953,"column":7,"nodeType":"CallExpression","endLine":1953,"endColumn":38}],"suppressedMessages":[{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1797,"column":8,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1797,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1800,"column":8,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1800,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1803,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1803,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":1803,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1803,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":30,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * PageForms.js\n *\n * Javascript utility functions for the Page Forms extension.\n *\n * @author Yaron Koren\n * @author Sanyam Goyal\n * @author Stephan Gambke\n * @author Jeffrey Stuckman\n * @author Harold Solbrig\n * @author Eugene Mednikov\n */\n/*global wgPageFormsShowOnSelect, wgPageFormsFieldProperties, wgPageFormsCargoFields, wgPageFormsDependentFields, validateAll, alert, mwTinyMCEInit, pf, Sortable*/\n\n( function( $, mw ) {\n\n/*\n * Functions to register/unregister methods for the initialization and\n * validation of inputs.\n */\n\n// Initialize data object to hold initialization and validation data\nfunction setupPF() {\n\n\t$(\"#pfForm\").data(\"PageForms\",{\n\t\tinitFunctions : [],\n\t\tvalidationFunctions : []\n\t});\n\n}\n\n// Register a validation method\n//\n// More than one method may be registered for one input by subsequent calls to\n// PageForms_registerInputValidation.\n//\n// Validation functions and their data are stored in a numbered array\n//\n// @param valfunction The validation functions. Must take a string (the input's id) and an object as parameters\n// @param param The parameter object given to the validation function\n$.fn.PageForms_registerInputValidation = function(valfunction, param) {\n\n\tif ( ! this.attr(\"id\") ) {\n\t\treturn this;\n\t}\n\n\tif ( ! $(\"#pfForm\").data(\"PageForms\") ) {\n\t\tsetupPF();\n\t}\n\n\t$(\"#pfForm\").data(\"PageForms\").validationFunctions.push({\n\t\tinput : this.attr(\"id\"),\n\t\tvalfunction : valfunction,\n\t\tparameters : param\n\t});\n\n\treturn this;\n};\n\n// Register an initialization method\n//\n// More than one method may be registered for one input by subsequent calls to\n// PageForms_registerInputInit. This method also executes the initFunction\n// if the element referenced by /this/ is not part of a multipleTemplateStarter.\n//\n// Initialization functions and their data are stored in a associative array\n//\n// @param initFunction The initialization function. Must take a string (the input's id) and an object as parameters\n// @param param The parameter object given to the initialization function\n// @param noexecute If set, the initialization method will not be executed here\n$.fn.PageForms_registerInputInit = function( initFunction, param, noexecute ) {\n\n\t// return if element has no id\n\tif ( ! this.attr(\"id\") ) {\n\t\treturn this;\n\t}\n\n\t// setup data structure if necessary\n\tif ( ! $(\"#pfForm\").data(\"PageForms\") ) {\n\t\tsetupPF();\n\t}\n\n\t// if no initialization function for this input was registered yet,\n\t// create entry\n\tif ( ! $(\"#pfForm\").data(\"PageForms\").initFunctions[this.attr(\"id\")] ) {\n\t\t$(\"#pfForm\").data(\"PageForms\").initFunctions[this.attr(\"id\")] = [];\n\t}\n\n\t// record initialization function\n\t$(\"#pfForm\").data(\"PageForms\").initFunctions[this.attr(\"id\")].push({\n\t\tinitFunction : initFunction,\n\t\tparameters : param\n\t});\n\n\t// execute initialization if input is not part of multipleTemplateStarter\n\t// and if not forbidden\n\tif ( this.closest(\".multipleTemplateStarter\").length === 0 && !noexecute) {\n\t\tvar $input = this;\n\t\t// ensure initFunction is only executed after doc structure is complete\n\t\t$(function() {\n\t\t\tif ( initFunction !== undefined ) {\n\t\t\t\tinitFunction( $input.attr(\"id\"), param );\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Unregister all validation methods for the element referenced by /this/\n$.fn.PageForms_unregisterInputValidation = function() {\n\n\tvar pfdata = $(\"#pfForm\").data(\"PageForms\");\n\n\tif ( this.attr(\"id\") && pfdata ) {\n\t\t// delete every validation method for this input\n\t\tfor ( var i = 0; i < pfdata.validationFunctions.length; i++ ) {\n\t\t\tif ( typeof pfdata.validationFunctions[i] !== 'undefined' &&\n\t\t\t\tpfdata.validationFunctions[i].input === this.attr(\"id\") ) {\n\t\t\t\tdelete pfdata.validationFunctions[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\n// Unregister all initialization methods for the element referenced by /this/\n$.fn.PageForms_unregisterInputInit = function() {\n\n\tif ( this.attr(\"id\") && $(\"#pfForm\").data(\"PageForms\") ) {\n\t\tdelete $(\"#pfForm\").data(\"PageForms\").initFunctions[this.attr(\"id\")];\n\t}\n\n\treturn this;\n};\n\n// Called from within PF_ComboBoxInput.php.\nmw.hook('pf.comboboxChange').add( function( $parentSpan ) {\n\tvar initPage = $parentSpan.find('select').length > 0;\n\tvar partOfMultiple = $parentSpan.attr('data-origid') !== undefined;\n\t$parentSpan.showIfSelected( partOfMultiple, initPage );\n});\n\n/*\n * Functions for handling 'show on select'\n */\n\n// Display a div that would otherwise be hidden by \"show on select\".\nfunction showDiv( div_id, $instanceWrapperDiv, initPage ) {\n\tvar speed = initPage ? 0 : 'fast';\n\tvar $elem;\n\tif ( $instanceWrapperDiv !== null ) {\n\t\t$elem = $('[data-origID=\"' + div_id + '\"]', $instanceWrapperDiv);\n\t} else {\n\t\t$elem = $('#' + div_id);\n\t}\n\n\t$elem\n\t.addClass('shownByPF')\n\n\t.find(\".hiddenByPF\")\n\t.removeClass('hiddenByPF')\n\t.addClass('shownByPF')\n\n\t.find(\".disabledByPF\")\n\t.prop('disabled', false)\n\t.removeClass('disabledByPF');\n\n\t$elem.each( function() {\n\t\tif ( $(this).css('display') === 'none' ) {\n\n\t\t\t$(this).slideDown(speed, function() {\n\t\t\t\t$(this).fadeTo(speed,1);\n\t\t\t});\n\n\t\t}\n\t});\n\n\t// Now re-show any form elements that are meant to be shown due\n\t// to the current value of form inputs in this div that are now\n\t// being uncovered.\n\tvar wgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' );\n\t$elem.find(\".pfShowIfSelected, .pfShowIfChecked\").each( function() {\n\t\tvar $uncoveredInput = $(this);\n\t\tvar uncoveredInputID = null;\n\t\tif ( $instanceWrapperDiv === null ) {\n\t\t\tuncoveredInputID = $uncoveredInput.attr(\"id\");\n\t\t} else {\n\t\t\tuncoveredInputID = $uncoveredInput.attr(\"data-origID\");\n\t\t}\n\t\tvar showOnSelectVals = wgPageFormsShowOnSelect[uncoveredInputID];\n\n\t\tif ( showOnSelectVals !== undefined ) {\n\t\t\tvar inputVal = $uncoveredInput.val();\n\t\t\tfor ( var i = 0; i < showOnSelectVals.length; i++ ) {\n\t\t\t\tvar options = showOnSelectVals[i][0];\n\t\t\t\tvar div_id2 = showOnSelectVals[i][1];\n\t\t\t\tif ( $uncoveredInput.hasClass( 'pfShowIfSelected' ) ) {\n\t\t\t\t\tshowDivIfSelected( options, div_id2, inputVal, $instanceWrapperDiv, initPage );\n\t\t\t\t} else {\n\t\t\t\t\t$uncoveredInput.showDivIfChecked( options, div_id2, $instanceWrapperDiv, initPage );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n// Hide a div due to \"show on select\". The CSS class is there so that PF can\n// ignore the div's contents when the form is submitted.\nfunction hideDiv( div_id, $instanceWrapperDiv, initPage ) {\n\tvar speed = initPage ? 0 : 'fast';\n\tvar $elem;\n\t// IDs can't contain spaces, and jQuery won't work with such IDs - if\n\t// this one has a space, display an alert.\n\tif ( div_id.indexOf( ' ' ) > -1 ) {\n\t\t// TODO - this should probably be a language value, instead of\n\t\t// hardcoded in English.\n\t\talert( \"Warning: this form has \\\"show on select\\\" pointing to an invalid element ID (\\\"\" + div_id + \"\\\") - IDs in HTML cannot contain spaces.\" );\n\t}\n\n\tif ( $instanceWrapperDiv !== null ) {\n\t\t$elem = $instanceWrapperDiv.find('[data-origID=' + div_id + ']');\n\t} else {\n\t\t$elem = $('#' + div_id);\n\t}\n\n\t// If we're just setting up the page, and this element has already\n\t// been marked to be shown by some other input, don't hide it.\n\tif ( initPage && $elem.hasClass('shownByPF') ) {\n\t\treturn;\n\t}\n\n\t$elem.find(\"span, div\").addClass('hiddenByPF');\n\n\t$elem.each( function() {\n\t\tif ( $(this).css('display') !== 'none' ) {\n\n\t\t\t// if 'display' is not 'hidden', but the element is hidden otherwise\n\t\t\t// (e.g. by having height = 0), just hide it, else animate the hiding\n\t\t\tif ( $(this).is(':hidden') ) {\n\t\t\t\t$(this).hide();\n\t\t\t} else {\n\t\t\t\t$(this).fadeTo(speed, 0, function() {\n\t\t\t\t\t$(this).slideUp(speed);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\t// Also, recursively hide further elements that are only shown because\n\t// inputs within this now-hidden div were checked/selected.\n\tvar wgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' );\n\t$elem.find(\".pfShowIfSelected, .pfShowIfChecked\").each( function() {\n\t\tvar showOnSelectVals;\n\t\tif ( $instanceWrapperDiv === null ) {\n\t\t\tshowOnSelectVals = wgPageFormsShowOnSelect[$(this).attr(\"id\")];\n\t\t} else {\n\t\t\tshowOnSelectVals = wgPageFormsShowOnSelect[$(this).attr(\"data-origID\")];\n\t\t}\n\n\t\tif ( showOnSelectVals !== undefined ) {\n\t\t\tfor ( var i = 0; i < showOnSelectVals.length; i++ ) {\n\t\t\t\t//var options = showOnSelectVals[i][0];\n\t\t\t\tvar div_id2 = showOnSelectVals[i][1];\n\t\t\t\thideDiv( div_id2, $instanceWrapperDiv, initPage );\n\t\t\t}\n\t\t}\n\t});\n}\n\n// Show this div if the current value is any of the relevant options -\n// otherwise, hide it.\nfunction showDivIfSelected(options, div_id, inputVal, $instanceWrapperDiv, initPage) {\n\tfor ( var i = 0; i < options.length; i++ ) {\n\t\t// If it's a listbox and the user has selected more than one\n\t\t// value, it'll be an array - handle either case.\n\t\tif (($.isArray(inputVal) && $.inArray(options[i], inputVal) >= 0) ||\n\t\t\t(!$.isArray(inputVal) && (inputVal === options[i]))) {\n\t\t\tshowDiv( div_id, $instanceWrapperDiv, initPage );\n\t\t\treturn;\n\t\t}\n\t}\n\thideDiv( div_id, $instanceWrapperDiv, initPage );\n}\n\n// Used for handling 'show on select' for the 'dropdown', 'listbox',\n// 'combobox' and 'tokens' input types.\n$.fn.showIfSelected = function(partOfMultiple, initPage) {\n\tvar inputVal,\n\t\twgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' ),\n\t\tshowOnSelectVals,\n\t\t$instanceWrapperDiv;\n\n\tif ( this.attr( 'data-input-type' ) == 'combobox' ) {\n\t\tif ( initPage ) {\n\t\t\tinputVal = $(this).find('select').val();\n\t\t} else {\n\t\t\tinputVal = $(this).find('input').val();\n\t\t}\n\t} else if ( this.attr( 'data-input-type' ) == 'tokens' ) {\n\t\tif ( initPage ) {\n\t\t\tinputVal = $(this).find('select').val();\n\t\t} else {\n\t\t\tinputVal = [];\n\t\t\t$(this).find('li.select2-selection__choice').each( function() {\n\t\t\t\tinputVal.push( $(this).attr('title') );\n\t\t\t});\n\t\t}\n\t} else {\n\t\tinputVal = this.val();\n\t}\n\n\tif ( partOfMultiple ) {\n\t\tshowOnSelectVals = wgPageFormsShowOnSelect[this.attr(\"data-origID\")];\n\t\t$instanceWrapperDiv = this.closest('.multipleTemplateInstance');\n\t} else {\n\t\tshowOnSelectVals = wgPageFormsShowOnSelect[this.attr(\"id\")];\n\t\t$instanceWrapperDiv = null;\n\t}\n\n\tif ( showOnSelectVals !== undefined ) {\n\t\tfor ( var i = 0; i < showOnSelectVals.length; i++ ) {\n\t\t\tvar options = showOnSelectVals[i][0];\n\t\t\tvar div_id = showOnSelectVals[i][1];\n\t\t\tshowDivIfSelected( options, div_id, inputVal, $instanceWrapperDiv, initPage );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n// Show this div if any of the relevant selections are checked -\n// otherwise, hide it.\n$.fn.showDivIfChecked = function(options, div_id, $instanceWrapperDiv, initPage ) {\n\tfor ( var i = 0; i < options.length; i++ ) {\n\t\tif ($(this).find('[value=\"' + options[i] + '\"]').is(\":checked\")) {\n\t\t\tshowDiv( div_id, $instanceWrapperDiv, initPage );\n\t\t\treturn this;\n\t\t}\n\t}\n\thideDiv( div_id, $instanceWrapperDiv, initPage );\n\n\treturn this;\n};\n\n// Used for handling 'show on select' for the 'checkboxes' and 'radiobutton'\n// inputs.\n$.fn.showIfChecked = function(partOfMultiple, initPage) {\n\tvar wgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' ),\n\t\tshowOnSelectVals,\n\t\t$instanceWrapperDiv,\n\t\ti;\n\n\tif ( partOfMultiple ) {\n\t\tshowOnSelectVals = wgPageFormsShowOnSelect[this.attr(\"data-origID\")];\n\t\t$instanceWrapperDiv = this.closest('.multipleTemplateInstance');\n\t} else {\n\t\tshowOnSelectVals = wgPageFormsShowOnSelect[this.attr(\"id\")];\n\t\t$instanceWrapperDiv = null;\n\t}\n\n\tif ( showOnSelectVals !== undefined ) {\n\t\tfor ( i = 0; i < showOnSelectVals.length; i++ ) {\n\t\t\tvar options = showOnSelectVals[i][0];\n\t\t\tvar div_id = showOnSelectVals[i][1];\n\t\t\tthis.showDivIfChecked( options, div_id, $instanceWrapperDiv, initPage );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n// Used for handling 'show on select' for the 'checkbox' input.\n$.fn.showIfCheckedCheckbox = function( partOfMultiple, initPage ) {\n\tvar wgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' ),\n\t\tdivIDs,\n\t\t$instanceWrapperDiv = null,\n\t\ti;\n\tif ( partOfMultiple ) {\n\t\tdivIDs = wgPageFormsShowOnSelect[this.attr( \"data-origID\" )];\n\t\t$instanceWrapperDiv = this.closest( \".multipleTemplateInstance\" );\n\t}\n\tif ( divIDs === undefined ) {\n\t\tdivIDs = wgPageFormsShowOnSelect[this.attr( \"id\" )];\n\t}\n\tfor ( i = 0; i < divIDs.length; i++ ) {\n\t\tvar divID = divIDs[i];\n\t\tif ( $( this ).find( '[value]' ).is( \":checked\" ) ) {\n\t\t\tshowDiv( divID, $instanceWrapperDiv, initPage );\n\t\t} else {\n\t\t\thideDiv( divID, $instanceWrapperDiv, initPage );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/*\n * Validation functions\n */\n\n// Set the error message for an input.\n$.fn.setErrorMessage = function(msg, val) {\n\tvar container = this.find('.pfErrorMessages');\n\tcontainer.html($('<div>').addClass( 'errorMessage' ).text( mw.msg( msg, val ) ));\n};\n\n// Append an error message to the end of an input.\n$.fn.addErrorMessage = function(msg, val) {\n\tthis.find('input').addClass('inputError');\n\tthis.find('select2-container').addClass('inputError');\n\tthis.append($('<div>').addClass( 'errorMessage' ).text( mw.msg( msg, val ) ));\n\t// If this is part of a minimized multiple-template instance, add a\n\t// red border around the instance rectangle to make it easier to find.\n\tthis.parents( '.multipleTemplateInstance.minimized' ).css( 'border', '1px solid red' );\n};\n\n$.fn.isAtMaxInstances = function() {\n\tvar numInstances = this.find(\"div.multipleTemplateInstance\").length;\n\tvar maximumInstances = this.attr(\"maximumInstances\");\n\tif ( numInstances >= maximumInstances ) {\n\t\tthis.parent().setErrorMessage( 'pf_too_many_instances_error', maximumInstances );\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n$.fn.validateNumInstances = function() {\n\tvar minimumInstances = this.attr(\"minimumInstances\");\n\tvar maximumInstances = this.attr(\"maximumInstances\");\n\tvar numInstances = this.find(\"div.multipleTemplateInstance\").length;\n\tif ( numInstances < minimumInstances ) {\n\t\tthis.parent().addErrorMessage( 'pf_too_few_instances_error', minimumInstances );\n\t\treturn false;\n\t} else if ( numInstances > maximumInstances ) {\n\t\tthis.parent().addErrorMessage( 'pf_too_many_instances_error', maximumInstances );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryField = function() {\n\tvar fieldVal = this.find(\".mandatoryField\").val();\n\tvar isEmpty;\n\n\tif (fieldVal === null) {\n\t\tisEmpty = true;\n\t} else if ($.isArray(fieldVal)) {\n\t\tisEmpty = (fieldVal.length === 0);\n\t} else {\n\t\tisEmpty = (fieldVal.replace(/\\s+/, '') === '');\n\t}\n\tif (isEmpty) {\n\t\tthis.addErrorMessage( 'pf_blank_error' );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateUniqueField = function() {\n\n\tvar UNDEFINED = \"undefined\";\n\tvar field = this.find(\".uniqueField\");\n\tvar fieldVal = field.val();\n\n\tif (typeof fieldVal === UNDEFINED || fieldVal.replace(/\\s+/, '') === '') {\n\t\treturn true;\n\t}\n\n\tvar fieldOrigVal = field.prop(\"defaultValue\");\n\tif (fieldVal === fieldOrigVal) {\n\t\treturn true;\n\t}\n\n\tvar categoryFieldName = field.prop(\"id\") + \"_unique_for_category\";\n\tvar $categoryField = $(\"[name=\" + categoryFieldName + \"]\");\n\tvar category = $categoryField.val();\n\n\tvar namespaceFieldName = field.prop(\"id\") + \"_unique_for_namespace\";\n\tvar $namespaceField = $(\"[name=\" + namespaceFieldName + \"]\");\n\tvar namespace = $namespaceField.val();\n\n\tvar url = mw.config.get( 'wgScriptPath' ) + \"/api.php?format=json&action=\";\n\n\tvar query,\n\t\tisNotUnique;\n\n\t// SMW\n\tvar propertyFieldName = field.prop(\"id\") + \"_unique_property\",\n\t\t$propertyField = $(\"[name=\" + propertyFieldName + \"]\"),\n\t\tproperty = $propertyField.val();\n\tif (typeof property !== UNDEFINED && property.replace(/\\s+/, '') !== '') {\n\n\t\tquery = \"[[\" + property + \"::\" + fieldVal + \"]]\";\n\n\t\tif (typeof category !== UNDEFINED &&\n\t\t\tcategory.replace(/\\s+/, '') !== '') {\n\t\t\tquery += \"[[Category:\" + category + \"]]\";\n\t\t}\n\n\t\tif (typeof namespace !== UNDEFINED) {\n\t\t\tif (namespace.replace(/\\s+/, '') !== '') {\n\t\t\t\tquery += \"[[:\" + namespace + \":+]]\";\n\t\t\t} else {\n\t\t\t\tquery += \"[[:+]]\";\n\t\t\t}\n\t\t}\n\n\t\tvar conceptFieldName = field.prop(\"id\") + \"_unique_for_concept\";\n\t\tvar $conceptField = $(\"[name=\" + conceptFieldName + \"]\");\n\t\tvar concept = $conceptField.val();\n\t\tif (typeof concept !== UNDEFINED &&\n\t\t\tconcept.replace(/\\s+/, '') !== '') {\n\t\t\tquery += \"[[Concept:\" + concept + \"]]\";\n\t\t}\n\n\t\tquery += \"|limit=1\";\n\t\tquery = encodeURIComponent(query);\n\n\t\turl += \"ask&query=\" + query;\n\t\tisNotUnique = true;\n\t\t$.ajax({\n\t\t\turl: url,\n\t\t\tdataType: 'json',\n\t\t\tasync: false,\n\t\t\tsuccess: function(data) {\n\t\t\t\tif (data.query.meta.count === 0) {\n\t\t\t\t\tisNotUnique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (isNotUnique) {\n\t\t\tthis.addErrorMessage( 'pf_not_unique_error' );\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Cargo\n\tvar cargoTableFieldName = field.prop(\"id\") + \"_unique_cargo_table\";\n\tvar $cargoTableField = $(\"[name=\" + cargoTableFieldName + \"]\");\n\tvar cargoTable = $cargoTableField.val();\n\tvar cargoFieldFieldName = field.prop(\"id\") + \"_unique_cargo_field\";\n\tvar $cargoFieldField = $(\"[name=\" + cargoFieldFieldName + \"]\");\n\tvar cargoField = $cargoFieldField.val();\n\tif (typeof cargoTable !== UNDEFINED && cargoTable.replace(/\\s+/, '') !== ''\n\t\t&& typeof cargoField !== UNDEFINED\n\t\t&& cargoField.replace(/\\s+/, '') !== '') {\n\n\t\tquery = \"&where=\" + cargoField + \"+=+'\" + fieldVal + \"'\";\n\n\t\tif (typeof category !== UNDEFINED &&\n\t\t\tcategory.replace(/\\s+/, '') !== '') {\n\t\t\tcategory = category.replace(/\\s/, '_');\n\t\t\tquery += \"+AND+cl_to=\" + category + \"+AND+cl_from=_pageID\";\n\t\t\tcargoTable += \",categorylinks\";\n\t\t}\n\n\t\tif (typeof namespace !== UNDEFINED) {\n\t\t\tquery += \"+AND+_pageNamespace=\";\n\t\t\tif (namespace.replace(/\\s+/, '') !== '') {\n\t\t\t\tvar ns = mw.config.get('wgNamespaceIds')[namespace.toLowerCase()];\n\t\t\t\tif (typeof ns !== UNDEFINED) {\n\t\t\t\t\tquery += ns;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tquery += \"0\";\n\t\t\t}\n\t\t}\n\n\t\tquery += \"&limit=1\";\n\n\t\turl += \"cargoquery&tables=\" + cargoTable + \"&fields=\" + cargoField +\n\t\t\tquery;\n\t\tisNotUnique = true;\n\t\t$.ajax({\n\t\t\turl: url,\n\t\t\tdataType: 'json',\n\t\t\tasync: false,\n\t\t\tsuccess: function(data) {\n\t\t\t\tif (data.cargoquery.length === 0) {\n\t\t\t\t\tisNotUnique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (isNotUnique) {\n\t\t\tthis.addErrorMessage( 'pf_not_unique_error' );\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn true;\n\n};\n\n$.fn.validateMandatoryComboBox = function() {\n\tvar $combobox = this.find(':input');\n\tif ($combobox.val() === null || $combobox.val() === '') {\n\t\tthis.addErrorMessage( 'pf_blank_error' );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryDateField = function() {\n\tif (this.find(\".dayInput\").val() === '' ||\n\t\tthis.find(\".monthInput\").val() === '' ||\n\t\tthis.find(\".yearInput\").val() === '') {\n\t\tthis.addErrorMessage( 'pf_blank_error' );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryRadioButton = function() {\n\tvar checkedValue = this.find(\"input:checked\").val();\n\tif (!checkedValue || checkedValue == '') {\n\t\tthis.addErrorMessage('pf_blank_error');\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryCheckboxes = function() {\n\t// Get the number of checked checkboxes within this span - must\n\t// be at least one.\n\tvar numChecked = this.find(\"input:checked\").length;\n\tif (numChecked === 0) {\n\t\tthis.addErrorMessage('pf_blank_error');\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryTree = function() {\n\tvar input_value = this.find( 'input' ).attr( 'value' );\n\tif ( input_value === undefined || input_value === '' ) {\n\t\tthis.addErrorMessage( 'pf_blank_error' );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n$.fn.validateMandatoryDatePicker = function() {\n\tvar input = this.find('input');\n\tif (input.val() === null || input.val() === '') {\n\t\tthis.addErrorMessage( 'pf_blank_error' );\n\t\treturn false;\n\t} else {\n\t\treturn true;\n\t}\n};\n\n/*\n * Type-based validation\n */\n\n$.fn.validateURLField = function() {\n\tvar fieldVal = this.find(\"input\").val();\n\tvar url_protocol = mw.config.get( 'wgUrlProtocols' );\n\t//removing backslash before colon from url_protocol string\n\turl_protocol = url_protocol.replace( /\\\\:/, ':' );\n\t//removing '//' from wgUrlProtocols as this causes to match any protocol in regexp\n\turl_protocol = url_protocol.replace( /\\|\\\\\\/\\\\\\//, '' );\n\tvar url_regexp = new RegExp( '(' + url_protocol + ')' + '(\\\\w+:{0,1}\\\\w*@)?(\\\\S+)(:[0-9]+)?(\\/|\\/([\\\\w#!:.?+=&%@!\\\\-\\/]))?' );\n\tif (fieldVal === \"\" || url_regexp.test(fieldVal)) {\n\t\treturn true;\n\t} else {\n\t\tthis.addErrorMessage( 'pf_bad_url_error' );\n\t\treturn false;\n\t}\n};\n\n$.fn.validateEmailField = function() {\n\tvar fieldVal = this.find(\"input\").val();\n\t// code borrowed from http://javascript.internet.com/forms/email-validation---basic.html\n\tvar email_regexp = /^\\s*\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,63})+\\s*$/;\n\tif (fieldVal === '' || email_regexp.test(fieldVal)) {\n\t\treturn true;\n\t} else {\n\t\tthis.addErrorMessage( 'pf_bad_email_error' );\n\t\treturn false;\n\t}\n};\n\n$.fn.validateNumberField = function() {\n\tvar fieldVal = this.find(\"input\").val();\n\t// Handle \"E notation\"/scientific notation (\"1.2e-3\") in addition\n\t// to regular numbers\n\tif (fieldVal === '' ||\n\tfieldVal.match(/^\\s*[\\-+]?((\\d{1,3}(,\\d{3})+[\\.,]?\\d*)|(\\d*[\\.,]?\\d+))([eE]?[\\-\\+]?\\d+)?\\s*$/)) {\n\t\treturn true;\n\t} else {\n\t\tthis.addErrorMessage( 'pf_bad_number_error' );\n\t\treturn false;\n\t}\n};\n\n$.fn.validateIntegerField = function() {\n\tvar fieldVal = this.find(\"input\").val();\n\tif ( fieldVal === '' || fieldVal == parseInt( fieldVal, 10 ) ) {\n\t\treturn true;\n\t} else {\n\t\tthis.addErrorMessage( 'pf_bad_integer_error' );\n\t\treturn false;\n\t}\n};\n\n$.fn.validateDateField = function() {\n\t// validate only if day and year fields are both filled in\n\tvar dayVal = this.find(\".dayInput\").val();\n\tvar yearVal = this.find(\".yearInput\").val();\n\tif (dayVal === '' || yearVal === '') {\n\t\treturn true;\n\t} else if (dayVal.match(/^\\d+$/) && dayVal <= 31) {\n\t\t// no year validation, since it can also include\n\t\t// 'BC' and possibly other non-number strings\n\t\treturn true;\n\t} else {\n\t\tthis.addErrorMessage( 'pf_bad_date_error' );\n\t\treturn false;\n\t}\n};\n\n// Standalone pipes are not allowed, because they mess up the template\n// parsing; unless they're part of a call to a template or a parser function.\n$.fn.checkForPipes = function() {\n\tvar fieldVal = this.find(\"input, textarea\").val();\n\t// We need to check for a few different things because this is\n\t// called for a variety of different input types.\n\tif ( fieldVal === undefined || fieldVal === '' ) {\n\t\tfieldVal = this.text();\n\t}\n\tif ( fieldVal === undefined || fieldVal === '' ) {\n\t\treturn true;\n\t}\n\tif ( fieldVal.indexOf( '|' ) < 0 ) {\n\t\treturn true;\n\t}\n\n\t// Also allow pipes within special tags, like <pre> or <syntaxhighlight>.\n\t// Code copied, more or less, from PFTemplateInForm::escapeNonTemplatePipes().\n\tvar startAndEndTags = [\n\t\t[ '<pre', 'pre>' ],\n\t\t[ '<syntaxhighlight', 'syntaxhighlight>' ],\n\t\t[ '<source', 'source>' ],\n\t\t[ '<ref', 'ref>' ]\n\t];\n\n\tfor ( var i in startAndEndTags ) {\n\t\tvar startTag = startAndEndTags[i][0];\n\t\tvar endTag = startAndEndTags[i][1];\n\t\tvar pattern = RegExp( \"(\" + startTag + \"[^]*?)\\\\|([^]*?\" + endTag + \")\", 'i' );\n\t\tvar matches;\n\t\twhile ( ( matches = fieldVal.match( pattern ) ) !== null ) {\n\t\t\t// Special handling, to avoid escaping pipes\n\t\t\t// within a string that looks like:\n\t\t\t// startTag ... endTag | startTag ... endTag\n\t\t\tif ( matches[1].includes( endTag ) &&\n\t\t\t\tmatches[2].includes( startTag ) ) {\n\t\t\t\tfieldVal = fieldVal.replace( pattern, \"$1\" + \"\\2\" + \"$2\");\n\t\t\t} else {\n\t\t\t\tfieldVal = fieldVal.replace( pattern, \"$1\" + \"\\1\" + \"$2\" );\n\t\t\t}\n\t\t}\n\t}\n\tfieldVal = fieldVal.replace( \"\\2\", '|' );\n\n\t// Now check for pipes outside of brackets.\n\tvar nextPipe,\n\t\tnextDoubleBracketsStart,\n\t\tnextDoubleBracketsEnd;\n\n\t// There's at least one pipe - here's where the real work begins.\n\t// We do a mini-parsing of the string to try to make sure that every\n\t// pipe is within either double square brackets (links) or double\n\t// curly brackets (parser functions, template calls).\n\t// For simplicity's sake, turn all curly brackets into square brackets,\n\t// so we only have to check for one thing.\n\t// This will incorrectly allow bad text like \"[[a|b}}\", but hopefully\n\t// that's not a major problem.\n\tfieldVal = fieldVal.replace( /{{/g, '[[' );\n\tfieldVal = fieldVal.replace( /}}/g, ']]' );\n\tvar curIndex = 0;\n\tvar numUnclosedBrackets = 0;\n\twhile ( true ) {\n\t\tnextDoubleBracketsStart = fieldVal.indexOf( '[[', curIndex );\n\n\t\tif ( numUnclosedBrackets === 0 ) {\n\t\t\tnextPipe = fieldVal.indexOf( '|', curIndex );\n\t\t\tif ( nextPipe < 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( nextDoubleBracketsStart < 0 || nextPipe < nextDoubleBracketsStart ) {\n\t\t\t\t// There's a pipe where it shouldn't be.\n\t\t\t\tthis.addErrorMessage( 'pf_pipe_error' );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif ( nextDoubleBracketsEnd < 0 ) {\n\t\t\t// Something is malformed - might as well throw\n\t\t\t// an error.\n\t\t\tthis.addErrorMessage( 'pf_pipe_error' );\n\t\t\treturn false;\n\t\t}\n\n\t\tnextDoubleBracketsEnd = fieldVal.indexOf( ']]', curIndex );\n\n\t\tif ( nextDoubleBracketsStart >= 0 && nextDoubleBracketsStart < nextDoubleBracketsEnd ) {\n\t\t\tnumUnclosedBrackets++;\n\t\t\tcurIndex = nextDoubleBracketsStart + 2;\n\t\t} else {\n\t\t\tnumUnclosedBrackets--;\n\t\t\tcurIndex = nextDoubleBracketsEnd + 2;\n\t\t}\n\t}\n\n\t// We'll never get here, but let's have this line anyway.\n\treturn true;\n};\n\nfunction leftPad( number, targetLength ) {\n\tvar negative = false;\n\tif ( number < 0 ) {\n\t\tnumber = number * -1;\n\t\tvar negative = true;\n\t}\n\tvar output = number + '';\n\twhile ( output.length < targetLength ) {\n\t\toutput = '0' + output;\n\t}\n\tif ( negative ) {\n\t\toutput = '-' + output\n\t}\n\treturn output;\n}\n\nfunction validateStartEndDateField( startInput, endInput ) {\n\tif ( !startInput.length || !endInput.length ) {\n\t\treturn true;\n\t}\n\tvar startYearVal = leftPad( startInput.find(\".yearInput\").val(),4 );\n\tvar startMonthVal = leftPad( startInput.find(\".monthInput\").val(),2 );\n\tvar startDayVal = leftPad( startInput.find(\".dayInput\").val(),2 );\n\n\tvar endYearVal = leftPad( endInput.find(\".yearInput\").val(),4 );\n\tvar endMonthVal = leftPad( endInput.find(\".monthInput\").val(),2 );\n\tvar endDayVal = leftPad( endInput.find(\".dayInput\").val(),2 );\n\n\tvar startDate = startYearVal + \"/\" + startMonthVal + \"/\" + startDayVal;\n\n\tvar endDate = endYearVal + \"/\" + endMonthVal + \"/\" + endDayVal;\n\n\tif ( startDate <= endDate || endDate == \"0000/00/00\") {\n\t\treturn true;\n\t} else {\n\t\tif ( endInput ) {\n\t\t\tendInput.addErrorMessage( 'pf_start_end_date_error' )\n\t\t} else if ( startInput ) {\n\t\t\tstartInput.addErrorMessage( 'pf_start_end_date_error' )\n\t\t}\n\t\treturn false;\n\t}\n}\n\nfunction validateStartEndDateTimeField( startInput, endInput ) {\n\tif ( !startInput.length || !endInput.length ) {\n\t\treturn true;\n\t}\n\tvar startYearVal = leftPad( startInput.find(\".yearInput\").val(),4 );\n\tvar startMonthVal = leftPad( startInput.find(\".monthInput\").val(),2 );\n\tvar startDayVal = leftPad( startInput.find(\".dayInput\").val(),2 );\n\tvar startHoursVal = leftPad( startInput.find(\".hoursInput\").val(),2 );\n\tvar startMinutesVal = leftPad( startInput.find(\".minutesInput\").val(),2 );\n\tvar startSecondsVal = leftPad( startInput.find(\".secondsInput\").val(),2 );\n\tvar startAmPmVal = startInput.find(\".ampmInput\").val();\n\n\tvar endYearVal = leftPad( endInput.find(\".yearInput\").val(),4 );\n\tvar endMonthVal = leftPad( endInput.find(\".monthInput\").val(),2 );\n\tvar endDayVal = leftPad( endInput.find(\".dayInput\").val(),2 );\n\tvar endHoursVal = leftPad( endInput.find(\".hoursInput\").val(),2 );\n\tvar endMinutesVal = leftPad( endInput.find(\".minutesInput\").val(),2 );\n\tvar endSecondsVal = leftPad( endInput.find(\".secondsInput\").val(),2 );\n\tvar endAmPmVal = endInput.find(\".ampmInput\").val();\n\n\tvar startDateTime = startYearVal + \"/\" + startMonthVal + \"/\" + startDayVal + \" \" +\n\tstartHoursVal + \":\" + startMinutesVal + \":\" + startSecondsVal + \" \" + startAmPmVal;\n\n\tvar endDateTime = endYearVal + \"/\" + endMonthVal + \"/\" + endDayVal + \" \" +\n\t\tendHoursVal + \":\" + endMinutesVal + \":\" + endSecondsVal + \" \" + endAmPmVal;\n\n\tif ( startDateTime <= endDateTime || endDateTime == \"0000/00/00 00:00:00 \" ) {\n\t\treturn true;\n\t} else {\n\t\tif ( endInput ) {\n\t\t\tendInput.addErrorMessage( 'pf_start_end_datetime_error' )\n\t\t} else if ( startInput ) {\n\t\t\tstartInput.addErrorMessage( 'pf_start_end_datetime_error' )\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\nwindow.validateAll = function() {\n\n\t// Remove all old error messages.\n\t$(\".errorMessage\").remove();\n\n\t// Hook that fires on form submission, before the validation.\n\tmw.hook('pf.formValidationBefore').fire();\n\n\tvar args = {numErrors: 0};\n\tmw.hook('pf.formValidation').fire( args );\n\tvar num_errors = args.numErrors;\n\n\t// Make sure all inputs are ignored in the \"starter\" instance\n\t// of any multiple-instance template.\n\t$(\".multipleTemplateStarter\").find(\"span, div\").addClass(\"hiddenByPF\");\n\n\t$(\".multipleTemplateList\").each( function() {\n\t\tif (! $(this).validateNumInstances() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\n\t$(\"span.inputSpan.mandatoryFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.comboboxSpan.mandatoryFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryComboBox() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.dateInput.mandatoryFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryDateField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.radioButtonSpan.mandatoryFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryRadioButton() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.checkboxesSpan.mandatoryFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryCheckboxes() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"div.pfTreeInputWrapper.mandatory\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateMandatoryTree() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"div.pfPickerWrapper.mandatory\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).find('.pfPicker').validateMandatoryDatePicker() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.inputSpan.uniqueFieldSpan\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateUniqueField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.inputSpan, div.pfComboBox\").not(\".hiddenByPF, .freeText, .pageSection\").each( function() {\n\t\tif (! $(this).checkForPipes() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.URLInput\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateURLField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.emailInput\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateEmailField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.numberInput\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateNumberField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.integerInput\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateIntegerField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"span.dateInput\").not(\".hiddenByPF\").each( function() {\n\t\tif (! $(this).validateDateField() ) {\n\t\t\tnum_errors += 1;\n\t\t}\n\t});\n\t$(\"input.modifiedInput\").not(\".hiddenByPF\").each( function() {\n\t\t// No separate function needed.\n\t\t$(this).parent().addErrorMessage( 'pf_modified_input_error' );\n\t\tnum_errors += 1;\n\t});\n\n\tvar startDateInput = $(\"span.startDateInput\").not(\".hiddenByPF\")\n\tvar endDateInput = $(\"span.endDateInput\").not(\".hiddenByPF\")\n\n\tif ( !validateStartEndDateField( startDateInput, endDateInput ) ) {\n\t\tnum_errors += 1;\n\t}\n\n\tvar startDateTimeInput = $(\"span.startDateTimeInput\").not(\".hiddenByPF\")\n\tvar endDateTimeInput = $(\"span.endDateTimeInput\").not(\".hiddenByPF\")\n\n\tif ( !validateStartEndDateTimeField( startDateTimeInput, endDateTimeInput ) ) {\n\t\tnum_errors += 1;\n\t}\n\t// call registered validation functions\n\tvar pfdata = $(\"#pfForm\").data('PageForms');\n\n\tif ( pfdata && pfdata.validationFunctions.length > 0 ) { // found data object?\n\n\t\t// for every registered input\n\t\tfor ( var i = 0; i < pfdata.validationFunctions.length; i++ ) {\n\n\t\t\t// if input is not part of multipleTemplateStarter\n\t\t\tif ( typeof pfdata.validationFunctions[i] !== 'undefined' &&\n\t\t\t\t$(\"#\" + pfdata.validationFunctions[i].input).closest(\".multipleTemplateStarter\").length === 0 &&\n\t\t\t\t$(\"#\" + pfdata.validationFunctions[i].input).closest(\".hiddenByPF\").length === 0 ) {\n\n\t\t\t\tif (! pfdata.validationFunctions[i].valfunction(\n\t\t\t\t\t\tpfdata.validationFunctions[i].input,\n\t\t\t\t\t\tpfdata.validationFunctions[i].parameters)\n\t\t\t\t\t) {\n\t\t\t\t\tnum_errors += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (num_errors > 0) {\n\t\t// add error header, if it's not there already\n\t\tif ($(\"#form_error_header\").length === 0) {\n\t\t\t$(\"#contentSub\").append('<div id=\"form_error_header\" class=\"errorbox\" style=\"font-size: medium\"><img src=\"' + mw.config.get( 'wgPageFormsScriptPath' ) + '/skins/MW-Icon-AlertMark.png\" />&nbsp;' + mw.message( 'pf_formerrors_header' ).escaped() + '</div><br clear=\"both\" />');\n\t\t}\n\t\t// The \"Save page\", etc. buttons were disabled to prevent\n\t\t// double-clicking; since there has been an error, re-enable\n\t\t// them so that the form can be submitted again after the\n\t\t// user tries to fix these errors.\n\t\t$( '.editButtons > .oo-ui-buttonElement' ).removeClass( 'oo-ui-widget-disabled' ).addClass( 'oo-ui-widget-enabled' );\n\t\t// Also undo the indicator that the form was submitted.\n\t\t$( '#pfForm' ).data('submitted', false);\n\t\tscroll(0, 0);\n\t} else {\n\t\t// Disable inputs hidden due to either \"show on select\" or\n\t\t// because they're part of the \"starter\" div for\n\t\t// multiple-instance templates, so that they aren't\n\t\t// submitted by the form.\n\t\t$('.hiddenByPF').find(\"input, select, textarea\").not(':disabled')\n\t\t.prop('disabled', true)\n\t\t.addClass('disabledByPF');\n\t\t//remove error box if it exists because there are no errors in the form now\n\t\t$(\"#contentSub\").find(\".errorbox\").remove();\n\t}\n\n\t// Hook that fires on form submission, after the validation.\n\tmw.hook('pf.formValidationAfter').fire();\n\n\treturn (num_errors === 0);\n};\n\n/**\n * Minimize all instances if the total height of all the instances\n * is over 800 pixels - to allow for easier navigation and sorting.\n */\n$.fn.possiblyMinimizeAllOpenInstances = function() {\n\tif ( ! this.hasClass( 'minimizeAll' ) ) {\n\t\treturn;\n\t}\n\n\tvar displayedFieldsWhenMinimized = this.attr('data-displayed-fields-when-minimized');\n\tvar allDisplayedFields = null;\n\tif ( displayedFieldsWhenMinimized ) {\n\t\tallDisplayedFields = displayedFieldsWhenMinimized.split(',').map(function(item) {\n\t\t\treturn item.trim().toLowerCase();\n\t\t});\n\t}\n\n\tthis.find('.multipleTemplateInstance').not('.minimized').each( function() {\n\t\tvar $instance = $(this);\n\t\t$instance.addClass('minimized');\n\t\tvar valuesStr = '';\n\t\t$instance.find( \"input[type != 'hidden'][type != 'button'], select, textarea, div.ve-ce-surface\" ).each( function() {\n\t\t\t// If the set of fields to be displayed was specified in\n\t\t\t// the form definition, check against that list.\n\t\t\tif ( allDisplayedFields !== null ) {\n\t\t\t\tvar fieldFullName = $(this).attr('name');\n\t\t\t\tif ( !fieldFullName ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar matches = fieldFullName.match(/.*\\[.*\\]\\[(.*)\\]/);\n\t\t\t\tvar fieldRealName = matches[1].toLowerCase();\n\t\t\t\tif ( !allDisplayedFields.includes( fieldRealName ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar curVal = $(this).val();\n\t\t\tif ( $(this).hasClass('ve-ce-surface') ) {\n\t\t\t\t// Special handling for VisualEditor/VEForAll textareas.\n\t\t\t\tcurVal = $(this).text();\n\t\t\t}\n\t\t\tif ( typeof curVal !== 'string' || curVal === '' ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar inputType = $(this).attr('type');\n\t\t\tif ( inputType === 'checkbox' || inputType === 'radio' ) {\n\t\t\t\tif ( ! $(this).is(':checked') ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( curVal.length > 70 ) {\n\t\t\t\tcurVal = curVal.slice(0, 70) + \"...\";\n\t\t\t}\n\t\t\tif ( valuesStr !== '' ) {\n\t\t\t\tvaluesStr += ' &middot; ';\n\t\t\t}\n\t\t\tvaluesStr += curVal;\n\t\t});\n\t\tif ( valuesStr === '' ) {\n\t\t\tvaluesStr = '<em>' + mw.msg('pf-formedit-nodata') + '</em>';\n\t\t}\n\t\t$instance.find('.instanceMain').fadeOut( \"medium\", function() {\n\t\t\t$instance.find('.instanceRearranger').after('<td class=\"fieldValuesDisplay\">' + valuesStr + '</td>');\n\t\t});\n\t});\n};\n\n$.fn.displayWizardScreen = function( screenNum, $wizardNav ) {\n\tvar $wizardScreens = $(this);\n\tvar $curScreen;\n\n\t$wizardScreens.each( function(i) {\n\t\t// screenNum starts at 1, not 0.\n\t\tif ( i + 1 == screenNum ) {\n\t\t\t$curScreen = $(this);\n\t\t\t$(this).show();\n\t\t} else {\n\t\t\t$(this).hide();\n\t\t}\n\t});\n\n\t// The rest of this function is taken up with displaying the\n\t// navigation to the next and previous wizard screens.\n\tvar numScreens = $wizardScreens.length;\n\n\t$wizardNav.empty();\n\n\tvar $navButtons = $('<div class=\"pf-wizard-buttons\"></div>');\n\n\tif ( screenNum > 1 ) {\n\t\tvar backText = $curScreen.attr('data-back-text');\n\t\tif ( backText == undefined ) {\n\t\t\tbackText = mw.msg('pf-wizard-back');\n\t\t}\n\t\tvar prevButton = new OO.ui.ButtonWidget( {\n\t\t\tlabel: backText,\n\t\t\ticon: 'previous',\n\t\t\tclasses: [ 'pf-wizard-back-button' ]\n\t\t} );\n\t\tprevButton.$element.click( function() {\n\t\t\t$wizardScreens.displayWizardScreen( screenNum - 1, $wizardNav );\n\t\t});\n\t\t$navButtons.append( prevButton.$element );\n\t}\n\n\tif ( screenNum < numScreens ) {\n\t\tvar continueText = $curScreen.attr('data-continue-text');\n\t\tif ( continueText == undefined ) {\n\t\t\tcontinueText = mw.msg('pf-wizard-continue');\n\t\t}\n\t\tvar continueButton = new OO.ui.ButtonWidget( {\n\t\t\tlabel: continueText,\n\t\t\tflags: [\n\t\t\t\t'primary',\n\t\t\t\t'progressive'\n\t\t\t],\n\t\t\ticon: 'next',\n\t\t\tclasses: [ 'pf-wizard-continue-button' ]\n\t\t} );\n\t\tcontinueButton.$element.click( function() {\n\t\t\t$wizardScreens.displayWizardScreen( screenNum + 1, $wizardNav );\n\t\t});\n\t\t$navButtons.append( continueButton.$element );\n\t}\n\t$wizardNav.append( $navButtons );\n\n\t// We need this in order to clear the float from the \"previous\" button.\n\t$wizardNav.append('<br style=\"clear: both;\" />');\n\n\t// Use progress bar if the number of screens is greater than 10 and circles in the other case\n\tif ( numScreens > 10 ) {\n\t\tvar progressBar = new OO.ui.ProgressBarWidget( {\n\t\t\tprogress: 100 * screenNum / numScreens\n\t\t} );\n\t\tvar progressBarLayout = new OO.ui.FieldLayout(\n\t\t\tprogressBar,\n\t\t\t{\n\t\t\t\tlabel: 'Step ' + screenNum + ' of ' + numScreens,\n\t\t\t\talign: 'inline'\n\t\t\t}\n\t\t);\n\t\t$wizardNav.append( progressBarLayout.$element );\n\t} else {\n\t\t$( '.pf-wizard-buttons' ).addClass( 'pf-wizard-buttons-circle' );\n\t\tvar progressCiclesUL = $( '<ul class=\"pfWizardCircles\"></ul>' );\n\t\tfor( let i = 1; i <= numScreens; i++ ) {\n\t\t\tvar circle = '<li>' + i + '</li>';\n\t\t\tif ( i == screenNum ) {\n\t\t\t\tcircle = '<li class=\"active\">' + i + '</li>';\n\t\t\t}\n\t\t\tprogressCiclesUL.append( $( circle ) );\n\t\t}\n\t\t$wizardNav.append( progressCiclesUL );\n\t}\n};\n\nvar num_elements = 0;\n\n/**\n * Functions for multiple-instance templates.\n *\n * @param {Mixed} addAboveCurInstance\n * @return {Mixed}\n */\n$.fn.addInstance = function( addAboveCurInstance ) {\n\tvar wgPageFormsShowOnSelect = mw.config.get( 'wgPageFormsShowOnSelect' );\n\tvar wgPageFormsHeightForMinimizingInstances = mw.config.get( 'wgPageFormsHeightForMinimizingInstances' );\n\tvar $wrapper = this.closest(\".multipleTemplateWrapper\");\n\tvar $multipleTemplateList = $wrapper.find('.multipleTemplateList');\n\n\t// If the nubmer of instances is already at the maximum allowed,\n\t// exit here.\n\tif ( $multipleTemplateList.isAtMaxInstances() ) {\n\t\treturn false;\n\t}\n\n\tif ( wgPageFormsHeightForMinimizingInstances >= 0 ) {\n\t\tif ( ! $multipleTemplateList.hasClass('minimizeAll') &&\n\t\t\t$multipleTemplateList.height() >= wgPageFormsHeightForMinimizingInstances ) {\n\t\t\t$multipleTemplateList.addClass('minimizeAll');\n\t\t}\n\t\tif ( $multipleTemplateList.hasClass('minimizeAll') ) {\n\t\t\t$multipleTemplateList\n\t\t\t\t.addClass('currentFocus')\n\t\t\t\t.possiblyMinimizeAllOpenInstances();\n\t\t}\n\t}\n\n\t// Global variable.\n\tnum_elements++;\n\n\t// Create the new instance\n\tvar $new_div = $wrapper\n\t\t.find(\".multipleTemplateStarter\")\n\t\t.clone()\n\t\t.removeClass('multipleTemplateStarter')\n\t\t.addClass('multipleTemplateInstance')\n\t\t.addClass('multipleTemplate') // backwards compatibility\n\t\t.removeAttr(\"id\")\n\t\t.fadeTo(0,0)\n\t\t.slideDown('fast', function() {\n\t\t\t$(this).fadeTo('fast', 1);\n\t\t});\n\n\t// Add on a new attribute, \"data-origID\", representing the ID of all\n\t// HTML elements that had an ID; and delete the actual ID attribute\n\t// of any divs and spans (presumably, these exist only for the\n\t// sake of \"show on select\"). We do the deletions because no two\n\t// elements on the page are allowed to have the same ID.\n\t$new_div.find('[id!=\"\"]').attr('data-origID', function() {\n\t\treturn this.id;\n\t});\n\t$new_div.find('div[id!=\"\"], span[id!=\"\"]').removeAttr('id');\n\n\t$new_div.find('.hiddenByPF')\n\t\t.removeClass('hiddenByPF')\n\t\t.find('.disabledByPF')\n\t\t.prop('disabled', false)\n\t\t.removeClass('disabledByPF');\n\n\t// Make internal ID unique for the relevant form elements, and replace\n\t// the [num] index in the element names with an actual unique index\n\t$new_div.find(\"input, select, textarea\").each(\n\t\tfunction() {\n\t\t\t// Add in a 'b' at the end of the name to reduce the\n\t\t\t// chance of name collision with another field\n\t\t\tif (this.name) {\n\t\t\t\tvar old_name = this.name.replace(/\\[num\\]/g, '');\n\t\t\t\t$(this).attr('origName', old_name);\n\t\t\t\tthis.name = this.name.replace(/\\[num\\]/g, '[' + num_elements + 'b]');\n\t\t\t}\n\n\t\t\t// Do the same thing with \"feeds to map\", which also\n\t\t\t// needs to be modified for each instance.\n\t\t\tvar feedsToMap = $(this).attr('data-feeds-to-map');\n\t\t\tif ( feedsToMap !== undefined && feedsToMap !== false ) {\n\t\t\t\t$(this).attr('data-feeds-to-map', feedsToMap.replace(/\\[num\\]/g, '[' + num_elements + 'b]') );\n\t\t\t}\n\n\t\t\tif (this.id) {\n\n\t\t\t\tvar old_id = this.id;\n\n\t\t\t\tthis.id = this.id.replace(/input_/g, 'input_' + num_elements + '_');\n\n\t\t\t\t// TODO: Data in wgPageFormsShowOnSelect should probably be stored in\n\t\t\t\t// $(\"#pfForm\").data('PageForms')\n\t\t\t\tif ( wgPageFormsShowOnSelect[ old_id ] ) {\n\t\t\t\t\twgPageFormsShowOnSelect[ this.id ] = wgPageFormsShowOnSelect[ old_id ];\n\t\t\t\t}\n\n\t\t\t\t// register initialization and validation methods for new inputs\n\n\t\t\t\tvar pfdata = $(\"#pfForm\").data('PageForms');\n\t\t\t\tif ( pfdata ) { // found data object?\n\t\t\t\t\tvar i;\n\t\t\t\t\tif ( pfdata.initFunctions[old_id] ) {\n\n\t\t\t\t\t\t// For every initialization method for\n\t\t\t\t\t\t// input with id old_id, register the\n\t\t\t\t\t\t// method for the new input.\n\t\t\t\t\t\tfor ( i = 0; i < pfdata.initFunctions[old_id].length; i++ ) {\n\n\t\t\t\t\t\t\t$(this).PageForms_registerInputInit(\n\t\t\t\t\t\t\t\tpfdata.initFunctions[old_id][i].initFunction,\n\t\t\t\t\t\t\t\tpfdata.initFunctions[old_id][i].parameters,\n\t\t\t\t\t\t\t\ttrue //do not yet execute\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\t// For every validation method for the\n\t\t\t\t\t// input with ID old_id, register it\n\t\t\t\t\t// for the new input.\n\t\t\t\t\tfor ( i = 0; i < pfdata.validationFunctions.length; i++ ) {\n\n\t\t\t\t\t\tif ( typeof pfdata.validationFunctions[i] !== 'undefined' &&\n\t\t\t\t\t\t\tpfdata.validationFunctions[i].input === old_id ) {\n\n\t\t\t\t\t\t\t$(this).PageForms_registerInputValidation(\n\t\t\t\t\t\t\t\tpfdata.validationFunctions[i].valfunction,\n\t\t\t\t\t\t\t\tpfdata.validationFunctions[i].parameters\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}\n\t\t}\n\t);\n\n\t// datepicker and datetimepicker inputs require special handling.\n\t$new_div.find(\"div.pfPicker\").attr('data-ooui', function() {\n\t\treturn $(this).attr('data-ooui').replace(/\\[num\\]/g, '[' + num_elements + 'b]');\n\t});\n\n\t$new_div.find('a').attr('href', function() {\n\t\t// Make sure not to add a valid \"href\" attribute to <a> tags that don't have it.\n\t\tif ( this.href == undefined || this.href == false ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.href.replace(/input_/g, 'input_' + num_elements + '_');\n\t});\n\n\t$new_div.find('span').attr('id', function() {\n\t\treturn this.id.replace(/span_/g, 'span_' + num_elements + '_');\n\t});\n\n\t// Add the new instance.\n\tif ( addAboveCurInstance ) {\n\t\t$new_div.insertBefore(this.closest(\".multipleTemplateInstance\"))\n\t\t\t.hide().fadeIn();\n\t} else {\n\t\tthis.closest(\".multipleTemplateWrapper\")\n\t\t\t.find(\".multipleTemplateList\")\n\t\t\t.append($new_div.hide().fadeIn());\n\t}\n\n\t$new_div.initializeJSElements(true);\n\n\t// Initialize new inputs.\n\t$new_div.find(\"input, select, textarea\").each( function() {\n\t\tif ( ! this.id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar pfdata = $(\"#pfForm\").data('PageForms');\n\t\tif ( ! pfdata ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// have to store data array: the id attribute\n\t\t// of 'this' might be changed in the init function\n\t\tvar thatData = pfdata.initFunctions[this.id] ;\n\t\tif ( !thatData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Call every initialization method for this input.\n\t\tfor ( var i = 0; i < thatData.length; i++ ) {\n\t\t\tvar initFunction = thatData[i].initFunction;\n\t\t\tif ( initFunction === undefined ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// If the code attempted to store this function before\n\t\t\t// it was defined, only its name was stored. In that\n\t\t\t// case, get the function now.\n\t\t\t// @TODO - move getFunctionFromName() so that it can be\n\t\t\t// called from here, which would be better than\n\t\t\t// window[].\n\t\t\tif ( typeof initFunction === 'string' ) {\n\t\t\t\tinitFunction = window[initFunction];\n\t\t\t}\n\t\t\tinitFunction(\n\t\t\t\tthis.id,\n\t\t\t\tthatData[i].parameters\n\t\t\t);\n\t\t}\n\t});\n\n\t// Hook that fires each time a new template instance is added.\n\t// The first parameter is a jQuery selection of the newly created instance div.\n\tmw.hook('pf.addTemplateInstance').fire($new_div);\n};\n\n// The first argument is needed, even though it's an attribute of the element\n// on which this function is called, because it's the 'name' attribute for\n// regular inputs, and the 'origName' attribute for inputs in multiple-instance\n// templates.\n$.fn.setDependentAutocompletion = function( dependentField, baseField, baseValue ) {\n\t// Get data from either Cargo or Semantic MediaWiki.\n\tvar myServer = mw.config.get( 'wgScriptPath' ) + \"/api.php\",\n\t\twgPageFormsCargoFields = mw.config.get( 'wgPageFormsCargoFields' ),\n\t\twgPageFormsFieldProperties = mw.config.get( 'wgPageFormsFieldProperties' );\n\tmyServer += \"?action=pfautocomplete&format=json\";\n\tif ( wgPageFormsCargoFields.hasOwnProperty( dependentField ) ) {\n\t\tvar cargoTableAndFieldStr = wgPageFormsCargoFields[dependentField];\n\t\tvar cargoTableAndField = cargoTableAndFieldStr.split('|');\n\t\tvar cargoTable = cargoTableAndField[0];\n\t\tvar cargoField = cargoTableAndField[1];\n\t\tvar baseCargoTableAndFieldStr = wgPageFormsCargoFields[baseField];\n\t\tvar baseCargoTableAndField = baseCargoTableAndFieldStr.split('|');\n\t\tvar baseCargoTable = baseCargoTableAndField[0];\n\t\tvar baseCargoField = baseCargoTableAndField[1];\n\t\tmyServer += \"&cargo_table=\" + cargoTable + \"&cargo_field=\" + cargoField + \"&is_array=true\" + \"&base_cargo_table=\" + baseCargoTable + \"&base_cargo_field=\" + baseCargoField + \"&basevalue=\" + baseValue;\n\t} else {\n\t\tvar propName = wgPageFormsFieldProperties[dependentField];\n\t\tvar baseProp = wgPageFormsFieldProperties[baseField];\n\t\tmyServer += \"&property=\" + propName + \"&baseprop=\" + baseProp + \"&basevalue=\" + baseValue;\n\t}\n\tvar dependentValues = [];\n\tvar $thisInput = $(this);\n\t// We use $.ajax() here instead of $.getJSON() so that the\n\t// 'async' parameter can be set. That, in turn, is set because\n\t// if the 2nd, \"dependent\" field is a combo box, it can have weird\n\t// behavior: clicking on the down arrow for the combo box leads to a\n\t// \"blur\" event for the base field, which causes the possible\n\t// values to get recalculated, but not in time for the dropdown to\n\t// change values - it still shows the old values. By setting\n\t// \"async: false\", we guarantee that old values won't be shown - if\n\t// the values haven't been recalculated yet, the dropdown won't\n\t// appear at all.\n\t// @TODO - handle this the right way, by having special behavior for\n\t// the dropdown - it should get delayed until the values are\n\t// calculated, then appear.\n\t$.ajax({\n\t\turl: myServer,\n\t\tdataType: 'json',\n\t\tasync: false,\n\t\tsuccess: function(data) {\n\t\t\tvar realData = data.pfautocomplete;\n\t\t\t$.each(realData, function(key, val) {\n\t\t\t\tdependentValues.push(val.title);\n\t\t\t});\n\t\t\t$thisInput.data('autocompletevalues', dependentValues);\n\t\t}\n\t});\n};\n\n/**\n * Called on a 'base' field (e.g., for a country) - sets the autocompletion\n * for its 'dependent' field (e.g., for a city).\n *\n * @param {Mixed} partOfMultiple\n * @return {Mixed}\n */\n$.fn.setAutocompleteForDependentField = function( partOfMultiple ) {\n\tvar curValue = $(this).val();\n\tif ( curValue === null ) {\n\t\treturn this;\n\t}\n\n\tvar nameAttr = partOfMultiple ? 'origName' : 'name';\n\tvar name = $(this).attr(nameAttr);\n\tvar wgPageFormsDependentFields = mw.config.get( 'wgPageFormsDependentFields' );\n\tvar dependent_on_me = [];\n\tfor ( var i = 0; i < wgPageFormsDependentFields.length; i++ ) {\n\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\tif ( dependentFieldPair[0] === name ) {\n\t\t\tdependent_on_me.push(dependentFieldPair[1]);\n\t\t}\n\t}\n\tdependent_on_me = $.uniqueSort(dependent_on_me);\n\n\tvar self = this;\n\t$.each( dependent_on_me, function() {\n\t\tvar $element, cmbox, tokens,\n\t\t\tdependentField = this;\n\n\t\tif ( partOfMultiple ) {\n\t\t\t$element = $( self ).closest( '.multipleTemplateInstance' )\n\t\t\t\t.find('[origName=\"' + dependentField + '\"]');\n\t\t} else {\n\t\t\t$element = $('[name=\"' + dependentField + '\"]');\n\t\t}\n\n\t\tif ( $element.hasClass( 'pfTokens' ) ) {\n\t\t\ttokens = new pf.select2.tokens();\n\t\t\ttokens.refresh($element);\n\t\t} else {\n\t\t\t$element.setDependentAutocompletion(dependentField, name, curValue);\n\t\t}\n\t});\n\n\treturn this;\n};\n\n/**\n * Initialize all the JS-using elements contained within this block - can be\n * called for either the entire HTML body, or for a div representing an\n * instance of a multiple-instance template.\n *\n * @param {Mixed} partOfMultiple\n */\n$.fn.initializeJSElements = function( partOfMultiple ) {\n\tthis.find(\".pfShowIfSelected\").each( function() {\n\t\t// Avoid duplicate calls on any one element.\n\t\tif ( !partOfMultiple && $(this).parents('.multipleTemplateWrapper').length > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't call this for combobox inputs, except when a new\n\t\t// multiple-instance template instance is created - in all\n\t\t// other cases, their \"show on select\" is triggered separately.\n\t\tif ( $(this).attr( 'data-input-type' ) == 'combobox' ) {\n\t\t\tif ( partOfMultiple ) {\n\t\t\t\t$(this).showIfSelected(true, true)\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t$(this)\n\t\t.showIfSelected(partOfMultiple, true)\n\t\t.change( function() {\n\t\t\t$(this).showIfSelected(partOfMultiple, false);\n\t\t});\n\t});\n\n\tthis.find(\".pfShowIfChecked\").each( function() {\n\t\t// Avoid duplicate calls on any one element.\n\t\tif ( !partOfMultiple && $(this).parents('.multipleTemplateWrapper').length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\t$(this)\n\t\t.showIfChecked(partOfMultiple, true)\n\t\t.click( function() {\n\t\t\t$(this).showIfChecked(partOfMultiple, false);\n\t\t});\n\t});\n\n\tthis.find(\".pfShowIfCheckedCheckbox\").each( function() {\n\t\t// Avoid duplicate calls on any one element.\n\t\tif ( !partOfMultiple && $(this).parents('.multipleTemplateWrapper').length > 0 ) {\n\t\t\treturn;\n\t\t}\n\t\t$(this)\n\t\t.showIfCheckedCheckbox(partOfMultiple, true)\n\t\t.click( function() {\n\t\t\t$(this).showIfCheckedCheckbox(partOfMultiple, false);\n\t\t});\n\t});\n\n\tif ( partOfMultiple ) {\n\t\t// Enable the new remove button\n\t\tthis.find(\".removeButton\").click( function() {\n\n\t\t\t// Unregister initialization and validation for deleted inputs\n\t\t\t$(this).parentsUntil( '.multipleTemplateInstance' ).last().parent().find(\"input, select, textarea\").each( function() {\n\t\t\t\t$(this).PageForms_unregisterInputInit();\n\t\t\t\t$(this).PageForms_unregisterInputValidation();\n\t\t\t});\n\n\t\t\t// Remove the encompassing div for this instance.\n\t\t\t$(this).closest(\".multipleTemplateInstance\")\n\t\t\t.fadeTo('fast', 0, function() {\n\t\t\t\t$(this).slideUp('fast', function() {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn false;\n\t\t});\n\n\t\t// ...and the new adder\n\t\tthis.find('.addAboveButton').click( function() {\n\t\t\t$(this).addInstance( true );\n\t\t\treturn false; // needed to disable <a> behavior\n\t\t});\n\t}\n\n\tthis.find('.pfComboBox').not('.multipleTemplateStarter .pfComboBox').each(function(){\n\t\tvar min_width = $(this).data('size');\n\t\tvar input_width = $(this).val().length*11;\n\t\tvar inputType = new pf.ComboBoxInput({});\n\t\tinputType.apply($(this));\n\t\tinputType.$element.css(\"width\", input_width > min_width ? input_width : min_width);\n\t\tinputType.$element.css(\"min-width\", min_width);\n\t\tinputType.$element.find(\"a\").css(\"margin-left\", \"-1px\");\n\t\t$(this).after(inputType.$element);\n\t\t$(this).remove()\n\t});\n\n\tvar tokens = new pf.select2.tokens();\n\tthis.find('.pfTokens').not('.multipleTemplateStarter .pfTokens, .select2-container').each( function() {\n\t\ttokens.apply($(this));\n\t});\n\n\t// Set the end date input to the value selected in start date\n\tthis.find(\"span.startDateInput\").not(\".hiddenByPF\").find(\"input\").last().blur( function() {\n\t\tvar endInput = $(this).find(\"span.endDateInput\").not(\".hiddenByPF\");\n\t\tvar endYearInput = endInput.find(\".yearInput\");\n\t\tvar endMonthInput = endInput.find(\".monthInput\");\n\t\tvar endDayInput = endInput.find(\".dayInput\");\n\n\t\t// Update end date value only if it is not set\n\t\tif (endYearInput.val() == '' && endMonthInput.val() == '' && endDayInput.val() == ''){\n\t\t\tvar startInput = $(this);\n\t\t\tvar startYearVal = startInput.find(\".yearInput\").val();\n\t\t\tvar startMonthVal = startInput.find(\".monthInput\").val();\n\t\t\tvar startDayVal = startInput.find(\".dayInput\").val();\n\n\t\t\tendYearInput.val(startYearVal);\n\t\t\tendMonthInput.val(startMonthVal);\n\t\t\tendDayInput.val(startDayVal);\n\t\t}\n\t}.bind(this));\n\n\tif ( partOfMultiple ) {\n\t\tthis.find('.autoGrow').autoGrow();\n\t\tthis.find(\".pfRating\").each( function() {\n\t\t\t$(this).applyRatingInput();\n\t\t});\n\t\tthis.find(\".pfTreeInput\").each( function() {\n\t\t\t$(this).applyJSTree();\n\t\t});\n\t\tthis.find('.pfDatePicker').applyDatePicker();\n\t\tthis.find('.pfDateTimePicker').applyDateTimePicker();\n\t\tthis.find('a.popupformlink').click(function(evt){\n\t\t\treturn ext.popupform.handlePopupFormLink( this.getAttribute('href'), this );\n\t\t});\n\t\t// Only defined if $wgPageFormsSimpleUpload == true.\n\t\tif ( typeof this.initializeSimpleUpload === 'function' ) {\n\t\t\tthis.find(\".simpleUploadInterface\").each( function() {\n\t\t\t\t$(this).initializeSimpleUpload();\n\t\t\t});\n\t\t}\n\n\t\t// Also add support in new template instances to any non-Page\n\t\t// Forms classes that require special JS handling.\n\t\tthis.find('.mw-collapsible').makeCollapsible();\n\t} else {\n\t\tthis.find('.autoGrow').not('.multipleTemplateWrapper .autoGrow').autoGrow();\n\t\tthis.find(\".pfRating\").not(\".multipleTemplateWrapper .pfRating\").each( function() {\n\t\t\t$(this).applyRatingInput();\n\t\t});\n\t\tthis.find(\".pfTreeInput\").not(\".multipleTemplateWrapper .pfTreeInput\").each( function() {\n\t\t\t$(this).applyJSTree();\n\t\t});\n\t\tthis.find('.pfDatePicker').not(\".multipleTemplateWrapper .pfDatePicker\").applyDatePicker();\n\t\tthis.find('.pfDateTimePicker').not(\".multipleTemplateWrapper .pfDateTimePicker\").applyDateTimePicker();\n\t\t// Only defined if $wgPageFormsSimpleUpload == true.\n\t\tif ( typeof this.initializeSimpleUpload === 'function' ) {\n\t\t\tthis.find(\".simpleUploadInterface\").not(\".multipleTemplateWrapper .simpleUploadInterface\").each( function() {\n\t\t\t\t$(this).initializeSimpleUpload();\n\t\t\t});\n\t\t}\n\t}\n\n\t// @TODO - this should ideally be called only for inputs that have\n\t// a dependent field - which might involve changing the storage of\n\t// \"dependent fields\" information from a global variable to a\n\t// per-input HTML attribute.\n\tthis.find('input, select').each( function() {\n\t\t$(this)\n\t\t.setAutocompleteForDependentField( partOfMultiple )\n\t\t.blur( function() {\n\t\t\t$(this).setAutocompleteForDependentField( partOfMultiple );\n\t\t});\n\t});\n\t// The 'blur' event doesn't get triggered for radio buttons for\n\t// Chrome and Safari (the WebKit-based browsers) so use the 'change'\n\t// event in addition.\n\t// @TODO - blur() shuldn't be called at all for radio buttons.\n\tthis.find('input:radio')\n\t\t.change( function() {\n\t\t\t$(this).setAutocompleteForDependentField( partOfMultiple );\n\t\t});\n\n\tthis.find('.new-uuid').each( function() {\n\t\t$(this).val(window.pfGenerateUUID());\n\t});\n\n\tthis.find('[data-tooltip]').not('.multipleTemplateStarter [data-tooltip]').each( function() {\n\t\t// Even if it's within a <th>, display the text unbolded.\n\t\tvar tooltipText = '<p style=\"font-weight: normal;\">' + $(this).attr('data-tooltip') + '</p>';\n\t\tvar tooltip = new OO.ui.PopupButtonWidget( {\n\t\t\ticon: 'info',\n\t\t\tframed: false,\n\t\t\tpopup: {\n\t\t\t\tpadded: true,\n\t\t\t\t$content: $(tooltipText)\n\t\t\t}\n\t\t} );\n\t\t$(this).append( tooltip.$element )\n\t});\n\n\tvar $myThis = this;\n\tif ( $.fn.applyVisualEditor ) {\n\t\tif ( partOfMultiple ) {\n\t\t\t$myThis.find(\".visualeditor\").applyVisualEditor();\n\t\t} else {\n\t\t\t$myThis.find(\".visualeditor\").not(\".multipleTemplateWrapper .visualeditor\").applyVisualEditor();\n\t\t}\n\t} else {\n\t\t$(document).on('VEForAllLoaded', function(e) {\n\t\t\tif ( partOfMultiple ) {\n\t\t\t\t$myThis.find(\".visualeditor\").applyVisualEditor();\n\t\t\t} else {\n\t\t\t\t$myThis.find(\".visualeditor\").not(\".multipleTemplateWrapper .visualeditor\").applyVisualEditor();\n\t\t\t}\n\t\t});\n\t}\n\n\t// @TODO - this should be in the TinyMCE extension, and use a hook.\n\tif ( typeof( mwTinyMCEInit ) === 'function' ) {\n\t\tif ( partOfMultiple ) {\n\t\t\t$myThis.find(\".tinymce\").each( function() {\n\t\t\t\tmwTinyMCEInit( '#' + $(this).attr('id') );\n\t\t\t});\n\t\t} else {\n\t\t\t$myThis.find(\".tinymce\").not(\".multipleTemplateWrapper .tinymce\").each( function() {\n\t\t\t\tmwTinyMCEInit( '#' + $(this).attr('id') );\n\t\t\t});\n\t\t}\n\t} else {\n\t\t$(document).on('TinyMCELoaded', function(e) {\n\t\t\tif ( partOfMultiple ) {\n\t\t\t\t$myThis.find(\".tinymce\").each( function() {\n\t\t\t\t\tmwTinyMCEInit( '#' + $(this).attr('id') );\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t$myThis.find(\".tinymce\").not(\".multipleTemplateWrapper .tinymce\").each( function() {\n\t\t\t\t\tmwTinyMCEInit( '#' + $(this).attr('id') );\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n};\n\n// Copied from https://stackoverflow.com/a/8809472\n// License: public domain/MIT\nwindow.pfGenerateUUID = function() {\n\tvar d = Date.now();\n\tvar d2 = (performance && performance.now && (performance.now() * 1000)) || 0; // Time in microseconds since page-load or 0 if unsupported\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t\tvar r = Math.random() * 16; // random number between 0 and 16\n\t\tif (d > 0) { // Use timestamp until depleted\n\t\t\tr = (d + r) % 16 | 0; // eslint-disable-line no-bitwise\n\t\t\td = Math.floor(d / 16);\n\t\t} else { // Use microseconds since page-load if supported\n\t\t\tr = (d2 + r) % 16 | 0; // eslint-disable-line no-bitwise\n\t\t\td2 = Math.floor(d2 / 16);\n\t\t}\n\t\treturn (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); // eslint-disable-line no-bitwise\n\t});\n}\n\n// Once the document has finished loading, set up everything!\n$(document).ready( function() {\n\tvar i,\n\t\tinputID,\n\t\tvalidationFunctionData;\n\n\tfunction getFunctionFromName( functionName ) {\n\t\tvar func = window;\n\t\tvar namespaces = functionName.split( \".\" );\n\t\tfor ( var nsNum = 0; nsNum < namespaces.length; nsNum++ ) {\n\t\t\tfunc = func[ namespaces[ nsNum ] ];\n\t\t}\n\t\t// If this gets called before the function is defined, just\n\t\t// store the function name instead, for later lookup.\n\t\tif ( func === null ) {\n\t\t\treturn functionName;\n\t\t}\n\t\treturn func;\n\t}\n\n\t// Exit now if a Page Forms form is not present.\n\tif ( $('#pfForm').length === 0 ) {\n\t\treturn;\n\t}\n\n\tfunction minimizeInstances( minHeight ) {\n\t\tif ( minHeight >= 0) {\n\t\t\t$('.multipleTemplateList').each( function() {\n\t\t\t\tif ( $(this).height() > minHeight ) {\n\t\t\t\t\t$(this).addClass('minimizeAll');\n\t\t\t\t\t$(this).possiblyMinimizeAllOpenInstances();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// jQuery's .ready() function is being called before the resource was actually loaded.\n\t// This is a workaround for https://phabricator.wikimedia.org/T216805.\n\tsetTimeout( function(){\n\t\t// \"Mask\" to prevent users from clicking while form is still loading.\n\t\t$('#loadingMask').css({'width': $(document).width(),'height': $(document).height()});\n\n\t\t// register init functions\n\t\tvar initFunctionData = mw.config.get( 'ext.pf.initFunctionData' );\n\t\tfor ( inputID in initFunctionData ) {\n\t\t\tfor ( i in initFunctionData[inputID] ) {\n\t\t\t\t/*jshint -W069 */\n\t\t\t\t$( '#' + inputID ).PageForms_registerInputInit( getFunctionFromName( initFunctionData[ inputID ][ i ][ 'name' ] ), initFunctionData[ inputID ][ i ][ 'param' ] );\n\t\t\t\t/*jshint +W069 */\n\t\t\t}\n\t\t}\n\n\t\t// register validation functions\n\t\tvalidationFunctionData = mw.config.get( 'ext.pf.validationFunctionData' );\n\t\tfor ( inputID in validationFunctionData ) {\n\t\t\tfor ( i in validationFunctionData[inputID] ) {\n\t\t\t\t/*jshint -W069 */\n\t\t\t\t$( '#' + inputID ).PageForms_registerInputValidation( getFunctionFromName( validationFunctionData[ inputID ][ i ][ 'name' ] ), validationFunctionData[ inputID ][ i ][ 'param' ] );\n\t\t\t\t/*jshint +W069 */\n\t\t\t}\n\t\t}\n\n\t\t$( 'body' ).initializeJSElements(false);\n\n\t\t$('.multipleTemplateInstance').each( function() {\n\t\t\t$(this).initializeJSElements(true);\n\t\t});\n\t\t$('.multipleTemplateAdder').click( function() {\n\t\t\t$(this).addInstance( false );\n\t\t});\n\t\tvar wgPageFormsHeightForMinimizingInstances = mw.config.get( 'wgPageFormsHeightForMinimizingInstances' );\n\t\tminimizeInstances( wgPageFormsHeightForMinimizingInstances );\n\n\t\t$('.multipleTemplateList').each( function() {\n\t\t\tvar $list = $(this);\n\t\t\tvar sortable = Sortable.create($list[0], {\n\t\t\t\thandle: '.instanceRearranger',\n\t\t\t\tonStart: function(/**Event*/evt) {\n\t\t\t\t\t$list.possiblyMinimizeAllOpenInstances();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// If the Header Tabs extension is being used in this form, minimize all the\n\t\t// relevant instances any time the tab is changed.\n\t\tif ( $( \"#headertabs\" ).length ) {\n\t\t\t$( \".oo-ui-tabOptionWidget\" ).on( 'click', function( event ) {\n\t\t\t\tminimizeInstances( wgPageFormsHeightForMinimizingInstances );\n\t\t\t});\n\t\t}\n\n\t\t// If there are any \"wizard screen\" elements defined in the\n\t\t// form, turn the whole form into a wizard, with successive\n\t\t// screens for each element.\n\t\tvar $wizardScreens = $('form#pfForm').find('div.pf-wizard-screen');\n\t\tif ( $wizardScreens.length > 0 ) {\n\t\t\tvar $wizardNav = $('<div class=\"pf-wizard-navigation\"></div>');\n\t\t\t$('form#pfForm').append( $wizardNav );\n\t\t\t$wizardScreens.displayWizardScreen( 1, $wizardNav );\n\t\t}\n\n\t\t// If the form is submitted, validate everything!\n\t\t$('#pfForm').submit( function() {\n\t\t\treturn validateAll();\n\t\t} );\n\n\t\t// We are all done - remove the loading spinner.\n\t\t$('.loadingImage').remove();\n\t}, 0 );\n\n\tmw.hook('pf.formSetupAfter').fire();\n});\n\n// If some part of the form is clicked, minimize any multiple-instance\n// template instances that need minimizing, and move the \"focus\" to the current\n// instance list, if one is being clicked and it's different from the\n// previous one.\n// We make only the form itself clickable, instead of the whole screen, to\n// try to avoid a click on a popup, like the \"Upload file\" window, minimizing\n// the current open instance.\n$('form#pfForm').click( function(e) {\n\tvar $target = $(e.target);\n\t// Ignore the \"add instance\" buttons - those get handling of their own.\n\tvar clickedOnAddAnother = $target.parents('.multipleTemplateAdder').length > 0;\n\tif ( clickedOnAddAnother || $target.hasClass('addAboveButton') ) {\n\t\treturn;\n\t}\n\n\tvar $instance = $target.closest('.multipleTemplateInstance');\n\tif ( $instance === null ) {\n\t\t$('.multipleTemplateList.currentFocus')\n\t\t\t.removeClass('currentFocus')\n\t\t\t.possiblyMinimizeAllOpenInstances();\n\t\treturn;\n\t}\n\n\tvar $instancesList = $instance.closest('.multipleTemplateList');\n\tif ( !$instancesList.hasClass('currentFocus') ) {\n\t\t$('.multipleTemplateList.currentFocus')\n\t\t\t.removeClass('currentFocus')\n\t\t\t.possiblyMinimizeAllOpenInstances();\n\t\tif ( $instancesList.hasClass('minimizeAll') ) {\n\t\t\t$instancesList.addClass('currentFocus');\n\t\t}\n\t}\n\n\tif ( $instance.hasClass('minimized') ) {\n\t\t$instancesList.possiblyMinimizeAllOpenInstances();\n\t\t$instance.removeClass('minimized');\n\t\t$instance.find('.fieldValuesDisplay').html('');\n\t\t$instance.find('.instanceMain').fadeIn();\n\t\t$instance.find('.fieldValuesDisplay').remove();\n\t\t// Remove unhelpful styling added by VisualEditor.\n\t\t$instance.find('div.oo-ui-toolbar-bar').css('left', null);\n\t\t$instance.find('div.oo-ui-toolbar-bar').css('right', null);\n\t}\n});\n\n$('#pf-expand-all a').click(function( event ) {\n\tevent.preventDefault();\n\n\t// Page Forms minimized template instances.\n\t$('.minimized').each( function() {\n\t\t$(this).removeClass('minimized');\n\t\t$(this).find('.fieldValuesDisplay').html('');\n\t\t$(this).find('.instanceMain').fadeIn();\n\t\t$(this).find('.fieldValuesDisplay').remove();\n\t\t// Remove unhelpful styling added by VisualEditor.\n\t\t$(this).find('div.oo-ui-toolbar-bar').css('left', null);\n\t\t$(this).find('div.oo-ui-toolbar-bar').css('right', null);\n\t});\n\n\t// Standard MediaWiki \"collapsible\" sections.\n\t$('div.mw-collapsed a.mw-collapsible-text').click();\n});\n\n$('.pfSendBack').click( function() {\n\twindow.history.back();\n});\n\n}( jQuery, mediaWiki ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/ext.pf.js","messages":[],"suppressedMessages":[],"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-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/ext.pf.select2.base.js","messages":[{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":72,"column":6,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":72,"endColumn":67},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":92,"column":8,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":92,"endColumn":71},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":317,"column":6,"nodeType":"CallExpression","messageId":"substr","endLine":317,"endColumn":36},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":318,"column":6,"nodeType":"CallExpression","messageId":"substr","endLine":318,"endColumn":51}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*\n * ext.pf.select2.base.js\n *\n * Base class to handle autocomplete for various input types using the Select2\n * JS library.\n *\n * @file\n *\n * @licence GNU GPL v2+\n * @author Jatin Mehta\n * @author Priyanshu Varshney\n * @author Yaron Koren\n */\n\n( function ( $, mw, pf ) {\n\t'use strict';\n\t/**\n\t * Inheritance class for the pf.select2 constructor\n\t *\n\t * @class\n\t */\n\tpf.select2 = pf.select2 || {};\n\n\t/**\n\t * @class\n\t * @constructor\n\t */\n\tpf.select2.base = function() {\n\n\t};\n\n\tpf.select2.base.prototype = {\n\t\t/*\n\t\t * Applies select2 to the HTML element\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t */\n\t\tapply: function( element ) {\n\t\t\tvar existingValuesOnly = (element.attr(\"existingvaluesonly\") == \"true\");\n\t\t\tthis.existingValuesOnly = existingValuesOnly;\n\t\t\tthis.id = element.attr( \"id\" );\n\t\t\ttry {\n\t\t\t\tvar opts = this.setOptions();\n\t\t\t\t// element.val() would be simpler, but for some\n\t\t\t\t// reason it returns the wrong value.\n\t\t\t\tvar origValue = element.attr('value');\n\t\t\t\t// We call empty() in case this input was\n\t\t\t\t// modified due to \"values dependent on\", and\n\t\t\t\t// the old set of allowed values needs to\n\t\t\t\t// be removed.\n\t\t\t\telement.empty();\n\t\t\t\tvar $input = element.select2(opts);\n\n\t\t\t\t// We need an empty string as the first option; otherwise,\n\t\t\t\t// if it's non-empty string, Select2 might pick it and\n\t\t\t\t// display it as its value even if we remove it.\n\t\t\t\tvar newEmptyOption = new Option( \"\", \"\", false, false );\n\t\t\t\t$input.append(newEmptyOption).trigger('change');\n\n\t\t\t\tif ( origValue === undefined ) {\n\t\t\t\t\torigValue = \"\";\n\t\t\t\t}\n\t\t\t\tif ( this.getAutocompleteOpts().autocompletedatatype !== undefined && this.dependentOn() === null ) {\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tid: origValue,\n\t\t\t\t\t\ttext: origValue\n\t\t\t\t\t};\n\t\t\t\t\t// This is needed after the empty() call,\n\t\t\t\t\t// to create an option element to restore\n\t\t\t\t\t// correct value in remote autocompletion.\n\t\t\t\t\tlet newOption = new Option(data.text, data.id, false, false);\n\t\t\t\t\t$input.append(newOption).trigger('change');\n\t\t\t\t}\n\t\t\t\t// This is required so that the existing value\n\t\t\t\t// can be displayed.\n\t\t\t\t$input.val(origValue).trigger('change');\n\t\t\t\tvar inputData = $input.data(\"select2\");\n\t\t\t\tvar rawValue = \"\";\n\n\t\t\t\t$(inputData.dropdown.$searchContainer).on(\"keydown\",function(e){\n\t\t\t\t\tif ( existingValuesOnly ) {\n\t\t\t\t\t\treturn ;\n\t\t\t\t\t}\n\t\t\t\t\tif ( e.keyCode === 9 ) { // Tab.\n\t\t\t\t\t\tvar valHighlighted = inputData.$results.find('.select2-results__option--highlighted')[0];\n\t\t\t\t\t\tif ( valHighlighted !== undefined ){\n\t\t\t\t\t\t\trawValue = valHighlighted.textContent;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif ( !$input.find( \"option[value='\" + rawValue + \"']\" ).length ) {\n\t\t\t\t\t\t\t// Does this ever get called?\n\t\t\t\t\t\t\tlet newOption = new Option( rawValue, rawValue, false, false );\n\t\t\t\t\t\t\t$input.append(newOption).trigger( 'change' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( rawValue !== '' ) {\n\t\t\t\t\t\t\t$input.val(rawValue).trigger(\"change\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\telement.on( \"change\", this.onChange );\n\t\t\t} catch (e) {\n\t\t\t\twindow.console.log(e);\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * Used to remove the Select2 applied to the HTML element;\n\t\t * the selected value will remain preserved.\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t */\n\t\tdestroy: function( element ) {\n\t\t\telement.select2( \"destroy\" );\n\t\t},\n\t \t/*\n\t\t * If a field is dependent on some other field in the form\n\t\t * then it returns its name.\n\t\t *\n\t\t * @return {string}\n\t\t *\n\t\t */\n\t\tdependentOn: function() {\n\t\t\tvar input_id = \"#\" + this.id;\n\t\t\tvar name_attr = this.nameAttr( $(input_id) );\n\t\t\tvar name = $(input_id).attr( name_attr );\n\n\t\t\tvar wgPageFormsDependentFields = mw.config.get( 'wgPageFormsDependentFields' );\n\t\t\tfor ( var i = 0; i < wgPageFormsDependentFields.length; i++ ) {\n\t\t\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\t\t\tif ( dependentFieldPair[1] === name ) {\n\t\t\t\t\treturn dependentFieldPair[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/*\n\t\t * Returns the array of names of fields in the form which are dependent\n\t\t * on the field passed as a param to this function,\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t * @return {associative array} dependent_on_me\n\t\t *\n\t\t */\n\t\tdependentOnMe: function( element ) {\n\t\t\tvar name_attr = this.nameAttr(element);\n\t\t\tvar name = element.attr( name_attr );\n\t\t\tvar dependent_on_me = [];\n\n\t\t\tvar wgPageFormsDependentFields = mw.config.get( 'wgPageFormsDependentFields' );\n\t\t\tfor ( var i = 0; i < wgPageFormsDependentFields.length; i++ ) {\n\t\t\t\tvar dependentFieldPair = wgPageFormsDependentFields[i];\n\t\t\t\tif ( dependentFieldPair[0] === name ) {\n\t\t\t\t\tdependent_on_me.push(dependentFieldPair[1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn dependent_on_me;\n\t\t},\n\t\t/*\n\t\t * Returns the name attribute of the field depending on\n\t\t * whether it is a part of a multiple instance template or not\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t * @return {string}\n\t\t *\n\t\t */\n\t\tnameAttr: function( element ) {\n\t\t\treturn this.partOfMultiple( element ) ? \"origname\" : \"name\";\n\t\t},\n\t\t/*\n\t\t * Checks whether the field is part of a multiple instance template or not\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t * @return {boolean}\n\t\t *\n\t\t */\n\t\tpartOfMultiple: function( element ) {\n\t\t\treturn element.attr( \"origname\" ) !== undefined ? true : false;\n\t\t},\n\t\t/*\n\t\t * Gives dependent field options which include\n\t\t * property, base property and base value\n\t\t *\n\t\t * @param {string} dep_on\n\t\t *\n\t\t * @return {object} dep_field_opts\n\t\t *\n\t\t */\n\t\tgetDependentFieldOpts: function( dep_on ) {\n\t\t\tvar input_id = \"#\" + this.id;\n\t\t\tvar dep_field_opts = {};\n\t\t\tvar $base_element;\n\n\t\t\tif ( this.partOfMultiple($(input_id)) ) {\n\t\t\t\t$base_element = $(input_id).closest( \".multipleTemplateInstance\" )\n\t\t\t\t\t.find( '[origname =\"' + dep_on + '\" ]' );\n\t\t\t} else {\n\t\t\t\t$base_element = $('[name =\"' + dep_on + '\" ]');\n\t\t\t}\n\t\t\tdep_field_opts.base_value = $base_element.val();\n\t\t\tdep_field_opts.base_prop = mw.config.get( 'wgPageFormsFieldProperties' )[dep_on] ||\n\t\t\t\t$base_element.attr( \"autocompletesettings\" );\n\t\t\tdep_field_opts.prop = $(input_id).attr( \"autocompletesettings\" ).split( \",\" )[0];\n\n\t\t\treturn dep_field_opts;\n\t\t},\n\t\t/*\n\t\t * Gives autocomplete options for a field\n\t\t *\n\t\t * @return {object} autocomplete_opts\n\t\t *\n\t\t */\n\t\tgetAutocompleteOpts: function() {\n\t\t\tvar input_id = \"#\" + this.id;\n\t\t\tvar autocomplete_opts = {};\n\n\t\t\tif ( $(input_id).attr( \"autocompletesettings\" ) === undefined ) {\n\t\t\t\tthrow \"Error: No autocomplete settings set for input \" + input_id;\n\t\t\t}\n\n\t\t\tautocomplete_opts.autocompletedatatype = $(input_id).attr( \"autocompletedatatype\" );\n\t\t\tautocomplete_opts.autocompletesettings = $(input_id).attr( \"autocompletesettings\" );\n\t\t\treturn autocomplete_opts;\n\t\t},\n\n\t\t/**\n\t\t * Escape out any HTML, and then add our own HTML to display\n\t\t * the correct bolding.\n\t\t * The first part of this function is directly copied from\n\t\t * Utils::escapeMarkup() in the Select2 code. @TODO: figure out\n\t\t * how to just call that code directly.\n\t\t *\n\t\t * @param {Mixed} markup\n\t\t * @return {Mixed}\n\t\t */\n\t\tescapeMarkupAndAddHTML: function( markup ) {\n\t\t\tvar replaceMap = {\n\t\t\t\t'\\\\': '&#92;',\n\t\t\t\t'&': '&amp;',\n\t\t\t\t'<': '&lt;',\n\t\t\t\t'>': '&gt;',\n\t\t\t\t'\"': '&quot;',\n\t\t\t\t'\\'': '&#39;',\n\t\t\t\t'/': '&#47;'\n\t\t\t};\n\n\t\t\t// Do not try to escape the markup if it's not a string\n\t\t\tif (typeof markup !== 'string') {\n\t\t\t\treturn markup;\n\t\t\t}\n\n\t\t\tvar escapedMarkup = String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n\t\t\t\treturn replaceMap[match];\n\t\t\t})\n\n\t\t\tvar boldStart = String.fromCharCode(1);\n\t\t\tvar boldEnd = String.fromCharCode(2);\n\t\t\treturn '<span class=\"select2-match-entire\">' +\n\t\t\t\tescapedMarkup\n\t\t\t\t.replace(boldStart, '<span class=\"select2-match\"><b>')\n\t\t\t\t.replace(boldEnd, '</b></span>') +\n\t\t\t\t'</span>';\n\t\t},\n\n\t\t/*\n\t\t * Refreshes the field if there is a change\n\t\t * in the autocomplete values.\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t *\n\t\t */\n\t\trefresh: function( element ) {\n\t\t\tthis.destroy($(element));\n\t\t\tthis.apply($(element));\n\t\t},\n\t\t/*\n\t\t * Removes diacritics from the string and replaces\n\t\t * them with English characters.\n\t\t * This code is basically copied from:\n\t\t * http://jpfiddle.net/potherca/Gtmr2/\n\t\t *\n\t\t * @param {string} text\n\t\t *\n\t\t * @return {string}\n\t\t *\n\t\t */\n\t\tremoveDiacritics: function( text ) {\n\t\t\tvar diacriticsMap = { 'Á': 'A', 'Ă': 'A', 'Ắ': 'A', 'Ặ': 'A', 'Ằ': 'A', 'Ẳ': 'A', 'Ẵ': 'A', 'Ǎ': 'A', 'Â': 'A', 'Ấ': 'A', 'Ậ': 'A', 'Ầ': 'A', 'Ẩ': 'A', 'Ẫ': 'A', 'Ä': 'A', 'Ǟ': 'A', 'Ȧ': 'A', 'Ǡ': 'A', 'Ạ': 'A', 'Ȁ': 'A', 'À': 'A', 'Ả': 'A', 'Ȃ': 'A', 'Ā': 'A', 'Ą': 'A', 'Å': 'A', 'Ǻ': 'A', 'Ḁ': 'A', 'Ⱥ': 'A', 'Ã': 'A', 'Ꜳ': 'AA', 'Æ': 'AE', 'Ǽ': 'AE', 'Ǣ': 'AE', 'Ꜵ': 'AO', 'Ꜷ': 'AU', 'Ꜹ': 'AV', 'Ꜻ': 'AV', 'Ꜽ': 'AY', 'Ḃ': 'B', 'Ḅ': 'B', 'Ɓ': 'B', 'Ḇ': 'B', 'Ƀ': 'B', 'Ƃ': 'B', 'Ć': 'C', 'Č': 'C', 'Ç': 'C', 'Ḉ': 'C', 'Ĉ': 'C', 'Ċ': 'C', 'Ƈ': 'C', 'Ȼ': 'C', 'Ď': 'D', 'Ḑ': 'D', 'Ḓ': 'D', 'Ḋ': 'D', 'Ḍ': 'D', 'Ɗ': 'D', 'Ḏ': 'D', 'Dz': 'D', 'Dž': 'D', 'Đ': 'D', 'Ƌ': 'D', 'DZ': 'DZ', 'DŽ': 'DZ', 'É': 'E', 'Ĕ': 'E', 'Ě': 'E', 'Ȩ': 'E', 'Ḝ': 'E', 'Ê': 'E', 'Ế': 'E', 'Ệ': 'E', 'Ề': 'E', 'Ể': 'E', 'Ễ': 'E', 'Ḙ': 'E', 'Ë': 'E', 'Ė': 'E', 'Ẹ': 'E', 'Ȅ': 'E', 'È': 'E', 'Ẻ': 'E', 'Ȇ': 'E', 'Ē': 'E', 'Ḗ': 'E', 'Ḕ': 'E', 'Ę': 'E', 'Ɇ': 'E', 'Ẽ': 'E', 'Ḛ': 'E', 'Ꝫ': 'ET', 'Ḟ': 'F', 'Ƒ': 'F', 'Ǵ': 'G', 'Ğ': 'G', 'Ǧ': 'G', 'Ģ': 'G', 'Ĝ': 'G', 'Ġ': 'G', 'Ɠ': 'G', 'Ḡ': 'G', 'Ǥ': 'G', 'Ḫ': 'H', 'Ȟ': 'H', 'Ḩ': 'H', 'Ĥ': 'H', 'Ⱨ': 'H', 'Ḧ': 'H', 'Ḣ': 'H', 'Ḥ': 'H', 'Ħ': 'H', 'Í': 'I', 'Ĭ': 'I', 'Ǐ': 'I', 'Î': 'I', 'Ï': 'I', 'Ḯ': 'I', 'İ': 'I', 'Ị': 'I', 'Ȉ': 'I', 'Ì': 'I', 'Ỉ': 'I', 'Ȋ': 'I', 'Ī': 'I', 'Į': 'I', 'Ɨ': 'I', 'Ĩ': 'I', 'Ḭ': 'I', 'Ꝺ': 'D', 'Ꝼ': 'F', 'Ᵹ': 'G', 'Ꞃ': 'R', 'Ꞅ': 'S', 'Ꞇ': 'T', 'Ꝭ': 'IS', 'Ĵ': 'J', 'Ɉ': 'J', 'Ḱ': 'K', 'Ǩ': 'K', 'Ķ': 'K', 'Ⱪ': 'K', 'Ꝃ': 'K', 'Ḳ': 'K', 'Ƙ': 'K', 'Ḵ': 'K', 'Ꝁ': 'K', 'Ꝅ': 'K', 'Ĺ': 'L', 'Ƚ': 'L', 'Ľ': 'L', 'Ļ': 'L', 'Ḽ': 'L', 'Ḷ': 'L', 'Ḹ': 'L', 'Ⱡ': 'L', 'Ꝉ': 'L', 'Ḻ': 'L', 'Ŀ': 'L', 'Ɫ': 'L', 'Lj': 'L', 'Ł': 'L', 'LJ': 'LJ', 'Ḿ': 'M', 'Ṁ': 'M', 'Ṃ': 'M', 'Ɱ': 'M', 'Ń': 'N', 'Ň': 'N', 'Ņ': 'N', 'Ṋ': 'N', 'Ṅ': 'N', 'Ṇ': 'N', 'Ǹ': 'N', 'Ɲ': 'N', 'Ṉ': 'N', 'Ƞ': 'N', 'Nj': 'N', 'Ñ': 'N', 'NJ': 'NJ', 'Ó': 'O', 'Ŏ': 'O', 'Ǒ': 'O', 'Ô': 'O', 'Ố': 'O', 'Ộ': 'O', 'Ồ': 'O', 'Ổ': 'O', 'Ỗ': 'O', 'Ö': 'O', 'Ȫ': 'O', 'Ȯ': 'O', 'Ȱ': 'O', 'Ọ': 'O', 'Ő': 'O', 'Ȍ': 'O', 'Ò': 'O', 'Ỏ': 'O', 'Ơ': 'O', 'Ớ': 'O', 'Ợ': 'O', 'Ờ': 'O', 'Ở': 'O', 'Ỡ': 'O', 'Ȏ': 'O', 'Ꝋ': 'O', 'Ꝍ': 'O', 'Ō': 'O', 'Ṓ': 'O', 'Ṑ': 'O', 'Ɵ': 'O', 'Ǫ': 'O', 'Ǭ': 'O', 'Ø': 'O', 'Ǿ': 'O', 'Õ': 'O', 'Ṍ': 'O', 'Ṏ': 'O', 'Ȭ': 'O', 'Ƣ': 'OI', 'Ꝏ': 'OO', 'Ɛ': 'E', 'Ɔ': 'O', 'Ȣ': 'OU', 'Ṕ': 'P', 'Ṗ': 'P', 'Ꝓ': 'P', 'Ƥ': 'P', 'Ꝕ': 'P', 'Ᵽ': 'P', 'Ꝑ': 'P', 'Ꝙ': 'Q', 'Ꝗ': 'Q', 'Ŕ': 'R', 'Ř': 'R', 'Ŗ': 'R', 'Ṙ': 'R', 'Ṛ': 'R', 'Ṝ': 'R', 'Ȑ': 'R', 'Ȓ': 'R', 'Ṟ': 'R', 'Ɍ': 'R', 'Ɽ': 'R', 'Ꜿ': 'C', 'Ǝ': 'E', 'Ś': 'S', 'Ṥ': 'S', 'Š': 'S', 'Ṧ': 'S', 'Ş': 'S', 'Ŝ': 'S', 'Ș': 'S', 'Ṡ': 'S', 'Ṣ': 'S', 'Ṩ': 'S', 'ẞ': 'SS', 'Ť': 'T', 'Ţ': 'T', 'Ṱ': 'T', 'Ț': 'T', 'Ⱦ': 'T', 'Ṫ': 'T', 'Ṭ': 'T', 'Ƭ': 'T', 'Ṯ': 'T', 'Ʈ': 'T', 'Ŧ': 'T', 'Ɐ': 'A', 'Ꞁ': 'L', 'Ɯ': 'M', 'Ʌ': 'V', 'Ꜩ': 'TZ', 'Ú': 'U', 'Ŭ': 'U', 'Ǔ': 'U', 'Û': 'U', 'Ṷ': 'U', 'Ü': 'U', 'Ǘ': 'U', 'Ǚ': 'U', 'Ǜ': 'U', 'Ǖ': 'U', 'Ṳ': 'U', 'Ụ': 'U', 'Ű': 'U', 'Ȕ': 'U', 'Ù': 'U', 'Ủ': 'U', 'Ư': 'U', 'Ứ': 'U', 'Ự': 'U', 'Ừ': 'U', 'Ử': 'U', 'Ữ': 'U', 'Ȗ': 'U', 'Ū': 'U', 'Ṻ': 'U', 'Ų': 'U', 'Ů': 'U', 'Ũ': 'U', 'Ṹ': 'U', 'Ṵ': 'U', 'Ꝟ': 'V', 'Ṿ': 'V', 'Ʋ': 'V', 'Ṽ': 'V', 'Ꝡ': 'VY', 'Ẃ': 'W', 'Ŵ': 'W', 'Ẅ': 'W', 'Ẇ': 'W', 'Ẉ': 'W', 'Ẁ': 'W', 'Ⱳ': 'W', 'Ẍ': 'X', 'Ẋ': 'X', 'Ý': 'Y', 'Ŷ': 'Y', 'Ÿ': 'Y', 'Ẏ': 'Y', 'Ỵ': 'Y', 'Ỳ': 'Y', 'Ƴ': 'Y', 'Ỷ': 'Y', 'Ỿ': 'Y', 'Ȳ': 'Y', 'Ɏ': 'Y', 'Ỹ': 'Y', 'Ź': 'Z', 'Ž': 'Z', 'Ẑ': 'Z', 'Ⱬ': 'Z', 'Ż': 'Z', 'Ẓ': 'Z', 'Ȥ': 'Z', 'Ẕ': 'Z', 'Ƶ': 'Z', 'IJ': 'IJ', 'Œ': 'OE', 'ᴀ': 'A', 'ᴁ': 'AE', 'ʙ': 'B', 'ᴃ': 'B', 'ᴄ': 'C', 'ᴅ': 'D', 'ᴇ': 'E', 'ꜰ': 'F', 'ɢ': 'G', 'ʛ': 'G', 'ʜ': 'H', 'ɪ': 'I', 'ʁ': 'R', 'ᴊ': 'J', 'ᴋ': 'K', 'ʟ': 'L', 'ᴌ': 'L', 'ᴍ': 'M', 'ɴ': 'N', 'ᴏ': 'O', 'ɶ': 'OE', 'ᴐ': 'O', 'ᴕ': 'OU', 'ᴘ': 'P', 'ʀ': 'R', 'ᴎ': 'N', 'ᴙ': 'R', 'ꜱ': 'S', 'ᴛ': 'T', 'ⱻ': 'E', 'ᴚ': 'R', 'ᴜ': 'U', 'ᴠ': 'V', 'ᴡ': 'W', 'ʏ': 'Y', 'ᴢ': 'Z', 'á': 'a', 'ă': 'a', 'ắ': 'a', 'ặ': 'a', 'ằ': 'a', 'ẳ': 'a', 'ẵ': 'a', 'ǎ': 'a', 'â': 'a', 'ấ': 'a', 'ậ': 'a', 'ầ': 'a', 'ẩ': 'a', 'ẫ': 'a', 'ä': 'a', 'ǟ': 'a', 'ȧ': 'a', 'ǡ': 'a', 'ạ': 'a', 'ȁ': 'a', 'à': 'a', 'ả': 'a', 'ȃ': 'a', 'ā': 'a', 'ą': 'a', 'ᶏ': 'a', 'ẚ': 'a', 'å': 'a', 'ǻ': 'a', 'ḁ': 'a', 'ⱥ': 'a', 'ã': 'a', 'ꜳ': 'aa', 'æ': 'ae', 'ǽ': 'ae', 'ǣ': 'ae', 'ꜵ': 'ao', 'ꜷ': 'au', 'ꜹ': 'av', 'ꜻ': 'av', 'ꜽ': 'ay', 'ḃ': 'b', 'ḅ': 'b', 'ɓ': 'b', 'ḇ': 'b', 'ᵬ': 'b', 'ᶀ': 'b', 'ƀ': 'b', 'ƃ': 'b', 'ɵ': 'o', 'ć': 'c', 'č': 'c', 'ç': 'c', 'ḉ': 'c', 'ĉ': 'c', 'ɕ': 'c', 'ċ': 'c', 'ƈ': 'c', 'ȼ': 'c', 'ď': 'd', 'ḑ': 'd', 'ḓ': 'd', 'ȡ': 'd', 'ḋ': 'd', 'ḍ': 'd', 'ɗ': 'd', 'ᶑ': 'd', 'ḏ': 'd', 'ᵭ': 'd', 'ᶁ': 'd', 'đ': 'd', 'ɖ': 'd', 'ƌ': 'd', 'ı': 'i', 'ȷ': 'j', 'ɟ': 'j', 'ʄ': 'j', 'dz': 'dz', 'dž': 'dz', 'é': 'e', 'ĕ': 'e', 'ě': 'e', 'ȩ': 'e', 'ḝ': 'e', 'ê': 'e', 'ế': 'e', 'ệ': 'e', 'ề': 'e', 'ể': 'e', 'ễ': 'e', 'ḙ': 'e', 'ë': 'e', 'ė': 'e', 'ẹ': 'e', 'ȅ': 'e', 'è': 'e', 'ẻ': 'e', 'ȇ': 'e', 'ē': 'e', 'ḗ': 'e', 'ḕ': 'e', 'ⱸ': 'e', 'ę': 'e', 'ᶒ': 'e', 'ɇ': 'e', 'ẽ': 'e', 'ḛ': 'e', 'ꝫ': 'et', 'ḟ': 'f', 'ƒ': 'f', 'ᵮ': 'f', 'ᶂ': 'f', 'ǵ': 'g', 'ğ': 'g', 'ǧ': 'g', 'ģ': 'g', 'ĝ': 'g', 'ġ': 'g', 'ɠ': 'g', 'ḡ': 'g', 'ᶃ': 'g', 'ǥ': 'g', 'ḫ': 'h', 'ȟ': 'h', 'ḩ': 'h', 'ĥ': 'h', 'ⱨ': 'h', 'ḧ': 'h', 'ḣ': 'h', 'ḥ': 'h', 'ɦ': 'h', 'ẖ': 'h', 'ħ': 'h', 'ƕ': 'hv', 'í': 'i', 'ĭ': 'i', 'ǐ': 'i', 'î': 'i', 'ï': 'i', 'ḯ': 'i', 'ị': 'i', 'ȉ': 'i', 'ì': 'i', 'ỉ': 'i', 'ȋ': 'i', 'ī': 'i', 'į': 'i', 'ᶖ': 'i', 'ɨ': 'i', 'ĩ': 'i', 'ḭ': 'i', 'ꝺ': 'd', 'ꝼ': 'f', 'ᵹ': 'g', 'ꞃ': 'r', 'ꞅ': 's', 'ꞇ': 't', 'ꝭ': 'is', 'ǰ': 'j', 'ĵ': 'j', 'ʝ': 'j', 'ɉ': 'j', 'ḱ': 'k', 'ǩ': 'k', 'ķ': 'k', 'ⱪ': 'k', 'ꝃ': 'k', 'ḳ': 'k', 'ƙ': 'k', 'ḵ': 'k', 'ᶄ': 'k', 'ꝁ': 'k', 'ꝅ': 'k', 'ĺ': 'l', 'ƚ': 'l', 'ɬ': 'l', 'ľ': 'l', 'ļ': 'l', 'ḽ': 'l', 'ȴ': 'l', 'ḷ': 'l', 'ḹ': 'l', 'ⱡ': 'l', 'ꝉ': 'l', 'ḻ': 'l', 'ŀ': 'l', 'ɫ': 'l', 'ᶅ': 'l', 'ɭ': 'l', 'ł': 'l', 'lj': 'lj', 'ſ': 's', 'ẜ': 's', 'ẛ': 's', 'ẝ': 's', 'ḿ': 'm', 'ṁ': 'm', 'ṃ': 'm', 'ɱ': 'm', 'ᵯ': 'm', 'ᶆ': 'm', 'ń': 'n', 'ň': 'n', 'ņ': 'n', 'ṋ': 'n', 'ȵ': 'n', 'ṅ': 'n', 'ṇ': 'n', 'ǹ': 'n', 'ɲ': 'n', 'ṉ': 'n', 'ƞ': 'n', 'ᵰ': 'n', 'ᶇ': 'n', 'ɳ': 'n', 'ñ': 'n', 'nj': 'nj', 'ó': 'o', 'ŏ': 'o', 'ǒ': 'o', 'ô': 'o', 'ố': 'o', 'ộ': 'o', 'ồ': 'o', 'ổ': 'o', 'ỗ': 'o', 'ö': 'o', 'ȫ': 'o', 'ȯ': 'o', 'ȱ': 'o', 'ọ': 'o', 'ő': 'o', 'ȍ': 'o', 'ò': 'o', 'ỏ': 'o', 'ơ': 'o', 'ớ': 'o', 'ợ': 'o', 'ờ': 'o', 'ở': 'o', 'ỡ': 'o', 'ȏ': 'o', 'ꝋ': 'o', 'ꝍ': 'o', 'ⱺ': 'o', 'ō': 'o', 'ṓ': 'o', 'ṑ': 'o', 'ǫ': 'o', 'ǭ': 'o', 'ø': 'o', 'ǿ': 'o', 'õ': 'o', 'ṍ': 'o', 'ṏ': 'o', 'ȭ': 'o', 'ƣ': 'oi', 'ꝏ': 'oo', 'ɛ': 'e', 'ᶓ': 'e', 'ɔ': 'o', 'ᶗ': 'o', 'ȣ': 'ou', 'ṕ': 'p', 'ṗ': 'p', 'ꝓ': 'p', 'ƥ': 'p', 'ᵱ': 'p', 'ᶈ': 'p', 'ꝕ': 'p', 'ᵽ': 'p', 'ꝑ': 'p', 'ꝙ': 'q', 'ʠ': 'q', 'ɋ': 'q', 'ꝗ': 'q', 'ŕ': 'r', 'ř': 'r', 'ŗ': 'r', 'ṙ': 'r', 'ṛ': 'r', 'ṝ': 'r', 'ȑ': 'r', 'ɾ': 'r', 'ᵳ': 'r', 'ȓ': 'r', 'ṟ': 'r', 'ɼ': 'r', 'ᵲ': 'r', 'ᶉ': 'r', 'ɍ': 'r', 'ɽ': 'r', 'ↄ': 'c', 'ꜿ': 'c', 'ɘ': 'e', 'ɿ': 'r', 'ś': 's', 'ṥ': 's', 'š': 's', 'ṧ': 's', 'ş': 's', 'ŝ': 's', 'ș': 's', 'ṡ': 's', 'ṣ': 's', 'ṩ': 's', 'ʂ': 's', 'ᵴ': 's', 'ᶊ': 's', 'ȿ': 's', 'ß': 'ss', 'ɡ': 'g', 'ᴑ': 'o', 'ᴓ': 'o', 'ᴝ': 'u', 'ť': 't', 'ţ': 't', 'ṱ': 't', 'ț': 't', 'ȶ': 't', 'ẗ': 't', 'ⱦ': 't', 'ṫ': 't', 'ṭ': 't', 'ƭ': 't', 'ṯ': 't', 'ᵵ': 't', 'ƫ': 't', 'ʈ': 't', 'ŧ': 't', 'ᵺ': 'th', 'ɐ': 'a', 'ᴂ': 'ae', 'ǝ': 'e', 'ᵷ': 'g', 'ɥ': 'h', 'ʮ': 'h', 'ʯ': 'h', 'ᴉ': 'i', 'ʞ': 'k', 'ꞁ': 'l', 'ɯ': 'm', 'ɰ': 'm', 'ᴔ': 'oe', 'ɹ': 'r', 'ɻ': 'r', 'ɺ': 'r', 'ⱹ': 'r', 'ʇ': 't', 'ʌ': 'v', 'ʍ': 'w', 'ʎ': 'y', 'ꜩ': 'tz', 'ú': 'u', 'ŭ': 'u', 'ǔ': 'u', 'û': 'u', 'ṷ': 'u', 'ü': 'u', 'ǘ': 'u', 'ǚ': 'u', 'ǜ': 'u', 'ǖ': 'u', 'ṳ': 'u', 'ụ': 'u', 'ű': 'u', 'ȕ': 'u', 'ù': 'u', 'ủ': 'u', 'ư': 'u', 'ứ': 'u', 'ự': 'u', 'ừ': 'u', 'ử': 'u', 'ữ': 'u', 'ȗ': 'u', 'ū': 'u', 'ṻ': 'u', 'ų': 'u', 'ᶙ': 'u', 'ů': 'u', 'ũ': 'u', 'ṹ': 'u', 'ṵ': 'u', 'ᵫ': 'ue', 'ꝸ': 'um', 'ⱴ': 'v', 'ꝟ': 'v', 'ṿ': 'v', 'ʋ': 'v', 'ᶌ': 'v', 'ⱱ': 'v', 'ṽ': 'v', 'ꝡ': 'vy', 'ẃ': 'w', 'ŵ': 'w', 'ẅ': 'w', 'ẇ': 'w', 'ẉ': 'w', 'ẁ': 'w', 'ⱳ': 'w', 'ẘ': 'w', 'ẍ': 'x', 'ẋ': 'x', 'ᶍ': 'x', 'ý': 'y', 'ŷ': 'y', 'ÿ': 'y', 'ẏ': 'y', 'ỵ': 'y', 'ỳ': 'y', 'ƴ': 'y', 'ỷ': 'y', 'ỿ': 'y', 'ȳ': 'y', 'ẙ': 'y', 'ɏ': 'y', 'ỹ': 'y', 'ź': 'z', 'ž': 'z', 'ẑ': 'z', 'ʑ': 'z', 'ⱬ': 'z', 'ż': 'z', 'ẓ': 'z', 'ȥ': 'z', 'ẕ': 'z', 'ᵶ': 'z', 'ᶎ': 'z', 'ʐ': 'z', 'ƶ': 'z', 'ɀ': 'z', 'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl', 'ij': 'ij', 'œ': 'oe', 'st': 'st', 'ₐ': 'a', 'ₑ': 'e', 'ᵢ': 'i', 'ⱼ': 'j', 'ₒ': 'o', 'ᵣ': 'r', 'ᵤ': 'u', 'ᵥ': 'v', 'ₓ': 'x' };\n\n\t\t\treturn text.toString().replace(/[\\u007F-\\uFFFF]/g, function(key) {\n\t\t\t\treturn diacriticsMap[key] || key;\n\t\t\t});\n\t\t},\n\t\ttextHighlight: function( text, term ) {\n\t\t\tif ( text === undefined ) {\n\t\t\t\ttext = \"\";\n\t\t\t}\n\t\t\tvar markup = \"\";\n\t\t\tvar remove_diacritics = pf.select2.base.prototype.removeDiacritics;\n\t\t\tvar no_diac_text = remove_diacritics(text);\n\t\t\tvar no_diac_term = remove_diacritics(term);\n\t\t\tvar start = no_diac_text.toUpperCase().indexOf(no_diac_term.toString().toUpperCase());\n\t\t\tif ( start !== 0 && !mw.config.get( 'wgPageFormsAutocompleteOnAllChars' ) ) {\n\t\t\t\tstart = no_diac_text.toUpperCase().indexOf(\" \" + no_diac_term.toString().toUpperCase());\n\t\t\t\tif ( start !== -1 ) {\n\t\t\t\t\tstart = start + 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( start !== -1 ) {\n\t\t\t\tvar boldStart = String.fromCharCode(1);\n\t\t\t\tvar boldEnd = String.fromCharCode(2);\n\t\t\t\tmarkup = text.slice(0, Math.max(0, start)) + boldStart +\n\t\t\t\t\ttext.substr(start,term.length) + boldEnd +\n\t\t\t\t\ttext.substr(start + term.length, text.length);\n\t\t\t} else {\n\t\t\t\tmarkup = (text);\n\t\t\t}\n\t\t\treturn markup;\n\t\t},\n\t};\n}( jQuery, mediaWiki, pageforms ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/libs/ext.pf.select2.tokens.js","messages":[{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":88,"column":11,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":88,"endColumn":20},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":287,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":287,"endColumn":22},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":287,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":287,"endColumn":22}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*\n * ext.pf.select2.tokens.js\n *\n * JavaScript utility class to handle autocomplete\n * for tokens input type using Select2 JS library\n *\n * @file\n *\n * @licence GNU GPL v2+\n * @author Jatin Mehta\n * @author Yaron Koren\n * @author Priyanshu Varshney\n */\n\n( function( $, mw, pf ) {\n\t'use strict';\n\n\t/**\n\t * Inheritance class for the pf.select2 constructor\n\t *\n\t * @class\n\t */\n\tpf.select2 = pf.select2 || {};\n\n\t/**\n\t * @class\n\t * @constructor\n\t */\n\tpf.select2.tokens = function() {\n\n\t};\n\n\tvar tokens_proto = new pf.select2.base();\n\n\t/*\n\t * Applies select2 to the HTML element\n\t *\n\t * @param {HTMLElement} element\n\t *\n\t */\n\ttokens_proto.apply = function( element ) {\n\t\tvar existingValuesOnly = (element.attr(\"existingvaluesonly\") == \"true\");\n\t\tthis.existingValuesOnly = existingValuesOnly;\n\t\tthis.id = element.attr( \"id\" );\n\t\tvar inputData,\n\t\t\t$input;\n\n\t\t// This happens sometimes, although it shouldn't. If it does,\n\t\t// something went wrong, so just exit.\n\t\tif ( this.id == undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tvar opts = this.setOptions();\n\t\t\t$input = element.select2(opts);\n\t\t\tinputData = $input.data(\"select2\");\n\t\t} catch (e) {\n\t\t\twindow.console.log(e);\n\t\t}\n\n\t\t// Make the tokens sortable, using the SortableJS library.\n\t\tvar tokensUL = element.parent().find('ul.select2-selection__rendered');\n\t\tvar tokensSelect = element.parents('span.inputSpan').find('select');\n\t\tvar sortable = Sortable.create(tokensUL[0], {\n\t\t\tghostClass: 'pfTokensGhost',\n\n\t\t\t// Somewhat of a @HACK - the tokens are stored in two\n\t\t\t// places in the DOM, a <ul> tag (which is displayed)\n\t\t\t// and a <select> tag (which is what gets submitted).\n\t\t\t// SortableJS only handles the first of these, so when\n\t\t\t// a rearrange is done, we rearrange the <select> layout\n\t\t\t// to match what's in the <ul>.\n\t\t\t// Is there a simpler way to do this?\n\t\t\tonEnd: function(event, dragEvent) {\n\t\t\t\tvar newTokensOrder = [];\n\t\t\t\ttokensUL.find('li.select2-selection__choice').not('.sortable-ghost').each( function() {\n\t\t\t\t\t// Remove the \"x\" from the beginning of\n\t\t\t\t\t// the string.\n\t\t\t\t\tnewTokensOrder.push($(this).text().slice(1));\n\t\t\t\t});\n\t\t\t\tvar dropdownItems = {};\n\t\t\t\ttokensSelect.find('option').each( function() {\n\t\t\t\t\tvar optionName = $(this).text();\n\t\t\t\t\tdropdownItems[optionName] = $(this);\n\t\t\t\t} );\n\t\t\t\ttokensSelect.prepend(dropdownItems[newTokensOrder[0]]);\n\t\t\t\tfor ( let i = 1; i < newTokensOrder.length; i++ ){\n\t\t\t\t\tdropdownItems[newTokensOrder[i]].insertAfter(dropdownItems[newTokensOrder[i - 1]]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Make sure that entries added with \"local autocompletion\"\n\t\t// show up in the order they were entered, not alphabetical\n\t\t// order.\n\t\t// Copied from https://github.com/select2/select2/issues/3106#issuecomment-234702241\n\t\telement.on(\"select2:select\", function (evt) {\n\t\t\tvar elem = evt.params.data.element;\n\n\t\t\tif( !elem ) {\n\t\t\t\tvar data = $(element).select2('data');\n\t\t\t\telem = data.filter(function(obj) {\n\t\t\t\t\treturn obj.id === evt.params.data.id\n\t\t\t\t});\n\t\t\t\tif( !elem.length || !elem[0] || typeof elem[0].element == 'undefined' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telem = elem[0].element;\n\t\t\t}\n\n\t\t\tvar $element = $(elem);\n\n\t\t\t$element.detach();\n\t\t\t$(this).append($element);\n\t\t\t$(this).trigger(\"change\");\n\t\t\t// In order for this selection to truly \"take\", the\n\t\t\t// full input needs to be clicked on, for some reason.\n\t\t\t// We click on it *twice*, though, to get rid of the\n\t\t\t// \"Please enter...\" message.\n\t\t\t// There's probably a less hacky way to accomplish this.\n\t\t\t$(this).parent().find('span.select2-selection').click().click();\n\t\t});\n\n\t\t$(inputData.$container[0]).on(\"keyup\",function(e){\n\t\t\tif( existingValuesOnly ){\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif( e.keyCode === 9 ){\n\t\t\t\tvar rawValue = \"\";\n\t\t\t\tvar checkIfPresent = false;\n\t\t\t\tvar valHighlighted = inputData.$results.find('.select2-results__option--highlighted')[0];\n\t\t\t\tif( valHighlighted !== undefined ){\n\t\t\t\t\trawValue = valHighlighted.textContent;\n\t\t\t\t}\n\t\t\t\tvar newValue = $.grep(inputData.val(), function (value) {\n\t\t\t\t\tif( value === rawValue ){\n\t\t\t\t\t\tcheckIfPresent = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn value !== rawValue;\n\t\t\t\t});\n\t\t\t\tif( checkIfPresent === false && rawValue !== \"\" ) {\n\t\t\t\t\tnewValue.push(rawValue);\n\t\t\t\t}\n\t\t\t\tif ( !$input.find( \"option[value='\" + rawValue + \"']\" ).length ) {\n\t\t\t\t\tvar newOption = new Option( rawValue, rawValue, false, false );\n\t\t\t\t\t$input.append(newOption).trigger( 'change' );\n\t\t\t\t}\n\t\t\t\t$input.val( newValue ).trigger( 'change' );\n\t\t\t}\n\t\t});\n\t\tif ( element.attr( \"existingvaluesonly\" ) !== \"true\" ) {\n\t\t\telement.parent().on( \"dblclick\", \"li.select2-selection__choice\", function ( event ) {\n\t\t\t\tvar $target = $(event.target);\n\t\t\t\t// If the target element is the span within li then change it to the parent li\n\t\t\t\tif ( $target.is( $(\"span.select2-match-entire\") ) ) {\n\t\t\t\t\t$target = $target.parent();\n\t\t\t\t}\n\t\t\t\t// get the text and id of the clicked value\n\t\t\t\tvar targetData = $target.data();\n\t\t\t\tvar clickedValue = $target[0].title;\n\t\t\t\tvar clickedValueId = targetData.select2Id;\n\n\t\t\t\t// remove that value from select2 selection\n\t\t\t\tvar newValue = $.grep(inputData.val(), function (value) {\n\t\t\t\t\treturn value !== clickedValue;\n\t\t\t\t});\n\t\t\t\t$input.val(newValue).trigger(\"change\");\n\n\t\t\t\t// set the currently entered text to equal the clicked value\n\t\t\t\tinputData.$container.find(\".select2-search__field\").val(clickedValue).trigger(\"input\").focus();\n\t\t\t} );\n\t\t}\n\t\tvar $loadingIcon = $( '<img src = \"' + mw.config.get( 'wgPageFormsScriptPath' ) + '/skins/loading.gif'\n\t\t+ '\" id=\"loading-' + this.id + '\">' );\n\t\t$loadingIcon.hide();\n\t\t$( '#' + element.attr('id') ).parent().append( $loadingIcon );\n\t};\n\t/*\n\t * Returns options to be set by select2\n\t *\n\t * @return {object} opts\n\t *\n\t */\n\ttokens_proto.setOptions = function() {\n\t\tvar self = this;\n\t\tvar input_id = this.id;\n\t\tvar opts = {};\n\t\topts.language = {};\n\t\tinput_id = \"#\" + input_id;\n\t\tvar input_tagname = $(input_id).prop( \"tagName\" );\n\t\tvar autocomplete_opts = this.getAutocompleteOpts();\n\t\topts.escapeMarkup = function (m) {\n\t\t\treturn self.escapeMarkupAndAddHTML(m);\n\t\t};\n\t\tif ( autocomplete_opts.autocompletedatatype !== undefined ) {\n\t\t\topts.ajax = this.getAjaxOpts();\n\t\t\topts.minimumInputLength = 1;\n\t\t\topts.language.inputTooShort = function() {\n\t\t\t\treturn mw.msg( \"pf-autocomplete-input-too-short\", opts.minimumInputLength );\n\t\t\t};\n\t\t} else if ( input_tagname === \"SELECT\" ) {\n\t\t\topts.data = this.getData( autocomplete_opts.autocompletesettings );\n\t\t}\n\t\tvar wgPageFormsAutocompleteOnAllChars = mw.config.get( 'wgPageFormsAutocompleteOnAllChars' );\n\t\tif ( !wgPageFormsAutocompleteOnAllChars ) {\n\t\t\topts.matcher = function( term, text ) {\n\t\t\t\tvar folded_term = pf.select2.base.prototype.removeDiacritics( term.term ).toUpperCase();\n\t\t\t\tvar folded_text = pf.select2.base.prototype.removeDiacritics( text.text ).toUpperCase();\n\t\t\t\tvar position = folded_text.indexOf(folded_term);\n\t\t\t\tvar position_with_space = folded_text.indexOf(\" \" + folded_term);\n\t\t\t\tif ( (position !== -1 && position === 0 ) || position_with_space !== -1 ) {\n\t\t\t\t\treturn text;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\topts.templateResult = function( result ) {\n\t\t\tvar term = \"\";\n\t\t\tvar inputData = $( input_id ).data(\"select2\");\n\t\t\tif ( inputData.results.lastParams !== undefined ){\n\t\t\t\tterm = inputData.results.lastParams.term;\n\t\t\t}\n\t\t\tif ( term === \"\" || term === undefined ) {\n\t\t\t\tterm = inputData.$dropdown[0].textContent;\n\t\t\t}\n\t\t\tif ( term === \"\" || term === undefined ) {\n\t\t\t\tvar htmlElements = inputData.$selection[0].children[0].children;\n\t\t\t\tterm = htmlElements[htmlElements.length - 1].children[0].value;\n\t\t\t}\n\t\t\treturn pf.select2.base.prototype.textHighlight( result.id, term );\n\t\t};\n\t\topts.language.searching = function() {\n\t\t\treturn mw.msg( \"pf-autocomplete-searching\" );\n\t\t};\n\t\topts.placeholder = $(input_id).attr( \"placeholder\" );\n\n\t\tvar size = $(input_id).attr(\"data-size\");\n\t\tif ( size === undefined ) {\n\t\t\tsize = '100'; //default value\n\t\t}\n\t\topts.containerCss = { 'min-width': size };\n\t\topts.containerCssClass = 'pf-select2-container';\n\t\topts.dropdownCssClass = 'pf-select2-dropdown';\n\t\tif( !this.existingValuesOnly ){\n\t\t\topts.tags = true;\n\t\t}\n\t\topts.multiple = true;\n\t\topts.width= NaN; // A helpful way to expand tokenbox horizontally\n\t\topts.tokenSeparators = this.getDelimiter($(input_id));\n\t\tvar maxvalues = $(input_id).attr( \"maxvalues\" );\n\t\tif ( maxvalues !== undefined ) {\n\t\t\topts.maximumSelectionLength = maxvalues;\n\t\t\topts.language.maximumSelected = function() {\n\t\t\t\treturn mw.msg( \"pf-autocomplete-selection-too-big\", maxvalues );\n\t\t\t};\n\t\t}\n\t\t// opts.selectOnClose = true;\n\t\topts.adaptContainerCssClass = function( clazz ) {\n\t\t\tif (clazz === \"mandatoryField\") {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn clazz;\n\t\t\t}\n\t\t};\n\n\t\treturn opts;\n\t};\n\n\t/*\n\t * Returns data to be used by select2 for tokens autocompletion\n\t *\n\t * @param {string} autocompletesettings\n\t * @return {associative array} values\n\t *\n\t */\n\ttokens_proto.getData = function( autocompletesettings ) {\n\t\tvar input_id = \"#\" + this.id;\n\t\tvar values = [];\n\t\tvar i, data;\n\t\tvar dep_on = this.dependentOn();\n\t\tif ( dep_on === null ) {\n\t\t\tif ( autocompletesettings === 'external data' ) {\n\t\t\t\tvar name = $(input_id).attr(this.nameAttr($(input_id)));\n\t\t\t\t// Remove the final \"[]\".\n\t\t\t\tif (name.includes('[]')) {\n\t\t\t\t\tname = name.slice(0, Math.max(0, name.length - 2));\n\t\t\t\t}\n\t\t\t\tvar wgPageFormsEDSettings = mw.config.get( 'wgPageFormsEDSettings' );\n\t\t\t\tvar edgValues = mw.config.get( 'edgValues' );\n\t\t\t\tdata = {};\n\t\t\t\tif ( wgPageFormsEDSettings[name].title !== undefined && wgPageFormsEDSettings[name].title !== \"\" ) {\n\t\t\t\t\tdata.title = edgValues[wgPageFormsEDSettings[name].title];\n\t\t\t\t\tif ( data.title !== undefined && data.title !== null ) {\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tdata.title.forEach(function() {\n\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\tid: data.title[i], text: data.title[i]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif ( wgPageFormsEDSettings[name].image !== undefined && wgPageFormsEDSettings[name].image !== \"\" ) {\n\t\t\t\t\t\tdata.image = edgValues[wgPageFormsEDSettings[name].image];\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tif ( data.image !== undefined && data.image !== null ) {\n\t\t\t\t\t\t\tdata.image.forEach(function() {\n\t\t\t\t\t\t\t\tvalues[i].image = data.image[i];\n\t\t\t\t\t\t\t\ti++;\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\tif ( wgPageFormsEDSettings[name].description !== undefined && wgPageFormsEDSettings[name].description !== \"\" ) {\n\t\t\t\t\t\tdata.description = edgValues[wgPageFormsEDSettings[name].description];\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tif ( data.description !== undefined && data.description !== null ) {\n\t\t\t\t\t\t\tdata.description.forEach(function() {\n\t\t\t\t\t\t\t\tvalues[i].description = data.description[i];\n\t\t\t\t\t\t\t\ti++;\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\n\t\t\t} else {\n\t\t\t\tvar wgPageFormsAutocompleteValues = mw.config.get( 'wgPageFormsAutocompleteValues' );\n\t\t\t\tdata = wgPageFormsAutocompleteValues[autocompletesettings];\n\t\t\t\t//Convert data into the format accepted by Select2\n\t\t\t\tif ( data !== undefined && data !== null ) {\n\t\t\t\t\tfor (var key in data) {\n\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\tid: data[key], text: data[key]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else { // Dependent field autocompletion\n\t\t\tvar dep_field_opts = this.getDependentFieldOpts( dep_on );\n\t\t\tvar my_server = mw.config.get( 'wgScriptPath' ) + \"/api.php\";\n\t\t\tmy_server += \"?action=pfautocomplete&format=json&property=\" + dep_field_opts.prop +\n\t\t\t\t\"&baseprop=\" + dep_field_opts.base_prop + \"&basevalue=\" + dep_field_opts.base_value;\n\t\t\t$.ajax({\n\t\t\t\turl: my_server,\n\t\t\t\tdataType: 'json',\n\t\t\t\tasync: false,\n\t\t\t\tsuccess: function(value) {\n\t\t\t\t\t// Convert data into the format accepted by Select2.\n\t\t\t\t\tvalue.pfautocomplete.forEach( function(item) {\n\t\t\t\t\t\tif (item.displaytitle !== undefined) {\n\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\tid: item.displaytitle, text: item.displaytitle\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalues.push({\n\t\t\t\t\t\t\t\tid: item.title, text: item.title\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\treturn values;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn values;\n\t};\n\n\t/*\n\t * Returns ajax options to be used by select2 for\n\t * remote autocompletion of tokens\n\t *\n\t * @return {object} ajaxOpts\n\t *\n\t */\n\ttokens_proto.getAjaxOpts = function() {\n\t\tvar input_id = this.id;\n\t\tvar autocomplete_opts = this.getAutocompleteOpts();\n\t\tvar data_source = autocomplete_opts.autocompletesettings.split(',')[0];\n\t\tvar my_server = mw.util.wikiScript( 'api' );\n\t\tvar autocomplete_type = autocomplete_opts.autocompletedatatype;\n\t\tif ( autocomplete_type === 'cargo field' ) {\n\t\t\tvar table_and_field = data_source.split('|');\n\t\t\tmy_server += \"?action=pfautocomplete&format=json&cargo_table=\" + table_and_field[0] + \"&cargo_field=\" + table_and_field[1];\n\t\t\tif ( table_and_field.length > 2 ) {\n\t\t\t\tmy_server += '&cargo_where=' + table_and_field[2];\n\t\t\t}\n\t\t} else {\n\t\t\tmy_server += \"?action=pfautocomplete&format=json&\" +\n\t\t\t\tautocomplete_opts.autocompletedatatype + \"=\" +\n\t\t\t\tencodeURIComponent( data_source );\n\t\t}\n\n\t\tvar ajaxOpts = {\n\t\t\turl: my_server,\n\t\t\tdataType: 'json',\n\t\t\tdata: function (term) {\n\t\t\t\t$( '#loading-' + input_id ).show();\n\t\t\t\tvar reqParams = { substr: term.term }; // search term\n\t\t\t\tif ( autocomplete_type === 'wikidata' ) {\n\t\t\t\t\t// Support for getting query values from an existing field in the form\n\t\t\t\t\tvar dsource_copy = data_source;\n\t\t\t\t\tvar terms = dsource_copy.split( \"&\" );\n\t\t\t\t\tterms.forEach( function(element) {\n\t\t\t\t\t\tvar subTerms = element.split( \"=\" );\n\t\t\t\t\t\tvar matches = subTerms[1].match( /\\[(.*?)\\]/ );\n\t\t\t\t\t\tif ( matches ) {\n\t\t\t\t\t\t\tvar dep_value = $( '[name=\"' + subTerms[1] + '\"]' ).val();\n\t\t\t\t\t\t\tif ( dep_value && dep_value.trim().length ) {\n\t\t\t\t\t\t\t\tdsource_copy = dsource_copy.replace( subTerms[1], dep_value );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\treqParams[ 'wikidata' ] = dsource_copy;\n\t\t\t\t}\n\t\t\t\treturn reqParams;\n\t\t\t},\n\t\t\tprocessResults: function (data) { // parse the results into the format expected by Select2.\n\t\t\t\tif (data.pfautocomplete !== undefined) {\n\t\t\t\t\t$( '#loading-' + input_id ).hide();\n\t\t\t\t\tdata.pfautocomplete.forEach( function(item) {\n\t\t\t\t\t\tif (item.displaytitle !== undefined) {\n\t\t\t\t\t\t\tvar displayTitle;\n\t\t\t\t\t\t\tif (item.title === item.displaytitle) {\n\t\t\t\t\t\t\t\tdisplayTitle = item.title;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar containsTitleInParentheses = item.displaytitle.indexOf(\"(\" + item.title + \")\") !== -1;\n\t\t\t\t\t\t\t\tdisplayTitle = containsTitleInParentheses\n\t\t\t\t\t\t\t\t\t? item.displaytitle\n\t\t\t\t\t\t\t\t\t: item.displaytitle + \" (\" + item.title + \")\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\titem.text = displayTitle;\n\t\t\t\t\t\t\titem.id = displayTitle\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.text = item.title;\n\t\t\t\t\t\t\titem.id = item.title;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn {results: data.pfautocomplete};\n\t\t\t\t} else {\n\t\t\t\t\treturn {results: []};\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn ajaxOpts;\n\t};\n\n\t/*\n\t * Returns delimiter for the token field\n\t *\n\t * @return {string} delimiter\n\t *\n\t */\n\ttokens_proto.getDelimiter = function ( element ) {\n\t\tvar autoCompleteSettingsIntermediate;\n\t\tif(element.attr('autocompletesettings') === undefined){\n\t\t\tvar tokenId = element.prevObject[0].firstElementChild.id;\n\t\t\tautoCompleteSettingsIntermediate = $('#'+tokenId).attr('autocompletesettings');\n\t\t} else {\n\t\t\tautoCompleteSettingsIntermediate = element.attr('autocompletesettings');\n\t\t}\n\t\tvar field_values = autoCompleteSettingsIntermediate.split( ',' );\n\t\tvar delimiter = \",\";\n\t\tif (field_values[1] === 'list' && field_values[2] !== undefined && field_values[2] !== \"\") {\n\t\t\tdelimiter = field_values[2];\n\t\t}\n\n\t\treturn delimiter;\n\t};\n\n\tpf.select2.tokens.prototype = tokens_proto;\n\n}( jQuery, mediaWiki, pageforms ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]}]}]

--- end ---
$ ./node_modules/.bin/banana-checker --autofix=true i18n
--- stdout ---
Checked 1 message directory.

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

added 314 packages, and audited 315 packages in 3s

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

1 high severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

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

> test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/libs/PF_AutoEditRating.js
   63:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  113:21  warning  '$' is already declared in the upper scope on line 1 column 13                no-shadow

/src/repo/libs/PF_AutocompleteWidget.js
  139:18  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/PF_ComboBoxInput.js
  120:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  136:51  warning  ES2015 default parameters are forbidden                                       es-x/no-default-parameters
  149:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  231:13  warning  'optionVal' is already declared in the upper scope on line 308 column 12      no-shadow
  232:13  warning  'optionLabel' is already declared in the upper scope on line 309 column 12    no-shadow
  307:12  warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  541:18  warning  Prefer `String#slice()` over `String#substr()`                                unicorn/prefer-string-slice
  550:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  555:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables

/src/repo/libs/PF_FullCalendar.js
   124:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   124:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   128:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   128:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   132:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   132:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   157:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   157:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   161:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   161:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   165:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   165:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   172:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   172:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   176:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   176:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   180:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   180:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   270:9   warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   270:9   warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   272:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   272:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   279:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   279:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   281:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   281:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   290:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   290:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   299:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   299:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   308:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   308:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   623:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
   754:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   754:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   764:18  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   764:18  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   771:52  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   771:52  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   779:54  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   779:54  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   780:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   780:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   790:51  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   790:51  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   791:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   791:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   826:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  1083:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1083:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1084:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1084:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1086:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1086:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1088:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1088:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1124:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1124:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1125:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1125:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1127:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1127:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1129:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1129:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1131:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1131:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1133:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1133:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1135:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1135:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1137:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1137:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:71  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:71  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1171:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1171:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes

/src/repo/libs/PF_SpreadsheetAutocompleteWidget.js
  114:9   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  131:5   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  135:21  warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  135:21  warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes
  177:17  warning  Prefer `String#slice()` over `String#substr()`          unicorn/prefer-string-slice

/src/repo/libs/PF_SpreadsheetComboBoxInput.js
   54:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
   56:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
  108:23  warning  'data' is already declared in the upper scope on line 46 column 4               no-shadow
  114:13  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:37  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:62  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  130:1   warning  Missing JSDoc @return type                                                      jsdoc/require-returns-type
  145:17  warning  Prefer `String#slice()` over `String#substr()`                                  unicorn/prefer-string-slice
  183:9   warning  ES2016 'Array.prototype.includes' method is forbidden                           es-x/no-array-prototype-includes
  183:9   warning  ES2015 'String.prototype.includes' method is forbidden                          es-x/no-string-prototype-includes
  189:1   warning  The type 'integer' is undefined                                                 jsdoc/no-undefined-types
  196:2   warning  jQuery collection names must match the variablePattern                          no-jquery/variable-pattern

/src/repo/libs/PF_autoedit.js
  15:16  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  83:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  95:38  warning  '$' is already declared in the upper scope on line 9 column 13                no-shadow

/src/repo/libs/PF_checkboxes.js
   4:1   warning  Missing JSDoc @param "$" type                                   jsdoc/require-param-type
   5:1   warning  Missing JSDoc @param "mw" type                                  jsdoc/require-param-type
  49:24  warning  '$' is already declared in the upper scope on line 9 column 14  no-shadow

/src/repo/libs/PF_collapsible.js
  30:8  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datepicker.js
   4:1  warning  Missing JSDoc @param "$" type                                                 jsdoc/require-param-type
   5:1  warning  Missing JSDoc @param "oo" type                                                jsdoc/require-param-type
   6:1  warning  Missing JSDoc @param "mw" type                                                jsdoc/require-param-type
   7:1  warning  Missing JSDoc @param "pf" type                                                jsdoc/require-param-type
  18:9  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datetimepicker.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "oo" type  jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_editWarning.js
  32:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  61:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_formInput.js
    6:1  warning  Missing JSDoc @param "$" type                jsdoc/require-param-type
    7:1  warning  Missing JSDoc @param "mw" type               jsdoc/require-param-type
   21:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
   78:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
   82:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
  106:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_imagePreview.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_maps.js
  201:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  208:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  209:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  210:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  262:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  263:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  264:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_popupform.js
  373:3   warning  jQuery collection names must match the variablePattern                        no-jquery/variable-pattern
  646:3   warning  ES2024 Resizable ArrayBuffer is forbidden                                     es-x/no-resizable-and-growable-arraybuffers
  757:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  771:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_preview.js
  56:3  warning  ES2024 Resizable ArrayBuffer is forbidden  es-x/no-resizable-and-growable-arraybuffers

/src/repo/libs/PF_rating.js
  43:4  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_simpleupload.js
  5:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_spreadsheet.js
   10:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   11:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   12:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   13:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   14:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   15:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   16:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   17:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   72:11  warning  ES2016 'Array.prototype.includes' method is forbidden                       es-x/no-array-prototype-includes
   72:11  warning  ES2015 'String.prototype.includes' method is forbidden                      es-x/no-string-prototype-includes
  394:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  440:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:6   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:11  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  692:7   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  692:12  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  753:10  warning  'columnParams' is already declared in the upper scope on line 855 column 9  no-shadow
  865:28  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  869:6   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  930:25  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  935:4   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle

/src/repo/libs/PF_submit.js
  141:46  warning  Prefer `String#slice()` over `String#substring()`                   unicorn/prefer-string-slice
  174:8   warning  '$form' is already declared in the upper scope on line 14 column 6  no-shadow

/src/repo/libs/PF_timepicker.js
  62:9  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_tree.js
  6:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  8:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_upload.js
  56:41  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PageForms.js
   199:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   230:19  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   241:9   warning  Selector extensions are not allowed                                                  no-jquery/no-sizzle
   406:61  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   413:58  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   770:9   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   770:9   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   771:5   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   771:5   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   834:6   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
   843:7   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
  1014:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1015:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1021:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1022:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1112:11  warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
  1112:11  warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
  1118:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1225:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1226:8   warning  ES2015 block-scoped variables are forbidden                                          es-x/no-block-scoped-variables
  1239:1   warning  JSDoc @return declaration present but return expression not available in function    jsdoc/require-returns-check
  1258:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1262:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1536:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1648:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1655:8   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1931:30  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1944:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1948:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1953:7   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state

/src/repo/libs/ext.pf.select2.base.js
   72:6  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
   92:8  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
  317:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice
  318:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/ext.pf.select2.tokens.js
   88:11  warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  287:9   warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  287:9   warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes

✖ 217 problems (0 errors, 217 warnings)


Running "banana:all" (banana) task
>> 1 message directory checked.

Done.

--- end ---
Upgrading c:mediawiki/minus-x from 1.1.1 -> 1.1.3
Upgrading c:mediawiki/mediawiki-phan-config from 0.12.1 -> 0.14.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 8 updates, 1 removal
  - Removing symfony/polyfill-php73 (v1.30.0)
  - Upgrading mediawiki/mediawiki-phan-config (0.12.1 => 0.14.0)
  - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3)
  - Upgrading mediawiki/phan-taint-check-plugin (4.0.0 => 6.0.0)
  - Upgrading microsoft/tolerant-php-parser (v0.1.1 => v0.1.2)
  - Upgrading phan/phan (5.4.1 => 5.4.3)
  - Upgrading psr/log (2.0.0 => 3.0.0)
  - Upgrading symfony/console (v5.4.41 => v7.1.2)
  - Upgrading symfony/string (v6.4.9 => v7.1.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 8 updates, 1 removal
    0 [>---------------------------]    0 [->--------------------------]
  - Removing symfony/polyfill-php73 (v1.30.0)
  - Upgrading symfony/string (v6.4.9 => v7.1.2): Extracting archive
  - Upgrading symfony/console (v5.4.41 => v7.1.2): Extracting archive
  - Upgrading microsoft/tolerant-php-parser (v0.1.1 => v0.1.2): Extracting archive
  - Upgrading psr/log (2.0.0 => 3.0.0): Extracting archive
  - Upgrading phan/phan (5.4.1 => 5.4.3): Extracting archive
  - Upgrading mediawiki/phan-taint-check-plugin (4.0.0 => 6.0.0): Extracting archive
  - Upgrading mediawiki/mediawiki-phan-config (0.12.1 => 0.14.0): Extracting archive
  - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3): Extracting archive
 0/8 [>---------------------------]   0%
 7/8 [========================>---]  87%
 8/8 [============================] 100%
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
--- stdout ---

--- end ---
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude vendor --exclude node_modules
> minus-x check .
> phpcs -p -s .
--- stdout ---
PHP 8.2.7 | 10 parallel jobs
............................................................ 60/89 ( 67%)
.............................                                89/89 (100%)


Checked 89 files in 0.4 seconds
No syntax error found
MinusX
======
Processing /src/repo...
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
........................................
All good!
............................................. 45 / 45 (100%)


Time: 2.14 secs; Memory: 8MB


--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "braces": {
      "name": "braces",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098094,
          "name": "braces",
          "dependency": "braces",
          "title": "Uncontrolled resource consumption in braces",
          "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1050"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.0.3"
        }
      ],
      "effects": [],
      "range": "<3.0.3",
      "nodes": [
        "node_modules/braces"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 1,
      "critical": 0,
      "total": 1
    },
    "dependencies": {
      "prod": 1,
      "dev": 314,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 314
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---
{
  "added": 0,
  "removed": 0,
  "changed": 2,
  "audited": 315,
  "funding": 58,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "braces": {
        "name": "braces",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1098094,
            "name": "braces",
            "dependency": "braces",
            "title": "Uncontrolled resource consumption in braces",
            "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
            "severity": "high",
            "cwe": [
              "CWE-400",
              "CWE-1050"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<3.0.3"
          }
        ],
        "effects": [],
        "range": "<3.0.3",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 0,
        "high": 1,
        "critical": 0,
        "total": 1
      },
      "dependencies": {
        "prod": 1,
        "dev": 314,
        "optional": 0,
        "peer": 1,
        "peerOptional": 0,
        "total": 314
      }
    }
  }
}

--- end ---
{"added": 0, "removed": 0, "changed": 2, "audited": 315, "funding": 58, "audit": {"auditReportVersion": 2, "vulnerabilities": {"braces": {"name": "braces", "severity": "high", "isDirect": false, "via": [{"source": 1098094, "name": "braces", "dependency": "braces", "title": "Uncontrolled resource consumption in braces", "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg", "severity": "high", "cwe": ["CWE-400", "CWE-1050"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<3.0.3"}], "effects": [], "range": "<3.0.3", "nodes": [""], "fixAvailable": true}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 0, "high": 1, "critical": 0, "total": 1}, "dependencies": {"prod": 1, "dev": 314, "optional": 0, "peer": 1, "peerOptional": 0, "total": 314}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---

up to date, audited 315 packages in 863ms

58 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 ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stdout ---

added 314 packages, and audited 315 packages in 4s

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

found 0 vulnerabilities

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

> test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/libs/PF_AutoEditRating.js
   63:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  113:21  warning  '$' is already declared in the upper scope on line 1 column 13                no-shadow

/src/repo/libs/PF_AutocompleteWidget.js
  139:18  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/PF_ComboBoxInput.js
  120:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  136:51  warning  ES2015 default parameters are forbidden                                       es-x/no-default-parameters
  149:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  231:13  warning  'optionVal' is already declared in the upper scope on line 308 column 12      no-shadow
  232:13  warning  'optionLabel' is already declared in the upper scope on line 309 column 12    no-shadow
  307:12  warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  541:18  warning  Prefer `String#slice()` over `String#substr()`                                unicorn/prefer-string-slice
  550:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  555:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables

/src/repo/libs/PF_FullCalendar.js
   124:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   124:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   128:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   128:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   132:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   132:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   157:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   157:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   161:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   161:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   165:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   165:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   172:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   172:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   176:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   176:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   180:19  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   180:19  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   270:9   warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   270:9   warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   272:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   272:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   279:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   279:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   281:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   281:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   290:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   290:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   299:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   299:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   308:17  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   308:17  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   623:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
   754:11  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   754:11  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   764:18  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   764:18  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   771:52  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   771:52  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   779:54  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   779:54  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   780:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   780:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   790:51  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   790:51  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   791:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
   791:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
   826:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  1083:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1083:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1084:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1084:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1086:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1086:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1088:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1088:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1124:12  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1124:12  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1125:13  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1125:13  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1127:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1127:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1129:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1129:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1131:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1131:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1133:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1133:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1135:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1135:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1137:20  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1137:20  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1157:71  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1157:71  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes
  1171:14  warning  ES2016 'Array.prototype.includes' method is forbidden                         es-x/no-array-prototype-includes
  1171:14  warning  ES2015 'String.prototype.includes' method is forbidden                        es-x/no-string-prototype-includes

/src/repo/libs/PF_SpreadsheetAutocompleteWidget.js
  114:9   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  131:5   warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  135:21  warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  135:21  warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes
  177:17  warning  Prefer `String#slice()` over `String#substr()`          unicorn/prefer-string-slice

/src/repo/libs/PF_SpreadsheetComboBoxInput.js
   54:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
   56:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 54 column 11 is used outside of binding context  block-scoped-var
   58:11  warning  'valueFilter' declared on line 56 column 11 is used outside of binding context  block-scoped-var
  108:23  warning  'data' is already declared in the upper scope on line 46 column 4               no-shadow
  114:13  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  114:37  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:20  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  116:62  warning  'i' declared on line 50 column 9 is used outside of binding context             block-scoped-var
  130:1   warning  Missing JSDoc @return type                                                      jsdoc/require-returns-type
  145:17  warning  Prefer `String#slice()` over `String#substr()`                                  unicorn/prefer-string-slice
  183:9   warning  ES2016 'Array.prototype.includes' method is forbidden                           es-x/no-array-prototype-includes
  183:9   warning  ES2015 'String.prototype.includes' method is forbidden                          es-x/no-string-prototype-includes
  189:1   warning  The type 'integer' is undefined                                                 jsdoc/no-undefined-types
  196:2   warning  jQuery collection names must match the variablePattern                          no-jquery/variable-pattern

/src/repo/libs/PF_autoedit.js
  15:16  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  83:21  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  95:38  warning  '$' is already declared in the upper scope on line 9 column 13                no-shadow

/src/repo/libs/PF_checkboxes.js
   4:1   warning  Missing JSDoc @param "$" type                                   jsdoc/require-param-type
   5:1   warning  Missing JSDoc @param "mw" type                                  jsdoc/require-param-type
  49:24  warning  '$' is already declared in the upper scope on line 9 column 14  no-shadow

/src/repo/libs/PF_collapsible.js
  30:8  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datepicker.js
   4:1  warning  Missing JSDoc @param "$" type                                                 jsdoc/require-param-type
   5:1  warning  Missing JSDoc @param "oo" type                                                jsdoc/require-param-type
   6:1  warning  Missing JSDoc @param "mw" type                                                jsdoc/require-param-type
   7:1  warning  Missing JSDoc @param "pf" type                                                jsdoc/require-param-type
  18:9  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_datetimepicker.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "oo" type  jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_editWarning.js
  32:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  61:11  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_formInput.js
    6:1  warning  Missing JSDoc @param "$" type                jsdoc/require-param-type
    7:1  warning  Missing JSDoc @param "mw" type               jsdoc/require-param-type
   21:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
   78:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
   82:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
  106:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_imagePreview.js
  4:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  5:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_maps.js
  201:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  208:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  209:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  210:5  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  262:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  263:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
  264:6  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/src/repo/libs/PF_popupform.js
  373:3   warning  jQuery collection names must match the variablePattern                        no-jquery/variable-pattern
  646:3   warning  ES2024 Resizable ArrayBuffer is forbidden                                     es-x/no-resizable-and-growable-arraybuffers
  757:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  771:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PF_preview.js
  56:3  warning  ES2024 Resizable ArrayBuffer is forbidden  es-x/no-resizable-and-growable-arraybuffers

/src/repo/libs/PF_rating.js
  43:4  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_simpleupload.js
  5:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  6:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type

/src/repo/libs/PF_spreadsheet.js
   10:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   11:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   12:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   13:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   14:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   15:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   16:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   17:1   warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
   72:11  warning  ES2016 'Array.prototype.includes' method is forbidden                       es-x/no-array-prototype-includes
   72:11  warning  ES2015 'String.prototype.includes' method is forbidden                      es-x/no-string-prototype-includes
  394:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  440:3   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:6   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  689:11  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  692:7   warning  ES2015 'for-of' statements are forbidden                                    es-x/no-for-of-loops
  692:12  warning  ES2015 block-scoped variables are forbidden                                 es-x/no-block-scoped-variables
  753:10  warning  'columnParams' is already declared in the upper scope on line 855 column 9  no-shadow
  865:28  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  869:6   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  930:25  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  935:4   warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle

/src/repo/libs/PF_submit.js
  141:46  warning  Prefer `String#slice()` over `String#substring()`                   unicorn/prefer-string-slice
  174:8   warning  '$form' is already declared in the upper scope on line 14 column 6  no-shadow

/src/repo/libs/PF_timepicker.js
  62:9  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/src/repo/libs/PF_tree.js
  6:1  warning  Missing JSDoc @param "$" type   jsdoc/require-param-type
  7:1  warning  Missing JSDoc @param "mw" type  jsdoc/require-param-type
  8:1  warning  Missing JSDoc @param "pf" type  jsdoc/require-param-type

/src/repo/libs/PF_upload.js
  56:41  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/src/repo/libs/PageForms.js
   199:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   230:19  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
   241:9   warning  Selector extensions are not allowed                                                  no-jquery/no-sizzle
   406:61  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   413:58  warning  All possible message keys should be documented. See https://w.wiki/4r9a for details  mediawiki/msg-doc
   770:9   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   770:9   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   771:5   warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
   771:5   warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
   834:6   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
   843:7   warning  'negative' declared on line 837 column 7 is used outside of binding context          block-scoped-var
  1014:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1015:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1021:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1022:6   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1112:11  warning  ES2016 'Array.prototype.includes' method is forbidden                                es-x/no-array-prototype-includes
  1112:11  warning  ES2015 'String.prototype.includes' method is forbidden                               es-x/no-string-prototype-includes
  1118:9   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1225:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1226:8   warning  ES2015 block-scoped variables are forbidden                                          es-x/no-block-scoped-variables
  1239:1   warning  JSDoc @return declaration present but return expression not available in function    jsdoc/require-returns-check
  1258:10  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1262:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1536:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1648:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1655:8   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1931:30  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1944:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1948:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1953:7   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state

/src/repo/libs/ext.pf.select2.base.js
   72:6  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
   92:8  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
  317:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice
  318:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

/src/repo/libs/ext.pf.select2.tokens.js
   88:11  warning  ES2015 block-scoped variables are forbidden             es-x/no-block-scoped-variables
  287:9   warning  ES2016 'Array.prototype.includes' method is forbidden   es-x/no-array-prototype-includes
  287:9   warning  ES2015 'String.prototype.includes' method is forbidden  es-x/no-string-prototype-includes

✖ 217 problems (0 errors, 217 warnings)


Running "banana:all" (banana) task
>> 1 message directory checked.

Done.

--- end ---
{"1098094": {"source": 1098094, "name": "braces", "dependency": "braces", "title": "Uncontrolled resource consumption in braces", "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg", "severity": "high", "cwe": ["CWE-400", "CWE-1050"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<3.0.3"}}
Upgrading n:braces from 3.0.2 -> 3.0.3
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
build: Updating dependencies

composer:
* mediawiki/minus-x: 1.1.1 → 1.1.3
* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.27.0 → 0.28.2
* grunt-banana-checker: 0.11.1 → 0.13.0
* braces: 3.0.2 → 3.0.3
  * https://github.com/advisories/GHSA-grv7-fg5c-xmjg


$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp0r28jwwz
--- stdout ---
[master d81e5cf] build: Updating dependencies
 3 files changed, 661 insertions(+), 461 deletions(-)

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

composer:
* mediawiki/minus-x: 1.1.1 → 1.1.3
* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.27.0 → 0.28.2
* grunt-banana-checker: 0.11.1 → 0.13.0
* braces: 3.0.2 → 3.0.3
  * https://github.com/advisories/GHSA-grv7-fg5c-xmjg

Change-Id: I05c69c4538887ce1b97df3724fa68d1316d10fa6
---
 composer.json     |    4 +-
 package-lock.json | 1114 ++++++++++++++++++++++++++-------------------
 package.json      |    4 +-
 3 files changed, 661 insertions(+), 461 deletions(-)

diff --git a/composer.json b/composer.json
index 74624dc..62f9989 100644
--- a/composer.json
+++ b/composer.json
@@ -35,8 +35,8 @@
 	},
 	"require-dev": {
 		"mediawiki/mediawiki-codesniffer": "43.0.0",
-		"mediawiki/mediawiki-phan-config": "0.12.1",
-		"mediawiki/minus-x": "1.1.1",
+		"mediawiki/mediawiki-phan-config": "0.14.0",
+		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
 	},
diff --git a/package-lock.json b/package-lock.json
index d18d97c..4c57976 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,9 +6,9 @@
 		"": {
 			"name": "PageForms",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.27.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
-				"grunt-banana-checker": "0.11.1",
+				"grunt-banana-checker": "0.13.0",
 				"grunt-eslint": "24.3.0"
 			}
 		},
@@ -22,12 +22,12 @@
 			}
 		},
 		"node_modules/@babel/code-frame": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+			"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/highlight": "^7.24.2",
+				"@babel/highlight": "^7.24.7",
 				"picocolors": "^1.0.0"
 			},
 			"engines": {
@@ -35,21 +35,21 @@
 			}
 		},
 		"node_modules/@babel/helper-validator-identifier": {
-			"version": "7.22.20",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-			"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+			"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
 			"dev": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/highlight": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+			"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.7",
 				"chalk": "^2.4.2",
 				"js-tokens": "^4.0.0",
 				"picocolors": "^1.0.0"
@@ -82,11 +82,14 @@
 			}
 		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.42.0",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
-			"integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+			"version": "0.43.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz",
+			"integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==",
 			"dev": true,
 			"dependencies": {
+				"@types/eslint": "^8.56.5",
+				"@types/estree": "^1.0.5",
+				"@typescript-eslint/types": "^7.2.0",
 				"comment-parser": "1.4.1",
 				"esquery": "^1.5.0",
 				"jsdoc-type-pratt-parser": "~4.0.0"
@@ -111,9 +114,9 @@
 			}
 		},
 		"node_modules/@eslint-community/regexpp": {
-			"version": "4.10.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+			"version": "4.11.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+			"integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
 			"dev": true,
 			"engines": {
 				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -255,6 +258,22 @@
 				"node": ">= 8"
 			}
 		},
+		"node_modules/@types/eslint": {
+			"version": "8.56.11",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
+			"integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
+			"dev": true,
+			"dependencies": {
+				"@types/estree": "*",
+				"@types/json-schema": "*"
+			}
+		},
+		"node_modules/@types/estree": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+			"dev": true
+		},
 		"node_modules/@types/json-schema": {
 			"version": "7.0.15",
 			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -267,23 +286,17 @@
 			"integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
 			"dev": true
 		},
-		"node_modules/@types/semver": {
-			"version": "7.5.8",
-			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
-			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
-			"dev": true
-		},
 		"node_modules/@typescript-eslint/scope-manager": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz",
+			"integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0"
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -291,12 +304,12 @@
 			}
 		},
 		"node_modules/@typescript-eslint/types": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz",
+			"integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==",
 			"dev": true,
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -304,21 +317,22 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz",
+			"integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0",
 				"debug": "^4.3.4",
 				"globby": "^11.1.0",
 				"is-glob": "^4.0.3",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
+				"minimatch": "^9.0.4",
+				"semver": "^7.6.0",
+				"ts-api-utils": "^1.3.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -330,65 +344,63 @@
 				}
 			}
 		},
-		"node_modules/@typescript-eslint/utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+		"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+			"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/eslint-utils": "^4.2.0",
-				"@types/json-schema": "^7.0.9",
-				"@types/semver": "^7.3.12",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"eslint-scope": "^5.1.1",
-				"semver": "^7.3.7"
-			},
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/typescript-eslint"
-			},
-			"peerDependencies": {
-				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+				"balanced-match": "^1.0.0"
 			}
 		},
-		"node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+		"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 			"dev": true,
 			"dependencies": {
-				"esrecurse": "^4.3.0",
-				"estraverse": "^4.1.1"
+				"brace-expansion": "^2.0.1"
 			},
 			"engines": {
-				"node": ">=8.0.0"
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
-		"node_modules/@typescript-eslint/utils/node_modules/estraverse": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+		"node_modules/@typescript-eslint/utils": {
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz",
+			"integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==",
 			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@typescript-eslint/scope-manager": "7.17.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/typescript-estree": "7.17.0"
+			},
 			"engines": {
-				"node": ">=4.0"
+				"node": "^18.18.0 || >=20.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.56.0"
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz",
+			"integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"eslint-visitor-keys": "^3.3.0"
+				"@typescript-eslint/types": "7.17.0",
+				"eslint-visitor-keys": "^3.4.3"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^18.18.0 || >=20.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -408,9 +420,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.11.3",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+			"version": "8.12.1",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+			"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -554,12 +566,12 @@
 			}
 		},
 		"node_modules/braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"dev": true,
 			"dependencies": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			},
 			"engines": {
 				"node": ">=8"
@@ -598,9 +610,9 @@
 			}
 		},
 		"node_modules/browserslist-config-wikimedia": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.6.1.tgz",
-			"integrity": "sha512-F3O+12ud7ZwBaiB/RZIMGDgz3nEuXz8RhtdPB4Lkd/WVP5Vy77EqBWRMz4vJ64x8LTTH3BOaHCD2ZuUcgShqyQ==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
+			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
 			"dev": true
 		},
 		"node_modules/builtin-modules": {
@@ -615,15 +627,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/builtins": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
-			"integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
-			"dev": true,
-			"dependencies": {
-				"semver": "^7.0.0"
-			}
-		},
 		"node_modules/callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -796,9 +799,9 @@
 			"dev": true
 		},
 		"node_modules/core-js-compat": {
-			"version": "3.37.0",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
-			"integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+			"version": "3.37.1",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+			"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
 			"dev": true,
 			"dependencies": {
 				"browserslist": "^4.23.0"
@@ -905,6 +908,19 @@
 			"integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==",
 			"dev": true
 		},
+		"node_modules/enhanced-resolve": {
+			"version": "5.17.1",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+			"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+			"dev": true,
+			"dependencies": {
+				"graceful-fs": "^4.2.4",
+				"tapable": "^2.2.0"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
 		"node_modules/error-ex": {
 			"version": "1.3.2",
 			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -991,9 +1007,9 @@
 			}
 		},
 		"node_modules/eslint-compat-utils": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz",
-			"integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+			"integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
 			"dev": true,
 			"dependencies": {
 				"semver": "^7.5.4"
@@ -1006,28 +1022,28 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.27.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.27.0.tgz",
-			"integrity": "sha512-KkZ54+MUnggz17C/RCEMXQSpiiqZRF7p9fjrz4phaaeKlTrjg0B+QbM5zcDWcjGiAWaJUptHaH17+RZldadkUw==",
+			"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.6.1",
+				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
 				"eslint-plugin-es-x": "^7.6.0",
-				"eslint-plugin-jest": "^27.9.0",
-				"eslint-plugin-jsdoc": "48.2.1",
-				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.6.0",
-				"eslint-plugin-mocha": "^10.4.1",
-				"eslint-plugin-n": "^16.6.2",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-jest": "^28.5.0",
+				"eslint-plugin-jsdoc": "48.2.5",
+				"eslint-plugin-json-es": "^1.6.0",
+				"eslint-plugin-mediawiki": "^0.7.0",
+				"eslint-plugin-mocha": "^10.4.3",
+				"eslint-plugin-n": "^17.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^51.0.1",
-				"eslint-plugin-vue": "^9.23.0",
+				"eslint-plugin-unicorn": "^53.0.0",
+				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
-				"eslint-plugin-yml": "^1.13.2"
+				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
 		"node_modules/eslint-plugin-compat": {
@@ -1052,39 +1068,40 @@
 			}
 		},
 		"node_modules/eslint-plugin-es-x": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz",
-			"integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==",
+			"version": "7.8.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+			"integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
 			"dev": true,
+			"funding": [
+				"https://github.com/sponsors/ota-meshi",
+				"https://opencollective.com/eslint"
+			],
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.1.2",
-				"@eslint-community/regexpp": "^4.6.0",
-				"eslint-compat-utils": "^0.5.0"
+				"@eslint-community/regexpp": "^4.11.0",
+				"eslint-compat-utils": "^0.5.1"
 			},
 			"engines": {
 				"node": "^14.18.0 || >=16.0.0"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/ota-meshi"
-			},
 			"peerDependencies": {
 				"eslint": ">=8"
 			}
 		},
 		"node_modules/eslint-plugin-jest": {
-			"version": "27.9.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
-			"integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+			"version": "28.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz",
+			"integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/utils": "^5.10.0"
+				"@typescript-eslint/utils": "^6.0.0 || ^7.0.0"
 			},
 			"engines": {
-				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+				"node": "^16.10.0 || ^18.12.0 || >=20.0.0"
 			},
 			"peerDependencies": {
-				"@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
-				"eslint": "^7.0.0 || ^8.0.0",
+				"@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0",
+				"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0",
 				"jest": "*"
 			},
 			"peerDependenciesMeta": {
@@ -1097,19 +1114,19 @@
 			}
 		},
 		"node_modules/eslint-plugin-jsdoc": {
-			"version": "48.2.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz",
-			"integrity": "sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==",
+			"version": "48.2.5",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz",
+			"integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.42.0",
+				"@es-joy/jsdoccomment": "~0.43.0",
 				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.4.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.5.0",
 				"is-builtin-module": "^3.2.1",
-				"semver": "^7.6.0",
+				"semver": "^7.6.1",
 				"spdx-expression-parse": "^4.0.0"
 			},
 			"engines": {
@@ -1120,9 +1137,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-json-es": {
-			"version": "1.5.7",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
-			"integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==",
+			"version": "1.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz",
+			"integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.3.0",
@@ -1133,9 +1150,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-mediawiki": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.6.0.tgz",
-			"integrity": "sha512-a2Zm18N5nPyflBajM2ZWATxucIpYPEmOSjFzUR1OBH3hAL0GY9fx1mpezEwzqAQ862d+kPkolgQOzktnZe8nKA==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz",
+			"integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-plugin-vue": "^9.23.0",
@@ -1163,52 +1180,73 @@
 			}
 		},
 		"node_modules/eslint-plugin-n": {
-			"version": "16.6.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
-			"integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+			"version": "17.10.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.0.tgz",
+			"integrity": "sha512-NmrSdEid+ch9SBVuqbsK5CUiEZGtMK32KSI+arWahZbFF0nvX1oEJrWiFOWmhkWFKW9Hqor0g3qPh4AvkvWwlA==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"builtins": "^5.0.1",
+				"enhanced-resolve": "^5.17.0",
 				"eslint-plugin-es-x": "^7.5.0",
 				"get-tsconfig": "^4.7.0",
-				"globals": "^13.24.0",
+				"globals": "^15.8.0",
 				"ignore": "^5.2.4",
-				"is-builtin-module": "^3.2.1",
-				"is-core-module": "^2.12.1",
-				"minimatch": "^3.1.2",
-				"resolve": "^1.22.2",
+				"minimatch": "^9.0.5",
 				"semver": "^7.5.3"
 			},
 			"engines": {
-				"node": ">=16.0.0"
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 			},
 			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
+				"url": "https://opencollective.com/eslint"
 			},
 			"peerDependencies": {
-				"eslint": ">=7.0.0"
+				"eslint": ">=8.23.0"
+			}
+		},
+		"node_modules/eslint-plugin-n/node_modules/brace-expansion": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+			"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+			"dev": true,
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/eslint-plugin-n/node_modules/globals": {
+			"version": "15.8.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz",
+			"integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
 		"node_modules/eslint-plugin-n/node_modules/minimatch": {
-			"version": "3.1.2",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 			"dev": true,
 			"dependencies": {
-				"brace-expansion": "^1.1.7"
+				"brace-expansion": "^2.0.1"
 			},
 			"engines": {
-				"node": "*"
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
 		"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.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -1234,17 +1272,17 @@
 			}
 		},
 		"node_modules/eslint-plugin-unicorn": {
-			"version": "51.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
-			"integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
+			"version": "53.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
+			"integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.5",
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/eslintrc": "^3.0.2",
 				"ci-info": "^4.0.0",
 				"clean-regexp": "^1.0.0",
-				"core-js-compat": "^3.34.0",
+				"core-js-compat": "^3.37.0",
 				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
 				"is-builtin-module": "^3.2.1",
@@ -1253,11 +1291,11 @@
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.27",
 				"regjsparser": "^0.10.0",
-				"semver": "^7.5.4",
+				"semver": "^7.6.1",
 				"strip-indent": "^3.0.0"
 			},
 			"engines": {
-				"node": ">=16"
+				"node": ">=18.18"
 			},
 			"funding": {
 				"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
@@ -1266,10 +1304,104 @@
 				"eslint": ">=8.56.0"
 			}
 		},
+		"node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+			"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+			"dev": true,
+			"dependencies": {
+				"ajv": "^6.12.4",
+				"debug": "^4.3.2",
+				"espree": "^10.0.1",
+				"globals": "^14.0.0",
+				"ignore": "^5.2.0",
+				"import-fresh": "^3.2.1",
+				"js-yaml": "^4.1.0",
+				"minimatch": "^3.1.2",
+				"strip-json-comments": "^3.1.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/argparse": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+			"dev": true
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+			"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/espree": {
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+			"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+			"dev": true,
+			"dependencies": {
+				"acorn": "^8.12.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^4.0.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/globals": {
+			"version": "14.0.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+			"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/js-yaml": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+			"dev": true,
+			"dependencies": {
+				"argparse": "^2.0.1"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/eslint-plugin-unicorn/node_modules/minimatch": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
 		"node_modules/eslint-plugin-vue": {
-			"version": "9.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz",
-			"integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==",
+			"version": "9.27.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
+			"integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.4.0",
@@ -1278,7 +1410,7 @@
 				"nth-check": "^2.1.1",
 				"postcss-selector-parser": "^6.0.15",
 				"semver": "^7.6.0",
-				"vue-eslint-parser": "^9.4.2",
+				"vue-eslint-parser": "^9.4.3",
 				"xml-name-validator": "^4.0.0"
 			},
 			"engines": {
@@ -1577,9 +1709,9 @@
 			}
 		},
 		"node_modules/fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"dev": true,
 			"dependencies": {
 				"to-regex-range": "^5.0.1"
@@ -1700,9 +1832,9 @@
 			}
 		},
 		"node_modules/get-tsconfig": {
-			"version": "4.7.3",
-			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-			"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+			"version": "4.7.6",
+			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+			"integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
 			"dev": true,
 			"dependencies": {
 				"resolve-pkg-maps": "^1.0.0"
@@ -1826,6 +1958,12 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/graceful-fs": {
+			"version": "4.2.11",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+			"dev": true
+		},
 		"node_modules/graphemer": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -1860,15 +1998,18 @@
 			}
 		},
 		"node_modules/grunt-banana-checker": {
-			"version": "0.11.1",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz",
-			"integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==",
+			"version": "0.13.0",
+			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz",
+			"integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==",
 			"dev": true,
+			"dependencies": {
+				"chalk": "4.1.2"
+			},
 			"bin": {
 				"banana-checker": "src/cli.js"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=16"
 			}
 		},
 		"node_modules/grunt-cli": {
@@ -2406,18 +2547,6 @@
 			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
 			"dev": true
 		},
-		"node_modules/lru-cache": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-			"dev": true,
-			"dependencies": {
-				"yallist": "^4.0.0"
-			},
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/make-iterator": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -2822,9 +2951,9 @@
 			}
 		},
 		"node_modules/postcss-selector-parser": {
-			"version": "6.0.16",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-			"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+			"version": "6.1.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+			"integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
 			"dev": true,
 			"dependencies": {
 				"cssesc": "^3.0.0",
@@ -3140,13 +3269,10 @@
 			"dev": true
 		},
 		"node_modules/semver": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+			"version": "7.6.3",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
 			"dev": true,
-			"dependencies": {
-				"lru-cache": "^6.0.0"
-			},
 			"bin": {
 				"semver": "bin/semver.js"
 			},
@@ -3221,9 +3347,9 @@
 			}
 		},
 		"node_modules/spdx-license-ids": {
-			"version": "3.0.17",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-			"integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+			"version": "3.0.18",
+			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+			"integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
 			"dev": true
 		},
 		"node_modules/sprintf-js": {
@@ -3292,6 +3418,15 @@
 				"url": "https://github.com/sponsors/ljharb"
 			}
 		},
+		"node_modules/tapable": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+			"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
 		"node_modules/text-table": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -3310,25 +3445,16 @@
 				"node": ">=8.0"
 			}
 		},
-		"node_modules/tslib": {
-			"version": "1.14.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-			"dev": true
-		},
-		"node_modules/tsutils": {
-			"version": "3.21.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+		"node_modules/ts-api-utils": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+			"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
 			"dev": true,
-			"dependencies": {
-				"tslib": "^1.8.1"
-			},
 			"engines": {
-				"node": ">= 6"
+				"node": ">=16"
 			},
 			"peerDependencies": {
-				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+				"typescript": ">=4.2.0"
 			}
 		},
 		"node_modules/type-check": {
@@ -3356,9 +3482,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "5.4.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-			"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+			"version": "5.5.4",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+			"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
 			"dev": true,
 			"peer": true,
 			"bin": {
@@ -3479,9 +3605,9 @@
 			}
 		},
 		"node_modules/vue-eslint-parser": {
-			"version": "9.4.2",
-			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
-			"integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+			"version": "9.4.3",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
 			"dev": true,
 			"dependencies": {
 				"debug": "^4.3.4",
@@ -3532,12 +3658,6 @@
 				"node": ">=12"
 			}
 		},
-		"node_modules/yallist": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-			"dev": true
-		},
 		"node_modules/yaml": {
 			"version": "2.4.1",
 			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
@@ -3588,28 +3708,28 @@
 			"dev": true
 		},
 		"@babel/code-frame": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+			"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
 			"dev": true,
 			"requires": {
-				"@babel/highlight": "^7.24.2",
+				"@babel/highlight": "^7.24.7",
 				"picocolors": "^1.0.0"
 			}
 		},
 		"@babel/helper-validator-identifier": {
-			"version": "7.22.20",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-			"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+			"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.24.2",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+			"version": "7.24.7",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+			"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.7",
 				"chalk": "^2.4.2",
 				"js-tokens": "^4.0.0",
 				"picocolors": "^1.0.0"
@@ -3635,11 +3755,14 @@
 			}
 		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.42.0",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
-			"integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+			"version": "0.43.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz",
+			"integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==",
 			"dev": true,
 			"requires": {
+				"@types/eslint": "^8.56.5",
+				"@types/estree": "^1.0.5",
+				"@typescript-eslint/types": "^7.2.0",
 				"comment-parser": "1.4.1",
 				"esquery": "^1.5.0",
 				"jsdoc-type-pratt-parser": "~4.0.0"
@@ -3655,9 +3778,9 @@
 			}
 		},
 		"@eslint-community/regexpp": {
-			"version": "4.10.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+			"version": "4.11.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+			"integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
 			"dev": true
 		},
 		"@eslint/eslintrc": {
@@ -3764,6 +3887,22 @@
 				"fastq": "^1.6.0"
 			}
 		},
+		"@types/eslint": {
+			"version": "8.56.11",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
+			"integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
+			"dev": true,
+			"requires": {
+				"@types/estree": "*",
+				"@types/json-schema": "*"
+			}
+		},
+		"@types/estree": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+			"dev": true
+		},
 		"@types/json-schema": {
 			"version": "7.0.15",
 			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -3776,85 +3915,78 @@
 			"integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
 			"dev": true
 		},
-		"@types/semver": {
-			"version": "7.5.8",
-			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
-			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
-			"dev": true
-		},
 		"@typescript-eslint/scope-manager": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz",
+			"integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0"
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0"
 			}
 		},
 		"@typescript-eslint/types": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz",
+			"integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==",
 			"dev": true
 		},
 		"@typescript-eslint/typescript-estree": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz",
+			"integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/visitor-keys": "7.17.0",
 				"debug": "^4.3.4",
 				"globby": "^11.1.0",
 				"is-glob": "^4.0.3",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
-			}
-		},
-		"@typescript-eslint/utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
-			"dev": true,
-			"requires": {
-				"@eslint-community/eslint-utils": "^4.2.0",
-				"@types/json-schema": "^7.0.9",
-				"@types/semver": "^7.3.12",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"eslint-scope": "^5.1.1",
-				"semver": "^7.3.7"
-			},
-			"dependencies": {
-				"eslint-scope": {
-					"version": "5.1.1",
-					"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-					"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+				"minimatch": "^9.0.4",
+				"semver": "^7.6.0",
+				"ts-api-utils": "^1.3.0"
+			},
+			"dependencies": {
+				"brace-expansion": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+					"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
 					"dev": true,
 					"requires": {
-						"esrecurse": "^4.3.0",
-						"estraverse": "^4.1.1"
+						"balanced-match": "^1.0.0"
 					}
 				},
-				"estraverse": {
-					"version": "4.3.0",
-					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-					"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-					"dev": true
+				"minimatch": {
+					"version": "9.0.5",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+					"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+					"dev": true,
+					"requires": {
+						"brace-expansion": "^2.0.1"
+					}
 				}
 			}
 		},
+		"@typescript-eslint/utils": {
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz",
+			"integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@typescript-eslint/scope-manager": "7.17.0",
+				"@typescript-eslint/types": "7.17.0",
+				"@typescript-eslint/typescript-estree": "7.17.0"
+			}
+		},
 		"@typescript-eslint/visitor-keys": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"version": "7.17.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz",
+			"integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "5.62.0",
-				"eslint-visitor-keys": "^3.3.0"
+				"@typescript-eslint/types": "7.17.0",
+				"eslint-visitor-keys": "^3.4.3"
 			}
 		},
 		"@ungap/structured-clone": {
@@ -3870,9 +4002,9 @@
 			"dev": true
 		},
 		"acorn": {
-			"version": "8.11.3",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+			"version": "8.12.1",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+			"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -3988,12 +4120,12 @@
 			}
 		},
 		"braces": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 			"dev": true,
 			"requires": {
-				"fill-range": "^7.0.1"
+				"fill-range": "^7.1.1"
 			}
 		},
 		"browserslist": {
@@ -4009,9 +4141,9 @@
 			}
 		},
 		"browserslist-config-wikimedia": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.6.1.tgz",
-			"integrity": "sha512-F3O+12ud7ZwBaiB/RZIMGDgz3nEuXz8RhtdPB4Lkd/WVP5Vy77EqBWRMz4vJ64x8LTTH3BOaHCD2ZuUcgShqyQ==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
+			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
 			"dev": true
 		},
 		"builtin-modules": {
@@ -4020,15 +4152,6 @@
 			"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
 			"dev": true
 		},
-		"builtins": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
-			"integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
-			"dev": true,
-			"requires": {
-				"semver": "^7.0.0"
-			}
-		},
 		"callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -4149,9 +4272,9 @@
 			"dev": true
 		},
 		"core-js-compat": {
-			"version": "3.37.0",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
-			"integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+			"version": "3.37.1",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+			"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
 			"dev": true,
 			"requires": {
 				"browserslist": "^4.23.0"
@@ -4225,6 +4348,16 @@
 			"integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==",
 			"dev": true
 		},
+		"enhanced-resolve": {
+			"version": "5.17.1",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+			"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+			"dev": true,
+			"requires": {
+				"graceful-fs": "^4.2.4",
+				"tapable": "^2.2.0"
+			}
+		},
 		"error-ex": {
 			"version": "1.3.2",
 			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -4319,37 +4452,37 @@
 			}
 		},
 		"eslint-compat-utils": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz",
-			"integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+			"integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
 			"dev": true,
 			"requires": {
 				"semver": "^7.5.4"
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.27.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.27.0.tgz",
-			"integrity": "sha512-KkZ54+MUnggz17C/RCEMXQSpiiqZRF7p9fjrz4phaaeKlTrjg0B+QbM5zcDWcjGiAWaJUptHaH17+RZldadkUw==",
+			"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.6.1",
+				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
 				"eslint-plugin-es-x": "^7.6.0",
-				"eslint-plugin-jest": "^27.9.0",
-				"eslint-plugin-jsdoc": "48.2.1",
-				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.6.0",
-				"eslint-plugin-mocha": "^10.4.1",
-				"eslint-plugin-n": "^16.6.2",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-jest": "^28.5.0",
+				"eslint-plugin-jsdoc": "48.2.5",
+				"eslint-plugin-json-es": "^1.6.0",
+				"eslint-plugin-mediawiki": "^0.7.0",
+				"eslint-plugin-mocha": "^10.4.3",
+				"eslint-plugin-n": "^17.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^51.0.1",
-				"eslint-plugin-vue": "^9.23.0",
+				"eslint-plugin-unicorn": "^53.0.0",
+				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
-				"eslint-plugin-yml": "^1.13.2"
+				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
 		"eslint-plugin-compat": {
@@ -4368,46 +4501,46 @@
 			}
 		},
 		"eslint-plugin-es-x": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz",
-			"integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==",
+			"version": "7.8.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+			"integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.1.2",
-				"@eslint-community/regexpp": "^4.6.0",
-				"eslint-compat-utils": "^0.5.0"
+				"@eslint-community/regexpp": "^4.11.0",
+				"eslint-compat-utils": "^0.5.1"
 			}
 		},
 		"eslint-plugin-jest": {
-			"version": "27.9.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
-			"integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+			"version": "28.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz",
+			"integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/utils": "^5.10.0"
+				"@typescript-eslint/utils": "^6.0.0 || ^7.0.0"
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "48.2.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.1.tgz",
-			"integrity": "sha512-iUvbcyDZSO/9xSuRv2HQBw++8VkV/pt3UWtX9cpPH0l7GKPq78QC/6+PmyQHHvNZaTjAce6QVciEbnc6J/zH5g==",
+			"version": "48.2.5",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz",
+			"integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.42.0",
+				"@es-joy/jsdoccomment": "~0.43.0",
 				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.4.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.5.0",
 				"is-builtin-module": "^3.2.1",
-				"semver": "^7.6.0",
+				"semver": "^7.6.1",
 				"spdx-expression-parse": "^4.0.0"
 			}
 		},
 		"eslint-plugin-json-es": {
-			"version": "1.5.7",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
-			"integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==",
+			"version": "1.6.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz",
+			"integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0",
@@ -4415,9 +4548,9 @@
 			}
 		},
 		"eslint-plugin-mediawiki": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.6.0.tgz",
-			"integrity": "sha512-a2Zm18N5nPyflBajM2ZWATxucIpYPEmOSjFzUR1OBH3hAL0GY9fx1mpezEwzqAQ862d+kPkolgQOzktnZe8nKA==",
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz",
+			"integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==",
 			"dev": true,
 			"requires": {
 				"eslint-plugin-vue": "^9.23.0",
@@ -4436,39 +4569,51 @@
 			}
 		},
 		"eslint-plugin-n": {
-			"version": "16.6.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
-			"integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+			"version": "17.10.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.0.tgz",
+			"integrity": "sha512-NmrSdEid+ch9SBVuqbsK5CUiEZGtMK32KSI+arWahZbFF0nvX1oEJrWiFOWmhkWFKW9Hqor0g3qPh4AvkvWwlA==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"builtins": "^5.0.1",
+				"enhanced-resolve": "^5.17.0",
 				"eslint-plugin-es-x": "^7.5.0",
 				"get-tsconfig": "^4.7.0",
-				"globals": "^13.24.0",
+				"globals": "^15.8.0",
 				"ignore": "^5.2.4",
-				"is-builtin-module": "^3.2.1",
-				"is-core-module": "^2.12.1",
-				"minimatch": "^3.1.2",
-				"resolve": "^1.22.2",
+				"minimatch": "^9.0.5",
 				"semver": "^7.5.3"
 			},
 			"dependencies": {
+				"brace-expansion": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+					"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+					"dev": true,
+					"requires": {
+						"balanced-match": "^1.0.0"
+					}
+				},
+				"globals": {
+					"version": "15.8.0",
+					"resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz",
+					"integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==",
+					"dev": true
+				},
 				"minimatch": {
-					"version": "3.1.2",
-					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-					"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+					"version": "9.0.5",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+					"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 					"dev": true,
 					"requires": {
-						"brace-expansion": "^1.1.7"
+						"brace-expansion": "^2.0.1"
 					}
 				}
 			}
 		},
 		"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.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"requires": {}
 		},
@@ -4492,17 +4637,17 @@
 			}
 		},
 		"eslint-plugin-unicorn": {
-			"version": "51.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
-			"integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
+			"version": "53.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
+			"integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.22.20",
+				"@babel/helper-validator-identifier": "^7.24.5",
 				"@eslint-community/eslint-utils": "^4.4.0",
-				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/eslintrc": "^3.0.2",
 				"ci-info": "^4.0.0",
 				"clean-regexp": "^1.0.0",
-				"core-js-compat": "^3.34.0",
+				"core-js-compat": "^3.37.0",
 				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
 				"is-builtin-module": "^3.2.1",
@@ -4511,14 +4656,80 @@
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.27",
 				"regjsparser": "^0.10.0",
-				"semver": "^7.5.4",
+				"semver": "^7.6.1",
 				"strip-indent": "^3.0.0"
+			},
+			"dependencies": {
+				"@eslint/eslintrc": {
+					"version": "3.1.0",
+					"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+					"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+					"dev": true,
+					"requires": {
+						"ajv": "^6.12.4",
+						"debug": "^4.3.2",
+						"espree": "^10.0.1",
+						"globals": "^14.0.0",
+						"ignore": "^5.2.0",
+						"import-fresh": "^3.2.1",
+						"js-yaml": "^4.1.0",
+						"minimatch": "^3.1.2",
+						"strip-json-comments": "^3.1.1"
+					}
+				},
+				"argparse": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+					"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+					"dev": true
+				},
+				"eslint-visitor-keys": {
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+					"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+					"dev": true
+				},
+				"espree": {
+					"version": "10.1.0",
+					"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+					"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+					"dev": true,
+					"requires": {
+						"acorn": "^8.12.0",
+						"acorn-jsx": "^5.3.2",
+						"eslint-visitor-keys": "^4.0.0"
+					}
+				},
+				"globals": {
+					"version": "14.0.0",
+					"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+					"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+					"dev": true
+				},
+				"js-yaml": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+					"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+					"dev": true,
+					"requires": {
+						"argparse": "^2.0.1"
+					}
+				},
+				"minimatch": {
+					"version": "3.1.2",
+					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+					"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+					"dev": true,
+					"requires": {
+						"brace-expansion": "^1.1.7"
+					}
+				}
 			}
 		},
 		"eslint-plugin-vue": {
-			"version": "9.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz",
-			"integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==",
+			"version": "9.27.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
+			"integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.4.0",
@@ -4527,7 +4738,7 @@
 				"nth-check": "^2.1.1",
 				"postcss-selector-parser": "^6.0.15",
 				"semver": "^7.6.0",
-				"vue-eslint-parser": "^9.4.2",
+				"vue-eslint-parser": "^9.4.3",
 				"xml-name-validator": "^4.0.0"
 			}
 		},
@@ -4718,9 +4929,9 @@
 			}
 		},
 		"fill-range": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"version": "7.1.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 			"dev": true,
 			"requires": {
 				"to-regex-range": "^5.0.1"
@@ -4811,9 +5022,9 @@
 			"dev": true
 		},
 		"get-tsconfig": {
-			"version": "4.7.3",
-			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-			"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+			"version": "4.7.6",
+			"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+			"integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
 			"dev": true,
 			"requires": {
 				"resolve-pkg-maps": "^1.0.0"
@@ -4906,6 +5117,12 @@
 				"slash": "^3.0.0"
 			}
 		},
+		"graceful-fs": {
+			"version": "4.2.11",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+			"dev": true
+		},
 		"graphemer": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -4934,10 +5151,13 @@
 			}
 		},
 		"grunt-banana-checker": {
-			"version": "0.11.1",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz",
-			"integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==",
-			"dev": true
+			"version": "0.13.0",
+			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz",
+			"integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==",
+			"dev": true,
+			"requires": {
+				"chalk": "4.1.2"
+			}
 		},
 		"grunt-cli": {
 			"version": "1.4.3",
@@ -5349,15 +5569,6 @@
 			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
 			"dev": true
 		},
-		"lru-cache": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-			"dev": true,
-			"requires": {
-				"yallist": "^4.0.0"
-			}
-		},
 		"make-iterator": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -5662,9 +5873,9 @@
 			"dev": true
 		},
 		"postcss-selector-parser": {
-			"version": "6.0.16",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-			"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+			"version": "6.1.1",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+			"integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
 			"dev": true,
 			"requires": {
 				"cssesc": "^3.0.0",
@@ -5882,13 +6093,10 @@
 			"dev": true
 		},
 		"semver": {
-			"version": "7.6.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-			"dev": true,
-			"requires": {
-				"lru-cache": "^6.0.0"
-			}
+			"version": "7.6.3",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+			"dev": true
 		},
 		"shebang-command": {
 			"version": "2.0.0",
@@ -5950,9 +6158,9 @@
 			}
 		},
 		"spdx-license-ids": {
-			"version": "3.0.17",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-			"integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+			"version": "3.0.18",
+			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+			"integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
 			"dev": true
 		},
 		"sprintf-js": {
@@ -6000,6 +6208,12 @@
 			"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 			"dev": true
 		},
+		"tapable": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+			"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+			"dev": true
+		},
 		"text-table": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6015,20 +6229,12 @@
 				"is-number": "^7.0.0"
 			}
 		},
-		"tslib": {
-			"version": "1.14.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-			"dev": true
-		},
-		"tsutils": {
-			"version": "3.21.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+		"ts-api-utils": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+			"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
 			"dev": true,
-			"requires": {
-				"tslib": "^1.8.1"
-			}
+			"requires": {}
 		},
 		"type-check": {
 			"version": "0.4.0",
@@ -6046,9 +6252,9 @@
 			"dev": true
 		},
 		"typescript": {
-			"version": "5.4.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-			"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+			"version": "5.5.4",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+			"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
 			"dev": true,
 			"peer": true
 		},
@@ -6131,9 +6337,9 @@
 			}
 		},
 		"vue-eslint-parser": {
-			"version": "9.4.2",
-			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
-			"integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+			"version": "9.4.3",
+			"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
 			"dev": true,
 			"requires": {
 				"debug": "^4.3.4",
@@ -6166,12 +6372,6 @@
 			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
 			"dev": true
 		},
-		"yallist": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-			"dev": true
-		},
 		"yaml": {
 			"version": "2.4.1",
 			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
diff --git a/package.json b/package.json
index 3a4480b..d880b45 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.27.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
-		"grunt-banana-checker": "0.11.1",
+		"grunt-banana-checker": "0.13.0",
 		"grunt-eslint": "24.3.0"
 	}
 }
-- 
2.39.2


--- end ---

composer dependencies

Dependencies
Development dependencies

npm dependencies

Development dependencies

Logs

Source code is licensed under the AGPL.