mediawiki/extensions/PageForms (main)

sourcepatches
From b0f17372bb842889ed592289b7b2bb4a3afc271f Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Thu, 28 Mar 2024 22:06:10 +0000
Subject: [PATCH] build: Updating dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

composer:
* mediawiki/mediawiki-codesniffer: 41.0.0 → 43.0.0
  The following sniffs are failing and were disabled:
  * Generic.CodeAnalysis.AssignmentInCondition.Found
  * Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition

  The following sniffs now pass and were enabled:
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures

* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.25.0 → 0.26.0
  The following rules are failing and were disabled:
  * es-x/no-resizable-and-growable-arraybuffers

* grunt-banana-checker: 0.11.0 → 0.11.1
* grunt-eslint: 24.0.1 → 24.3.0

Change-Id: Ib60736d7833488cf4eb6aa3230eb85170152afd5
---
 .eslintrc.json                                |    3 +-
 .phpcs.xml                                    |    3 +-
 composer.json                                 |    7 +-
 includes/PF_AutoeditAPI.php                   |    4 +-
 includes/PF_FormField.php                     |    2 +-
 includes/PF_FormLinker.php                    |    2 +-
 includes/PF_FormPrinter.php                   |   32 +-
 includes/PF_Hooks.php                         |    2 +-
 includes/PF_MappingUtils.php                  |    2 +-
 includes/PF_PageSection.php                   |   24 +-
 includes/PF_Template.php                      |    4 +-
 includes/PF_TemplateInForm.php                |    4 +-
 includes/PF_ValuesUtils.php                   |    6 +-
 includes/forminputs/PF_ComboBoxInput.php      |    2 +-
 includes/forminputs/PF_DateInput.php          |    2 +-
 includes/forminputs/PF_DatePickerInput.php    |    2 +-
 includes/forminputs/PF_DateTimePicker.php     |    2 +-
 includes/forminputs/PF_LeafletInput.php       |    2 +-
 includes/forminputs/PF_OpenLayersInput.php    |    2 +-
 includes/forminputs/PF_TokensInput.php        |    2 +-
 .../parserfunctions/PF_TemplateDisplay.php    |    2 +-
 .../parserfunctions/PF_TemplateParams.php     |    2 +-
 libs/PF_FullCalendar.js                       |   20 +-
 libs/PF_SpreadsheetAutocompleteWidget.js      |    1 -
 libs/PF_SpreadsheetComboBoxInput.js           |    1 -
 libs/PF_spreadsheet.js                        |    4 +-
 libs/PF_timepicker.js                         |    4 +-
 libs/PageForms.js                             |    8 +-
 package-lock.json                             | 2307 ++++++++++-------
 package.json                                  |    6 +-
 specials/PF_CreateForm.php                    |    2 +-
 specials/PF_CreateTemplate.php                |    2 +-
 specials/PF_RunQuery.php                      |    2 +-
 specials/PF_UploadWindow.php                  |   88 +-
 .../includes/PFFormPrinterTest.php            |    6 +-
 .../forminputs/PFRadioButtonInputTest.php     |    6 +-
 36 files changed, 1524 insertions(+), 1046 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index 01e055f..d841bf7 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -96,6 +96,7 @@
 		"es-x/no-block-scoped-variables": "warn",
 		"es-x/no-default-parameters": "warn",
 		"es-x/no-for-of-loops": "warn",
-		"es-x/no-string-prototype-includes": "warn"
+		"es-x/no-string-prototype-includes": "warn",
+		"es-x/no-resizable-and-growable-arraybuffers": "warn"
 	}
 }
diff --git a/.phpcs.xml b/.phpcs.xml
index 3e3cf53..d5853e8 100644
--- a/.phpcs.xml
+++ b/.phpcs.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ruleset>
 	<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+		<exclude name="Generic.CodeAnalysis.AssignmentInCondition.Found" />
+		<exclude name="Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition" />
 		<exclude name="Generic.Files.LineLength.TooLong" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
@@ -9,7 +11,6 @@
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingVar" />
-		<exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
 		<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
 		<exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle" />
 		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
diff --git a/composer.json b/composer.json
index 78e2d88..c60ea6f 100644
--- a/composer.json
+++ b/composer.json
@@ -34,8 +34,8 @@
 		}
 	},
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "41.0.0",
-		"mediawiki/mediawiki-phan-config": "0.12.1",
+		"mediawiki/mediawiki-codesniffer": "43.0.0",
+		"mediawiki/mediawiki-phan-config": "0.14.0",
 		"mediawiki/minus-x": "1.1.1",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.3.2"
@@ -56,7 +56,8 @@
 	},
 	"config": {
 		"allow-plugins": {
-			"composer/installers": true
+			"composer/installers": true,
+			"dealerdirect/phpcodesniffer-composer-installer": true
 		}
 	}
 }
