Esanders has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/333807 )

Change subject: build: Replace jshint/jscs with eslint
......................................................................

build: Replace jshint/jscs with eslint

Change-Id: Iaf792a6a4952439bc2ae6ff693dcbfee6218c47e
---
A .eslintrc.json
D .jscsrc
D .jshintignore
D .jshintrc
M Gruntfile.js
M package.json
M resources/ext.tmh.OgvJsSupport.js
M resources/ext.tmh.embedPlayerIframe.js
M resources/ext.tmh.player.js
M resources/ext.tmh.transcodetable.js
M resources/mw.MediaWikiPlayerSupport.js
M resources/mw.PopUpThumbVideo.js
12 files changed, 74 insertions(+), 117 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TimedMediaHandler 
refs/changes/07/333807/1

diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..a29fd88
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,11 @@
+{
+       "extends": "wikimedia",
+       "env": {
+               "browser": true,
+               "jquery": true
+       },
+       "globals": {
+               "mediaWiki": false,
+               "OO": false
+       }
+}
diff --git a/.jscsrc b/.jscsrc
deleted file mode 100644
index 4cf5f8b..0000000
--- a/.jscsrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-       "preset": "wikimedia",
-       "requireVarDeclFirst": null,
-       "requireMultipleVarDecl": null
-}
diff --git a/.jshintignore b/.jshintignore
deleted file mode 100644
index 0b19ceb..0000000
--- a/.jshintignore
+++ /dev/null
@@ -1,8 +0,0 @@
-MwEmbedModules
-resources/videojs
-resources/videojs-resolution-switcher
-resources/videojs-responsive-layout
-resources/mw-info-button
-
-node_modules
-vendor
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index a2125aa..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-       /* Common */
-
-       // Enforcing
-       "camelcase": true,
-       "curly": true,
-       "eqeqeq": true,
-       "immed": true,
-       "latedef": "nofunc",
-       "newcap": true,
-       "noarg": true,
-       "noempty": true,
-       "nonew": true,
-       "quotmark": "single",
-       "trailing": true,
-       "undef": true,
-       "unused": true,
-       // Legacy
-       "onevar": true,
-
-       /* Local */
-
-       // Enforcing
-       "bitwise": true,
-       "es3": true,
-       // Relaxing
-       "laxbreak": true,
-       "smarttabs": true,
-       "multistr": true,
-       // Environment
-       "browser": true,
-       // Legacy
-       "nomen": true,
-
-       "globals": {
-               "mediaWiki": false,
-               "jQuery": false,
-               "OGVVersion": false,
-               "OGVSupport": false,
-               "OGVPlayer": false,
-               "OGVLoader": false,
-               "videojs": false
-       }
-}
diff --git a/Gruntfile.js b/Gruntfile.js
index 2089bd6..32fe844 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,18 +1,14 @@
-/*jshint node:true */
+/* eslint-env node */
 module.exports = function ( grunt ) {
        grunt.loadNpmTasks( 'grunt-banana-checker' );
        grunt.loadNpmTasks( 'grunt-contrib-copy' );
-       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+       grunt.loadNpmTasks( 'grunt-eslint' );
        grunt.loadNpmTasks( 'grunt-exec' );
-       grunt.loadNpmTasks( 'grunt-jscs' );
        grunt.loadNpmTasks( 'grunt-jsonlint' );
        grunt.loadNpmTasks( 'grunt-patcher' );
 
        grunt.initConfig( {
-               jshint: {
-                       options: {
-                               jshintrc: true
-                       },
+               eslint: {
                        all: [
                                '**/*.js',
                                '!MwEmbedModules/**',
@@ -20,9 +16,6 @@
                                '!resources/mw-info-button/**',
                                '!node_modules/**'
                        ]
-               },
-               jscs: {
-                       src: '<%= jshint.all %>'
                },
                banana: {
                        all: 'i18n/',
@@ -104,6 +97,6 @@
        } );
 
        grunt.registerTask( 'update-videojs', [ 'exec:npm-update-videojs', 
'copy:video.js', 'copy:videojs-resolution-switcher', 'copy:videojs-ogvjs', 
'copy:videojs-responsive-layout', 'copy:videojs-replay', 'patch:video.js' ] );
-       grunt.registerTask( 'test', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] 
);
+       grunt.registerTask( 'test', [ 'eslint', 'jsonlint', 'banana' ] );
        grunt.registerTask( 'default', 'test' );
 };
diff --git a/package.json b/package.json
index 4662f84..4bfc1db 100644
--- a/package.json
+++ b/package.json
@@ -5,14 +5,13 @@
   },
   "devDependencies": {
     "grunt": "1.0.1",
+    "eslint-config-wikimedia": "0.3.0",
     "grunt-banana-checker": "0.5.0",
     "grunt-contrib-copy": "^0.8.2",
+    "grunt-eslint": "19.0.0",
     "grunt-exec": "1.0.1",
-    "grunt-contrib-jshint": "1.0.0",
     "grunt-jsonlint": "1.1.0",
-    "grunt-jscs": "3.0.1",
     "grunt-patcher": "1.0.0",
-    "jscs-preset-wikimedia": "~1.0.0",
     "video.js": "^5.12.2",
     "videojs-ogvjs": "^1.3.1",
     "videojs-replay": "^1.1.0",
diff --git a/resources/ext.tmh.OgvJsSupport.js 
b/resources/ext.tmh.OgvJsSupport.js
index 7cd2097..1e306a6 100644
--- a/resources/ext.tmh.OgvJsSupport.js
+++ b/resources/ext.tmh.OgvJsSupport.js
@@ -1,3 +1,4 @@
+/* global OGVLoader */
 ( function ( $, mw ) {
 
        var support = mw.OgvJsSupport = {
@@ -75,10 +76,11 @@
                 * @return {AudioContext|null}
                 */
                initAudioContext: function () {
-                       var AudioContext = window.AudioContext || 
window.webkitAudioContext;
+                       var context, node,
+                               AudioContext = window.AudioContext || 
window.webkitAudioContext;
                        if ( AudioContext ) {
-                               var context = new AudioContext(),
-                                       node;
+                               context = new AudioContext();
+
                                if ( context.createScriptProcessor ) {
                                        node = context.createScriptProcessor( 
1024, 0, 2 );
                                } else if ( context.createJavaScriptNode ) {
diff --git a/resources/ext.tmh.embedPlayerIframe.js 
b/resources/ext.tmh.embedPlayerIframe.js
index fbef29f..e5ccc95 100644
--- a/resources/ext.tmh.embedPlayerIframe.js
+++ b/resources/ext.tmh.embedPlayerIframe.js
@@ -1,14 +1,14 @@
 ( function ( mw, $ ) {
-       // only enable fullscreen if enabled in iframe
-       mw.setConfig( 'EmbedPlayer.EnableFullscreen', 
document.fullscreenEnabled || document.webkitFullscreenEnabled || 
document.mozFullScreenEnabled || false );
-
-       mw.setConfig( 'EmbedPlayer.IsIframeServer', true );
-
        var iframePlayerInit = function () {
                // rewrite player, normally done by mw.EmbedPlayer.loader upon 
wikipage.content hook
                var $players = $( mw.config.get( 'EmbedPlayer.RewriteSelector' 
) );
                $players.embedPlayer();
        };
 
+       // only enable fullscreen if enabled in iframe
+       mw.setConfig( 'EmbedPlayer.EnableFullscreen', 
document.fullscreenEnabled || document.webkitFullscreenEnabled || 
document.mozFullScreenEnabled || false );
+
+       mw.setConfig( 'EmbedPlayer.IsIframeServer', true );
+
        $( iframePlayerInit );
 }( mediaWiki, jQuery ) );
diff --git a/resources/ext.tmh.player.js b/resources/ext.tmh.player.js
index c01ac32..924171f 100755
--- a/resources/ext.tmh.player.js
+++ b/resources/ext.tmh.player.js
@@ -1,4 +1,4 @@
-
+/* global videojs */
 ( function ( $, mw, videojs ) {
        var globalConfig, audioConfig, playerConfig;
 
@@ -15,7 +15,7 @@
                plugins: {
                        videoJsResolutionSwitcher: {
                                sourceOrder: true,
-                               customSourcePicker: function ( player, 
sources/*, label */ ) {
+                               customSourcePicker: function ( player, 
sources/* , label */ ) {
                                        // Resolution switcher gets confused by 
preload=none on ogv.js
                                        if ( player.preload() === 'none' ) {
                                                player.preload( 'metadata' );
@@ -47,11 +47,13 @@
         * Load video players for a jQuery collection
         */
        function loadVideoPlayer() {
-               var videoplayer, $videoplayer, $collection = this;
+               var $collection = this;
 
                function loadSinglePlayer( index ) {
-                       videoplayer = this;
-                       $videoplayer = $( this );
+                       var i, l, preload, resolutions, playerHeight, 
defaultRes,
+                               videoplayer = this,
+                               $videoplayer = $( this );
+
                        if ( $videoplayer.closest( '.video-js' ).size() ) {
                                // This player has already been transformed.
                                return;
@@ -63,7 +65,7 @@
                                playerConfig = $.extend( true, {}, 
playerConfig, audioConfig );
                        }
                        // Future interactions go faster if we've preloaded a 
little
-                       var preload = 'metadata';
+                       preload = 'metadata';
                        if ( !mw.OgvJsSupport.canPlayNatively() ) {
                                // ogv.js currently is expensive to start up:
                                // https://github.com/brion/ogv.js/issues/438
@@ -74,19 +76,20 @@
                                preload = 'none';
                        }
 
-                       var resolutions = [];
+                       resolutions = [];
 
                        $( videoplayer ).attr( {
                                preload: preload
                        } ).find( 'source' ).each( function () {
                                // FIXME would be better if we can configure 
the plugin to make use of our preferred attributes
-                               var $source = $( this ),
+                               var matches,
+                                       $source = $( this ),
                                        transcodeKey = $source.data( 
'transcodekey' ),
                                        res = parseInt( $source.data( 'height' 
), 10 ),
                                        label = $source.data( 'shorttitle' );
 
                                if ( transcodeKey ) {
-                                       var matches = transcodeKey.match( 
/^(\d+)p\./ );
+                                       matches = transcodeKey.match( 
/^(\d+)p\./ );
                                        if ( matches ) {
                                                // Video derivative of fixed 
size.
                                                res = parseInt( matches[ 1 ], 
10 );
@@ -104,12 +107,12 @@
 
                        // Pick the first resolution at least the size of the 
player,
                        // unless they're all too small.
-                       var playerHeight = $( videoplayer ).height();
+                       playerHeight = $( videoplayer ).height();
                        resolutions.sort( function ( a, b ) {
                                return a - b;
                        } );
-                       var defaultRes;
-                       for ( var i = 0; i < resolutions.length; i++ ) {
+                       defaultRes;
+                       for ( i = 0, l = resolutions.length; i < l; i++ ) {
                                defaultRes = resolutions[ i ];
                                if ( defaultRes >= playerHeight ) {
                                        break;
@@ -152,4 +155,4 @@
                $( '#videoContainer video,#videoContainer audio' 
).loadVideoPlayer();
        } );
 
-} )( jQuery, mediaWiki, videojs );
+}( jQuery, mediaWiki, videojs ) );
diff --git a/resources/ext.tmh.transcodetable.js 
b/resources/ext.tmh.transcodetable.js
index f73d9ba..602be4a 100644
--- a/resources/ext.tmh.transcodetable.js
+++ b/resources/ext.tmh.transcodetable.js
@@ -1,16 +1,15 @@
 /*!
 * Javascript to support transcode table on image page
 */
-/*global OO*/
 ( function ( mw, $, OO ) {
        $( document ).ready( function () {
                function errorPopup( event ) {
                        var tKey = $( event.target ).attr( 'data-transcodekey' 
),
                                message = $( [
-                                               document.createTextNode( 
mw.msg( 'timedmedia-reset-explanation' ) ),
-                                               document.createElement( 'br' ),
-                                               document.createElement( 'br' ),
-                                               document.createTextNode( 
mw.msg( 'timedmedia-reset-areyousure' ) )
+                                       document.createTextNode( mw.msg( 
'timedmedia-reset-explanation' ) ),
+                                       document.createElement( 'br' ),
+                                       document.createElement( 'br' ),
+                                       document.createTextNode( mw.msg( 
'timedmedia-reset-areyousure' ) )
                                ] );
 
                        event.preventDefault();
diff --git a/resources/mw.MediaWikiPlayerSupport.js 
b/resources/mw.MediaWikiPlayerSupport.js
index 3993913..06316ba 100644
--- a/resources/mw.MediaWikiPlayerSupport.js
+++ b/resources/mw.MediaWikiPlayerSupport.js
@@ -17,12 +17,14 @@
 
        /**
         * Closure function wraps mediaWiki embedPlayer bindings
+        *
+        * @param {Object} embedPlayer
         */
        mw.addMediaWikiPlayerSupport = function ( embedPlayer ) {
                var apiTitleKey, apiProvider, $creditsCache = false;
                // Set some local variables:
                if ( !embedPlayer[ 'data-mwtitle' ] ) {
-                       return false;
+                       return;
                } else {
                        apiTitleKey = embedPlayer[ 'data-mwtitle' ];
                        // legacy support ( set as attribute )
@@ -57,18 +59,18 @@
                                        for ( i in data.query.pages ) {
                                                if ( i === '-1' ) {
                                                        callback( false );
-                                                       return ;
+                                                       return;
                                                }
                                                page = data.query.pages[ i ];
                                        }
                                } else {
                                        callback( false );
-                                       return ;
+                                       return;
                                }
                                // Make sure we have imageinfo:
                                if ( !page.imageinfo || !page.imageinfo[ 0 ] ) {
                                        callback( false );
-                                       return ;
+                                       return;
                                }
                                imageinfo = page.imageinfo[ 0 ];
 
@@ -150,7 +152,7 @@
                                        $links.each( function ( i, authorLink ) 
{
                                                $authorLink = $( authorLink );
                                                authUrl = $authorLink.attr( 
'href' );
-                                               authUrl = mw.absoluteUrl( 
authUrl,  articleUrl );
+                                               authUrl = mw.absoluteUrl( 
authUrl, articleUrl );
                                                $authorLink.attr( 'href', 
authUrl );
                                        } );
                                }
@@ -167,7 +169,7 @@
 
                                // remove white space:
                                $date.find( 'br' ).remove();
-                               $creditLine.append(  $( '<br />' ),
+                               $creditLine.append( $( '<br />' ),
                                        mw.msg( 'mwe-embedplayer-credit-date', 
$date.html() )
                                );
                        }
@@ -198,6 +200,9 @@
 
                /**
                 * Issues a request to populate the credits box
+                *
+                * @param {jQuery} $target
+                * @param {Function} callback
                 */
                function showCredits( $target, callback ) {
                        var apiUrl, fileTitle, request;
@@ -238,7 +243,7 @@
                $( embedPlayer ).bindQueueCallback( 'showCredits', function ( 
$target, callback ) {
                        if ( $target.data( 'playerId' ) !== embedPlayer.id ) {
                                // bad event trigger
-                               return ;
+                               return;
                        }
                        // Only request the credits once:
                        showCredits( $target, callback );
@@ -246,17 +251,18 @@
 
                // Show credits on clip complete:
                $( embedPlayer ).bind( 'onEndedDone', function ( event, id ) {
+                       var cb;
                        if ( embedPlayer.id !== id ) {
                                // possible event trigger error. ( skip )
-                               return ;
+                               return;
                        }
                        // dont show credits for audio elements,
                        // seek to begining instead
                        if ( embedPlayer.isAudio() ) {
                                embedPlayer.setCurrentTime( 0 );
-                               return ;
+                               return;
                        }
-                       var cb = embedPlayer.controlBuilder;
+                       cb = embedPlayer.controlBuilder;
                        cb.checkMenuOverlay();
                        cb.showMenuOverlay();
                        cb.showMenuItem( 'credits' );
@@ -264,7 +270,7 @@
 
                $( embedPlayer ).bind( 'showInlineDownloadLink', function () {
                        // Add recommend HTML5 player if we have non-native 
playback:
-                       if ( embedPlayer.controlBuilder.checkNativeWarning( ) ) 
{
+                       if ( embedPlayer.controlBuilder.checkNativeWarning() ) {
                                embedPlayer.controlBuilder.addWarningBinding(
                                        'EmbedPlayer.ShowNativeWarning',
                                        mw.msg( 
'mwe-embedplayer-for_best_experience',
@@ -294,12 +300,12 @@
                                // check if not already there:
                                if ( $menu.find( '.add-timed-text' ).length ) {
                                        // add text link already present
-                                       return ;
+                                       return;
                                }
 
                                pageTitle = 'TimedText:' +
                                        decodeURIComponent( 
embedPlayer.apiTitleKey ).replace( /^File:|^Image:/, '' );
-                               addTextPage =  mw.getApiProviderURL( 
apiProvider )
+                               addTextPage = mw.getApiProviderURL( apiProvider 
)
                                                                        
.replace( 'api.php', 'index.php' ) +
                                                                        
'?title=' + encodeURIComponent( pageTitle );
 
@@ -329,12 +335,13 @@
                        }
                } );
                $( mw ).bindQueueCallback( 'TimedText_LoadTextSource', function 
( source, callback ) {
+                       var apiUrl, request;
                        if ( !source.mwtitle || !source.mwprovider ) {
                                callback();
-                               return ;
+                               return;
                        }
                        // Load via api
-                       var apiUrl = mw.getApiProviderURL( source.mwprovider ),
+                       apiUrl = mw.getApiProviderURL( source.mwprovider ),
                        // Get the image page ( cache for 1 hour )
                        request = {
                                action: 'parse',
@@ -343,10 +350,10 @@
                                maxage: 3600
                        };
                        mw.getJSON( apiUrl, request, function ( data ) {
-                               if ( data && data.parse && data.parse.text &&  
data.parse.text[ '*' ] ) {
+                               if ( data && data.parse && data.parse.text && 
data.parse.text[ '*' ] ) {
                                        source.loaded = true;
                                        source.mimeType = 'text/mw-srt';
-                                       source.captions = source.getCaptions(  
data.parse.text[ '*' ] );
+                                       source.captions = source.getCaptions( 
data.parse.text[ '*' ] );
                                        callback();
                                } else {
                                        mw.log( 'Error: MediaWiki api error in 
getting timed text:', data );
@@ -356,17 +363,17 @@
                } );
 
                $( embedPlayer ).bind( 'getShareIframeSrc', function ( event, 
callback, id ) {
+                       var iframeUrl = false;
                        if ( id !== embedPlayer.id ) {
                                embedPlayer = $( '#' + id )[ 0 ];
                        }
-                       var iframeUrl = false;
                        // Do a special check for wikimediacommons provider as 
a known shared reop
                        if ( embedPlayer[ 'data-mwprovider' ] === 
'wikimediacommons' ) {
                                iframeUrl = 
'//commons.wikimedia.org/wiki/File:' + decodeURIComponent( 
embedPlayer.apiTitleKey ).replace( /^(File:|Image:)/, '' );
                        } else {
                                // use the local wiki:
                                if ( mw.config.get( 'wgServer' ) && 
mw.config.get( 'wgArticlePath' ) ) {
-                                       iframeUrl =  mw.config.get( 'wgServer' 
) +
+                                       iframeUrl = mw.config.get( 'wgServer' ) 
+
                                                mw.config.get( 'wgArticlePath' 
).replace( /\$1/, 'File:' +
                                                        decodeURIComponent( 
embedPlayer.apiTitleKey ).replace( /^(File:|Image:)/, '' ) );
                                }
diff --git a/resources/mw.PopUpThumbVideo.js b/resources/mw.PopUpThumbVideo.js
index ea0ad7a..78a814e 100644
--- a/resources/mw.PopUpThumbVideo.js
+++ b/resources/mw.PopUpThumbVideo.js
@@ -7,7 +7,7 @@
                        var link, title,
                                parent = $( this ).parent();
                        if ( parent.attr( 'videopayload' ) ) {
-                               $( this ).click( function ( /*event*/ ) {
+                               $( this ).click( function ( /* event*/ ) {
                                        var thisref = this;
 
                                        mw.loader.using( 'mw.MwEmbedSupport', 
function () {

-- 
To view, visit https://gerrit.wikimedia.org/r/333807
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaf792a6a4952439bc2ae6ff693dcbfee6218c47e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TimedMediaHandler
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to