diff --git a/modules/.eslintrc.json b/modules/.eslintrc.json index 2f3b62c4..07eed576 100644 --- a/modules/.eslintrc.json +++ b/modules/.eslintrc.json @@ -11,6 +11,6 @@ "rules": { "max-len": "off", "no-jquery/no-global-selector": "off", - "no-var": "off" + "prefer-const": "warn" } } diff --git a/modules/ext.wikiEditor.js b/modules/ext.wikiEditor.js index 2cc0f74a..2333b7f4 100644 --- a/modules/ext.wikiEditor.js +++ b/modules/ext.wikiEditor.js @@ -6,7 +6,7 @@ * @module module:ext.wikiEditor */ -var editingSessionId; +let editingSessionId; // This sets $.wikiEditor and $.fn.wikiEditor require( './jquery.wikiEditor.js' ); @@ -48,7 +48,7 @@ function logAbort( switchingToVE, unmodified ) { logEditFeature( 'editor-switch', 'visual-desktop' ); } - var abortType; + let abortType; if ( switchingToVE && unmodified ) { abortType = 'switchnochange'; } else if ( switchingToVE ) { @@ -66,7 +66,7 @@ function logAbort( switchingToVE, unmodified ) { } $( () => { - var $textarea = $( '#wpTextbox1' ), + const $textarea = $( '#wpTextbox1' ), $editingSessionIdInput = $( '#editingStatsId' ), origText = $textarea.val(); @@ -82,7 +82,7 @@ $( () => { // fall back to the timestamp when the page loaded for those // that don't, we just ignore them, so as to not skew the // results towards better-performance in those cases. - var readyTime = Date.now(); + const readyTime = Date.now(); logEditEvent( { action: 'ready', timing: readyTime - window.performance.timing.navigationStart @@ -99,28 +99,28 @@ $( () => { } ); } ); } - var $form = $textarea.closest( 'form' ); + const $form = $textarea.closest( 'form' ); if ( mw.user.options.get( 'uselivepreview' ) ) { $form.find( '#wpPreview' ).on( 'click', () => { logEditFeature( 'preview', 'preview-live' ); } ); } - var submitting; + let submitting; $form.on( 'submit', () => { submitting = true; } ); - var onUnloadFallback = window.onunload; + const onUnloadFallback = window.onunload; window.onunload = function () { - var unmodified = mw.config.get( 'wgAction' ) !== 'submit' && origText === $textarea.val(), + const unmodified = mw.config.get( 'wgAction' ) !== 'submit' && origText === $textarea.val(), caVeEdit = $( '#ca-ve-edit' )[ 0 ], switchingToVE = caVeEdit && ( document.activeElement === caVeEdit || $.contains( caVeEdit, document.activeElement ) ); - var fallbackResult; + let fallbackResult; if ( onUnloadFallback ) { fallbackResult = onUnloadFallback(); } @@ -141,7 +141,7 @@ $( () => { return fallbackResult; }; $textarea.on( 'wikiEditor-switching-visualeditor', () => { - var unmodified = mw.config.get( 'wgAction' ) !== 'submit' && origText === $textarea.val(); + const unmodified = mw.config.get( 'wgAction' ) !== 'submit' && origText === $textarea.val(); // A non-navigation switch to VE has occurred. As such, avoid eventually // double-logging an abort when VE is done. window.onunload = onUnloadFallback; @@ -192,7 +192,7 @@ mw.addWikiEditor = function ( $textarea ) { 'addModule', require( './jquery.wikiEditor.toolbar.config.js' ) ); - var dialogsConfig = require( './jquery.wikiEditor.dialogs.config.js' ); + const dialogsConfig = require( './jquery.wikiEditor.dialogs.config.js' ); // Replace icons dialogsConfig.replaceIcons( $textarea ); // Add dialogs module diff --git a/modules/insertlink/LinkTextField.js b/modules/insertlink/LinkTextField.js index b1e80724..a0961101 100644 --- a/modules/insertlink/LinkTextField.js +++ b/modules/insertlink/LinkTextField.js @@ -4,7 +4,7 @@ * @constructor */ function LinkTextField() { - var input = new OO.ui.TextInputWidget( { + const input = new OO.ui.TextInputWidget( { placeholder: mw.msg( 'wikieditor-toolbar-tool-link-int-text-tooltip' ) } ); @@ -12,7 +12,7 @@ function LinkTextField() { change: 'onInputChange' } ); - var config = { + const config = { align: 'top', label: mw.msg( 'wikieditor-toolbar-tool-link-int-text' ), classes: [ 'mw-wikiEditor-InsertLink-LinkTextField' ] diff --git a/modules/insertlink/LinkTypeField.js b/modules/insertlink/LinkTypeField.js index 849dc917..9f3b0a4b 100644 --- a/modules/insertlink/LinkTypeField.js +++ b/modules/insertlink/LinkTypeField.js @@ -14,7 +14,7 @@ function LinkTypeField() { this.radioExt = new OO.ui.RadioOptionWidget( { label: mw.msg( 'wikieditor-toolbar-tool-link-ext' ) } ); - var radioSelect = new OO.ui.RadioSelectWidget( { + const radioSelect = new OO.ui.RadioSelectWidget( { items: [ this.radioInt, this.radioExt @@ -24,7 +24,7 @@ function LinkTypeField() { choose: this.onRadioChoose } ); - var config = { + const config = { align: 'top', classes: [ 'mw-wikiEditor-InsertLink-LinkTypeField' ] }; diff --git a/modules/insertlink/TitleInputField.js b/modules/insertlink/TitleInputField.js index 01be88a5..21c0ddd2 100644 --- a/modules/insertlink/TitleInputField.js +++ b/modules/insertlink/TitleInputField.js @@ -1,5 +1,5 @@ -var LinkTypeField = require( './LinkTypeField.js' ); -var TitleInputWidget = require( './TitleInputWidget.js' ); +const LinkTypeField = require( './LinkTypeField.js' ); +const TitleInputWidget = require( './TitleInputWidget.js' ); /* global InsertLinkTitleOptionWidget */ /** @@ -14,7 +14,7 @@ function TitleInputField() { // Mixin constructor OO.EventEmitter.call( this ); - var input = new TitleInputWidget(); + const input = new TitleInputWidget(); input.connect( this, { change: this.onChange, select: this.onSelect @@ -25,7 +25,7 @@ function TitleInputField() { // The 'manual' URL mode flag is set when the user changes the mode, and doesn't change again. this.urlModeManual = false; - var config = { + const config = { align: 'top', label: mw.msg( 'wikieditor-toolbar-tool-link-int-target' ), classes: [ 'mw-wikiEditor-InsertLink-TitleInputField' ] @@ -131,7 +131,7 @@ TitleInputField.prototype.validate = function ( value ) { * @param {InsertLinkTitleOptionWidget} item */ TitleInputField.prototype.onSelect = function ( item ) { - var icon, msg; + let icon, msg; if ( this.urlMode === LinkTypeField.static.LINK_MODE_EXTERNAL || ( !this.urlModeManual && this.urlMode === LinkTypeField.static.LINK_MODE_INTERNAL && item.isExternal() ) ) { diff --git a/modules/insertlink/TitleInputWidget.js b/modules/insertlink/TitleInputWidget.js index 3e6fb531..0ef43612 100644 --- a/modules/insertlink/TitleInputWidget.js +++ b/modules/insertlink/TitleInputWidget.js @@ -1,4 +1,4 @@ -var InsertLinkTitleOptionWidget = require( './TitleOptionWidget.js' ); +const InsertLinkTitleOptionWidget = require( './TitleOptionWidget.js' ); /** * A custom TitleInputWidget that adds support for external links @@ -50,13 +50,13 @@ TitleInputWidget.prototype.onLookupInputBlur = function () { * @public */ TitleInputWidget.prototype.selectFirstMatch = function () { - var that = this; + const that = this; this.getLookupMenuItems().done( ( items ) => { // The matching item is not always the first, // because disambiguation pages are moved to the end. - for ( var i = 0; i < items.length; i++ ) { - var item = items[ i ]; - var queryVal = that.getQueryValue(); + for ( let i = 0; i < items.length; i++ ) { + const item = items[ i ]; + const queryVal = that.getQueryValue(); // Check for exact match, or a match with uppercase first character. if ( item.getData() === queryVal || item.getData() === queryVal.charAt( 0 ).toUpperCase() + queryVal.slice( 1 ) @@ -78,7 +78,7 @@ TitleInputWidget.prototype.selectFirstMatch = function () { * @return {Object} Data for option widget */ TitleInputWidget.prototype.getOptionWidgetData = function ( title, data ) { - var widgetData = TitleInputWidget.super.prototype.getOptionWidgetData.call( this, title, data ); + const widgetData = TitleInputWidget.super.prototype.getOptionWidgetData.call( this, title, data ); widgetData.external = data.originalData.external; return widgetData; }; @@ -101,14 +101,14 @@ TitleInputWidget.prototype.createOptionWidget = function ( data ) { * @return {Object} */ TitleInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) { - var res = TitleInputWidget.super.prototype.getLookupCacheDataFromResponse( response ); + const res = TitleInputWidget.super.prototype.getLookupCacheDataFromResponse( response ); // Guard against zero responses. if ( res.pages === undefined ) { return res; } - for ( var pageId in res.pages ) { + for ( const pageId in res.pages ) { if ( Object.prototype.hasOwnProperty.call( res.pages, pageId ) ) { - var page = res.pages[ pageId ]; + const page = res.pages[ pageId ]; page.external = page.missing !== undefined && this.looksLikeExternalLink( page.title ); } } diff --git a/modules/jquery.wikiEditor.dialogs.config.js b/modules/jquery.wikiEditor.dialogs.config.js index 64edab6d..57145bca 100644 --- a/modules/jquery.wikiEditor.dialogs.config.js +++ b/modules/jquery.wikiEditor.dialogs.config.js @@ -3,7 +3,7 @@ * * @private */ -var toolbarModule = require( './jquery.wikiEditor.toolbar.js' ), +const toolbarModule = require( './jquery.wikiEditor.toolbar.js' ), InsertLinkTitleInputField = require( './insertlink/TitleInputField.js' ), LinkTextField = require( './insertlink/LinkTextField.js' ), LinkTypeField = require( './insertlink/LinkTypeField.js' ), @@ -14,8 +14,8 @@ var toolbarModule = require( './jquery.wikiEditor.toolbar.js' ), function triggerButtonClick( element ) { // The dialog action should always be a DOMElement. - var dialogAction = $( element ).data( 'dialogaction' ); - var $button = dialogAction ? $( dialogAction ) : $( element ).find( 'button' ).first(); + const dialogAction = $( element ).data( 'dialogaction' ); + const $button = dialogAction ? $( dialogAction ) : $( element ).find( 'button' ).first(); // Since we're reading from data attribute, make sure we got an element before clicking. // Note when closing a dialog this can be false leading to TypeError: $button.trigger is not a function // (T261529) @@ -114,7 +114,7 @@ module.exports = { * * @param {boolean} enable Whether to enable or disable the button */ - var setButtonState = function ( enable ) { + const setButtonState = function ( enable ) { $( '.wikieditor-toolbar-tool-link-insert' ).button( 'option', 'disabled', !enable ); }; // Automatically copy the value of the internal link page title field to the link text field unless the @@ -133,7 +133,7 @@ module.exports = { // Tell the title input field when the internal/external radio changes. insertLinkLinkTypeField.connect( this, { change: function ( isExternal ) { - var urlMode = isExternal ? + const urlMode = isExternal ? LinkTypeField.static.LINK_MODE_EXTERNAL : LinkTypeField.static.LINK_MODE_INTERNAL; insertLinkTitleInputField.setUrlMode( urlMode ); @@ -148,7 +148,7 @@ module.exports = { class: 'wikieditor-toolbar-tool-link-insert', text: mw.msg( 'wikieditor-toolbar-tool-link-insert' ), click: function () { - var that = this; + const that = this; function escapeInternalText( s ) { return s.replace( /(\]{2,})/g, '$1' ); @@ -167,14 +167,14 @@ module.exports = { return; } - var target = insertLinkTitleInputField.getField().getValue(); - var text = insertLinkLinkTextField.getField().getValue(); + let target = insertLinkTitleInputField.getField().getValue(); + let text = insertLinkLinkTextField.getField().getValue(); if ( text.trim() === '' ) { // [[Foo| ]] creates an invisible link // Instead, generate [[Foo|]] text = ''; } - var insertText = ''; + let insertText = ''; if ( insertLinkLinkTypeField.isInternal() ) { if ( target === text || !text.length ) { insertText = '[[' + target + ']]'; @@ -189,12 +189,12 @@ module.exports = { } // Detect if this is really an internal link in disguise - var match = target.match( $( this ).data( 'articlePathRegex' ) ); + const match = target.match( $( this ).data( 'articlePathRegex' ) ); if ( match && !$( this ).data( 'ignoreLooksInternal' ) ) { - var buttons = {}; + const buttons = {}; buttons[ mw.msg( 'wikieditor-toolbar-tool-link-lookslikeinternal-int' ) ] = function () { - var titleValue = match[ 1 ]; + let titleValue = match[ 1 ]; try { titleValue = decodeURI( titleValue ); } catch ( ex ) { @@ -221,8 +221,8 @@ module.exports = { return; } - var escTarget = escapeExternalTarget( target ); - var escText = escapeExternalText( text ); + const escTarget = escapeExternalTarget( target ); + const escText = escapeExternalText( text ); if ( escTarget === escText ) { insertText = escTarget; @@ -233,7 +233,7 @@ module.exports = { } } - var whitespace = $( '#wikieditor-toolbar-link-dialog' ).data( 'whitespace' ); + const whitespace = $( '#wikieditor-toolbar-link-dialog' ).data( 'whitespace' ); // Preserve whitespace in selection when replacing if ( whitespace ) { insertText = whitespace[ 0 ] + insertText + whitespace[ 1 ]; @@ -259,7 +259,7 @@ module.exports = { open: function () { // Obtain the server name without the protocol. wgServer may be protocol-relative - var serverName = mw.config.get( 'wgServer' ).replace( /^(https?:)?\/\//, '' ); + const serverName = mw.config.get( 'wgServer' ).replace( /^(https?:)?\/\//, '' ); // Cache the articlepath regex $( this ).data( 'articlePathRegex', new RegExp( @@ -267,8 +267,8 @@ module.exports = { .replace( /\\\$1/g, '(.*)' ) + '$' ) ); // Pre-fill the text fields based on the current selection - var context = $( this ).data( 'context' ); - var selection = context.$textarea.textSelection( 'getSelection' ); + const context = $( this ).data( 'context' ); + const selection = context.$textarea.textSelection( 'getSelection' ); insertLinkTitleInputField.getField().focus(); // Trigger the change event, so the link status indicator is up to date. @@ -277,7 +277,7 @@ module.exports = { $( '#wikieditor-toolbar-link-dialog' ).data( 'whitespace', [ '', '' ] ); if ( selection !== '' ) { - var matches, target, text, isExternal; + let matches, target, text, isExternal; if ( ( matches = selection.match( /^(\s*)\[\[([^\]|]+)(\|([^\]|]*))?\]\](\s*)$/ ) ) ) { // [[foo|bar]] or [[foo]] target = matches[ 2 ]; @@ -315,7 +315,7 @@ module.exports = { insertLinkLinkTextField.setTouched( true ); if ( typeof isExternal !== 'undefined' ) { - var urlMode = isExternal ? + const urlMode = isExternal ? LinkTypeField.static.LINK_MODE_EXTERNAL : LinkTypeField.static.LINK_MODE_INTERNAL; insertLinkTitleInputField.setUrlMode( urlMode ); @@ -347,7 +347,7 @@ module.exports = { id: 'wikieditor-toolbar-file-dialog', htmlTemplate: 'dialogInsertFile.html', init: function () { - var magicWordsI18N = configData.magicWords; + const magicWordsI18N = configData.magicWords; $( this ).find( '[data-i18n-magic]' ) .text( function () { @@ -355,7 +355,7 @@ module.exports = { } ) .removeAttr( 'data-i18n-magic' ); - var defaultMsg = mw.msg( 'wikieditor-toolbar-file-default' ); + const defaultMsg = mw.msg( 'wikieditor-toolbar-file-default' ); $( this ).find( '#wikieditor-toolbar-file-size' ) .attr( 'placeholder', defaultMsg ) // The message may be long in some languages @@ -367,8 +367,8 @@ module.exports = { } ) .removeAttr( 'rel' ); - var altHelpText = mw.msg( 'wikieditor-toolbar-file-alt-help' ); - var altHelpLabel = mw.msg( 'wikieditor-toolbar-file-alt-help-label' ); + const altHelpText = mw.msg( 'wikieditor-toolbar-file-alt-help' ); + const altHelpLabel = mw.msg( 'wikieditor-toolbar-file-alt-help-label' ); // Expandable help message for 'alt text' field $( this ).find( '.wikieditor-toolbar-file-alt-help' ).text( altHelpLabel ); $( '.wikieditor-toolbar-file-alt-help' ).on( 'click', function () { @@ -388,21 +388,21 @@ module.exports = { width: 590, buttons: { 'wikieditor-toolbar-tool-file-insert': function () { - var hasPxRgx = /.+px$/, + const hasPxRgx = /.+px$/, magicWordsI18N = configData.magicWords; - var fileName = $( '#wikieditor-toolbar-file-target' ).val(); - var caption = $( '#wikieditor-toolbar-file-caption' ).val(); - var fileAlt = $( '#wikieditor-toolbar-file-alt' ).val(); - var fileFloat = $( '#wikieditor-toolbar-file-float' ).val(); - var fileFormat = $( '#wikieditor-toolbar-file-format' ).val(); - var fileSize = $( '#wikieditor-toolbar-file-size' ).val(); - var whitespace = $( '#wikieditor-toolbar-file-dialog' ).data( 'whitespace' ); + let fileName = $( '#wikieditor-toolbar-file-target' ).val(); + const caption = $( '#wikieditor-toolbar-file-caption' ).val(); + const fileAlt = $( '#wikieditor-toolbar-file-alt' ).val(); + const fileFloat = $( '#wikieditor-toolbar-file-float' ).val(); + const fileFormat = $( '#wikieditor-toolbar-file-format' ).val(); + let fileSize = $( '#wikieditor-toolbar-file-size' ).val(); + const whitespace = $( '#wikieditor-toolbar-file-dialog' ).data( 'whitespace' ); // Append px to end to size if not already contains it if ( fileSize !== '' && !hasPxRgx.test( fileSize ) ) { fileSize += 'px'; } if ( fileName !== '' ) { - var fileTitle = mw.Title.newFromText( fileName ); + let fileTitle = mw.Title.newFromText( fileName ); // Append file namespace prefix to filename if not already contains it if ( fileTitle && fileTitle.getNamespaceId() !== 6 ) { fileTitle = mw.Title.makeTitle( 6, fileName ); @@ -411,7 +411,7 @@ module.exports = { fileName = fileTitle.toText(); } } - var options = [ fileSize, fileFormat, fileFloat ]; + let options = [ fileSize, fileFormat, fileFloat ]; // Filter empty values options = options.filter( ( val ) => val.length && val !== 'default' ); if ( fileAlt.length ) { @@ -421,7 +421,7 @@ module.exports = { options.push( caption ); } - var fileUse = options.length === 0 ? fileName : ( fileName + '|' + options.join( '|' ) ); + const fileUse = options.length === 0 ? fileName : ( fileName + '|' + options.join( '|' ) ); $( this ).dialog( 'close' ); toolbarModule.fn.doAction( $( this ).data( 'context' ), @@ -456,7 +456,7 @@ module.exports = { 'mediawiki.Upload.Dialog', 'oojs-ui-windows' ] ).then( () => { - var windowManager = new OO.ui.WindowManager(), + const windowManager = new OO.ui.WindowManager(), uploadDialog = new mw.Upload.Dialog( { bookletClass: mw.ForeignStructuredUpload.BookletLayout } ); @@ -476,7 +476,7 @@ module.exports = { } }, open: function () { - var magicWordsI18N = configData.magicWords, + let magicWordsI18N = configData.magicWords, fileData = { pre: '', post: '', @@ -488,30 +488,30 @@ module.exports = { fileFormat: magicWordsI18N.img_thumbnail[ 0 ] }; - var parseFileSyntax = function ( wikitext ) { - var escapedPipe = '\u0001'; + const parseFileSyntax = function ( wikitext ) { + const escapedPipe = '\u0001'; if ( wikitext.indexOf( escapedPipe ) !== -1 ) { return false; } - var match = /^(\s*)\[\[(.*)\]\](\s*)$/.exec( wikitext ); + const match = /^(\s*)\[\[(.*)\]\](\s*)$/.exec( wikitext ); if ( !match ) { return false; } // Escape pipes inside links and templates, // then split the parameters at the remaining pipes - var params = match[ 2 ].replace( /\[\[[^[\]]*\]\]|\{\{[^{}]\}\}/g, ( link ) => link.replace( /\|/g, escapedPipe ) ).split( '|' ); - var file = mw.Title.newFromText( params[ 0 ] ); + const params = match[ 2 ].replace( /\[\[[^[\]]*\]\]|\{\{[^{}]\}\}/g, ( link ) => link.replace( /\|/g, escapedPipe ) ).split( '|' ); + const file = mw.Title.newFromText( params[ 0 ] ); if ( !file || file.getNamespaceId() !== 6 ) { return false; } - var result = { + const result = { pre: match[ 1 ], post: match[ 3 ], fileName: file.getMainText() }; - for ( var i = 1; i < params.length; i++ ) { - var paramOrig = params[ i ]; - var param = paramOrig.toLowerCase(); + for ( let i = 1; i < params.length; i++ ) { + const paramOrig = params[ i ]; + const param = paramOrig.toLowerCase(); if ( magicWordsI18N.img_right.indexOf( param ) !== -1 ) { result.fileFloat = magicWordsI18N.img_right[ 0 ]; } else if ( magicWordsI18N.img_left.indexOf( param ) !== -1 ) { @@ -545,8 +545,8 @@ module.exports = { }; // Retrieve the current selection - var context = $( this ).data( 'context' ); - var selection = context.$textarea.textSelection( 'getSelection' ); + const context = $( this ).data( 'context' ); + const selection = context.$textarea.textSelection( 'getSelection' ); // Pre-fill the text fields based on the current selection if ( selection !== '' ) { @@ -631,11 +631,11 @@ module.exports = { // Instead of show/hiding, switch the HTML around // We do this because the sortable tables script styles the first row, // visible or not - var headerHTML = $( '.wikieditor-toolbar-table-preview-header' ).html(), + const headerHTML = $( '.wikieditor-toolbar-table-preview-header' ).html(), hiddenHTML = $( '.wikieditor-toolbar-table-preview-hidden' ).html(); $( '.wikieditor-toolbar-table-preview-header' ).html( hiddenHTML ); $( '.wikieditor-toolbar-table-preview-hidden' ).html( headerHTML ); - var $sortable = $( '#wikieditor-toolbar-table-preview, #wikieditor-toolbar-table-preview2' ) + const $sortable = $( '#wikieditor-toolbar-table-preview, #wikieditor-toolbar-table-preview2' ) .filter( '.sortable' ); mw.loader.using( 'jquery.tablesorter', () => { $sortable.tablesorter(); @@ -648,7 +648,7 @@ module.exports = { width: 590, buttons: { 'wikieditor-toolbar-tool-table-insert': function () { - var rowsVal = $( '#wikieditor-toolbar-table-dimensions-rows' ).val(), + const rowsVal = $( '#wikieditor-toolbar-table-dimensions-rows' ).val(), colsVal = $( '#wikieditor-toolbar-table-dimensions-columns' ).val(), rows = parseInt( rowsVal, 10 ), cols = parseInt( colsVal, 10 ), @@ -668,16 +668,16 @@ module.exports = { alert( mw.msg( 'wikieditor-toolbar-tool-table-toomany', mw.language.convertNumber( 1000 ) ) ); return; } - var captionText = mw.msg( 'wikieditor-toolbar-tool-table-example-caption' ); - var headerText = mw.msg( 'wikieditor-toolbar-tool-table-example-header' ); - var normalText = mw.msg( 'wikieditor-toolbar-tool-table-example' ); - var table = ''; + const captionText = mw.msg( 'wikieditor-toolbar-tool-table-example-caption' ); + const headerText = mw.msg( 'wikieditor-toolbar-tool-table-example-header' ); + const normalText = mw.msg( 'wikieditor-toolbar-tool-table-example' ); + let table = ''; table += '|+ ' + captionText + '\n'; - for ( var r = 0; r < rows + header; r++ ) { + for ( let r = 0; r < rows + header; r++ ) { table += '|-\n'; - for ( var c = 0; c < cols; c++ ) { - var isHeader = ( header && r === 0 ); - var delim = isHeader ? '!' : '|'; + for ( let c = 0; c < cols; c++ ) { + const isHeader = ( header && r === 0 ); + let delim = isHeader ? '!' : '|'; if ( c > 0 ) { delim += delim; } @@ -687,14 +687,14 @@ module.exports = { // table[table.length - 1] is read-only table = table.slice( 0, table.length - 1 ) + '\n'; } - var classes = []; + const classes = []; if ( $( '#wikieditor-toolbar-table-wikitable' ).is( ':checked' ) ) { classes.push( 'wikitable' ); } if ( $( '#wikieditor-toolbar-table-sortable' ).is( ':checked' ) ) { classes.push( 'sortable' ); } - var classStr = classes.length > 0 ? ' class="' + classes.join( ' ' ) + '"' : ''; + const classStr = classes.length > 0 ? ' class="' + classes.join( ' ' ) + '"' : ''; $( this ).dialog( 'close' ); toolbarModule.fn.doAction( $( this ).data( 'context' ), @@ -766,26 +766,26 @@ module.exports = { $( '#wikieditor-toolbar-replace-nomatch, #wikieditor-toolbar-replace-success, #wikieditor-toolbar-replace-emptysearch, #wikieditor-toolbar-replace-invalidregex' ).hide(); // Search string cannot be empty - var searchStr = $( '#wikieditor-toolbar-replace-search' ).val(); + let searchStr = $( '#wikieditor-toolbar-replace-search' ).val(); if ( searchStr === '' ) { $( '#wikieditor-toolbar-replace-emptysearch' ).show(); return; } // Replace string can be empty - var replaceStr = $( '#wikieditor-toolbar-replace-replace' ).val(); + const replaceStr = $( '#wikieditor-toolbar-replace-replace' ).val(); // Prepare the regular expression flags - var flags = 'm'; - var matchCase = $( '#wikieditor-toolbar-replace-case' ).is( ':checked' ); + let flags = 'm'; + const matchCase = $( '#wikieditor-toolbar-replace-case' ).is( ':checked' ); if ( !matchCase ) { flags += 'i'; } - var isRegex = $( '#wikieditor-toolbar-replace-regex' ).is( ':checked' ); + const isRegex = $( '#wikieditor-toolbar-replace-regex' ).is( ':checked' ); if ( !isRegex ) { searchStr = mw.util.escapeRegExp( searchStr ); } - var matchWord = $( '#wikieditor-toolbar-replace-word' ).is( ':checked' ); + const matchWord = $( '#wikieditor-toolbar-replace-word' ).is( ':checked' ); if ( matchWord ) { searchStr = '\\b(?:' + searchStr + ')\\b'; } @@ -793,7 +793,7 @@ module.exports = { flags += 'g'; } - var regex; + let regex; try { regex = new RegExp( searchStr, flags ); } catch ( e ) { @@ -804,10 +804,10 @@ module.exports = { return; } - var $textarea = $( this ).data( 'context' ).$textarea; - var text = $textarea.textSelection( 'getContents' ); - var match = false; - var offset, textRemainder; + const $textarea = $( this ).data( 'context' ).$textarea; + let text = $textarea.textSelection( 'getContents' ); + let match = false; + let offset, textRemainder; if ( mode !== 'replaceAll' ) { offset = $( this ).data( mode === 'replace' ? 'matchIndex' : 'offset' ); textRemainder = text.slice( offset ); @@ -831,10 +831,10 @@ module.exports = { $( this ).data( 'offset', 0 ); } else { - var start, end; + let start, end; if ( mode === 'replace' ) { - var actualReplacement; + let actualReplacement; if ( isRegex ) { // If backreferences (like $1) are used, the actual actual replacement string will be different actualReplacement = match[ 0 ].replace( regex, replaceStr ); @@ -907,7 +907,7 @@ module.exports = { } }, open: function () { - var that = this; + let that = this; $( this ).data( { offset: 0, matchIndex: 0 } ); $( '#wikieditor-toolbar-replace-search' ).trigger( 'focus' ); @@ -928,7 +928,7 @@ module.exports = { $( this ).closest( '.ui-dialog' ).data( 'dialogaction', this ); } ); } - var $dialog = $( this ).closest( '.ui-dialog' ); + const $dialog = $( this ).closest( '.ui-dialog' ); that = this; $( this ).data( 'context' ).$textarea .on( 'keypress.srdialog', ( e ) => { diff --git a/modules/jquery.wikiEditor.dialogs.js b/modules/jquery.wikiEditor.dialogs.js index 07933b00..4c45b37f 100644 --- a/modules/jquery.wikiEditor.dialogs.js +++ b/modules/jquery.wikiEditor.dialogs.js @@ -3,7 +3,7 @@ * * @memberof module:ext.wikiEditor */ -var dialogsModule = { +const dialogsModule = { /** * API accessible functions @@ -14,8 +14,8 @@ var dialogsModule = { }, openDialog: function ( context, module ) { if ( module in dialogsModule.modules ) { - var mod = dialogsModule.modules[ module ]; - var $dialog = $( '#' + mod.id ); + const mod = dialogsModule.modules[ module ]; + let $dialog = $( '#' + mod.id ); if ( $dialog.length === 0 ) { dialogsModule.fn.reallyCreate( context, mod, module ); $dialog = $( '#' + mod.id ); @@ -48,12 +48,12 @@ var dialogsModule = { */ create: function ( context, config ) { // Defer building of modules, unless they require immediate creation - for ( var mod in config ) { - var module = config[ mod ]; + for ( const mod in config ) { + const module = config[ mod ]; // Only create the dialog if it isn't filtered and doesn't exist yet - var filtered = false; + let filtered = false; if ( typeof module.filters !== 'undefined' ) { - for ( var i = 0; i < module.filters.length; i++ ) { + for ( let i = 0; i < module.filters.length; i++ ) { if ( $( module.filters[ i ] ).length === 0 ) { filtered = true; break; @@ -61,7 +61,7 @@ var dialogsModule = { } } // If the dialog already exists, but for another textarea, simply remove it - var $existingDialog = $( '#' + module.id ); + let $existingDialog = $( '#' + module.id ); if ( $existingDialog.length > 0 && $existingDialog.data( 'context' ).$textarea !== context.$textarea ) { $existingDialog.remove(); } @@ -86,7 +86,7 @@ var dialogsModule = { * @param {string} name Dialog name (key in dialogsModule.modules) */ reallyCreate: function ( context, module, name ) { - var configuration = module.dialog; + const configuration = module.dialog; // Add some stuff to configuration configuration.bgiframe = true; configuration.autoOpen = false; @@ -99,12 +99,12 @@ var dialogsModule = { // Stupid JS won't let us do stuff like // foo = { mw.msg( 'bar' ): baz } configuration.newButtons = {}; - for ( var msg in configuration.buttons ) { + for ( const msg in configuration.buttons ) { // eslint-disable-next-line mediawiki/msg-doc configuration.newButtons[ mw.msg( msg ) ] = configuration.buttons[ msg ]; } configuration.buttons = configuration.newButtons; - var $content; + let $content; if ( module.htmlTemplate ) { $content = mw.template.get( 'ext.wikiEditor', module.htmlTemplate ).render(); } else if ( module.html instanceof $ ) { @@ -113,7 +113,7 @@ var dialogsModule = { $content = $( $.parseHTML( module.html ) ); } // Create the dialog
- var $dialogDiv = $( '
' ) + const $dialogDiv = $( '
' ) .attr( 'id', module.id ) .append( $content ) .data( 'context', context ) diff --git a/modules/jquery.wikiEditor.js b/modules/jquery.wikiEditor.js index 467b906f..bcbeb3dd 100644 --- a/modules/jquery.wikiEditor.js +++ b/modules/jquery.wikiEditor.js @@ -11,7 +11,7 @@ /** * @private */ -var hasOwn = Object.prototype.hasOwnProperty, +const hasOwn = Object.prototype.hasOwnProperty, /** * Array of language codes. @@ -20,7 +20,7 @@ var hasOwn = Object.prototype.hasOwnProperty, */ fallbackChain = ( function () { // eslint-disable-next-line no-jquery/no-class-state - var isRTL = $( document.body ).hasClass( 'rtl' ), + const isRTL = $( document.body ).hasClass( 'rtl' ), chain = mw.language.getFallbackLanguageChain(); // Do not fallback to 'en' @@ -43,10 +43,10 @@ var hasOwn = Object.prototype.hasOwnProperty, * @param {string} key */ function deprecateAutoMsg( property, key ) { - var searchParam = mw.config.get( 'wgSearchType' ) === 'CirrusSearch' ? + const searchParam = mw.config.get( 'wgSearchType' ) === 'CirrusSearch' ? 'insource:/' + property + 'Msg: \'' + key + '\'/' : property + 'Msg: ' + key; - var searchUri = mw.config.get( 'wgServer' ) + + let searchUri = mw.config.get( 'wgServer' ) + mw.util.getUrl( 'Special:Search', { search: searchParam, ns2: 1, ns8: 1 } @@ -55,13 +55,13 @@ function deprecateAutoMsg( property, key ) { searchUri = location.protocol + searchUri; } - var messageMethod; + let messageMethod; if ( property === 'html' || property === 'text' || property === 'title' ) { messageMethod = 'mw.message( ' + JSON.stringify( key ) + ' ).parse()'; } else { messageMethod = 'mw.msg( ' + JSON.stringify( key ) + ' )'; } - var deprecationMsg = mw.log.makeDeprecated( + const deprecationMsg = mw.log.makeDeprecated( 'wikiEditor_autoMsg', 'WikiEditor: Use `' + property + ': ' + messageMethod + '` instead of `' + property + 'Msg: ' + JSON.stringify( key ) + '`.\nSearch: ' + searchUri ); @@ -110,7 +110,7 @@ $.wikiEditor = { */ isRequired: function ( module, requirement ) { if ( typeof module.req !== 'undefined' ) { - for ( var req in module.req ) { + for ( const req in module.req ) { if ( module.req[ req ] === requirement ) { return true; } @@ -138,7 +138,7 @@ $.wikiEditor = { autoMsg: function ( object, property ) { // Accept array of possible properties, of which the first one found will be used if ( typeof property === 'object' ) { - for ( var i in property ) { + for ( const i in property ) { if ( property[ i ] in object || property[ i ] + 'Msg' in object ) { property = property[ i ]; break; @@ -148,7 +148,7 @@ $.wikiEditor = { if ( property in object ) { return object[ property ]; } else if ( property + 'Msg' in object ) { - var p = object[ property + 'Msg' ]; + const p = object[ property + 'Msg' ]; if ( Array.isArray( p ) && p.length >= 2 ) { deprecateAutoMsg( property, p[ 0 ] ); return mw.message.apply( mw.message, p ).text(); @@ -179,7 +179,7 @@ $.wikiEditor = { autoSafeMsg: function ( object, property ) { // Accept array of possible properties, of which the first one found will be used if ( typeof property === 'object' ) { - for ( var i in property ) { + for ( const i in property ) { if ( property[ i ] in object || property[ i ] + 'Msg' in object ) { property = property[ i ]; break; @@ -189,7 +189,7 @@ $.wikiEditor = { if ( property in object ) { return object[ property ]; } else if ( property + 'Msg' in object ) { - var p = object[ property + 'Msg' ]; + const p = object[ property + 'Msg' ]; if ( Array.isArray( p ) && p.length >= 2 ) { deprecateAutoMsg( property, p[ 0 ] ); return mw.message.apply( mw.message, p ).escaped(); @@ -213,8 +213,8 @@ $.wikiEditor = { * @return {Object} */ autoLang: function ( object ) { - for ( var i = 0; i < fallbackChain.length; i++ ) { - var key = fallbackChain[ i ]; + for ( let i = 0; i < fallbackChain.length; i++ ) { + const key = fallbackChain[ i ]; if ( hasOwn.call( object, key ) ) { return object[ key ]; } @@ -233,10 +233,10 @@ $.wikiEditor = { autoIcon: function ( icon, path ) { path = path || $.wikiEditor.imgPath; - for ( var i = 0; i < fallbackChain.length; i++ ) { - var key = fallbackChain[ i ]; + for ( let i = 0; i < fallbackChain.length; i++ ) { + const key = fallbackChain[ i ]; if ( icon && hasOwn.call( icon, key ) ) { - var src = icon[ key ]; + let src = icon[ key ]; // Return a data URL immediately if ( src.slice( 0, 5 ) === 'data:' ) { @@ -264,7 +264,7 @@ $.fn.wikiEditor = function () { // The wikiEditor context is stored in the element's data, so when this function gets called again we can pick up right // where we left off - var context = $( this ).data( 'wikiEditor-context' ); + let context = $( this ).data( 'wikiEditor-context' ); // On first call, we need to set things up, but on all following calls we can skip right to the API handling if ( !context ) { @@ -303,18 +303,18 @@ $.fn.wikiEditor = function () { * or an object with members keyed with module names and valued with configuration objects. */ addModule: function ( ctx, data ) { - var modules = {}; + let modules = {}; if ( typeof data === 'string' ) { modules[ data ] = {}; } else if ( typeof data === 'object' ) { modules = data; } - for ( var module in modules ) { + for ( const module in modules ) { // Check for the existence of an available module with a matching name and a create function if ( typeof module === 'string' && typeof $.wikiEditor.modules[ module ] !== 'undefined' ) { // Extend the context's core API with this module's own API calls if ( 'api' in $.wikiEditor.modules[ module ] ) { - for ( var call in $.wikiEditor.modules[ module ].api ) { + for ( const call in $.wikiEditor.modules[ module ].api ) { // Modules may not overwrite existing API functions - first come, first serve if ( !( call in ctx.api ) ) { ctx.api[ call ] = $.wikiEditor.modules[ module ].api[ call ]; @@ -369,16 +369,16 @@ $.fn.wikiEditor = function () { return false; } } - var returnFromModules = true; + let returnFromModules = true; // Pass the event around to all modules activated on this context - for ( var module in context.modules ) { + for ( const module in context.modules ) { if ( module in $.wikiEditor.modules && 'evt' in $.wikiEditor.modules[ module ] && name in $.wikiEditor.modules[ module ].evt ) { - var ret = $.wikiEditor.modules[ module ].evt[ name ]( context, event ); + const ret = $.wikiEditor.modules[ module ].evt[ name ]( context, event ); if ( ret !== null ) { // if 1 returns false, the end result is false returnFromModules = returnFromModules && ret; @@ -493,8 +493,8 @@ $.fn.wikiEditor = function () { */ /* Preserving cursor and focus state, which will get lost due to wrapAll */ - var hasFocus = context.$textarea.is( ':focus' ); - var cursorPos = context.$textarea.textSelection( 'getCaretPosition', { startAndEnd: true } ); + const hasFocus = context.$textarea.is( ':focus' ); + const cursorPos = context.$textarea.textSelection( 'getCaretPosition', { startAndEnd: true } ); // Encapsulate the textarea with some containers for layout context.$textarea .wrapAll( $( '
' ).addClass( 'wikiEditor-ui' ) ) @@ -545,19 +545,19 @@ $.fn.wikiEditor = function () { /* API Execution */ // Since javascript gives arguments as an object, we need to convert them so they can be used more easily - var args = $.makeArray( arguments ); + const args = $.makeArray( arguments ); // Dynamically setup core extensions for modules that are required if ( args[ 0 ] === 'addModule' && typeof args[ 1 ] !== 'undefined' ) { - var modulesArg = args[ 1 ]; + let modulesArg = args[ 1 ]; if ( typeof modulesArg !== 'object' ) { modulesArg = {}; modulesArg[ args[ 1 ] ] = ''; } - for ( var m in modulesArg ) { + for ( const m in modulesArg ) { if ( m in $.wikiEditor.modules ) { // Activate all required core extensions on context - for ( var extension in $.wikiEditor.extensions ) { + for ( const extension in $.wikiEditor.extensions ) { if ( $.wikiEditor.isRequired( $.wikiEditor.modules[ m ], extension ) && context.extensions.indexOf( extension ) === -1 @@ -574,7 +574,7 @@ $.fn.wikiEditor = function () { // There would need to be some arguments if the API is being called if ( args.length > 0 ) { // Handle API calls - var callArg = args.shift(); + const callArg = args.shift(); if ( callArg in context.api ) { context.api[ callArg ]( context, args[ 0 ] || {} ); } diff --git a/modules/jquery.wikiEditor.toolbar.config.js b/modules/jquery.wikiEditor.toolbar.config.js index aca3335d..6b42b53f 100644 --- a/modules/jquery.wikiEditor.toolbar.config.js +++ b/modules/jquery.wikiEditor.toolbar.config.js @@ -3,7 +3,7 @@ * * @private */ -var configData = require( './data.json' ), +let configData = require( './data.json' ), fileNamespace = mw.config.get( 'wgFormattedNamespaces' )[ 6 ], specialCharacterGroups = require( 'mediawiki.language.specialCharacters' ), toolbarConfig; @@ -18,7 +18,7 @@ var configData = require( './data.json' ), */ function delink( $message ) { // dummy div to append the message to - var $div = $( '
' ); + const $div = $( '
' ); $div.append( $message ); $div.find( 'a' ).attr( 'href', '#' ); diff --git a/modules/jquery.wikiEditor.toolbar.js b/modules/jquery.wikiEditor.toolbar.js index 325ac05f..a27a5c03 100644 --- a/modules/jquery.wikiEditor.toolbar.js +++ b/modules/jquery.wikiEditor.toolbar.js @@ -3,7 +3,8 @@ * * @memberof module:ext.wikiEditor */ -var toolbarModule = { + +const toolbarModule = { /** * API accessible functions @@ -11,13 +12,13 @@ var toolbarModule = { api: { addToToolbar: function ( context, data ) { - for ( var type in data ) { - var i; + for ( const type in data ) { + let i; switch ( type ) { - case 'sections': - var $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ); - var $tabs = context.modules.toolbar.$toolbar.find( 'div.tabs' ); - for ( var section in data[ type ] ) { + case 'sections': { + const $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ); + const $tabs = context.modules.toolbar.$toolbar.find( 'div.tabs' ); + for ( const section in data[ type ] ) { if ( section === 'main' || section === 'secondary' ) { // Section context.modules.toolbar.$toolbar.prepend( @@ -37,27 +38,29 @@ var toolbarModule = { ); } break; - case 'groups': + } + case 'groups': { if ( !( 'section' in data ) ) { continue; } - var $section = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section' ); - for ( var group in data[ type ] ) { + const $section = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section' ); + for ( const group in data[ type ] ) { // Group $section.append( toolbarModule.fn.buildGroup( context, group, data[ type ][ group ] ) ); } break; - case 'tools': + } + case 'tools': { if ( !( 'section' in data && 'group' in data ) ) { continue; } - var $group = context.modules.toolbar.$toolbar.find( + const $group = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section ' + 'div[rel="' + data.group + '"].group' ); - for ( var tool in data[ type ] ) { + for ( const tool in data[ type ] ) { // Tool $group.append( toolbarModule.fn.buildTool( context, tool, data[ type ][ tool ] ) ); } @@ -65,17 +68,18 @@ var toolbarModule = { $group.removeClass( 'empty' ); } break; - case 'pages': + } + case 'pages': { if ( !( 'section' in data ) ) { continue; } - var $pages = context.modules.toolbar.$toolbar.find( + const $pages = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section .pages' ); - var $index = context.modules.toolbar.$toolbar.find( + const $index = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section .index' ); - for ( var page in data[ type ] ) { + for ( const page in data[ type ] ) { // Page $pages.append( toolbarModule.fn.buildPage( context, page, data[ type ][ page ] ) ); // Index @@ -85,11 +89,12 @@ var toolbarModule = { } toolbarModule.fn.updateBookletSelection( context, data.section, $pages, $index ); break; - case 'rows': + } + case 'rows': { if ( !( 'section' in data && 'page' in data ) ) { continue; } - var $table = context.modules.toolbar.$toolbar.find( + const $table = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section ' + 'div[rel="' + data.page + '"].page table' ); @@ -98,15 +103,16 @@ var toolbarModule = { $table.append( toolbarModule.fn.buildRow( context, data.rows[ i ] ) ); } break; - case 'characters': + } + case 'characters': { if ( !( 'section' in data && 'page' in data ) ) { continue; } - var $characters = context.modules.toolbar.$toolbar.find( + const $characters = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section ' + 'div[rel="' + data.page + '"].page div' ); - var actions = $characters.data( 'actions' ); + const actions = $characters.data( 'actions' ); for ( i = 0; i < data.characters.length; i++ ) { // Character $characters.append( @@ -125,6 +131,7 @@ var toolbarModule = { ); } break; + } default: break; } } @@ -132,9 +139,9 @@ var toolbarModule = { removeFromToolbar: function ( context, data ) { if ( typeof data.section === 'string' ) { // Section - var tab = 'div.tabs span[rel="' + data.section + '"].tab'; - var target = 'div[rel="' + data.section + '"].section'; - var group = null; + const tab = 'div.tabs span[rel="' + data.section + '"].tab'; + let target = 'div[rel="' + data.section + '"].section'; + let group = null; if ( typeof data.group === 'string' ) { // Toolbar group target += ' div[rel="' + data.group + '"].group'; @@ -146,7 +153,7 @@ var toolbarModule = { } } else if ( typeof data.page === 'string' ) { // Booklet page - var index = target + ' div.index div[rel="' + data.page + '"]'; + const index = target + ' div.index div[rel="' + data.page + '"]'; target += ' div.pages div[rel="' + data.page + '"].page'; if ( typeof data.character === 'string' ) { // Character @@ -171,7 +178,7 @@ var toolbarModule = { context.modules.toolbar.$toolbar.find( target ).remove(); // Hide empty groups if ( group ) { - var $group = context.modules.toolbar.$toolbar.find( group ); + const $group = context.modules.toolbar.$toolbar.find( group ); if ( $group.children().length === 0 ) { $group.addClass( 'empty' ); } @@ -209,18 +216,18 @@ var toolbarModule = { doAction: function ( context, action ) { switch ( action.type ) { case 'replace': - case 'encapsulate': + case 'encapsulate': { if ( context.$textarea.prop( 'readonly' ) ) { break; } - var parts = { + const parts = { pre: $.wikiEditor.autoMsg( action.options, 'pre' ), peri: $.wikiEditor.autoMsg( action.options, 'peri' ), post: $.wikiEditor.autoMsg( action.options, 'post' ) }; - var replace = action.type === 'replace'; + let replace = action.type === 'replace'; if ( 'regex' in action.options && 'regexReplace' in action.options ) { - var selection = context.$textarea.textSelection( 'getSelection' ); + const selection = context.$textarea.textSelection( 'getSelection' ); if ( selection !== '' && action.options.regex.test( selection ) ) { parts.peri = selection.replace( action.options.regex, action.options.regexReplace ); @@ -233,6 +240,7 @@ var toolbarModule = { Object.assign( {}, action.options, parts, { replace: replace } ) ); break; + } case 'callback': if ( typeof action.execute === 'function' ) { action.execute( context ); @@ -246,15 +254,15 @@ var toolbarModule = { } }, buildGroup: function ( context, id, group ) { - var $group = $( '
' ).attr( { class: 'group group-' + id, rel: id } ), + const $group = $( '
' ).attr( { class: 'group group-' + id, rel: id } ), label = $.wikiEditor.autoMsg( group, 'label' ); if ( label ) { $( '' ).addClass( 'label' ).text( label ).appendTo( $group ); } - var empty = true; + let empty = true; if ( 'tools' in group ) { - for ( var tool in group.tools ) { - var $tool = toolbarModule.fn.buildTool( context, tool, group.tools[ tool ] ); + for ( const tool in group.tools ) { + const $tool = toolbarModule.fn.buildTool( context, tool, group.tools[ tool ] ); if ( $tool ) { // Consider a group with only hidden tools empty as well // .is( ':visible' ) always returns false because tool is not attached to the DOM yet @@ -270,25 +278,25 @@ var toolbarModule = { }, buildTool: function ( context, id, tool ) { if ( 'filters' in tool ) { - for ( var i = 0; i < tool.filters.length; i++ ) { + for ( let i = 0; i < tool.filters.length; i++ ) { if ( $( tool.filters[ i ] ).length === 0 ) { return null; } } } - var label = $.wikiEditor.autoMsg( tool, 'label' ); + const label = $.wikiEditor.autoMsg( tool, 'label' ); switch ( tool.type ) { case 'button': - case 'toggle': - var $button; + case 'toggle': { + let $button; if ( tool.oouiIcon ) { - var config = { + const config = { framed: false, classes: [ 'tool' ], icon: tool.oouiIcon, title: label }; - var oouiButton; + let oouiButton; if ( tool.type === 'button' ) { oouiButton = new OO.ui.ButtonWidget( config ); } else if ( tool.type === 'toggle' ) { @@ -308,7 +316,7 @@ var toolbarModule = { } ) .text( label ); if ( tool.icon ) { - var icon = $.wikiEditor.autoIcon( + const icon = $.wikiEditor.autoIcon( tool.icon, $.wikiEditor.imgPath + 'toolbar/' ); @@ -364,14 +372,15 @@ var toolbarModule = { } } return $button; - case 'select': - var menuId = 'menu-' + Date.now(); - var $select = $( '
' ) + } + case 'select': { + const menuId = 'menu-' + Date.now(); + const $select = $( '
' ) .attr( { rel: id, class: 'tool tool-select' } ); - var $options = $( '
' ).addClass( 'options' ); + const $options = $( '
' ).addClass( 'options' ); if ( 'list' in tool ) { - for ( var option in tool.list ) { - var optionLabel = $.wikiEditor.autoMsg( tool.list[ option ], 'label' ); + for ( const option in tool.list ) { + const optionLabel = $.wikiEditor.autoMsg( tool.list[ option ], 'label' ); $options.append( $( '' ) .data( 'action', tool.list[ option ].action ) @@ -416,9 +425,9 @@ var toolbarModule = { e.type === 'click' || e.type === 'keydown' && e.key === 'Enter' ) { - var $opts = $( this ).data( 'options' ); + const $opts = $( this ).data( 'options' ); // eslint-disable-next-line no-jquery/no-class-state - var canShowOptions = !$opts.closest( '.tool-select' ).hasClass( 'options-shown' ); + const canShowOptions = !$opts.closest( '.tool-select' ).hasClass( 'options-shown' ); $opts.closest( '.tool-select' ).toggleClass( 'options-shown', canShowOptions ); $( this ).attr( 'aria-expanded', canShowOptions.toString() ); e.preventDefault(); @@ -428,9 +437,10 @@ var toolbarModule = { ); $select.append( $( '
' ).addClass( 'menu' ).append( $options ) ); return $select; - case 'element': + } + case 'element': { // A raw 'element' type can be {htmlString|Element|Text|Array|jQuery|OO.ui.HTMLSnippet|function}. - var $element; + let $element; if ( tool.element instanceof OO.ui.HtmlSnippet ) { $element = tool.element.toString(); } else if ( typeof tool.element === 'function' ) { @@ -441,12 +451,13 @@ var toolbarModule = { return $( '
' ) .attr( { rel: id, class: 'tool tool-element' } ) .append( $element ); + } default: return null; } }, buildBookmark: function ( context, id, page ) { - var label = $.wikiEditor.autoMsg( page, 'label' ); + const label = $.wikiEditor.autoMsg( page, 'label' ); return $( '
' ) .text( label ) .attr( { @@ -465,7 +476,7 @@ var toolbarModule = { $( this ) .addClass( 'current' ) .siblings().removeClass( 'current' ); - var section = $( this ).parent().parent().attr( 'rel' ); + const section = $( this ).parent().parent().attr( 'rel' ); $.cookie( 'wikiEditor-' + $( this ).data( 'context' ).instance + '-booklet-' + section + '-page', $( this ).attr( 'rel' ), @@ -477,7 +488,7 @@ var toolbarModule = { } ); }, buildPage: function ( context, id, page, deferLoad ) { - var $page = $( '
' ).attr( { + const $page = $( '
' ).attr( { class: 'page page-' + id, rel: id } ); @@ -491,11 +502,11 @@ var toolbarModule = { return $page; }, reallyBuildPage: function ( context, id, page, $page ) { - var i; + let i; switch ( page.layout ) { - case 'table': + case 'table': { $page.addClass( 'page-table' ); - var html = ''; + let html = ''; if ( 'headings' in page ) { html += toolbarModule.fn.buildHeading( context, page.headings ); } @@ -506,10 +517,11 @@ var toolbarModule = { } $page.html( '' + html + '
' ); break; - case 'characters': + } + case 'characters': { $page.addClass( 'page-characters' ); - var $characters = $( '
' ).data( 'context', context ).data( 'actions', {} ); - var actions = $characters.data( 'actions' ); + const $characters = $( '
' ).data( 'context', context ).data( 'actions', {} ); + const actions = $characters.data( 'actions' ); if ( 'language' in page ) { $characters.attr( 'lang', page.language ); } @@ -522,7 +534,7 @@ var toolbarModule = { $characters.attr( 'dir', 'ltr' ); } if ( 'characters' in page ) { - html = ''; + let html = ''; for ( i = 0; i < page.characters.length; i++ ) { html += toolbarModule.fn.buildCharacter( page.characters[ i ], actions ); } @@ -547,18 +559,19 @@ var toolbarModule = { } $page.append( $characters ); break; + } } }, buildHeading: function ( context, headings ) { - var html = ''; - for ( var i = 0; i < headings.length; i++ ) { + let html = ''; + for ( let i = 0; i < headings.length; i++ ) { html += '' + $.wikiEditor.autoSafeMsg( headings[ i ], [ 'html', 'text' ] ) + ''; } return '' + html + ''; }, buildRow: function ( context, row ) { - var html = ''; - for ( var cell in row ) { + let html = ''; + for ( const cell in row ) { // FIXME: This currently needs to use the "unsafe" .text() message because it embeds raw HTML // in the messages (as used exclusively by the 'help' toolbar panel). html += '' + @@ -595,7 +608,7 @@ var toolbarModule = { if ( character && 'action' in character && 'label' in character ) { actions[ character.label ] = character.action; // eslint-disable-next-line mediawiki/msg-doc - var title = character.titleMsg ? mw.msg( character.titleMsg ) : character.title; + const title = character.titleMsg ? mw.msg( character.titleMsg ) : character.title; return mw.html.element( 'span', { rel: character.label, title: title || false }, @@ -607,12 +620,12 @@ var toolbarModule = { return ''; }, buildTab: function ( context, id, section ) { - var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); + const selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); // Re-save cookie if ( selected !== null ) { $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section', selected, { expires: 30, path: '/' } ); } - var $link = + const $link = $( '' ) .addClass( selected === id ? 'current' : null ) .addClass( 'skin-invert' ) @@ -647,10 +660,10 @@ var toolbarModule = { $( elem ).attr( 'aria-pressed', 'false' ); } } ); - var $sections = $( this ).data( 'context' ).$ui.find( '.sections' ); - var $section = $sections.find( '.section-' + $( this ).parent().attr( 'rel' ) ); + const $sections = $( this ).data( 'context' ).$ui.find( '.sections' ); + const $section = $sections.find( '.section-' + $( this ).parent().attr( 'rel' ) ); // eslint-disable-next-line no-jquery/no-class-state - var show = !$section.hasClass( 'section-visible' ); + const show = !$section.hasClass( 'section-visible' ); $sections.find( '.section-visible' ) .removeClass( 'section-visible' ) .addClass( 'section-hidden' ); @@ -686,13 +699,13 @@ var toolbarModule = { .append( $link ); }, buildSection: function ( context, id, section ) { - var $section = $( '
' ).attr( { + const $section = $( '
' ).attr( { class: section.type + ' section section-' + id, rel: id, id: 'wikiEditor-section-' + id } ); - var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); - var show = selected === id; + const selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); + const show = selected === id; toolbarModule.fn.reallyBuildSection( context, id, section, $section, section.deferLoad ); @@ -707,29 +720,30 @@ var toolbarModule = { reallyBuildSection: function ( context, id, section, $section, deferLoad ) { context.$textarea.trigger( 'wikiEditor-toolbar-buildSection-' + $section.attr( 'rel' ), [ section ] ); switch ( section.type ) { - case 'toolbar': + case 'toolbar': { if ( 'groups' in section ) { - for ( var group in section.groups ) { + for ( const group in section.groups ) { $section.append( toolbarModule.fn.buildGroup( context, group, section.groups[ group ] ) ); } } break; - case 'booklet': - var $pages = $( '
' ) + } + case 'booklet': { + const $pages = $( '
' ) .addClass( 'pages' ) .attr( { tabindex: '0', role: 'listbox' } ) .on( 'keydown', ( event ) => { - var $selected = $pages.children().filter( function () { + const $selected = $pages.children().filter( function () { return $( this ).css( 'display' ) !== 'none'; } ); $.wikiEditor.modules.toolbar.fn.handleKeyDown( $selected.children().first(), event, $pages ); } ); - var $index = $( '
' ) + const $index = $( '
' ) .addClass( 'index' ) .attr( { tabindex: '0', @@ -739,7 +753,7 @@ var toolbarModule = { $.wikiEditor.modules.toolbar.fn.handleKeyDown( $index, event, $index ); } ); if ( 'pages' in section ) { - for ( var page in section.pages ) { + for ( const page in section.pages ) { $pages.append( toolbarModule.fn.buildPage( context, page, section.pages[ page ], deferLoad ) ); @@ -751,16 +765,17 @@ var toolbarModule = { $section.append( $index, $pages ); toolbarModule.fn.updateBookletSelection( context, id, $pages, $index ); break; + } } }, updateBookletSelection: function ( context, id, $pages, $index ) { - var cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page', + let cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page', selected = $.cookie( cookie ); // Re-save cookie if ( selected !== null ) { $.cookie( cookie, selected, { expires: 30, path: '/' } ); } - var $selectedIndex = $index.find( '*[rel="' + selected + '"]' ); + let $selectedIndex = $index.find( '*[rel="' + selected + '"]' ); if ( $selectedIndex.length === 0 ) { $selectedIndex = $index.children().eq( 0 ); selected = $selectedIndex.attr( 'rel' ); @@ -771,10 +786,10 @@ var toolbarModule = { $selectedIndex.addClass( 'current' ); }, build: function ( context, config ) { - var $tabs = $( '
' ).addClass( 'tabs' ).appendTo( context.modules.toolbar.$toolbar ), + const $tabs = $( '
' ).addClass( 'tabs' ).appendTo( context.modules.toolbar.$toolbar ), $sections = $( '
' ).addClass( 'sections' ).appendTo( context.modules.toolbar.$toolbar ); context.modules.toolbar.$toolbar.append( $( '
' ).css( 'clear', 'both' ) ); - for ( var section in config ) { + for ( const section in config ) { if ( section === 'main' || section === 'secondary' ) { context.modules.toolbar.$toolbar.prepend( toolbarModule.fn.buildSection( context, section, config[ section ] ) @@ -793,13 +808,13 @@ var toolbarModule = { }, ctrlShortcuts: {}, setupShortcuts: function ( context ) { - var platform = $.client.profile().platform; - var platformModifier = platform === 'mac' ? 'metaKey' : 'ctrlKey'; - var otherModifier = platform === 'mac' ? 'ctrlKey' : 'metaKey'; + const platform = $.client.profile().platform; + const platformModifier = platform === 'mac' ? 'metaKey' : 'ctrlKey'; + const otherModifier = platform === 'mac' ? 'ctrlKey' : 'metaKey'; context.$textarea.on( 'keydown', ( e ) => { // Check if the primary modifier key is pressed and that others aren't - var target = e[ platformModifier ] && !e[ otherModifier ] && !e.altKey && !e.shiftKey && + const target = e[ platformModifier ] && !e[ otherModifier ] && !e.altKey && !e.shiftKey && toolbarModule.fn.ctrlShortcuts[ e.which ]; if ( target ) { e.preventDefault(); @@ -808,12 +823,12 @@ var toolbarModule = { } ); }, handleKeyDown: function ( $element, event, $parent ) { - var $currentItem = $element.find( '.wikiEditor-character-highlighted' ), + const $currentItem = $element.find( '.wikiEditor-character-highlighted' ), optionOffset = $parent.find( '.wikiEditor-character-highlighted' ).offset(), optionTop = optionOffset ? optionOffset.top : 0, selectTop = $parent.offset().top; - var $nextItem; + let $nextItem; switch ( event.keyCode ) { // Up arrow case 38: diff --git a/modules/realtimepreview/ErrorLayout.js b/modules/realtimepreview/ErrorLayout.js index 678c91c3..d7dd4001 100644 --- a/modules/realtimepreview/ErrorLayout.js +++ b/modules/realtimepreview/ErrorLayout.js @@ -10,8 +10,8 @@ function ErrorLayout( config ) { config = config || {}; ErrorLayout.super.call( this, config ); - var $image = $( '
' ).addClass( 'ext-WikiEditor-image-realtimepreview-error' ); - var $title = $( '

' ).text( mw.msg( 'wikieditor-realtimepreview-error' ) ); + const $image = $( '
' ).addClass( 'ext-WikiEditor-image-realtimepreview-error' ); + const $title = $( '

' ).text( mw.msg( 'wikieditor-realtimepreview-error' ) ); this.$message = $( '
' ).addClass( 'ext-WikiEditor-realtimepreview-error-msg' ); this.reloadButton = new OO.ui.ButtonWidget( { icon: 'reload', diff --git a/modules/realtimepreview/ManualWidget.js b/modules/realtimepreview/ManualWidget.js index 776b0dee..81df6d29 100644 --- a/modules/realtimepreview/ManualWidget.js +++ b/modules/realtimepreview/ManualWidget.js @@ -6,7 +6,7 @@ * @param {OO.ui.ButtonWidget} reloadHoverButton */ function ManualWidget( realtimePreview, reloadHoverButton ) { - var config = { + const config = { classes: [ 'ext-WikiEditor-ManualWidget' ], $element: $( '' ) }; @@ -25,9 +25,9 @@ function ManualWidget( realtimePreview, reloadHoverButton ) { this.reloadHoverButton = reloadHoverButton; // UI elements. - var $reloadLabel = $( '' ) + const $reloadLabel = $( '' ) .text( mw.msg( 'wikieditor-realtimepreview-manual' ) ); - var $reloadButton = $( '' ) + const $reloadButton = $( '' ) .addClass( 'ext-WikiEditor-realtimepreview-manual-reload' ) .text( mw.msg( 'wikieditor-realtimepreview-reload' ) ); this.connect( realtimePreview, { diff --git a/modules/realtimepreview/RealtimePreview.js b/modules/realtimepreview/RealtimePreview.js index 1c71872f..162bcc3f 100644 --- a/modules/realtimepreview/RealtimePreview.js +++ b/modules/realtimepreview/RealtimePreview.js @@ -1,8 +1,8 @@ -var ResizingDragBar = require( './ResizingDragBar.js' ); -var TwoPaneLayout = require( './TwoPaneLayout.js' ); -var ErrorLayout = require( './ErrorLayout.js' ); -var ManualWidget = require( './ManualWidget.js' ); -var localStorage = require( 'mediawiki.storage' ).local; +const ResizingDragBar = require( './ResizingDragBar.js' ); +const TwoPaneLayout = require( './TwoPaneLayout.js' ); +const ErrorLayout = require( './ErrorLayout.js' ); +const ManualWidget = require( './ManualWidget.js' ); +const localStorage = require( 'mediawiki.storage' ).local; /** * @class @@ -18,7 +18,7 @@ function RealtimePreview() { // @todo This shouldn't be required, but the preview element is added in PHP // and can have attributes with values (such as `dir`) that aren't easily accessible from here, // and we need to duplicate here what Live Preview does in core. - var $previewContent = $( '#wikiPreview .mw-content-ltr, #wikiPreview .mw-content-rtl' ).first().clone(); + const $previewContent = $( '#wikiPreview .mw-content-ltr, #wikiPreview .mw-content-rtl' ).first().clone(); this.$previewNode = $( '
' ) .addClass( 'ext-WikiEditor-realtimepreview-preview' ) .attr( 'tabindex', '1' ) // T317108 @@ -80,16 +80,16 @@ function RealtimePreview() { */ RealtimePreview.prototype.getToolbarButton = function ( context ) { this.context = context; - var $uiText = context.$ui.find( '.wikiEditor-ui-text' ); + const $uiText = context.$ui.find( '.wikiEditor-ui-text' ); // Fix the height of the textarea, before adding a resizing bar below it. - var height = context.$textarea.height(); + const height = context.$textarea.height(); $uiText.css( 'height', height + 'px' ); context.$textarea.removeAttr( 'rows cols' ); context.$textarea.addClass( 'ext-WikiEditor-realtimepreview-textbox' ); // Add the resizing bar. - var bottomDragBar = new ResizingDragBar( { isEW: false } ); + const bottomDragBar = new ResizingDragBar( { isEW: false } ); $uiText.after( bottomDragBar.$element ); // Create and configure the toolbar button. @@ -156,13 +156,13 @@ RealtimePreview.prototype.saveUserPref = function () { * @private */ RealtimePreview.prototype.toggle = function ( saveUserPref ) { - var $uiText = this.context.$ui.find( '.wikiEditor-ui-text' ); - var $textarea = this.context.$textarea; - var $form = $textarea.parents( 'form' ); + const $uiText = this.context.$ui.find( '.wikiEditor-ui-text' ); + const $textarea = this.context.$textarea; + const $form = $textarea.parents( 'form' ); // Save the current cursor selection and focused element. - var cursorPos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true } ); - var focusedElement = document.activeElement; + const cursorPos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true } ); + const focusedElement = document.activeElement; // Remove or add the layout to the DOM. if ( this.enabled ) { @@ -254,8 +254,8 @@ RealtimePreview.prototype.isScreenWideEnough = function () { * @private */ RealtimePreview.prototype.enableFeatureWhenScreenIsWideEnough = function () { - var previewButtonIsVisible = this.button.isVisible(); - var isScreenWideEnough = this.isScreenWideEnough(); + const previewButtonIsVisible = this.button.isVisible(); + const isScreenWideEnough = this.isScreenWideEnough(); if ( !isScreenWideEnough && previewButtonIsVisible ) { this.button.toggle( false ); this.reloadButton.setDisabled( true ); @@ -301,7 +301,7 @@ RealtimePreview.prototype.checkResponseTimes = function ( time ) { return; } - var totalResponseTime = this.responseTimes.reduce( ( a, b ) => a + b, 0 ); + const totalResponseTime = this.responseTimes.reduce( ( a, b ) => a + b, 0 ); if ( ( totalResponseTime / this.responseTimes.length ) > this.configData.realtimeDisableDuration ) { this.inManualMode = true; @@ -325,8 +325,8 @@ RealtimePreview.prototype.doRealtimePreview = function ( forceUpdate ) { return; } - var $textareaNode = $( '#wpTextbox1' ); - var wikitext = $textareaNode.textSelection( 'getContents' ); + const $textareaNode = $( '#wpTextbox1' ); + const wikitext = $textareaNode.textSelection( 'getContents' ); if ( !forceUpdate && wikitext === this.lastWikitext ) { // Wikitext unchanged, no update necessary return; @@ -339,14 +339,14 @@ RealtimePreview.prototype.doRealtimePreview = function ( forceUpdate ) { this.reloadButton.setDisabled( true ); this.manualWidget.setDisabled( true ); this.errorLayout.toggle( false ); - var loadingSelectors = this.pagePreview.getLoadingSelectors() + const loadingSelectors = this.pagePreview.getLoadingSelectors() // config.$previewNode below is a clone of #wikiPreview with a different selector! // config.$diffNode defaults to #wikiDiff but is disabled below and never updated. .filter( ( selector ) => selector.indexOf( '#wiki' ) !== 0 ); loadingSelectors.push( '.ext-WikiEditor-realtimepreview-preview' ); loadingSelectors.push( '.ext-WikiEditor-ManualWidget' ); loadingSelectors.push( '.ext-WikiEditor-realtimepreview-ErrorLayout' ); - var time = Date.now(); + const time = Date.now(); this.pagePreview.doPreview( { $textareaNode: $textareaNode, diff --git a/modules/realtimepreview/ResizingDragBar.js b/modules/realtimepreview/ResizingDragBar.js index b039cf3b..27ace43a 100644 --- a/modules/realtimepreview/ResizingDragBar.js +++ b/modules/realtimepreview/ResizingDragBar.js @@ -12,15 +12,15 @@ function ResizingDragBar( config ) { }, config ); ResizingDragBar.super.call( this, config ); - var classNameDir = 'ext-WikiEditor-ResizingDragBar-' + ( config.isEW ? 'ew' : 'ns' ); + const classNameDir = 'ext-WikiEditor-ResizingDragBar-' + ( config.isEW ? 'ew' : 'ns' ); // Possible class names: // * ext-WikiEditor-ResizingDragBar-ew // * ext-WikiEditor-ResizingDragBar-ns this.$element.addClass( classNameDir ); - var resizingDragBar = this; + const resizingDragBar = this; // Determine the horizontal direction to move (flexbox automatically reverses but the offset direction doesn't). - var rtlFactor = config.isEW && OO.ui.Element.static.getDir( document ) === 'rtl' ? -1 : 1; + const rtlFactor = config.isEW && OO.ui.Element.static.getDir( document ) === 'rtl' ? -1 : 1; this.$element.on( 'mousedown', ( eventMousedown ) => { if ( eventMousedown.button !== ResizingDragBar.static.MAIN_MOUSE_BUTTON ) { // If not the main mouse (e.g. left) button, ignore. @@ -29,19 +29,19 @@ function ResizingDragBar( config ) { // Prevent selecting (or anything else) when dragging over other parts of the page. $( document ).on( 'selectstart.' + classNameDir, false ); // Set up parameter names. - var xOrY = config.isEW ? 'pageX' : 'pageY'; - var widthOrHeight = config.isEW ? 'width' : 'height'; - var lastOffset = eventMousedown[ xOrY ]; + const xOrY = config.isEW ? 'pageX' : 'pageY'; + const widthOrHeight = config.isEW ? 'width' : 'height'; + let lastOffset = eventMousedown[ xOrY ]; // Handle the actual dragging. $( document ).on( 'mousemove.' + classNameDir, ( eventMousemove ) => { // Initial width or height of the pane. - var startSize = resizingDragBar.getResizedPane()[ widthOrHeight ](); + const startSize = resizingDragBar.getResizedPane()[ widthOrHeight ](); // Current position of the mouse (relative to page, not viewport). - var newOffset = eventMousemove[ xOrY ]; + const newOffset = eventMousemove[ xOrY ]; // Distance the mouse has moved. - var change = rtlFactor * ( lastOffset - newOffset ); + const change = rtlFactor * ( lastOffset - newOffset ); // Set the new size of the pane, and tell others about it. - var newSize = Math.max( startSize - change, ResizingDragBar.static.MIN_PANE_SIZE ); + const newSize = Math.max( startSize - change, ResizingDragBar.static.MIN_PANE_SIZE ); resizingDragBar.getResizedPane().css( widthOrHeight, newSize ); // Save the new starting point of the mouse, from which to calculate the next move. lastOffset = newOffset; diff --git a/modules/realtimepreview/TwoPaneLayout.js b/modules/realtimepreview/TwoPaneLayout.js index 3f63bb10..f964c6c2 100644 --- a/modules/realtimepreview/TwoPaneLayout.js +++ b/modules/realtimepreview/TwoPaneLayout.js @@ -1,4 +1,4 @@ -var ResizingDragBar = require( './ResizingDragBar.js' ); +const ResizingDragBar = require( './ResizingDragBar.js' ); /** * This is a layout with two resizable panes. @@ -14,7 +14,7 @@ function TwoPaneLayout( config ) { TwoPaneLayout.super.call( this, config ); this.$pane1 = $( '
' ).addClass( 'ext-WikiEditor-twopanes-pane1' ); - var middleDragBar = new ResizingDragBar( { isEW: true } ); + const middleDragBar = new ResizingDragBar( { isEW: true } ); this.$pane2 = $( '
' ).addClass( 'ext-WikiEditor-twopanes-pane2' ); this.$element.addClass( 'ext-WikiEditor-twopanes-TwoPaneLayout' ); diff --git a/modules/realtimepreview/init.js b/modules/realtimepreview/init.js index d294e27c..34d156ed 100644 --- a/modules/realtimepreview/init.js +++ b/modules/realtimepreview/init.js @@ -6,8 +6,8 @@ mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) { return; } - var RealtimePreview = require( './RealtimePreview.js' ); - var realtimePreview = new RealtimePreview(); + const RealtimePreview = require( './RealtimePreview.js' ); + const realtimePreview = new RealtimePreview(); $textarea.wikiEditor( 'addToToolbar', { section: 'secondary', group: 'default', diff --git a/tests/qunit/ext.wikiEditor.toolbar.test.js b/tests/qunit/ext.wikiEditor.toolbar.test.js index ae0d7ecf..ee709c42 100644 --- a/tests/qunit/ext.wikiEditor.toolbar.test.js +++ b/tests/qunit/ext.wikiEditor.toolbar.test.js @@ -1,6 +1,6 @@ QUnit.module( 'ext.wikiEditor.toolbar', ( hooks ) => { hooks.beforeEach( function () { - var $target = $( '