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