jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/374401 )
Change subject: build: Replace jshint and jscs with eslint; bump everything else ...................................................................... build: Replace jshint and jscs with eslint; bump everything else grunt-banana-checker 0.4.0 → 0.6.0 grunt-jsonlint 1.0.4 → 1.1.0 grunt-stylelint ^0.7.0 → 0.8.0 Change-Id: I331b05e963d8b61296f3633b409b914ee2399d38 --- A .eslintrc.json D .jscsrc D .jshintignore D .jshintrc M Gruntfile.js M modules/ext.wikispeech.js M package.json A tests/qunit/.eslintrc.json M tests/qunit/ext.wikispeech.highlighter.test.js M tests/qunit/ext.wikispeech.test.js 10 files changed, 86 insertions(+), 115 deletions(-) Approvals: jenkins-bot: Verified Jforrester: Looks good to me, approved diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..3931182 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,11 @@ +{ + "extends": "wikimedia", + "env": { + "browser": true, + "jquery": true + }, + "globals": { + "mediaWiki": false + }, + "rules": {} +} diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index a031ea4..0000000 --- a/.jscsrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "preset": "wikimedia" -} \ No newline at end of file diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index b512c09..0000000 --- a/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 95facb2..0000000 --- a/.jshintrc +++ /dev/null @@ -1,28 +0,0 @@ -{ - "predef": [ - "mediaWiki", - "jQuery", - "QUnit", - "sinon", - "JSON" - ], - - // Enforcing - "bitwise": true, - "eqeqeq": true, - "es3": true, - "latedef": true, - "noarg": true, - "nonew": true, - "undef": true, - "unused": true, - "strict": false, - - // Environment - "browser": true, - - "globals": { - "mw": false, - "$": false - } -} diff --git a/Gruntfile.js b/Gruntfile.js index f2d6f3b..1ded3a3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,27 +1,19 @@ -/*jshint node:true */ +/* eslint-env node, es6 */ module.exports = function ( grunt ) { var conf = grunt.file.readJSON( 'extension.json' ); - grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-eslint' ); + grunt.loadNpmTasks( 'grunt-stylelint' ); grunt.loadNpmTasks( 'grunt-jsonlint' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); - grunt.loadNpmTasks( 'grunt-jscs' ); - grunt.loadNpmTasks( 'grunt-stylelint' ); grunt.initConfig( { - jshint: { - options: { - jshintrc: true - }, + eslint: { all: [ '*.js', 'modules/**/*.js', 'tests/**/*.js' ] }, - jscs: { - src: '<%= jshint.all %>' - }, - banana: conf.MessagesDirs, jsonlint: { all: [ '*.json', @@ -30,6 +22,7 @@ '!vendor/**' ] }, + banana: conf.MessagesDirs, stylelint: { options: { formatter: 'string', @@ -46,8 +39,7 @@ grunt.registerTask( 'test', [ - 'jshint', - 'jscs', + 'eslint', 'jsonlint', 'banana', 'stylelint' diff --git a/modules/ext.wikispeech.js b/modules/ext.wikispeech.js index edbc8e6..d7d9e86 100644 --- a/modules/ext.wikispeech.js +++ b/modules/ext.wikispeech.js @@ -270,7 +270,7 @@ $audio = $( currentUtterance.audio ); utterance.audio.play(); mw.wikispeech.highlighter.highlightUtterance( utterance ); - if ( self.audioIsReady( $audio ) ) { + if ( self.audioIsReady( $audio ) ) { $( '#ext-wikispeech-loader' ).css( 'visibility', 'hidden' ); } else { self.addCanPlayListener( $audio ); @@ -786,11 +786,10 @@ url: serverUrl, method: 'POST', data: { - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers lang: mw.config.get( 'wgPageContentLanguage' ), + // eslint-disable-next-line camelcase input_type: 'text', input: text - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers }, dataType: 'json', beforeSend: function ( jqXHR, settings ) { diff --git a/package.json b/package.json index 96800d8..40c15f1 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,14 @@ "test": "grunt test" }, "devDependencies": { + "eslint-config-wikimedia": "0.5.0", + "grunt-eslint": "20.0.0", "grunt": "1.0.1", - "grunt-banana-checker": "0.4.0", - "grunt-contrib-jshint": "0.11.3", - "grunt-jscs": "2.1.0", - "grunt-jsonlint": "1.0.4", - "grunt-stylelint": "^0.7.0", + "grunt-banana-checker": "0.6.0", + "grunt-jsonlint": "1.1.0", + "grunt-stylelint": "0.8.0", "qunitjs": "1.23.1", "stylelint": "7.8.0", - "stylelint-config-wikimedia": "^0.4.1" + "stylelint-config-wikimedia": "0.4.1" } } diff --git a/tests/qunit/.eslintrc.json b/tests/qunit/.eslintrc.json new file mode 100644 index 0000000..e74d833 --- /dev/null +++ b/tests/qunit/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": "../../.eslintrc.json", + "env": { + "qunit": true + }, + "globals": { + "sinon": false + }, + "rules": {} +} diff --git a/tests/qunit/ext.wikispeech.highlighter.test.js b/tests/qunit/ext.wikispeech.highlighter.test.js index 2c0c23a..bef08dd 100644 --- a/tests/qunit/ext.wikispeech.highlighter.test.js +++ b/tests/qunit/ext.wikispeech.highlighter.test.js @@ -356,4 +356,4 @@ 'Utterance <b>zero</b>. <span class="ext-wikispeech-highlight-sentence"><span class="ext-wikispeech-highlight-word">Utterance</span> one.</span>' ); } ); -} )( mediaWiki, jQuery ); +}( mediaWiki, jQuery ) ); diff --git a/tests/qunit/ext.wikispeech.test.js b/tests/qunit/ext.wikispeech.test.js index 18883f7..6e2d61e 100644 --- a/tests/qunit/ext.wikispeech.test.js +++ b/tests/qunit/ext.wikispeech.test.js @@ -114,9 +114,7 @@ ); } ); - // jscs:disable validateQuoteMarks - QUnit.test( "prepareUtterance(): don't request if waiting for response", function ( assert ) { - // jscs:enable validateQuoteMarks + QUnit.test( 'prepareUtterance(): do not request if waiting for response', function ( assert ) { assert.expect( 1 ); sinon.spy( mw.wikispeech.wikispeech, 'loadAudio' ); utterances[ 0 ].waitingForResponse = true; @@ -129,9 +127,7 @@ ); } ); - // jscs:disable validateQuoteMarks - QUnit.test( "prepareUtterance(): don't load audio if already loaded", function ( assert ) { - // jscs:enable validateQuoteMarks + QUnit.test( 'prepareUtterance(): do not load audio if already loaded', function ( assert ) { assert.expect( 1 ); utterances[ 0 ].audio = $( '<audio></audio>' ) .attr( 'src', 'http://server.url/audio' ); @@ -160,9 +156,7 @@ ); } ); - // jscs:disable validateQuoteMarks - QUnit.test( "prepareUtterance(): don't prepare next audio if it doesn't exist", function ( assert ) { - // jscs:enable validateQuoteMarks + QUnit.test( 'prepareUtterance(): do not prepare next audio if it does not exist', function ( assert ) { assert.expect( 1 ); sinon.spy( mw.wikispeech.wikispeech, 'prepareUtterance' ); mw.wikispeech.wikispeech.prepareUtterance( utterances[ 1 ] ); @@ -361,23 +355,14 @@ ); } ); - QUnit.test( 'Clicking play/stop button', function ( assert ) { - testClickButton( - assert, - 'playOrStop', - '#ext-wikispeech-play-stop-button' - ); - } ); - /** * Test that clicking a button calls the correct function. * * @param {QUnit.assert} assert * @param {string} functionName Name of the function that should * be called. - * @param {string} buttonId Id of the button that is clicked. + * @param {string} buttonSelector Id of the button that is clicked. */ - function testClickButton( assert, functionName, buttonSelector ) { assert.expect( 1 ); sinon.stub( mw.wikispeech.wikispeech, functionName ); @@ -390,6 +375,14 @@ true ); } + + QUnit.test( 'Clicking play/stop button', function ( assert ) { + testClickButton( + assert, + 'playOrStop', + '#ext-wikispeech-play-stop-button' + ); + } ); QUnit.test( 'Clicking skip ahead sentence button', function ( assert ) { testClickButton( @@ -436,9 +429,23 @@ assert.strictEqual( mw.wikispeech.wikispeech.stop.called, true ); } ); - QUnit.test( 'Pressing keyboard shortcut for play/stop', function ( assert ) { - testKeyboardShortcut( assert, 'playOrStop', 32, 'c' ); - } ); + /** + * Create a keydown event. + * + * @param {number} keyCode The key code for the event. + * @param {string} modifiers A string that defines the + * modifiers. The characters c, a and s triggers the modifiers + * for ctrl, alt and shift, respectively. + * @return {jQuery} The created keydown event. + */ + function createKeydownEvent( keyCode, modifiers ) { + var event = $.Event( 'keydown' ); + event.which = keyCode; + event.ctrlKey = modifiers.indexOf( 'c' ) >= 0; + event.altKey = modifiers.indexOf( 'a' ) >= 0; + event.shiftKey = modifiers.indexOf( 's' ) >= 0; + return event; + } /** * Test that a keyboard event triggers the correct function. @@ -451,7 +458,6 @@ * modifiers. The characters c, a and s triggers the modifiers * for ctrl, alt and shift, respectively. */ - function testKeyboardShortcut( assert, functionName, keyCode, modifiers ) { assert.expect( 1 ); utterances[ 0 ].audio = $( '<audio></audio>' ).get( 0 ); @@ -466,24 +472,9 @@ assert.strictEqual( mw.wikispeech.wikispeech[ functionName ].called, true ); } - /** - * Create a keydown event. - * - * @param {number} keyCode The key code for the event. - * @param {string} modifiers A string that defines the - * modifiers. The characters c, a and s triggers the modifiers - * for ctrl, alt and shift, respectively. - * @return {jQuery} The created keydown event. - */ - - function createKeydownEvent( keyCode, modifiers ) { - var event = $.Event( 'keydown' ); - event.which = keyCode; - event.ctrlKey = modifiers.indexOf( 'c' ) >= 0; - event.altKey = modifiers.indexOf( 'a' ) >= 0; - event.shiftKey = modifiers.indexOf( 's' ) >= 0; - return event; - } + QUnit.test( 'Pressing keyboard shortcut for play/stop', function ( assert ) { + testKeyboardShortcut( assert, 'playOrStop', 32, 'c' ); + } ); // TODO: T174799 // QUnit.test( 'Pressing keyboard shortcut for skipping ahead sentence', function ( assert ) { @@ -646,6 +637,20 @@ assert.strictEqual( nextUtterance, null ); } ); + /** + * Add a mw-content-text div element to the QUnit fixture. + * + * @param {string} html The HTML added to the div element. + */ + + function addContentText( html ) { + $( '#qunit-fixture' ).append( + $( '<div></div>' ) + .attr( 'id', 'mw-content-text' ) + .html( html ) + ); + } + QUnit.test( 'addTokens()', function ( assert ) { var tokens; @@ -702,20 +707,6 @@ ); } ); - /** - * Add a mw-content-text div element to the QUnit fixture. - * - * @param {string} html The HTML added to the div element. - */ - - function addContentText( html ) { - $( '#qunit-fixture' ).append( - $( '<div></div>' ) - .attr( 'id', 'mw-content-text' ) - .html( html ) - ); - } - QUnit.test( 'addTokens(): handle tag', function ( assert ) { var tokens; @@ -752,7 +743,7 @@ assert.strictEqual( utterances[ 0 ].tokens[ 0 ].startOffset, 0 ); assert.strictEqual( utterances[ 0 ].tokens[ 0 ].endOffset, 8 ); assert.deepEqual( - utterances[ 0 ].tokens[ 1 ].items + utterances[ 0 ].tokens[ 1 ].items, [ utterances[ 0 ].content[ 0 ] ] ); assert.strictEqual( utterances[ 0 ].tokens[ 1 ].startOffset, 10 ); @@ -1326,8 +1317,8 @@ } QUnit.test( 'playUtterance(): audio element is not ready and the spinner is displayed', function ( assert ) { - var $audio; - $audio = utterances[ 0 ].audio; + // var $audio; + // $audio = utterances[ 0 ].audio; assert.expect( 1 ); setUpSpinner( false ); assert.deepEqual( $( '#ext-wikispeech-loader' ).css( 'visibility' ), 'visible' ); @@ -1361,4 +1352,4 @@ assert.deepEqual( $( '#ext-wikispeech-loader' ).css( 'visibility' ), 'visible' ); } ); -} )( mediaWiki, jQuery ); +}( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/374401 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I331b05e963d8b61296f3633b409b914ee2399d38 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/Wikispeech Gerrit-Branch: master Gerrit-Owner: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Lokal Profil <lokal.pro...@gmail.com> Gerrit-Reviewer: Sebastian Berlin (WMSE) <sebastian.ber...@wikimedia.se> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits