123 lines
3.5 KiB
JavaScript
123 lines
3.5 KiB
JavaScript
|
"use strict";
|
||
|
(function(factory){
|
||
|
/*!
|
||
|
* Custom Universal Module Definition (UMD)
|
||
|
*
|
||
|
* Video.js will never be a non-browser lib so we can simplify UMD a bunch and
|
||
|
* still support requirejs and browserify. This also needs to be closure
|
||
|
* compiler compatible, so string keys are used.
|
||
|
*/
|
||
|
if (typeof define === 'function' && define['amd']) {
|
||
|
define(['./video'], function(vjs){ factory(window, document, vjs) });
|
||
|
// checking that module is an object too because of umdjs/umd#35
|
||
|
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||
|
factory(window, document, require('video.js'));
|
||
|
} else {
|
||
|
factory(window, document, videojs);
|
||
|
}
|
||
|
|
||
|
})(function(window, document, vjs) {
|
||
|
//cookie functions from https://developer.mozilla.org/en-US/docs/DOM/document.cookie
|
||
|
var
|
||
|
getCookieItem = function(sKey) {
|
||
|
if (!sKey || !hasCookieItem(sKey)) { return null; }
|
||
|
var reg_ex = new RegExp(
|
||
|
"(?:^|.*;\\s*)" +
|
||
|
window.escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") +
|
||
|
"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"
|
||
|
);
|
||
|
return window.unescape(document.cookie.replace(reg_ex,"$1"));
|
||
|
},
|
||
|
|
||
|
setCookieItem = function(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
|
||
|
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return; }
|
||
|
var sExpires = "";
|
||
|
if (vEnd) {
|
||
|
switch (vEnd.constructor) {
|
||
|
case Number:
|
||
|
sExpires = vEnd === Infinity ? "; expires=Tue, 19 Jan 2038 03:14:07 GMT" : "; max-age=" + vEnd;
|
||
|
break;
|
||
|
case String:
|
||
|
sExpires = "; expires=" + vEnd;
|
||
|
break;
|
||
|
case Date:
|
||
|
sExpires = "; expires=" + vEnd.toGMTString();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
document.cookie =
|
||
|
window.escape(sKey) + "=" +
|
||
|
window.escape(sValue) +
|
||
|
sExpires +
|
||
|
(sDomain ? "; domain=" + sDomain : "") +
|
||
|
(sPath ? "; path=" + sPath : "") +
|
||
|
(bSecure ? "; secure" : "");
|
||
|
},
|
||
|
|
||
|
hasCookieItem = function(sKey) {
|
||
|
return (new RegExp(
|
||
|
"(?:^|;\\s*)" +
|
||
|
window.escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") +
|
||
|
"\\s*\\=")
|
||
|
).test(document.cookie);
|
||
|
},
|
||
|
|
||
|
hasLocalStorage = function() {
|
||
|
try {
|
||
|
window.localStorage.setItem('persistVolume', 'persistVolume');
|
||
|
window.localStorage.removeItem('persistVolume');
|
||
|
return true;
|
||
|
} catch(e) {
|
||
|
return false;
|
||
|
}
|
||
|
},
|
||
|
getStorageItem = function(key) {
|
||
|
return hasLocalStorage() ? window.localStorage.getItem(key) : getCookieItem(key);
|
||
|
},
|
||
|
setStorageItem = function(key, value) {
|
||
|
return hasLocalStorage() ? window.localStorage.setItem(key, value) : setCookieItem(key, value, Infinity, '/');
|
||
|
},
|
||
|
|
||
|
extend = function(obj) {
|
||
|
var arg, i, k;
|
||
|
for (i = 1; i < arguments.length; i++) {
|
||
|
arg = arguments[i];
|
||
|
for (k in arg) {
|
||
|
if (arg.hasOwnProperty(k)) {
|
||
|
obj[k] = arg[k];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return obj;
|
||
|
},
|
||
|
|
||
|
defaults = {
|
||
|
namespace: ""
|
||
|
},
|
||
|
|
||
|
volumePersister = function(options) {
|
||
|
var player = this;
|
||
|
var settings = extend({}, defaults, options || {});
|
||
|
|
||
|
var key = settings.namespace + '-' + 'volume';
|
||
|
var muteKey = settings.namespace + '-' + 'mute';
|
||
|
|
||
|
player.on("volumechange", function() {
|
||
|
setStorageItem(key, player.volume());
|
||
|
setStorageItem(muteKey, player.muted());
|
||
|
});
|
||
|
|
||
|
var persistedVolume = getStorageItem(key);
|
||
|
if(persistedVolume !== null){
|
||
|
player.volume(persistedVolume);
|
||
|
}
|
||
|
|
||
|
var persistedMute = getStorageItem(muteKey);
|
||
|
if(persistedMute !== null){
|
||
|
player.muted('true' === persistedMute);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
vjs.plugin("persistvolume", volumePersister);
|
||
|
|
||
|
});
|