diff --git a/.eslintrc.json b/.eslintrc.json index 9812d33d..8d41a48e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,10 +1,13 @@ { "root": true, "extends": [ - "wikimedia", + "wikimedia/client-es6", "wikimedia/mediawiki", "wikimedia/jquery" ], + "rules": { + "no-var": "error" + }, "env": { "browser": true, "commonjs": true diff --git a/Gruntfile.js b/Gruntfile.js index 1782cbf0..4e4b57f7 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -4,9 +4,9 @@ * @package CategoryTree */ -/* eslint-env node */ +/* eslint-env node, es6 */ module.exports = function ( grunt ) { - var conf = grunt.file.readJSON( 'extension.json' ); + const conf = grunt.file.readJSON( 'extension.json' ); grunt.loadNpmTasks( 'grunt-eslint' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); diff --git a/modules/ext.categoryTree/ext.categoryTree.js b/modules/ext.categoryTree/ext.categoryTree.js index c02e7eae..ca7dc6cc 100644 --- a/modules/ext.categoryTree/ext.categoryTree.js +++ b/modules/ext.categoryTree/ext.categoryTree.js @@ -23,8 +23,7 @@ */ ( function () { - var loadChildren, - config = require( './data.json' ); + const config = require( './data.json' ); /** * Expands a given node (loading it's children if not loaded) @@ -33,7 +32,7 @@ */ function expandNode( $link ) { // Show the children node - var $children = $link.parents( '.CategoryTreeItem' ) + const $children = $link.parents( '.CategoryTreeItem' ) .siblings( '.CategoryTreeChildren' ) .css( 'display', '' ); @@ -67,13 +66,12 @@ /** * Handles clicks on the expand buttons, and calls the appropriate function * - * @this {Element} CategoryTreeToggle * @param {jQuery.Event} e */ function handleNode( e ) { e.preventDefault(); - var $link = $( this ); + const $link = $( this ); if ( $link.attr( 'aria-expanded' ) === 'false' ) { expandNode( $link ); } else { @@ -108,22 +106,18 @@ * @param {jQuery} $link * @param {jQuery} $children */ - loadChildren = function ( $link, $children ) { - var $linkParentCTTag, ctTitle, ctMode, ctOptions; - + function loadChildren( $link, $children ) { /** * Error callback */ function error() { - var $retryLink; - - $retryLink = $( '' ) + const $retryLink = $( '' ) .text( mw.msg( 'categorytree-retry' ) ) .attr( { role: 'button', tabindex: 0 } ) - .on( 'click keypress', function ( e ) { + .on( 'click keypress', ( e ) => { if ( e.type === 'click' || e.type === 'keypress' && e.which === 13 @@ -145,14 +139,14 @@ .text( mw.msg( 'categorytree-loading' ) ) ); - $linkParentCTTag = $link.parents( '.CategoryTreeTag' ); + const $linkParentCTTag = $link.parents( '.CategoryTreeTag' ); // Element may not have a .CategoryTreeTag parent, fallback to defauls // Probably a CategoryPage (@todo: based on what?) - ctTitle = $link.attr( 'data-ct-title' ); - ctMode = $linkParentCTTag.data( 'ct-mode' ); - ctMode = typeof ctMode === 'number' ? ctMode : undefined; - ctOptions = $linkParentCTTag.attr( 'data-ct-options' ) || config.defaultCtOptions; + const ctTitle = $link.attr( 'data-ct-title' ); + const ctMode = $linkParentCTTag.data( 'ct-mode' ); + const mode = typeof ctMode === 'number' ? ctMode : undefined; + const ctOptions = $linkParentCTTag.attr( 'data-ct-options' ) || config.defaultCtOptions; // Mode and options have defaults or fallbacks, title does not. // Don't make a request if there is no title. @@ -167,11 +161,10 @@ options: ctOptions, uselang: mw.config.get( 'wgUserLanguage' ), formatversion: 2 - } ).done( function ( data ) { - var $data; - + } ).done( ( data ) => { data = data.categorytree.html; + let $data; if ( data === '' ) { $data = $( '' ).addClass( 'CategoryTreeNotice' ) // eslint-disable-next-line mediawiki/msg-doc @@ -179,7 +172,7 @@ 0: 'categorytree-no-subcategories', 10: 'categorytree-no-pages', 100: 'categorytree-no-parent-categories' - }[ ctMode ] || 'categorytree-nothing-found' ) ); + }[ mode ] || 'categorytree-nothing-found' ) ); } else { $data = $( $.parseHTML( data ) ); attachHandler( $data ); @@ -187,7 +180,7 @@ $children.empty().append( $data ); } ).fail( error ); - }; + } // Register click events mw.hook( 'wikipage.content' ).add( attachHandler ); @@ -196,7 +189,7 @@ // This is needed when wgCategoryTreeHijackPageCategories is enabled. mw.hook( 'wikipage.categories' ).add( attachHandler ); - $( function () { + $( () => { // Attach click handler for sidebar // eslint-disable-next-line no-jquery/no-global-selector attachHandler( $( '#p-categorytree-portlet' ) );