diff --git a/includes/PF_AutoeditAPI.php b/includes/PF_AutoeditAPI.php
index 74f0162..d63068f 100644
--- a/includes/PF_AutoeditAPI.php
+++ b/includes/PF_AutoeditAPI.php
@@ -940,7 +940,7 @@ class PFAutoeditAPI extends ApiBase {
 			$wgRequest = new FauxRequest( $this->mOptions, true, $session );
 			// Call PFFormPrinter::formHTML() to get at the form
 			// HTML of the existing page.
-			list( $formHTML, $targetContent, $form_page_title, $generatedTargetNameFormula ) =
+			[ $formHTML, $targetContent, $form_page_title, $generatedTargetNameFormula ] =
 				$wgPageFormsFormPrinter->formHTML(
 					// Special handling for autoedit edits -
 					// otherwise, multi-instance templates
@@ -976,7 +976,7 @@ class PFAutoeditAPI extends ApiBase {
 			// Spoof $wgRequest for PFFormPrinter::formHTML().
 			$session = RequestContext::getMain()->getRequest()->getSession();
 			$wgRequest = new FauxRequest( $this->mOptions, true, $session );
-			list( $formHTML, $targetContent, $generatedFormName, $generatedTargetNameFormula ) =
+			[ $formHTML, $targetContent, $generatedFormName, $generatedTargetNameFormula ] =
 				$wgPageFormsFormPrinter->formHTML(
 					$formContent, $isFormSubmitted, $pageExists,
 					$formArticleId, $preloadContent, $targetName, $targetNameFormula,
diff --git a/includes/PF_FormField.php b/includes/PF_FormField.php
index 1f26012..a946bea 100644
--- a/includes/PF_FormField.php
+++ b/includes/PF_FormField.php
@@ -789,7 +789,7 @@ class PFFormField {
 			if ( $fullCargoField != null ) {
 				// It's inefficient to get these values via
 				// text parsing, but oh well.
-				list( $cargo_table, $cargo_field ) = explode( '|', $fullCargoField, 2 );
+				[ $cargo_table, $cargo_field ] = explode( '|', $fullCargoField, 2 );
 				$text .= Html::hidden( 'input_' . $wgPageFormsFieldNum . '_unique_cargo_table', $cargo_table );
 				$text .= Html::hidden( 'input_' . $wgPageFormsFieldNum . '_unique_cargo_field', $cargo_field );
 			}
diff --git a/includes/PF_FormLinker.php b/includes/PF_FormLinker.php
index d0ca5e5..cc8252d 100644
--- a/includes/PF_FormLinker.php
+++ b/includes/PF_FormLinker.php
@@ -47,7 +47,7 @@ class PFFormLinker {
 		// Allow outside code to set/change the preloaded text.
 		MediaWikiServices::getInstance()->getHookContainer()->run( 'PageForms::EditFormPreloadText', [ &$preloadContent, $title, $formTitle ] );
 
-		list( $formText, $pageText, $formPageTitle, $generatedPageName ) =
+		[ $formText, $pageText, $formPageTitle, $generatedPageName ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$formDefinition, false, false, null, $preloadContent,
 				'Some very long page name that will hopefully never get created ABCDEF123',
diff --git a/includes/PF_FormPrinter.php b/includes/PF_FormPrinter.php
index 2345840..beb1f85 100644
--- a/includes/PF_FormPrinter.php
+++ b/includes/PF_FormPrinter.php
@@ -566,7 +566,7 @@ END;
 
 			$inputType = $formField->getInputType();
 			$gridParamValues = [ 'name' => $templateField->getFieldName() ];
-			list( $autocompletedatatype, $autocompletesettings ) = $this->getSpreadsheetAutocompleteAttributes( $formFieldArgs );
+			[ $autocompletedatatype, $autocompletesettings ] = $this->getSpreadsheetAutocompleteAttributes( $formFieldArgs );
 			if ( $formField->getLabel() !== null ) {
 				$gridParamValues['label'] = $formField->getLabel();
 			}
@@ -1309,12 +1309,12 @@ END;
 								$mappingCargoTable = $form_field->getFieldArg( 'mapping cargo table' );
 								$mappingCargoField = $form_field->getFieldArg( 'mapping cargo field' );
 								$mappingCargoValueField = $form_field->getFieldArg( 'mapping cargo value field' );
-								if ( !$form_submitted && $cur_value !== null && $cur_value !== '' ) {
-									$cur_value = $this->getCargoBasedMapping( $cur_value, $mappingCargoTable, $mappingCargoField, $mappingCargoValueField, $form_field );
-								}
-								if ( $form_submitted && $cur_value_in_template !== null && $cur_value_in_template !== '' ) {
-									$cur_value_in_template = $this->getCargoBasedMapping( $cur_value_in_template, $mappingCargoTable, $mappingCargoValueField, $mappingCargoField, $form_field );
-								}
+							if ( !$form_submitted && $cur_value !== null && $cur_value !== '' ) {
+								$cur_value = $this->getCargoBasedMapping( $cur_value, $mappingCargoTable, $mappingCargoField, $mappingCargoValueField, $form_field );
+							}
+							if ( $form_submitted && $cur_value_in_template !== null && $cur_value_in_template !== '' ) {
+								$cur_value_in_template = $this->getCargoBasedMapping( $cur_value_in_template, $mappingCargoTable, $mappingCargoValueField, $mappingCargoField, $form_field );
+							}
 						}
 						if ( $cur_value !== '' &&
 							( $form_field->hasFieldArg( 'mapping template' ) ||
@@ -1465,15 +1465,15 @@ END;
 							}
 						} elseif ( count( $sub_components ) == 2 ) {
 							switch ( $sub_components[0] ) {
-							case 'label':
-								$input_label = self::getParsedValue( $parser, $sub_components[1] );
-								break;
-							case 'class':
-								$attr['class'] = $sub_components[1];
-								break;
-							case 'style':
-								$attr['style'] = Sanitizer::checkCSS( $sub_components[1] );
-								break;
+								case 'label':
+									$input_label = self::getParsedValue( $parser, $sub_components[1] );
+									break;
+								case 'class':
+									$attr['class'] = $sub_components[1];
+									break;
+								case 'style':
+									$attr['style'] = Sanitizer::checkCSS( $sub_components[1] );
+									break;
 							}
 						}
 					}
diff --git a/includes/PF_Hooks.php b/includes/PF_Hooks.php
index 264b7de..4a6d887 100644
--- a/includes/PF_Hooks.php
+++ b/includes/PF_Hooks.php
@@ -347,7 +347,7 @@ class PFHooks {
 			'<div id="pfForm" class="previewnote" style="font-weight: bold">' . $previewNote . "</div>\n<hr />\n";
 
 		$form_definition = StringUtils::delimiterReplace( '<noinclude>', '</noinclude>', '', $editpage->textbox1 );
-		list( $form_text, $data_text, $form_page_title, $generated_page_name ) =
+		[ $form_text, $data_text, $form_page_title, $generated_page_name ] =
 			$wgPageFormsFormPrinter->formHTML( $form_definition, null, false, null, null, "Page Forms form preview dummy title", null );
 
 		$parserOutput = PFUtils::getParser()->getOutput();
diff --git a/includes/PF_MappingUtils.php b/includes/PF_MappingUtils.php
index 35e5d97..3a64585 100644
--- a/includes/PF_MappingUtils.php
+++ b/includes/PF_MappingUtils.php
@@ -404,7 +404,7 @@ class PFMappingUtils {
 	 * @return string
 	 */
 	private static function removeNSPrefixFromLabel( string $label ) {
-		$labelArr = explode( ':',  trim( $label ) );
+		$labelArr = explode( ':', trim( $label ) );
 		if ( count( $labelArr ) > 1 ) {
 			$prefix = array_shift( $labelArr );
 			$res = implode( ':', $labelArr );
diff --git a/includes/PF_PageSection.php b/includes/PF_PageSection.php
index 591541e..5737954 100644
--- a/includes/PF_PageSection.php
+++ b/includes/PF_PageSection.php
@@ -48,18 +48,18 @@ class PFPageSection {
 
 			if ( count( $sub_components ) === 2 ) {
 				switch ( $sub_components[0] ) {
-				case 'level':
-					$ps->mSectionLevel = $sub_components[1];
-					break;
-				case 'rows':
-				case 'cols':
-				case 'class':
-				case 'editor':
-				case 'placeholder':
-					$ps->mSectionArgs[$sub_components[0]] = $sub_components[1];
-					break;
-				default:
-					// Ignore unknown
+					case 'level':
+						$ps->mSectionLevel = $sub_components[1];
+						break;
+					case 'rows':
+					case 'cols':
+					case 'class':
+					case 'editor':
+					case 'placeholder':
+						$ps->mSectionArgs[$sub_components[0]] = $sub_components[1];
+						break;
+					default:
+						// Ignore unknown
 				}
 			}
 		}
diff --git a/includes/PF_Template.php b/includes/PF_Template.php
index 6176438..0a8c5e2 100644
--- a/includes/PF_Template.php
+++ b/includes/PF_Template.php
@@ -242,7 +242,7 @@ class PFTemplate {
 
 		// First, get the table name, and fields, declared for this
 		// template, if any.
-		list( $tableName, $tableSchema ) = $this->getCargoTableAndSchema( $templateTitle );
+		[ $tableName, $tableSchema ] = $this->getCargoTableAndSchema( $templateTitle );
 		if ( $tableName == null ) {
 			$fieldDescriptions = [];
 		} else {
@@ -365,7 +365,7 @@ class PFTemplate {
 		if ( $tableSchemaString === null ) {
 			// There's no declared table - but see if there's an
 			// attached table.
-			list( $tableName, $isDeclared ) = CargoUtils::getTableNameForTemplate( $templateTitle );
+			[ $tableName, $isDeclared ] = CargoUtils::getTableNameForTemplate( $templateTitle );
 			if ( $tableName == null ) {
 				return [ null, null ];
 			}
diff --git a/includes/PF_TemplateInForm.php b/includes/PF_TemplateInForm.php
index c31b717..02fe94e 100644
--- a/includes/PF_TemplateInForm.php
+++ b/includes/PF_TemplateInForm.php
@@ -78,7 +78,7 @@ class PFTemplateInForm {
 		$tif->mAddButtonText = wfMessage( 'pf_formedit_addanother' )->text();
 
 		if ( array_key_exists( $tif->mTemplateName, $wgPageFormsEmbeddedTemplates ) ) {
-			list( $tif->mEmbedInTemplate, $tif->mEmbedInField ) =
+			[ $tif->mEmbedInTemplate, $tif->mEmbedInField ] =
 				$wgPageFormsEmbeddedTemplates[$tif->mTemplateName];
 			$tif->mPlaceholder = PFFormPrinter::placeholderFormat( $tif->mEmbedInTemplate, $tif->mEmbedInField );
 		}
@@ -381,7 +381,7 @@ class PFTemplateInForm {
 			[ '<nowiki', 'nowiki>' ]
 		];
 		foreach ( $startAndEndTags as $tags ) {
-			list( $startTag, $endTag ) = $tags;
+			[ $startTag, $endTag ] = $tags;
 
 			$startTagLoc = -1;
 			while ( ( $startTagLoc + strlen( $startTag ) < strlen( $str ) ) &&
diff --git a/includes/PF_ValuesUtils.php b/includes/PF_ValuesUtils.php
index 9851815..d3b3f47 100644
--- a/includes/PF_ValuesUtils.php
+++ b/includes/PF_ValuesUtils.php
@@ -661,7 +661,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 			if ( count( $arr ) == 3 ) {
 				$names_array = self::getValuesForCargoField( $arr[0], $arr[1], $arr[2] );
 			} else {
-				list( $table_name, $field_name ) = explode( '|', $source_name, 2 );
+				[ $table_name, $field_name ] = explode( '|', $source_name, 2 );
 				$names_array = self::getAllValuesForCargoField( $table_name, $field_name );
 			}
 			// Remove blank/null values from the array.
@@ -794,7 +794,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 	 * @return string[]
 	 */
 	public static function setAutocompleteValues( $field_args, $is_list ) {
-		list( $autocompleteFieldType, $autocompletionSource ) =
+		[ $autocompleteFieldType, $autocompletionSource ] =
 			self::getAutocompletionTypeAndSource( $field_args );
 		$autocompleteSettings = $autocompletionSource;
 		if ( $is_list ) {
@@ -912,7 +912,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 
 		$rawQuery = $rawQuery . "|named args=yes|link=none|limit=$wgPageFormsMaxAutocompleteValues|searchlabel=";
 		$rawQueryArray = explode( "|", $rawQuery );
-		list( $queryString, $processedParams, $printouts ) = SMWQueryProcessor::getComponentsFromFunctionParams( $rawQueryArray, false );
+		[ $queryString, $processedParams, $printouts ] = SMWQueryProcessor::getComponentsFromFunctionParams( $rawQueryArray, false );
 		SMWQueryProcessor::addThisPrintout( $printouts, $processedParams );
 		$processedParams = SMWQueryProcessor::getProcessedParams( $processedParams, $printouts );
 
diff --git a/includes/forminputs/PF_ComboBoxInput.php b/includes/forminputs/PF_ComboBoxInput.php
index b220c30..64278df 100644
--- a/includes/forminputs/PF_ComboBoxInput.php
+++ b/includes/forminputs/PF_ComboBoxInput.php
@@ -98,7 +98,7 @@ class PFComboBoxInput extends PFFormInput {
 				}
 			}
 		} else {
-			list( $autocompleteSettings, $remoteDataType, $delimiter ) = PFValuesUtils::setAutocompleteValues( $other_args, false );
+			[ $autocompleteSettings, $remoteDataType, $delimiter ] = PFValuesUtils::setAutocompleteValues( $other_args, false );
 			$autocompleteSettings = str_replace( "'", "\'", $autocompleteSettings );
 		}
 
diff --git a/includes/forminputs/PF_DateInput.php b/includes/forminputs/PF_DateInput.php
index c5801c4..ac301eb 100644
--- a/includes/forminputs/PF_DateInput.php
+++ b/includes/forminputs/PF_DateInput.php
@@ -174,7 +174,7 @@ class PFDateInput extends PFFormInput {
 				$month = $date['month'];
 				$day = $date['day'];
 			} else {
-				list( $year, $month, $day ) = self::parseDate( $date );
+				[ $year, $month, $day ] = self::parseDate( $date );
 			}
 		} else {
 			// Just keep everything at null.
diff --git a/includes/forminputs/PF_DatePickerInput.php b/includes/forminputs/PF_DatePickerInput.php
index 6d1f575..ea7283c 100644
--- a/includes/forminputs/PF_DatePickerInput.php
+++ b/includes/forminputs/PF_DatePickerInput.php
@@ -30,7 +30,7 @@ class PFDatePickerInput extends PFFormInput {
 	 */
 	public function __construct( $input_number, $cur_value, $input_name, $disabled, array $other_args ) {
 		if ( $cur_value != '' ) {
-			list( $year, $month, $day ) = PFDateInput::parseDate( $cur_value );
+			[ $year, $month, $day ] = PFDateInput::parseDate( $cur_value );
 			$cur_value = sprintf( '%04d-%02d-%02d', $year, $month, $day );
 		}
 
diff --git a/includes/forminputs/PF_DateTimePicker.php b/includes/forminputs/PF_DateTimePicker.php
index 75fd4ca..097271d 100644
--- a/includes/forminputs/PF_DateTimePicker.php
+++ b/includes/forminputs/PF_DateTimePicker.php
@@ -30,7 +30,7 @@ class PFDateTimePicker extends PFFormInput {
 	 */
 	public function __construct( $input_number, $cur_value, $input_name, $disabled, array $other_args ) {
 		if ( $cur_value != '' ) {
-			list( $year, $month, $day, $time ) = PFDateInput::parseDate( $cur_value, true );
+			[ $year, $month, $day, $time ] = PFDateInput::parseDate( $cur_value, true );
 			$cur_value = sprintf( '%04d-%02d-%02dT%sZ', $year, $month, $day, $time );
 		}
 		parent::__construct( $input_number, $cur_value, $input_name, $disabled, $other_args );
diff --git a/includes/forminputs/PF_LeafletInput.php b/includes/forminputs/PF_LeafletInput.php
index 10b695a..bbee11a 100644
--- a/includes/forminputs/PF_LeafletInput.php
+++ b/includes/forminputs/PF_LeafletInput.php
@@ -51,7 +51,7 @@ class PFLeafletInput extends PFOpenLayersInput {
 			$imagePage = new ImagePage( $fileTitle );
 			$file = $imagePage->getDisplayedFile();
 			$filePath = $wgUploadDirectory . '/' . $file->getUrlRel();
-			list( $imageWidth, $imageHeight, $type, $attr ) = getimagesize( $filePath );
+			[ $imageWidth, $imageHeight, $type, $attr ] = getimagesize( $filePath );
 			if ( !array_key_exists( 'height', $other_args ) && !array_key_exists( 'width', $other_args ) ) {
 				// Scale down image if it's huge.
 				$maxDimension = max( $imageHeight, $imageWidth );
diff --git a/includes/forminputs/PF_OpenLayersInput.php b/includes/forminputs/PF_OpenLayersInput.php
index b4076ae..cbc4a35 100644
--- a/includes/forminputs/PF_OpenLayersInput.php
+++ b/includes/forminputs/PF_OpenLayersInput.php
@@ -278,7 +278,7 @@ class PFOpenLayersInput extends PFFormInput {
 		if ( count( $latAndLonStrings ) != 2 ) {
 			throw new MWException( "Error parsing coordinates string: \"$coordinatesString\"." );
 		}
-		list( $latString, $lonString ) = $latAndLonStrings;
+		[ $latString, $lonString ] = $latAndLonStrings;
 
 		// Handle strings one at a time.
 		$latIsNegative = false;
diff --git a/includes/forminputs/PF_TokensInput.php b/includes/forminputs/PF_TokensInput.php
index 8309c0a..562a15e 100644
--- a/includes/forminputs/PF_TokensInput.php
+++ b/includes/forminputs/PF_TokensInput.php
@@ -95,7 +95,7 @@ class PFTokensInput extends PFFormInput {
 				$delimiter = ',';
 			}
 		} else {
-			list( $autocompleteSettings, $remoteDataType, $delimiter ) = PFValuesUtils::setAutocompleteValues( $other_args, true );
+			[ $autocompleteSettings, $remoteDataType, $delimiter ] = PFValuesUtils::setAutocompleteValues( $other_args, true );
 		}
 
 		if ( is_array( $cur_value ) ) {
diff --git a/includes/parserfunctions/PF_TemplateDisplay.php b/includes/parserfunctions/PF_TemplateDisplay.php
index 4418599..93f8b23 100644
--- a/includes/parserfunctions/PF_TemplateDisplay.php
+++ b/includes/parserfunctions/PF_TemplateDisplay.php
@@ -171,7 +171,7 @@ class PFTemplateDisplay {
 		$mappingFormat = new CargoMapsFormat( $parser->getOutput() );
 
 		try {
-			list( $lat, $lon ) = CargoUtils::parseCoordinatesString( $coordinatesStr );
+			[ $lat, $lon ] = CargoUtils::parseCoordinatesString( $coordinatesStr );
 		} catch ( MWException $e ) {
 			return '';
 		}
diff --git a/includes/parserfunctions/PF_TemplateParams.php b/includes/parserfunctions/PF_TemplateParams.php
index 5f0df47..b4f3375 100644
--- a/includes/parserfunctions/PF_TemplateParams.php
+++ b/includes/parserfunctions/PF_TemplateParams.php
@@ -33,7 +33,7 @@ class PFTemplateParams {
 
 		$fieldData = [];
 		foreach ( $params as $param ) {
-			list( $fieldName, $fieldParams ) = self::parseWikitextString( $param );
+			[ $fieldName, $fieldParams ] = self::parseWikitextString( $param );
 			if ( $fieldName !== '' ) {
 				$fieldData[$fieldName] = $fieldParams;
 			}
diff --git a/libs/PF_FullCalendar.js b/libs/PF_FullCalendar.js
index 89a39fb..ede42b4 100644
--- a/libs/PF_FullCalendar.js
+++ b/libs/PF_FullCalendar.js
@@ -338,15 +338,21 @@
 		function isValidDate(dateString) {
 			if( mw.config.get( 'wgAmericanDates' ) ) {
 				var reg = /^(January?|February?|March?|April?|May|June?|July?|August?|September?|October?|November?|December?)\s\d{1,2},\s\d{4}$/;
-				if(!dateString.match(reg)) { return false; }
+				if(!dateString.match(reg)) {
+ return false;
+}
 			} else {
 				dateString = dateString.replace('/','-');
 				dateString = dateString.replace('/','-');
 				var regEx = /^\d{4}-\d{2}-\d{2}$/;
-				if(!dateString.match(regEx)) { return false; } // Invalid format
+				if(!dateString.match(regEx)) {
+ return false;
+} // Invalid format
 				var d = new Date(dateString);
 				var dNum = d.getTime();
-				if(!dNum && dNum !== 0) { return false; } // NaN value, Invalid date
+				if(!dNum && dNum !== 0) {
+ return false;
+} // NaN value, Invalid date
 				return d.toISOString().slice(0,10) === dateString;
 			}
 		}
@@ -354,12 +360,16 @@
 		function dateTimeValidation(dateString) {
 			if( mw.config.get( 'wgAmericanDates' ) ) {
 				var 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}$/;
-				if ( !dateString.match( reg ) ) { return false; }
+				if ( !dateString.match( reg ) ) {
+ return false;
+}
 			} else {
 				dateString = dateString.replace('/','-');
 				dateString = dateString.replace('/','-');
 				var regEx = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
-				if ( !dateString.match( regEx ) ) { return false; } // Invalid format
+				if ( !dateString.match( regEx ) ) {
+ return false;
+} // Invalid format
 				return !!new Date(dateString).getTime();
 			}
 		}
diff --git a/libs/PF_SpreadsheetAutocompleteWidget.js b/libs/PF_SpreadsheetAutocompleteWidget.js
index 91a2d62..fe16753 100644
--- a/libs/PF_SpreadsheetAutocompleteWidget.js
+++ b/libs/PF_SpreadsheetAutocompleteWidget.js
@@ -158,7 +158,6 @@ pf.spreadsheetAutocompleteWidget.prototype.getLookupRequest = function() {
 };
 
 /**
- *
  * @param {string} suggestion
  * @return {Mixed} HtmlSnipppet
  *
diff --git a/libs/PF_SpreadsheetComboBoxInput.js b/libs/PF_SpreadsheetComboBoxInput.js
index ae9f1f7..b112ec7 100644
--- a/libs/PF_SpreadsheetComboBoxInput.js
+++ b/libs/PF_SpreadsheetComboBoxInput.js
@@ -126,7 +126,6 @@ pf.SpreadsheetComboBoxInput.prototype.setValues = function() {
 	}
 }
 /**
- *
  * @param {string} suggestion
  * @return HtmlSnippet
  */
diff --git a/libs/PF_spreadsheet.js b/libs/PF_spreadsheet.js
index 482dabe..1e65131 100644
--- a/libs/PF_spreadsheet.js
+++ b/libs/PF_spreadsheet.js
@@ -840,7 +840,9 @@ var dataValues = [];
 					allowInsertColumn: false,
 					allowDeletingAllRows: true,
 					oninsertrow: rowAdded,
-					contextMenu: function() { return false; },
+					contextMenu: function() {
+ return false;
+},
 					tableHeight: "2500px",
 					pagination: (editMultiplePages === undefined ) ? false : 100,
 					search: (editMultiplePages !== undefined ),
diff --git a/libs/PF_timepicker.js b/libs/PF_timepicker.js
index a7fe59d..3ca91d9 100644
--- a/libs/PF_timepicker.js
+++ b/libs/PF_timepicker.js
@@ -224,7 +224,9 @@ window.PF_TP_init = function( inputID, params ) { // minTime, maxTime, interval,
 	// hide timepicker when input loses focus
 	$inputShow
 	.blur(function() {
-		jQuery( '#' + inputID + '_tree ul' ).fadeOut( 'normal', function() { jQuery(this).hide(); });
+		jQuery( '#' + inputID + '_tree ul' ).fadeOut( 'normal', function() {
+ jQuery(this).hide();
+});
 	});
 
 	if ( ! params.partOfDTP ) {
diff --git a/libs/PageForms.js b/libs/PageForms.js
index 431b36b..ae386c0 100644
--- a/libs/PageForms.js
+++ b/libs/PageForms.js
@@ -1287,7 +1287,9 @@ $.fn.addInstance = function( addAboveCurInstance ) {
 	// of any divs and spans (presumably, these exist only for the
 	// sake of "show on select"). We do the deletions because no two
 	// elements on the page are allowed to have the same ID.
-	$new_div.find('[id!=""]').attr('data-origID', function() { return this.id; });
+	$new_div.find('[id!=""]').attr('data-origID', function() {
+ return this.id;
+});
 	$new_div.find('div[id!=""], span[id!=""]').removeAttr('id');
 
 	$new_div.find('.hiddenByPF')
@@ -1504,7 +1506,9 @@ $.fn.setDependentAutocompletion = function( dependentField, baseField, baseValue
  */
 $.fn.setAutocompleteForDependentField = function( partOfMultiple ) {
 	var curValue = $(this).val();
-	if ( curValue === null ) { return this; }
+	if ( curValue === null ) {
+ return this;
+}
 
 	var nameAttr = partOfMultiple ? 'origName' : 'name';
 	var name = $(this).attr(nameAttr);
diff --git a/package-lock.json b/package-lock.json
index c55e8b2..cbacd04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,42 +6,53 @@
 		"": {
 			"name": "PageForms",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.25.0",
+				"eslint-config-wikimedia": "0.26.0",
 				"grunt": "1.6.1",
-				"grunt-banana-checker": "0.11.0",
-				"grunt-eslint": "24.0.1"
+				"grunt-banana-checker": "0.11.1",
+				"grunt-eslint": "24.3.0"
+			}
+		},
+		"node_modules/@aashutoshrathi/word-wrap": {
+			"version": "1.2.6",
+			"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+			"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/@babel/code-frame": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
-			"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
 			"dev": true,
 			"dependencies": {
-				"@babel/highlight": "^7.18.6"
+				"@babel/highlight": "^7.24.2",
+				"picocolors": "^1.0.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-validator-identifier": {
-			"version": "7.19.1",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+			"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==",
 			"dev": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/highlight": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-			"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.18.6",
-				"chalk": "^2.0.0",
-				"js-tokens": "^4.0.0"
+				"@babel/helper-validator-identifier": "^7.22.20",
+				"chalk": "^2.4.2",
+				"js-tokens": "^4.0.0",
+				"picocolors": "^1.0.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -71,23 +82,23 @@
 			}
 		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.23.6",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
-			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
+			"version": "0.37.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz",
+			"integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==",
 			"dev": true,
 			"dependencies": {
 				"comment-parser": "1.3.1",
-				"esquery": "^1.4.0",
-				"jsdoc-type-pratt-parser": "~2.2.5"
+				"esquery": "^1.5.0",
+				"jsdoc-type-pratt-parser": "~4.0.0"
 			},
 			"engines": {
-				"node": "^12 || ^14 || ^16 || ^17"
+				"node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20"
 			}
 		},
 		"node_modules/@eslint-community/eslint-utils": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
-			"integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.3.0"
@@ -99,33 +110,24 @@
 				"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
 			}
 		},
-		"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/@eslint-community/regexpp": {
-			"version": "4.4.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
-			"integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+			"version": "4.10.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
 			"dev": true,
 			"engines": {
 				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
 			}
 		},
 		"node_modules/@eslint/eslintrc": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
-			"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
 			"dev": true,
 			"dependencies": {
 				"ajv": "^6.12.4",
 				"debug": "^4.3.2",
-				"espree": "^9.5.0",
+				"espree": "^9.6.0",
 				"globals": "^13.19.0",
 				"ignore": "^5.2.0",
 				"import-fresh": "^3.2.1",
@@ -171,22 +173,22 @@
 			}
 		},
 		"node_modules/@eslint/js": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
-			"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
 			"dev": true,
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
 			}
 		},
 		"node_modules/@humanwhocodes/config-array": {
-			"version": "0.11.8",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-			"integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+			"version": "0.11.14",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
 			"dev": true,
 			"dependencies": {
-				"@humanwhocodes/object-schema": "^1.2.1",
-				"debug": "^4.1.1",
+				"@humanwhocodes/object-schema": "^2.0.2",
+				"debug": "^4.3.1",
 				"minimatch": "^3.0.5"
 			},
 			"engines": {
@@ -207,15 +209,15 @@
 			}
 		},
 		"node_modules/@humanwhocodes/object-schema": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-			"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+			"integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
 			"dev": true
 		},
 		"node_modules/@mdn/browser-compat-data": {
-			"version": "4.2.1",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz",
-			"integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==",
+			"version": "5.5.17",
+			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.17.tgz",
+			"integrity": "sha512-M4r4nllQiFvHzbZmx+W1WhrLiMNu4XZ+t3AzzmePQ2P9zaxov2xFmd8KrOSQ0NN2QoJ8BINWdSkVU4sAcDTMJw==",
 			"dev": true
 		},
 		"node_modules/@nodelib/fs.scandir": {
@@ -253,10 +255,150 @@
 				"node": ">= 8"
 			}
 		},
+		"node_modules/@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true
+		},
 		"node_modules/@types/normalize-package-data": {
-			"version": "2.4.1",
-			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-			"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+			"version": "2.4.4",
+			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+			"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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"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==",
+			"dev": true,
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0",
+				"debug": "^4.3.4",
+				"globby": "^11.1.0",
+				"is-glob": "^4.0.3",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"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==",
+			"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"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^4.1.1"
+			},
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"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==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"eslint-visitor-keys": "^3.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
 			"dev": true
 		},
 		"node_modules/abbrev": {
@@ -266,9 +408,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.8.2",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-			"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+			"version": "8.11.3",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -323,6 +465,15 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/are-docs-informative": {
+			"version": "0.0.2",
+			"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+			"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+			"dev": true,
+			"engines": {
+				"node": ">=14"
+			}
+		},
 		"node_modules/argparse": {
 			"version": "1.0.10",
 			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -356,21 +507,24 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/array-union": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/ast-metadata-inferer": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
-			"integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+			"version": "0.8.0",
+			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz",
+			"integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==",
 			"dev": true,
 			"dependencies": {
-				"@mdn/browser-compat-data": "^3.3.14"
+				"@mdn/browser-compat-data": "^5.2.34"
 			}
 		},
-		"node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
-			"version": "3.3.14",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
-			"integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
-			"dev": true
-		},
 		"node_modules/async": {
 			"version": "3.2.3",
 			"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
@@ -412,9 +566,9 @@
 			}
 		},
 		"node_modules/browserslist": {
-			"version": "4.20.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-			"integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+			"version": "4.23.0",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+			"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -424,14 +578,17 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			],
 			"dependencies": {
-				"caniuse-lite": "^1.0.30001332",
-				"electron-to-chromium": "^1.4.118",
-				"escalade": "^3.1.1",
-				"node-releases": "^2.0.3",
-				"picocolors": "^1.0.0"
+				"caniuse-lite": "^1.0.30001587",
+				"electron-to-chromium": "^1.4.668",
+				"node-releases": "^2.0.14",
+				"update-browserslist-db": "^1.0.13"
 			},
 			"bin": {
 				"browserslist": "cli.js"
@@ -441,9 +598,9 @@
 			}
 		},
 		"node_modules/browserslist-config-wikimedia": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
-			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz",
+			"integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==",
 			"dev": true
 		},
 		"node_modules/builtin-modules": {
@@ -458,6 +615,15 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/builtins": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+			"integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+			"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",
@@ -468,9 +634,9 @@
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001341",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz",
-			"integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==",
+			"version": "1.0.30001600",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+			"integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -480,6 +646,10 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			]
 		},
@@ -551,9 +721,9 @@
 			}
 		},
 		"node_modules/ci-info": {
-			"version": "3.8.0",
-			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-			"integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+			"version": "3.9.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+			"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -625,17 +795,6 @@
 			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
 			"dev": true
 		},
-		"node_modules/core-js": {
-			"version": "3.22.5",
-			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz",
-			"integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==",
-			"dev": true,
-			"hasInstallScript": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
 		"node_modules/cross-spawn": {
 			"version": "7.0.3",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -703,6 +862,18 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/dir-glob": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+			"dev": true,
+			"dependencies": {
+				"path-type": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/doctrine": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -716,9 +887,9 @@
 			}
 		},
 		"node_modules/electron-to-chromium": {
-			"version": "1.4.137",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz",
-			"integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==",
+			"version": "1.4.719",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
+			"integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
 			"dev": true
 		},
 		"node_modules/error-ex": {
@@ -731,9 +902,9 @@
 			}
 		},
 		"node_modules/escalade": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+			"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
 			"dev": true,
 			"engines": {
 				"node": ">=6"
@@ -752,27 +923,28 @@
 			}
 		},
 		"node_modules/eslint": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
-			"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.2.0",
-				"@eslint-community/regexpp": "^4.4.0",
-				"@eslint/eslintrc": "^2.0.1",
-				"@eslint/js": "8.36.0",
-				"@humanwhocodes/config-array": "^0.11.8",
+				"@eslint-community/regexpp": "^4.6.1",
+				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/js": "8.57.0",
+				"@humanwhocodes/config-array": "^0.11.14",
 				"@humanwhocodes/module-importer": "^1.0.1",
 				"@nodelib/fs.walk": "^1.2.8",
-				"ajv": "^6.10.0",
+				"@ungap/structured-clone": "^1.2.0",
+				"ajv": "^6.12.4",
 				"chalk": "^4.0.0",
 				"cross-spawn": "^7.0.2",
 				"debug": "^4.3.2",
 				"doctrine": "^3.0.0",
 				"escape-string-regexp": "^4.0.0",
-				"eslint-scope": "^7.1.1",
-				"eslint-visitor-keys": "^3.3.0",
-				"espree": "^9.5.0",
+				"eslint-scope": "^7.2.2",
+				"eslint-visitor-keys": "^3.4.3",
+				"espree": "^9.6.1",
 				"esquery": "^1.4.2",
 				"esutils": "^2.0.2",
 				"fast-deep-equal": "^3.1.3",
@@ -780,22 +952,19 @@
 				"find-up": "^5.0.0",
 				"glob-parent": "^6.0.2",
 				"globals": "^13.19.0",
-				"grapheme-splitter": "^1.0.4",
+				"graphemer": "^1.4.0",
 				"ignore": "^5.2.0",
-				"import-fresh": "^3.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-glob": "^4.0.0",
 				"is-path-inside": "^3.0.3",
-				"js-sdsl": "^4.1.4",
 				"js-yaml": "^4.1.0",
 				"json-stable-stringify-without-jsonify": "^1.0.1",
 				"levn": "^0.4.1",
 				"lodash.merge": "^4.6.2",
 				"minimatch": "^3.1.2",
 				"natural-compare": "^1.4.0",
-				"optionator": "^0.9.1",
+				"optionator": "^0.9.3",
 				"strip-ansi": "^6.0.1",
-				"strip-json-comments": "^3.1.0",
 				"text-table": "^0.2.0"
 			},
 			"bin": {
@@ -808,105 +977,178 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"semver": "^7.5.4"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
+			}
+		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
-			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz",
+			"integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==",
 			"dev": true,
 			"dependencies": {
-				"browserslist-config-wikimedia": "^0.5.0",
-				"eslint": "^8.31.0",
-				"eslint-plugin-compat": "^4.0.2",
-				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "39.2.2",
+				"browserslist-config-wikimedia": "^0.5.1",
+				"eslint": "^8.53.0",
+				"eslint-plugin-compat": "^4.2.0",
+				"eslint-plugin-es-x": "^7.3.0",
+				"eslint-plugin-jest": "^27.6.0",
+				"eslint-plugin-jsdoc": "^42.0.0",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.5.0",
-				"eslint-plugin-mocha": "^9.0.0",
+				"eslint-plugin-mocha": "^10.2.0",
+				"eslint-plugin-n": "^16.0.1",
 				"eslint-plugin-no-jquery": "^2.7.0",
-				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-qunit": "^7.3.4",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^42.0.0",
-				"eslint-plugin-vue": "^8.7.1",
+				"eslint-plugin-unicorn": "^47.0.0",
+				"eslint-plugin-vue": "^9.18.1",
 				"eslint-plugin-wdio": "^7.19.4",
-				"eslint-plugin-yml": "^0.14.0"
+				"eslint-plugin-yml": "^1.10.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-vue": {
+			"version": "9.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz",
+			"integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"globals": "^13.24.0",
+				"natural-compare": "^1.4.0",
+				"nth-check": "^2.1.1",
+				"postcss-selector-parser": "^6.0.15",
+				"semver": "^7.6.0",
+				"vue-eslint-parser": "^9.4.2",
+				"xml-name-validator": "^4.0.0"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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==",
+			"dev": true,
+			"dependencies": {
+				"debug": "^4.3.4",
+				"eslint-scope": "^7.1.1",
+				"eslint-visitor-keys": "^3.3.0",
+				"espree": "^9.3.1",
+				"esquery": "^1.4.0",
+				"lodash": "^4.17.21",
+				"semver": "^7.3.6"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-compat": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
-			"integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
+			"integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==",
 			"dev": true,
 			"dependencies": {
-				"@mdn/browser-compat-data": "^4.1.5",
-				"ast-metadata-inferer": "^0.7.0",
-				"browserslist": "^4.16.8",
-				"caniuse-lite": "^1.0.30001304",
-				"core-js": "^3.16.2",
+				"@mdn/browser-compat-data": "^5.3.13",
+				"ast-metadata-inferer": "^0.8.0",
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001524",
 				"find-up": "^5.0.0",
-				"lodash.memoize": "4.1.2",
-				"semver": "7.3.5"
+				"lodash.memoize": "^4.1.2",
+				"semver": "^7.5.4"
 			},
 			"engines": {
-				"node": ">=9.x"
+				"node": ">=14.x"
 			},
 			"peerDependencies": {
 				"eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-es-x": {
-			"version": "5.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz",
-			"integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==",
+			"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==",
 			"dev": true,
 			"dependencies": {
-				"eslint-utils": "^2.0.0 || ^3.0.0",
-				"regexpp": "^3.0.0"
+				"@eslint-community/eslint-utils": "^4.1.2",
+				"@eslint-community/regexpp": "^4.6.0",
+				"eslint-compat-utils": "^0.5.0"
 			},
 			"engines": {
-				"node": ">=8.10.0"
+				"node": "^14.18.0 || >=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ota-meshi"
 			},
 			"peerDependencies": {
-				"eslint": ">=4.19.1"
+				"eslint": ">=8"
 			}
 		},
-		"node_modules/eslint-plugin-jsdoc": {
-			"version": "39.2.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
-			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
+		"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==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.23.1",
-				"comment-parser": "1.3.1",
-				"debug": "^4.3.4",
-				"escape-string-regexp": "^4.0.0",
-				"esquery": "^1.4.0",
-				"semver": "^7.3.7",
-				"spdx-expression-parse": "^3.0.1"
+				"@typescript-eslint/utils": "^5.10.0"
 			},
 			"engines": {
-				"node": "^14 || ^16 || ^17"
+				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
 			},
 			"peerDependencies": {
-				"eslint": "^7.0.0 || ^8.0.0"
+				"@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
+				"eslint": "^7.0.0 || ^8.0.0",
+				"jest": "*"
+			},
+			"peerDependenciesMeta": {
+				"@typescript-eslint/eslint-plugin": {
+					"optional": true
+				},
+				"jest": {
+					"optional": true
+				}
 			}
 		},
-		"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
-			"version": "7.3.8",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-			"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+		"node_modules/eslint-plugin-jsdoc": {
+			"version": "42.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz",
+			"integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==",
 			"dev": true,
 			"dependencies": {
-				"lru-cache": "^6.0.0"
-			},
-			"bin": {
-				"semver": "bin/semver.js"
+				"@es-joy/jsdoccomment": "~0.37.0",
+				"are-docs-informative": "^0.0.2",
+				"comment-parser": "1.3.1",
+				"debug": "^4.3.4",
+				"escape-string-regexp": "^4.0.0",
+				"esquery": "^1.5.0",
+				"semver": "^7.3.8",
+				"spdx-expression-parse": "^3.0.1"
 			},
 			"engines": {
-				"node": ">=10"
+				"node": "^14 || ^16 || ^17 || ^18 || ^19"
+			},
+			"peerDependencies": {
+				"eslint": "^7.0.0 || ^8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-json-es": {
@@ -922,15 +1164,6 @@
 				"eslint": ">= 7"
 			}
 		},
-		"node_modules/eslint-plugin-json-es/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/eslint-plugin-mediawiki": {
 			"version": "0.5.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
@@ -945,46 +1178,60 @@
 			}
 		},
 		"node_modules/eslint-plugin-mocha": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
-			"integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+			"version": "10.4.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz",
+			"integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-utils": "^3.0.0",
-				"ramda": "^0.27.1"
+				"globals": "^13.24.0",
+				"rambda": "^7.4.0"
 			},
 			"engines": {
-				"node": ">=12.0.0"
+				"node": ">=14.0.0"
 			},
 			"peerDependencies": {
 				"eslint": ">=7.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-mocha/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+		"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==",
 			"dev": true,
 			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"builtins": "^5.0.1",
+				"eslint-plugin-es-x": "^7.5.0",
+				"get-tsconfig": "^4.7.0",
+				"globals": "^13.24.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",
+				"semver": "^7.5.3"
 			},
 			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+				"node": ">=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/mysticatea"
 			},
 			"peerDependencies": {
-				"eslint": ">=5"
+				"eslint": ">=7.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-mocha/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+		"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==",
 			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
 			"engines": {
-				"node": ">=10"
+				"node": "*"
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
@@ -996,45 +1243,6 @@
 				"eslint": ">=2.3.0"
 			}
 		},
-		"node_modules/eslint-plugin-node": {
-			"version": "11.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
-			"integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
-			"dev": true,
-			"dependencies": {
-				"eslint-plugin-es": "^3.0.0",
-				"eslint-utils": "^2.0.0",
-				"ignore": "^5.1.1",
-				"minimatch": "^3.0.4",
-				"resolve": "^1.10.1",
-				"semver": "^6.1.0"
-			},
-			"engines": {
-				"node": ">=8.10.0"
-			}
-		},
-		"node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
-			"integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
-			"dev": true,
-			"dependencies": {
-				"eslint-utils": "^2.0.0",
-				"regexpp": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=8.10.0"
-			}
-		},
-		"node_modules/eslint-plugin-node/node_modules/semver": {
-			"version": "6.3.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-			"dev": true,
-			"bin": {
-				"semver": "bin/semver.js"
-			}
-		},
 		"node_modules/eslint-plugin-qunit": {
 			"version": "7.3.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz",
@@ -1048,33 +1256,6 @@
 				"node": "12.x || 14.x || >=16.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-qunit/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-qunit/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/eslint-plugin-security": {
 			"version": "1.7.1",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
@@ -1085,61 +1266,36 @@
 			}
 		},
 		"node_modules/eslint-plugin-unicorn": {
-			"version": "42.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-			"integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+			"version": "47.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz",
+			"integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.15.7",
-				"ci-info": "^3.3.0",
+				"@babel/helper-validator-identifier": "^7.19.1",
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"ci-info": "^3.8.0",
 				"clean-regexp": "^1.0.0",
-				"eslint-utils": "^3.0.0",
-				"esquery": "^1.4.0",
+				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
-				"is-builtin-module": "^3.1.0",
+				"is-builtin-module": "^3.2.1",
+				"jsesc": "^3.0.2",
 				"lodash": "^4.17.21",
 				"pluralize": "^8.0.0",
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.24",
+				"regjsparser": "^0.10.0",
 				"safe-regex": "^2.1.1",
-				"semver": "^7.3.5",
+				"semver": "^7.3.8",
 				"strip-indent": "^3.0.0"
 			},
 			"engines": {
-				"node": ">=12"
+				"node": ">=16"
 			},
 			"funding": {
 				"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
 			},
 			"peerDependencies": {
-				"eslint": ">=8.8.0"
-			}
-		},
-		"node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
+				"eslint": ">=8.38.0"
 			}
 		},
 		"node_modules/eslint-plugin-vue": {
@@ -1162,33 +1318,6 @@
 				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-vue/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/eslint-plugin-wdio": {
 			"version": "7.19.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.19.4.tgz",
@@ -1199,18 +1328,19 @@
 			}
 		},
 		"node_modules/eslint-plugin-yml": {
-			"version": "0.14.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz",
-			"integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==",
+			"version": "1.13.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz",
+			"integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==",
 			"dev": true,
 			"dependencies": {
 				"debug": "^4.3.2",
+				"eslint-compat-utils": "^0.5.0",
 				"lodash": "^4.17.21",
 				"natural-compare": "^1.4.0",
-				"yaml-eslint-parser": "^0.5.0"
+				"yaml-eslint-parser": "^1.2.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^14.17.0 || >=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ota-meshi"
@@ -1220,9 +1350,9 @@
 			}
 		},
 		"node_modules/eslint-scope": {
-			"version": "7.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-			"integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
 			"dev": true,
 			"dependencies": {
 				"esrecurse": "^4.3.0",
@@ -1230,27 +1360,48 @@
 			},
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
 			}
 		},
 		"node_modules/eslint-utils": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-			"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
 			"dev": true,
 			"dependencies": {
-				"eslint-visitor-keys": "^1.1.0"
+				"eslint-visitor-keys": "^2.0.0"
 			},
 			"engines": {
-				"node": ">=6"
+				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=5"
+			}
+		},
+		"node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
 			}
 		},
 		"node_modules/eslint-visitor-keys": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-			"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
 			"dev": true,
 			"engines": {
-				"node": ">=4"
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
 			}
 		},
 		"node_modules/eslint/node_modules/argparse": {
@@ -1259,15 +1410,6 @@
 			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 			"dev": true
 		},
-		"node_modules/eslint/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/eslint/node_modules/js-yaml": {
 			"version": "4.1.0",
 			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1293,14 +1435,14 @@
 			}
 		},
 		"node_modules/espree": {
-			"version": "9.5.0",
-			"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
-			"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
 			"dev": true,
 			"dependencies": {
-				"acorn": "^8.8.0",
+				"acorn": "^8.9.0",
 				"acorn-jsx": "^5.3.2",
-				"eslint-visitor-keys": "^3.3.0"
+				"eslint-visitor-keys": "^3.4.1"
 			},
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1309,15 +1451,6 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
-		"node_modules/espree/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/esprima": {
 			"version": "4.0.1",
 			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -1412,6 +1545,34 @@
 			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
 			"dev": true
 		},
+		"node_modules/fast-glob": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+			"dev": true,
+			"dependencies": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.4"
+			},
+			"engines": {
+				"node": ">=8.6.0"
+			}
+		},
+		"node_modules/fast-glob/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"dev": true,
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
 		"node_modules/fast-json-stable-stringify": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1421,7 +1582,7 @@
 		"node_modules/fast-levenshtein": {
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 			"dev": true
 		},
 		"node_modules/fastq": {
@@ -1560,10 +1721,25 @@
 			"dev": true
 		},
 		"node_modules/function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-			"dev": true
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+			"dev": true,
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"resolve-pkg-maps": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+			}
 		},
 		"node_modules/getobject": {
 			"version": "1.0.0",
@@ -1646,9 +1822,9 @@
 			}
 		},
 		"node_modules/globals": {
-			"version": "13.20.0",
-			"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-			"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+			"version": "13.24.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
 			"dev": true,
 			"dependencies": {
 				"type-fest": "^0.20.2"
@@ -1660,10 +1836,30 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/grapheme-splitter": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-			"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+		"node_modules/globby": {
+			"version": "11.1.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+			"dev": true,
+			"dependencies": {
+				"array-union": "^2.1.0",
+				"dir-glob": "^3.0.1",
+				"fast-glob": "^3.2.9",
+				"ignore": "^5.2.0",
+				"merge2": "^1.4.1",
+				"slash": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/graphemer": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
 			"dev": true
 		},
 		"node_modules/grunt": {
@@ -1694,9 +1890,9 @@
 			}
 		},
 		"node_modules/grunt-banana-checker": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz",
-			"integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==",
+			"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,
 			"bin": {
 				"banana-checker": "src/cli.js"
@@ -1738,13 +1934,13 @@
 			}
 		},
 		"node_modules/grunt-eslint": {
-			"version": "24.0.1",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
-			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
+			"version": "24.3.0",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.3.0.tgz",
+			"integrity": "sha512-dUPiRgX8fhmh4uwTAn9xrzg7HV5j5DhGmZZGJdHfjy/AN9G4jD+5IjfbcAJ209JcIG8m4B7xz3crIhuDSm3siQ==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2",
-				"eslint": "^8.0.1"
+				"eslint": "^8.44.0"
 			},
 			"engines": {
 				"node": ">=12"
@@ -1811,18 +2007,6 @@
 				"node": ">=10"
 			}
 		},
-		"node_modules/has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"dependencies": {
-				"function-bind": "^1.1.1"
-			},
-			"engines": {
-				"node": ">= 0.4.0"
-			}
-		},
 		"node_modules/has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -1832,6 +2016,18 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/hasown": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+			"dev": true,
+			"dependencies": {
+				"function-bind": "^1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/homedir-polyfill": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -1872,9 +2068,9 @@
 			}
 		},
 		"node_modules/ignore": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-			"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+			"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
 			"dev": true,
 			"engines": {
 				"node": ">= 4"
@@ -1977,12 +2173,12 @@
 			}
 		},
 		"node_modules/is-core-module": {
-			"version": "2.9.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-			"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+			"version": "2.13.1",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+			"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
 			"dev": true,
 			"dependencies": {
-				"has": "^1.0.3"
+				"hasown": "^2.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ljharb"
@@ -2087,16 +2283,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/js-sdsl": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
-			"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
-			"dev": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/js-sdsl"
-			}
-		},
 		"node_modules/js-tokens": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -2117,14 +2303,26 @@
 			}
 		},
 		"node_modules/jsdoc-type-pratt-parser": {
-			"version": "2.2.5",
-			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
-			"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+			"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
 			"dev": true,
 			"engines": {
 				"node": ">=12.0.0"
 			}
 		},
+		"node_modules/jsesc": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+			"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+			"dev": true,
+			"bin": {
+				"jsesc": "bin/jsesc"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
 		"node_modules/json-parse-even-better-errors": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -2229,7 +2427,7 @@
 		"node_modules/lodash.memoize": {
 			"version": "4.1.2",
 			"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-			"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+			"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
 			"dev": true
 		},
 		"node_modules/lodash.merge": {
@@ -2271,6 +2469,15 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 8"
+			}
+		},
 		"node_modules/micromatch": {
 			"version": "4.0.5",
 			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -2318,9 +2525,9 @@
 			"dev": true
 		},
 		"node_modules/node-releases": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
-			"integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
+			"version": "2.0.14",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+			"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
 			"dev": true
 		},
 		"node_modules/nopt": {
@@ -2348,9 +2555,9 @@
 			}
 		},
 		"node_modules/normalize-package-data/node_modules/semver": {
-			"version": "5.7.1",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-			"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+			"version": "5.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+			"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
 			"dev": true,
 			"bin": {
 				"semver": "bin/semver"
@@ -2418,17 +2625,17 @@
 			}
 		},
 		"node_modules/optionator": {
-			"version": "0.9.1",
-			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-			"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+			"version": "0.9.3",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+			"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
 			"dev": true,
 			"dependencies": {
+				"@aashutoshrathi/word-wrap": "^1.2.3",
 				"deep-is": "^0.1.3",
 				"fast-levenshtein": "^2.0.6",
 				"levn": "^0.4.1",
 				"prelude-ls": "^1.2.1",
-				"type-check": "^0.4.0",
-				"word-wrap": "^1.2.3"
+				"type-check": "^0.4.0"
 			},
 			"engines": {
 				"node": ">= 0.8.0"
@@ -2608,6 +2815,15 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -2636,9 +2852,9 @@
 			}
 		},
 		"node_modules/postcss-selector-parser": {
-			"version": "6.0.12",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
-			"integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+			"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==",
 			"dev": true,
 			"dependencies": {
 				"cssesc": "^3.0.0",
@@ -2658,9 +2874,9 @@
 			}
 		},
 		"node_modules/punycode": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-			"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 			"dev": true,
 			"engines": {
 				"node": ">=6"
@@ -2686,10 +2902,10 @@
 				}
 			]
 		},
