jenkins-bot has submitted this change and it was merged.
Change subject: Update videojs-ogvjs tech plugin to v1.1.1
......................................................................
Update videojs-ogvjs tech plugin to v1.1.1
Change-Id: I2501b0a996a77f8455715738aecb5aa225eced2d
---
M Gruntfile.js
M package.json
M resources/videojs-ogvjs/videojs-ogvjs.js
D resources/videojs-ogvjs/videojs-ogvjs.min.js
4 files changed, 121 insertions(+), 145 deletions(-)
Approvals:
TheDJ: Looks good to me, approved
jenkins-bot: Verified
diff --git a/Gruntfile.js b/Gruntfile.js
index acadfd5..f894208 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -66,7 +66,7 @@
'videojs-ogvjs': {
expand: true,
cwd: 'node_modules/videojs-ogvjs/dist/',
- src: [ '**' ],
+ src: [ '**', '!**/*.min.js' ],
dest: 'resources/videojs-ogvjs/'
},
'videojs-resolution-switcher': {
diff --git a/package.json b/package.json
index 9d93202..c1ca728 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"grunt-patch": "^0.1.7",
"jscs-preset-wikimedia": "~1.0.0",
"video.js": "^5.8.8",
- "videojs-ogvjs": "^1.0.6",
+ "videojs-ogvjs": "^1.1.0",
"videojs-resolution-switcher": "^0.4.2",
"videojs-responsive-layout": "^1.1.0"
}
diff --git a/resources/videojs-ogvjs/videojs-ogvjs.js
b/resources/videojs-ogvjs/videojs-ogvjs.js
index 38d32dd..8ac48f8 100644
--- a/resources/videojs-ogvjs/videojs-ogvjs.js
+++ b/resources/videojs-ogvjs/videojs-ogvjs.js
@@ -1,7 +1,7 @@
/**
* videojs-ogvjs
- * @version 1.0.6
- * @copyright 2015 Derk-Jan Hartman
+ * @version 1.1.1
+ * @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.videojsOgvjs = 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){
@@ -57,13 +57,22 @@
_get(Object.getPrototypeOf(Ogvjs.prototype), 'constructor',
this).call(this, options, ready);
+ // Set initial state of player
+ this.el_.src = options.source.src;
+ Ogvjs.setIfAvailable(this.el_, 'autoplay', options.autoplay);
+ Ogvjs.setIfAvailable(this.el_, 'loop', options.loop);
+ Ogvjs.setIfAvailable(this.el_, 'poster', options.poster);
+ Ogvjs.setIfAvailable(this.el_, 'preload', options.preload);
+
this.triggerReady();
}
/*
- * Check if Ogvjs video is supported by this browser/device
+ * Only set a value on an element if it has that property
*
- * @return {Boolean}
+ * @param {Element} el
+ * @param {String} name
+ * @param value
*/
/**
@@ -75,7 +84,7 @@
_createClass(Ogvjs, [{
key: 'dispose',
value: function dispose() {
- // Ogvjs.disposeMediaElement(this.el_);
+ this.el_.removeEventListener('framecallback', this.onFrameUpdate);
_get(Object.getPrototypeOf(Ogvjs.prototype), 'dispose', this).call(this);
}
@@ -98,12 +107,15 @@
var el = new _OGVPlayer2['default'](options);
- // simulate timeupdate events, needed for subtitles
- // @todo switch this to native timeupdate event when available upstream
- this.lastTime = 0;
- el.addEventListener('framecallback', this.onFrameUpdate.bind(this));
- el.src = this.options_.source.src;
+ if (!el.hasOwnProperty('preload')) {
+ // simulate timeupdate events for older ogv.js versions pre 1.1
versions
+ // needed for subtitles. preload is only defined in 1.1 and later,
+ this.lastTime = 0;
+ el.addEventListener('framecallback', this.onFrameUpdate.bind(this));
+ }
+
el.className += ' vjs-tech';
+ options.tag = el;
return el;
}
@@ -218,7 +230,7 @@
}, {
key: 'volume',
value: function volume() {
- return this.el_.volume ? this.el_.volume : 1;
+ return this.el_.hasOwnProperty('volume') ? this.el_.volume : 1;
}
/**
@@ -230,7 +242,7 @@
}, {
key: 'setVolume',
value: function setVolume(percentAsDecimal) {
- if (this.el_.volume) {
+ if (this.el_.hasOwnProperty('volume')) {
this.el_.volume = percentAsDecimal;
}
}
@@ -244,7 +256,7 @@
}, {
key: 'muted',
value: function muted() {
- return this.el_.muted ? this.el_.muted : false;
+ return this.el_.muted;
}
/**
@@ -256,9 +268,7 @@
}, {
key: 'setMuted',
value: function setMuted(muted) {
- if (this.el_.muted) {
- this.el_.muted = muted;
- }
+ this.el_.muted = !!muted;
}
/**
@@ -283,73 +293,6 @@
key: 'height',
value: function height() {
return this.el_.offsetHeight;
- }
-
- /**
- * Get if there is fullscreen support
- *
- * @return {Boolean}
- * @method supportsFullScreen
- */
- }, {
- key: 'supportsFullScreen',
- value: function supportsFullScreen() {
- if (typeof this.el_.webkitEnterFullScreen === 'function') {
- var userAgent = window.navigator.userAgent;
-
- // Seems to be broken in Chromium/Chrome && Safari in Leopard
- if (/Android/.test(userAgent) || !/Chrome|Mac OS X
10.5/.test(userAgent)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Request to enter fullscreen
- *
- * @method enterFullScreen
- */
- }, {
- key: 'enterFullScreen',
- value: function enterFullScreen() {
- var video = this.el_;
-
- if ('webkitDisplayingFullscreen' in video) {
- this.one('webkitbeginfullscreen', function () {
- this.one('webkitendfullscreen', function () {
- this.trigger('fullscreenchange', { isFullscreen: false });
- });
-
- this.trigger('fullscreenchange', { isFullscreen: true });
- });
- }
-
- if (video.paused && video.networkState <= video.HAVE_METADATA) {
- // attempt to prime the video element for programmatic access
- // this isn't necessary on the desktop but shouldn't hurt
- this.el_.play();
-
- // playing and pausing synchronously during the transition to
fullscreen
- // can get iOS ~6.1 devices into a play/pause loop
- this.setTimeout(function () {
- video.pause();
- video.webkitEnterFullScreen();
- }, 0);
- } else {
- video.webkitEnterFullScreen();
- }
- }
-
- /**
- * Request to exit fullscreen
- *
- * @method exitFullScreen
- */
- }, {
- key: 'exitFullScreen',
- value: function exitFullScreen() {
- this.el_.webkitExitFullScreen();
}
/**
@@ -438,7 +381,11 @@
* @return {String}
* @method preload
*/
- // preload() { return this.el_.preload; }
+ }, {
+ key: 'preload',
+ value: function preload() {
+ return this.el_.preload || 'none';
+ }
/**
* Set preload attribute
@@ -446,63 +393,92 @@
* @param {String} val Value for preload attribute
* @method setPreload
*/
- // setPreload(val) { this.el_.preload = val; }
+ }, {
+ key: 'setPreload',
+ value: function setPreload(val) {
+ if (this.el_.hasOwnProperty('preload')) {
+ this.el_.preload = val;
+ }
+ }
/**
* Get autoplay attribute
*
- * @return {String}
+ * @return {Boolean}
* @method autoplay
*/
- // autoplay() { return this.el_.autoplay; }
+ }, {
+ key: 'autoplay',
+ value: function autoplay() {
+ return this.el_.autoplay || false;
+ }
/**
* Set autoplay attribute
*
- * @param {String} val Value for preload attribute
+ * @param {Boolean} val Value for preload attribute
* @method setAutoplay
*/
- // setAutoplay(val) { this.el_.autoplay = val; }
+ }, {
+ key: 'setAutoplay',
+ value: function setAutoplay(val) {
+ if (this.el_.hasOwnProperty('autoplay')) {
+ this.el_.autoplay = !!val;
+ return;
+ }
+ }
/**
* Get controls attribute
*
- * @return {String}
+ * @return {Boolean}
* @method controls
*/
}, {
key: 'controls',
value: function controls() {
- return this.el_.controls;
+ return this.el_controls || false;
}
/**
* Set controls attribute
*
- * @param {String} val Value for controls attribute
+ * @param {Boolean} val Value for controls attribute
* @method setControls
*/
}, {
key: 'setControls',
value: function setControls(val) {
- this.el_.controls = !!val;
+ if (this.el_.hasOwnProperty('controls')) {
+ this.el_.controls = !!val;
+ }
}
/**
* Get loop attribute
*
- * @return {String}
+ * @return {Boolean}
* @method loop
*/
- // loop() { return this.el_.loop; }
+ }, {
+ key: 'loop',
+ value: function loop() {
+ return this.el_.loop || false;
+ }
/**
* Set loop attribute
*
- * @param {String} val Value for loop attribute
+ * @param {Boolean} val Value for loop attribute
* @method setLoop
*/
- // setLoop(val) { this.el_.loop = val; }
+ }, {
+ key: 'setLoop',
+ value: function setLoop(val) {
+ if (this.el_.hasOwnProperty('loop')) {
+ this.el_.loop = !!val;
+ }
+ }
/**
* Get error value
@@ -562,7 +538,11 @@
* @return {Boolean}
* @method defaultMuted
*/
- // defaultMuted() { return this.el_.defaultMuted; }
+ }, {
+ key: 'defaultMuted',
+ value: function defaultMuted() {
+ return this.el_.defaultMuted || false;
+ }
/**
* Get desired speed at which the media resource is to play
@@ -570,7 +550,11 @@
* @return {Number}
* @method playbackRate
*/
- // playbackRate() { return this.el_.playbackRate; }
+ }, {
+ key: 'playbackRate',
+ value: function playbackRate() {
+ return this.el_.playbackRate || 1;
+ }
/**
* Returns a TimeRanges object that represents the ranges of the
@@ -579,7 +563,11 @@
* timeline that has been reached through normal playback
* @see
https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played
*/
- // played() { return this.el_.played; }
+ }, {
+ key: 'played',
+ value: function played() {
+ return this.el_.played;
+ }
/**
* Set desired speed at which the media resource is to play
@@ -587,7 +575,13 @@
* @param {Number} val Speed at which the media resource is to play
* @method setPlaybackRate
*/
- // setPlaybackRate(val) { this.el_.playbackRate = val; }
+ }, {
+ key: 'setPlaybackRate',
+ value: function setPlaybackRate(val) {
+ if (this.el_.hasOwnProperty('playbackRate')) {
+ this.el_.playbackRate = val;
+ }
+ }
/**
* Get the current state of network activity for the element, from
@@ -600,7 +594,11 @@
* @return {Number}
* @method networkState
*/
- // networkState() { return this.el_.networkState; }
+ }, {
+ key: 'networkState',
+ value: function networkState() {
+ return this.el_.networkState;
+ }
/**
* Get a value that expresses the current state of the element
@@ -615,7 +613,11 @@
* @return {Number}
* @method readyState
*/
- // readyState() { return this.el_.readyState; }
+ }, {
+ key: 'readyState',
+ value: function readyState() {
+ return this.el_.readyState;
+ }
/**
* Get width of video
@@ -645,6 +647,17 @@
return Ogvjs;
})(Tech);
+Ogvjs.setIfAvailable = function (el, name, value) {
+ if (el.hasOwnProperty(name)) {
+ el[name] = value;
+ }
+};
+
+/*
+ * Check if Ogvjs video is supported by this browser/device
+ *
+ * @return {Boolean}
+ */
Ogvjs.isSupported = function () {
return _OGVCompat2['default'].supported('OGVPlayer');
};
@@ -666,7 +679,9 @@
* @return {Boolean}
*/
Ogvjs.canControlVolume = function () {
- return false;
+ var p = new _OGVPlayer2['default']();
+
+ return p.hasOwnProperty('volume');
};
/*
@@ -728,38 +743,6 @@
* @type {Boolean}
*/
Ogvjs.prototype.featuresNativeTextTracks = Ogvjs.supportsNativeTextTracks();
-
-Ogvjs.disposeMediaElement = function (el) {
- if (!el) {
- return;
- }
-
- if (el.parentNode) {
- el.parentNode.removeChild(el);
- }
-
- // remove any child track or source nodes to prevent their loading
- while (el.hasChildNodes()) {
- el.removeChild(el.firstChild);
- }
-
- // remove any src reference. not setting `src=''` because that causes a
warning
- // in firefox
- el.removeAttribute('src');
-
- // force the media element to update its loading state by calling load()
- // however IE on Windows 7N has a bug that throws an error so need a
try/catch (#793)
- if (typeof el.load === 'function') {
- // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
- (function () {
- try {
- el.load();
- } catch (e) {
- // not supported
- }
- })();
- }
-};
Tech.registerTech('Ogvjs', Ogvjs);
exports['default'] = Ogvjs;
diff --git a/resources/videojs-ogvjs/videojs-ogvjs.min.js
b/resources/videojs-ogvjs/videojs-ogvjs.min.js
deleted file mode 100644
index 705f44d..0000000
--- a/resources/videojs-ogvjs/videojs-ogvjs.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * videojs-ogvjs
- * @version 1.0.6
- * @copyright 2015 Derk-Jan Hartman
- * @license (MIT OR Apache-2.0)
- */
-!function(e){if("object"==typeof exports&&"undefined"!=typeof
module)module.exports=e();else if("function"==typeof
define&&define.amd)define([],e);else{var t;t="undefined"!=typeof
window?window:"undefined"!=typeof global?global:"undefined"!=typeof
self?self:this,t.videojsOgvjs=e()}}(function(){return function
e(t,n,r){function o(u,l){if(!n[u]){if(!t[u]){var a="function"==typeof
require&&require;if(!l&&a)return a(u,!0);if(i)return i(u,!0);var s=new
Error("Cannot find module '"+u+"'");throw s.code="MODULE_NOT_FOUND",s}var
f=n[u]={exports:{}};t[u][0].call(f.exports,function(e){var n=t[u][1][e];return
o(n?n:e)},f,f.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof
require&&require,u=0;u<r.length;u++)o(r[u]);return
o}({1:[function(e,t,n){(function(e){"use strict";function r(e){return
e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new
TypeError("Cannot call a class as a function")}function
i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression
must either be null or a function, not "+typeof
t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(n,"__esModule",{value:!0});var
u=function(){function e(e,t){for(var n=0;n<t.length;n++){var
r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in
r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return
function(t,n,r){return
n&&e(t.prototype,n),r&&e(t,r),t}}(),l=function(e,t,n){for(var r=!0;r;){var
o=e,i=t,u=n;r=!1,null===o&&(o=Function.prototype);var
l=Object.getOwnPropertyDescriptor(o,i);if(void 0!==l){if("value"in l)return
l.value;var a=l.get;if(void 0===a)return;return a.call(u)}var
s=Object.getPrototypeOf(o);if(null===s)return;e=s,t=i,n=u,r=!0,l=s=void
0}},a="undefined"!=typeof window?window.videojs:"undefined"!=typeof
e?e.videojs:null,s=r(a),f="undefined"!=typeof
window?window.OGVCompat:"undefined"!=typeof
e?e.OGVCompat:null,c=r(f),d="undefined"!=typeof
window?window.OGVLoader:"undefined"!=typeof
e?e.OGVLoader:null,p=r(d),y="undefined"!=typeof
window?window.OGVPlayer:"undefined"!=typeof
e?e.OGVPlayer:null,h=r(y),v=s["default"].getComponent("Tech"),k=function(e){function
t(e,n){o(this,t),l(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e,n),this.triggerReady()}return
i(t,e),u(t,[{key:"dispose",value:function(){l(Object.getPrototypeOf(t.prototype),"dispose",this).call(this)}},{key:"createEl",value:function(){var
e=this.options_;if(!e.base)throw new Error("Please specify the base for the
ogv.js library");p["default"].base=e.base;var t=new h["default"](e);return
this.lastTime=0,t.addEventListener("framecallback",this.onFrameUpdate.bind(this)),t.src=this.options_.source.src,t.className+="
vjs-tech",t}},{key:"onFrameUpdate",value:function(e){var
t=.25,n=this.el_?this.el_.currentTime:this.lastTime;Math.abs(n-this.lastTime)>=t&&(this.lastTime=n,this.trigger("timeupdate"),this.trigger("durationchange"))}},{key:"play",value:function(){this.el_.play()}},{key:"pause",value:function(){this.el_.pause()}},{key:"paused",value:function(){return
this.el_.paused}},{key:"currentTime",value:function(){return
this.el_.currentTime}},{key:"setCurrentTime",value:function(e){try{this.el_.currentTime=e}catch(t){s["default"].log(t,"Video
is not ready. (Video.js)")}}},{key:"duration",value:function(){return
this.el_.duration||0}},{key:"buffered",value:function(){return
this.el_.buffered}},{key:"volume",value:function(){return
this.el_.volume?this.el_.volume:1}},{key:"setVolume",value:function(e){this.el_.volume&&(this.el_.volume=e)}},{key:"muted",value:function(){return
this.el_.muted?this.el_.muted:!1}},{key:"setMuted",value:function(e){this.el_.muted&&(this.el_.muted=e)}},{key:"width",value:function(){return
this.el_.offsetWidth}},{key:"height",value:function(){return
this.el_.offsetHeight}},{key:"supportsFullScreen",value:function(){if("function"==typeof
this.el_.webkitEnterFullScreen){var
e=window.navigator.userAgent;if(/Android/.test(e)||!/Chrome|Mac OS X
10.5/.test(e))return!0}return!1}},{key:"enterFullScreen",value:function(){var
e=this.el_;"webkitDisplayingFullscreen"in
e&&this.one("webkitbeginfullscreen",function(){this.one("webkitendfullscreen",function(){this.trigger("fullscreenchange",{isFullscreen:!1})}),this.trigger("fullscreenchange",{isFullscreen:!0})}),e.paused&&e.networkState<=e.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){e.pause(),e.webkitEnterFullScreen()},0)):e.webkitEnterFullScreen()}},{key:"exitFullScreen",value:function(){this.el_.webkitExitFullScreen()}},{key:"src",value:function(e){return"undefined"==typeof
e?this.el_.src:void
this.setSrc(e)}},{key:"setSrc",value:function(e){this.el_.src=e}},{key:"load",value:function(){this.el_.load()}},{key:"currentSrc",value:function(){return
this.currentSource_?this.currentSource_.src:this.el_.currentSrc}},{key:"poster",value:function(){return
this.el_.poster}},{key:"setPoster",value:function(e){this.el_.poster=e}},{key:"controls",value:function(){return
this.el_.controls}},{key:"setControls",value:function(e){this.el_.controls=!!e}},{key:"error",value:function(){return
this.el_.error}},{key:"seeking",value:function(){return
this.el_.seeking}},{key:"seekable",value:function(){return
this.el_.seekable}},{key:"ended",value:function(){return
this.el_.ended}},{key:"videoWidth",value:function(){return
this.el_.videoWidth}},{key:"videoHeight",value:function(){return
this.el_.videoHeight}}]),t}(v);k.isSupported=function(){return
c["default"].supported("OGVPlayer")},k.canPlaySource=function(e){return-1!==e.type.indexOf("/ogg")?"maybe":""},k.canControlVolume=function(){return!1},k.canControlPlaybackRate=function(){return!1},k.supportsNativeTextTracks=function(){return!1},k.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],k.prototype.featuresVolumeControl=k.canControlVolume(),k.prototype.featuresPlaybackRate=k.canControlPlaybackRate(),k.prototype.featuresFullscreenResize=!0,k.prototype.featuresProgressEvents=!0,k.prototype.featuresNativeTextTracks=k.supportsNativeTextTracks(),k.disposeMediaElement=function(e){if(e){for(e.parentNode&&e.parentNode.removeChild(e);e.hasChildNodes();)e.removeChild(e.firstChild);e.removeAttribute("src"),"function"==typeof
e.load&&!function(){try{e.load()}catch(t){}}()}},v.registerTech("Ogvjs",k),n["default"]=k,t.exports=n["default"]}).call(this,"undefined"!=typeof
global?global:"undefined"!=typeof self?self:"undefined"!=typeof
window?window:{})},{}]},{},[1])(1)});
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/285091
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I2501b0a996a77f8455715738aecb5aa225eced2d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TimedMediaHandler
Gerrit-Branch: master
Gerrit-Owner: TheDJ <[email protected]>
Gerrit-Reviewer: TheDJ <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits