This run took 43 seconds.
From 24e9dd059c9077a03c3483c0e92baca57fba5fa7 Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Sun, 18 May 2025 16:21:42 +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: 45.0.0 → 47.0.0 * mediawiki/mediawiki-phan-config: 0.15.0 → 0.15.1 npm: * eslint-config-wikimedia: 0.28.2 → 0.29.1 The following rules are failing and were disabled: * no-jquery/no-done-fail Additional changes: * eslint: Replaced `wikimedia/client-es5` with `wikimedia/client`. Change-Id: I0011ffcbf7f64115e0e33262f987b86b19b20e70 --- .eslintrc.json | 5 +- Gruntfile.js | 2 +- TalkBelow.js | 162 +++++++++++++++++++++++----------------------- composer.json | 4 +- package-lock.json | 33 +++++----- package.json | 2 +- 6 files changed, 106 insertions(+), 102 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 67d20f5..0d4578a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "root": true, "extends": [ - "wikimedia/client-es5", + "wikimedia/client", "wikimedia/jquery", "wikimedia/mediawiki" ], @@ -11,6 +11,7 @@ "rules": { "max-len": "off", "one-var": "off", - "vars-on-top": "off" + "vars-on-top": "off", + "no-jquery/no-done-fail": "warn" } } diff --git a/Gruntfile.js b/Gruntfile.js index 9fb7f26..66b4408 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,6 @@ /* eslint-env node */ module.exports = function ( grunt ) { - var conf = grunt.file.readJSON( 'extension.json' ); + const conf = grunt.file.readJSON( 'extension.json' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); grunt.loadNpmTasks( 'grunt-eslint' ); diff --git a/TalkBelow.js b/TalkBelow.js index f490f0d..ce457f2 100644 --- a/TalkBelow.js +++ b/TalkBelow.js @@ -11,7 +11,7 @@ window.TalkBelow = { init: function () { // Only init when there's a talk section - var section = document.getElementById( 'talkbelow-section' ); + const section = document.getElementById( 'talkbelow-section' ); if ( !section ) { return; } @@ -27,7 +27,7 @@ window.TalkBelow = { * Add a reply button */ addReplyButton: function () { - var $comment = $( this ); + const $comment = $( this ); // Skip paragraphs followed by other paragraphs // so that only the last one shows the reply button @@ -37,7 +37,7 @@ window.TalkBelow = { } // Make the reply button - var replyButton = new OO.ui.ButtonInputWidget( { + const replyButton = new OO.ui.ButtonInputWidget( { flags: 'progressive', framed: false, label: mw.msg( 'talkbelow-reply' ), @@ -47,7 +47,7 @@ window.TalkBelow = { replyButton.on( 'click', TalkBelow.onReplyButtonClick, [ replyButton ] ); // Add to the DOM - var $replies = $comment.children( 'dl' ); + const $replies = $comment.children( 'dl' ); if ( $replies.length ) { $replies.before( ' ', replyButton.$element ); } else { @@ -72,7 +72,7 @@ window.TalkBelow = { } // Else get the talk wikitext and then add the reply form - TalkBelow.getTalkWikitext().done( function () { + TalkBelow.getTalkWikitext().done( () => { TalkBelow.addReplyForm( replyButton ); } ); }, @@ -85,38 +85,38 @@ window.TalkBelow = { addReplyForm: function ( replyButton ) { // In most cases, the relevant wikitext is that of the comment we're replying to - var $replyButton = replyButton.$element; - var $comment = $replyButton.closest( 'p, dd' ); - var relevantWikitext = TalkBelow.getRelevantWikitext( $comment ); + const $replyButton = replyButton.$element; + const $comment = $replyButton.closest( 'p, dd' ); + let relevantWikitext = TalkBelow.getRelevantWikitext( $comment ); // But if the comment already has replies // then the relevant wikitext is that of the last reply // because we need to add the new reply below the last one - var $replies = $comment.is( 'p' ) ? $comment.next( 'dl' ) : $comment.children( 'dl' ); + let $replies = $comment.is( 'p' ) ? $comment.next( 'dl' ) : $comment.children( 'dl' ); if ( $replies.length ) { - var $lastReply = $replies.children( 'dd' ).last(); + const $lastReply = $replies.children( 'dd' ).last(); relevantWikitext = TalkBelow.getRelevantWikitext( $lastReply ); } // If no relevant wikitext is found, fallback to regular edit if ( !relevantWikitext ) { - var $section = TalkBelow.getSection( $comment ); - var sectionNumber = $section ? 1 + $section.prevAll( 'h1, h2, h3, h4, h5, h6' ).length : 0; - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var editUrl = mw.util.getUrl( talk.getPrefixedText(), { action: 'edit', section: sectionNumber } ); + const $section = TalkBelow.getSection( $comment ); + const sectionNumber = $section ? 1 + $section.prevAll( 'h1, h2, h3, h4, h5, h6' ).length : 0; + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const editUrl = mw.util.getUrl( talk.getPrefixedText(), { action: 'edit', section: sectionNumber } ); window.location.href = editUrl; return; } // Make the reply form - var replyInput = new OO.ui.MultilineTextInputWidget( { name: 'reply', autosize: true, autofocus: true } ); - var replyLayout = new OO.ui.HorizontalLayout( { items: [ replyInput ] } ); - var publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); - var cancelButton = new OO.ui.ButtonInputWidget( { flags: 'destructive', framed: false, label: mw.msg( 'talkbelow-cancel' ) } ); - var buttonsLayout = new OO.ui.HorizontalLayout( { items: [ publishButton, cancelButton ] } ); - var form = new OO.ui.FormLayout( { items: [ replyLayout, buttonsLayout ] } ); - var $formWrapper = $( '<dd>' ).html( form.$element ); + const replyInput = new OO.ui.MultilineTextInputWidget( { name: 'reply', autosize: true, autofocus: true } ); + const replyLayout = new OO.ui.HorizontalLayout( { items: [ replyInput ] } ); + const publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); + const cancelButton = new OO.ui.ButtonInputWidget( { flags: 'destructive', framed: false, label: mw.msg( 'talkbelow-cancel' ) } ); + const buttonsLayout = new OO.ui.HorizontalLayout( { items: [ publishButton, cancelButton ] } ); + const form = new OO.ui.FormLayout( { items: [ replyLayout, buttonsLayout ] } ); + const $formWrapper = $( '<dd>' ).html( form.$element ); // Make the font-family monospace to suggest that [[wikitext]] is allowed replyInput.$element.css( 'font-family', 'monospace' ); @@ -137,7 +137,7 @@ window.TalkBelow = { publishButton.on( 'click', TalkBelow.onSubmitReply, [ $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ] ); // Handle a cancel - cancelButton.on( 'click', function () { + cancelButton.on( 'click', () => { $formWrapper.remove(); if ( $replies.children().length === 0 ) { $replies.remove(); @@ -159,8 +159,8 @@ window.TalkBelow = { onSubmitReply: function ( $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ) { // Check that the user wrote something - var $reply = $formWrapper.find( 'textarea[name="reply"]' ); - var reply = $reply.val(); + const $reply = $formWrapper.find( 'textarea[name="reply"]' ); + let reply = $reply.val(); if ( !reply ) { $reply.trigger( 'focus' ); return; @@ -172,9 +172,9 @@ window.TalkBelow = { cancelButton.setDisabled( true ); // Calculate the appropriate number of colons - var depth = $comment.parents( 'dl' ).length + 1; - var colons = ''; - for ( var i = 0; i < depth; i++ ) { + const depth = $comment.parents( 'dl' ).length + 1; + let colons = ''; + for ( let i = 0; i < depth; i++ ) { colons += ':'; } @@ -183,20 +183,20 @@ window.TalkBelow = { reply = reply.replace( /\n+/g, ' ' ); // Build the final wikitext of the reply - var replyWikitext = '\n' + colons + reply + ' ~~~~'; + const replyWikitext = '\n' + colons + reply + ' ~~~~'; // Submit the reply TalkBelow.talkWikitext = TalkBelow.talkWikitext.replace( relevantWikitext, relevantWikitext + replyWikitext ); - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { action: 'edit', title: talk.getPrefixedText(), text: TalkBelow.talkWikitext, summary: mw.msg( 'talkbelow-summary' ), tags: mw.config.get( 'wgTalkBelowChangeTag' ) }; - new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( function () { + new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => { TalkBelow.onSubmitReplySuccess( replyWikitext, replyButton, $formWrapper ); } ); }, @@ -209,9 +209,9 @@ window.TalkBelow = { * @param {Object} $formWrapper */ onSubmitReplySuccess: function ( replyWikitext, replyButton, $formWrapper ) { - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { action: 'parse', title: talk.getPrefixedText(), text: replyWikitext, @@ -220,10 +220,10 @@ window.TalkBelow = { prop: 'text', disablelimitreport: true }; - new mw.Api().get( params ).fail( TalkBelow.onError ).done( function ( data ) { - var text = data.parse.text; - var $html = $( text ); - var $reply = $html.find( 'dd' ).last(); + new mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => { + const text = data.parse.text; + const $html = $( text ); + const $reply = $html.find( 'dd' ).last(); $formWrapper.replaceWith( $reply ); replyButton.setDisabled( false ); TalkBelow.addReplyButton.call( $reply ); @@ -236,22 +236,22 @@ window.TalkBelow = { addNewTopicForm: function () { // Build the form - var titleInput = new OO.ui.TextInputWidget( { name: 'title', placeholder: mw.msg( 'talkbelow-title' ) } ); - var commentInput = new OO.ui.MultilineTextInputWidget( { name: 'comment', autosize: true, placeholder: mw.msg( 'talkbelow-comment' ) } ); - var publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); - var titleLayout = new OO.ui.HorizontalLayout( { items: [ titleInput ] } ); - var commentLayout = new OO.ui.HorizontalLayout( { items: [ commentInput ] } ); - var publishLayout = new OO.ui.HorizontalLayout( { items: [ publishButton ] } ); - var formLayout = new OO.ui.FormLayout( { items: [ titleLayout, commentLayout, publishLayout ] } ); - var $title = $( '<h2>' ).text( mw.msg( 'talkbelow-new-topic' ) ); - var $form = $( '<div>' ).attr( 'id', 'talkbelow-new-topic-form' ).append( $title, formLayout.$element ); + const titleInput = new OO.ui.TextInputWidget( { name: 'title', placeholder: mw.msg( 'talkbelow-title' ) } ); + const commentInput = new OO.ui.MultilineTextInputWidget( { name: 'comment', autosize: true, placeholder: mw.msg( 'talkbelow-comment' ) } ); + const publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); + const titleLayout = new OO.ui.HorizontalLayout( { items: [ titleInput ] } ); + const commentLayout = new OO.ui.HorizontalLayout( { items: [ commentInput ] } ); + const publishLayout = new OO.ui.HorizontalLayout( { items: [ publishButton ] } ); + const formLayout = new OO.ui.FormLayout( { items: [ titleLayout, commentLayout, publishLayout ] } ); + const $title = $( '<h2>' ).text( mw.msg( 'talkbelow-new-topic' ) ); + const $form = $( '<div>' ).attr( 'id', 'talkbelow-new-topic-form' ).append( $title, formLayout.$element ); // Make the font-family monospace to suggest that [[wikitext]] is allowed commentInput.$element.css( 'font-family', 'monospace' ); // Replace the "Add topic" button for the form - var addTopicButton = document.getElementById( 'talkbelow-add-topic-button' ); - var $addTopicButton = $( addTopicButton ); + const addTopicButton = document.getElementById( 'talkbelow-add-topic-button' ); + const $addTopicButton = $( addTopicButton ); $addTopicButton.replaceWith( $form ); // Handle submissions @@ -264,11 +264,11 @@ window.TalkBelow = { onSubmitNewTopic: function ( publishButton ) { // Get the data from the form - var $form = publishButton.$element.closest( '#talkbelow-new-topic-form' ); - var $title = $form.find( 'input[name="title"]' ); - var $comment = $form.find( 'textarea[name="comment"]' ); - var title = $title.val(); - var comment = $comment.val(); + const $form = publishButton.$element.closest( '#talkbelow-new-topic-form' ); + const $title = $form.find( 'input[name="title"]' ); + const $comment = $form.find( 'textarea[name="comment"]' ); + const title = $title.val(); + const comment = $comment.val(); // Do some basic validation if ( !title ) { @@ -285,10 +285,10 @@ window.TalkBelow = { publishButton.setDisabled( true ); // Submit the new topic - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var text = comment + ' ~~~~'; // Append the signature - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const text = comment + ' ~~~~'; // Append the signature + const params = { action: 'edit', title: talk.getPrefixedText(), section: 'new', @@ -296,7 +296,7 @@ window.TalkBelow = { text: text, tags: mw.config.get( 'wgTalkBelowChangeTag' ) }; - new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( function () { + new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => { TalkBelow.onSubmitNewTopicSuccess( talk, title, text, $form ); } ); }, @@ -310,7 +310,7 @@ window.TalkBelow = { * @param {Object} $form New topic form */ onSubmitNewTopicSuccess: function ( talk, title, text, $form ) { - var params = { + const params = { action: 'parse', title: talk.getPrefixedText(), section: 'new', @@ -321,11 +321,11 @@ window.TalkBelow = { pst: true, disablelimitreport: true }; - new mw.Api().get( params ).fail( TalkBelow.onError ).done( function ( data ) { + new mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => { // Remove the outer <div> - var div = data.parse.text; - var topic = $( div ).html(); - var $topic = $( topic ); + const div = data.parse.text; + const topic = $( div ).html(); + const $topic = $( topic ); // Replace the form with the new topic $form.replaceWith( $topic ); @@ -352,15 +352,15 @@ window.TalkBelow = { * @return {Object} Promise */ getTalkWikitext: function () { - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { page: talk.getPrefixedText(), action: 'parse', prop: 'wikitext', formatversion: 2 }; - return new mw.Api().get( params ).done( function ( data ) { + return new mw.Api().get( params ).done( ( data ) => { TalkBelow.talkWikitext = data.parse.wikitext; } ); }, @@ -383,7 +383,7 @@ window.TalkBelow = { */ getRelevantWikitext: function ( $comment ) { // The longest text node has the most chances of being unique - var text = TalkBelow.getLongestText( $comment ); + let text = TalkBelow.getLongestText( $comment ); // Some comments may not have text nodes at all if ( !text ) { @@ -394,9 +394,9 @@ window.TalkBelow = { text = text.replace( /\u00a0/g, ' ' ); // Replace nbsp sometimes added by the browser text = text.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' ); // Escape special characters - var regexp = new RegExp( '.*' + text + '.*', 'g' ); + const regexp = new RegExp( '.*' + text + '.*', 'g' ); - var matches = TalkBelow.talkWikitext.match( regexp ); + const matches = TalkBelow.talkWikitext.match( regexp ); // This may happen if the comments comes from a template if ( !matches ) { @@ -419,12 +419,12 @@ window.TalkBelow = { * @return {string} Text of the longest text node */ getLongestText: function ( $comment ) { - var text = ''; - var $textNodes = $comment.contents().filter( function () { + let text = ''; + const $textNodes = $comment.contents().filter( function () { return this.nodeType === 3; // Text node } ); $textNodes.each( function () { - var nodeText = $( this ).text().trim(); + const nodeText = $( this ).text().trim(); if ( nodeText.length > text.length ) { text = nodeText; } @@ -442,12 +442,12 @@ window.TalkBelow = { */ makeSummary: function ( summary, $comment, wikitext ) { if ( !summary ) { - var page = mw.config.get( 'talkbelow-page', 'mw:TalkBelow' ); + const page = mw.config.get( 'talkbelow-page', 'mw:TalkBelow' ); summary = wikitext ? mw.msg( 'talkbelow-summary-edit', page ) : mw.msg( 'talkbelow-summary-delete', page ); } - var $section = TalkBelow.getSection( $comment ); + const $section = TalkBelow.getSection( $comment ); if ( $section ) { - var section = $section.find( '.mw-headline' ).attr( 'id' ).replace( '/_/g', ' ' ); + const section = $section.find( '.mw-headline' ).attr( 'id' ).replace( '/_/g', ' ' ); summary = '/* ' + section + ' */ ' + summary; } summary += ' #talkbelow'; // For https://hashtags.wmcloud.org @@ -468,11 +468,11 @@ window.TalkBelow = { if ( $element.is( 'h1, h2, h3, h4, h5, h6' ) ) { return $element; } - var $previous = $element.prevAll( 'h1, h2, h3, h4, h5, h6' ).first(); + const $previous = $element.prevAll( 'h1, h2, h3, h4, h5, h6' ).first(); if ( $previous.length ) { return $previous; } - var $parent = $element.parent(); + const $parent = $element.parent(); return TalkBelow.getSection( $parent ); } }; diff --git a/composer.json b/composer.json index b0ddb62..a144259 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "require-dev": { - "mediawiki/mediawiki-codesniffer": "45.0.0", - "mediawiki/mediawiki-phan-config": "0.15.0", + "mediawiki/mediawiki-codesniffer": "47.0.0", + "mediawiki/mediawiki-phan-config": "0.15.1", "mediawiki/minus-x": "1.1.3", "php-parallel-lint/php-console-highlighter": "1.0.0", "php-parallel-lint/php-parallel-lint": "1.4.0" diff --git a/package-lock.json b/package-lock.json index eaae080..757f12b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "TalkBelow", "devDependencies": { - "eslint-config-wikimedia": "0.28.2", + "eslint-config-wikimedia": "0.29.1", "grunt": "1.6.1", "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0" @@ -946,9 +946,9 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", - "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz", + "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==", "dev": true, "dependencies": { "browserslist-config-wikimedia": "^0.7.0", @@ -961,13 +961,16 @@ "eslint-plugin-mediawiki": "^0.7.0", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-no-jquery": "^3.1.1", "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", "eslint-plugin-unicorn": "^53.0.0", "eslint-plugin-vue": "^9.26.0", "eslint-plugin-wdio": "^8.24.12", "eslint-plugin-yml": "^1.14.0" + }, + "engines": { + "node": ">=18 <23" } }, "node_modules/eslint-plugin-compat": { @@ -1165,9 +1168,9 @@ } }, "node_modules/eslint-plugin-no-jquery": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", - "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz", + "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==", "dev": true, "peerDependencies": { "eslint": ">=8.0.0" @@ -4600,9 +4603,9 @@ } }, "eslint-config-wikimedia": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", - "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz", + "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==", "dev": true, "requires": { "browserslist-config-wikimedia": "^0.7.0", @@ -4615,7 +4618,7 @@ "eslint-plugin-mediawiki": "^0.7.0", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-no-jquery": "^3.1.1", "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", "eslint-plugin-unicorn": "^53.0.0", @@ -4750,9 +4753,9 @@ } }, "eslint-plugin-no-jquery": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", - "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz", + "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index 8216636..f96cba2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "test": "grunt test" }, "devDependencies": { - "eslint-config-wikimedia": "0.28.2", + "eslint-config-wikimedia": "0.29.1", "grunt": "1.6.1", "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0" -- 2.39.5
$ date --- stdout --- Sun May 18 16:21:10 UTC 2025 --- end --- $ git clone file:///srv/git/mediawiki-extensions-TalkBelow.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 --- ce1fb17a0507b09f6ea1067fb2ad3b5cb115d222 refs/heads/master --- end --- $ /usr/bin/npm audit --json --- stdout --- { "auditReportVersion": 2, "vulnerabilities": {}, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 0, "total": 0 }, "dependencies": { "prod": 1, "dev": 328, "optional": 0, "peer": 1, "peerOptional": 0, "total": 328 } } } --- end --- $ /usr/bin/composer install --- stderr --- No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. Loading composer repositories with package information Updating dependencies Lock file operations: 38 installs, 0 updates, 0 removals - Locking composer/pcre (3.3.2) - Locking composer/semver (3.4.3) - Locking composer/spdx-licenses (1.5.9) - Locking composer/xdebug-handler (3.0.5) - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0) - Locking doctrine/deprecations (1.1.5) - Locking felixfbecker/advanced-json-rpc (v3.2.1) - Locking mediawiki/mediawiki-codesniffer (v45.0.0) - Locking mediawiki/mediawiki-phan-config (0.15.0) - Locking mediawiki/minus-x (1.1.3) - Locking mediawiki/phan-taint-check-plugin (6.1.0) - Locking microsoft/tolerant-php-parser (v0.1.2) - Locking netresearch/jsonmapper (v4.5.0) - Locking phan/phan (5.4.5) - Locking php-parallel-lint/php-console-color (v1.0.1) - Locking php-parallel-lint/php-console-highlighter (v1.0.0) - Locking php-parallel-lint/php-parallel-lint (v1.4.0) - Locking phpcsstandards/phpcsextra (1.2.1) - Locking phpcsstandards/phpcsutils (1.0.12) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.6.2) - Locking phpdocumentor/type-resolver (1.10.0) - Locking phpstan/phpdoc-parser (2.1.0) - Locking psr/container (2.0.2) - Locking psr/log (3.0.2) - Locking sabre/event (5.1.7) - Locking squizlabs/php_codesniffer (3.10.3) - Locking symfony/console (v7.2.6) - Locking symfony/deprecation-contracts (v3.5.1) - Locking symfony/polyfill-ctype (v1.32.0) - Locking symfony/polyfill-intl-grapheme (v1.32.0) - Locking symfony/polyfill-intl-normalizer (v1.32.0) - Locking symfony/polyfill-mbstring (v1.32.0) - Locking symfony/polyfill-php80 (v1.32.0) - Locking symfony/service-contracts (v3.5.1) - Locking symfony/string (v7.2.6) - Locking tysonandre/var_representation_polyfill (0.1.3) - Locking webmozart/assert (1.11.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 38 installs, 0 updates, 0 removals 0 [>---------------------------] 0 [->--------------------------] - Installing squizlabs/php_codesniffer (3.10.3): Extracting archive - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive - Installing composer/pcre (3.3.2): Extracting archive - Installing symfony/polyfill-php80 (v1.32.0): Extracting archive - Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive - Installing symfony/polyfill-mbstring (v1.32.0): Extracting archive - Installing composer/spdx-licenses (1.5.9): Extracting archive - Installing composer/semver (3.4.3): Extracting archive - Installing mediawiki/mediawiki-codesniffer (v45.0.0): Extracting archive - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive - Installing symfony/polyfill-intl-normalizer (v1.32.0): Extracting archive - Installing symfony/polyfill-intl-grapheme (v1.32.0): Extracting archive - Installing symfony/polyfill-ctype (v1.32.0): Extracting archive - Installing symfony/string (v7.2.6): Extracting archive - Installing symfony/deprecation-contracts (v3.5.1): Extracting archive - Installing psr/container (2.0.2): Extracting archive - Installing symfony/service-contracts (v3.5.1): Extracting archive - Installing symfony/console (v7.2.6): Extracting archive - Installing sabre/event (5.1.7): Extracting archive - Installing netresearch/jsonmapper (v4.5.0): Extracting archive - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive - Installing webmozart/assert (1.11.0): Extracting archive - Installing phpstan/phpdoc-parser (2.1.0): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing doctrine/deprecations (1.1.5): Extracting archive - Installing phpdocumentor/type-resolver (1.10.0): Extracting archive - Installing phpdocumentor/reflection-docblock (5.6.2): Extracting archive - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive - Installing psr/log (3.0.2): Extracting archive - Installing composer/xdebug-handler (3.0.5): Extracting archive - Installing phan/phan (5.4.5): Extracting archive - Installing mediawiki/phan-taint-check-plugin (6.1.0): Extracting archive - Installing mediawiki/mediawiki-phan-config (0.15.0): Extracting archive - Installing mediawiki/minus-x (1.1.3): Extracting archive - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive 0/36 [>---------------------------] 0% 20/36 [===============>------------] 55% 33/36 [=========================>--] 91% 36/36 [============================] 100% 1 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 --- PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils --- end --- Upgrading n:eslint-config-wikimedia from 0.28.2 -> 0.29.1 $ /usr/bin/npm install --- stdout --- added 328 packages, and audited 329 packages in 3s 57 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 329 packages in 865ms 57 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 extension.json i18n/lb.json i18n/mk.json i18n/de.json i18n/skr-arab.json i18n/crh-latn.json i18n/fa.json i18n/tr.json TalkBelow.js i18n/ms.json i18n/smn.json i18n/qqq.json package-lock.json i18n/he.json i18n/sl.json i18n/sr-ec.json i18n/es.json i18n/hy.json i18n/ar.json i18n/bn.json Gruntfile.js i18n/ia.json i18n/zh-hant.json i18n/xal.json i18n/nl.json i18n/fr.json i18n/ko.json package.json i18n/en.json composer.json i18n/it.json i18n/zh-hans.json --fix --- stdout --- /src/repo/TalkBelow.js 75:3 error Prefer .then to .done no-jquery/no-done-fail 199:3 error Prefer .then to .fail no-jquery/no-done-fail 199:3 error Prefer .then to .done no-jquery/no-done-fail 223:3 error Prefer .then to .fail no-jquery/no-done-fail 223:3 error Prefer .then to .done no-jquery/no-done-fail 299:3 error Prefer .then to .fail no-jquery/no-done-fail 299:3 error Prefer .then to .done no-jquery/no-done-fail 324:3 error Prefer .then to .fail no-jquery/no-done-fail 324:3 error Prefer .then to .done no-jquery/no-done-fail 363:10 error Prefer .then to .done no-jquery/no-done-fail 368:2 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check 457:2 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check ✖ 12 problems (10 errors, 2 warnings) --- end --- $ ./node_modules/.bin/eslint extension.json i18n/lb.json i18n/mk.json i18n/de.json i18n/skr-arab.json i18n/crh-latn.json i18n/fa.json i18n/tr.json TalkBelow.js i18n/ms.json i18n/smn.json i18n/qqq.json package-lock.json i18n/he.json i18n/sl.json i18n/sr-ec.json i18n/es.json i18n/hy.json i18n/ar.json i18n/bn.json Gruntfile.js i18n/ia.json i18n/zh-hant.json i18n/xal.json i18n/nl.json i18n/fr.json i18n/ko.json package.json i18n/en.json composer.json i18n/it.json i18n/zh-hans.json -f json --- stdout --- [{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/TalkBelow.js","messages":[{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":75,"column":3,"nodeType":"CallExpression","endLine":77,"endColumn":6},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .fail","line":199,"column":3,"nodeType":"CallExpression","endLine":199,"endColumn":69},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":199,"column":3,"nodeType":"CallExpression","endLine":201,"endColumn":6},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .fail","line":223,"column":3,"nodeType":"CallExpression","endLine":223,"endColumn":55},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":223,"column":3,"nodeType":"CallExpression","endLine":230,"endColumn":6},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .fail","line":299,"column":3,"nodeType":"CallExpression","endLine":299,"endColumn":69},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":299,"column":3,"nodeType":"CallExpression","endLine":301,"endColumn":6},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .fail","line":324,"column":3,"nodeType":"CallExpression","endLine":324,"endColumn":55},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":324,"column":3,"nodeType":"CallExpression","endLine":333,"endColumn":6},{"ruleId":"no-jquery/no-done-fail","severity":2,"message":"Prefer .then to .done","line":363,"column":10,"nodeType":"CallExpression","endLine":365,"endColumn":6},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":368,"column":2,"nodeType":"Block","endLine":383,"endColumn":5},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":457,"column":2,"nodeType":"Block","endLine":463,"endColumn":5}],"suppressedMessages":[],"errorCount":10,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"window.TalkBelow = {\n\n\t/**\n\t * Will hold the wikitext of the relevant talk page\n\t */\n\ttalkWikitext: '',\n\n\t/**\n\t * Initialization script\n\t */\n\tinit: function () {\n\n\t\t// Only init when there's a talk section\n\t\tconst section = document.getElementById( 'talkbelow-section' );\n\t\tif ( !section ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the form to add new topics\n\t\tTalkBelow.addNewTopicForm();\n\n\t\t// Select only paragraphs and replies\n\t\t$( 'p, dd', section ).each( TalkBelow.addReplyButton );\n\t},\n\n\t/**\n\t * Add a reply button\n\t */\n\taddReplyButton: function () {\n\t\tconst $comment = $( this );\n\n\t\t// Skip paragraphs followed by other paragraphs\n\t\t// so that only the last one shows the reply button\n\t\t// in multi-paragraph comments\n\t\tif ( $comment.next().is( 'p' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make the reply button\n\t\tconst replyButton = new OO.ui.ButtonInputWidget( {\n\t\t\tflags: 'progressive',\n\t\t\tframed: false,\n\t\t\tlabel: mw.msg( 'talkbelow-reply' ),\n\t\t\tclasses: [ 'talkbelow-button' ]\n\t\t} );\n\t\treplyButton.$element.css( 'margin', '-8px 0' );\n\t\treplyButton.on( 'click', TalkBelow.onReplyButtonClick, [ replyButton ] );\n\n\t\t// Add to the DOM\n\t\tconst $replies = $comment.children( 'dl' );\n\t\tif ( $replies.length ) {\n\t\t\t$replies.before( ' ', replyButton.$element );\n\t\t} else {\n\t\t\t$comment.append( ' ', replyButton.$element );\n\t\t}\n\t},\n\n\t/**\n\t * Handle a click on a reply button\n\t *\n\t * @param {Object} replyButton\n\t */\n\tonReplyButtonClick: function ( replyButton ) {\n\n\t\t// Disable the button to prevent further clicks\n\t\treplyButton.setDisabled( true );\n\n\t\t// If talkWikitext was already loaded by a previous click, just add the reply form\n\t\tif ( TalkBelow.talkWikitext ) {\n\t\t\tTalkBelow.addReplyForm( replyButton );\n\t\t\treturn;\n\t\t}\n\n\t\t// Else get the talk wikitext and then add the reply form\n\t\tTalkBelow.getTalkWikitext().done( () => {\n\t\t\tTalkBelow.addReplyForm( replyButton );\n\t\t} );\n\t},\n\n\t/**\n\t * Add a reply form\n\t *\n\t * @param {Object} replyButton\n\t */\n\taddReplyForm: function ( replyButton ) {\n\n\t\t// In most cases, the relevant wikitext is that of the comment we're replying to\n\t\tconst $replyButton = replyButton.$element;\n\t\tconst $comment = $replyButton.closest( 'p, dd' );\n\t\tlet relevantWikitext = TalkBelow.getRelevantWikitext( $comment );\n\n\t\t// But if the comment already has replies\n\t\t// then the relevant wikitext is that of the last reply\n\t\t// because we need to add the new reply below the last one\n\t\tlet $replies = $comment.is( 'p' ) ? $comment.next( 'dl' ) : $comment.children( 'dl' );\n\t\tif ( $replies.length ) {\n\t\t\tconst $lastReply = $replies.children( 'dd' ).last();\n\t\t\trelevantWikitext = TalkBelow.getRelevantWikitext( $lastReply );\n\t\t}\n\n\t\t// If no relevant wikitext is found, fallback to regular edit\n\t\tif ( !relevantWikitext ) {\n\t\t\tconst $section = TalkBelow.getSection( $comment );\n\t\t\tconst sectionNumber = $section ? 1 + $section.prevAll( 'h1, h2, h3, h4, h5, h6' ).length : 0;\n\t\t\tconst page = mw.config.get( 'wgPageName' );\n\t\t\tconst talk = new mw.Title( page ).getTalkPage();\n\t\t\tconst editUrl = mw.util.getUrl( talk.getPrefixedText(), { action: 'edit', section: sectionNumber } );\n\t\t\twindow.location.href = editUrl;\n\t\t\treturn;\n\t\t}\n\n\t\t// Make the reply form\n\t\tconst replyInput = new OO.ui.MultilineTextInputWidget( { name: 'reply', autosize: true, autofocus: true } );\n\t\tconst replyLayout = new OO.ui.HorizontalLayout( { items: [ replyInput ] } );\n\t\tconst publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } );\n\t\tconst cancelButton = new OO.ui.ButtonInputWidget( { flags: 'destructive', framed: false, label: mw.msg( 'talkbelow-cancel' ) } );\n\t\tconst buttonsLayout = new OO.ui.HorizontalLayout( { items: [ publishButton, cancelButton ] } );\n\t\tconst form = new OO.ui.FormLayout( { items: [ replyLayout, buttonsLayout ] } );\n\t\tconst $formWrapper = $( '<dd>' ).html( form.$element );\n\n\t\t// Make the font-family monospace to suggest that [[wikitext]] is allowed\n\t\treplyInput.$element.css( 'font-family', 'monospace' );\n\n\t\t// Add to the DOM\n\t\tif ( $replies.length ) {\n\t\t\t$replies.append( $formWrapper );\n\t\t} else {\n\t\t\t$replies = $( '<dl>' );\n\t\t\t$replies.append( $formWrapper );\n\t\t\t$comment.append( $replies );\n\t\t}\n\n\t\t// Focus the field because autofocus doesn't always work\n\t\t$formWrapper.find( 'textarea[name=\"reply\"]' ).trigger( 'focus' );\n\n\t\t// Handle a submission\n\t\tpublishButton.on( 'click', TalkBelow.onSubmitReply, [ $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ] );\n\n\t\t// Handle a cancel\n\t\tcancelButton.on( 'click', () => {\n\t\t\t$formWrapper.remove();\n\t\t\tif ( $replies.children().length === 0 ) {\n\t\t\t\t$replies.remove();\n\t\t\t}\n\t\t\treplyButton.setDisabled( false );\n\t\t} );\n\t},\n\n\t/**\n\t * Handle a reply form submission\n\t *\n\t * @param {Object} $comment\n\t * @param {Object} $formWrapper\n\t * @param {string} relevantWikitext\n\t * @param {Object} publishButton\n\t * @param {Object} cancelButton\n\t * @param {Object} replyButton\n\t */\n\tonSubmitReply: function ( $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ) {\n\n\t\t// Check that the user wrote something\n\t\tconst $reply = $formWrapper.find( 'textarea[name=\"reply\"]' );\n\t\tlet reply = $reply.val();\n\t\tif ( !reply ) {\n\t\t\t$reply.trigger( 'focus' );\n\t\t\treturn;\n\t\t}\n\n\t\t// Disable the buttons\n\t\t// to prevent further clicks and to signal the user that something's happening\n\t\tpublishButton.setDisabled( true );\n\t\tcancelButton.setDisabled( true );\n\n\t\t// Calculate the appropriate number of colons\n\t\tconst depth = $comment.parents( 'dl' ).length + 1;\n\t\tlet colons = '';\n\t\tfor ( let i = 0; i < depth; i++ ) {\n\t\t\tcolons += ':';\n\t\t}\n\n\t\t// Remove line breaks\n\t\treply = reply.trim();\n\t\treply = reply.replace( /\\n+/g, ' ' );\n\n\t\t// Build the final wikitext of the reply\n\t\tconst replyWikitext = '\\n' + colons + reply + ' ~~~~';\n\n\t\t// Submit the reply\n\t\tTalkBelow.talkWikitext = TalkBelow.talkWikitext.replace( relevantWikitext, relevantWikitext + replyWikitext );\n\t\tconst page = mw.config.get( 'wgPageName' );\n\t\tconst talk = new mw.Title( page ).getTalkPage();\n\t\tconst params = {\n\t\t\taction: 'edit',\n\t\t\ttitle: talk.getPrefixedText(),\n\t\t\ttext: TalkBelow.talkWikitext,\n\t\t\tsummary: mw.msg( 'talkbelow-summary' ),\n\t\t\ttags: mw.config.get( 'wgTalkBelowChangeTag' )\n\t\t};\n\t\tnew mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => {\n\t\t\tTalkBelow.onSubmitReplySuccess( replyWikitext, replyButton, $formWrapper );\n\t\t} );\n\t},\n\n\t/**\n\t * Handle a successful reply\n\t *\n\t * @param {string} replyWikitext\n\t * @param {Object} replyButton\n\t * @param {Object} $formWrapper\n\t */\n\tonSubmitReplySuccess: function ( replyWikitext, replyButton, $formWrapper ) {\n\t\tconst page = mw.config.get( 'wgPageName' );\n\t\tconst talk = new mw.Title( page ).getTalkPage();\n\t\tconst params = {\n\t\t\taction: 'parse',\n\t\t\ttitle: talk.getPrefixedText(),\n\t\t\ttext: replyWikitext,\n\t\t\tformatversion: 2,\n\t\t\tpst: true,\n\t\t\tprop: 'text',\n\t\t\tdisablelimitreport: true\n\t\t};\n\t\tnew mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => {\n\t\t\tconst text = data.parse.text;\n\t\t\tconst $html = $( text );\n\t\t\tconst $reply = $html.find( 'dd' ).last();\n\t\t\t$formWrapper.replaceWith( $reply );\n\t\t\treplyButton.setDisabled( false );\n\t\t\tTalkBelow.addReplyButton.call( $reply );\n\t\t} );\n\t},\n\n\t/**\n\t * Add the new topic form\n\t */\n\taddNewTopicForm: function () {\n\n\t\t// Build the form\n\t\tconst titleInput = new OO.ui.TextInputWidget( { name: 'title', placeholder: mw.msg( 'talkbelow-title' ) } );\n\t\tconst commentInput = new OO.ui.MultilineTextInputWidget( { name: 'comment', autosize: true, placeholder: mw.msg( 'talkbelow-comment' ) } );\n\t\tconst publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } );\n\t\tconst titleLayout = new OO.ui.HorizontalLayout( { items: [ titleInput ] } );\n\t\tconst commentLayout = new OO.ui.HorizontalLayout( { items: [ commentInput ] } );\n\t\tconst publishLayout = new OO.ui.HorizontalLayout( { items: [ publishButton ] } );\n\t\tconst formLayout = new OO.ui.FormLayout( { items: [ titleLayout, commentLayout, publishLayout ] } );\n\t\tconst $title = $( '<h2>' ).text( mw.msg( 'talkbelow-new-topic' ) );\n\t\tconst $form = $( '<div>' ).attr( 'id', 'talkbelow-new-topic-form' ).append( $title, formLayout.$element );\n\n\t\t// Make the font-family monospace to suggest that [[wikitext]] is allowed\n\t\tcommentInput.$element.css( 'font-family', 'monospace' );\n\n\t\t// Replace the \"Add topic\" button for the form\n\t\tconst addTopicButton = document.getElementById( 'talkbelow-add-topic-button' );\n\t\tconst $addTopicButton = $( addTopicButton );\n\t\t$addTopicButton.replaceWith( $form );\n\n\t\t// Handle submissions\n\t\tpublishButton.on( 'click', TalkBelow.onSubmitNewTopic, [ publishButton ] );\n\t},\n\n\t/**\n\t * @param {Object} publishButton\n\t */\n\tonSubmitNewTopic: function ( publishButton ) {\n\n\t\t// Get the data from the form\n\t\tconst $form = publishButton.$element.closest( '#talkbelow-new-topic-form' );\n\t\tconst $title = $form.find( 'input[name=\"title\"]' );\n\t\tconst $comment = $form.find( 'textarea[name=\"comment\"]' );\n\t\tconst title = $title.val();\n\t\tconst comment = $comment.val();\n\n\t\t// Do some basic validation\n\t\tif ( !title ) {\n\t\t\t$title.trigger( 'focus' );\n\t\t\treturn;\n\t\t}\n\t\tif ( !comment ) {\n\t\t\t$comment.trigger( 'focus' );\n\t\t\treturn;\n\t\t}\n\n\t\t// Disable the Publish button\n\t\t// to prevent further clicks and to signal the user that something is happening\n\t\tpublishButton.setDisabled( true );\n\n\t\t// Submit the new topic\n\t\tconst page = mw.config.get( 'wgPageName' );\n\t\tconst talk = new mw.Title( page ).getTalkPage();\n\t\tconst text = comment + ' ~~~~'; // Append the signature\n\t\tconst params = {\n\t\t\taction: 'edit',\n\t\t\ttitle: talk.getPrefixedText(),\n\t\t\tsection: 'new',\n\t\t\tsectiontitle: title,\n\t\t\ttext: text,\n\t\t\ttags: mw.config.get( 'wgTalkBelowChangeTag' )\n\t\t};\n\t\tnew mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => {\n\t\t\tTalkBelow.onSubmitNewTopicSuccess( talk, title, text, $form );\n\t\t} );\n\t},\n\n\t/**\n\t * Handle a successful new topic submission\n\t *\n\t * @param {string} talk Talk page where the new topic was posted\n\t * @param {string} title Title of the new topic\n\t * @param {string} text Text of the new topic\n\t * @param {Object} $form New topic form\n\t */\n\tonSubmitNewTopicSuccess: function ( talk, title, text, $form ) {\n\t\tconst params = {\n\t\t\taction: 'parse',\n\t\t\ttitle: talk.getPrefixedText(),\n\t\t\tsection: 'new',\n\t\t\tsectiontitle: title,\n\t\t\ttext: text,\n\t\t\tformatversion: 2,\n\t\t\tprop: 'text',\n\t\t\tpst: true,\n\t\t\tdisablelimitreport: true\n\t\t};\n\t\tnew mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => {\n\t\t\t// Remove the outer <div>\n\t\t\tconst div = data.parse.text;\n\t\t\tconst topic = $( div ).html();\n\t\t\tconst $topic = $( topic );\n\n\t\t\t// Replace the form with the new topic\n\t\t\t$form.replaceWith( $topic );\n\t\t\t$topic.find( 'p' ).each( TalkBelow.addReplyButton );\n\t\t} );\n\t},\n\n\t/**\n\t * Handle an API error\n\t *\n\t * @param {string} error\n\t * @param {Object} data\n\t */\n\tonError: function ( error, data ) {\n\t\tif ( 'error' in data && 'info' in data.error ) {\n\t\t\terror = data.error.info;\n\t\t}\n\t\tmw.notify( mw.msg( 'talkbelow-error', error ) );\n\t},\n\n\t/**\n\t * Helper method to get the wikitext of the relevant talk page\n\t *\n\t * @return {Object} Promise\n\t */\n\tgetTalkWikitext: function () {\n\t\tconst page = mw.config.get( 'wgPageName' );\n\t\tconst talk = new mw.Title( page ).getTalkPage();\n\t\tconst params = {\n\t\t\tpage: talk.getPrefixedText(),\n\t\t\taction: 'parse',\n\t\t\tprop: 'wikitext',\n\t\t\tformatversion: 2\n\t\t};\n\t\treturn new mw.Api().get( params ).done( ( data ) => {\n\t\t\tTalkBelow.talkWikitext = data.parse.wikitext;\n\t\t} );\n\t},\n\n\t/**\n\t * Helper method to get the relevant wikitext that corresponds to a given comment or reply\n\t *\n\t * This is actually the heart of the tool\n\t * It's a heuristic method to try to find the relevant wikitext\n\t * that corresponds to the comment being replied to\n\t * Since wikitext and HTML are different markups\n\t * the only place where they are the same is in plain text fragments\n\t * so we find the longest plain text fragment in the HTML\n\t * then we search for that same fragment in the wikitext\n\t * and return the entire line of wikitext containing that fragment\n\t * or null if anything goes wrong\n\t *\n\t * @param {Object} $comment jQuery object representing the DOM element being edited\n\t * @return {string|null} Wikitext of the comment being edited, or null if it can't be found\n\t */\n\tgetRelevantWikitext: function ( $comment ) {\n\t\t// The longest text node has the most chances of being unique\n\t\tlet text = TalkBelow.getLongestText( $comment );\n\n\t\t// Some comments may not have text nodes at all\n\t\tif ( !text ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Match all lines that contain the text\n\t\ttext = text.replace( /\\u00a0/g, ' ' ); // Replace nbsp sometimes added by the browser\n\t\ttext = text.replace( /[.*+?^${}()|[\\]\\\\]/g, '\\\\$&' ); // Escape special characters\n\n\t\tconst regexp = new RegExp( '.*' + text + '.*', 'g' );\n\n\t\tconst matches = TalkBelow.talkWikitext.match( regexp );\n\n\t\t// This may happen if the comments comes from a template\n\t\tif ( !matches ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This may happen if the longest text is very short and repeats somewhere else\n\t\tif ( matches.length > 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We got our relevant wikitext line\n\t\treturn matches[ 0 ];\n\t},\n\n\t/**\n\t * Helper method to get the text of the longest text node\n\t *\n\t * @param {Object} $comment\n\t * @return {string} Text of the longest text node\n\t */\n\tgetLongestText: function ( $comment ) {\n\t\tlet text = '';\n\t\tconst $textNodes = $comment.contents().filter( function () {\n\t\t\treturn this.nodeType === 3; // Text node\n\t\t} );\n\t\t$textNodes.each( function () {\n\t\t\tconst nodeText = $( this ).text().trim();\n\t\t\tif ( nodeText.length > text.length ) {\n\t\t\t\ttext = nodeText;\n\t\t\t}\n\t\t} );\n\t\treturn text;\n\t},\n\n\t/**\n\t * Helper method to build a helpful edit summary\n\t *\n\t * @param {string} summary\n\t * @param {Object} $comment\n\t * @param {string} wikitext\n\t * @return {string} Edit summary\n\t */\n\tmakeSummary: function ( summary, $comment, wikitext ) {\n\t\tif ( !summary ) {\n\t\t\tconst page = mw.config.get( 'talkbelow-page', 'mw:TalkBelow' );\n\t\t\tsummary = wikitext ? mw.msg( 'talkbelow-summary-edit', page ) : mw.msg( 'talkbelow-summary-delete', page );\n\t\t}\n\t\tconst $section = TalkBelow.getSection( $comment );\n\t\tif ( $section ) {\n\t\t\tconst section = $section.find( '.mw-headline' ).attr( 'id' ).replace( '/_/g', ' ' );\n\t\t\tsummary = '/* ' + section + ' */ ' + summary;\n\t\t}\n\t\tsummary += ' #talkbelow'; // For https://hashtags.wmcloud.org\n\t\treturn summary;\n\t},\n\n\t/**\n\t * Helper method to find the closest section\n\t * by traversing back and up the DOM tree\n\t *\n\t * @param {Object} $element Starting element\n\t * @return {Object} Closest section\n\t */\n\tgetSection: function ( $element ) {\n\t\tif ( $element.attr( 'id' ) === 'mw-content-text' ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( $element.is( 'h1, h2, h3, h4, h5, h6' ) ) {\n\t\t\treturn $element;\n\t\t}\n\t\tconst $previous = $element.prevAll( 'h1, h2, h3, h4, h5, h6' ).first();\n\t\tif ( $previous.length ) {\n\t\t\treturn $previous;\n\t\t}\n\t\tconst $parent = $element.parent();\n\t\treturn TalkBelow.getSection( $parent );\n\t}\n};\n\nTalkBelow.init();\n","usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/crh-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/smn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/xal.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}] --- end --- Disabling eslint rule 'no-jquery/no-done-fail' (broken in .eslintrc.json) on .eslintrc.json $ /usr/bin/npm ci --- stdout --- added 328 packages, and audited 329 packages in 4s 57 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/TalkBelow.js 75:3 warning Prefer .then to .done no-jquery/no-done-fail 199:3 warning Prefer .then to .fail no-jquery/no-done-fail 199:3 warning Prefer .then to .done no-jquery/no-done-fail 223:3 warning Prefer .then to .fail no-jquery/no-done-fail 223:3 warning Prefer .then to .done no-jquery/no-done-fail 299:3 warning Prefer .then to .fail no-jquery/no-done-fail 299:3 warning Prefer .then to .done no-jquery/no-done-fail 324:3 warning Prefer .then to .fail no-jquery/no-done-fail 324:3 warning Prefer .then to .done no-jquery/no-done-fail 363:10 warning Prefer .then to .done no-jquery/no-done-fail 368:2 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check 457:2 warning JSDoc @return declaration present but return expression not available in function jsdoc/require-returns-check ✖ 12 problems (0 errors, 12 warnings) Running "banana:TalkBelow" (banana) task >> 1 message directory checked. Done. --- end --- Upgrading c:mediawiki/mediawiki-codesniffer from 45.0.0 -> 47.0.0 Upgrading c:mediawiki/mediawiki-phan-config from 0.15.0 -> 0.15.1 $ /usr/bin/composer update --- stderr --- Loading composer repositories with package information Updating dependencies Lock file operations: 0 installs, 3 updates, 0 removals - Upgrading mediawiki/mediawiki-codesniffer (v45.0.0 => v47.0.0) - Upgrading mediawiki/mediawiki-phan-config (0.15.0 => 0.15.1) - Upgrading squizlabs/php_codesniffer (3.10.3 => 3.12.2) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 0 installs, 3 updates, 0 removals 0 [>---------------------------] 0 [->--------------------------] - Upgrading squizlabs/php_codesniffer (3.10.3 => 3.12.2): Extracting archive - Upgrading mediawiki/mediawiki-codesniffer (v45.0.0 => v47.0.0): Extracting archive - Upgrading mediawiki/mediawiki-phan-config (0.15.0 => 0.15.1): Extracting archive 0/3 [>---------------------------] 0% 2/3 [==================>---------] 66% 3/3 [============================] 100% Generating autoload files 16 packages you are using are looking for funding. Use the `composer fund` command to find out more! No security vulnerability advisories found --- stdout --- PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils --- end --- $ vendor/bin/phpcs --report=json --- stdout --- {"totals":{"errors":0,"warnings":0,"fixable":0},"files":{"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/TalkBelow.magic.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/TalkBelow.php":{"errors":0,"warnings":0,"messages":[]}}} --- end --- $ /usr/bin/composer install --- stderr --- Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating autoload files 16 packages you are using are looking for funding. Use the `composer fund` command to find out more! --- stdout --- --- end --- $ /usr/bin/composer test --- stderr --- > parallel-lint . --exclude vendor --exclude node_modules > phpcs -sp --cache > minus-x check . --- stdout --- PHP 8.2.28 | 10 parallel jobs ... 3/3 (100%) Checked 3 files in 0.1 seconds No syntax error found ... 3 / 3 (100%) Time: 157ms; Memory: 8MB MinusX ====== Processing /src/repo... ............................................ All good! --- 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": 328, "optional": 0, "peer": 1, "peerOptional": 0, "total": 328 } } } --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- build: Updating dependencies composer: * mediawiki/mediawiki-codesniffer: 45.0.0 → 47.0.0 * mediawiki/mediawiki-phan-config: 0.15.0 → 0.15.1 npm: * eslint-config-wikimedia: 0.28.2 → 0.29.1 The following rules are failing and were disabled: * no-jquery/no-done-fail Additional changes: * eslint: Replaced `wikimedia/client-es5` with `wikimedia/client`. $ git add . --- stdout --- --- end --- $ git commit -F /tmp/tmpxge27ym2 --- stdout --- [master 24e9dd0] build: Updating dependencies 6 files changed, 106 insertions(+), 102 deletions(-) --- end --- $ git format-patch HEAD~1 --stdout --- stdout --- From 24e9dd059c9077a03c3483c0e92baca57fba5fa7 Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Sun, 18 May 2025 16:21:42 +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: 45.0.0 → 47.0.0 * mediawiki/mediawiki-phan-config: 0.15.0 → 0.15.1 npm: * eslint-config-wikimedia: 0.28.2 → 0.29.1 The following rules are failing and were disabled: * no-jquery/no-done-fail Additional changes: * eslint: Replaced `wikimedia/client-es5` with `wikimedia/client`. Change-Id: I0011ffcbf7f64115e0e33262f987b86b19b20e70 --- .eslintrc.json | 5 +- Gruntfile.js | 2 +- TalkBelow.js | 162 +++++++++++++++++++++++----------------------- composer.json | 4 +- package-lock.json | 33 +++++----- package.json | 2 +- 6 files changed, 106 insertions(+), 102 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 67d20f5..0d4578a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "root": true, "extends": [ - "wikimedia/client-es5", + "wikimedia/client", "wikimedia/jquery", "wikimedia/mediawiki" ], @@ -11,6 +11,7 @@ "rules": { "max-len": "off", "one-var": "off", - "vars-on-top": "off" + "vars-on-top": "off", + "no-jquery/no-done-fail": "warn" } } diff --git a/Gruntfile.js b/Gruntfile.js index 9fb7f26..66b4408 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,6 @@ /* eslint-env node */ module.exports = function ( grunt ) { - var conf = grunt.file.readJSON( 'extension.json' ); + const conf = grunt.file.readJSON( 'extension.json' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); grunt.loadNpmTasks( 'grunt-eslint' ); diff --git a/TalkBelow.js b/TalkBelow.js index f490f0d..ce457f2 100644 --- a/TalkBelow.js +++ b/TalkBelow.js @@ -11,7 +11,7 @@ window.TalkBelow = { init: function () { // Only init when there's a talk section - var section = document.getElementById( 'talkbelow-section' ); + const section = document.getElementById( 'talkbelow-section' ); if ( !section ) { return; } @@ -27,7 +27,7 @@ window.TalkBelow = { * Add a reply button */ addReplyButton: function () { - var $comment = $( this ); + const $comment = $( this ); // Skip paragraphs followed by other paragraphs // so that only the last one shows the reply button @@ -37,7 +37,7 @@ window.TalkBelow = { } // Make the reply button - var replyButton = new OO.ui.ButtonInputWidget( { + const replyButton = new OO.ui.ButtonInputWidget( { flags: 'progressive', framed: false, label: mw.msg( 'talkbelow-reply' ), @@ -47,7 +47,7 @@ window.TalkBelow = { replyButton.on( 'click', TalkBelow.onReplyButtonClick, [ replyButton ] ); // Add to the DOM - var $replies = $comment.children( 'dl' ); + const $replies = $comment.children( 'dl' ); if ( $replies.length ) { $replies.before( ' ', replyButton.$element ); } else { @@ -72,7 +72,7 @@ window.TalkBelow = { } // Else get the talk wikitext and then add the reply form - TalkBelow.getTalkWikitext().done( function () { + TalkBelow.getTalkWikitext().done( () => { TalkBelow.addReplyForm( replyButton ); } ); }, @@ -85,38 +85,38 @@ window.TalkBelow = { addReplyForm: function ( replyButton ) { // In most cases, the relevant wikitext is that of the comment we're replying to - var $replyButton = replyButton.$element; - var $comment = $replyButton.closest( 'p, dd' ); - var relevantWikitext = TalkBelow.getRelevantWikitext( $comment ); + const $replyButton = replyButton.$element; + const $comment = $replyButton.closest( 'p, dd' ); + let relevantWikitext = TalkBelow.getRelevantWikitext( $comment ); // But if the comment already has replies // then the relevant wikitext is that of the last reply // because we need to add the new reply below the last one - var $replies = $comment.is( 'p' ) ? $comment.next( 'dl' ) : $comment.children( 'dl' ); + let $replies = $comment.is( 'p' ) ? $comment.next( 'dl' ) : $comment.children( 'dl' ); if ( $replies.length ) { - var $lastReply = $replies.children( 'dd' ).last(); + const $lastReply = $replies.children( 'dd' ).last(); relevantWikitext = TalkBelow.getRelevantWikitext( $lastReply ); } // If no relevant wikitext is found, fallback to regular edit if ( !relevantWikitext ) { - var $section = TalkBelow.getSection( $comment ); - var sectionNumber = $section ? 1 + $section.prevAll( 'h1, h2, h3, h4, h5, h6' ).length : 0; - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var editUrl = mw.util.getUrl( talk.getPrefixedText(), { action: 'edit', section: sectionNumber } ); + const $section = TalkBelow.getSection( $comment ); + const sectionNumber = $section ? 1 + $section.prevAll( 'h1, h2, h3, h4, h5, h6' ).length : 0; + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const editUrl = mw.util.getUrl( talk.getPrefixedText(), { action: 'edit', section: sectionNumber } ); window.location.href = editUrl; return; } // Make the reply form - var replyInput = new OO.ui.MultilineTextInputWidget( { name: 'reply', autosize: true, autofocus: true } ); - var replyLayout = new OO.ui.HorizontalLayout( { items: [ replyInput ] } ); - var publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); - var cancelButton = new OO.ui.ButtonInputWidget( { flags: 'destructive', framed: false, label: mw.msg( 'talkbelow-cancel' ) } ); - var buttonsLayout = new OO.ui.HorizontalLayout( { items: [ publishButton, cancelButton ] } ); - var form = new OO.ui.FormLayout( { items: [ replyLayout, buttonsLayout ] } ); - var $formWrapper = $( '<dd>' ).html( form.$element ); + const replyInput = new OO.ui.MultilineTextInputWidget( { name: 'reply', autosize: true, autofocus: true } ); + const replyLayout = new OO.ui.HorizontalLayout( { items: [ replyInput ] } ); + const publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); + const cancelButton = new OO.ui.ButtonInputWidget( { flags: 'destructive', framed: false, label: mw.msg( 'talkbelow-cancel' ) } ); + const buttonsLayout = new OO.ui.HorizontalLayout( { items: [ publishButton, cancelButton ] } ); + const form = new OO.ui.FormLayout( { items: [ replyLayout, buttonsLayout ] } ); + const $formWrapper = $( '<dd>' ).html( form.$element ); // Make the font-family monospace to suggest that [[wikitext]] is allowed replyInput.$element.css( 'font-family', 'monospace' ); @@ -137,7 +137,7 @@ window.TalkBelow = { publishButton.on( 'click', TalkBelow.onSubmitReply, [ $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ] ); // Handle a cancel - cancelButton.on( 'click', function () { + cancelButton.on( 'click', () => { $formWrapper.remove(); if ( $replies.children().length === 0 ) { $replies.remove(); @@ -159,8 +159,8 @@ window.TalkBelow = { onSubmitReply: function ( $comment, $formWrapper, relevantWikitext, publishButton, cancelButton, replyButton ) { // Check that the user wrote something - var $reply = $formWrapper.find( 'textarea[name="reply"]' ); - var reply = $reply.val(); + const $reply = $formWrapper.find( 'textarea[name="reply"]' ); + let reply = $reply.val(); if ( !reply ) { $reply.trigger( 'focus' ); return; @@ -172,9 +172,9 @@ window.TalkBelow = { cancelButton.setDisabled( true ); // Calculate the appropriate number of colons - var depth = $comment.parents( 'dl' ).length + 1; - var colons = ''; - for ( var i = 0; i < depth; i++ ) { + const depth = $comment.parents( 'dl' ).length + 1; + let colons = ''; + for ( let i = 0; i < depth; i++ ) { colons += ':'; } @@ -183,20 +183,20 @@ window.TalkBelow = { reply = reply.replace( /\n+/g, ' ' ); // Build the final wikitext of the reply - var replyWikitext = '\n' + colons + reply + ' ~~~~'; + const replyWikitext = '\n' + colons + reply + ' ~~~~'; // Submit the reply TalkBelow.talkWikitext = TalkBelow.talkWikitext.replace( relevantWikitext, relevantWikitext + replyWikitext ); - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { action: 'edit', title: talk.getPrefixedText(), text: TalkBelow.talkWikitext, summary: mw.msg( 'talkbelow-summary' ), tags: mw.config.get( 'wgTalkBelowChangeTag' ) }; - new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( function () { + new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => { TalkBelow.onSubmitReplySuccess( replyWikitext, replyButton, $formWrapper ); } ); }, @@ -209,9 +209,9 @@ window.TalkBelow = { * @param {Object} $formWrapper */ onSubmitReplySuccess: function ( replyWikitext, replyButton, $formWrapper ) { - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { action: 'parse', title: talk.getPrefixedText(), text: replyWikitext, @@ -220,10 +220,10 @@ window.TalkBelow = { prop: 'text', disablelimitreport: true }; - new mw.Api().get( params ).fail( TalkBelow.onError ).done( function ( data ) { - var text = data.parse.text; - var $html = $( text ); - var $reply = $html.find( 'dd' ).last(); + new mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => { + const text = data.parse.text; + const $html = $( text ); + const $reply = $html.find( 'dd' ).last(); $formWrapper.replaceWith( $reply ); replyButton.setDisabled( false ); TalkBelow.addReplyButton.call( $reply ); @@ -236,22 +236,22 @@ window.TalkBelow = { addNewTopicForm: function () { // Build the form - var titleInput = new OO.ui.TextInputWidget( { name: 'title', placeholder: mw.msg( 'talkbelow-title' ) } ); - var commentInput = new OO.ui.MultilineTextInputWidget( { name: 'comment', autosize: true, placeholder: mw.msg( 'talkbelow-comment' ) } ); - var publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); - var titleLayout = new OO.ui.HorizontalLayout( { items: [ titleInput ] } ); - var commentLayout = new OO.ui.HorizontalLayout( { items: [ commentInput ] } ); - var publishLayout = new OO.ui.HorizontalLayout( { items: [ publishButton ] } ); - var formLayout = new OO.ui.FormLayout( { items: [ titleLayout, commentLayout, publishLayout ] } ); - var $title = $( '<h2>' ).text( mw.msg( 'talkbelow-new-topic' ) ); - var $form = $( '<div>' ).attr( 'id', 'talkbelow-new-topic-form' ).append( $title, formLayout.$element ); + const titleInput = new OO.ui.TextInputWidget( { name: 'title', placeholder: mw.msg( 'talkbelow-title' ) } ); + const commentInput = new OO.ui.MultilineTextInputWidget( { name: 'comment', autosize: true, placeholder: mw.msg( 'talkbelow-comment' ) } ); + const publishButton = new OO.ui.ButtonInputWidget( { flags: [ 'primary', 'progressive' ], label: mw.msg( 'talkbelow-publish' ) } ); + const titleLayout = new OO.ui.HorizontalLayout( { items: [ titleInput ] } ); + const commentLayout = new OO.ui.HorizontalLayout( { items: [ commentInput ] } ); + const publishLayout = new OO.ui.HorizontalLayout( { items: [ publishButton ] } ); + const formLayout = new OO.ui.FormLayout( { items: [ titleLayout, commentLayout, publishLayout ] } ); + const $title = $( '<h2>' ).text( mw.msg( 'talkbelow-new-topic' ) ); + const $form = $( '<div>' ).attr( 'id', 'talkbelow-new-topic-form' ).append( $title, formLayout.$element ); // Make the font-family monospace to suggest that [[wikitext]] is allowed commentInput.$element.css( 'font-family', 'monospace' ); // Replace the "Add topic" button for the form - var addTopicButton = document.getElementById( 'talkbelow-add-topic-button' ); - var $addTopicButton = $( addTopicButton ); + const addTopicButton = document.getElementById( 'talkbelow-add-topic-button' ); + const $addTopicButton = $( addTopicButton ); $addTopicButton.replaceWith( $form ); // Handle submissions @@ -264,11 +264,11 @@ window.TalkBelow = { onSubmitNewTopic: function ( publishButton ) { // Get the data from the form - var $form = publishButton.$element.closest( '#talkbelow-new-topic-form' ); - var $title = $form.find( 'input[name="title"]' ); - var $comment = $form.find( 'textarea[name="comment"]' ); - var title = $title.val(); - var comment = $comment.val(); + const $form = publishButton.$element.closest( '#talkbelow-new-topic-form' ); + const $title = $form.find( 'input[name="title"]' ); + const $comment = $form.find( 'textarea[name="comment"]' ); + const title = $title.val(); + const comment = $comment.val(); // Do some basic validation if ( !title ) { @@ -285,10 +285,10 @@ window.TalkBelow = { publishButton.setDisabled( true ); // Submit the new topic - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var text = comment + ' ~~~~'; // Append the signature - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const text = comment + ' ~~~~'; // Append the signature + const params = { action: 'edit', title: talk.getPrefixedText(), section: 'new', @@ -296,7 +296,7 @@ window.TalkBelow = { text: text, tags: mw.config.get( 'wgTalkBelowChangeTag' ) }; - new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( function () { + new mw.Api().postWithEditToken( params ).fail( TalkBelow.onError ).done( () => { TalkBelow.onSubmitNewTopicSuccess( talk, title, text, $form ); } ); }, @@ -310,7 +310,7 @@ window.TalkBelow = { * @param {Object} $form New topic form */ onSubmitNewTopicSuccess: function ( talk, title, text, $form ) { - var params = { + const params = { action: 'parse', title: talk.getPrefixedText(), section: 'new', @@ -321,11 +321,11 @@ window.TalkBelow = { pst: true, disablelimitreport: true }; - new mw.Api().get( params ).fail( TalkBelow.onError ).done( function ( data ) { + new mw.Api().get( params ).fail( TalkBelow.onError ).done( ( data ) => { // Remove the outer <div> - var div = data.parse.text; - var topic = $( div ).html(); - var $topic = $( topic ); + const div = data.parse.text; + const topic = $( div ).html(); + const $topic = $( topic ); // Replace the form with the new topic $form.replaceWith( $topic ); @@ -352,15 +352,15 @@ window.TalkBelow = { * @return {Object} Promise */ getTalkWikitext: function () { - var page = mw.config.get( 'wgPageName' ); - var talk = new mw.Title( page ).getTalkPage(); - var params = { + const page = mw.config.get( 'wgPageName' ); + const talk = new mw.Title( page ).getTalkPage(); + const params = { page: talk.getPrefixedText(), action: 'parse', prop: 'wikitext', formatversion: 2 }; - return new mw.Api().get( params ).done( function ( data ) { + return new mw.Api().get( params ).done( ( data ) => { TalkBelow.talkWikitext = data.parse.wikitext; } ); }, @@ -383,7 +383,7 @@ window.TalkBelow = { */ getRelevantWikitext: function ( $comment ) { // The longest text node has the most chances of being unique - var text = TalkBelow.getLongestText( $comment ); + let text = TalkBelow.getLongestText( $comment ); // Some comments may not have text nodes at all if ( !text ) { @@ -394,9 +394,9 @@ window.TalkBelow = { text = text.replace( /\u00a0/g, ' ' ); // Replace nbsp sometimes added by the browser text = text.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' ); // Escape special characters - var regexp = new RegExp( '.*' + text + '.*', 'g' ); + const regexp = new RegExp( '.*' + text + '.*', 'g' ); - var matches = TalkBelow.talkWikitext.match( regexp ); + const matches = TalkBelow.talkWikitext.match( regexp ); // This may happen if the comments comes from a template if ( !matches ) { @@ -419,12 +419,12 @@ window.TalkBelow = { * @return {string} Text of the longest text node */ getLongestText: function ( $comment ) { - var text = ''; - var $textNodes = $comment.contents().filter( function () { + let text = ''; + const $textNodes = $comment.contents().filter( function () { return this.nodeType === 3; // Text node } ); $textNodes.each( function () { - var nodeText = $( this ).text().trim(); + const nodeText = $( this ).text().trim(); if ( nodeText.length > text.length ) { text = nodeText; } @@ -442,12 +442,12 @@ window.TalkBelow = { */ makeSummary: function ( summary, $comment, wikitext ) { if ( !summary ) { - var page = mw.config.get( 'talkbelow-page', 'mw:TalkBelow' ); + const page = mw.config.get( 'talkbelow-page', 'mw:TalkBelow' ); summary = wikitext ? mw.msg( 'talkbelow-summary-edit', page ) : mw.msg( 'talkbelow-summary-delete', page ); } - var $section = TalkBelow.getSection( $comment ); + const $section = TalkBelow.getSection( $comment ); if ( $section ) { - var section = $section.find( '.mw-headline' ).attr( 'id' ).replace( '/_/g', ' ' ); + const section = $section.find( '.mw-headline' ).attr( 'id' ).replace( '/_/g', ' ' ); summary = '/* ' + section + ' */ ' + summary; } summary += ' #talkbelow'; // For https://hashtags.wmcloud.org @@ -468,11 +468,11 @@ window.TalkBelow = { if ( $element.is( 'h1, h2, h3, h4, h5, h6' ) ) { return $element; } - var $previous = $element.prevAll( 'h1, h2, h3, h4, h5, h6' ).first(); + const $previous = $element.prevAll( 'h1, h2, h3, h4, h5, h6' ).first(); if ( $previous.length ) { return $previous; } - var $parent = $element.parent(); + const $parent = $element.parent(); return TalkBelow.getSection( $parent ); } }; diff --git a/composer.json b/composer.json index b0ddb62..a144259 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "require-dev": { - "mediawiki/mediawiki-codesniffer": "45.0.0", - "mediawiki/mediawiki-phan-config": "0.15.0", + "mediawiki/mediawiki-codesniffer": "47.0.0", + "mediawiki/mediawiki-phan-config": "0.15.1", "mediawiki/minus-x": "1.1.3", "php-parallel-lint/php-console-highlighter": "1.0.0", "php-parallel-lint/php-parallel-lint": "1.4.0" diff --git a/package-lock.json b/package-lock.json index eaae080..757f12b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "TalkBelow", "devDependencies": { - "eslint-config-wikimedia": "0.28.2", + "eslint-config-wikimedia": "0.29.1", "grunt": "1.6.1", "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0" @@ -946,9 +946,9 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", - "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz", + "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==", "dev": true, "dependencies": { "browserslist-config-wikimedia": "^0.7.0", @@ -961,13 +961,16 @@ "eslint-plugin-mediawiki": "^0.7.0", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-no-jquery": "^3.1.1", "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", "eslint-plugin-unicorn": "^53.0.0", "eslint-plugin-vue": "^9.26.0", "eslint-plugin-wdio": "^8.24.12", "eslint-plugin-yml": "^1.14.0" + }, + "engines": { + "node": ">=18 <23" } }, "node_modules/eslint-plugin-compat": { @@ -1165,9 +1168,9 @@ } }, "node_modules/eslint-plugin-no-jquery": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", - "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz", + "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==", "dev": true, "peerDependencies": { "eslint": ">=8.0.0" @@ -4600,9 +4603,9 @@ } }, "eslint-config-wikimedia": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", - "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.29.1.tgz", + "integrity": "sha512-4dbL5o3hKGSvreyrGZWLPoTDLFubZ575IQOPhUaTcpbTsi0u05TBEMsOyYkthTaK21vsFQqhSYtxp/xU93BSdA==", "dev": true, "requires": { "browserslist-config-wikimedia": "^0.7.0", @@ -4615,7 +4618,7 @@ "eslint-plugin-mediawiki": "^0.7.0", "eslint-plugin-mocha": "^10.4.3", "eslint-plugin-n": "^17.7.0", - "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-no-jquery": "^3.1.1", "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", "eslint-plugin-unicorn": "^53.0.0", @@ -4750,9 +4753,9 @@ } }, "eslint-plugin-no-jquery": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", - "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.1.tgz", + "integrity": "sha512-LTLO3jH/Tjr1pmxCEqtV6qmt+OChv8La4fwgG470JRpgxyFF4NOzoC9CRy92GIWD3Yjl0qLEgPmD2FLQWcNEjg==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index 8216636..f96cba2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "test": "grunt test" }, "devDependencies": { - "eslint-config-wikimedia": "0.28.2", + "eslint-config-wikimedia": "0.29.1", "grunt": "1.6.1", "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0" -- 2.39.5 --- end ---