-		"node_modules/ramda": {
-			"version": "0.27.2",
-			"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
-			"integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+		"node_modules/rambda": {
+			"version": "7.5.0",
+			"resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+			"integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
 			"dev": true
 		},
 		"node_modules/read-pkg": {
@@ -2815,16 +3031,25 @@
 				"regexp-tree": "bin/regexp-tree"
 			}
 		},
-		"node_modules/regexpp": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+		"node_modules/regjsparser": {
+			"version": "0.10.0",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+			"integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
 			"dev": true,
-			"engines": {
-				"node": ">=8"
+			"dependencies": {
+				"jsesc": "~0.5.0"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
+			"bin": {
+				"regjsparser": "bin/parser"
+			}
+		},
+		"node_modules/regjsparser/node_modules/jsesc": {
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+			"integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+			"dev": true,
+			"bin": {
+				"jsesc": "bin/jsesc"
 			}
 		},
 		"node_modules/requireindex": {
@@ -2837,12 +3062,12 @@
 			}
 		},
 		"node_modules/resolve": {
-			"version": "1.22.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-			"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+			"version": "1.22.8",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 			"dev": true,
 			"dependencies": {
-				"is-core-module": "^2.8.1",
+				"is-core-module": "^2.13.0",
 				"path-parse": "^1.0.7",
 				"supports-preserve-symlinks-flag": "^1.0.0"
 			},
@@ -2875,6 +3100,15 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/resolve-pkg-maps": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+			"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+			"dev": true,
+			"funding": {
+				"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+			}
+		},
 		"node_modules/reusify": {
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -2936,9 +3170,9 @@
 			"dev": true
 		},
 		"node_modules/semver": {
-			"version": "7.3.5",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+			"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,
 			"dependencies": {
 				"lru-cache": "^6.0.0"
@@ -2971,6 +3205,15 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/spdx-correct": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -2982,9 +3225,9 @@
 			}
 		},
 		"node_modules/spdx-exceptions": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-			"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+			"version": "2.5.0",
+			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+			"integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
 			"dev": true
 		},
 		"node_modules/spdx-expression-parse": {
@@ -2998,9 +3241,9 @@
 			}
 		},
 		"node_modules/spdx-license-ids": {
-			"version": "3.0.13",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-			"integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+			"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==",
 			"dev": true
 		},
 		"node_modules/sprintf-js": {
@@ -3087,6 +3330,27 @@
 				"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==",
+			"dev": true,
+			"dependencies": {
+				"tslib": "^1.8.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			},
+			"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"
+			}
+		},
 		"node_modules/type-check": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3111,6 +3375,20 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/typescript": {
+			"version": "5.4.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+			"integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+			"dev": true,
+			"peer": true,
+			"bin": {
+				"tsc": "bin/tsc",
+				"tsserver": "bin/tsserver"
+			},
+			"engines": {
+				"node": ">=14.17"
+			}
+		},
 		"node_modules/unc-path-regex": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -3143,6 +3421,36 @@
 				"yarn": "*"
 			}
 		},
+		"node_modules/update-browserslist-db": {
+			"version": "1.0.13",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+			"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"dependencies": {
+				"escalade": "^3.1.1",
+				"picocolors": "^1.0.0"
+			},
+			"bin": {
+				"update-browserslist-db": "cli.js"
+			},
+			"peerDependencies": {
+				"browserslist": ">= 4.21.0"
+			}
+		},
 		"node_modules/uri-js": {
 			"version": "4.4.1",
 			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3204,18 +3512,6 @@
 				"eslint": ">=6.0.0"
 			}
 		},
-		"node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
-			"version": "3.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
-			"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"url": "https://opencollective.com/eslint"
-			}
-		},
 		"node_modules/which": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3231,21 +3527,21 @@
 				"node": ">= 8"
 			}
 		},
-		"node_modules/word-wrap": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-			"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
 		"node_modules/wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 			"dev": true
 		},
+		"node_modules/xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			}
+		},
 		"node_modules/yallist": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -3253,35 +3549,32 @@
 			"dev": true
 		},
 		"node_modules/yaml": {
-			"version": "1.10.2",
-			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+			"integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
 			"dev": true,
+			"bin": {
+				"yaml": "bin.mjs"
+			},
 			"engines": {
-				"node": ">= 6"
+				"node": ">= 14"
 			}
 		},
 		"node_modules/yaml-eslint-parser": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
-			"integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz",
+			"integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.0.0",
 				"lodash": "^4.17.21",
-				"yaml": "^1.10.2"
+				"yaml": "^2.0.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
-		"node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ota-meshi"
 			}
 		},
 		"node_modules/yocto-queue": {
@@ -3298,30 +3591,38 @@
 		}
 	},
 	"dependencies": {
+		"@aashutoshrathi/word-wrap": {
+			"version": "1.2.6",
+			"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+			"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+			"dev": true
+		},
 		"@babel/code-frame": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
-			"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
 			"dev": true,
 			"requires": {
-				"@babel/highlight": "^7.18.6"
+				"@babel/highlight": "^7.24.2",
+				"picocolors": "^1.0.0"
 			}
 		},
 		"@babel/helper-validator-identifier": {
-			"version": "7.19.1",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+			"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==",
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-			"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.18.6",
-				"chalk": "^2.0.0",
-				"js-tokens": "^4.0.0"
+				"@babel/helper-validator-identifier": "^7.22.20",
+				"chalk": "^2.4.2",
+				"js-tokens": "^4.0.0",
+				"picocolors": "^1.0.0"
 			},
 			"dependencies": {
 				"chalk": {
@@ -3344,48 +3645,40 @@
 			}
 		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.23.6",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
-			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
+			"version": "0.37.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz",
+			"integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==",
 			"dev": true,
 			"requires": {
 				"comment-parser": "1.3.1",
-				"esquery": "^1.4.0",
-				"jsdoc-type-pratt-parser": "~2.2.5"
+				"esquery": "^1.5.0",
+				"jsdoc-type-pratt-parser": "~4.0.0"
 			}
 		},
 		"@eslint-community/eslint-utils": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
-			"integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
 			}
 		},
 		"@eslint-community/regexpp": {
-			"version": "4.4.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
-			"integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+			"version": "4.10.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
 			"dev": true
 		},
 		"@eslint/eslintrc": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
-			"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
 			"dev": true,
 			"requires": {
 				"ajv": "^6.12.4",
 				"debug": "^4.3.2",
-				"espree": "^9.5.0",
+				"espree": "^9.6.0",
 				"globals": "^13.19.0",
 				"ignore": "^5.2.0",
 				"import-fresh": "^3.2.1",
@@ -3421,19 +3714,19 @@
 			}
 		},
 		"@eslint/js": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
-			"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
 			"dev": true
 		},
 		"@humanwhocodes/config-array": {
-			"version": "0.11.8",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-			"integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+			"version": "0.11.14",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
 			"dev": true,
 			"requires": {
-				"@humanwhocodes/object-schema": "^1.2.1",
-				"debug": "^4.1.1",
+				"@humanwhocodes/object-schema": "^2.0.2",
+				"debug": "^4.3.1",
 				"minimatch": "^3.0.5"
 			}
 		},
@@ -3444,15 +3737,15 @@
 			"dev": true
 		},
 		"@humanwhocodes/object-schema": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-			"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+			"integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
 			"dev": true
 		},
 		"@mdn/browser-compat-data": {
-			"version": "4.2.1",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz",
-			"integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==",
+			"version": "5.5.17",
+			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.17.tgz",
+			"integrity": "sha512-M4r4nllQiFvHzbZmx+W1WhrLiMNu4XZ+t3AzzmePQ2P9zaxov2xFmd8KrOSQ0NN2QoJ8BINWdSkVU4sAcDTMJw==",
 			"dev": true
 		},
 		"@nodelib/fs.scandir": {
@@ -3481,10 +3774,103 @@
 				"fastq": "^1.6.0"
 			}
 		},
+		"@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true
+		},
 		"@types/normalize-package-data": {
-			"version": "2.4.1",
-			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-			"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+			"version": "2.4.4",
+			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.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==",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.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==",
+					"dev": true,
+					"requires": {
+						"esrecurse": "^4.3.0",
+						"estraverse": "^4.1.1"
+					}
+				},
+				"estraverse": {
+					"version": "4.3.0",
+					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+					"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+					"dev": true
+				}
+			}
+		},
+		"@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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"eslint-visitor-keys": "^3.3.0"
+			}
+		},
+		"@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
 			"dev": true
 		},
 		"abbrev": {
@@ -3494,9 +3880,9 @@
 			"dev": true
 		},
 		"acorn": {
-			"version": "8.8.2",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-			"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+			"version": "8.11.3",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -3533,6 +3919,12 @@
 				"color-convert": "^1.9.0"
 			}
 		},
+		"are-docs-informative": {
+			"version": "0.0.2",
+			"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+			"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+			"dev": true
+		},
 		"argparse": {
 			"version": "1.0.10",
 			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -3562,21 +3954,19 @@
 			"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
 			"dev": true
 		},
+		"array-union": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+			"dev": true
+		},
 		"ast-metadata-inferer": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
-			"integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+			"version": "0.8.0",
+			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz",
+			"integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==",
 			"dev": true,
 			"requires": {
-				"@mdn/browser-compat-data": "^3.3.14"
-			},
-			"dependencies": {
-				"@mdn/browser-compat-data": {
-					"version": "3.3.14",
-					"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
-					"integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
-					"dev": true
-				}
+				"@mdn/browser-compat-data": "^5.2.34"
 			}
 		},
 		"async": {
@@ -3617,22 +4007,21 @@
 			}
 		},
 		"browserslist": {
-			"version": "4.20.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-			"integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+			"version": "4.23.0",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+			"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
 			"dev": true,
 			"requires": {
-				"caniuse-lite": "^1.0.30001332",
-				"electron-to-chromium": "^1.4.118",
-				"escalade": "^3.1.1",
-				"node-releases": "^2.0.3",
-				"picocolors": "^1.0.0"
+				"caniuse-lite": "^1.0.30001587",
+				"electron-to-chromium": "^1.4.668",
+				"node-releases": "^2.0.14",
+				"update-browserslist-db": "^1.0.13"
 			}
 		},
 		"browserslist-config-wikimedia": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
-			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz",
+			"integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==",
 			"dev": true
 		},
 		"builtin-modules": {
@@ -3641,6 +4030,15 @@
 			"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
 			"dev": true
 		},
+		"builtins": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+			"integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+			"dev": true,
+			"requires": {
+				"semver": "^7.0.0"
+			}
+		},
 		"callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -3648,9 +4046,9 @@
 			"dev": true
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001341",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz",
-			"integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==",
+			"version": "1.0.30001600",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+			"integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
 			"dev": true
 		},
 		"chalk": {
@@ -3705,9 +4103,9 @@
 			}
 		},
 		"ci-info": {
-			"version": "3.8.0",
-			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-			"integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+			"version": "3.9.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+			"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
 			"dev": true
 		},
 		"clean-regexp": {
@@ -3760,12 +4158,6 @@
 			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
 			"dev": true
 		},
-		"core-js": {
-			"version": "3.22.5",
-			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz",
-			"integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==",
-			"dev": true
-		},
 		"cross-spawn": {
 			"version": "7.0.3",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -3810,6 +4202,15 @@
 			"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
 			"dev": true
 		},
+		"dir-glob": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+			"dev": true,
+			"requires": {
+				"path-type": "^4.0.0"
+			}
+		},
 		"doctrine": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -3820,9 +4221,9 @@
 			}
 		},
 		"electron-to-chromium": {
-			"version": "1.4.137",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz",
-			"integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==",
+			"version": "1.4.719",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
+			"integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
 			"dev": true
 		},
 		"error-ex": {
@@ -3835,9 +4236,9 @@
 			}
 		},
 		"escalade": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+			"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
 			"dev": true
 		},
 		"escape-string-regexp": {
@@ -3847,27 +4248,28 @@
 			"dev": true
 		},
 		"eslint": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
-			"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.2.0",
-				"@eslint-community/regexpp": "^4.4.0",
-				"@eslint/eslintrc": "^2.0.1",
-				"@eslint/js": "8.36.0",
-				"@humanwhocodes/config-array": "^0.11.8",
+				"@eslint-community/regexpp": "^4.6.1",
+				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/js": "8.57.0",
+				"@humanwhocodes/config-array": "^0.11.14",
 				"@humanwhocodes/module-importer": "^1.0.1",
 				"@nodelib/fs.walk": "^1.2.8",
-				"ajv": "^6.10.0",
+				"@ungap/structured-clone": "^1.2.0",
+				"ajv": "^6.12.4",
 				"chalk": "^4.0.0",
 				"cross-spawn": "^7.0.2",
 				"debug": "^4.3.2",
 				"doctrine": "^3.0.0",
 				"escape-string-regexp": "^4.0.0",
-				"eslint-scope": "^7.1.1",
-				"eslint-visitor-keys": "^3.3.0",
-				"espree": "^9.5.0",
+				"eslint-scope": "^7.2.2",
+				"eslint-visitor-keys": "^3.4.3",
+				"espree": "^9.6.1",
 				"esquery": "^1.4.2",
 				"esutils": "^2.0.2",
 				"fast-deep-equal": "^3.1.3",
@@ -3875,22 +4277,19 @@
 				"find-up": "^5.0.0",
 				"glob-parent": "^6.0.2",
 				"globals": "^13.19.0",
-				"grapheme-splitter": "^1.0.4",
+				"graphemer": "^1.4.0",
 				"ignore": "^5.2.0",
-				"import-fresh": "^3.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-glob": "^4.0.0",
 				"is-path-inside": "^3.0.3",
-				"js-sdsl": "^4.1.4",
 				"js-yaml": "^4.1.0",
 				"json-stable-stringify-without-jsonify": "^1.0.1",
 				"levn": "^0.4.1",
 				"lodash.merge": "^4.6.2",
 				"minimatch": "^3.1.2",
 				"natural-compare": "^1.4.0",
-				"optionator": "^0.9.1",
+				"optionator": "^0.9.3",
 				"strip-ansi": "^6.0.1",
-				"strip-json-comments": "^3.1.0",
 				"text-table": "^0.2.0"
 			},
 			"dependencies": {
@@ -3900,12 +4299,6 @@
 					"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 					"dev": true
 				},
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				},
 				"js-yaml": {
 					"version": "4.1.0",
 					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3926,80 +4319,122 @@
 				}
 			}
 		},
+		"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==",
+			"dev": true,
+			"requires": {
+				"semver": "^7.5.4"
+			}
+		},
 		"eslint-config-wikimedia": {
-			"version": "0.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
-			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz",
+			"integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==",
 			"dev": true,
 			"requires": {
-				"browserslist-config-wikimedia": "^0.5.0",
-				"eslint": "^8.31.0",
-				"eslint-plugin-compat": "^4.0.2",
-				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "39.2.2",
+				"browserslist-config-wikimedia": "^0.5.1",
+				"eslint": "^8.53.0",
+				"eslint-plugin-compat": "^4.2.0",
+				"eslint-plugin-es-x": "^7.3.0",
+				"eslint-plugin-jest": "^27.6.0",
+				"eslint-plugin-jsdoc": "^42.0.0",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.5.0",
-				"eslint-plugin-mocha": "^9.0.0",
+				"eslint-plugin-mocha": "^10.2.0",
+				"eslint-plugin-n": "^16.0.1",
 				"eslint-plugin-no-jquery": "^2.7.0",
-				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-qunit": "^7.3.4",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^42.0.0",
-				"eslint-plugin-vue": "^8.7.1",
+				"eslint-plugin-unicorn": "^47.0.0",
+				"eslint-plugin-vue": "^9.18.1",
 				"eslint-plugin-wdio": "^7.19.4",
-				"eslint-plugin-yml": "^0.14.0"
+				"eslint-plugin-yml": "^1.10.0"
+			},
+			"dependencies": {
+				"eslint-plugin-vue": {
+					"version": "9.24.0",
+					"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz",
+					"integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==",
+					"dev": true,
+					"requires": {
+						"@eslint-community/eslint-utils": "^4.4.0",
+						"globals": "^13.24.0",
+						"natural-compare": "^1.4.0",
+						"nth-check": "^2.1.1",
+						"postcss-selector-parser": "^6.0.15",
+						"semver": "^7.6.0",
+						"vue-eslint-parser": "^9.4.2",
+						"xml-name-validator": "^4.0.0"
+					}
+				},
+				"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==",
+					"dev": true,
+					"requires": {
+						"debug": "^4.3.4",
+						"eslint-scope": "^7.1.1",
+						"eslint-visitor-keys": "^3.3.0",
+						"espree": "^9.3.1",
+						"esquery": "^1.4.0",
+						"lodash": "^4.17.21",
+						"semver": "^7.3.6"
+					}
+				}
 			}
 		},
 		"eslint-plugin-compat": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
-			"integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
+			"integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==",
 			"dev": true,
 			"requires": {
-				"@mdn/browser-compat-data": "^4.1.5",
-				"ast-metadata-inferer": "^0.7.0",
-				"browserslist": "^4.16.8",
-				"caniuse-lite": "^1.0.30001304",
-				"core-js": "^3.16.2",
+				"@mdn/browser-compat-data": "^5.3.13",
+				"ast-metadata-inferer": "^0.8.0",
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001524",
 				"find-up": "^5.0.0",
-				"lodash.memoize": "4.1.2",
-				"semver": "7.3.5"
+				"lodash.memoize": "^4.1.2",
+				"semver": "^7.5.4"
 			}
 		},
 		"eslint-plugin-es-x": {
-			"version": "5.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz",
-			"integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.1.2",
+				"@eslint-community/regexpp": "^4.6.0",
+				"eslint-compat-utils": "^0.5.0"
+			}
+		},
+		"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==",
 			"dev": true,
 			"requires": {
-				"eslint-utils": "^2.0.0 || ^3.0.0",
-				"regexpp": "^3.0.0"
+				"@typescript-eslint/utils": "^5.10.0"
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "39.2.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
-			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
+			"version": "42.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz",
+			"integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.23.1",
+				"@es-joy/jsdoccomment": "~0.37.0",
+				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
-				"esquery": "^1.4.0",
-				"semver": "^7.3.7",
+				"esquery": "^1.5.0",
+				"semver": "^7.3.8",
 				"spdx-expression-parse": "^3.0.1"
-			},
-			"dependencies": {
-				"semver": {
-					"version": "7.3.8",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-					"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
-					"dev": true,
-					"requires": {
-						"lru-cache": "^6.0.0"
-					}
-				}
 			}
 		},
 		"eslint-plugin-json-es": {
@@ -4010,14 +4445,6 @@
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0",
 				"espree": "^9.3.1"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-mediawiki": {
@@ -4031,29 +4458,43 @@
 			}
 		},
 		"eslint-plugin-mocha": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
-			"integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+			"version": "10.4.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz",
+			"integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==",
 			"dev": true,
 			"requires": {
 				"eslint-utils": "^3.0.0",
-				"ramda": "^0.27.1"
+				"globals": "^13.24.0",
+				"rambda": "^7.4.0"
+			}
+		},
+		"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==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"builtins": "^5.0.1",
+				"eslint-plugin-es-x": "^7.5.0",
+				"get-tsconfig": "^4.7.0",
+				"globals": "^13.24.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",
+				"semver": "^7.5.3"
 			},
 			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+				"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": {
-						"eslint-visitor-keys": "^2.0.0"
+						"brace-expansion": "^1.1.7"
 					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
 				}
 			}
 		},
@@ -4064,38 +4505,6 @@
 			"dev": true,
 			"requires": {}
 		},
-		"eslint-plugin-node": {
-			"version": "11.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
-			"integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
-			"dev": true,
-			"requires": {
-				"eslint-plugin-es": "^3.0.0",
-				"eslint-utils": "^2.0.0",
-				"ignore": "^5.1.1",
-				"minimatch": "^3.0.4",
-				"resolve": "^1.10.1",
-				"semver": "^6.1.0"
-			},
-			"dependencies": {
-				"eslint-plugin-es": {
-					"version": "3.0.1",
-					"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
-					"integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
-					"dev": true,
-					"requires": {
-						"eslint-utils": "^2.0.0",
-						"regexpp": "^3.0.0"
-					}
-				},
-				"semver": {
-					"version": "6.3.0",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-					"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-					"dev": true
-				}
-			}
-		},
 		"eslint-plugin-qunit": {
 			"version": "7.3.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz",
@@ -4104,23 +4513,6 @@
 			"requires": {
 				"eslint-utils": "^3.0.0",
 				"requireindex": "^1.2.0"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-security": {
@@ -4133,42 +4525,27 @@
 			}
 		},
 		"eslint-plugin-unicorn": {
-			"version": "42.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-			"integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+			"version": "47.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz",
+			"integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.15.7",
-				"ci-info": "^3.3.0",
+				"@babel/helper-validator-identifier": "^7.19.1",
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"ci-info": "^3.8.0",
 				"clean-regexp": "^1.0.0",
-				"eslint-utils": "^3.0.0",
-				"esquery": "^1.4.0",
+				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
-				"is-builtin-module": "^3.1.0",
+				"is-builtin-module": "^3.2.1",
+				"jsesc": "^3.0.2",
 				"lodash": "^4.17.21",
 				"pluralize": "^8.0.0",
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.24",
+				"regjsparser": "^0.10.0",
 				"safe-regex": "^2.1.1",
-				"semver": "^7.3.5",
+				"semver": "^7.3.8",
 				"strip-indent": "^3.0.0"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-vue": {
@@ -4183,23 +4560,6 @@
 				"postcss-selector-parser": "^6.0.9",
 				"semver": "^7.3.5",
 				"vue-eslint-parser": "^8.0.1"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-wdio": {
@@ -4209,21 +4569,22 @@
 			"dev": true
 		},
 		"eslint-plugin-yml": {
-			"version": "0.14.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz",
-			"integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==",
+			"version": "1.13.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz",
+			"integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==",
 			"dev": true,
 			"requires": {
 				"debug": "^4.3.2",
+				"eslint-compat-utils": "^0.5.0",
 				"lodash": "^4.17.21",
 				"natural-compare": "^1.4.0",
-				"yaml-eslint-parser": "^0.5.0"
+				"yaml-eslint-parser": "^1.2.1"
 			}
 		},
 		"eslint-scope": {
-			"version": "7.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-			"integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
 			"dev": true,
 			"requires": {
 				"esrecurse": "^4.3.0",
@@ -4231,37 +4592,37 @@
 			}
 		},
 		"eslint-utils": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-			"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
 			"dev": true,
 			"requires": {
-				"eslint-visitor-keys": "^1.1.0"
+				"eslint-visitor-keys": "^2.0.0"
+			},
+			"dependencies": {
+				"eslint-visitor-keys": {
+					"version": "2.1.0",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+					"dev": true
+				}
 			}
 		},
 		"eslint-visitor-keys": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-			"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
 			"dev": true
 		},
 		"espree": {
-			"version": "9.5.0",
-			"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
-			"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
 			"dev": true,
 			"requires": {
-				"acorn": "^8.8.0",
+				"acorn": "^8.9.0",
 				"acorn-jsx": "^5.3.2",
-				"eslint-visitor-keys": "^3.3.0"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
+				"eslint-visitor-keys": "^3.4.1"
 			}
 		},
 		"esprima": {
@@ -4333,6 +4694,30 @@
 			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
 			"dev": true
 		},
+		"fast-glob": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+			"dev": true,
+			"requires": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.4"
+			},
+			"dependencies": {
+				"glob-parent": {
+					"version": "5.1.2",
+					"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+					"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+					"dev": true,
+					"requires": {
+						"is-glob": "^4.0.1"
+					}
+				}
+			}
+		},
 		"fast-json-stable-stringify": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4342,7 +4727,7 @@
 		"fast-levenshtein": {
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 			"dev": true
 		},
 		"fastq": {
@@ -4451,11 +4836,20 @@
 			"dev": true
 		},
 		"function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 			"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==",
+			"dev": true,
+			"requires": {
+				"resolve-pkg-maps": "^1.0.0"
+			}
+		},
 		"getobject": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz",
@@ -4521,18 +4915,32 @@
 			}
 		},
 		"globals": {
-			"version": "13.20.0",
-			"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-			"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+			"version": "13.24.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
 			"dev": true,
 			"requires": {
 				"type-fest": "^0.20.2"
 			}
 		},
-		"grapheme-splitter": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-			"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+		"globby": {
+			"version": "11.1.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+			"dev": true,
+			"requires": {
+				"array-union": "^2.1.0",
+				"dir-glob": "^3.0.1",
+				"fast-glob": "^3.2.9",
+				"ignore": "^5.2.0",
+				"merge2": "^1.4.1",
+				"slash": "^3.0.0"
+			}
+		},
+		"graphemer": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
 			"dev": true
 		},
 		"grunt": {
@@ -4557,9 +4965,9 @@
 			}
 		},
 		"grunt-banana-checker": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz",
-			"integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==",
+			"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
 		},
 		"grunt-cli": {
@@ -4588,13 +4996,13 @@
 			}
 		},
 		"grunt-eslint": {
-			"version": "24.0.1",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
-			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
+			"version": "24.3.0",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.3.0.tgz",
+			"integrity": "sha512-dUPiRgX8fhmh4uwTAn9xrzg7HV5j5DhGmZZGJdHfjy/AN9G4jD+5IjfbcAJ209JcIG8m4B7xz3crIhuDSm3siQ==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2",
-				"eslint": "^8.0.1"
+				"eslint": "^8.44.0"
 			}
 		},
 		"grunt-known-options": {
@@ -4640,21 +5048,21 @@
 				"which": "~2.0.2"
 			}
 		},
-		"has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"requires": {
-				"function-bind": "^1.1.1"
-			}
-		},
 		"has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 			"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
 			"dev": true
 		},
+		"hasown": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+			"dev": true,
+			"requires": {
+				"function-bind": "^1.1.2"
+			}
+		},
 		"homedir-polyfill": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -4686,9 +5094,9 @@
 			}
 		},
 		"ignore": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-			"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+			"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
 			"dev": true
 		},
 		"import-fresh": {
@@ -4767,12 +5175,12 @@
 			}
 		},
 		"is-core-module": {
-			"version": "2.9.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-			"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+			"version": "2.13.1",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+			"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
 			"dev": true,
 			"requires": {
-				"has": "^1.0.3"
+				"hasown": "^2.0.0"
 			}
 		},
 		"is-extglob": {
@@ -4847,12 +5255,6 @@
 			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
 			"dev": true
 		},
-		"js-sdsl": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
-			"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
-			"dev": true
-		},
 		"js-tokens": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4870,9 +5272,15 @@
 			}
 		},
 		"jsdoc-type-pratt-parser": {
-			"version": "2.2.5",
-			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
-			"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+			"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+			"dev": true
+		},
+		"jsesc": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+			"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
 			"dev": true
 		},
 		"json-parse-even-better-errors": {
@@ -4963,7 +5371,7 @@
 		"lodash.memoize": {
 			"version": "4.1.2",
 			"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-			"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+			"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
 			"dev": true
 		},
 		"lodash.merge": {
@@ -4996,6 +5404,12 @@
 			"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
 			"dev": true
 		},
+		"merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"dev": true
+		},
 		"micromatch": {
 			"version": "4.0.5",
 			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -5034,9 +5448,9 @@
 			"dev": true
 		},
 		"node-releases": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
-			"integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
+			"version": "2.0.14",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+			"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
 			"dev": true
 		},
 		"nopt": {
@@ -5061,9 +5475,9 @@
 			},
 			"dependencies": {
 				"semver": {
-					"version": "5.7.1",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-					"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+					"version": "5.7.2",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+					"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
 					"dev": true
 				}
 			}
