Merge branch 'develop' of github.com:sampotts/plyr into develop
# Conflicts: # package.json # yarn.lock
This commit is contained in:
607
dist/plyr.mjs
vendored
607
dist/plyr.mjs
vendored
@ -70,19 +70,15 @@ function _objectSpread2(target) {
|
||||
}
|
||||
|
||||
function _slicedToArray(arr, i) {
|
||||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
|
||||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
||||
}
|
||||
|
||||
function _toConsumableArray(arr) {
|
||||
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
|
||||
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
||||
}
|
||||
|
||||
function _arrayWithoutHoles(arr) {
|
||||
if (Array.isArray(arr)) {
|
||||
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
|
||||
|
||||
return arr2;
|
||||
}
|
||||
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
||||
}
|
||||
|
||||
function _arrayWithHoles(arr) {
|
||||
@ -90,14 +86,11 @@ function _arrayWithHoles(arr) {
|
||||
}
|
||||
|
||||
function _iterableToArray(iter) {
|
||||
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
|
||||
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
||||
}
|
||||
|
||||
function _iterableToArrayLimit(arr, i) {
|
||||
if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
||||
var _arr = [];
|
||||
var _n = true;
|
||||
var _d = false;
|
||||
@ -123,102 +116,142 @@ function _iterableToArrayLimit(arr, i) {
|
||||
return _arr;
|
||||
}
|
||||
|
||||
function _unsupportedIterableToArray(o, minLen) {
|
||||
if (!o) return;
|
||||
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
||||
var n = Object.prototype.toString.call(o).slice(8, -1);
|
||||
if (n === "Object" && o.constructor) n = o.constructor.name;
|
||||
if (n === "Map" || n === "Set") return Array.from(n);
|
||||
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
||||
}
|
||||
|
||||
function _arrayLikeToArray(arr, len) {
|
||||
if (len == null || len > arr.length) len = arr.length;
|
||||
|
||||
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
||||
|
||||
return arr2;
|
||||
}
|
||||
|
||||
function _nonIterableSpread() {
|
||||
throw new TypeError("Invalid attempt to spread non-iterable instance");
|
||||
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
function _nonIterableRest() {
|
||||
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
||||
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
function _classCallCheck$1(e, t) {
|
||||
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
|
||||
function _defineProperties$1(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);
|
||||
}
|
||||
}
|
||||
|
||||
function _createClass$1(e, t, n) {
|
||||
return t && _defineProperties$1(e.prototype, t), n && _defineProperties$1(e, n), e;
|
||||
}
|
||||
|
||||
function _defineProperty$1(e, t, n) {
|
||||
return t in e ? Object.defineProperty(e, t, {
|
||||
value: n,
|
||||
enumerable: !0,
|
||||
configurable: !0,
|
||||
writable: !0
|
||||
}) : e[t] = n, e;
|
||||
}
|
||||
|
||||
function ownKeys$1(e, t) {
|
||||
var n = Object.keys(e);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var r = Object.getOwnPropertySymbols(e);
|
||||
t && (r = r.filter(function (t) {
|
||||
return Object.getOwnPropertyDescriptor(e, t).enumerable;
|
||||
})), n.push.apply(n, r);
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
function _objectSpread2$1(e) {
|
||||
for (var t = 1; t < arguments.length; t++) {
|
||||
var n = null != arguments[t] ? arguments[t] : {};
|
||||
t % 2 ? ownKeys$1(Object(n), !0).forEach(function (t) {
|
||||
_defineProperty$1(e, t, n[t]);
|
||||
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ownKeys$1(Object(n)).forEach(function (t) {
|
||||
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
|
||||
});
|
||||
}
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
var defaults = {
|
||||
addCSS: true,
|
||||
// Add CSS to the element to improve usability (required here or in your CSS!)
|
||||
addCSS: !0,
|
||||
thumbWidth: 15,
|
||||
// The width of the thumb handle
|
||||
watch: true // Watch for new elements that match a string target
|
||||
|
||||
watch: !0
|
||||
};
|
||||
|
||||
// Element matches a selector
|
||||
function matches(element, selector) {
|
||||
function matches(e, t) {
|
||||
return function () {
|
||||
return Array.from(document.querySelectorAll(t)).includes(this);
|
||||
}.call(e, t);
|
||||
}
|
||||
|
||||
function match() {
|
||||
return Array.from(document.querySelectorAll(selector)).includes(this);
|
||||
function trigger(e, t) {
|
||||
if (e && t) {
|
||||
var n = new Event(t, {
|
||||
bubbles: !0
|
||||
});
|
||||
e.dispatchEvent(n);
|
||||
}
|
||||
|
||||
var matches = match;
|
||||
return matches.call(element, selector);
|
||||
}
|
||||
|
||||
// Trigger event
|
||||
function trigger(element, type) {
|
||||
if (!element || !type) {
|
||||
return;
|
||||
} // Create and dispatch the event
|
||||
|
||||
|
||||
var event = new Event(type); // Dispatch the event
|
||||
|
||||
element.dispatchEvent(event);
|
||||
}
|
||||
|
||||
// ==========================================================================
|
||||
// Type checking utils
|
||||
// ==========================================================================
|
||||
var getConstructor = function getConstructor(input) {
|
||||
return input !== null && typeof input !== 'undefined' ? input.constructor : null;
|
||||
};
|
||||
|
||||
var instanceOf = function instanceOf(input, constructor) {
|
||||
return Boolean(input && constructor && input instanceof constructor);
|
||||
};
|
||||
|
||||
var isNullOrUndefined = function isNullOrUndefined(input) {
|
||||
return input === null || typeof input === 'undefined';
|
||||
};
|
||||
|
||||
var isObject = function isObject(input) {
|
||||
return getConstructor(input) === Object;
|
||||
};
|
||||
|
||||
var isNumber = function isNumber(input) {
|
||||
return getConstructor(input) === Number && !Number.isNaN(input);
|
||||
};
|
||||
|
||||
var isString = function isString(input) {
|
||||
return getConstructor(input) === String;
|
||||
};
|
||||
|
||||
var isBoolean = function isBoolean(input) {
|
||||
return getConstructor(input) === Boolean;
|
||||
};
|
||||
|
||||
var isFunction = function isFunction(input) {
|
||||
return getConstructor(input) === Function;
|
||||
};
|
||||
|
||||
var isArray = function isArray(input) {
|
||||
return Array.isArray(input);
|
||||
};
|
||||
|
||||
var isNodeList = function isNodeList(input) {
|
||||
return instanceOf(input, NodeList);
|
||||
};
|
||||
|
||||
var isElement = function isElement(input) {
|
||||
return instanceOf(input, Element);
|
||||
};
|
||||
|
||||
var isEvent = function isEvent(input) {
|
||||
return instanceOf(input, Event);
|
||||
};
|
||||
|
||||
var isEmpty = function isEmpty(input) {
|
||||
return isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;
|
||||
};
|
||||
|
||||
var is = {
|
||||
var getConstructor = function getConstructor(e) {
|
||||
return null != e ? e.constructor : null;
|
||||
},
|
||||
instanceOf = function instanceOf(e, t) {
|
||||
return !!(e && t && e instanceof t);
|
||||
},
|
||||
isNullOrUndefined = function isNullOrUndefined(e) {
|
||||
return null == e;
|
||||
},
|
||||
isObject = function isObject(e) {
|
||||
return getConstructor(e) === Object;
|
||||
},
|
||||
isNumber = function isNumber(e) {
|
||||
return getConstructor(e) === Number && !Number.isNaN(e);
|
||||
},
|
||||
isString = function isString(e) {
|
||||
return getConstructor(e) === String;
|
||||
},
|
||||
isBoolean = function isBoolean(e) {
|
||||
return getConstructor(e) === Boolean;
|
||||
},
|
||||
isFunction = function isFunction(e) {
|
||||
return getConstructor(e) === Function;
|
||||
},
|
||||
isArray = function isArray(e) {
|
||||
return Array.isArray(e);
|
||||
},
|
||||
isNodeList = function isNodeList(e) {
|
||||
return instanceOf(e, NodeList);
|
||||
},
|
||||
isElement = function isElement(e) {
|
||||
return instanceOf(e, Element);
|
||||
},
|
||||
isEvent = function isEvent(e) {
|
||||
return instanceOf(e, Event);
|
||||
},
|
||||
isEmpty = function isEmpty(e) {
|
||||
return isNullOrUndefined(e) || (isString(e) || isArray(e) || isNodeList(e)) && !e.length || isObject(e) && !Object.keys(e).length;
|
||||
},
|
||||
is = {
|
||||
nullOrUndefined: isNullOrUndefined,
|
||||
object: isObject,
|
||||
number: isNumber,
|
||||
@ -232,219 +265,98 @@ var is = {
|
||||
empty: isEmpty
|
||||
};
|
||||
|
||||
// Get the number of decimal places
|
||||
function getDecimalPlaces(value) {
|
||||
var match = "".concat(value).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
|
||||
|
||||
if (!match) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Math.max(0, // Number of digits right of decimal point.
|
||||
(match[1] ? match[1].length : 0) - ( // Adjust for scientific notation.
|
||||
match[2] ? +match[2] : 0));
|
||||
} // Round to the nearest step
|
||||
|
||||
function round(number, step) {
|
||||
if (step < 1) {
|
||||
var places = getDecimalPlaces(step);
|
||||
return parseFloat(number.toFixed(places));
|
||||
}
|
||||
|
||||
return Math.round(number / step) * step;
|
||||
function getDecimalPlaces(e) {
|
||||
var t = "".concat(e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
|
||||
return t ? Math.max(0, (t[1] ? t[1].length : 0) - (t[2] ? +t[2] : 0)) : 0;
|
||||
}
|
||||
|
||||
var RangeTouch =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
/**
|
||||
* Setup a new instance
|
||||
* @param {String|Element} target
|
||||
* @param {Object} options
|
||||
*/
|
||||
function RangeTouch(target, options) {
|
||||
_classCallCheck(this, RangeTouch);
|
||||
|
||||
if (is.element(target)) {
|
||||
// An Element is passed, use it directly
|
||||
this.element = target;
|
||||
} else if (is.string(target)) {
|
||||
// A CSS Selector is passed, fetch it from the DOM
|
||||
this.element = document.querySelector(target);
|
||||
}
|
||||
|
||||
if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.config = Object.assign({}, defaults, options);
|
||||
this.init();
|
||||
function round(e, t) {
|
||||
if (1 > t) {
|
||||
var n = getDecimalPlaces(t);
|
||||
return parseFloat(e.toFixed(n));
|
||||
}
|
||||
|
||||
_createClass(RangeTouch, [{
|
||||
return Math.round(e / t) * t;
|
||||
}
|
||||
|
||||
var RangeTouch = function () {
|
||||
function e(t, n) {
|
||||
_classCallCheck$1(this, e), is.element(t) ? this.element = t : is.string(t) && (this.element = document.querySelector(t)), is.element(this.element) && is.empty(this.element.rangeTouch) && (this.config = _objectSpread2$1({}, defaults, {}, n), this.init());
|
||||
}
|
||||
|
||||
return _createClass$1(e, [{
|
||||
key: "init",
|
||||
value: function init() {
|
||||
// Bail if not a touch enabled device
|
||||
if (!RangeTouch.enabled) {
|
||||
return;
|
||||
} // Add useful CSS
|
||||
|
||||
|
||||
if (this.config.addCSS) {
|
||||
// TODO: Restore original values on destroy
|
||||
this.element.style.userSelect = 'none';
|
||||
this.element.style.webKitUserSelect = 'none';
|
||||
this.element.style.touchAction = 'manipulation';
|
||||
}
|
||||
|
||||
this.listeners(true);
|
||||
this.element.rangeTouch = this;
|
||||
value: function value() {
|
||||
e.enabled && (this.config.addCSS && (this.element.style.userSelect = "none", this.element.style.webKitUserSelect = "none", this.element.style.touchAction = "manipulation"), this.listeners(!0), this.element.rangeTouch = this);
|
||||
}
|
||||
}, {
|
||||
key: "destroy",
|
||||
value: function destroy() {
|
||||
// Bail if not a touch enabled device
|
||||
if (!RangeTouch.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.listeners(false);
|
||||
this.element.rangeTouch = null;
|
||||
value: function value() {
|
||||
e.enabled && (this.config.addCSS && (this.element.style.userSelect = "", this.element.style.webKitUserSelect = "", this.element.style.touchAction = ""), this.listeners(!1), this.element.rangeTouch = null);
|
||||
}
|
||||
}, {
|
||||
key: "listeners",
|
||||
value: function listeners(toggle) {
|
||||
var _this = this;
|
||||
|
||||
var method = toggle ? 'addEventListener' : 'removeEventListener'; // Listen for events
|
||||
|
||||
['touchstart', 'touchmove', 'touchend'].forEach(function (type) {
|
||||
_this.element[method](type, function (event) {
|
||||
return _this.set(event);
|
||||
}, false);
|
||||
value: function value(e) {
|
||||
var t = this,
|
||||
n = e ? "addEventListener" : "removeEventListener";
|
||||
["touchstart", "touchmove", "touchend"].forEach(function (e) {
|
||||
t.element[n](e, function (e) {
|
||||
return t.set(e);
|
||||
}, !1);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Get the value based on touch position
|
||||
* @param {Event} event
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "get",
|
||||
value: function get(event) {
|
||||
if (!RangeTouch.enabled || !is.event(event)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var input = event.target;
|
||||
var touch = event.changedTouches[0];
|
||||
var min = parseFloat(input.getAttribute('min')) || 0;
|
||||
var max = parseFloat(input.getAttribute('max')) || 100;
|
||||
var step = parseFloat(input.getAttribute('step')) || 1;
|
||||
var delta = max - min; // Calculate percentage
|
||||
|
||||
var percent;
|
||||
var clientRect = input.getBoundingClientRect();
|
||||
var thumbWidth = 100 / clientRect.width * (this.config.thumbWidth / 2) / 100; // Determine left percentage
|
||||
|
||||
percent = 100 / clientRect.width * (touch.clientX - clientRect.left); // Don't allow outside bounds
|
||||
|
||||
if (percent < 0) {
|
||||
percent = 0;
|
||||
} else if (percent > 100) {
|
||||
percent = 100;
|
||||
} // Factor in the thumb offset
|
||||
|
||||
|
||||
if (percent < 50) {
|
||||
percent -= (100 - percent * 2) * thumbWidth;
|
||||
} else if (percent > 50) {
|
||||
percent += (percent - 50) * 2 * thumbWidth;
|
||||
} // Find the closest step to the mouse position
|
||||
|
||||
|
||||
return min + round(delta * (percent / 100), step);
|
||||
value: function value(t) {
|
||||
if (!e.enabled || !is.event(t)) return null;
|
||||
var n,
|
||||
r = t.target,
|
||||
i = t.changedTouches[0],
|
||||
o = parseFloat(r.getAttribute("min")) || 0,
|
||||
s = parseFloat(r.getAttribute("max")) || 100,
|
||||
u = parseFloat(r.getAttribute("step")) || 1,
|
||||
c = r.getBoundingClientRect(),
|
||||
a = 100 / c.width * (this.config.thumbWidth / 2) / 100;
|
||||
return 0 > (n = 100 / c.width * (i.clientX - c.left)) ? n = 0 : 100 < n && (n = 100), 50 > n ? n -= (100 - 2 * n) * a : 50 < n && (n += 2 * (n - 50) * a), o + round(n / 100 * (s - o), u);
|
||||
}
|
||||
/**
|
||||
* Update range value based on position
|
||||
* @param {Event} event
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "set",
|
||||
value: function set(event) {
|
||||
if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {
|
||||
return;
|
||||
} // Prevent text highlight on iOS
|
||||
|
||||
|
||||
event.preventDefault(); // Set value
|
||||
|
||||
event.target.value = this.get(event); // Trigger event
|
||||
|
||||
trigger(event.target, event.type === 'touchend' ? 'change' : 'input');
|
||||
value: function value(t) {
|
||||
e.enabled && is.event(t) && !t.target.disabled && (t.preventDefault(), t.target.value = this.get(t), trigger(t.target, "touchend" === t.type ? "change" : "input"));
|
||||
}
|
||||
}], [{
|
||||
key: "setup",
|
||||
value: function value(t) {
|
||||
var n = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},
|
||||
r = null;
|
||||
if (is.empty(t) || is.string(t) ? r = Array.from(document.querySelectorAll(is.string(t) ? t : 'input[type="range"]')) : is.element(t) ? r = [t] : is.nodeList(t) ? r = Array.from(t) : is.array(t) && (r = t.filter(is.element)), is.empty(r)) return null;
|
||||
|
||||
/**
|
||||
* Setup multiple instances
|
||||
* @param {String|Element|NodeList|Array} target
|
||||
* @param {Object} options
|
||||
*/
|
||||
value: function setup(target) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var targets = null;
|
||||
var i = _objectSpread2$1({}, defaults, {}, n);
|
||||
|
||||
if (is.empty(target) || is.string(target)) {
|
||||
targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type="range"]'));
|
||||
} else if (is.element(target)) {
|
||||
targets = [target];
|
||||
} else if (is.nodeList(target)) {
|
||||
targets = Array.from(target);
|
||||
} else if (is.array(target)) {
|
||||
targets = target.filter(is.element);
|
||||
}
|
||||
|
||||
if (is.empty(targets)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var config = Object.assign({}, defaults, options);
|
||||
|
||||
if (is.string(target) && config.watch) {
|
||||
// Create an observer instance
|
||||
var observer = new MutationObserver(function (mutations) {
|
||||
Array.from(mutations).forEach(function (mutation) {
|
||||
Array.from(mutation.addedNodes).forEach(function (node) {
|
||||
if (!is.element(node) || !matches(node, target)) {
|
||||
return;
|
||||
} // eslint-disable-next-line no-unused-vars
|
||||
|
||||
|
||||
var range = new RangeTouch(node, config);
|
||||
if (is.string(t) && i.watch) {
|
||||
var o = new MutationObserver(function (n) {
|
||||
Array.from(n).forEach(function (n) {
|
||||
Array.from(n.addedNodes).forEach(function (n) {
|
||||
is.element(n) && matches(n, t) && new e(n, i);
|
||||
});
|
||||
});
|
||||
}); // Pass in the target node, as well as the observer options
|
||||
|
||||
observer.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
o.observe(document.body, {
|
||||
childList: !0,
|
||||
subtree: !0
|
||||
});
|
||||
}
|
||||
|
||||
return targets.map(function (t) {
|
||||
return new RangeTouch(t, options);
|
||||
return r.map(function (t) {
|
||||
return new e(t, n);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "enabled",
|
||||
get: function get() {
|
||||
return 'ontouchstart' in document.documentElement;
|
||||
return "ontouchstart" in document.documentElement;
|
||||
}
|
||||
}]);
|
||||
|
||||
return RangeTouch;
|
||||
}]), e;
|
||||
}();
|
||||
|
||||
// ==========================================================================
|
||||
@ -519,7 +431,7 @@ var isTrack = function isTrack(input) {
|
||||
};
|
||||
|
||||
var isPromise = function isPromise(input) {
|
||||
return instanceOf$1(input, Promise);
|
||||
return instanceOf$1(input, Promise) && isFunction$1(input.then);
|
||||
};
|
||||
|
||||
var isEmpty$1 = function isEmpty(input) {
|
||||
@ -861,12 +773,14 @@ function hasClass(element, className) {
|
||||
} // Element matches selector
|
||||
|
||||
function matches$1(element, selector) {
|
||||
var _Element = Element,
|
||||
prototype = _Element.prototype;
|
||||
|
||||
function match() {
|
||||
return Array.from(document.querySelectorAll(selector)).includes(this);
|
||||
}
|
||||
|
||||
var method = match;
|
||||
var method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;
|
||||
return method.call(element, selector);
|
||||
} // Find all elements
|
||||
|
||||
@ -1138,6 +1052,19 @@ function ready() {
|
||||
}).then(function () {});
|
||||
}
|
||||
|
||||
/**
|
||||
* Silence a Promise-like object.
|
||||
* This is useful for avoiding non-harmful, but potentially confusing "uncaught
|
||||
* play promise" rejection error messages.
|
||||
* @param {Object} value An object that may or may not be `Promise`-like.
|
||||
*/
|
||||
|
||||
function silencePromise(value) {
|
||||
if (is$1.promise(value)) {
|
||||
value.then(null, function () {});
|
||||
}
|
||||
}
|
||||
|
||||
function validateRatio(input) {
|
||||
if (!is$1.array(input) && (!is$1.string(input) || !input.includes(':'))) {
|
||||
return false;
|
||||
@ -1314,7 +1241,7 @@ var html5 = {
|
||||
player.currentTime = currentTime; // Resume playing
|
||||
|
||||
if (!paused) {
|
||||
player.play();
|
||||
silencePromise(player.play());
|
||||
}
|
||||
}); // Load new source
|
||||
|
||||
@ -1492,9 +1419,7 @@ var i18n = {
|
||||
}
|
||||
};
|
||||
|
||||
var Storage =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Storage = /*#__PURE__*/function () {
|
||||
function Storage(player) {
|
||||
_classCallCheck(this, Storage);
|
||||
|
||||
@ -1776,7 +1701,7 @@ var controls = {
|
||||
|
||||
var icon = document.createElementNS(namespace, 'svg');
|
||||
setAttributes(icon, extend(attributes, {
|
||||
role: 'presentation',
|
||||
'aria-hidden': 'true',
|
||||
focusable: 'false'
|
||||
})); // Create the <use> to reference sprite
|
||||
|
||||
@ -3366,7 +3291,7 @@ var captions = {
|
||||
|
||||
toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is$1.empty(tracks)); // Update available languages in list
|
||||
|
||||
if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {
|
||||
if (is$1.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {
|
||||
controls.setCaptionsMenu.call(this);
|
||||
}
|
||||
},
|
||||
@ -4005,9 +3930,7 @@ function getProviderByUrl(url) {
|
||||
// ==========================================================================
|
||||
var noop = function noop() {};
|
||||
|
||||
var Console =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Console = /*#__PURE__*/function () {
|
||||
function Console() {
|
||||
var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
||||
|
||||
@ -4043,9 +3966,7 @@ function () {
|
||||
return Console;
|
||||
}();
|
||||
|
||||
var Fullscreen =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Fullscreen = /*#__PURE__*/function () {
|
||||
function Fullscreen(player) {
|
||||
var _this = this;
|
||||
|
||||
@ -4235,7 +4156,7 @@ function () {
|
||||
|
||||
if (browser.isIos && this.player.config.fullscreen.iosNative) {
|
||||
this.target.webkitExitFullscreen();
|
||||
this.player.play();
|
||||
silencePromise(this.player.play());
|
||||
} else if (!Fullscreen.native || this.forceFallback) {
|
||||
this.toggleFallback(false);
|
||||
} else if (!this.prefix) {
|
||||
@ -4282,7 +4203,7 @@ function () {
|
||||
}
|
||||
|
||||
var element = !this.prefix ? document.fullscreenElement : document["".concat(this.prefix).concat(this.property, "Element")];
|
||||
return element === this.target;
|
||||
return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target;
|
||||
} // Get target element
|
||||
|
||||
}, {
|
||||
@ -4569,9 +4490,7 @@ var ui = {
|
||||
}
|
||||
};
|
||||
|
||||
var Listeners =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Listeners = /*#__PURE__*/function () {
|
||||
function Listeners(player) {
|
||||
_classCallCheck(this, Listeners);
|
||||
|
||||
@ -4662,7 +4581,7 @@ function () {
|
||||
case 75:
|
||||
// Space and K key
|
||||
if (!repeat) {
|
||||
player.togglePlay();
|
||||
silencePromise(player.togglePlay());
|
||||
}
|
||||
|
||||
break;
|
||||
@ -4980,9 +4899,13 @@ function () {
|
||||
if (player.ended) {
|
||||
_this.proxy(event, player.restart, 'restart');
|
||||
|
||||
_this.proxy(event, player.play, 'play');
|
||||
_this.proxy(event, function () {
|
||||
silencePromise(player.play());
|
||||
}, 'play');
|
||||
} else {
|
||||
_this.proxy(event, player.togglePlay, 'play');
|
||||
_this.proxy(event, function () {
|
||||
silencePromise(player.togglePlay());
|
||||
}, 'play');
|
||||
}
|
||||
});
|
||||
} // Disable right click
|
||||
@ -5080,7 +5003,9 @@ function () {
|
||||
|
||||
if (elements.buttons.play) {
|
||||
Array.from(elements.buttons.play).forEach(function (button) {
|
||||
_this3.bind(button, 'click', player.togglePlay, 'play');
|
||||
_this3.bind(button, 'click', function () {
|
||||
silencePromise(player.togglePlay());
|
||||
}, 'play');
|
||||
});
|
||||
} // Pause
|
||||
|
||||
@ -5177,7 +5102,7 @@ function () {
|
||||
|
||||
if (play && done) {
|
||||
seek.removeAttribute(attribute);
|
||||
player.play();
|
||||
silencePromise(player.play());
|
||||
} else if (!done && player.playing) {
|
||||
seek.setAttribute(attribute, '');
|
||||
player.pause();
|
||||
@ -5812,6 +5737,9 @@ var vimeo = {
|
||||
player.embed.setPlaybackRate(input).then(function () {
|
||||
speed = input;
|
||||
triggerEvent.call(player, player.media, 'ratechange');
|
||||
}).catch(function () {
|
||||
// Cannot set Playback Rate, Video is probably not on Pro account
|
||||
player.options.speed = [1];
|
||||
});
|
||||
}
|
||||
}); // Volume
|
||||
@ -6451,9 +6379,7 @@ var destroy = function destroy(instance) {
|
||||
instance.elements.container.remove();
|
||||
};
|
||||
|
||||
var Ads =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Ads = /*#__PURE__*/function () {
|
||||
/**
|
||||
* Ads constructor.
|
||||
* @param {Object} player
|
||||
@ -6553,6 +6479,8 @@ function () {
|
||||
* mobile devices, this initialization is done as the result of a user action.
|
||||
*/
|
||||
value: function setupIMA() {
|
||||
var _this4 = this;
|
||||
|
||||
// Create the container for our advertisements
|
||||
this.elements.container = createElement('div', {
|
||||
class: this.player.config.classNames.ads
|
||||
@ -6565,7 +6493,16 @@ function () {
|
||||
|
||||
google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline); // We assume the adContainer is the video container of the plyr element that will house the ads
|
||||
|
||||
this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Request video ads to be pre-loaded
|
||||
this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Create ads loader
|
||||
|
||||
this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events
|
||||
|
||||
this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) {
|
||||
return _this4.onAdsManagerLoaded(event);
|
||||
}, false);
|
||||
this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {
|
||||
return _this4.onAdError(error);
|
||||
}, false); // Request video ads to be pre-loaded
|
||||
|
||||
this.requestAds();
|
||||
}
|
||||
@ -6576,21 +6513,10 @@ function () {
|
||||
}, {
|
||||
key: "requestAds",
|
||||
value: function requestAds() {
|
||||
var _this4 = this;
|
||||
|
||||
var container = this.player.elements.container;
|
||||
|
||||
try {
|
||||
// Create ads loader
|
||||
this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events
|
||||
|
||||
this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) {
|
||||
return _this4.onAdsManagerLoaded(event);
|
||||
}, false);
|
||||
this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {
|
||||
return _this4.onAdError(error);
|
||||
}, false); // Request video ads
|
||||
|
||||
// Request video ads
|
||||
var request = new google.ima.AdsRequest();
|
||||
request.adTagUrl = this.tagUrl; // Specify the linear and nonlinear slot sizes. This helps the SDK
|
||||
// to select the correct creative if multiple are returned
|
||||
@ -6769,7 +6695,13 @@ function () {
|
||||
// };
|
||||
// TODO: So there is still this thing where a video should only be allowed to start
|
||||
// playing when the IMA SDK is ready or has failed
|
||||
this.loadAds();
|
||||
if (this.player.ended) {
|
||||
this.loadAds();
|
||||
} else {
|
||||
// The SDK won't allow new ads to be called without receiving a contentComplete()
|
||||
this.loader.contentComplete();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:
|
||||
@ -6905,7 +6837,7 @@ function () {
|
||||
|
||||
this.playing = false; // Play video
|
||||
|
||||
this.player.media.play();
|
||||
silencePromise(this.player.media.play());
|
||||
}
|
||||
/**
|
||||
* Pause our video
|
||||
@ -6962,7 +6894,9 @@ function () {
|
||||
_this11.on('loaded', resolve);
|
||||
|
||||
_this11.player.debug.log(_this11.manager);
|
||||
}); // Now request some new advertisements
|
||||
}); // Now that the manager has been destroyed set it to also be un-initialized
|
||||
|
||||
_this11.initialized = false; // Now request some new advertisements
|
||||
|
||||
_this11.requestAds();
|
||||
}).catch(function () {});
|
||||
@ -7145,9 +7079,7 @@ var fitRatio = function fitRatio(ratio, outer) {
|
||||
return result;
|
||||
};
|
||||
|
||||
var PreviewThumbnails =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var PreviewThumbnails = /*#__PURE__*/function () {
|
||||
/**
|
||||
* PreviewThumbnails constructor.
|
||||
* @param {Plyr} player
|
||||
@ -7208,15 +7140,10 @@ function () {
|
||||
|
||||
if (is$1.empty(src)) {
|
||||
throw new Error('Missing previewThumbnails.src config attribute');
|
||||
} // If string, convert into single-element list
|
||||
} // Resolve promise
|
||||
|
||||
|
||||
var urls = is$1.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails
|
||||
|
||||
var promises = urls.map(function (u) {
|
||||
return _this2.getThumbnail(u);
|
||||
});
|
||||
Promise.all(promises).then(function () {
|
||||
var sortAndResolve = function sortAndResolve() {
|
||||
// Sort smallest to biggest (e.g., [120p, 480p, 1080p])
|
||||
_this2.thumbnails.sort(function (x, y) {
|
||||
return x.height - y.height;
|
||||
@ -7225,7 +7152,25 @@ function () {
|
||||
_this2.player.debug.log('Preview thumbnails', _this2.thumbnails);
|
||||
|
||||
resolve();
|
||||
});
|
||||
}; // Via callback()
|
||||
|
||||
|
||||
if (is$1.function(src)) {
|
||||
src(function (thumbnails) {
|
||||
_this2.thumbnails = thumbnails;
|
||||
sortAndResolve();
|
||||
});
|
||||
} // VTT urls
|
||||
else {
|
||||
// If string, convert into single-element list
|
||||
var urls = is$1.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails
|
||||
|
||||
var promises = urls.map(function (u) {
|
||||
return _this2.getThumbnail(u);
|
||||
}); // Resolve
|
||||
|
||||
Promise.all(promises).then(sortAndResolve);
|
||||
}
|
||||
});
|
||||
} // Process individual VTT file
|
||||
|
||||
@ -7976,9 +7921,7 @@ function clamp() {
|
||||
// const globals = new WeakMap();
|
||||
// Plyr instance
|
||||
|
||||
var Plyr =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
var Plyr = /*#__PURE__*/function () {
|
||||
function Plyr(target, options) {
|
||||
var _this = this;
|
||||
|
||||
@ -8222,7 +8165,7 @@ function () {
|
||||
|
||||
if (this.isHTML5 && this.config.autoplay) {
|
||||
setTimeout(function () {
|
||||
return _this.play();
|
||||
return silencePromise(_this.play());
|
||||
}, 10);
|
||||
} // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek
|
||||
|
||||
@ -8259,7 +8202,7 @@ function () {
|
||||
this.ads.managerPromise.then(function () {
|
||||
return _this2.ads.play();
|
||||
}).catch(function () {
|
||||
return _this2.media.play();
|
||||
return silencePromise(_this2.media.play());
|
||||
});
|
||||
} // Return the promise (for HTML5)
|
||||
|
||||
|
Reference in New Issue
Block a user