TheDJ has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/286761

Change subject: Add replay button to video.js player
......................................................................

Add replay button to video.js player

Change-Id: Ia7cec093a153cedad12a19d92877a12a75e098f5
---
M Gruntfile.js
M TimedMediaHandler.hooks.php
M package.json
M resources/ext.tmh.player.js
A resources/videojs-replay/lang/en.js
A resources/videojs-replay/videojs-replay.css
A resources/videojs-replay/videojs-replay.js
7 files changed, 124 insertions(+), 3 deletions(-)


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

diff --git a/Gruntfile.js b/Gruntfile.js
index f894208..b1b8cd3 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -35,7 +35,7 @@
                },
                exec: {
                        'npm-update-videojs': {
-                               cmd: 'npm update video.js 
videojs-resolution-switcher videojs-ogvjs videojs-responsive-layout',
+                               cmd: 'npm update video.js 
videojs-resolution-switcher videojs-ogvjs videojs-responsive-layout 
videojs-replay',
                                callback: function ( error, stdout, stderr ) {
                                        grunt.log.write( stdout );
                                        if ( stderr ) {
@@ -80,6 +80,12 @@
                                cwd: 
'node_modules/videojs-responsive-layout/dist/',
                                src: [ '**' ],
                                dest: 'resources/videojs-responsive-layout/'
+                       },
+                       'videojs-replay': {
+                               expand: true,
+                               cwd: 'node_modules/videojs-replay/dist/',
+                               src: [ '**', '!**/*.min.js' ],
+                               dest: 'resources/videojs-replay/'
                        }
                },
                patch: {
@@ -95,7 +101,7 @@
                }
        } );
 
-       grunt.registerTask( 'update-videojs', [ 'exec:npm-update-videojs', 
'copy:video.js', 'copy:videojs-resolution-switcher', 'copy:videojs-ogvjs', 
'copy:videojs-responsive-layout', 'patch:video.js' ] );
+       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( 'default', 'test' );
 };
diff --git a/TimedMediaHandler.hooks.php b/TimedMediaHandler.hooks.php
index 81fdc3a..2f690f0 100644
--- a/TimedMediaHandler.hooks.php
+++ b/TimedMediaHandler.hooks.php
@@ -155,6 +155,14 @@
                                                        'ext.tmh.video-js',
                                                ],
                                        ],
+                               'ext.tmh.videojs-replay' => 
$baseExtensionResource + [
+                                       'scripts' => 
'resources/videojs-replay/videojs-replay.js',
+                                       'styles' => 
'resources/videojs-replay/videojs-replay.css',
+                                       'targets' => [ 'mobile', 'desktop' ],
+                                       'dependencies' => [
+                                               'ext.tmh.video-js',
+                                       ],
+                               ],
                                'ext.tmh.player' => $baseExtensionResource + [
                                                'scripts' => 
'resources/ext.tmh.player.js',
                                                'targets' => [ 'mobile', 
'desktop' ],
@@ -163,6 +171,7 @@
                                                        
'ext.tmh.videojs-resolution-switcher',
                                                        'ext.tmh.videojs-ogvjs',
                                                        
'ext.tmh.videojs-responsive-layout',
+                                                       
'ext.tmh.videojs-replay',
                                                        // 
'ext.tmh.videojs-offset',
                                                ],
                                        ],
diff --git a/package.json b/package.json
index c1ca728..86a565e 100644
--- a/package.json
+++ b/package.json
@@ -18,5 +18,8 @@
     "videojs-ogvjs": "^1.1.0",
     "videojs-resolution-switcher": "^0.4.2",
     "videojs-responsive-layout": "^1.1.0"
+  },
+  "dependencies": {
+    "videojs-replay": "^1.1.0"
   }
 }
diff --git a/resources/ext.tmh.player.js b/resources/ext.tmh.player.js
index 5e303f5..5a68d95 100755
--- a/resources/ext.tmh.player.js
+++ b/resources/ext.tmh.player.js
@@ -121,7 +121,7 @@
                                // this.on( 'play', growPlayer );
                                // this.on( 'ended', shrinkPlayer );
                                /* More custom stuff goes here */
-                       } );
+                       } ).replayButton(); // Enable the replaybutton plugin
                } );
        }
 