@@ -5118,17 +5532,17 @@
 			}
 		},
 		"optionator": {
-			"version": "0.9.1",
-			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-			"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+			"version": "0.9.3",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+			"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
 			"dev": true,
 			"requires": {
+				"@aashutoshrathi/word-wrap": "^1.2.3",
 				"deep-is": "^0.1.3",
 				"fast-levenshtein": "^2.0.6",
 				"levn": "^0.4.1",
 				"prelude-ls": "^1.2.1",
-				"type-check": "^0.4.0",
-				"word-wrap": "^1.2.3"
+				"type-check": "^0.4.0"
 			}
 		},
 		"os-homedir": {
@@ -5254,6 +5668,12 @@
 			"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
 			"dev": true
 		},
+		"path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true
+		},
 		"picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -5273,9 +5693,9 @@
 			"dev": true
 		},
 		"postcss-selector-parser": {
-			"version": "6.0.12",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
-			"integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+			"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==",
 			"dev": true,
 			"requires": {
 				"cssesc": "^3.0.0",
@@ -5289,9 +5709,9 @@
 			"dev": true
 		},
 		"punycode": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-			"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 			"dev": true
 		},
 		"queue-microtask": {
@@ -5300,10 +5720,10 @@
 			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
 			"dev": true
 		},
-		"ramda": {
-			"version": "0.27.2",
-			"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
-			"integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+		"rambda": {
+			"version": "7.5.0",
+			"resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+			"integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
 			"dev": true
 		},
 		"read-pkg": {
@@ -5397,11 +5817,22 @@
 			"integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
 			"dev": true
 		},
-		"regexpp": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-			"dev": true
+		"regjsparser": {
+			"version": "0.10.0",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+			"integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
+			"dev": true,
+			"requires": {
+				"jsesc": "~0.5.0"
+			},
+			"dependencies": {
+				"jsesc": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+					"integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+					"dev": true
+				}
+			}
 		},
 		"requireindex": {
 			"version": "1.2.0",
@@ -5410,12 +5841,12 @@
 			"dev": true
 		},
 		"resolve": {
-			"version": "1.22.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-			"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+			"version": "1.22.8",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 			"dev": true,
 			"requires": {
-				"is-core-module": "^2.8.1",
+				"is-core-module": "^2.13.0",
 				"path-parse": "^1.0.7",
 				"supports-preserve-symlinks-flag": "^1.0.0"
 			}
@@ -5436,6 +5867,12 @@
 			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
 			"dev": true
 		},
+		"resolve-pkg-maps": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+			"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+			"dev": true
+		},
 		"reusify": {
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -5476,9 +5913,9 @@
 			"dev": true
 		},
 		"semver": {
-			"version": "7.3.5",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+			"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"
@@ -5499,6 +5936,12 @@
 			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 			"dev": true
 		},
+		"slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true
+		},
 		"spdx-correct": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -5510,9 +5953,9 @@
 			}
 		},
 		"spdx-exceptions": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-			"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+			"version": "2.5.0",
+			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+			"integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
 			"dev": true
 		},
 		"spdx-expression-parse": {
@@ -5526,9 +5969,9 @@
 			}
 		},
 		"spdx-license-ids": {
-			"version": "3.0.13",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-			"integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+			"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==",
 			"dev": true
 		},
 		"sprintf-js": {
@@ -5591,6 +6034,21 @@
 				"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==",
+			"dev": true,
+			"requires": {
+				"tslib": "^1.8.1"
+			}
+		},
 		"type-check": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5606,6 +6064,13 @@
 			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
 			"dev": true
 		},
+		"typescript": {
+			"version": "5.4.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+			"integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+			"dev": true,
+			"peer": true
+		},
 		"unc-path-regex": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -5628,6 +6093,16 @@
 			"integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
 			"dev": true
 		},
+		"update-browserslist-db": {
+			"version": "1.0.13",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+			"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+			"dev": true,
+			"requires": {
+				"escalade": "^3.1.1",
+				"picocolors": "^1.0.0"
+			}
+		},
 		"uri-js": {
 			"version": "4.4.1",
 			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -5675,14 +6150,6 @@
 				"esquery": "^1.4.0",
 				"lodash": "^4.17.21",
 				"semver": "^7.3.5"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.4.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
-					"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
-					"dev": true
-				}
 			}
 		},
 		"which": {
@@ -5694,18 +6161,18 @@
 				"isexe": "^2.0.0"
 			}
 		},
-		"word-wrap": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-			"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-			"dev": true
-		},
 		"wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 			"dev": true
 		},
+		"xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true
+		},
 		"yallist": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -5713,28 +6180,20 @@
 			"dev": true
 		},
 		"yaml": {
-			"version": "1.10.2",
-			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+			"integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
 			"dev": true
 		},
 		"yaml-eslint-parser": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
-			"integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz",
+			"integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.0.0",
 				"lodash": "^4.17.21",
-				"yaml": "^1.10.2"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
+				"yaml": "^2.0.0"
 			}
 		},
 		"yocto-queue": {
diff --git a/package.json b/package.json
index 888ac1c..07d09e6 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.25.0",
+		"eslint-config-wikimedia": "0.26.0",
 		"grunt": "1.6.1",
-		"grunt-banana-checker": "0.11.0",
-		"grunt-eslint": "24.0.1"
+		"grunt-banana-checker": "0.11.1",
+		"grunt-eslint": "24.3.0"
 	}
 }
diff --git a/specials/PF_CreateForm.php b/specials/PF_CreateForm.php
index d7ed52f..d46c5da 100644
--- a/specials/PF_CreateForm.php
+++ b/specials/PF_CreateForm.php
@@ -78,7 +78,7 @@ class PFCreateForm extends SpecialPage {
 			# ignore variables that are not of the right form
 			if ( strpos( $var, "_" ) != false ) {
 				# get the template declarations and work from there
-				list( $action, $id ) = explode( "_", $var, 2 );
+				[ $action, $id ] = explode( "_", $var, 2 );
 				if ( $action == "template" ) {
 					// If the button was pressed to remove
 					// this template, just don't add it to
diff --git a/specials/PF_CreateTemplate.php b/specials/PF_CreateTemplate.php
index cdb94c9..5151304 100644
--- a/specials/PF_CreateTemplate.php
+++ b/specials/PF_CreateTemplate.php
@@ -328,7 +328,7 @@ END;
 				if ( count( $var_elements ) != 2 ) {
 					continue;
 				}
-				list( $field_field, $id ) = $var_elements;
+				[ $field_field, $id ] = $var_elements;
 				if ( $field_field == 'name' && $id != 'starter' ) {
 					$field = PFTemplateField::create(
 						$val,
diff --git a/specials/PF_RunQuery.php b/specials/PF_RunQuery.php
index f3a0bc3..b62101f 100644
--- a/specials/PF_RunQuery.php
+++ b/specials/PF_RunQuery.php
@@ -87,7 +87,7 @@ class PFRunQuery extends IncludableSpecialPage {
 		}
 
 		$form_context = $embedded ? PFFormPrinter::CONTEXT_EMBEDDED_QUERY : PFFormPrinter::CONTEXT_QUERY;
-		list( $form_text, $data_text, $form_page_title ) =
+		[ $form_text, $data_text, $form_page_title ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$form_definition, $form_submitted, false, $form_title->getArticleID(),
 				$content, null, null, $form_context, [], $user
diff --git a/specials/PF_UploadWindow.php b/specials/PF_UploadWindow.php
index ad2a7c5..ba2fb46 100644
--- a/specials/PF_UploadWindow.php
+++ b/specials/PF_UploadWindow.php
@@ -303,52 +303,52 @@ class PFUploadWindow extends UnlistedSpecialPage {
 			. '<ul class="warningbox">';
 		foreach ( $warnings as $warning => $args ) {
 				// Unlike the other warnings, this one can be worked around.
-				if ( $warning == 'badfilename' ) {
-					$this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
-				}
+			if ( $warning == 'badfilename' ) {
+				$this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
+			}
 
-				if ( $warning == 'exists' ) {
-					$msg = self::getExistsWarning( $args );
-				} elseif ( $warning == 'no-change' ) {
-					$file = $args;
-					$filename = $file->getTitle()->getPrefixedText();
-					$msg = "\t<li>" . $this->msg( 'fileexists-no-change', $filename )->parse() . "</li>\n";
-				} elseif ( $warning == 'duplicate-version' ) {
-					$file = $args[0];
-					$count = count( $args );
-					$filename = $file->getTitle()->getPrefixedText();
-					$message = $this->msg( 'fileexists-duplicate-version' )
-						->params( $filename )
-						->numParams( $count );
-					$msg = "\t<li>" . $message->parse() . "</li>\n";
-				} elseif ( $warning == 'was-deleted' ) {
-					# If the file existed before and was deleted, warn the user of this
-					$ltitle = SpecialPage::getTitleFor( 'Log' );
-					$llink = $linkRenderer->makeKnownLink(
-						$ltitle,
-						$this->msg( 'deletionlog' )->text(),
-						[],
-						[
-							'type' => 'delete',
-							'page' => Title::makeTitle( NS_FILE, $args )->getPrefixedText(),
-						]
-					);
-					$msg = "\t<li>" . $this->msg( 'filewasdeleted' )->rawParams( $llink )->parse() . "</li>\n";
-				} elseif ( $warning == 'duplicate' ) {
-					$msg = $this->getDupeWarning( $args );
-				} elseif ( $warning == 'duplicate-archive' ) {
-					$msg = "\t<li>" . $this->msg(
-						'file-deleted-duplicate',
-						[ Title::makeTitle( NS_FILE, $args )->getPrefixedText() ]
-					)->parse() . "</li>\n";
-				} else {
-					if ( is_bool( $args ) ) {
-						$args = [];
-					} elseif ( !is_array( $args ) ) {
-						$args = [ $args ];
-					}
-					$msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
+			if ( $warning == 'exists' ) {
+				$msg = self::getExistsWarning( $args );
+			} elseif ( $warning == 'no-change' ) {
+				$file = $args;
+				$filename = $file->getTitle()->getPrefixedText();
+				$msg = "\t<li>" . $this->msg( 'fileexists-no-change', $filename )->parse() . "</li>\n";
+			} elseif ( $warning == 'duplicate-version' ) {
+				$file = $args[0];
+				$count = count( $args );
+				$filename = $file->getTitle()->getPrefixedText();
+				$message = $this->msg( 'fileexists-duplicate-version' )
+					->params( $filename )
+					->numParams( $count );
+				$msg = "\t<li>" . $message->parse() . "</li>\n";
+			} elseif ( $warning == 'was-deleted' ) {
+				# If the file existed before and was deleted, warn the user of this
+				$ltitle = SpecialPage::getTitleFor( 'Log' );
+				$llink = $linkRenderer->makeKnownLink(
+					$ltitle,
+					$this->msg( 'deletionlog' )->text(),
+					[],
+					[
+						'type' => 'delete',
+						'page' => Title::makeTitle( NS_FILE, $args )->getPrefixedText(),
+					]
+				);
+				$msg = "\t<li>" . $this->msg( 'filewasdeleted' )->rawParams( $llink )->parse() . "</li>\n";
+			} elseif ( $warning == 'duplicate' ) {
+				$msg = $this->getDupeWarning( $args );
+			} elseif ( $warning == 'duplicate-archive' ) {
+				$msg = "\t<li>" . $this->msg(
+					'file-deleted-duplicate',
+					[ Title::makeTitle( NS_FILE, $args )->getPrefixedText() ]
+				)->parse() . "</li>\n";
+			} else {
+				if ( is_bool( $args ) ) {
+					$args = [];
+				} elseif ( !is_array( $args ) ) {
+					$args = [ $args ];
 				}
+				$msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
+			}
 				$warningHtml .= $msg;
 		}
 		$warningHtml .= "</ul>\n";
diff --git a/tests/phpunit/integration/includes/PFFormPrinterTest.php b/tests/phpunit/integration/includes/PFFormPrinterTest.php
index ce29f80..630be16 100644
--- a/tests/phpunit/integration/includes/PFFormPrinterTest.php
+++ b/tests/phpunit/integration/includes/PFFormPrinterTest.php
@@ -38,7 +38,7 @@ class PFFormPrinterTest extends MediaWikiIntegrationTestCase {
 
 		$wgOut->getContext()->setTitle( $this->getTitle() );
 
-		list( $form_text, $page_text, $form_page_title, $generated_page_name ) =
+		[ $form_text, $page_text, $form_page_title, $generated_page_name ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$form_def = $setup['form_definition'],
 				$form_submitted = true,
@@ -134,11 +134,11 @@ class PFFormPrinterTest extends MediaWikiIntegrationTestCase {
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getDBkey' )
-			->will( $this->returnValue( 'Sometitle' ) );
+			->willReturn( 'Sometitle' );
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getNamespace' )
-			->will( $this->returnValue( PF_NS_FORM ) );
+			->willReturn( PF_NS_FORM );
 
 		return $mockTitle;
 	}
diff --git a/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php b/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
index 03335d0..b0d54de 100644
--- a/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
+++ b/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
@@ -367,7 +367,7 @@ class PFRadioButtonInputTest extends MediaWikiIntegrationTestCase {
 			if ( isset( $setup['form_definition'] ) ) {
 				// We have to specify a template name
 				$form_definition = "{{{for template|TestTemplate123}}}\n{$setup['form_definition']}\n{{{end template}}}\n{{{standard input|save}}}";
-				list( $form_text, $page_text, $form_page_title, $generated_page_name )
+				[ $form_text, $page_text, $form_page_title, $generated_page_name ]
 					= $wgPageFormsFormPrinter->formHTML(
 						$form_definition, true, false, null, null,
 						'TestStringForFormPageTitle', null,
@@ -652,11 +652,11 @@ class PFRadioButtonInputTest extends MediaWikiIntegrationTestCase {
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getDBkey' )
-			->will( $this->returnValue( 'Sometitle' ) );
+			->willReturn( 'Sometitle' );
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getNamespace' )
-			->will( $this->returnValue( PF_NS_FORM ) );
+			->willReturn( PF_NS_FORM );
 
 		return $mockTitle;
 	}
-- 
2.39.2

$ date
--- stdout ---
Thu Mar 28 22:05:12 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 ---
92700273750747fe94ec088e8cd48711afd00f82 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "eslint-plugin-compat": {
      "name": "eslint-plugin-compat",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "semver"
      ],
      "effects": [],
      "range": "3.6.0-0 - 4.1.4",
      "nodes": [
        "node_modules/eslint-plugin-compat"
      ],
      "fixAvailable": true
    },
    "semver": {
      "name": "semver",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096482,
          "name": "semver",
          "dependency": "semver",
          "title": "semver vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-c2qf-rxjj-qqgw",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": ">=7.0.0 <7.5.2"
        },
        {
          "source": 1096483,
          "name": "semver",
          "dependency": "semver",
          "title": "semver vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-c2qf-rxjj-qqgw",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<5.7.2"
        },
        {
          "source": 1096484,
          "name": "semver",
          "dependency": "semver",
          "title": "semver vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-c2qf-rxjj-qqgw",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": ">=6.0.0 <6.3.1"
        }
      ],
      "effects": [
        "eslint-plugin-compat"
      ],
      "range": "<=5.7.1 || 6.0.0 - 6.3.0 || 7.0.0 - 7.5.1",
      "nodes": [
        "node_modules/eslint-plugin-jsdoc/node_modules/semver",
        "node_modules/eslint-plugin-node/node_modules/semver",
        "node_modules/normalize-package-data/node_modules/semver",
        "node_modules/semver"
      ],
      "fixAvailable": true
    },
    "word-wrap": {
      "name": "word-wrap",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1095091,
          "name": "word-wrap",
          "dependency": "word-wrap",
          "title": "word-wrap vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-j8xg-fqg3-53r7",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<1.2.4"
        }
      ],
      "effects": [],
      "range": "<1.2.4",
      "nodes": [
        "node_modules/word-wrap"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 3,
      "high": 0,
      "critical": 0,
      "total": 3
    },
    "dependencies": {
      "prod": 1,
      "dev": 289,
      "optional": 0,
      "peer": 0,
      "peerOptional": 0,
      "total": 289
    }
  }
}

--- 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: 37 installs, 0 updates, 0 removals
  - Locking composer/installers (v2.2.0)
  - Locking composer/pcre (3.1.3)
  - Locking composer/semver (3.3.2)
  - Locking composer/spdx-licenses (1.5.8)
  - Locking composer/xdebug-handler (3.0.4)
  - Locking doctrine/deprecations (1.1.3)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v41.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.3.2)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.3.0)
  - Locking phpdocumentor/type-resolver (1.8.2)
  - Locking phpstan/phpdoc-parser (1.27.0)
  - Locking psr/container (2.0.2)
  - Locking psr/log (2.0.0)
  - Locking sabre/event (5.1.4)
  - Locking squizlabs/php_codesniffer (3.7.2)
  - Locking symfony/console (v5.4.36)
  - Locking symfony/deprecation-contracts (v3.4.0)
  - Locking symfony/polyfill-ctype (v1.29.0)
  - Locking symfony/polyfill-intl-grapheme (v1.29.0)
  - Locking symfony/polyfill-intl-normalizer (v1.29.0)
  - Locking symfony/polyfill-mbstring (v1.29.0)
  - Locking symfony/polyfill-php73 (v1.29.0)
  - Locking symfony/polyfill-php80 (v1.29.0)
  - Locking symfony/service-contracts (v3.4.1)
  - Locking symfony/string (v6.4.4)
  - 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: 37 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing composer/installers (v2.2.0): Extracting archive
  - Installing composer/pcre (3.1.3): Extracting archive
  - Installing symfony/polyfill-php80 (v1.29.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.7.2): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.29.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.8): Extracting archive
  - Installing composer/semver (3.3.2): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v41.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.29.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.29.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.29.0): Extracting archive
  - Installing symfony/string (v6.4.4): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.4.1): Extracting archive
  - Installing symfony/polyfill-php73 (v1.29.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.4.0): Extracting archive
  - Installing symfony/console (v5.4.36): Extracting archive
  - Installing sabre/event (5.1.4): Extracting archive
  - Installing netresearch/jsonmapper (v4.4.1): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.1): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (1.27.0): 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.3.0): 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.4): 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.3.2): Extracting archive
  0/36 [>---------------------------]   0%
 18/36 [==============>-------------]  50%
 33/36 [=========================>--]  91%
 36/36 [============================] 100%
4 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
Upgrading n:eslint-config-wikimedia from 0.25.0 -> 0.26.0
Upgrading n:grunt-banana-checker from 0.11.0 -> 0.11.1
Upgrading n:grunt-eslint from 24.0.1 -> 24.3.0
$ /usr/bin/npm install
--- stdout ---

added 304 packages, and audited 305 packages in 7s

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

found 0 vulnerabilities

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

--- end ---
$ /usr/bin/npm install grunt-eslint@24.3.0 --save-exact
--- stdout ---

up to date, audited 305 packages in 714ms

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

found 0 vulnerabilities

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

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

/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
  170:21  warning  Found non-literal argument to RegExp Constructor        security/detect-non-literal-regexp
  178:17  warning  Prefer `String#slice()` over `String#substr()`          unicorn/prefer-string-slice
  211:14  warning  Found non-literal argument to RegExp Constructor        security/detect-non-literal-regexp

/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
  137:21  warning  Found non-literal argument to RegExp Constructor                                security/detect-non-literal-regexp
  145:17  warning  Prefer `String#slice()` over `String#substr()`                                  unicorn/prefer-string-slice
  172:14  warning  Found non-literal argument to RegExp Constructor                                security/detect-non-literal-regexp
  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
  47:24  warning  '$' is already declared in the upper scope on line 7 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
  14:9  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/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
   19:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
   76:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
   80:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
  104:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/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
  374:3   warning  jQuery collection names must match the variablePattern                        no-jquery/variable-pattern
  647:3   error    ES2024 Resizable ArrayBuffer is forbidden                                     es-x/no-resizable-and-growable-arraybuffers
  758:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  772: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  error  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_regexp.js
  31:12  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

/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
  523:16  warning  Found non-literal argument to RegExp Constructor                            security/detect-non-literal-regexp
  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
  771:22  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  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
  64:9  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/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
   676:19  warning  Found non-literal argument to RegExp Constructor                                     security/detect-non-literal-regexp
   688:21  warning  Unsafe Regular Expression                                                            security/detect-unsafe-regex
   702:17  warning  Unsafe Regular Expression                                                            security/detect-unsafe-regex
   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
  1537:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1650:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1657:8   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1933:30  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1946:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1950:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1955: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
   73:6  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
   93:8  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
  318:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice
  319:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

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

✖ 211 problems (2 errors, 209 warnings)


--- end ---
$ ./node_modules/.bin/eslint i18n/ff.json i18n/qqq.json i18n/dag.json i18n/kiu.json composer.json i18n/kw.json libs/PF_datetimepicker.js i18n/ja.json i18n/ro.json i18n/udm.json i18n/szy.json package.json i18n/ce.json i18n/sah.json i18n/sms.json i18n/wuu-hans.json i18n/tl.json libs/PF_autoedit.js i18n/fy.json i18n/zh-hant.json i18n/so.json libs/PF_tree.js libs/PF_AutoEditRating.js i18n/ksh.json i18n/gl.json i18n/it.json i18n/bg.json i18n/tg-latn.json i18n/yi.json i18n/cu.json libs/ext.pf.select2.tokens.js i18n/nso.json i18n/tly.json i18n/fa.json libs/PF_maps.js i18n/krj.json i18n/oc.json i18n/arc.json i18n/sw.json i18n/kea.json i18n/pfl.json i18n/ru.json i18n/ar.json i18n/lv.json i18n/bcl.json libs/PF_ComboBoxInput.js i18n/en.json i18n/sr-ec.json i18n/mt.json i18n/bgn.json i18n/min.json i18n/nds-nl.json i18n/dsb.json i18n/pap.json i18n/eo.json i18n/avk.json extension.json i18n/ht.json i18n/tet.json i18n/zh-tw.json i18n/ca.json i18n/mhr.json i18n/kn.json i18n/de.json i18n/frr.json libs/PF_formInput.js libs/PF_rating.js libs/PF_PageSchemas.js i18n/sl.json i18n/sh-latn.json i18n/pt.json libs/PF_editWarning.js package-lock.json i18n/stq.json i18n/rif.json i18n/gu.json i18n/vi.json i18n/scn.json i18n/syl.json i18n/bs.json i18n/ig.json i18n/fi.json i18n/mnw.json i18n/is.json i18n/arz.json i18n/he.json i18n/jv.json i18n/uz.json i18n/bn.json libs/PF_CreateClass.js i18n/smn.json i18n/be.json i18n/ms.json i18n/ha.json libs/PageForms.js i18n/hu.json libs/PF_wikieditor.js i18n/pa.json i18n/ps.json i18n/skr-arab.json i18n/wa.json i18n/sq.json i18n/lmo.json i18n/te.json i18n/ur.json i18n/ku-latn.json i18n/nb.json i18n/ka.json i18n/ti.json i18n/gv.json libs/ext.pf.select2.base.js i18n/diq.json libs/ext.pf.js libs/PF_simpleupload.js i18n/sr-el.json i18n/am.json i18n/pam.json i18n/nah.json i18n/lt.json i18n/vo.json i18n/kab.json i18n/th.json i18n/hr.json i18n/de-formal.json i18n/cs.json i18n/atj.json libs/PF_CreateForm.js i18n/jbo.json i18n/da.json i18n/kjp.json i18n/tzm.json libs/PF_CreateTemplate.js i18n/gcr.json i18n/as.json i18n/inh.json i18n/sc.json i18n/su.json libs/PF_spreadsheet.js i18n/shn.json i18n/ta.json i18n/my.json i18n/tt-cyrl.json i18n/ml.json libs/PF_preview.js i18n/gsw.json i18n/uk.json libs/PF_popupform.js i18n/el.json i18n/ia.json i18n/os.json i18n/nds.json i18n/tr.json i18n/azb.json i18n/gom-latn.json i18n/be-tarask.json i18n/rue.json i18n/ga.json i18n/cv.json i18n/frp.json i18n/pms.json i18n/krc.json i18n/hsb.json libs/PF_checkboxes.js libs/PF_AutocompleteWidget.js libs/PF_regexp.js i18n/bjn.json i18n/roa-tara.json i18n/mn.json i18n/sa.json i18n/szl.json i18n/tk.json i18n/sjd.json i18n/om.json i18n/ast.json i18n/es.json i18n/ckb.json i18n/ky.json i18n/fo.json i18n/nqo.json i18n/se.json i18n/az.json i18n/si.json i18n/nn.json i18n/zgh.json i18n/id.json i18n/zh-hans.json i18n/hi.json libs/PF_datepicker.js i18n/an.json i18n/mr.json i18n/fit.json i18n/km.json i18n/pnb.json i18n/ug-arab.json libs/PF_FullCalendar.js i18n/rmc.json i18n/ne.json i18n/lb.json i18n/pdc.json i18n/lki.json libs/PF_autogrow.js i18n/bcc.json libs/PF_imagePreview.js i18n/pl.json i18n/hy.json i18n/sco.json i18n/tcy.json i18n/fr.json i18n/ko.json libs/PF_maps.offline.js libs/PF_SpreadsheetAutocompleteWidget.js i18n/mzn.json i18n/vep.json libs/PF_submit.js i18n/pt-br.json i18n/eu.json i18n/io.json i18n/br.json i18n/li.json i18n/et.json libs/PF_upload.js i18n/af.json i18n/myv.json i18n/nl.json i18n/sd.json Gruntfile.js libs/PF_SpreadsheetComboBoxInput.js i18n/ba.json i18n/tg-cyrl.json i18n/tw.json i18n/blk.json i18n/tyv.json i18n/grc.json i18n/mwl.json i18n/haw.json libs/PF_timepicker.js i18n/sv.json i18n/bar.json libs/PF_collapsible.js i18n/aln.json i18n/mk.json i18n/sk.json libs/PF_CreateProperty.js -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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":130,"column":21,"nodeType":"NewExpression","endLine":132,"endColumn":35},{"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":2,"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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":537,"column":22,"nodeType":"NewExpression","endLine":539,"endColumn":36},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":546,"column":18,"nodeType":"CallExpression","messageId":"substr","endLine":546,"endColumn":58},{"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":559,"endColumn":33},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":560,"column":3,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":560,"endColumn":89},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":560,"column":15,"nodeType":"NewExpression","endLine":560,"endColumn":88}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":11,"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\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\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\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\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\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 return false;\n}\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 return false;\n} // 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 return false;\n} // 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 return false;\n}\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 return false;\n} // 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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":170,"column":21,"nodeType":"NewExpression","endLine":172,"endColumn":35},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":178,"column":17,"nodeType":"CallExpression","messageId":"substr","endLine":178,"endColumn":57},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":211,"column":14,"nodeType":"NewExpression","endLine":211,"endColumn":56}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":7,"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 *\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 *\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 *\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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":137,"column":21,"nodeType":"NewExpression","endLine":139,"endColumn":36},{"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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":172,"column":14,"nodeType":"NewExpression","endLine":172,"endColumn":56},{"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":18,"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":"no-shadow","severity":1,"message":"'$' is already declared in the upper scope on line 7 column 14.","line":47,"column":24,"nodeType":"Identifier","messageId":"noShadow","endLine":47,"endColumn":25}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript handler for the checkboxes input type\n *\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":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":14,"column":9,"nodeType":"CallExpression","endLine":14,"endColumn":50}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * JavaScript code to be used with input type datepicker.\n *\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":[],"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_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":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":19,"column":4,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":24,"endColumn":5},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":76,"column":4,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":76,"endColumn":78},{"ruleId":"es-x/no-for-of-loops","severity":1,"message":"ES2015 'for-of' statements are forbidden.","line":80,"column":4,"nodeType":"ForOfStatement","messageId":"forbidden","endLine":85,"endColumn":5},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":104,"column":4,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":104,"endColumn":78}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * PF_formInput.js\n *\n * JS handling for #forminput and Special:FormStart.\n *\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":[],"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_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":374,"column":3,"nodeType":"AssignmentExpression","endLine":374,"endColumn":61},{"ruleId":"es-x/no-resizable-and-growable-arraybuffers","severity":2,"message":"ES2024 Resizable ArrayBuffer is forbidden.","line":647,"column":3,"nodeType":"MemberExpression","messageId":"forbiddenForResizableArrayBuffer","endLine":647,"endColumn":26},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":758,"column":12,"nodeType":"CallExpression","endLine":758,"endColumn":38},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":772,"column":12,"nodeType":"CallExpression","endLine":772,"endColumn":38}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript code to be used with extension PageForms for popup forms.\n *\n * @author Stephan Gambke\n *\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":2,"message":"ES2024 Resizable ArrayBuffer is forbidden.","line":56,"column":3,"nodeType":"MemberExpression","messageId":"forbiddenForResizableArrayBuffer","endLine":56,"endColumn":21}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"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":[{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":31,"column":12,"nodeType":"NewExpression","endLine":31,"endColumn":39}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Javascript code to be used with input type regexp.\n *\n * @author Stephan Gambke\n *\n */\n\n/**\n * Validates inputs of type regexp.\n *\n * @param {string} inputId the id string of the input to check\n * @param {Object} params the parameter object for the check, contains\n *\t\tretext: (String) regular expression the input's value has to match\n *\t\tinverse: (Boolean) if the check result shall be inverted\n *\t\tmessage: (String) the message too be printed if the input's value does not match\n * @return {boolean} true, if the input's value matches the regular expression in\n *         retext, false otherwise; the value is inverted if inverse is true\n */\nwindow.PF_RE_validate = function( inputId, params ) { //input_number, retext, inverse, message, multiple\n\n\tvar match;\n\tvar message;\n\tvar $curInput = jQuery( '#' + inputId );\n\n\t// Ignore blank fields.\n\tif ( $curInput.val() == '' ) {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tvar re = new RegExp( params.retext );\n\t\tmatch = re.test( $curInput.val() );\n\t\tmessage = params.message;\n\t} catch (e) {\n\t\tmatch = false;\n\t\tmessage = params.error.replace('$1', e );\n\t}\n\n\tif ( ( match && ! params.inverse ) || ( ! match && params.inverse ) ) {\n\t\treturn true;\n\t} else {\n\t\t$curInput.parent().addErrorMessage( message );\n\t\treturn false;\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_simpleupload.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_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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":523,"column":16,"nodeType":"NewExpression","endLine":523,"endColumn":49},{"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":771,"column":22,"nodeType":"CallExpression","endLine":771,"endColumn":77},{"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":23,"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 return false;\n},\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":64,"column":9,"nodeType":"CallExpression","endLine":64,"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/**\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 *\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 jQuery(this).hide();\n});\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":[],"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_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":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":676,"column":19,"nodeType":"NewExpression","endLine":676,"endColumn":127},{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":688,"column":21,"nodeType":"Literal","endLine":688,"endColumn":75},{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":702,"column":17,"nodeType":"Literal","endLine":702,"endColumn":95},{"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":1537,"column":8,"nodeType":"CallExpression","endLine":1537,"endColumn":39},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1650,"column":7,"nodeType":"VariableDeclarator","endLine":1650,"endColumn":70},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":1657,"column":8,"nodeType":"VariableDeclarator","endLine":1657,"endColumn":28},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1933,"column":30,"nodeType":"CallExpression","endLine":1933,"endColumn":64},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1946,"column":8,"nodeType":"CallExpression","endLine":1946,"endColumn":47},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1950,"column":8,"nodeType":"CallExpression","endLine":1950,"endColumn":46},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":1955,"column":7,"nodeType":"CallExpression","endLine":1955,"endColumn":38}],"suppressedMessages":[{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1799,"column":8,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1799,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1802,"column":8,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1802,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '|'.","line":1805,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1805,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":1805,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":1805,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":33,"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 return this.id;\n});\n\t$new_div.find('div[id!=\"\"], span[id!=\"\"]').removeAttr('id');\n\n\t$new_div.find('.hiddenByPF')\n\t.removeClass('hiddenByPF')\n\n\t.find('.disabledByPF')\n\t.prop('disabled', false)\n\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\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\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 return this;\n}\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\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":73,"column":6,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":73,"endColumn":67},{"ruleId":"es-x/no-block-scoped-variables","severity":1,"message":"ES2015 block-scoped variables are forbidden.","line":93,"column":8,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":93,"endColumn":71},{"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":36},{"ruleId":"unicorn/prefer-string-slice","severity":1,"message":"Prefer `String#slice()` over `String#substr()`.","line":319,"column":6,"nodeType":"CallExpression","messageId":"substr","endLine":319,"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 *\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":89,"column":11,"nodeType":"VariableDeclaration","messageId":"forbidden","endLine":89,"endColumn":20},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":288,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":288,"endColumn":22},{"ruleId":"es-x/no-string-prototype-includes","severity":1,"message":"ES2015 'String.prototype.includes' method is forbidden.","line":288,"column":9,"nodeType":"MemberExpression","messageId":"forbidden","endLine":288,"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 *\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\titem.id = item.title;\n\t\t\t\t\t\tif (item.displaytitle !== undefined) {\n\t\t\t\t\t\t\titem.text = item.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}\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 ---
$ /usr/bin/npm ci
--- stdout ---

