Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bb7eea27e5 | |||
| 595c5e95bc |
@@ -1,3 +1,7 @@
|
|||||||
|
# v3.0.2
|
||||||
|
|
||||||
|
* Fix for Safari not firing error events when trying to load blocked scripts
|
||||||
|
|
||||||
# v3.0.1
|
# v3.0.1
|
||||||
|
|
||||||
* Fix for trying to accessing local storage when it's blocked
|
* Fix for trying to accessing local storage when it's blocked
|
||||||
|
|||||||
+4
-4
@@ -169,16 +169,16 @@
|
|||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<!-- Polyfills -->
|
<!-- Polyfills -->
|
||||||
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6,Array.prototype.includes,CustomEvent"></script>
|
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6,Array.prototype.includes,CustomEvent" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<!-- Plyr core script -->
|
<!-- Plyr core script -->
|
||||||
<script src="../dist/plyr.js"></script>
|
<script src="../dist/plyr.js" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<!-- Sharing libary (https://shr.one) -->
|
<!-- Sharing libary (https://shr.one) -->
|
||||||
<script src="https://cdn.shr.one/1.0.1/shr.js"></script>
|
<script src="https://cdn.shr.one/1.0.1/shr.js" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<!-- Rangetouch to fix <input type="range"> on touch devices (see https://rangetouch.com) -->
|
<!-- Rangetouch to fix <input type="range"> on touch devices (see https://rangetouch.com) -->
|
||||||
<script src="https://cdn.rangetouch.com/1.0.1/rangetouch.js" async></script>
|
<script src="https://cdn.rangetouch.com/1.0.1/rangetouch.js" async crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<!-- Docs script -->
|
<!-- Docs script -->
|
||||||
<script src="dist/demo.js" crossorigin="anonymous"></script>
|
<script src="dist/demo.js" crossorigin="anonymous"></script>
|
||||||
|
|||||||
Vendored
+307
-46
@@ -77,7 +77,7 @@ var defaults = {
|
|||||||
// Sprite (for icons)
|
// Sprite (for icons)
|
||||||
loadSprite: true,
|
loadSprite: true,
|
||||||
iconPrefix: 'plyr',
|
iconPrefix: 'plyr',
|
||||||
iconUrl: 'https://cdn.plyr.io/3.0.1/plyr.svg',
|
iconUrl: 'https://cdn.plyr.io/3.0.2/plyr.svg',
|
||||||
|
|
||||||
// Blank video (used to prevent errors on source change)
|
// Blank video (used to prevent errors on source change)
|
||||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||||
@@ -330,6 +330,305 @@ var defaults = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function createCommonjsModule(fn, module) {
|
||||||
|
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadjs_umd = createCommonjsModule(function (module, exports) {
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof undefined === 'function' && undefined.amd) {
|
||||||
|
undefined([], factory);
|
||||||
|
} else {
|
||||||
|
module.exports = factory();
|
||||||
|
}
|
||||||
|
}(commonjsGlobal, function() {
|
||||||
|
/**
|
||||||
|
* Global dependencies.
|
||||||
|
* @global {Object} document - DOM
|
||||||
|
*/
|
||||||
|
|
||||||
|
var devnull = function() {},
|
||||||
|
bundleIdCache = {},
|
||||||
|
bundleResultCache = {},
|
||||||
|
bundleCallbackQueue = {};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to bundle load event.
|
||||||
|
* @param {string[]} bundleIds - Bundle ids
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function subscribe(bundleIds, callbackFn) {
|
||||||
|
// listify
|
||||||
|
bundleIds = bundleIds.push ? bundleIds : [bundleIds];
|
||||||
|
|
||||||
|
var depsNotFound = [],
|
||||||
|
i = bundleIds.length,
|
||||||
|
numWaiting = i,
|
||||||
|
fn,
|
||||||
|
bundleId,
|
||||||
|
r,
|
||||||
|
q;
|
||||||
|
|
||||||
|
// define callback function
|
||||||
|
fn = function (bundleId, pathsNotFound) {
|
||||||
|
if (pathsNotFound.length) depsNotFound.push(bundleId);
|
||||||
|
|
||||||
|
numWaiting--;
|
||||||
|
if (!numWaiting) callbackFn(depsNotFound);
|
||||||
|
};
|
||||||
|
|
||||||
|
// register callback
|
||||||
|
while (i--) {
|
||||||
|
bundleId = bundleIds[i];
|
||||||
|
|
||||||
|
// execute callback if in result cache
|
||||||
|
r = bundleResultCache[bundleId];
|
||||||
|
if (r) {
|
||||||
|
fn(bundleId, r);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add to callback queue
|
||||||
|
q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];
|
||||||
|
q.push(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publish bundle load event.
|
||||||
|
* @param {string} bundleId - Bundle id
|
||||||
|
* @param {string[]} pathsNotFound - List of files not found
|
||||||
|
*/
|
||||||
|
function publish(bundleId, pathsNotFound) {
|
||||||
|
// exit if id isn't defined
|
||||||
|
if (!bundleId) return;
|
||||||
|
|
||||||
|
var q = bundleCallbackQueue[bundleId];
|
||||||
|
|
||||||
|
// cache result
|
||||||
|
bundleResultCache[bundleId] = pathsNotFound;
|
||||||
|
|
||||||
|
// exit if queue is empty
|
||||||
|
if (!q) return;
|
||||||
|
|
||||||
|
// empty callback queue
|
||||||
|
while (q.length) {
|
||||||
|
q[0](bundleId, pathsNotFound);
|
||||||
|
q.splice(0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute callbacks.
|
||||||
|
* @param {Object or Function} args - The callback args
|
||||||
|
* @param {string[]} depsNotFound - List of dependencies not found
|
||||||
|
*/
|
||||||
|
function executeCallbacks(args, depsNotFound) {
|
||||||
|
// accept function as argument
|
||||||
|
if (args.call) args = {success: args};
|
||||||
|
|
||||||
|
// success and error callbacks
|
||||||
|
if (depsNotFound.length) (args.error || devnull)(depsNotFound);
|
||||||
|
else (args.success || devnull)(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load individual file.
|
||||||
|
* @param {string} path - The file path
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function loadFile(path, callbackFn, args, numTries) {
|
||||||
|
var doc = document,
|
||||||
|
async = args.async,
|
||||||
|
maxTries = (args.numRetries || 0) + 1,
|
||||||
|
beforeCallbackFn = args.before || devnull,
|
||||||
|
isCss,
|
||||||
|
e;
|
||||||
|
|
||||||
|
numTries = numTries || 0;
|
||||||
|
|
||||||
|
if (/(^css!|\.css$)/.test(path)) {
|
||||||
|
isCss = true;
|
||||||
|
|
||||||
|
// css
|
||||||
|
e = doc.createElement('link');
|
||||||
|
e.rel = 'stylesheet';
|
||||||
|
e.href = path.replace(/^css!/, ''); // remove "css!" prefix
|
||||||
|
} else {
|
||||||
|
// javascript
|
||||||
|
e = doc.createElement('script');
|
||||||
|
e.src = path;
|
||||||
|
e.async = async === undefined ? true : async;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.onload = e.onerror = e.onbeforeload = function (ev) {
|
||||||
|
var result = ev.type[0];
|
||||||
|
|
||||||
|
// Note: The following code isolates IE using `hideFocus` and treats empty
|
||||||
|
// stylesheets as failures to get around lack of onerror support
|
||||||
|
if (isCss && 'hideFocus' in e) {
|
||||||
|
try {
|
||||||
|
if (!e.sheet.cssText.length) result = 'e';
|
||||||
|
} catch (x) {
|
||||||
|
// sheets objects created from load errors don't allow access to
|
||||||
|
// `cssText`
|
||||||
|
result = 'e';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle retries in case of load failure
|
||||||
|
if (result == 'e') {
|
||||||
|
// increment counter
|
||||||
|
numTries += 1;
|
||||||
|
|
||||||
|
// exit function and try again
|
||||||
|
if (numTries < maxTries) {
|
||||||
|
return loadFile(path, callbackFn, args, numTries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute callback
|
||||||
|
callbackFn(path, result, ev.defaultPrevented);
|
||||||
|
};
|
||||||
|
|
||||||
|
// add to document (unless callback returns `false`)
|
||||||
|
if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load multiple files.
|
||||||
|
* @param {string[]} paths - The file paths
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function loadFiles(paths, callbackFn, args) {
|
||||||
|
// listify paths
|
||||||
|
paths = paths.push ? paths : [paths];
|
||||||
|
|
||||||
|
var numWaiting = paths.length,
|
||||||
|
x = numWaiting,
|
||||||
|
pathsNotFound = [],
|
||||||
|
fn,
|
||||||
|
i;
|
||||||
|
|
||||||
|
// define callback function
|
||||||
|
fn = function(path, result, defaultPrevented) {
|
||||||
|
// handle error
|
||||||
|
if (result == 'e') pathsNotFound.push(path);
|
||||||
|
|
||||||
|
// handle beforeload event. If defaultPrevented then that means the load
|
||||||
|
// will be blocked (ex. Ghostery/ABP on Safari)
|
||||||
|
if (result == 'b') {
|
||||||
|
if (defaultPrevented) pathsNotFound.push(path);
|
||||||
|
else return;
|
||||||
|
}
|
||||||
|
|
||||||
|
numWaiting--;
|
||||||
|
if (!numWaiting) callbackFn(pathsNotFound);
|
||||||
|
};
|
||||||
|
|
||||||
|
// load scripts
|
||||||
|
for (i=0; i < x; i++) loadFile(paths[i], fn, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate script load and register bundle.
|
||||||
|
* @param {(string|string[])} paths - The file paths
|
||||||
|
* @param {(string|Function)} [arg1] - The bundleId or success callback
|
||||||
|
* @param {Function} [arg2] - The success or error callback
|
||||||
|
* @param {Function} [arg3] - The error callback
|
||||||
|
*/
|
||||||
|
function loadjs(paths, arg1, arg2) {
|
||||||
|
var bundleId,
|
||||||
|
args;
|
||||||
|
|
||||||
|
// bundleId (if string)
|
||||||
|
if (arg1 && arg1.trim) bundleId = arg1;
|
||||||
|
|
||||||
|
// args (default is {})
|
||||||
|
args = (bundleId ? arg2 : arg1) || {};
|
||||||
|
|
||||||
|
// throw error if bundle is already defined
|
||||||
|
if (bundleId) {
|
||||||
|
if (bundleId in bundleIdCache) {
|
||||||
|
throw "LoadJS";
|
||||||
|
} else {
|
||||||
|
bundleIdCache[bundleId] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// load scripts
|
||||||
|
loadFiles(paths, function (pathsNotFound) {
|
||||||
|
// execute callbacks
|
||||||
|
executeCallbacks(args, pathsNotFound);
|
||||||
|
|
||||||
|
// publish bundle load event
|
||||||
|
publish(bundleId, pathsNotFound);
|
||||||
|
}, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute callbacks when dependencies have been satisfied.
|
||||||
|
* @param {(string|string[])} deps - List of bundle ids
|
||||||
|
* @param {Object} args - success/error arguments
|
||||||
|
*/
|
||||||
|
loadjs.ready = function ready(deps, args) {
|
||||||
|
// subscribe to bundle load event
|
||||||
|
subscribe(deps, function (depsNotFound) {
|
||||||
|
// execute callbacks
|
||||||
|
executeCallbacks(args, depsNotFound);
|
||||||
|
});
|
||||||
|
|
||||||
|
return loadjs;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manually satisfy bundle dependencies.
|
||||||
|
* @param {string} bundleId - The bundle id
|
||||||
|
*/
|
||||||
|
loadjs.done = function done(bundleId) {
|
||||||
|
publish(bundleId, []);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset loadjs dependencies statuses
|
||||||
|
*/
|
||||||
|
loadjs.reset = function reset() {
|
||||||
|
bundleIdCache = {};
|
||||||
|
bundleResultCache = {};
|
||||||
|
bundleCallbackQueue = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if bundle has already been defined
|
||||||
|
* @param String} bundleId - The bundle id
|
||||||
|
*/
|
||||||
|
loadjs.isDefined = function isDefined(bundleId) {
|
||||||
|
return bundleId in bundleIdCache;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// export
|
||||||
|
return loadjs;
|
||||||
|
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
var asyncGenerator = function () {
|
var asyncGenerator = function () {
|
||||||
function AwaitValue(value) {
|
function AwaitValue(value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
@@ -693,48 +992,10 @@ var utils = {
|
|||||||
// Load an external script
|
// Load an external script
|
||||||
loadScript: function loadScript(url) {
|
loadScript: function loadScript(url) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
var current = document.querySelector('script[src="' + url + '"]');
|
loadjs_umd(url, {
|
||||||
|
success: resolve,
|
||||||
// Check script is not already referenced, if so wait for load
|
error: reject
|
||||||
if (current !== null) {
|
});
|
||||||
current.callbacks = current.callbacks || [];
|
|
||||||
current.callbacks.push(resolve);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the element
|
|
||||||
var element = document.createElement('script');
|
|
||||||
|
|
||||||
// Callback queue
|
|
||||||
element.callbacks = element.callbacks || [];
|
|
||||||
element.callbacks.push(resolve);
|
|
||||||
|
|
||||||
// Error queue
|
|
||||||
element.errors = element.errors || [];
|
|
||||||
element.errors.push(reject);
|
|
||||||
|
|
||||||
// Bind callback
|
|
||||||
element.addEventListener('load', function (event) {
|
|
||||||
element.callbacks.forEach(function (cb) {
|
|
||||||
return cb.call(null, event);
|
|
||||||
});
|
|
||||||
element.callbacks = null;
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
// Bind error handling
|
|
||||||
element.addEventListener('error', function (event) {
|
|
||||||
element.errors.forEach(function (err) {
|
|
||||||
return err.call(null, event);
|
|
||||||
});
|
|
||||||
element.errors = null;
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
// Set the URL after binding callback
|
|
||||||
element.src = url;
|
|
||||||
|
|
||||||
// Inject
|
|
||||||
var first = document.getElementsByTagName('script')[0];
|
|
||||||
first.parentNode.insertBefore(element, first);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -6026,7 +6287,7 @@ var source = {
|
|||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// Plyr
|
// Plyr
|
||||||
// plyr.js v3.0.1
|
// plyr.js v3.0.2
|
||||||
// https://github.com/sampotts/plyr
|
// https://github.com/sampotts/plyr
|
||||||
// License: The MIT License (MIT)
|
// License: The MIT License (MIT)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
@@ -6718,7 +6979,7 @@ var Plyr = function () {
|
|||||||
clearInterval(this.timers.playing);
|
clearInterval(this.timers.playing);
|
||||||
|
|
||||||
// Destroy YouTube API
|
// Destroy YouTube API
|
||||||
if (this.embed !== null) {
|
if (this.embed !== null && utils.is.function(this.embed.destroy)) {
|
||||||
this.embed.destroy();
|
this.embed.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6894,7 +7155,7 @@ var Plyr = function () {
|
|||||||
var fauxDuration = parseInt(this.config.duration, 10);
|
var fauxDuration = parseInt(this.config.duration, 10);
|
||||||
|
|
||||||
// True duration
|
// True duration
|
||||||
var realDuration = Number(this.media.duration);
|
var realDuration = this.media ? Number(this.media.duration) : 0;
|
||||||
|
|
||||||
// If custom duration is funky, use regular duration
|
// If custom duration is funky, use regular duration
|
||||||
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+298
-47
@@ -5268,7 +5268,7 @@ var defaults = {
|
|||||||
// Sprite (for icons)
|
// Sprite (for icons)
|
||||||
loadSprite: true,
|
loadSprite: true,
|
||||||
iconPrefix: 'plyr',
|
iconPrefix: 'plyr',
|
||||||
iconUrl: 'https://cdn.plyr.io/3.0.1/plyr.svg',
|
iconUrl: 'https://cdn.plyr.io/3.0.2/plyr.svg',
|
||||||
|
|
||||||
// Blank video (used to prevent errors on source change)
|
// Blank video (used to prevent errors on source change)
|
||||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||||
@@ -5521,6 +5521,295 @@ var defaults = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var loadjs_umd = createCommonjsModule(function (module, exports) {
|
||||||
|
(function(root, factory) {
|
||||||
|
if (typeof undefined === 'function' && undefined.amd) {
|
||||||
|
undefined([], factory);
|
||||||
|
} else {
|
||||||
|
module.exports = factory();
|
||||||
|
}
|
||||||
|
}(commonjsGlobal, function() {
|
||||||
|
/**
|
||||||
|
* Global dependencies.
|
||||||
|
* @global {Object} document - DOM
|
||||||
|
*/
|
||||||
|
|
||||||
|
var devnull = function() {},
|
||||||
|
bundleIdCache = {},
|
||||||
|
bundleResultCache = {},
|
||||||
|
bundleCallbackQueue = {};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to bundle load event.
|
||||||
|
* @param {string[]} bundleIds - Bundle ids
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function subscribe(bundleIds, callbackFn) {
|
||||||
|
// listify
|
||||||
|
bundleIds = bundleIds.push ? bundleIds : [bundleIds];
|
||||||
|
|
||||||
|
var depsNotFound = [],
|
||||||
|
i = bundleIds.length,
|
||||||
|
numWaiting = i,
|
||||||
|
fn,
|
||||||
|
bundleId,
|
||||||
|
r,
|
||||||
|
q;
|
||||||
|
|
||||||
|
// define callback function
|
||||||
|
fn = function (bundleId, pathsNotFound) {
|
||||||
|
if (pathsNotFound.length) depsNotFound.push(bundleId);
|
||||||
|
|
||||||
|
numWaiting--;
|
||||||
|
if (!numWaiting) callbackFn(depsNotFound);
|
||||||
|
};
|
||||||
|
|
||||||
|
// register callback
|
||||||
|
while (i--) {
|
||||||
|
bundleId = bundleIds[i];
|
||||||
|
|
||||||
|
// execute callback if in result cache
|
||||||
|
r = bundleResultCache[bundleId];
|
||||||
|
if (r) {
|
||||||
|
fn(bundleId, r);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add to callback queue
|
||||||
|
q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];
|
||||||
|
q.push(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publish bundle load event.
|
||||||
|
* @param {string} bundleId - Bundle id
|
||||||
|
* @param {string[]} pathsNotFound - List of files not found
|
||||||
|
*/
|
||||||
|
function publish(bundleId, pathsNotFound) {
|
||||||
|
// exit if id isn't defined
|
||||||
|
if (!bundleId) return;
|
||||||
|
|
||||||
|
var q = bundleCallbackQueue[bundleId];
|
||||||
|
|
||||||
|
// cache result
|
||||||
|
bundleResultCache[bundleId] = pathsNotFound;
|
||||||
|
|
||||||
|
// exit if queue is empty
|
||||||
|
if (!q) return;
|
||||||
|
|
||||||
|
// empty callback queue
|
||||||
|
while (q.length) {
|
||||||
|
q[0](bundleId, pathsNotFound);
|
||||||
|
q.splice(0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute callbacks.
|
||||||
|
* @param {Object or Function} args - The callback args
|
||||||
|
* @param {string[]} depsNotFound - List of dependencies not found
|
||||||
|
*/
|
||||||
|
function executeCallbacks(args, depsNotFound) {
|
||||||
|
// accept function as argument
|
||||||
|
if (args.call) args = {success: args};
|
||||||
|
|
||||||
|
// success and error callbacks
|
||||||
|
if (depsNotFound.length) (args.error || devnull)(depsNotFound);
|
||||||
|
else (args.success || devnull)(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load individual file.
|
||||||
|
* @param {string} path - The file path
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function loadFile(path, callbackFn, args, numTries) {
|
||||||
|
var doc = document,
|
||||||
|
async = args.async,
|
||||||
|
maxTries = (args.numRetries || 0) + 1,
|
||||||
|
beforeCallbackFn = args.before || devnull,
|
||||||
|
isCss,
|
||||||
|
e;
|
||||||
|
|
||||||
|
numTries = numTries || 0;
|
||||||
|
|
||||||
|
if (/(^css!|\.css$)/.test(path)) {
|
||||||
|
isCss = true;
|
||||||
|
|
||||||
|
// css
|
||||||
|
e = doc.createElement('link');
|
||||||
|
e.rel = 'stylesheet';
|
||||||
|
e.href = path.replace(/^css!/, ''); // remove "css!" prefix
|
||||||
|
} else {
|
||||||
|
// javascript
|
||||||
|
e = doc.createElement('script');
|
||||||
|
e.src = path;
|
||||||
|
e.async = async === undefined ? true : async;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.onload = e.onerror = e.onbeforeload = function (ev) {
|
||||||
|
var result = ev.type[0];
|
||||||
|
|
||||||
|
// Note: The following code isolates IE using `hideFocus` and treats empty
|
||||||
|
// stylesheets as failures to get around lack of onerror support
|
||||||
|
if (isCss && 'hideFocus' in e) {
|
||||||
|
try {
|
||||||
|
if (!e.sheet.cssText.length) result = 'e';
|
||||||
|
} catch (x) {
|
||||||
|
// sheets objects created from load errors don't allow access to
|
||||||
|
// `cssText`
|
||||||
|
result = 'e';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle retries in case of load failure
|
||||||
|
if (result == 'e') {
|
||||||
|
// increment counter
|
||||||
|
numTries += 1;
|
||||||
|
|
||||||
|
// exit function and try again
|
||||||
|
if (numTries < maxTries) {
|
||||||
|
return loadFile(path, callbackFn, args, numTries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute callback
|
||||||
|
callbackFn(path, result, ev.defaultPrevented);
|
||||||
|
};
|
||||||
|
|
||||||
|
// add to document (unless callback returns `false`)
|
||||||
|
if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load multiple files.
|
||||||
|
* @param {string[]} paths - The file paths
|
||||||
|
* @param {Function} callbackFn - The callback function
|
||||||
|
*/
|
||||||
|
function loadFiles(paths, callbackFn, args) {
|
||||||
|
// listify paths
|
||||||
|
paths = paths.push ? paths : [paths];
|
||||||
|
|
||||||
|
var numWaiting = paths.length,
|
||||||
|
x = numWaiting,
|
||||||
|
pathsNotFound = [],
|
||||||
|
fn,
|
||||||
|
i;
|
||||||
|
|
||||||
|
// define callback function
|
||||||
|
fn = function(path, result, defaultPrevented) {
|
||||||
|
// handle error
|
||||||
|
if (result == 'e') pathsNotFound.push(path);
|
||||||
|
|
||||||
|
// handle beforeload event. If defaultPrevented then that means the load
|
||||||
|
// will be blocked (ex. Ghostery/ABP on Safari)
|
||||||
|
if (result == 'b') {
|
||||||
|
if (defaultPrevented) pathsNotFound.push(path);
|
||||||
|
else return;
|
||||||
|
}
|
||||||
|
|
||||||
|
numWaiting--;
|
||||||
|
if (!numWaiting) callbackFn(pathsNotFound);
|
||||||
|
};
|
||||||
|
|
||||||
|
// load scripts
|
||||||
|
for (i=0; i < x; i++) loadFile(paths[i], fn, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate script load and register bundle.
|
||||||
|
* @param {(string|string[])} paths - The file paths
|
||||||
|
* @param {(string|Function)} [arg1] - The bundleId or success callback
|
||||||
|
* @param {Function} [arg2] - The success or error callback
|
||||||
|
* @param {Function} [arg3] - The error callback
|
||||||
|
*/
|
||||||
|
function loadjs(paths, arg1, arg2) {
|
||||||
|
var bundleId,
|
||||||
|
args;
|
||||||
|
|
||||||
|
// bundleId (if string)
|
||||||
|
if (arg1 && arg1.trim) bundleId = arg1;
|
||||||
|
|
||||||
|
// args (default is {})
|
||||||
|
args = (bundleId ? arg2 : arg1) || {};
|
||||||
|
|
||||||
|
// throw error if bundle is already defined
|
||||||
|
if (bundleId) {
|
||||||
|
if (bundleId in bundleIdCache) {
|
||||||
|
throw "LoadJS";
|
||||||
|
} else {
|
||||||
|
bundleIdCache[bundleId] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// load scripts
|
||||||
|
loadFiles(paths, function (pathsNotFound) {
|
||||||
|
// execute callbacks
|
||||||
|
executeCallbacks(args, pathsNotFound);
|
||||||
|
|
||||||
|
// publish bundle load event
|
||||||
|
publish(bundleId, pathsNotFound);
|
||||||
|
}, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute callbacks when dependencies have been satisfied.
|
||||||
|
* @param {(string|string[])} deps - List of bundle ids
|
||||||
|
* @param {Object} args - success/error arguments
|
||||||
|
*/
|
||||||
|
loadjs.ready = function ready(deps, args) {
|
||||||
|
// subscribe to bundle load event
|
||||||
|
subscribe(deps, function (depsNotFound) {
|
||||||
|
// execute callbacks
|
||||||
|
executeCallbacks(args, depsNotFound);
|
||||||
|
});
|
||||||
|
|
||||||
|
return loadjs;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manually satisfy bundle dependencies.
|
||||||
|
* @param {string} bundleId - The bundle id
|
||||||
|
*/
|
||||||
|
loadjs.done = function done(bundleId) {
|
||||||
|
publish(bundleId, []);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset loadjs dependencies statuses
|
||||||
|
*/
|
||||||
|
loadjs.reset = function reset() {
|
||||||
|
bundleIdCache = {};
|
||||||
|
bundleResultCache = {};
|
||||||
|
bundleCallbackQueue = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if bundle has already been defined
|
||||||
|
* @param String} bundleId - The bundle id
|
||||||
|
*/
|
||||||
|
loadjs.isDefined = function isDefined(bundleId) {
|
||||||
|
return bundleId in bundleIdCache;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// export
|
||||||
|
return loadjs;
|
||||||
|
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
var asyncGenerator = function () {
|
var asyncGenerator = function () {
|
||||||
function AwaitValue(value) {
|
function AwaitValue(value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
@@ -5884,48 +6173,10 @@ var utils = {
|
|||||||
// Load an external script
|
// Load an external script
|
||||||
loadScript: function loadScript(url) {
|
loadScript: function loadScript(url) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
var current = document.querySelector('script[src="' + url + '"]');
|
loadjs_umd(url, {
|
||||||
|
success: resolve,
|
||||||
// Check script is not already referenced, if so wait for load
|
error: reject
|
||||||
if (current !== null) {
|
});
|
||||||
current.callbacks = current.callbacks || [];
|
|
||||||
current.callbacks.push(resolve);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the element
|
|
||||||
var element = document.createElement('script');
|
|
||||||
|
|
||||||
// Callback queue
|
|
||||||
element.callbacks = element.callbacks || [];
|
|
||||||
element.callbacks.push(resolve);
|
|
||||||
|
|
||||||
// Error queue
|
|
||||||
element.errors = element.errors || [];
|
|
||||||
element.errors.push(reject);
|
|
||||||
|
|
||||||
// Bind callback
|
|
||||||
element.addEventListener('load', function (event) {
|
|
||||||
element.callbacks.forEach(function (cb) {
|
|
||||||
return cb.call(null, event);
|
|
||||||
});
|
|
||||||
element.callbacks = null;
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
// Bind error handling
|
|
||||||
element.addEventListener('error', function (event) {
|
|
||||||
element.errors.forEach(function (err) {
|
|
||||||
return err.call(null, event);
|
|
||||||
});
|
|
||||||
element.errors = null;
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
// Set the URL after binding callback
|
|
||||||
element.src = url;
|
|
||||||
|
|
||||||
// Inject
|
|
||||||
var first = document.getElementsByTagName('script')[0];
|
|
||||||
first.parentNode.insertBefore(element, first);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -11217,7 +11468,7 @@ var source = {
|
|||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// Plyr
|
// Plyr
|
||||||
// plyr.js v3.0.1
|
// plyr.js v3.0.2
|
||||||
// https://github.com/sampotts/plyr
|
// https://github.com/sampotts/plyr
|
||||||
// License: The MIT License (MIT)
|
// License: The MIT License (MIT)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
@@ -11909,7 +12160,7 @@ var Plyr$1 = function () {
|
|||||||
clearInterval(this.timers.playing);
|
clearInterval(this.timers.playing);
|
||||||
|
|
||||||
// Destroy YouTube API
|
// Destroy YouTube API
|
||||||
if (this.embed !== null) {
|
if (this.embed !== null && utils.is.function(this.embed.destroy)) {
|
||||||
this.embed.destroy();
|
this.embed.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12085,7 +12336,7 @@ var Plyr$1 = function () {
|
|||||||
var fauxDuration = parseInt(this.config.duration, 10);
|
var fauxDuration = parseInt(this.config.duration, 10);
|
||||||
|
|
||||||
// True duration
|
// True duration
|
||||||
var realDuration = Number(this.media.duration);
|
var realDuration = this.media ? Number(this.media.duration) : 0;
|
||||||
|
|
||||||
// If custom duration is funky, use regular duration
|
// If custom duration is funky, use regular duration
|
||||||
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
||||||
@@ -12521,7 +12772,7 @@ var Plyr$1 = function () {
|
|||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// Plyr Polyfilled Build
|
// Plyr Polyfilled Build
|
||||||
// plyr.js v3.0.1
|
// plyr.js v3.0.2
|
||||||
// https://github.com/sampotts/plyr
|
// https://github.com/sampotts/plyr
|
||||||
// License: The MIT License (MIT)
|
// License: The MIT License (MIT)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+4
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "plyr",
|
"name": "plyr",
|
||||||
"version": "3.0.1",
|
"version": "3.0.2",
|
||||||
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
|
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
|
||||||
"homepage": "https://plyr.io",
|
"homepage": "https://plyr.io",
|
||||||
"main": "./dist/plyr.js",
|
"main": "./dist/plyr.js",
|
||||||
@@ -35,6 +35,8 @@
|
|||||||
"gulp-svgstore": "^6.1.1",
|
"gulp-svgstore": "^6.1.1",
|
||||||
"gulp-uglify-es": "^1.0.1",
|
"gulp-uglify-es": "^1.0.1",
|
||||||
"gulp-util": "^3.0.8",
|
"gulp-util": "^3.0.8",
|
||||||
|
"prettier-eslint": "^8.8.1",
|
||||||
|
"prettier-stylelint": "^0.4.2",
|
||||||
"rollup-plugin-babel": "^3.0.3",
|
"rollup-plugin-babel": "^3.0.3",
|
||||||
"rollup-plugin-commonjs": "^8.4.1",
|
"rollup-plugin-commonjs": "^8.4.1",
|
||||||
"rollup-plugin-node-resolve": "^3.2.0",
|
"rollup-plugin-node-resolve": "^3.2.0",
|
||||||
@@ -66,6 +68,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-polyfill": "^6.26.0",
|
"babel-polyfill": "^6.26.0",
|
||||||
"custom-event-polyfill": "^0.3.0",
|
"custom-event-polyfill": "^0.3.0",
|
||||||
|
"loadjs": "^3.5.2",
|
||||||
"raven-js": "^3.23.3"
|
"raven-js": "^3.23.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ See [initialising](#initialising) for more information on advanced setups.
|
|||||||
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript, you can use the following:
|
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript, you can use the following:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src="https://cdn.plyr.io/3.0.1/plyr.js"></script>
|
<script src="https://cdn.plyr.io/3.0.2/plyr.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
_Note_: Be sure to read the [polyfills](#polyfills) section below about browser compatibility
|
_Note_: Be sure to read the [polyfills](#polyfills) section below about browser compatibility
|
||||||
@@ -140,13 +140,13 @@ Include the `plyr.css` stylsheet into your `<head>`
|
|||||||
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
|
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<link rel="stylesheet" href="https://cdn.plyr.io/3.0.1/plyr.css">
|
<link rel="stylesheet" href="https://cdn.plyr.io/3.0.2/plyr.css">
|
||||||
```
|
```
|
||||||
|
|
||||||
### SVG Sprite
|
### SVG Sprite
|
||||||
|
|
||||||
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
|
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
|
||||||
reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.0.1/plyr.svg`.
|
reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.0.2/plyr.svg`.
|
||||||
|
|
||||||
## Ads
|
## Ads
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ const defaults = {
|
|||||||
// Sprite (for icons)
|
// Sprite (for icons)
|
||||||
loadSprite: true,
|
loadSprite: true,
|
||||||
iconPrefix: 'plyr',
|
iconPrefix: 'plyr',
|
||||||
iconUrl: 'https://cdn.plyr.io/3.0.1/plyr.svg',
|
iconUrl: 'https://cdn.plyr.io/3.0.2/plyr.svg',
|
||||||
|
|
||||||
// Blank video (used to prevent errors on source change)
|
// Blank video (used to prevent errors on source change)
|
||||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// Plyr
|
// Plyr
|
||||||
// plyr.js v3.0.1
|
// plyr.js v3.0.2
|
||||||
// https://github.com/sampotts/plyr
|
// https://github.com/sampotts/plyr
|
||||||
// License: The MIT License (MIT)
|
// License: The MIT License (MIT)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
@@ -474,7 +474,7 @@ class Plyr {
|
|||||||
const fauxDuration = parseInt(this.config.duration, 10);
|
const fauxDuration = parseInt(this.config.duration, 10);
|
||||||
|
|
||||||
// True duration
|
// True duration
|
||||||
const realDuration = Number(this.media.duration);
|
const realDuration = this.media ? Number(this.media.duration) : 0;
|
||||||
|
|
||||||
// If custom duration is funky, use regular duration
|
// If custom duration is funky, use regular duration
|
||||||
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;
|
||||||
@@ -1139,7 +1139,7 @@ class Plyr {
|
|||||||
clearInterval(this.timers.playing);
|
clearInterval(this.timers.playing);
|
||||||
|
|
||||||
// Destroy YouTube API
|
// Destroy YouTube API
|
||||||
if (this.embed !== null) {
|
if (this.embed !== null && utils.is.function(this.embed.destroy)) {
|
||||||
this.embed.destroy();
|
this.embed.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// Plyr Polyfilled Build
|
// Plyr Polyfilled Build
|
||||||
// plyr.js v3.0.1
|
// plyr.js v3.0.2
|
||||||
// https://github.com/sampotts/plyr
|
// https://github.com/sampotts/plyr
|
||||||
// License: The MIT License (MIT)
|
// License: The MIT License (MIT)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|||||||
+9
-50
@@ -2,6 +2,8 @@
|
|||||||
// Plyr utils
|
// Plyr utils
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
|
import loadjs from 'loadjs';
|
||||||
|
|
||||||
import support from './support';
|
import support from './support';
|
||||||
import { providers } from './types';
|
import { providers } from './types';
|
||||||
|
|
||||||
@@ -97,11 +99,10 @@ const utils = {
|
|||||||
if (responseType === 'text') {
|
if (responseType === 'text') {
|
||||||
try {
|
try {
|
||||||
resolve(JSON.parse(request.responseText));
|
resolve(JSON.parse(request.responseText));
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
resolve(request.responseText);
|
resolve(request.responseText);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
resolve(request.response);
|
resolve(request.response);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -125,52 +126,10 @@ const utils = {
|
|||||||
// Load an external script
|
// Load an external script
|
||||||
loadScript(url) {
|
loadScript(url) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const current = document.querySelector(`script[src="${url}"]`);
|
loadjs(url, {
|
||||||
|
success: resolve,
|
||||||
// Check script is not already referenced, if so wait for load
|
error: reject,
|
||||||
if (current !== null) {
|
});
|
||||||
current.callbacks = current.callbacks || [];
|
|
||||||
current.callbacks.push(resolve);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the element
|
|
||||||
const element = document.createElement('script');
|
|
||||||
|
|
||||||
// Callback queue
|
|
||||||
element.callbacks = element.callbacks || [];
|
|
||||||
element.callbacks.push(resolve);
|
|
||||||
|
|
||||||
// Error queue
|
|
||||||
element.errors = element.errors || [];
|
|
||||||
element.errors.push(reject);
|
|
||||||
|
|
||||||
// Bind callback
|
|
||||||
element.addEventListener(
|
|
||||||
'load',
|
|
||||||
event => {
|
|
||||||
element.callbacks.forEach(cb => cb.call(null, event));
|
|
||||||
element.callbacks = null;
|
|
||||||
},
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Bind error handling
|
|
||||||
element.addEventListener(
|
|
||||||
'error',
|
|
||||||
event => {
|
|
||||||
element.errors.forEach(err => err.call(null, event));
|
|
||||||
element.errors = null;
|
|
||||||
},
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set the URL after binding callback
|
|
||||||
element.src = url;
|
|
||||||
|
|
||||||
// Inject
|
|
||||||
const first = document.getElementsByTagName('script')[0];
|
|
||||||
first.parentNode.insertBefore(element, first);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -576,7 +535,7 @@ const utils = {
|
|||||||
// Toggle event listener
|
// Toggle event listener
|
||||||
toggleListener(elements, event, callback, toggle, passive, capture) {
|
toggleListener(elements, event, callback, toggle, passive, capture) {
|
||||||
// Bail if no elemetns, event, or callback
|
// Bail if no elemetns, event, or callback
|
||||||
if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {
|
if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user