diff --git a/resources/videojs-replay/lang/en.js 
b/resources/videojs-replay/lang/en.js
new file mode 100644
index 0000000..ff26103
--- /dev/null
+++ b/resources/videojs-replay/lang/en.js
@@ -0,0 +1,3 @@
+videojs.addLanguage('en', {
+  "REPLAY": "Replay"
+});
\ No newline at end of file
diff --git a/resources/videojs-replay/videojs-replay.css 
b/resources/videojs-replay/videojs-replay.css
new file mode 100644
index 0000000..6baa0e7
--- /dev/null
+++ b/resources/videojs-replay/videojs-replay.css
@@ -0,0 +1 @@
+.video-js.vjs-replay .vjs-play-control:before{content:""}
diff --git a/resources/videojs-replay/videojs-replay.js 
b/resources/videojs-replay/videojs-replay.js
new file mode 100644
index 0000000..4d88fdf
--- /dev/null
+++ b/resources/videojs-replay/videojs-replay.js
@@ -0,0 +1,99 @@
+/**
+ * videojs-replay
+ * @version 1.1.0
+ * @copyright 2016 Derk-Jan Hartman
+ * @license (MIT OR Apache-2.0)
+ */
+(function(f){if(typeof exports==="object"&&typeof 
module!=="undefined"){module.exports=f()}else if(typeof 
define==="function"&&define.amd){define([],f)}else{var g;if(typeof 
window!=="undefined"){g=window}else if(typeof 
global!=="undefined"){g=global}else if(typeof 
self!=="undefined"){g=self}else{g=this}g.videojsReplay = f()}})(function(){var 
define,module,exports;return (function e(t,n,r){function 
s(o,u){if(!n[o]){if(!t[o]){var a=typeof 
require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var 
f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var 
l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return 
s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof 
require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return 
s})({1:[function(require,module,exports){
+(function (global){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 
'default': obj }; }
+
+var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof 
global !== "undefined" ? global['videojs'] : null);
+
+var _videoJs2 = _interopRequireDefault(_videoJs);
+
+// Default options for the plugin.
+var defaults = {};
+
+var addReplayClass = function addReplayClass(player) {
+  if (player.duration() !== Infinity) {
+    
player.addClass('vjs-replay').getChild('controlBar').getChild('playToggle').controlText(player.localize('Replay'));
+  }
+};
+
+var removeReplayClass = function removeReplayClass(player) {
+  var controlLabel = undefined;
+
+  if (!player.hasClass('vjs-replay')) {
+    return;
+  }
+
+  // Reset the control's label
+  if (player.paused()) {
+    controlLabel = player.localize('Play');
+  } else {
+    controlLabel = player.localize('Pause');
+  }
+  
player.removeClass('vjs-replay').getChild('controlBar').getChild('playToggle').controlText(controlLabel);
+};
+
+/**
+ * Function to invoke when the player is ready.
+ *
+ * This is a great place for your plugin to initialize itself. When this
+ * function is called, the player will have its DOM and child components
+ * in place.
+ *
+ * @function onPlayerReady
+ * @param    {Player} player
+ * @param    {Object} [options={}]
+ */
+var onPlayerReady = function onPlayerReady(player, options) {
+  player.on('ended', function () {
+    addReplayClass(player);
+  });
+  player.on('play', function () {
+    removeReplayClass(player);
+  });
+  player.on('seeking', function () {
+    removeReplayClass(player);
+  });
+};
+
+/**
+ * A video.js plugin.
+ *
+ * In the plugin function, the value of `this` is a video.js `Player`
+ * instance. You cannot rely on the player being in a "ready" state here,
+ * depending on how the plugin is invoked. This may or may not be important
+ * to you; if not, remove the wait for "ready"!
+ *
+ * @function replayButton
+ * @param    {Object} [options={}]
+ *           An object of options left to the plugin author to define.
+ */
+var replayButton = function replayButton(options) {
+  var _this = this;
+
+  this.ready(function () {
+    onPlayerReady(_this, _videoJs2['default'].mergeOptions(defaults, options));
+  });
+};
+
+// Register the plugin with video.js.
+_videoJs2['default'].plugin('replayButton', replayButton);
+
+// Include the version number.
+replayButton.VERSION = '1.1.0';
+
+exports['default'] = replayButton;
+module.exports = exports['default'];
+}).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1])(1)
+});
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia7cec093a153cedad12a19d92877a12a75e098f5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TimedMediaHandler
Gerrit-Branch: master
Gerrit-Owner: TheDJ <hartman.w...@gmail.com>

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

Reply via email to