added 304 packages, and audited 305 packages in 4s

52 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
  130:21  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp
  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
  537:22  warning  Found non-literal argument to RegExp Constructor                              security/detect-non-literal-regexp
  546:18  warning  Prefer `String#slice()` over `String#substr()`                                unicorn/prefer-string-slice
  555:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  560:3   warning  ES2015 block-scoped variables are forbidden                                   es-x/no-block-scoped-variables
  560:15  warning  Found non-literal argument to RegExp Constructor                              security/detect-non-literal-regexp

/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
  170:21  warning  Found non-literal argument to RegExp Constructor        security/detect-non-literal-regexp
  178:17  warning  Prefer `String#slice()` over `String#substr()`          unicorn/prefer-string-slice
  211:14  warning  Found non-literal argument to RegExp Constructor        security/detect-non-literal-regexp

/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
  137:21  warning  Found non-literal argument to RegExp Constructor                                security/detect-non-literal-regexp
  145:17  warning  Prefer `String#slice()` over `String#substr()`                                  unicorn/prefer-string-slice
  172:14  warning  Found non-literal argument to RegExp Constructor                                security/detect-non-literal-regexp
  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
  47:24  warning  '$' is already declared in the upper scope on line 7 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
  14:9  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state

/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
   19:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
   76:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables
   80:4  warning  ES2015 'for-of' statements are forbidden     es-x/no-for-of-loops
  104:4  warning  ES2015 block-scoped variables are forbidden  es-x/no-block-scoped-variables

/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
  374:3   warning  jQuery collection names must match the variablePattern                        no-jquery/variable-pattern
  647:3   warning  ES2024 Resizable ArrayBuffer is forbidden                                     es-x/no-resizable-and-growable-arraybuffers
  758:12  warning  Where possible, maintain application state in JS to avoid slower DOM queries  no-jquery/no-class-state
  772: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_regexp.js
  31:12  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

/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
  523:16  warning  Found non-literal argument to RegExp Constructor                            security/detect-non-literal-regexp
  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
  771:22  warning  Positional selector extensions are not allowed                              no-jquery/no-sizzle
  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
  64:9  warning  Selector extensions are not allowed  no-jquery/no-sizzle

/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
   676:19  warning  Found non-literal argument to RegExp Constructor                                     security/detect-non-literal-regexp
   688:21  warning  Unsafe Regular Expression                                                            security/detect-unsafe-regex
   702:17  warning  Unsafe Regular Expression                                                            security/detect-unsafe-regex
   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
  1537:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1650:7   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1657:8   warning  jQuery collection names must match the variablePattern                               no-jquery/variable-pattern
  1933:30  warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1946:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1950:8   warning  Where possible, maintain application state in JS to avoid slower DOM queries         no-jquery/no-class-state
  1955: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
   73:6  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
   93:8  warning  ES2015 block-scoped variables are forbidden     es-x/no-block-scoped-variables
  318:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice
  319:6  warning  Prefer `String#slice()` over `String#substr()`  unicorn/prefer-string-slice

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

✖ 211 problems (0 errors, 211 warnings)


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

Done.

--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 41.0.0 -> 43.0.0
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: 3 installs, 7 updates, 0 removals
  - Upgrading composer/semver (3.3.2 => 3.4.0)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
  - Upgrading mediawiki/mediawiki-codesniffer (v41.0.0 => v43.0.0)
  - Upgrading mediawiki/mediawiki-phan-config (0.12.1 => 0.14.0)
  - 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)
  - Locking phpcsstandards/phpcsextra (1.1.2)
  - Locking phpcsstandards/phpcsutils (1.0.9)
  - Upgrading squizlabs/php_codesniffer (3.7.2 => 3.8.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 3 installs, 7 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Upgrading squizlabs/php_codesniffer (3.7.2 => 3.8.1): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.9): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.1.2): Extracting archive
  - Upgrading composer/semver (3.3.2 => 3.4.0): Extracting archive
  - Upgrading mediawiki/mediawiki-codesniffer (v41.0.0 => v43.0.0): Extracting archive
  - Upgrading microsoft/tolerant-php-parser (v0.1.1 => v0.1.2): 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
 0/8 [>---------------------------]   0%
 7/8 [========================>---]  87%
 8/8 [============================] 100%
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
{'MediaWiki.Files.ClassMatchesFilename.NotMatch', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected', 'MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures', 'MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle', 'MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage', 'MediaWiki.Usage.ForbiddenFunctions.passthru', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic', 'Generic.Files.LineLength.TooLong', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic', 'MediaWiki.Commenting.PropertyDocumentation.MissingVar', 'Squiz.Scope.MethodScope.Missing', 'MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage'}
Tests fail!
$ vendor/bin/phpcbf
--- stdout ---

PHPCBF RESULT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            FIXED  REMAINING
--------------------------------------------------------------------------------
...po/tests/phpunit/integration/includes/PFFormPrinterTest.php  3      4
/src/repo/includes/parserfunctions/PF_TemplateParams.php        1      3
/src/repo/includes/forminputs/PF_LeafletInput.php               1      5
/src/repo/includes/forminputs/PF_DateTimePicker.php             1      1
/src/repo/includes/forminputs/PF_ComboBoxInput.php              1      9
/src/repo/includes/PF_FormLinker.php                            1      8
/src/repo/includes/forminputs/PF_DateInput.php                  1      11
/src/repo/includes/forminputs/PF_OpenLayersInput.php            1      9
/src/repo/includes/parserfunctions/PF_TemplateDisplay.php       1      10
/src/repo/includes/PF_PageSection.php                           9      26
/src/repo/includes/forminputs/PF_DatePickerInput.php            1      6
/src/repo/includes/PF_MappingUtils.php                          1      4
/src/repo/includes/PF_Hooks.php                                 1      15
/src/repo/includes/forminputs/PF_TokensInput.php                1      12
.../integration/includes/forminputs/PFRadioButtonInputTest.php  3      1
/src/repo/specials/PF_CreateTemplate.php                        1      28
/src/repo/includes/PF_FormField.php                             1      70
/src/repo/specials/PF_UploadWindow.php                          13     21
/src/repo/includes/PF_AutoeditAPI.php                           2      57
/src/repo/specials/PF_CreateForm.php                            1      40
/src/repo/includes/PF_ValuesUtils.php                           3      21
/src/repo/specials/PF_RunQuery.php                              1      14
/src/repo/includes/PF_TemplateInForm.php                        2      105
/src/repo/includes/PF_Template.php                              2      44
/src/repo/includes/PF_FormPrinter.php                           11     107
--------------------------------------------------------------------------------
A TOTAL OF 64 ERRORS WERE FIXED IN 25 FILES
--------------------------------------------------------------------------------

Time: 2.61 secs; Memory: 6MB



--- end ---
$ git checkout .phpcs.xml
--- stderr ---
Updated 1 path from the index
--- 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
17 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: 1.15 secs; Memory: 6MB


--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {},
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 0,
      "total": 0
    },
    "dependencies": {
      "prod": 1,
      "dev": 304,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 304
    }
  }
}

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

--- end ---
build: Updating dependencies

composer:
* mediawiki/mediawiki-codesniffer: 41.0.0 → 43.0.0
  The following sniffs are failing and were disabled:
  * Generic.CodeAnalysis.AssignmentInCondition.Found
  * Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition

  The following sniffs now pass and were enabled:
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures

* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.25.0 → 0.26.0
  The following rules are failing and were disabled:
  * es-x/no-resizable-and-growable-arraybuffers


* grunt-banana-checker: 0.11.0 → 0.11.1
* grunt-eslint: 24.0.1 → 24.3.0


$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpifbjjhwh
--- stdout ---
[master b0f1737] build: Updating dependencies
 36 files changed, 1524 insertions(+), 1046 deletions(-)

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

composer:
* mediawiki/mediawiki-codesniffer: 41.0.0 → 43.0.0
  The following sniffs are failing and were disabled:
  * Generic.CodeAnalysis.AssignmentInCondition.Found
  * Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition

  The following sniffs now pass and were enabled:
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures

* mediawiki/mediawiki-phan-config: 0.12.1 → 0.14.0

npm:
* eslint-config-wikimedia: 0.25.0 → 0.26.0
  The following rules are failing and were disabled:
  * es-x/no-resizable-and-growable-arraybuffers

* grunt-banana-checker: 0.11.0 → 0.11.1
* grunt-eslint: 24.0.1 → 24.3.0

Change-Id: Ib60736d7833488cf4eb6aa3230eb85170152afd5
---
 .eslintrc.json                                |    3 +-
 .phpcs.xml                                    |    3 +-
 composer.json                                 |    7 +-
 includes/PF_AutoeditAPI.php                   |    4 +-
 includes/PF_FormField.php                     |    2 +-
 includes/PF_FormLinker.php                    |    2 +-
 includes/PF_FormPrinter.php                   |   32 +-
 includes/PF_Hooks.php                         |    2 +-
 includes/PF_MappingUtils.php                  |    2 +-
 includes/PF_PageSection.php                   |   24 +-
 includes/PF_Template.php                      |    4 +-
 includes/PF_TemplateInForm.php                |    4 +-
 includes/PF_ValuesUtils.php                   |    6 +-
 includes/forminputs/PF_ComboBoxInput.php      |    2 +-
 includes/forminputs/PF_DateInput.php          |    2 +-
 includes/forminputs/PF_DatePickerInput.php    |    2 +-
 includes/forminputs/PF_DateTimePicker.php     |    2 +-
 includes/forminputs/PF_LeafletInput.php       |    2 +-
 includes/forminputs/PF_OpenLayersInput.php    |    2 +-
 includes/forminputs/PF_TokensInput.php        |    2 +-
 .../parserfunctions/PF_TemplateDisplay.php    |    2 +-
 .../parserfunctions/PF_TemplateParams.php     |    2 +-
 libs/PF_FullCalendar.js                       |   20 +-
 libs/PF_SpreadsheetAutocompleteWidget.js      |    1 -
 libs/PF_SpreadsheetComboBoxInput.js           |    1 -
 libs/PF_spreadsheet.js                        |    4 +-
 libs/PF_timepicker.js                         |    4 +-
 libs/PageForms.js                             |    8 +-
 package-lock.json                             | 2307 ++++++++++-------
 package.json                                  |    6 +-
 specials/PF_CreateForm.php                    |    2 +-
 specials/PF_CreateTemplate.php                |    2 +-
 specials/PF_RunQuery.php                      |    2 +-
 specials/PF_UploadWindow.php                  |   88 +-
 .../includes/PFFormPrinterTest.php            |    6 +-
 .../forminputs/PFRadioButtonInputTest.php     |    6 +-
 36 files changed, 1524 insertions(+), 1046 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index 01e055f..d841bf7 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -96,6 +96,7 @@
 		"es-x/no-block-scoped-variables": "warn",
 		"es-x/no-default-parameters": "warn",
 		"es-x/no-for-of-loops": "warn",
-		"es-x/no-string-prototype-includes": "warn"
+		"es-x/no-string-prototype-includes": "warn",
+		"es-x/no-resizable-and-growable-arraybuffers": "warn"
 	}
 }
diff --git a/.phpcs.xml b/.phpcs.xml
index 3e3cf53..d5853e8 100644
--- a/.phpcs.xml
+++ b/.phpcs.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ruleset>
 	<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+		<exclude name="Generic.CodeAnalysis.AssignmentInCondition.Found" />
+		<exclude name="Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition" />
 		<exclude name="Generic.Files.LineLength.TooLong" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
@@ -9,7 +11,6 @@
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingVar" />
-		<exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
 		<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
 		<exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle" />
 		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
diff --git a/composer.json b/composer.json
index 78e2d88..c60ea6f 100644
--- a/composer.json
+++ b/composer.json
@@ -34,8 +34,8 @@
 		}
 	},
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "41.0.0",
-		"mediawiki/mediawiki-phan-config": "0.12.1",
+		"mediawiki/mediawiki-codesniffer": "43.0.0",
+		"mediawiki/mediawiki-phan-config": "0.14.0",
 		"mediawiki/minus-x": "1.1.1",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.3.2"
@@ -56,7 +56,8 @@
 	},
 	"config": {
 		"allow-plugins": {
-			"composer/installers": true
+			"composer/installers": true,
+			"dealerdirect/phpcodesniffer-composer-installer": true
 		}
 	}
 }
diff --git a/includes/PF_AutoeditAPI.php b/includes/PF_AutoeditAPI.php
index 74f0162..d63068f 100644
--- a/includes/PF_AutoeditAPI.php
+++ b/includes/PF_AutoeditAPI.php
@@ -940,7 +940,7 @@ class PFAutoeditAPI extends ApiBase {
 			$wgRequest = new FauxRequest( $this->mOptions, true, $session );
 			// Call PFFormPrinter::formHTML() to get at the form
 			// HTML of the existing page.
-			list( $formHTML, $targetContent, $form_page_title, $generatedTargetNameFormula ) =
+			[ $formHTML, $targetContent, $form_page_title, $generatedTargetNameFormula ] =
 				$wgPageFormsFormPrinter->formHTML(
 					// Special handling for autoedit edits -
 					// otherwise, multi-instance templates
@@ -976,7 +976,7 @@ class PFAutoeditAPI extends ApiBase {
 			// Spoof $wgRequest for PFFormPrinter::formHTML().
 			$session = RequestContext::getMain()->getRequest()->getSession();
 			$wgRequest = new FauxRequest( $this->mOptions, true, $session );
-			list( $formHTML, $targetContent, $generatedFormName, $generatedTargetNameFormula ) =
+			[ $formHTML, $targetContent, $generatedFormName, $generatedTargetNameFormula ] =
 				$wgPageFormsFormPrinter->formHTML(
 					$formContent, $isFormSubmitted, $pageExists,
 					$formArticleId, $preloadContent, $targetName, $targetNameFormula,
diff --git a/includes/PF_FormField.php b/includes/PF_FormField.php
index 1f26012..a946bea 100644
--- a/includes/PF_FormField.php
+++ b/includes/PF_FormField.php
@@ -789,7 +789,7 @@ class PFFormField {
 			if ( $fullCargoField != null ) {
 				// It's inefficient to get these values via
 				// text parsing, but oh well.
-				list( $cargo_table, $cargo_field ) = explode( '|', $fullCargoField, 2 );
+				[ $cargo_table, $cargo_field ] = explode( '|', $fullCargoField, 2 );
 				$text .= Html::hidden( 'input_' . $wgPageFormsFieldNum . '_unique_cargo_table', $cargo_table );
 				$text .= Html::hidden( 'input_' . $wgPageFormsFieldNum . '_unique_cargo_field', $cargo_field );
 			}
diff --git a/includes/PF_FormLinker.php b/includes/PF_FormLinker.php
index d0ca5e5..cc8252d 100644
--- a/includes/PF_FormLinker.php
+++ b/includes/PF_FormLinker.php
@@ -47,7 +47,7 @@ class PFFormLinker {
 		// Allow outside code to set/change the preloaded text.
 		MediaWikiServices::getInstance()->getHookContainer()->run( 'PageForms::EditFormPreloadText', [ &$preloadContent, $title, $formTitle ] );
 
-		list( $formText, $pageText, $formPageTitle, $generatedPageName ) =
+		[ $formText, $pageText, $formPageTitle, $generatedPageName ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$formDefinition, false, false, null, $preloadContent,
 				'Some very long page name that will hopefully never get created ABCDEF123',
diff --git a/includes/PF_FormPrinter.php b/includes/PF_FormPrinter.php
index 2345840..beb1f85 100644
--- a/includes/PF_FormPrinter.php
+++ b/includes/PF_FormPrinter.php
@@ -566,7 +566,7 @@ END;
 
 			$inputType = $formField->getInputType();
 			$gridParamValues = [ 'name' => $templateField->getFieldName() ];
-			list( $autocompletedatatype, $autocompletesettings ) = $this->getSpreadsheetAutocompleteAttributes( $formFieldArgs );
+			[ $autocompletedatatype, $autocompletesettings ] = $this->getSpreadsheetAutocompleteAttributes( $formFieldArgs );
 			if ( $formField->getLabel() !== null ) {
 				$gridParamValues['label'] = $formField->getLabel();
 			}
@@ -1309,12 +1309,12 @@ END;
 								$mappingCargoTable = $form_field->getFieldArg( 'mapping cargo table' );
 								$mappingCargoField = $form_field->getFieldArg( 'mapping cargo field' );
 								$mappingCargoValueField = $form_field->getFieldArg( 'mapping cargo value field' );
-								if ( !$form_submitted && $cur_value !== null && $cur_value !== '' ) {
-									$cur_value = $this->getCargoBasedMapping( $cur_value, $mappingCargoTable, $mappingCargoField, $mappingCargoValueField, $form_field );
-								}
-								if ( $form_submitted && $cur_value_in_template !== null && $cur_value_in_template !== '' ) {
-									$cur_value_in_template = $this->getCargoBasedMapping( $cur_value_in_template, $mappingCargoTable, $mappingCargoValueField, $mappingCargoField, $form_field );
-								}
+							if ( !$form_submitted && $cur_value !== null && $cur_value !== '' ) {
+								$cur_value = $this->getCargoBasedMapping( $cur_value, $mappingCargoTable, $mappingCargoField, $mappingCargoValueField, $form_field );
+							}
+							if ( $form_submitted && $cur_value_in_template !== null && $cur_value_in_template !== '' ) {
+								$cur_value_in_template = $this->getCargoBasedMapping( $cur_value_in_template, $mappingCargoTable, $mappingCargoValueField, $mappingCargoField, $form_field );
+							}
 						}
 						if ( $cur_value !== '' &&
 							( $form_field->hasFieldArg( 'mapping template' ) ||
@@ -1465,15 +1465,15 @@ END;
 							}
 						} elseif ( count( $sub_components ) == 2 ) {
 							switch ( $sub_components[0] ) {
-							case 'label':
-								$input_label = self::getParsedValue( $parser, $sub_components[1] );
-								break;
-							case 'class':
-								$attr['class'] = $sub_components[1];
-								break;
-							case 'style':
-								$attr['style'] = Sanitizer::checkCSS( $sub_components[1] );
-								break;
+								case 'label':
+									$input_label = self::getParsedValue( $parser, $sub_components[1] );
+									break;
+								case 'class':
+									$attr['class'] = $sub_components[1];
+									break;
+								case 'style':
+									$attr['style'] = Sanitizer::checkCSS( $sub_components[1] );
+									break;
 							}
 						}
 					}
diff --git a/includes/PF_Hooks.php b/includes/PF_Hooks.php
index 264b7de..4a6d887 100644
--- a/includes/PF_Hooks.php
+++ b/includes/PF_Hooks.php
@@ -347,7 +347,7 @@ class PFHooks {
 			'<div id="pfForm" class="previewnote" style="font-weight: bold">' . $previewNote . "</div>\n<hr />\n";
 
 		$form_definition = StringUtils::delimiterReplace( '<noinclude>', '</noinclude>', '', $editpage->textbox1 );
-		list( $form_text, $data_text, $form_page_title, $generated_page_name ) =
+		[ $form_text, $data_text, $form_page_title, $generated_page_name ] =
 			$wgPageFormsFormPrinter->formHTML( $form_definition, null, false, null, null, "Page Forms form preview dummy title", null );
 
 		$parserOutput = PFUtils::getParser()->getOutput();
diff --git a/includes/PF_MappingUtils.php b/includes/PF_MappingUtils.php
index 35e5d97..3a64585 100644
--- a/includes/PF_MappingUtils.php
+++ b/includes/PF_MappingUtils.php
@@ -404,7 +404,7 @@ class PFMappingUtils {
 	 * @return string
 	 */
 	private static function removeNSPrefixFromLabel( string $label ) {
-		$labelArr = explode( ':',  trim( $label ) );
+		$labelArr = explode( ':', trim( $label ) );
 		if ( count( $labelArr ) > 1 ) {
 			$prefix = array_shift( $labelArr );
 			$res = implode( ':', $labelArr );
diff --git a/includes/PF_PageSection.php b/includes/PF_PageSection.php
index 591541e..5737954 100644
--- a/includes/PF_PageSection.php
+++ b/includes/PF_PageSection.php
@@ -48,18 +48,18 @@ class PFPageSection {
 
 			if ( count( $sub_components ) === 2 ) {
 				switch ( $sub_components[0] ) {
-				case 'level':
-					$ps->mSectionLevel = $sub_components[1];
-					break;
-				case 'rows':
-				case 'cols':
-				case 'class':
-				case 'editor':
-				case 'placeholder':
-					$ps->mSectionArgs[$sub_components[0]] = $sub_components[1];
-					break;
-				default:
-					// Ignore unknown
+					case 'level':
+						$ps->mSectionLevel = $sub_components[1];
+						break;
+					case 'rows':
+					case 'cols':
+					case 'class':
+					case 'editor':
+					case 'placeholder':
+						$ps->mSectionArgs[$sub_components[0]] = $sub_components[1];
+						break;
+					default:
+						// Ignore unknown
 				}
 			}
 		}
diff --git a/includes/PF_Template.php b/includes/PF_Template.php
index 6176438..0a8c5e2 100644
--- a/includes/PF_Template.php
+++ b/includes/PF_Template.php
@@ -242,7 +242,7 @@ class PFTemplate {
 
 		// First, get the table name, and fields, declared for this
 		// template, if any.
-		list( $tableName, $tableSchema ) = $this->getCargoTableAndSchema( $templateTitle );
+		[ $tableName, $tableSchema ] = $this->getCargoTableAndSchema( $templateTitle );
 		if ( $tableName == null ) {
 			$fieldDescriptions = [];
 		} else {
@@ -365,7 +365,7 @@ class PFTemplate {
 		if ( $tableSchemaString === null ) {
 			// There's no declared table - but see if there's an
 			// attached table.
-			list( $tableName, $isDeclared ) = CargoUtils::getTableNameForTemplate( $templateTitle );
+			[ $tableName, $isDeclared ] = CargoUtils::getTableNameForTemplate( $templateTitle );
 			if ( $tableName == null ) {
 				return [ null, null ];
 			}
diff --git a/includes/PF_TemplateInForm.php b/includes/PF_TemplateInForm.php
index c31b717..02fe94e 100644
--- a/includes/PF_TemplateInForm.php
+++ b/includes/PF_TemplateInForm.php
@@ -78,7 +78,7 @@ class PFTemplateInForm {
 		$tif->mAddButtonText = wfMessage( 'pf_formedit_addanother' )->text();
 
 		if ( array_key_exists( $tif->mTemplateName, $wgPageFormsEmbeddedTemplates ) ) {
-			list( $tif->mEmbedInTemplate, $tif->mEmbedInField ) =
+			[ $tif->mEmbedInTemplate, $tif->mEmbedInField ] =
 				$wgPageFormsEmbeddedTemplates[$tif->mTemplateName];
 			$tif->mPlaceholder = PFFormPrinter::placeholderFormat( $tif->mEmbedInTemplate, $tif->mEmbedInField );
 		}
@@ -381,7 +381,7 @@ class PFTemplateInForm {
 			[ '<nowiki', 'nowiki>' ]
 		];
 		foreach ( $startAndEndTags as $tags ) {
-			list( $startTag, $endTag ) = $tags;
+			[ $startTag, $endTag ] = $tags;
 
 			$startTagLoc = -1;
 			while ( ( $startTagLoc + strlen( $startTag ) < strlen( $str ) ) &&
diff --git a/includes/PF_ValuesUtils.php b/includes/PF_ValuesUtils.php
index 9851815..d3b3f47 100644
--- a/includes/PF_ValuesUtils.php
+++ b/includes/PF_ValuesUtils.php
@@ -661,7 +661,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 			if ( count( $arr ) == 3 ) {
 				$names_array = self::getValuesForCargoField( $arr[0], $arr[1], $arr[2] );
 			} else {
-				list( $table_name, $field_name ) = explode( '|', $source_name, 2 );
+				[ $table_name, $field_name ] = explode( '|', $source_name, 2 );
 				$names_array = self::getAllValuesForCargoField( $table_name, $field_name );
 			}
 			// Remove blank/null values from the array.
@@ -794,7 +794,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 	 * @return string[]
 	 */
 	public static function setAutocompleteValues( $field_args, $is_list ) {
-		list( $autocompleteFieldType, $autocompletionSource ) =
+		[ $autocompleteFieldType, $autocompletionSource ] =
 			self::getAutocompletionTypeAndSource( $field_args );
 		$autocompleteSettings = $autocompletionSource;
 		if ( $is_list ) {
@@ -912,7 +912,7 @@ SERVICE wikibase:label { bd:serviceParam wikibase:language \"" . $wgLanguageCode
 
 		$rawQuery = $rawQuery . "|named args=yes|link=none|limit=$wgPageFormsMaxAutocompleteValues|searchlabel=";
 		$rawQueryArray = explode( "|", $rawQuery );
-		list( $queryString, $processedParams, $printouts ) = SMWQueryProcessor::getComponentsFromFunctionParams( $rawQueryArray, false );
+		[ $queryString, $processedParams, $printouts ] = SMWQueryProcessor::getComponentsFromFunctionParams( $rawQueryArray, false );
 		SMWQueryProcessor::addThisPrintout( $printouts, $processedParams );
 		$processedParams = SMWQueryProcessor::getProcessedParams( $processedParams, $printouts );
 
diff --git a/includes/forminputs/PF_ComboBoxInput.php b/includes/forminputs/PF_ComboBoxInput.php
index b220c30..64278df 100644
--- a/includes/forminputs/PF_ComboBoxInput.php
+++ b/includes/forminputs/PF_ComboBoxInput.php
@@ -98,7 +98,7 @@ class PFComboBoxInput extends PFFormInput {
 				}
 			}
 		} else {
-			list( $autocompleteSettings, $remoteDataType, $delimiter ) = PFValuesUtils::setAutocompleteValues( $other_args, false );
+			[ $autocompleteSettings, $remoteDataType, $delimiter ] = PFValuesUtils::setAutocompleteValues( $other_args, false );
 			$autocompleteSettings = str_replace( "'", "\'", $autocompleteSettings );
 		}
 
diff --git a/includes/forminputs/PF_DateInput.php b/includes/forminputs/PF_DateInput.php
index c5801c4..ac301eb 100644
--- a/includes/forminputs/PF_DateInput.php
+++ b/includes/forminputs/PF_DateInput.php
@@ -174,7 +174,7 @@ class PFDateInput extends PFFormInput {
 				$month = $date['month'];
 				$day = $date['day'];
 			} else {
-				list( $year, $month, $day ) = self::parseDate( $date );
+				[ $year, $month, $day ] = self::parseDate( $date );
 			}
 		} else {
 			// Just keep everything at null.
diff --git a/includes/forminputs/PF_DatePickerInput.php b/includes/forminputs/PF_DatePickerInput.php
index 6d1f575..ea7283c 100644
--- a/includes/forminputs/PF_DatePickerInput.php
+++ b/includes/forminputs/PF_DatePickerInput.php
@@ -30,7 +30,7 @@ class PFDatePickerInput extends PFFormInput {
 	 */
 	public function __construct( $input_number, $cur_value, $input_name, $disabled, array $other_args ) {
 		if ( $cur_value != '' ) {
-			list( $year, $month, $day ) = PFDateInput::parseDate( $cur_value );
+			[ $year, $month, $day ] = PFDateInput::parseDate( $cur_value );
 			$cur_value = sprintf( '%04d-%02d-%02d', $year, $month, $day );
 		}
 
diff --git a/includes/forminputs/PF_DateTimePicker.php b/includes/forminputs/PF_DateTimePicker.php
index 75fd4ca..097271d 100644
--- a/includes/forminputs/PF_DateTimePicker.php
+++ b/includes/forminputs/PF_DateTimePicker.php
@@ -30,7 +30,7 @@ class PFDateTimePicker extends PFFormInput {
 	 */
 	public function __construct( $input_number, $cur_value, $input_name, $disabled, array $other_args ) {
 		if ( $cur_value != '' ) {
-			list( $year, $month, $day, $time ) = PFDateInput::parseDate( $cur_value, true );
+			[ $year, $month, $day, $time ] = PFDateInput::parseDate( $cur_value, true );
 			$cur_value = sprintf( '%04d-%02d-%02dT%sZ', $year, $month, $day, $time );
 		}
 		parent::__construct( $input_number, $cur_value, $input_name, $disabled, $other_args );
diff --git a/includes/forminputs/PF_LeafletInput.php b/includes/forminputs/PF_LeafletInput.php
index 10b695a..bbee11a 100644
--- a/includes/forminputs/PF_LeafletInput.php
+++ b/includes/forminputs/PF_LeafletInput.php
@@ -51,7 +51,7 @@ class PFLeafletInput extends PFOpenLayersInput {
 			$imagePage = new ImagePage( $fileTitle );
 			$file = $imagePage->getDisplayedFile();
 			$filePath = $wgUploadDirectory . '/' . $file->getUrlRel();
-			list( $imageWidth, $imageHeight, $type, $attr ) = getimagesize( $filePath );
+			[ $imageWidth, $imageHeight, $type, $attr ] = getimagesize( $filePath );
 			if ( !array_key_exists( 'height', $other_args ) && !array_key_exists( 'width', $other_args ) ) {
 				// Scale down image if it's huge.
 				$maxDimension = max( $imageHeight, $imageWidth );
diff --git a/includes/forminputs/PF_OpenLayersInput.php b/includes/forminputs/PF_OpenLayersInput.php
index b4076ae..cbc4a35 100644
--- a/includes/forminputs/PF_OpenLayersInput.php
+++ b/includes/forminputs/PF_OpenLayersInput.php
@@ -278,7 +278,7 @@ class PFOpenLayersInput extends PFFormInput {
 		if ( count( $latAndLonStrings ) != 2 ) {
 			throw new MWException( "Error parsing coordinates string: \"$coordinatesString\"." );
 		}
-		list( $latString, $lonString ) = $latAndLonStrings;
+		[ $latString, $lonString ] = $latAndLonStrings;
 
 		// Handle strings one at a time.
 		$latIsNegative = false;
diff --git a/includes/forminputs/PF_TokensInput.php b/includes/forminputs/PF_TokensInput.php
index 8309c0a..562a15e 100644
--- a/includes/forminputs/PF_TokensInput.php
+++ b/includes/forminputs/PF_TokensInput.php
@@ -95,7 +95,7 @@ class PFTokensInput extends PFFormInput {
 				$delimiter = ',';
 			}
 		} else {
-			list( $autocompleteSettings, $remoteDataType, $delimiter ) = PFValuesUtils::setAutocompleteValues( $other_args, true );
+			[ $autocompleteSettings, $remoteDataType, $delimiter ] = PFValuesUtils::setAutocompleteValues( $other_args, true );
 		}
 
 		if ( is_array( $cur_value ) ) {
diff --git a/includes/parserfunctions/PF_TemplateDisplay.php b/includes/parserfunctions/PF_TemplateDisplay.php
index 4418599..93f8b23 100644
--- a/includes/parserfunctions/PF_TemplateDisplay.php
+++ b/includes/parserfunctions/PF_TemplateDisplay.php
@@ -171,7 +171,7 @@ class PFTemplateDisplay {
 		$mappingFormat = new CargoMapsFormat( $parser->getOutput() );
 
 		try {
-			list( $lat, $lon ) = CargoUtils::parseCoordinatesString( $coordinatesStr );
+			[ $lat, $lon ] = CargoUtils::parseCoordinatesString( $coordinatesStr );
 		} catch ( MWException $e ) {
 			return '';
 		}
diff --git a/includes/parserfunctions/PF_TemplateParams.php b/includes/parserfunctions/PF_TemplateParams.php
index 5f0df47..b4f3375 100644
--- a/includes/parserfunctions/PF_TemplateParams.php
+++ b/includes/parserfunctions/PF_TemplateParams.php
@@ -33,7 +33,7 @@ class PFTemplateParams {
 
 		$fieldData = [];
 		foreach ( $params as $param ) {
-			list( $fieldName, $fieldParams ) = self::parseWikitextString( $param );
+			[ $fieldName, $fieldParams ] = self::parseWikitextString( $param );
 			if ( $fieldName !== '' ) {
 				$fieldData[$fieldName] = $fieldParams;
 			}
diff --git a/libs/PF_FullCalendar.js b/libs/PF_FullCalendar.js
index 89a39fb..ede42b4 100644
--- a/libs/PF_FullCalendar.js
+++ b/libs/PF_FullCalendar.js
@@ -338,15 +338,21 @@
 		function isValidDate(dateString) {
 			if( mw.config.get( 'wgAmericanDates' ) ) {
 				var reg = /^(January?|February?|March?|April?|May|June?|July?|August?|September?|October?|November?|December?)\s\d{1,2},\s\d{4}$/;
-				if(!dateString.match(reg)) { return false; }
+				if(!dateString.match(reg)) {
+ return false;
+}
 			} else {
 				dateString = dateString.replace('/','-');
 				dateString = dateString.replace('/','-');
 				var regEx = /^\d{4}-\d{2}-\d{2}$/;
-				if(!dateString.match(regEx)) { return false; } // Invalid format
+				if(!dateString.match(regEx)) {
+ return false;
+} // Invalid format
 				var d = new Date(dateString);
 				var dNum = d.getTime();
-				if(!dNum && dNum !== 0) { return false; } // NaN value, Invalid date
+				if(!dNum && dNum !== 0) {
+ return false;
+} // NaN value, Invalid date
 				return d.toISOString().slice(0,10) === dateString;
 			}
 		}
@@ -354,12 +360,16 @@
 		function dateTimeValidation(dateString) {
 			if( mw.config.get( 'wgAmericanDates' ) ) {
 				var 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}$/;
-				if ( !dateString.match( reg ) ) { return false; }
+				if ( !dateString.match( reg ) ) {
+ return false;
+}
 			} else {
 				dateString = dateString.replace('/','-');
 				dateString = dateString.replace('/','-');
 				var regEx = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
-				if ( !dateString.match( regEx ) ) { return false; } // Invalid format
+				if ( !dateString.match( regEx ) ) {
+ return false;
+} // Invalid format
 				return !!new Date(dateString).getTime();
 			}
 		}
diff --git a/libs/PF_SpreadsheetAutocompleteWidget.js b/libs/PF_SpreadsheetAutocompleteWidget.js
index 91a2d62..fe16753 100644
--- a/libs/PF_SpreadsheetAutocompleteWidget.js
+++ b/libs/PF_SpreadsheetAutocompleteWidget.js
@@ -158,7 +158,6 @@ pf.spreadsheetAutocompleteWidget.prototype.getLookupRequest = function() {
 };
 
 /**
- *
  * @param {string} suggestion
  * @return {Mixed} HtmlSnipppet
  *
diff --git a/libs/PF_SpreadsheetComboBoxInput.js b/libs/PF_SpreadsheetComboBoxInput.js
index ae9f1f7..b112ec7 100644
--- a/libs/PF_SpreadsheetComboBoxInput.js
+++ b/libs/PF_SpreadsheetComboBoxInput.js
@@ -126,7 +126,6 @@ pf.SpreadsheetComboBoxInput.prototype.setValues = function() {
 	}
 }
 /**
- *
  * @param {string} suggestion
  * @return HtmlSnippet
  */
diff --git a/libs/PF_spreadsheet.js b/libs/PF_spreadsheet.js
index 482dabe..1e65131 100644
--- a/libs/PF_spreadsheet.js
+++ b/libs/PF_spreadsheet.js
@@ -840,7 +840,9 @@ var dataValues = [];
 					allowInsertColumn: false,
 					allowDeletingAllRows: true,
 					oninsertrow: rowAdded,
-					contextMenu: function() { return false; },
+					contextMenu: function() {
+ return false;
+},
 					tableHeight: "2500px",
 					pagination: (editMultiplePages === undefined ) ? false : 100,
 					search: (editMultiplePages !== undefined ),
diff --git a/libs/PF_timepicker.js b/libs/PF_timepicker.js
index a7fe59d..3ca91d9 100644
--- a/libs/PF_timepicker.js
+++ b/libs/PF_timepicker.js
@@ -224,7 +224,9 @@ window.PF_TP_init = function( inputID, params ) { // minTime, maxTime, interval,
 	// hide timepicker when input loses focus
 	$inputShow
 	.blur(function() {
-		jQuery( '#' + inputID + '_tree ul' ).fadeOut( 'normal', function() { jQuery(this).hide(); });
+		jQuery( '#' + inputID + '_tree ul' ).fadeOut( 'normal', function() {
+ jQuery(this).hide();
+});
 	});
 
 	if ( ! params.partOfDTP ) {
diff --git a/libs/PageForms.js b/libs/PageForms.js
index 431b36b..ae386c0 100644
--- a/libs/PageForms.js
+++ b/libs/PageForms.js
@@ -1287,7 +1287,9 @@ $.fn.addInstance = function( addAboveCurInstance ) {
 	// of any divs and spans (presumably, these exist only for the
 	// sake of "show on select"). We do the deletions because no two
 	// elements on the page are allowed to have the same ID.
-	$new_div.find('[id!=""]').attr('data-origID', function() { return this.id; });
+	$new_div.find('[id!=""]').attr('data-origID', function() {
+ return this.id;
+});
 	$new_div.find('div[id!=""], span[id!=""]').removeAttr('id');
 
 	$new_div.find('.hiddenByPF')
@@ -1504,7 +1506,9 @@ $.fn.setDependentAutocompletion = function( dependentField, baseField, baseValue
  */
 $.fn.setAutocompleteForDependentField = function( partOfMultiple ) {
 	var curValue = $(this).val();
-	if ( curValue === null ) { return this; }
+	if ( curValue === null ) {
+ return this;
+}
 
 	var nameAttr = partOfMultiple ? 'origName' : 'name';
 	var name = $(this).attr(nameAttr);
diff --git a/package-lock.json b/package-lock.json
index c55e8b2..cbacd04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,42 +6,53 @@
 		"": {
 			"name": "PageForms",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.25.0",
+				"eslint-config-wikimedia": "0.26.0",
 				"grunt": "1.6.1",
-				"grunt-banana-checker": "0.11.0",
-				"grunt-eslint": "24.0.1"
+				"grunt-banana-checker": "0.11.1",
+				"grunt-eslint": "24.3.0"
+			}
+		},
+		"node_modules/@aashutoshrathi/word-wrap": {
+			"version": "1.2.6",
+			"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+			"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/@babel/code-frame": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
-			"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
 			"dev": true,
 			"dependencies": {
-				"@babel/highlight": "^7.18.6"
+				"@babel/highlight": "^7.24.2",
+				"picocolors": "^1.0.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-validator-identifier": {
-			"version": "7.19.1",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+			"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==",
 			"dev": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/highlight": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-			"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.18.6",
-				"chalk": "^2.0.0",
-				"js-tokens": "^4.0.0"
+				"@babel/helper-validator-identifier": "^7.22.20",
+				"chalk": "^2.4.2",
+				"js-tokens": "^4.0.0",
+				"picocolors": "^1.0.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -71,23 +82,23 @@
 			}
 		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.23.6",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
-			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
+			"version": "0.37.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz",
+			"integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==",
 			"dev": true,
 			"dependencies": {
 				"comment-parser": "1.3.1",
-				"esquery": "^1.4.0",
-				"jsdoc-type-pratt-parser": "~2.2.5"
+				"esquery": "^1.5.0",
+				"jsdoc-type-pratt-parser": "~4.0.0"
 			},
 			"engines": {
-				"node": "^12 || ^14 || ^16 || ^17"
+				"node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20"
 			}
 		},
 		"node_modules/@eslint-community/eslint-utils": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
-			"integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.3.0"
@@ -99,33 +110,24 @@
 				"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
 			}
 		},
-		"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/@eslint-community/regexpp": {
-			"version": "4.4.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
-			"integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+			"version": "4.10.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
 			"dev": true,
 			"engines": {
 				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
 			}
 		},
 		"node_modules/@eslint/eslintrc": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
-			"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
 			"dev": true,
 			"dependencies": {
 				"ajv": "^6.12.4",
 				"debug": "^4.3.2",
-				"espree": "^9.5.0",
+				"espree": "^9.6.0",
 				"globals": "^13.19.0",
 				"ignore": "^5.2.0",
 				"import-fresh": "^3.2.1",
@@ -171,22 +173,22 @@
 			}
 		},
 		"node_modules/@eslint/js": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
-			"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
 			"dev": true,
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
 			}
 		},
 		"node_modules/@humanwhocodes/config-array": {
-			"version": "0.11.8",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-			"integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+			"version": "0.11.14",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
 			"dev": true,
 			"dependencies": {
-				"@humanwhocodes/object-schema": "^1.2.1",
-				"debug": "^4.1.1",
+				"@humanwhocodes/object-schema": "^2.0.2",
+				"debug": "^4.3.1",
 				"minimatch": "^3.0.5"
 			},
 			"engines": {
@@ -207,15 +209,15 @@
 			}
 		},
 		"node_modules/@humanwhocodes/object-schema": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-			"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+			"integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
 			"dev": true
 		},
 		"node_modules/@mdn/browser-compat-data": {
-			"version": "4.2.1",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz",
-			"integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==",
+			"version": "5.5.17",
+			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.17.tgz",
+			"integrity": "sha512-M4r4nllQiFvHzbZmx+W1WhrLiMNu4XZ+t3AzzmePQ2P9zaxov2xFmd8KrOSQ0NN2QoJ8BINWdSkVU4sAcDTMJw==",
 			"dev": true
 		},
 		"node_modules/@nodelib/fs.scandir": {
@@ -253,10 +255,150 @@
 				"node": ">= 8"
 			}
 		},
+		"node_modules/@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true
+		},
 		"node_modules/@types/normalize-package-data": {
-			"version": "2.4.1",
-			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-			"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+			"version": "2.4.4",
+			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+			"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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"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==",
+			"dev": true,
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0",
+				"debug": "^4.3.4",
+				"globby": "^11.1.0",
+				"is-glob": "^4.0.3",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"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==",
+			"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"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^4.1.1"
+			},
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"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==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.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==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"eslint-visitor-keys": "^3.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
 			"dev": true
 		},
 		"node_modules/abbrev": {
@@ -266,9 +408,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.8.2",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-			"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+			"version": "8.11.3",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -323,6 +465,15 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/are-docs-informative": {
+			"version": "0.0.2",
+			"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+			"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+			"dev": true,
+			"engines": {
+				"node": ">=14"
+			}
+		},
 		"node_modules/argparse": {
 			"version": "1.0.10",
 			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -356,21 +507,24 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/array-union": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/ast-metadata-inferer": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
-			"integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+			"version": "0.8.0",
+			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz",
+			"integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==",
 			"dev": true,
 			"dependencies": {
-				"@mdn/browser-compat-data": "^3.3.14"
+				"@mdn/browser-compat-data": "^5.2.34"
 			}
 		},
-		"node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
-			"version": "3.3.14",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
-			"integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
-			"dev": true
-		},
 		"node_modules/async": {
 			"version": "3.2.3",
 			"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
@@ -412,9 +566,9 @@
 			}
 		},
 		"node_modules/browserslist": {
-			"version": "4.20.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-			"integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+			"version": "4.23.0",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+			"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -424,14 +578,17 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			],
 			"dependencies": {
-				"caniuse-lite": "^1.0.30001332",
-				"electron-to-chromium": "^1.4.118",
-				"escalade": "^3.1.1",
-				"node-releases": "^2.0.3",
-				"picocolors": "^1.0.0"
+				"caniuse-lite": "^1.0.30001587",
+				"electron-to-chromium": "^1.4.668",
+				"node-releases": "^2.0.14",
+				"update-browserslist-db": "^1.0.13"
 			},
 			"bin": {
 				"browserslist": "cli.js"
@@ -441,9 +598,9 @@
 			}
 		},
 		"node_modules/browserslist-config-wikimedia": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
-			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz",
+			"integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==",
 			"dev": true
 		},
 		"node_modules/builtin-modules": {
@@ -458,6 +615,15 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/builtins": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+			"integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+			"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",
@@ -468,9 +634,9 @@
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001341",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz",
-			"integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==",
+			"version": "1.0.30001600",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+			"integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -480,6 +646,10 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			]
 		},
@@ -551,9 +721,9 @@
 			}
 		},
 		"node_modules/ci-info": {
-			"version": "3.8.0",
-			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-			"integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+			"version": "3.9.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+			"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -625,17 +795,6 @@
 			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
 			"dev": true
 		},
-		"node_modules/core-js": {
-			"version": "3.22.5",
-			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz",
-			"integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==",
-			"dev": true,
-			"hasInstallScript": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
 		"node_modules/cross-spawn": {
 			"version": "7.0.3",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -703,6 +862,18 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/dir-glob": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+			"dev": true,
+			"dependencies": {
+				"path-type": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/doctrine": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -716,9 +887,9 @@
 			}
 		},
 		"node_modules/electron-to-chromium": {
-			"version": "1.4.137",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz",
-			"integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==",
+			"version": "1.4.719",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
+			"integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
 			"dev": true
 		},
 		"node_modules/error-ex": {
@@ -731,9 +902,9 @@
 			}
 		},
 		"node_modules/escalade": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+			"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
 			"dev": true,
 			"engines": {
 				"node": ">=6"
@@ -752,27 +923,28 @@
 			}
 		},
 		"node_modules/eslint": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
-			"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.2.0",
-				"@eslint-community/regexpp": "^4.4.0",
-				"@eslint/eslintrc": "^2.0.1",
-				"@eslint/js": "8.36.0",
-				"@humanwhocodes/config-array": "^0.11.8",
+				"@eslint-community/regexpp": "^4.6.1",
+				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/js": "8.57.0",
+				"@humanwhocodes/config-array": "^0.11.14",
 				"@humanwhocodes/module-importer": "^1.0.1",
 				"@nodelib/fs.walk": "^1.2.8",
-				"ajv": "^6.10.0",
+				"@ungap/structured-clone": "^1.2.0",
+				"ajv": "^6.12.4",
 				"chalk": "^4.0.0",
 				"cross-spawn": "^7.0.2",
 				"debug": "^4.3.2",
 				"doctrine": "^3.0.0",
 				"escape-string-regexp": "^4.0.0",
-				"eslint-scope": "^7.1.1",
-				"eslint-visitor-keys": "^3.3.0",
-				"espree": "^9.5.0",
+				"eslint-scope": "^7.2.2",
+				"eslint-visitor-keys": "^3.4.3",
+				"espree": "^9.6.1",
 				"esquery": "^1.4.2",
 				"esutils": "^2.0.2",
 				"fast-deep-equal": "^3.1.3",
@@ -780,22 +952,19 @@
 				"find-up": "^5.0.0",
 				"glob-parent": "^6.0.2",
 				"globals": "^13.19.0",
-				"grapheme-splitter": "^1.0.4",
+				"graphemer": "^1.4.0",
 				"ignore": "^5.2.0",
-				"import-fresh": "^3.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-glob": "^4.0.0",
 				"is-path-inside": "^3.0.3",
-				"js-sdsl": "^4.1.4",
 				"js-yaml": "^4.1.0",
 				"json-stable-stringify-without-jsonify": "^1.0.1",
 				"levn": "^0.4.1",
 				"lodash.merge": "^4.6.2",
 				"minimatch": "^3.1.2",
 				"natural-compare": "^1.4.0",
-				"optionator": "^0.9.1",
+				"optionator": "^0.9.3",
 				"strip-ansi": "^6.0.1",
-				"strip-json-comments": "^3.1.0",
 				"text-table": "^0.2.0"
 			},
 			"bin": {
@@ -808,105 +977,178 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"semver": "^7.5.4"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
+			}
+		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
-			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz",
+			"integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==",
 			"dev": true,
 			"dependencies": {
-				"browserslist-config-wikimedia": "^0.5.0",
-				"eslint": "^8.31.0",
-				"eslint-plugin-compat": "^4.0.2",
-				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "39.2.2",
+				"browserslist-config-wikimedia": "^0.5.1",
+				"eslint": "^8.53.0",
+				"eslint-plugin-compat": "^4.2.0",
+				"eslint-plugin-es-x": "^7.3.0",
+				"eslint-plugin-jest": "^27.6.0",
+				"eslint-plugin-jsdoc": "^42.0.0",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.5.0",
-				"eslint-plugin-mocha": "^9.0.0",
+				"eslint-plugin-mocha": "^10.2.0",
+				"eslint-plugin-n": "^16.0.1",
 				"eslint-plugin-no-jquery": "^2.7.0",
-				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-qunit": "^7.3.4",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^42.0.0",
-				"eslint-plugin-vue": "^8.7.1",
+				"eslint-plugin-unicorn": "^47.0.0",
+				"eslint-plugin-vue": "^9.18.1",
 				"eslint-plugin-wdio": "^7.19.4",
-				"eslint-plugin-yml": "^0.14.0"
+				"eslint-plugin-yml": "^1.10.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-vue": {
+			"version": "9.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz",
+			"integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"globals": "^13.24.0",
+				"natural-compare": "^1.4.0",
+				"nth-check": "^2.1.1",
+				"postcss-selector-parser": "^6.0.15",
+				"semver": "^7.6.0",
+				"vue-eslint-parser": "^9.4.2",
+				"xml-name-validator": "^4.0.0"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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==",
+			"dev": true,
+			"dependencies": {
+				"debug": "^4.3.4",
+				"eslint-scope": "^7.1.1",
+				"eslint-visitor-keys": "^3.3.0",
+				"espree": "^9.3.1",
+				"esquery": "^1.4.0",
+				"lodash": "^4.17.21",
+				"semver": "^7.3.6"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-compat": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
-			"integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
+			"integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==",
 			"dev": true,
 			"dependencies": {
-				"@mdn/browser-compat-data": "^4.1.5",
-				"ast-metadata-inferer": "^0.7.0",
-				"browserslist": "^4.16.8",
-				"caniuse-lite": "^1.0.30001304",
-				"core-js": "^3.16.2",
+				"@mdn/browser-compat-data": "^5.3.13",
+				"ast-metadata-inferer": "^0.8.0",
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001524",
 				"find-up": "^5.0.0",
-				"lodash.memoize": "4.1.2",
-				"semver": "7.3.5"
+				"lodash.memoize": "^4.1.2",
+				"semver": "^7.5.4"
 			},
 			"engines": {
-				"node": ">=9.x"
+				"node": ">=14.x"
 			},
 			"peerDependencies": {
 				"eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-es-x": {
-			"version": "5.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz",
-			"integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==",
+			"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==",
 			"dev": true,
 			"dependencies": {
-				"eslint-utils": "^2.0.0 || ^3.0.0",
-				"regexpp": "^3.0.0"
+				"@eslint-community/eslint-utils": "^4.1.2",
+				"@eslint-community/regexpp": "^4.6.0",
+				"eslint-compat-utils": "^0.5.0"
 			},
 			"engines": {
-				"node": ">=8.10.0"
+				"node": "^14.18.0 || >=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ota-meshi"
 			},
 			"peerDependencies": {
-				"eslint": ">=4.19.1"
+				"eslint": ">=8"
 			}
 		},
-		"node_modules/eslint-plugin-jsdoc": {
-			"version": "39.2.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
-			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
+		"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==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.23.1",
-				"comment-parser": "1.3.1",
-				"debug": "^4.3.4",
-				"escape-string-regexp": "^4.0.0",
-				"esquery": "^1.4.0",
-				"semver": "^7.3.7",
-				"spdx-expression-parse": "^3.0.1"
+				"@typescript-eslint/utils": "^5.10.0"
 			},
 			"engines": {
-				"node": "^14 || ^16 || ^17"
+				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
 			},
 			"peerDependencies": {
-				"eslint": "^7.0.0 || ^8.0.0"
+				"@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
+				"eslint": "^7.0.0 || ^8.0.0",
+				"jest": "*"
+			},
+			"peerDependenciesMeta": {
+				"@typescript-eslint/eslint-plugin": {
+					"optional": true
+				},
+				"jest": {
+					"optional": true
+				}
 			}
 		},
-		"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
-			"version": "7.3.8",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-			"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+		"node_modules/eslint-plugin-jsdoc": {
+			"version": "42.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz",
+			"integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==",
 			"dev": true,
 			"dependencies": {
-				"lru-cache": "^6.0.0"
-			},
-			"bin": {
-				"semver": "bin/semver.js"
+				"@es-joy/jsdoccomment": "~0.37.0",
+				"are-docs-informative": "^0.0.2",
+				"comment-parser": "1.3.1",
+				"debug": "^4.3.4",
+				"escape-string-regexp": "^4.0.0",
+				"esquery": "^1.5.0",
+				"semver": "^7.3.8",
+				"spdx-expression-parse": "^3.0.1"
 			},
 			"engines": {
-				"node": ">=10"
+				"node": "^14 || ^16 || ^17 || ^18 || ^19"
+			},
+			"peerDependencies": {
+				"eslint": "^7.0.0 || ^8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-json-es": {
@@ -922,15 +1164,6 @@
 				"eslint": ">= 7"
 			}
 		},
-		"node_modules/eslint-plugin-json-es/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/eslint-plugin-mediawiki": {
 			"version": "0.5.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
@@ -945,46 +1178,60 @@
 			}
 		},
 		"node_modules/eslint-plugin-mocha": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
-			"integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+			"version": "10.4.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz",
+			"integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-utils": "^3.0.0",
-				"ramda": "^0.27.1"
+				"globals": "^13.24.0",
+				"rambda": "^7.4.0"
 			},
 			"engines": {
-				"node": ">=12.0.0"
+				"node": ">=14.0.0"
 			},
 			"peerDependencies": {
 				"eslint": ">=7.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-mocha/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+		"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==",
 			"dev": true,
 			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"builtins": "^5.0.1",
+				"eslint-plugin-es-x": "^7.5.0",
+				"get-tsconfig": "^4.7.0",
+				"globals": "^13.24.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",
+				"semver": "^7.5.3"
 			},
 			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+				"node": ">=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/mysticatea"
 			},
 			"peerDependencies": {
-				"eslint": ">=5"
+				"eslint": ">=7.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-mocha/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+		"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==",
 			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
 			"engines": {
-				"node": ">=10"
+				"node": "*"
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
@@ -996,45 +1243,6 @@
 				"eslint": ">=2.3.0"
 			}
 		},
-		"node_modules/eslint-plugin-node": {
-			"version": "11.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
-			"integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
-			"dev": true,
-			"dependencies": {
-				"eslint-plugin-es": "^3.0.0",
-				"eslint-utils": "^2.0.0",
-				"ignore": "^5.1.1",
-				"minimatch": "^3.0.4",
-				"resolve": "^1.10.1",
-				"semver": "^6.1.0"
-			},
-			"engines": {
-				"node": ">=8.10.0"
-			}
-		},
-		"node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
-			"integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
-			"dev": true,
-			"dependencies": {
-				"eslint-utils": "^2.0.0",
-				"regexpp": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=8.10.0"
-			}
-		},
-		"node_modules/eslint-plugin-node/node_modules/semver": {
-			"version": "6.3.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-			"dev": true,
-			"bin": {
-				"semver": "bin/semver.js"
-			}
-		},
 		"node_modules/eslint-plugin-qunit": {
 			"version": "7.3.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz",
@@ -1048,33 +1256,6 @@
 				"node": "12.x || 14.x || >=16.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-qunit/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-qunit/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/eslint-plugin-security": {
 			"version": "1.7.1",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
@@ -1085,61 +1266,36 @@
 			}
 		},
 		"node_modules/eslint-plugin-unicorn": {
-			"version": "42.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-			"integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+			"version": "47.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz",
+			"integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==",
 			"dev": true,
 			"dependencies": {
-				"@babel/helper-validator-identifier": "^7.15.7",
-				"ci-info": "^3.3.0",
+				"@babel/helper-validator-identifier": "^7.19.1",
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"ci-info": "^3.8.0",
 				"clean-regexp": "^1.0.0",
-				"eslint-utils": "^3.0.0",
-				"esquery": "^1.4.0",
+				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
-				"is-builtin-module": "^3.1.0",
+				"is-builtin-module": "^3.2.1",
+				"jsesc": "^3.0.2",
 				"lodash": "^4.17.21",
 				"pluralize": "^8.0.0",
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.24",
+				"regjsparser": "^0.10.0",
 				"safe-regex": "^2.1.1",
-				"semver": "^7.3.5",
+				"semver": "^7.3.8",
 				"strip-indent": "^3.0.0"
 			},
 			"engines": {
-				"node": ">=12"
+				"node": ">=16"
 			},
 			"funding": {
 				"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
 			},
 			"peerDependencies": {
-				"eslint": ">=8.8.0"
-			}
-		},
-		"node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
+				"eslint": ">=8.38.0"
 			}
 		},
 		"node_modules/eslint-plugin-vue": {
@@ -1162,33 +1318,6 @@
 				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
 			}
 		},
-		"node_modules/eslint-plugin-vue/node_modules/eslint-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-			"dev": true,
-			"dependencies": {
-				"eslint-visitor-keys": "^2.0.0"
-			},
-			"engines": {
-				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
-			},
-			"peerDependencies": {
-				"eslint": ">=5"
-			}
-		},
-		"node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/eslint-plugin-wdio": {
 			"version": "7.19.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.19.4.tgz",
@@ -1199,18 +1328,19 @@
 			}
 		},
 		"node_modules/eslint-plugin-yml": {
-			"version": "0.14.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz",
-			"integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==",
+			"version": "1.13.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz",
+			"integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==",
 			"dev": true,
 			"dependencies": {
 				"debug": "^4.3.2",
+				"eslint-compat-utils": "^0.5.0",
 				"lodash": "^4.17.21",
 				"natural-compare": "^1.4.0",
-				"yaml-eslint-parser": "^0.5.0"
+				"yaml-eslint-parser": "^1.2.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^14.17.0 || >=16.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ota-meshi"
@@ -1220,9 +1350,9 @@
 			}
 		},
 		"node_modules/eslint-scope": {
-			"version": "7.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-			"integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
 			"dev": true,
 			"dependencies": {
 				"esrecurse": "^4.3.0",
@@ -1230,27 +1360,48 @@
 			},
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
 			}
 		},
 		"node_modules/eslint-utils": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-			"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
 			"dev": true,
 			"dependencies": {
-				"eslint-visitor-keys": "^1.1.0"
+				"eslint-visitor-keys": "^2.0.0"
 			},
 			"engines": {
-				"node": ">=6"
+				"node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=5"
+			}
+		},
+		"node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
 			}
 		},
 		"node_modules/eslint-visitor-keys": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-			"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
 			"dev": true,
 			"engines": {
-				"node": ">=4"
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
 			}
 		},
 		"node_modules/eslint/node_modules/argparse": {
@@ -1259,15 +1410,6 @@
 			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 			"dev": true
 		},
-		"node_modules/eslint/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/eslint/node_modules/js-yaml": {
 			"version": "4.1.0",
 			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1293,14 +1435,14 @@
 			}
 		},
 		"node_modules/espree": {
-			"version": "9.5.0",
-			"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
-			"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
 			"dev": true,
 			"dependencies": {
-				"acorn": "^8.8.0",
+				"acorn": "^8.9.0",
 				"acorn-jsx": "^5.3.2",
-				"eslint-visitor-keys": "^3.3.0"
+				"eslint-visitor-keys": "^3.4.1"
 			},
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1309,15 +1451,6 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
-		"node_modules/espree/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
 		"node_modules/esprima": {
 			"version": "4.0.1",
 			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -1412,6 +1545,34 @@
 			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
 			"dev": true
 		},
+		"node_modules/fast-glob": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+			"dev": true,
+			"dependencies": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.4"
+			},
+			"engines": {
+				"node": ">=8.6.0"
+			}
+		},
+		"node_modules/fast-glob/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"dev": true,
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
 		"node_modules/fast-json-stable-stringify": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1421,7 +1582,7 @@
 		"node_modules/fast-levenshtein": {
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 			"dev": true
 		},
 		"node_modules/fastq": {
@@ -1560,10 +1721,25 @@
 			"dev": true
 		},
 		"node_modules/function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-			"dev": true
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+			"dev": true,
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"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==",
+			"dev": true,
+			"dependencies": {
+				"resolve-pkg-maps": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+			}
 		},
 		"node_modules/getobject": {
 			"version": "1.0.0",
@@ -1646,9 +1822,9 @@
 			}
 		},
 		"node_modules/globals": {
-			"version": "13.20.0",
-			"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-			"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+			"version": "13.24.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
 			"dev": true,
 			"dependencies": {
 				"type-fest": "^0.20.2"
@@ -1660,10 +1836,30 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/grapheme-splitter": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-			"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+		"node_modules/globby": {
+			"version": "11.1.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+			"dev": true,
+			"dependencies": {
+				"array-union": "^2.1.0",
+				"dir-glob": "^3.0.1",
+				"fast-glob": "^3.2.9",
+				"ignore": "^5.2.0",
+				"merge2": "^1.4.1",
+				"slash": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/graphemer": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
 			"dev": true
 		},
 		"node_modules/grunt": {
@@ -1694,9 +1890,9 @@
 			}
 		},
 		"node_modules/grunt-banana-checker": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz",
-			"integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==",
+			"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,
 			"bin": {
 				"banana-checker": "src/cli.js"
@@ -1738,13 +1934,13 @@
 			}
 		},
 		"node_modules/grunt-eslint": {
-			"version": "24.0.1",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
-			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
+			"version": "24.3.0",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.3.0.tgz",
+			"integrity": "sha512-dUPiRgX8fhmh4uwTAn9xrzg7HV5j5DhGmZZGJdHfjy/AN9G4jD+5IjfbcAJ209JcIG8m4B7xz3crIhuDSm3siQ==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2",
-				"eslint": "^8.0.1"
+				"eslint": "^8.44.0"
 			},
 			"engines": {
 				"node": ">=12"
@@ -1811,18 +2007,6 @@
 				"node": ">=10"
 			}
 		},
-		"node_modules/has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"dependencies": {
-				"function-bind": "^1.1.1"
-			},
-			"engines": {
-				"node": ">= 0.4.0"
-			}
-		},
 		"node_modules/has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -1832,6 +2016,18 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/hasown": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+			"dev": true,
+			"dependencies": {
+				"function-bind": "^1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/homedir-polyfill": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -1872,9 +2068,9 @@
 			}
 		},
 		"node_modules/ignore": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-			"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+			"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
 			"dev": true,
 			"engines": {
 				"node": ">= 4"
@@ -1977,12 +2173,12 @@
 			}
 		},
 		"node_modules/is-core-module": {
-			"version": "2.9.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-			"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+			"version": "2.13.1",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+			"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
 			"dev": true,
 			"dependencies": {
-				"has": "^1.0.3"
+				"hasown": "^2.0.0"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/ljharb"
@@ -2087,16 +2283,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/js-sdsl": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
-			"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
-			"dev": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/js-sdsl"
-			}
-		},
 		"node_modules/js-tokens": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -2117,14 +2303,26 @@
 			}
 		},
 		"node_modules/jsdoc-type-pratt-parser": {
-			"version": "2.2.5",
-			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
-			"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+			"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
 			"dev": true,
 			"engines": {
 				"node": ">=12.0.0"
 			}
 		},
+		"node_modules/jsesc": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+			"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+			"dev": true,
+			"bin": {
+				"jsesc": "bin/jsesc"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
 		"node_modules/json-parse-even-better-errors": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -2229,7 +2427,7 @@
 		"node_modules/lodash.memoize": {
 			"version": "4.1.2",
 			"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-			"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+			"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
 			"dev": true
 		},
 		"node_modules/lodash.merge": {
@@ -2271,6 +2469,15 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 8"
+			}
+		},
 		"node_modules/micromatch": {
 			"version": "4.0.5",
 			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -2318,9 +2525,9 @@
 			"dev": true
 		},
 		"node_modules/node-releases": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
-			"integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
+			"version": "2.0.14",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+			"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
 			"dev": true
 		},
 		"node_modules/nopt": {
@@ -2348,9 +2555,9 @@
 			}
 		},
 		"node_modules/normalize-package-data/node_modules/semver": {
-			"version": "5.7.1",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-			"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+			"version": "5.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+			"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
 			"dev": true,
 			"bin": {
 				"semver": "bin/semver"
@@ -2418,17 +2625,17 @@
 			}
 		},
 		"node_modules/optionator": {
-			"version": "0.9.1",
-			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-			"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+			"version": "0.9.3",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+			"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
 			"dev": true,
 			"dependencies": {
+				"@aashutoshrathi/word-wrap": "^1.2.3",
 				"deep-is": "^0.1.3",
 				"fast-levenshtein": "^2.0.6",
 				"levn": "^0.4.1",
 				"prelude-ls": "^1.2.1",
-				"type-check": "^0.4.0",
-				"word-wrap": "^1.2.3"
+				"type-check": "^0.4.0"
 			},
 			"engines": {
 				"node": ">= 0.8.0"
@@ -2608,6 +2815,15 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -2636,9 +2852,9 @@
 			}
 		},
 		"node_modules/postcss-selector-parser": {
-			"version": "6.0.12",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
-			"integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+			"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==",
 			"dev": true,
 			"dependencies": {
 				"cssesc": "^3.0.0",
@@ -2658,9 +2874,9 @@
 			}
 		},
 		"node_modules/punycode": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-			"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 			"dev": true,
 			"engines": {
 				"node": ">=6"
@@ -2686,10 +2902,10 @@
 				}
 			]
 		},
-		"node_modules/ramda": {
-			"version": "0.27.2",
-			"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
-			"integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+		"node_modules/rambda": {
+			"version": "7.5.0",
+			"resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+			"integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
 			"dev": true
 		},
 		"node_modules/read-pkg": {
@@ -2815,16 +3031,25 @@
 				"regexp-tree": "bin/regexp-tree"
 			}
 		},
-		"node_modules/regexpp": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+		"node_modules/regjsparser": {
+			"version": "0.10.0",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+			"integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
 			"dev": true,
-			"engines": {
-				"node": ">=8"
+			"dependencies": {
+				"jsesc": "~0.5.0"
 			},
-			"funding": {
-				"url": "https://github.com/sponsors/mysticatea"
+			"bin": {
+				"regjsparser": "bin/parser"
+			}
+		},
+		"node_modules/regjsparser/node_modules/jsesc": {
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+			"integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+			"dev": true,
+			"bin": {
+				"jsesc": "bin/jsesc"
 			}
 		},
 		"node_modules/requireindex": {
@@ -2837,12 +3062,12 @@
 			}
 		},
 		"node_modules/resolve": {
-			"version": "1.22.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-			"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+			"version": "1.22.8",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 			"dev": true,
 			"dependencies": {
-				"is-core-module": "^2.8.1",
+				"is-core-module": "^2.13.0",
 				"path-parse": "^1.0.7",
 				"supports-preserve-symlinks-flag": "^1.0.0"
 			},
@@ -2875,6 +3100,15 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/resolve-pkg-maps": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+			"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+			"dev": true,
+			"funding": {
+				"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+			}
+		},
 		"node_modules/reusify": {
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -2936,9 +3170,9 @@
 			"dev": true
 		},
 		"node_modules/semver": {
-			"version": "7.3.5",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+			"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,
 			"dependencies": {
 				"lru-cache": "^6.0.0"
@@ -2971,6 +3205,15 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/spdx-correct": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -2982,9 +3225,9 @@
 			}
 		},
 		"node_modules/spdx-exceptions": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-			"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+			"version": "2.5.0",
+			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+			"integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
 			"dev": true
 		},
 		"node_modules/spdx-expression-parse": {
@@ -2998,9 +3241,9 @@
 			}
 		},
 		"node_modules/spdx-license-ids": {
-			"version": "3.0.13",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-			"integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+			"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==",
 			"dev": true
 		},
 		"node_modules/sprintf-js": {
@@ -3087,6 +3330,27 @@
 				"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==",
+			"dev": true,
+			"dependencies": {
+				"tslib": "^1.8.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			},
+			"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"
+			}
+		},
 		"node_modules/type-check": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3111,6 +3375,20 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/typescript": {
+			"version": "5.4.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+			"integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+			"dev": true,
+			"peer": true,
+			"bin": {
+				"tsc": "bin/tsc",
+				"tsserver": "bin/tsserver"
+			},
+			"engines": {
+				"node": ">=14.17"
+			}
+		},
 		"node_modules/unc-path-regex": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -3143,6 +3421,36 @@
 				"yarn": "*"
 			}
 		},
+		"node_modules/update-browserslist-db": {
+			"version": "1.0.13",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+			"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/browserslist"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"dependencies": {
+				"escalade": "^3.1.1",
+				"picocolors": "^1.0.0"
+			},
+			"bin": {
+				"update-browserslist-db": "cli.js"
+			},
+			"peerDependencies": {
+				"browserslist": ">= 4.21.0"
+			}
+		},
 		"node_modules/uri-js": {
 			"version": "4.4.1",
 			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3204,18 +3512,6 @@
 				"eslint": ">=6.0.0"
 			}
 		},
-		"node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
-			"version": "3.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
-			"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"url": "https://opencollective.com/eslint"
-			}
-		},
 		"node_modules/which": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3231,21 +3527,21 @@
 				"node": ">= 8"
 			}
 		},
-		"node_modules/word-wrap": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-			"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
 		"node_modules/wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 			"dev": true
 		},
+		"node_modules/xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			}
+		},
 		"node_modules/yallist": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -3253,35 +3549,32 @@
 			"dev": true
 		},
 		"node_modules/yaml": {
-			"version": "1.10.2",
-			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+			"integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
 			"dev": true,
+			"bin": {
+				"yaml": "bin.mjs"
+			},
 			"engines": {
-				"node": ">= 6"
+				"node": ">= 14"
 			}
 		},
 		"node_modules/yaml-eslint-parser": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
-			"integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz",
+			"integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.0.0",
 				"lodash": "^4.17.21",
-				"yaml": "^1.10.2"
+				"yaml": "^2.0.0"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			}
-		},
-		"node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-			"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ota-meshi"
 			}
 		},
 		"node_modules/yocto-queue": {
@@ -3298,30 +3591,38 @@
 		}
 	},
 	"dependencies": {
+		"@aashutoshrathi/word-wrap": {
+			"version": "1.2.6",
+			"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+			"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+			"dev": true
+		},
 		"@babel/code-frame": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
-			"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
 			"dev": true,
 			"requires": {
-				"@babel/highlight": "^7.18.6"
+				"@babel/highlight": "^7.24.2",
+				"picocolors": "^1.0.0"
 			}
 		},
 		"@babel/helper-validator-identifier": {
-			"version": "7.19.1",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+			"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==",
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-			"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+			"version": "7.24.2",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.18.6",
-				"chalk": "^2.0.0",
-				"js-tokens": "^4.0.0"
+				"@babel/helper-validator-identifier": "^7.22.20",
+				"chalk": "^2.4.2",
+				"js-tokens": "^4.0.0",
+				"picocolors": "^1.0.0"
 			},
 			"dependencies": {
 				"chalk": {
@@ -3344,48 +3645,40 @@
 			}
 		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.23.6",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
-			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
+			"version": "0.37.1",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz",
+			"integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==",
 			"dev": true,
 			"requires": {
 				"comment-parser": "1.3.1",
-				"esquery": "^1.4.0",
-				"jsdoc-type-pratt-parser": "~2.2.5"
+				"esquery": "^1.5.0",
+				"jsdoc-type-pratt-parser": "~4.0.0"
 			}
 		},
 		"@eslint-community/eslint-utils": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
-			"integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
 			}
 		},
 		"@eslint-community/regexpp": {
-			"version": "4.4.0",
-			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
-			"integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+			"version": "4.10.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
 			"dev": true
 		},
 		"@eslint/eslintrc": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
-			"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+			"version": "2.1.4",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
 			"dev": true,
 			"requires": {
 				"ajv": "^6.12.4",
 				"debug": "^4.3.2",
-				"espree": "^9.5.0",
+				"espree": "^9.6.0",
 				"globals": "^13.19.0",
 				"ignore": "^5.2.0",
 				"import-fresh": "^3.2.1",
@@ -3421,19 +3714,19 @@
 			}
 		},
 		"@eslint/js": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
-			"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
 			"dev": true
 		},
 		"@humanwhocodes/config-array": {
-			"version": "0.11.8",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-			"integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+			"version": "0.11.14",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
 			"dev": true,
 			"requires": {
-				"@humanwhocodes/object-schema": "^1.2.1",
-				"debug": "^4.1.1",
+				"@humanwhocodes/object-schema": "^2.0.2",
+				"debug": "^4.3.1",
 				"minimatch": "^3.0.5"
 			}
 		},
@@ -3444,15 +3737,15 @@
 			"dev": true
 		},
 		"@humanwhocodes/object-schema": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-			"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+			"integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
 			"dev": true
 		},
 		"@mdn/browser-compat-data": {
-			"version": "4.2.1",
-			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz",
-			"integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==",
+			"version": "5.5.17",
+			"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.17.tgz",
+			"integrity": "sha512-M4r4nllQiFvHzbZmx+W1WhrLiMNu4XZ+t3AzzmePQ2P9zaxov2xFmd8KrOSQ0NN2QoJ8BINWdSkVU4sAcDTMJw==",
 			"dev": true
 		},
 		"@nodelib/fs.scandir": {
@@ -3481,10 +3774,103 @@
 				"fastq": "^1.6.0"
 			}
 		},
+		"@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true
+		},
 		"@types/normalize-package-data": {
-			"version": "2.4.1",
-			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-			"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+			"version": "2.4.4",
+			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.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==",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.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==",
+					"dev": true,
+					"requires": {
+						"esrecurse": "^4.3.0",
+						"estraverse": "^4.1.1"
+					}
+				},
+				"estraverse": {
+					"version": "4.3.0",
+					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+					"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+					"dev": true
+				}
+			}
+		},
+		"@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==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/types": "5.62.0",
+				"eslint-visitor-keys": "^3.3.0"
+			}
+		},
+		"@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
 			"dev": true
 		},
 		"abbrev": {
@@ -3494,9 +3880,9 @@
 			"dev": true
 		},
 		"acorn": {
-			"version": "8.8.2",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-			"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+			"version": "8.11.3",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -3533,6 +3919,12 @@
 				"color-convert": "^1.9.0"
 			}
 		},
+		"are-docs-informative": {
+			"version": "0.0.2",
+			"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+			"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+			"dev": true
+		},
 		"argparse": {
 			"version": "1.0.10",
 			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -3562,21 +3954,19 @@
 			"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
 			"dev": true
 		},
+		"array-union": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+			"dev": true
+		},
 		"ast-metadata-inferer": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
-			"integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+			"version": "0.8.0",
+			"resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz",
+			"integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==",
 			"dev": true,
 			"requires": {
-				"@mdn/browser-compat-data": "^3.3.14"
-			},
-			"dependencies": {
-				"@mdn/browser-compat-data": {
-					"version": "3.3.14",
-					"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
-					"integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
-					"dev": true
-				}
+				"@mdn/browser-compat-data": "^5.2.34"
 			}
 		},
 		"async": {
@@ -3617,22 +4007,21 @@
 			}
 		},
 		"browserslist": {
-			"version": "4.20.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-			"integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+			"version": "4.23.0",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+			"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
 			"dev": true,
 			"requires": {
-				"caniuse-lite": "^1.0.30001332",
-				"electron-to-chromium": "^1.4.118",
-				"escalade": "^3.1.1",
-				"node-releases": "^2.0.3",
-				"picocolors": "^1.0.0"
+				"caniuse-lite": "^1.0.30001587",
+				"electron-to-chromium": "^1.4.668",
+				"node-releases": "^2.0.14",
+				"update-browserslist-db": "^1.0.13"
 			}
 		},
 		"browserslist-config-wikimedia": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
-			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"version": "0.5.1",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz",
+			"integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==",
 			"dev": true
 		},
 		"builtin-modules": {
@@ -3641,6 +4030,15 @@
 			"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
 			"dev": true
 		},
+		"builtins": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+			"integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+			"dev": true,
+			"requires": {
+				"semver": "^7.0.0"
+			}
+		},
 		"callsites": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -3648,9 +4046,9 @@
 			"dev": true
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001341",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz",
-			"integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==",
+			"version": "1.0.30001600",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+			"integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
 			"dev": true
 		},
 		"chalk": {
@@ -3705,9 +4103,9 @@
 			}
 		},
 		"ci-info": {
-			"version": "3.8.0",
-			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-			"integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+			"version": "3.9.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+			"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
 			"dev": true
 		},
 		"clean-regexp": {
@@ -3760,12 +4158,6 @@
 			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
 			"dev": true
 		},
-		"core-js": {
-			"version": "3.22.5",
-			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz",
-			"integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==",
-			"dev": true
-		},
 		"cross-spawn": {
 			"version": "7.0.3",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -3810,6 +4202,15 @@
 			"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
 			"dev": true
 		},
+		"dir-glob": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+			"dev": true,
+			"requires": {
+				"path-type": "^4.0.0"
+			}
+		},
 		"doctrine": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -3820,9 +4221,9 @@
 			}
 		},
 		"electron-to-chromium": {
-			"version": "1.4.137",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz",
-			"integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==",
+			"version": "1.4.719",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
+			"integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
 			"dev": true
 		},
 		"error-ex": {
@@ -3835,9 +4236,9 @@
 			}
 		},
 		"escalade": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+			"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
 			"dev": true
 		},
 		"escape-string-regexp": {
@@ -3847,27 +4248,28 @@
 			"dev": true
 		},
 		"eslint": {
-			"version": "8.36.0",
-			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
-			"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+			"version": "8.57.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
 			"dev": true,
 			"requires": {
 				"@eslint-community/eslint-utils": "^4.2.0",
-				"@eslint-community/regexpp": "^4.4.0",
-				"@eslint/eslintrc": "^2.0.1",
-				"@eslint/js": "8.36.0",
-				"@humanwhocodes/config-array": "^0.11.8",
+				"@eslint-community/regexpp": "^4.6.1",
+				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/js": "8.57.0",
+				"@humanwhocodes/config-array": "^0.11.14",
 				"@humanwhocodes/module-importer": "^1.0.1",
 				"@nodelib/fs.walk": "^1.2.8",
-				"ajv": "^6.10.0",
+				"@ungap/structured-clone": "^1.2.0",
+				"ajv": "^6.12.4",
 				"chalk": "^4.0.0",
 				"cross-spawn": "^7.0.2",
 				"debug": "^4.3.2",
 				"doctrine": "^3.0.0",
 				"escape-string-regexp": "^4.0.0",
-				"eslint-scope": "^7.1.1",
-				"eslint-visitor-keys": "^3.3.0",
-				"espree": "^9.5.0",
+				"eslint-scope": "^7.2.2",
+				"eslint-visitor-keys": "^3.4.3",
+				"espree": "^9.6.1",
 				"esquery": "^1.4.2",
 				"esutils": "^2.0.2",
 				"fast-deep-equal": "^3.1.3",
@@ -3875,22 +4277,19 @@
 				"find-up": "^5.0.0",
 				"glob-parent": "^6.0.2",
 				"globals": "^13.19.0",
-				"grapheme-splitter": "^1.0.4",
+				"graphemer": "^1.4.0",
 				"ignore": "^5.2.0",
-				"import-fresh": "^3.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-glob": "^4.0.0",
 				"is-path-inside": "^3.0.3",
-				"js-sdsl": "^4.1.4",
 				"js-yaml": "^4.1.0",
 				"json-stable-stringify-without-jsonify": "^1.0.1",
 				"levn": "^0.4.1",
 				"lodash.merge": "^4.6.2",
 				"minimatch": "^3.1.2",
 				"natural-compare": "^1.4.0",
-				"optionator": "^0.9.1",
+				"optionator": "^0.9.3",
 				"strip-ansi": "^6.0.1",
-				"strip-json-comments": "^3.1.0",
 				"text-table": "^0.2.0"
 			},
 			"dependencies": {
@@ -3900,12 +4299,6 @@
 					"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 					"dev": true
 				},
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				},
 				"js-yaml": {
 					"version": "4.1.0",
 					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3926,80 +4319,122 @@
 				}
 			}
 		},
+		"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==",
+			"dev": true,
+			"requires": {
+				"semver": "^7.5.4"
+			}
+		},
 		"eslint-config-wikimedia": {
-			"version": "0.25.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
-			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz",
+			"integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==",
 			"dev": true,
 			"requires": {
-				"browserslist-config-wikimedia": "^0.5.0",
-				"eslint": "^8.31.0",
-				"eslint-plugin-compat": "^4.0.2",
-				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "39.2.2",
+				"browserslist-config-wikimedia": "^0.5.1",
+				"eslint": "^8.53.0",
+				"eslint-plugin-compat": "^4.2.0",
+				"eslint-plugin-es-x": "^7.3.0",
+				"eslint-plugin-jest": "^27.6.0",
+				"eslint-plugin-jsdoc": "^42.0.0",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.5.0",
-				"eslint-plugin-mocha": "^9.0.0",
+				"eslint-plugin-mocha": "^10.2.0",
+				"eslint-plugin-n": "^16.0.1",
 				"eslint-plugin-no-jquery": "^2.7.0",
-				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-qunit": "^7.3.4",
 				"eslint-plugin-security": "^1.7.1",
-				"eslint-plugin-unicorn": "^42.0.0",
-				"eslint-plugin-vue": "^8.7.1",
+				"eslint-plugin-unicorn": "^47.0.0",
+				"eslint-plugin-vue": "^9.18.1",
 				"eslint-plugin-wdio": "^7.19.4",
-				"eslint-plugin-yml": "^0.14.0"
+				"eslint-plugin-yml": "^1.10.0"
+			},
+			"dependencies": {
+				"eslint-plugin-vue": {
+					"version": "9.24.0",
+					"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz",
+					"integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==",
+					"dev": true,
+					"requires": {
+						"@eslint-community/eslint-utils": "^4.4.0",
+						"globals": "^13.24.0",
+						"natural-compare": "^1.4.0",
+						"nth-check": "^2.1.1",
+						"postcss-selector-parser": "^6.0.15",
+						"semver": "^7.6.0",
+						"vue-eslint-parser": "^9.4.2",
+						"xml-name-validator": "^4.0.0"
+					}
+				},
+				"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==",
+					"dev": true,
+					"requires": {
+						"debug": "^4.3.4",
+						"eslint-scope": "^7.1.1",
+						"eslint-visitor-keys": "^3.3.0",
+						"espree": "^9.3.1",
+						"esquery": "^1.4.0",
+						"lodash": "^4.17.21",
+						"semver": "^7.3.6"
+					}
+				}
 			}
 		},
 		"eslint-plugin-compat": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
-			"integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
+			"integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==",
 			"dev": true,
 			"requires": {
-				"@mdn/browser-compat-data": "^4.1.5",
-				"ast-metadata-inferer": "^0.7.0",
-				"browserslist": "^4.16.8",
-				"caniuse-lite": "^1.0.30001304",
-				"core-js": "^3.16.2",
+				"@mdn/browser-compat-data": "^5.3.13",
+				"ast-metadata-inferer": "^0.8.0",
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001524",
 				"find-up": "^5.0.0",
-				"lodash.memoize": "4.1.2",
-				"semver": "7.3.5"
+				"lodash.memoize": "^4.1.2",
+				"semver": "^7.5.4"
 			}
 		},
 		"eslint-plugin-es-x": {
-			"version": "5.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz",
-			"integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==",
+			"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==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.1.2",
+				"@eslint-community/regexpp": "^4.6.0",
+				"eslint-compat-utils": "^0.5.0"
+			}
+		},
+		"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==",
 			"dev": true,
 			"requires": {
-				"eslint-utils": "^2.0.0 || ^3.0.0",
-				"regexpp": "^3.0.0"
+				"@typescript-eslint/utils": "^5.10.0"
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "39.2.2",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
-			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
+			"version": "42.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz",
+			"integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.23.1",
+				"@es-joy/jsdoccomment": "~0.37.0",
+				"are-docs-informative": "^0.0.2",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
-				"esquery": "^1.4.0",
-				"semver": "^7.3.7",
+				"esquery": "^1.5.0",
+				"semver": "^7.3.8",
 				"spdx-expression-parse": "^3.0.1"
-			},
-			"dependencies": {
-				"semver": {
-					"version": "7.3.8",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-					"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
-					"dev": true,
-					"requires": {
-						"lru-cache": "^6.0.0"
-					}
-				}
 			}
 		},
 		"eslint-plugin-json-es": {
@@ -4010,14 +4445,6 @@
 			"requires": {
 				"eslint-visitor-keys": "^3.3.0",
 				"espree": "^9.3.1"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-mediawiki": {
@@ -4031,29 +4458,43 @@
 			}
 		},
 		"eslint-plugin-mocha": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
-			"integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+			"version": "10.4.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.1.tgz",
+			"integrity": "sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==",
 			"dev": true,
 			"requires": {
 				"eslint-utils": "^3.0.0",
-				"ramda": "^0.27.1"
+				"globals": "^13.24.0",
+				"rambda": "^7.4.0"
+			}
+		},
+		"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==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"builtins": "^5.0.1",
+				"eslint-plugin-es-x": "^7.5.0",
+				"get-tsconfig": "^4.7.0",
+				"globals": "^13.24.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",
+				"semver": "^7.5.3"
 			},
 			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+				"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": {
-						"eslint-visitor-keys": "^2.0.0"
+						"brace-expansion": "^1.1.7"
 					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
 				}
 			}
 		},
@@ -4064,38 +4505,6 @@
 			"dev": true,
 			"requires": {}
 		},
-		"eslint-plugin-node": {
-			"version": "11.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
-			"integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
-			"dev": true,
-			"requires": {
-				"eslint-plugin-es": "^3.0.0",
-				"eslint-utils": "^2.0.0",
-				"ignore": "^5.1.1",
-				"minimatch": "^3.0.4",
-				"resolve": "^1.10.1",
-				"semver": "^6.1.0"
-			},
-			"dependencies": {
-				"eslint-plugin-es": {
-					"version": "3.0.1",
-					"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
-					"integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
-					"dev": true,
-					"requires": {
-						"eslint-utils": "^2.0.0",
-						"regexpp": "^3.0.0"
-					}
-				},
-				"semver": {
-					"version": "6.3.0",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-					"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-					"dev": true
-				}
-			}
-		},
 		"eslint-plugin-qunit": {
 			"version": "7.3.4",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz",
@@ -4104,23 +4513,6 @@
 			"requires": {
 				"eslint-utils": "^3.0.0",
 				"requireindex": "^1.2.0"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-security": {
@@ -4133,42 +4525,27 @@
 			}
 		},
 		"eslint-plugin-unicorn": {
-			"version": "42.0.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-			"integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+			"version": "47.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz",
+			"integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.15.7",
-				"ci-info": "^3.3.0",
+				"@babel/helper-validator-identifier": "^7.19.1",
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"ci-info": "^3.8.0",
 				"clean-regexp": "^1.0.0",
-				"eslint-utils": "^3.0.0",
-				"esquery": "^1.4.0",
+				"esquery": "^1.5.0",
 				"indent-string": "^4.0.0",
-				"is-builtin-module": "^3.1.0",
+				"is-builtin-module": "^3.2.1",
+				"jsesc": "^3.0.2",
 				"lodash": "^4.17.21",
 				"pluralize": "^8.0.0",
 				"read-pkg-up": "^7.0.1",
 				"regexp-tree": "^0.1.24",
+				"regjsparser": "^0.10.0",
 				"safe-regex": "^2.1.1",
-				"semver": "^7.3.5",
+				"semver": "^7.3.8",
 				"strip-indent": "^3.0.0"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-vue": {
@@ -4183,23 +4560,6 @@
 				"postcss-selector-parser": "^6.0.9",
 				"semver": "^7.3.5",
 				"vue-eslint-parser": "^8.0.1"
-			},
-			"dependencies": {
-				"eslint-utils": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-					"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-					"dev": true,
-					"requires": {
-						"eslint-visitor-keys": "^2.0.0"
-					}
-				},
-				"eslint-visitor-keys": {
-					"version": "2.1.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-wdio": {
@@ -4209,21 +4569,22 @@
 			"dev": true
 		},
 		"eslint-plugin-yml": {
-			"version": "0.14.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz",
-			"integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==",
+			"version": "1.13.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.13.2.tgz",
+			"integrity": "sha512-1i71VhmsG5UxE41rIJmJjhlTTxYy7upAY5Hqj8AdBc7rfJzRIZr3a2spuOS8+N7ZDCWsHAWY3J6lzQNQHDv6Uw==",
 			"dev": true,
 			"requires": {
 				"debug": "^4.3.2",
+				"eslint-compat-utils": "^0.5.0",
 				"lodash": "^4.17.21",
 				"natural-compare": "^1.4.0",
-				"yaml-eslint-parser": "^0.5.0"
+				"yaml-eslint-parser": "^1.2.1"
 			}
 		},
 		"eslint-scope": {
-			"version": "7.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-			"integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
 			"dev": true,
 			"requires": {
 				"esrecurse": "^4.3.0",
@@ -4231,37 +4592,37 @@
 			}
 		},
 		"eslint-utils": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-			"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+			"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
 			"dev": true,
 			"requires": {
-				"eslint-visitor-keys": "^1.1.0"
+				"eslint-visitor-keys": "^2.0.0"
+			},
+			"dependencies": {
+				"eslint-visitor-keys": {
+					"version": "2.1.0",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+					"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+					"dev": true
+				}
 			}
 		},
 		"eslint-visitor-keys": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-			"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
 			"dev": true
 		},
 		"espree": {
-			"version": "9.5.0",
-			"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
-			"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+			"version": "9.6.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
 			"dev": true,
 			"requires": {
-				"acorn": "^8.8.0",
+				"acorn": "^8.9.0",
 				"acorn-jsx": "^5.3.2",
-				"eslint-visitor-keys": "^3.3.0"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
+				"eslint-visitor-keys": "^3.4.1"
 			}
 		},
 		"esprima": {
@@ -4333,6 +4694,30 @@
 			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
 			"dev": true
 		},
+		"fast-glob": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+			"dev": true,
+			"requires": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.4"
+			},
+			"dependencies": {
+				"glob-parent": {
+					"version": "5.1.2",
+					"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+					"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+					"dev": true,
+					"requires": {
+						"is-glob": "^4.0.1"
+					}
+				}
+			}
+		},
 		"fast-json-stable-stringify": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4342,7 +4727,7 @@
 		"fast-levenshtein": {
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 			"dev": true
 		},
 		"fastq": {
@@ -4451,11 +4836,20 @@
 			"dev": true
 		},
 		"function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 			"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==",
+			"dev": true,
+			"requires": {
+				"resolve-pkg-maps": "^1.0.0"
+			}
+		},
 		"getobject": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz",
@@ -4521,18 +4915,32 @@
 			}
 		},
 		"globals": {
-			"version": "13.20.0",
-			"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-			"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+			"version": "13.24.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
 			"dev": true,
 			"requires": {
 				"type-fest": "^0.20.2"
 			}
 		},
-		"grapheme-splitter": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-			"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+		"globby": {
+			"version": "11.1.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+			"dev": true,
+			"requires": {
+				"array-union": "^2.1.0",
+				"dir-glob": "^3.0.1",
+				"fast-glob": "^3.2.9",
+				"ignore": "^5.2.0",
+				"merge2": "^1.4.1",
+				"slash": "^3.0.0"
+			}
+		},
+		"graphemer": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
 			"dev": true
 		},
 		"grunt": {
@@ -4557,9 +4965,9 @@
 			}
 		},
 		"grunt-banana-checker": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz",
-			"integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==",
+			"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
 		},
 		"grunt-cli": {
@@ -4588,13 +4996,13 @@
 			}
 		},
 		"grunt-eslint": {
-			"version": "24.0.1",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
-			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
+			"version": "24.3.0",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.3.0.tgz",
+			"integrity": "sha512-dUPiRgX8fhmh4uwTAn9xrzg7HV5j5DhGmZZGJdHfjy/AN9G4jD+5IjfbcAJ209JcIG8m4B7xz3crIhuDSm3siQ==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2",
-				"eslint": "^8.0.1"
+				"eslint": "^8.44.0"
 			}
 		},
 		"grunt-known-options": {
@@ -4640,21 +5048,21 @@
 				"which": "~2.0.2"
 			}
 		},
-		"has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"requires": {
-				"function-bind": "^1.1.1"
-			}
-		},
 		"has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 			"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
 			"dev": true
 		},
+		"hasown": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+			"dev": true,
+			"requires": {
+				"function-bind": "^1.1.2"
+			}
+		},
 		"homedir-polyfill": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -4686,9 +5094,9 @@
 			}
 		},
 		"ignore": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-			"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+			"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
 			"dev": true
 		},
 		"import-fresh": {
@@ -4767,12 +5175,12 @@
 			}
 		},
 		"is-core-module": {
-			"version": "2.9.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-			"integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+			"version": "2.13.1",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+			"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
 			"dev": true,
 			"requires": {
-				"has": "^1.0.3"
+				"hasown": "^2.0.0"
 			}
 		},
 		"is-extglob": {
@@ -4847,12 +5255,6 @@
 			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
 			"dev": true
 		},
-		"js-sdsl": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
-			"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
-			"dev": true
-		},
 		"js-tokens": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4870,9 +5272,15 @@
 			}
 		},
 		"jsdoc-type-pratt-parser": {
-			"version": "2.2.5",
-			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
-			"integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+			"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+			"dev": true
+		},
+		"jsesc": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+			"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
 			"dev": true
 		},
 		"json-parse-even-better-errors": {
@@ -4963,7 +5371,7 @@
 		"lodash.memoize": {
 			"version": "4.1.2",
 			"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-			"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+			"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
 			"dev": true
 		},
 		"lodash.merge": {
@@ -4996,6 +5404,12 @@
 			"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
 			"dev": true
 		},
+		"merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"dev": true
+		},
 		"micromatch": {
 			"version": "4.0.5",
 			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -5034,9 +5448,9 @@
 			"dev": true
 		},
 		"node-releases": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
-			"integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
+			"version": "2.0.14",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+			"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
 			"dev": true
 		},
 		"nopt": {
@@ -5061,9 +5475,9 @@
 			},
 			"dependencies": {
 				"semver": {
-					"version": "5.7.1",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-					"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+					"version": "5.7.2",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+					"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
 					"dev": true
 				}
 			}
@@ -5118,17 +5532,17 @@
 			}
 		},
 		"optionator": {
-			"version": "0.9.1",
-			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-			"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+			"version": "0.9.3",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+			"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
 			"dev": true,
 			"requires": {
+				"@aashutoshrathi/word-wrap": "^1.2.3",
 				"deep-is": "^0.1.3",
 				"fast-levenshtein": "^2.0.6",
 				"levn": "^0.4.1",
 				"prelude-ls": "^1.2.1",
-				"type-check": "^0.4.0",
-				"word-wrap": "^1.2.3"
+				"type-check": "^0.4.0"
 			}
 		},
 		"os-homedir": {
@@ -5254,6 +5668,12 @@
 			"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
 			"dev": true
 		},
+		"path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true
+		},
 		"picocolors": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -5273,9 +5693,9 @@
 			"dev": true
 		},
 		"postcss-selector-parser": {
-			"version": "6.0.12",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
-			"integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+			"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==",
 			"dev": true,
 			"requires": {
 				"cssesc": "^3.0.0",
@@ -5289,9 +5709,9 @@
 			"dev": true
 		},
 		"punycode": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-			"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 			"dev": true
 		},
 		"queue-microtask": {
@@ -5300,10 +5720,10 @@
 			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
 			"dev": true
 		},
-		"ramda": {
-			"version": "0.27.2",
-			"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
-			"integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+		"rambda": {
+			"version": "7.5.0",
+			"resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+			"integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
 			"dev": true
 		},
 		"read-pkg": {
@@ -5397,11 +5817,22 @@
 			"integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
 			"dev": true
 		},
-		"regexpp": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-			"dev": true
+		"regjsparser": {
+			"version": "0.10.0",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+			"integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
+			"dev": true,
+			"requires": {
+				"jsesc": "~0.5.0"
+			},
+			"dependencies": {
+				"jsesc": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+					"integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+					"dev": true
+				}
+			}
 		},
 		"requireindex": {
 			"version": "1.2.0",
@@ -5410,12 +5841,12 @@
 			"dev": true
 		},
 		"resolve": {
-			"version": "1.22.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-			"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+			"version": "1.22.8",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 			"dev": true,
 			"requires": {
-				"is-core-module": "^2.8.1",
+				"is-core-module": "^2.13.0",
 				"path-parse": "^1.0.7",
 				"supports-preserve-symlinks-flag": "^1.0.0"
 			}
@@ -5436,6 +5867,12 @@
 			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
 			"dev": true
 		},
+		"resolve-pkg-maps": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+			"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+			"dev": true
+		},
 		"reusify": {
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -5476,9 +5913,9 @@
 			"dev": true
 		},
 		"semver": {
-			"version": "7.3.5",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+			"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"
@@ -5499,6 +5936,12 @@
 			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 			"dev": true
 		},
+		"slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true
+		},
 		"spdx-correct": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -5510,9 +5953,9 @@
 			}
 		},
 		"spdx-exceptions": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-			"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+			"version": "2.5.0",
+			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+			"integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
 			"dev": true
 		},
 		"spdx-expression-parse": {
@@ -5526,9 +5969,9 @@
 			}
 		},
 		"spdx-license-ids": {
-			"version": "3.0.13",
-			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-			"integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+			"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==",
 			"dev": true
 		},
 		"sprintf-js": {
@@ -5591,6 +6034,21 @@
 				"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==",
+			"dev": true,
+			"requires": {
+				"tslib": "^1.8.1"
+			}
+		},
 		"type-check": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5606,6 +6064,13 @@
 			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
 			"dev": true
 		},
+		"typescript": {
+			"version": "5.4.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+			"integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+			"dev": true,
+			"peer": true
+		},
 		"unc-path-regex": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -5628,6 +6093,16 @@
 			"integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
 			"dev": true
 		},
+		"update-browserslist-db": {
+			"version": "1.0.13",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+			"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+			"dev": true,
+			"requires": {
+				"escalade": "^3.1.1",
+				"picocolors": "^1.0.0"
+			}
+		},
 		"uri-js": {
 			"version": "4.4.1",
 			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -5675,14 +6150,6 @@
 				"esquery": "^1.4.0",
 				"lodash": "^4.17.21",
 				"semver": "^7.3.5"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.4.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
-					"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
-					"dev": true
-				}
 			}
 		},
 		"which": {
@@ -5694,18 +6161,18 @@
 				"isexe": "^2.0.0"
 			}
 		},
-		"word-wrap": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-			"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-			"dev": true
-		},
 		"wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 			"dev": true
 		},
+		"xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true
+		},
 		"yallist": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -5713,28 +6180,20 @@
 			"dev": true
 		},
 		"yaml": {
-			"version": "1.10.2",
-			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+			"integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
 			"dev": true
 		},
 		"yaml-eslint-parser": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
-			"integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz",
+			"integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.0.0",
 				"lodash": "^4.17.21",
-				"yaml": "^1.10.2"
-			},
-			"dependencies": {
-				"eslint-visitor-keys": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-					"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-					"dev": true
-				}
+				"yaml": "^2.0.0"
 			}
 		},
 		"yocto-queue": {
diff --git a/package.json b/package.json
index 888ac1c..07d09e6 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.25.0",
+		"eslint-config-wikimedia": "0.26.0",
 		"grunt": "1.6.1",
-		"grunt-banana-checker": "0.11.0",
-		"grunt-eslint": "24.0.1"
+		"grunt-banana-checker": "0.11.1",
+		"grunt-eslint": "24.3.0"
 	}
 }
diff --git a/specials/PF_CreateForm.php b/specials/PF_CreateForm.php
index d7ed52f..d46c5da 100644
--- a/specials/PF_CreateForm.php
+++ b/specials/PF_CreateForm.php
@@ -78,7 +78,7 @@ class PFCreateForm extends SpecialPage {
 			# ignore variables that are not of the right form
 			if ( strpos( $var, "_" ) != false ) {
 				# get the template declarations and work from there
-				list( $action, $id ) = explode( "_", $var, 2 );
+				[ $action, $id ] = explode( "_", $var, 2 );
 				if ( $action == "template" ) {
 					// If the button was pressed to remove
 					// this template, just don't add it to
diff --git a/specials/PF_CreateTemplate.php b/specials/PF_CreateTemplate.php
index cdb94c9..5151304 100644
--- a/specials/PF_CreateTemplate.php
+++ b/specials/PF_CreateTemplate.php
@@ -328,7 +328,7 @@ END;
 				if ( count( $var_elements ) != 2 ) {
 					continue;
 				}
-				list( $field_field, $id ) = $var_elements;
+				[ $field_field, $id ] = $var_elements;
 				if ( $field_field == 'name' && $id != 'starter' ) {
 					$field = PFTemplateField::create(
 						$val,
diff --git a/specials/PF_RunQuery.php b/specials/PF_RunQuery.php
index f3a0bc3..b62101f 100644
--- a/specials/PF_RunQuery.php
+++ b/specials/PF_RunQuery.php
@@ -87,7 +87,7 @@ class PFRunQuery extends IncludableSpecialPage {
 		}
 
 		$form_context = $embedded ? PFFormPrinter::CONTEXT_EMBEDDED_QUERY : PFFormPrinter::CONTEXT_QUERY;
-		list( $form_text, $data_text, $form_page_title ) =
+		[ $form_text, $data_text, $form_page_title ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$form_definition, $form_submitted, false, $form_title->getArticleID(),
 				$content, null, null, $form_context, [], $user
diff --git a/specials/PF_UploadWindow.php b/specials/PF_UploadWindow.php
index ad2a7c5..ba2fb46 100644
--- a/specials/PF_UploadWindow.php
+++ b/specials/PF_UploadWindow.php
@@ -303,52 +303,52 @@ class PFUploadWindow extends UnlistedSpecialPage {
 			. '<ul class="warningbox">';
 		foreach ( $warnings as $warning => $args ) {
 				// Unlike the other warnings, this one can be worked around.
-				if ( $warning == 'badfilename' ) {
-					$this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
-				}
+			if ( $warning == 'badfilename' ) {
+				$this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
+			}
 
-				if ( $warning == 'exists' ) {
-					$msg = self::getExistsWarning( $args );
-				} elseif ( $warning == 'no-change' ) {
-					$file = $args;
-					$filename = $file->getTitle()->getPrefixedText();
-					$msg = "\t<li>" . $this->msg( 'fileexists-no-change', $filename )->parse() . "</li>\n";
-				} elseif ( $warning == 'duplicate-version' ) {
-					$file = $args[0];
-					$count = count( $args );
-					$filename = $file->getTitle()->getPrefixedText();
-					$message = $this->msg( 'fileexists-duplicate-version' )
-						->params( $filename )
-						->numParams( $count );
-					$msg = "\t<li>" . $message->parse() . "</li>\n";
-				} elseif ( $warning == 'was-deleted' ) {
-					# If the file existed before and was deleted, warn the user of this
-					$ltitle = SpecialPage::getTitleFor( 'Log' );
-					$llink = $linkRenderer->makeKnownLink(
-						$ltitle,
-						$this->msg( 'deletionlog' )->text(),
-						[],
-						[
-							'type' => 'delete',
-							'page' => Title::makeTitle( NS_FILE, $args )->getPrefixedText(),
-						]
-					);
-					$msg = "\t<li>" . $this->msg( 'filewasdeleted' )->rawParams( $llink )->parse() . "</li>\n";
-				} elseif ( $warning == 'duplicate' ) {
-					$msg = $this->getDupeWarning( $args );
-				} elseif ( $warning == 'duplicate-archive' ) {
-					$msg = "\t<li>" . $this->msg(
-						'file-deleted-duplicate',
-						[ Title::makeTitle( NS_FILE, $args )->getPrefixedText() ]
-					)->parse() . "</li>\n";
-				} else {
-					if ( is_bool( $args ) ) {
-						$args = [];
-					} elseif ( !is_array( $args ) ) {
-						$args = [ $args ];
-					}
-					$msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
+			if ( $warning == 'exists' ) {
+				$msg = self::getExistsWarning( $args );
+			} elseif ( $warning == 'no-change' ) {
+				$file = $args;
+				$filename = $file->getTitle()->getPrefixedText();
+				$msg = "\t<li>" . $this->msg( 'fileexists-no-change', $filename )->parse() . "</li>\n";
+			} elseif ( $warning == 'duplicate-version' ) {
+				$file = $args[0];
+				$count = count( $args );
+				$filename = $file->getTitle()->getPrefixedText();
+				$message = $this->msg( 'fileexists-duplicate-version' )
+					->params( $filename )
+					->numParams( $count );
+				$msg = "\t<li>" . $message->parse() . "</li>\n";
+			} elseif ( $warning == 'was-deleted' ) {
+				# If the file existed before and was deleted, warn the user of this
+				$ltitle = SpecialPage::getTitleFor( 'Log' );
+				$llink = $linkRenderer->makeKnownLink(
+					$ltitle,
+					$this->msg( 'deletionlog' )->text(),
+					[],
+					[
+						'type' => 'delete',
+						'page' => Title::makeTitle( NS_FILE, $args )->getPrefixedText(),
+					]
+				);
+				$msg = "\t<li>" . $this->msg( 'filewasdeleted' )->rawParams( $llink )->parse() . "</li>\n";
+			} elseif ( $warning == 'duplicate' ) {
+				$msg = $this->getDupeWarning( $args );
+			} elseif ( $warning == 'duplicate-archive' ) {
+				$msg = "\t<li>" . $this->msg(
+					'file-deleted-duplicate',
+					[ Title::makeTitle( NS_FILE, $args )->getPrefixedText() ]
+				)->parse() . "</li>\n";
+			} else {
+				if ( is_bool( $args ) ) {
+					$args = [];
+				} elseif ( !is_array( $args ) ) {
+					$args = [ $args ];
 				}
+				$msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
+			}
 				$warningHtml .= $msg;
 		}
 		$warningHtml .= "</ul>\n";
diff --git a/tests/phpunit/integration/includes/PFFormPrinterTest.php b/tests/phpunit/integration/includes/PFFormPrinterTest.php
index ce29f80..630be16 100644
--- a/tests/phpunit/integration/includes/PFFormPrinterTest.php
+++ b/tests/phpunit/integration/includes/PFFormPrinterTest.php
@@ -38,7 +38,7 @@ class PFFormPrinterTest extends MediaWikiIntegrationTestCase {
 
 		$wgOut->getContext()->setTitle( $this->getTitle() );
 
-		list( $form_text, $page_text, $form_page_title, $generated_page_name ) =
+		[ $form_text, $page_text, $form_page_title, $generated_page_name ] =
 			$wgPageFormsFormPrinter->formHTML(
 				$form_def = $setup['form_definition'],
 				$form_submitted = true,
@@ -134,11 +134,11 @@ class PFFormPrinterTest extends MediaWikiIntegrationTestCase {
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getDBkey' )
-			->will( $this->returnValue( 'Sometitle' ) );
+			->willReturn( 'Sometitle' );
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getNamespace' )
-			->will( $this->returnValue( PF_NS_FORM ) );
+			->willReturn( PF_NS_FORM );
 
 		return $mockTitle;
 	}
diff --git a/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php b/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
index 03335d0..b0d54de 100644
--- a/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
+++ b/tests/phpunit/integration/includes/forminputs/PFRadioButtonInputTest.php
@@ -367,7 +367,7 @@ class PFRadioButtonInputTest extends MediaWikiIntegrationTestCase {
 			if ( isset( $setup['form_definition'] ) ) {
 				// We have to specify a template name
 				$form_definition = "{{{for template|TestTemplate123}}}\n{$setup['form_definition']}\n{{{end template}}}\n{{{standard input|save}}}";
-				list( $form_text, $page_text, $form_page_title, $generated_page_name )
+				[ $form_text, $page_text, $form_page_title, $generated_page_name ]
 					= $wgPageFormsFormPrinter->formHTML(
 						$form_definition, true, false, null, null,
 						'TestStringForFormPageTitle', null,
@@ -652,11 +652,11 @@ class PFRadioButtonInputTest extends MediaWikiIntegrationTestCase {
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getDBkey' )
-			->will( $this->returnValue( 'Sometitle' ) );
+			->willReturn( 'Sometitle' );
 
 		$mockTitle->expects( $this->any() )
 			->method( 'getNamespace' )
-			->will( $this->returnValue( PF_NS_FORM ) );
+			->willReturn( PF_NS_FORM );
 
 		return $mockTitle;
 	}
-- 
2.39.2


--- end ---

composer dependencies

Dependencies
Development dependencies

npm dependencies

Development dependencies

Logs

Source code is licensed under the AGPL.