Merge branch 'master' into develop
# Conflicts: # demo/dist/demo.min.js # demo/dist/demo.min.js.map # dist/plyr.min.js # dist/plyr.min.js.map # dist/plyr.min.mjs # dist/plyr.min.mjs.map # dist/plyr.polyfilled.min.js # dist/plyr.polyfilled.min.js.map # dist/plyr.polyfilled.min.mjs # dist/plyr.polyfilled.min.mjs.map # yarn.lock
This commit is contained in:
commit
87078d7a44
@ -134,13 +134,13 @@ See [initialising](#initialising) for more information on advanced setups.
|
||||
You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build.
|
||||
|
||||
```html
|
||||
<script src="https://cdn.plyr.io/3.6.2/plyr.js"></script>
|
||||
<script src="https://cdn.plyr.io/3.6.3/plyr.js"></script>
|
||||
```
|
||||
|
||||
...or...
|
||||
|
||||
```html
|
||||
<script src="https://cdn.plyr.io/3.6.2/plyr.polyfilled.js"></script>
|
||||
<script src="https://cdn.plyr.io/3.6.3/plyr.polyfilled.js"></script>
|
||||
```
|
||||
|
||||
## CSS
|
||||
@ -154,13 +154,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:
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="https://cdn.plyr.io/3.6.2/plyr.css" />
|
||||
<link rel="stylesheet" href="https://cdn.plyr.io/3.6.3/plyr.css" />
|
||||
```
|
||||
|
||||
## 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
|
||||
reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.6.2/plyr.svg`.
|
||||
reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.6.3/plyr.svg`.
|
||||
|
||||
# Ads
|
||||
|
||||
|
2
demo/dist/demo.css
vendored
2
demo/dist/demo.css
vendored
File diff suppressed because one or more lines are too long
343
demo/dist/demo.js
vendored
343
demo/dist/demo.js
vendored
@ -14817,7 +14817,7 @@ typeof navigator === "object" && (function () {
|
||||
check$1(typeof self == 'object' && self) ||
|
||||
check$1(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
|
||||
// eslint-disable-next-line no-new-func
|
||||
Function('return this')();
|
||||
(function () { return this; })() || Function('return this')();
|
||||
|
||||
var fails$1 = function (exec) {
|
||||
try {
|
||||
@ -15012,7 +15012,7 @@ typeof navigator === "object" && (function () {
|
||||
(module.exports = function (key, value) {
|
||||
return sharedStore$1[key] || (sharedStore$1[key] = value !== undefined ? value : {});
|
||||
})('versions', []).push({
|
||||
version: '3.6.5',
|
||||
version: '3.7.0',
|
||||
mode: 'global',
|
||||
copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
|
||||
});
|
||||
@ -15050,11 +15050,12 @@ typeof navigator === "object" && (function () {
|
||||
};
|
||||
|
||||
if (nativeWeakMap$1) {
|
||||
var store$3 = new WeakMap$4();
|
||||
var store$3 = sharedStore$1.state || (sharedStore$1.state = new WeakMap$4());
|
||||
var wmget$1 = store$3.get;
|
||||
var wmhas$1 = store$3.has;
|
||||
var wmset$1 = store$3.set;
|
||||
set$3 = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
wmset$1.call(store$3, it, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -15068,6 +15069,7 @@ typeof navigator === "object" && (function () {
|
||||
var STATE$1 = sharedKey$1('state');
|
||||
hiddenKeys$2[STATE$1] = true;
|
||||
set$3 = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
createNonEnumerableProperty$1(it, STATE$1, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -15096,9 +15098,15 @@ typeof navigator === "object" && (function () {
|
||||
var unsafe = options ? !!options.unsafe : false;
|
||||
var simple = options ? !!options.enumerable : false;
|
||||
var noTargetGet = options ? !!options.noTargetGet : false;
|
||||
var state;
|
||||
if (typeof value == 'function') {
|
||||
if (typeof key == 'string' && !has$2(value, 'name')) createNonEnumerableProperty$1(value, 'name', key);
|
||||
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
if (typeof key == 'string' && !has$2(value, 'name')) {
|
||||
createNonEnumerableProperty$1(value, 'name', key);
|
||||
}
|
||||
state = enforceInternalState(value);
|
||||
if (!state.source) {
|
||||
state.source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
}
|
||||
}
|
||||
if (O === global_1$1) {
|
||||
if (simple) O[key] = value;
|
||||
@ -15724,14 +15732,20 @@ typeof navigator === "object" && (function () {
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
|
||||
addToUnscopables$1(FIND$1);
|
||||
|
||||
var iteratorClose = function (iterator) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) {
|
||||
return anObject$1(returnMethod.call(iterator)).value;
|
||||
}
|
||||
};
|
||||
|
||||
// call something on iterator step with safe closing on error
|
||||
var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
|
||||
try {
|
||||
return ENTRIES ? fn(anObject$1(value)[0], value[1]) : fn(value);
|
||||
// 7.4.6 IteratorClose(iterator, completion)
|
||||
} catch (error) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) anObject$1(returnMethod.call(iterator));
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
@ -16452,11 +16466,11 @@ typeof navigator === "object" && (function () {
|
||||
var regexp = /./;
|
||||
try {
|
||||
'/./'[METHOD_NAME](regexp);
|
||||
} catch (e) {
|
||||
} catch (error1) {
|
||||
try {
|
||||
regexp[MATCH$4] = false;
|
||||
return '/./'[METHOD_NAME](regexp);
|
||||
} catch (f) { /* empty */ }
|
||||
} catch (error2) { /* empty */ }
|
||||
} return false;
|
||||
};
|
||||
|
||||
@ -16776,16 +16790,31 @@ typeof navigator === "object" && (function () {
|
||||
var internalMetadata_3$1 = internalMetadata$1.getWeakData;
|
||||
var internalMetadata_4$1 = internalMetadata$1.onFreeze;
|
||||
|
||||
var iterate_1$1 = createCommonjsModule(function (module) {
|
||||
var Result = function (stopped, result) {
|
||||
this.stopped = stopped;
|
||||
this.result = result;
|
||||
};
|
||||
|
||||
var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {
|
||||
var boundFunction = functionBindContext$1(fn, that, AS_ENTRIES ? 2 : 1);
|
||||
var iterate = function (iterable, unboundFunction, options) {
|
||||
var that = options && options.that;
|
||||
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
|
||||
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
|
||||
var INTERRUPTED = !!(options && options.INTERRUPTED);
|
||||
var fn = functionBindContext$1(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
|
||||
var iterator, iterFn, index, length, result, next, step;
|
||||
|
||||
var stop = function (condition) {
|
||||
if (iterator) iteratorClose(iterator);
|
||||
return new Result(true, condition);
|
||||
};
|
||||
|
||||
var callFn = function (value) {
|
||||
if (AS_ENTRIES) {
|
||||
anObject$1(value);
|
||||
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
|
||||
} return INTERRUPTED ? fn(value, stop) : fn(value);
|
||||
};
|
||||
|
||||
if (IS_ITERATOR) {
|
||||
iterator = iterable;
|
||||
} else {
|
||||
@ -16794,9 +16823,7 @@ typeof navigator === "object" && (function () {
|
||||
// optimisation for array iterators
|
||||
if (isArrayIteratorMethod$1(iterFn)) {
|
||||
for (index = 0, length = toLength$1(iterable.length); length > index; index++) {
|
||||
result = AS_ENTRIES
|
||||
? boundFunction(anObject$1(step = iterable[index])[0], step[1])
|
||||
: boundFunction(iterable[index]);
|
||||
result = callFn(iterable[index]);
|
||||
if (result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
}
|
||||
@ -16805,16 +16832,16 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
next = iterator.next;
|
||||
while (!(step = next.call(iterator)).done) {
|
||||
result = callWithSafeIterationClosing$1(iterator, boundFunction, step.value, AS_ENTRIES);
|
||||
try {
|
||||
result = callFn(step.value);
|
||||
} catch (error) {
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
if (typeof result == 'object' && result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
};
|
||||
|
||||
iterate.stop = function (result) {
|
||||
return new Result(true, result);
|
||||
};
|
||||
});
|
||||
|
||||
var anInstance$1 = function (it, Constructor, name) {
|
||||
if (!(it instanceof Constructor)) {
|
||||
throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
|
||||
@ -16878,7 +16905,7 @@ typeof navigator === "object" && (function () {
|
||||
Constructor = wrapper(function (dummy, iterable) {
|
||||
anInstance$1(dummy, Constructor, CONSTRUCTOR_NAME);
|
||||
var that = inheritIfRequired$1(new NativeConstructor(), dummy, Constructor);
|
||||
if (iterable != undefined) iterate_1$1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
return that;
|
||||
});
|
||||
Constructor.prototype = NativePrototype;
|
||||
@ -16968,7 +16995,7 @@ typeof navigator === "object" && (function () {
|
||||
id: id$3++,
|
||||
frozen: undefined
|
||||
});
|
||||
if (iterable != undefined) iterate_1$1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
});
|
||||
|
||||
var getInternalState = internalStateGetterFor$1(CONSTRUCTOR_NAME);
|
||||
@ -17806,7 +17833,7 @@ typeof navigator === "object" && (function () {
|
||||
var URLSearchParamsPrototype$1 = URLSearchParamsConstructor$1.prototype;
|
||||
|
||||
redefineAll$1(URLSearchParamsPrototype$1, {
|
||||
// `URLSearchParams.prototype.appent` method
|
||||
// `URLSearchParams.prototype.append` method
|
||||
// https://url.spec.whatwg.org/#dom-urlsearchparams-append
|
||||
append: function append(name, value) {
|
||||
validateArgumentsLength$1(arguments.length, 2);
|
||||
@ -19959,6 +19986,8 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
var engineIsIos$1 = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent$1);
|
||||
|
||||
var engineIsNode = classofRaw$1(global_1$1.process) == 'process';
|
||||
|
||||
var location$1 = global_1$1.location;
|
||||
var set$4 = global_1$1.setImmediate;
|
||||
var clear$1 = global_1$1.clearImmediate;
|
||||
@ -20011,7 +20040,7 @@ typeof navigator === "object" && (function () {
|
||||
delete queue$1[id];
|
||||
};
|
||||
// Node.js 0.8-
|
||||
if (classofRaw$1(process$6) == 'process') {
|
||||
if (engineIsNode) {
|
||||
defer$1 = function (id) {
|
||||
process$6.nextTick(runner$1(id));
|
||||
};
|
||||
@ -20033,8 +20062,8 @@ typeof navigator === "object" && (function () {
|
||||
global_1$1.addEventListener &&
|
||||
typeof postMessage == 'function' &&
|
||||
!global_1$1.importScripts &&
|
||||
!fails$1(post$1) &&
|
||||
location$1.protocol !== 'file:'
|
||||
location$1 && location$1.protocol !== 'file:' &&
|
||||
!fails$1(post$1)
|
||||
) {
|
||||
defer$1 = post$1;
|
||||
global_1$1.addEventListener('message', listener$1, false);
|
||||
@ -20060,14 +20089,14 @@ typeof navigator === "object" && (function () {
|
||||
};
|
||||
|
||||
var getOwnPropertyDescriptor$7 = objectGetOwnPropertyDescriptor$1.f;
|
||||
|
||||
var macrotask$1 = task$2.set;
|
||||
|
||||
|
||||
|
||||
var MutationObserver$2 = global_1$1.MutationObserver || global_1$1.WebKitMutationObserver;
|
||||
var document$4 = global_1$1.document;
|
||||
var process$7 = global_1$1.process;
|
||||
var Promise$2 = global_1$1.Promise;
|
||||
var IS_NODE$2 = classofRaw$1(process$7) == 'process';
|
||||
// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
|
||||
var queueMicrotaskDescriptor$1 = getOwnPropertyDescriptor$7(global_1$1, 'queueMicrotask');
|
||||
var queueMicrotask$1 = queueMicrotaskDescriptor$1 && queueMicrotaskDescriptor$1.value;
|
||||
@ -20078,7 +20107,7 @@ typeof navigator === "object" && (function () {
|
||||
if (!queueMicrotask$1) {
|
||||
flush$1 = function () {
|
||||
var parent, fn;
|
||||
if (IS_NODE$2 && (parent = process$7.domain)) parent.exit();
|
||||
if (engineIsNode && (parent = process$7.domain)) parent.exit();
|
||||
while (head$1) {
|
||||
fn = head$1.fn;
|
||||
head$1 = head$1.next;
|
||||
@ -20093,15 +20122,10 @@ typeof navigator === "object" && (function () {
|
||||
if (parent) parent.enter();
|
||||
};
|
||||
|
||||
// Node.js
|
||||
if (IS_NODE$2) {
|
||||
notify$2 = function () {
|
||||
process$7.nextTick(flush$1);
|
||||
};
|
||||
// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
|
||||
} else if (MutationObserver$2 && !engineIsIos$1) {
|
||||
if (!engineIsIos$1 && !engineIsNode && MutationObserver$2 && document$4) {
|
||||
toggle$1 = true;
|
||||
node$1 = document.createTextNode('');
|
||||
node$1 = document$4.createTextNode('');
|
||||
new MutationObserver$2(flush$1).observe(node$1, { characterData: true });
|
||||
notify$2 = function () {
|
||||
node$1.data = toggle$1 = !toggle$1;
|
||||
@ -20114,6 +20138,11 @@ typeof navigator === "object" && (function () {
|
||||
notify$2 = function () {
|
||||
then$1.call(promise$1, flush$1);
|
||||
};
|
||||
// Node.js without promises
|
||||
} else if (engineIsNode) {
|
||||
notify$2 = function () {
|
||||
process$7.nextTick(flush$1);
|
||||
};
|
||||
// for other environments - macrotask based on:
|
||||
// - setImmediate
|
||||
// - MessageChannel
|
||||
@ -20192,6 +20221,7 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
|
||||
|
||||
|
||||
var SPECIES$c = wellKnownSymbol$1('species');
|
||||
var PROMISE$1 = 'Promise';
|
||||
var getInternalState$8 = internalState$1.get;
|
||||
@ -20199,13 +20229,13 @@ typeof navigator === "object" && (function () {
|
||||
var getInternalPromiseState$1 = internalState$1.getterFor(PROMISE$1);
|
||||
var PromiseConstructor$1 = nativePromiseConstructor$1;
|
||||
var TypeError$2 = global_1$1.TypeError;
|
||||
var document$4 = global_1$1.document;
|
||||
var document$5 = global_1$1.document;
|
||||
var process$8 = global_1$1.process;
|
||||
var $fetch$3 = getBuiltIn$1('fetch');
|
||||
var newPromiseCapability$3 = newPromiseCapability$2.f;
|
||||
var newGenericPromiseCapability$1 = newPromiseCapability$3;
|
||||
var IS_NODE$3 = classofRaw$1(process$8) == 'process';
|
||||
var DISPATCH_EVENT$1 = !!(document$4 && document$4.createEvent && global_1$1.dispatchEvent);
|
||||
var DISPATCH_EVENT$1 = !!(document$5 && document$5.createEvent && global_1$1.dispatchEvent);
|
||||
var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
|
||||
var UNHANDLED_REJECTION$1 = 'unhandledrejection';
|
||||
var REJECTION_HANDLED$1 = 'rejectionhandled';
|
||||
var PENDING$1 = 0;
|
||||
@ -20223,7 +20253,7 @@ typeof navigator === "object" && (function () {
|
||||
// We can't detect it synchronously, so just check versions
|
||||
if (engineV8Version$1 === 66) return true;
|
||||
// Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
|
||||
if (!IS_NODE$3 && typeof PromiseRejectionEvent != 'function') return true;
|
||||
if (!engineIsNode && !NATIVE_REJECTION_EVENT) return true;
|
||||
}
|
||||
// We can't use @@species feature detection in V8 since it causes
|
||||
// deoptimization and performance degradation
|
||||
@ -20249,7 +20279,7 @@ typeof navigator === "object" && (function () {
|
||||
return isObject$2(it) && typeof (then = it.then) == 'function' ? then : false;
|
||||
};
|
||||
|
||||
var notify$3 = function (promise, state, isReject) {
|
||||
var notify$3 = function (state, isReject) {
|
||||
if (state.notified) return;
|
||||
state.notified = true;
|
||||
var chain = state.reactions;
|
||||
@ -20268,7 +20298,7 @@ typeof navigator === "object" && (function () {
|
||||
try {
|
||||
if (handler) {
|
||||
if (!ok) {
|
||||
if (state.rejection === UNHANDLED$1) onHandleUnhandled$1(promise, state);
|
||||
if (state.rejection === UNHANDLED$1) onHandleUnhandled$1(state);
|
||||
state.rejection = HANDLED$1;
|
||||
}
|
||||
if (handler === true) result = value;
|
||||
@ -20293,36 +20323,37 @@ typeof navigator === "object" && (function () {
|
||||
}
|
||||
state.reactions = [];
|
||||
state.notified = false;
|
||||
if (isReject && !state.rejection) onUnhandled$1(promise, state);
|
||||
if (isReject && !state.rejection) onUnhandled$1(state);
|
||||
});
|
||||
};
|
||||
|
||||
var dispatchEvent$1 = function (name, promise, reason) {
|
||||
var event, handler;
|
||||
if (DISPATCH_EVENT$1) {
|
||||
event = document$4.createEvent('Event');
|
||||
event = document$5.createEvent('Event');
|
||||
event.promise = promise;
|
||||
event.reason = reason;
|
||||
event.initEvent(name, false, true);
|
||||
global_1$1.dispatchEvent(event);
|
||||
} else event = { promise: promise, reason: reason };
|
||||
if (handler = global_1$1['on' + name]) handler(event);
|
||||
if (!NATIVE_REJECTION_EVENT && (handler = global_1$1['on' + name])) handler(event);
|
||||
else if (name === UNHANDLED_REJECTION$1) hostReportErrors$1('Unhandled promise rejection', reason);
|
||||
};
|
||||
|
||||
var onUnhandled$1 = function (promise, state) {
|
||||
var onUnhandled$1 = function (state) {
|
||||
task$3.call(global_1$1, function () {
|
||||
var promise = state.facade;
|
||||
var value = state.value;
|
||||
var IS_UNHANDLED = isUnhandled$1(state);
|
||||
var result;
|
||||
if (IS_UNHANDLED) {
|
||||
result = perform$1(function () {
|
||||
if (IS_NODE$3) {
|
||||
if (engineIsNode) {
|
||||
process$8.emit('unhandledRejection', value, promise);
|
||||
} else dispatchEvent$1(UNHANDLED_REJECTION$1, promise, value);
|
||||
});
|
||||
// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
|
||||
state.rejection = IS_NODE$3 || isUnhandled$1(state) ? UNHANDLED$1 : HANDLED$1;
|
||||
state.rejection = engineIsNode || isUnhandled$1(state) ? UNHANDLED$1 : HANDLED$1;
|
||||
if (result.error) throw result.value;
|
||||
}
|
||||
});
|
||||
@ -20332,55 +20363,56 @@ typeof navigator === "object" && (function () {
|
||||
return state.rejection !== HANDLED$1 && !state.parent;
|
||||
};
|
||||
|
||||
var onHandleUnhandled$1 = function (promise, state) {
|
||||
var onHandleUnhandled$1 = function (state) {
|
||||
task$3.call(global_1$1, function () {
|
||||
if (IS_NODE$3) {
|
||||
var promise = state.facade;
|
||||
if (engineIsNode) {
|
||||
process$8.emit('rejectionHandled', promise);
|
||||
} else dispatchEvent$1(REJECTION_HANDLED$1, promise, state.value);
|
||||
});
|
||||
};
|
||||
|
||||
var bind$1 = function (fn, promise, state, unwrap) {
|
||||
var bind$1 = function (fn, state, unwrap) {
|
||||
return function (value) {
|
||||
fn(promise, state, value, unwrap);
|
||||
fn(state, value, unwrap);
|
||||
};
|
||||
};
|
||||
|
||||
var internalReject$1 = function (promise, state, value, unwrap) {
|
||||
var internalReject$1 = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
state.value = value;
|
||||
state.state = REJECTED$1;
|
||||
notify$3(promise, state, true);
|
||||
notify$3(state, true);
|
||||
};
|
||||
|
||||
var internalResolve$1 = function (promise, state, value, unwrap) {
|
||||
var internalResolve$1 = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
try {
|
||||
if (promise === value) throw TypeError$2("Promise can't be resolved itself");
|
||||
if (state.facade === value) throw TypeError$2("Promise can't be resolved itself");
|
||||
var then = isThenable$2(value);
|
||||
if (then) {
|
||||
microtask$1(function () {
|
||||
var wrapper = { done: false };
|
||||
try {
|
||||
then.call(value,
|
||||
bind$1(internalResolve$1, promise, wrapper, state),
|
||||
bind$1(internalReject$1, promise, wrapper, state)
|
||||
bind$1(internalResolve$1, wrapper, state),
|
||||
bind$1(internalReject$1, wrapper, state)
|
||||
);
|
||||
} catch (error) {
|
||||
internalReject$1(promise, wrapper, error, state);
|
||||
internalReject$1(wrapper, error, state);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
state.value = value;
|
||||
state.state = FULFILLED$1;
|
||||
notify$3(promise, state, false);
|
||||
notify$3(state, false);
|
||||
}
|
||||
} catch (error) {
|
||||
internalReject$1(promise, { done: false }, error, state);
|
||||
internalReject$1({ done: false }, error, state);
|
||||
}
|
||||
};
|
||||
|
||||
@ -20393,9 +20425,9 @@ typeof navigator === "object" && (function () {
|
||||
Internal$1.call(this);
|
||||
var state = getInternalState$8(this);
|
||||
try {
|
||||
executor(bind$1(internalResolve$1, this, state), bind$1(internalReject$1, this, state));
|
||||
executor(bind$1(internalResolve$1, state), bind$1(internalReject$1, state));
|
||||
} catch (error) {
|
||||
internalReject$1(this, state, error);
|
||||
internalReject$1(state, error);
|
||||
}
|
||||
};
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
@ -20419,10 +20451,10 @@ typeof navigator === "object" && (function () {
|
||||
var reaction = newPromiseCapability$3(speciesConstructor$1(this, PromiseConstructor$1));
|
||||
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
|
||||
reaction.fail = typeof onRejected == 'function' && onRejected;
|
||||
reaction.domain = IS_NODE$3 ? process$8.domain : undefined;
|
||||
reaction.domain = engineIsNode ? process$8.domain : undefined;
|
||||
state.parent = true;
|
||||
state.reactions.push(reaction);
|
||||
if (state.state != PENDING$1) notify$3(this, state, false);
|
||||
if (state.state != PENDING$1) notify$3(state, false);
|
||||
return reaction.promise;
|
||||
},
|
||||
// `Promise.prototype.catch` method
|
||||
@ -20435,8 +20467,8 @@ typeof navigator === "object" && (function () {
|
||||
var promise = new Internal$1();
|
||||
var state = getInternalState$8(promise);
|
||||
this.promise = promise;
|
||||
this.resolve = bind$1(internalResolve$1, promise, state);
|
||||
this.reject = bind$1(internalReject$1, promise, state);
|
||||
this.resolve = bind$1(internalResolve$1, state);
|
||||
this.reject = bind$1(internalReject$1, state);
|
||||
};
|
||||
newPromiseCapability$2.f = newPromiseCapability$3 = function (C) {
|
||||
return C === PromiseConstructor$1 || C === PromiseWrapper$1
|
||||
@ -20507,7 +20539,7 @@ typeof navigator === "object" && (function () {
|
||||
var values = [];
|
||||
var counter = 0;
|
||||
var remaining = 1;
|
||||
iterate_1$1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
var index = counter++;
|
||||
var alreadyCalled = false;
|
||||
values.push(undefined);
|
||||
@ -20532,7 +20564,7 @@ typeof navigator === "object" && (function () {
|
||||
var reject = capability.reject;
|
||||
var result = perform$1(function () {
|
||||
var $promiseResolve = aFunction$3(C.resolve);
|
||||
iterate_1$1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
$promiseResolve.call(C, promise).then(capability.resolve, reject);
|
||||
});
|
||||
});
|
||||
@ -20779,12 +20811,17 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var STRICT_METHOD$a = arrayMethodIsStrict$1('reduce');
|
||||
var USES_TO_LENGTH$i = arrayMethodUsesToLength$1('reduce', { 1: 0 });
|
||||
// Chrome 80-82 has a critical bug
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
|
||||
var CHROME_BUG = !engineIsNode && engineV8Version$1 > 79 && engineV8Version$1 < 83;
|
||||
|
||||
// `Array.prototype.reduce` method
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.reduce
|
||||
_export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$a || !USES_TO_LENGTH$i }, {
|
||||
_export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$a || !USES_TO_LENGTH$i || CHROME_BUG }, {
|
||||
reduce: function reduce(callbackfn /* , initialValue */) {
|
||||
return $reduce$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
|
||||
}
|
||||
@ -24003,7 +24040,7 @@ typeof navigator === "object" && (function () {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
// Quality default
|
||||
@ -24121,7 +24158,7 @@ typeof navigator === "object" && (function () {
|
||||
vimeo: {
|
||||
sdk: 'https://player.vimeo.com/api/player.js',
|
||||
iframe: 'https://player.vimeo.com/video/{0}?{1}',
|
||||
api: 'https://vimeo.com/api/v2/video/{0}.json'
|
||||
api: 'https://vimeo.com/api/oembed.json?url={0}'
|
||||
},
|
||||
youtube: {
|
||||
sdk: 'https://www.youtube.com/iframe_api',
|
||||
@ -24291,24 +24328,27 @@ typeof navigator === "object" && (function () {
|
||||
title: false,
|
||||
speed: true,
|
||||
transparent: false,
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
referrerPolicy: null,
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
// Whether the owner of the video has a Pro or Business account
|
||||
// (which allows us to properly hide controls without CSS hacks, etc)
|
||||
premium: false,
|
||||
// Custom settings from Plyr
|
||||
referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
|
||||
premium: false
|
||||
},
|
||||
// YouTube plugin
|
||||
youtube: {
|
||||
noCookie: true,
|
||||
// Whether to use an alternative version of YouTube without cookies
|
||||
rel: 0,
|
||||
// No related vids
|
||||
showinfo: 0,
|
||||
// Hide info
|
||||
iv_load_policy: 3,
|
||||
// Hide annotations
|
||||
modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)
|
||||
modestbranding: 1,
|
||||
// Hide logos as much as possible (they still show one in the corner when paused)
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
noCookie: false // Whether to use an alternative version of YouTube without cookies
|
||||
|
||||
}
|
||||
};
|
||||
@ -24427,7 +24467,7 @@ typeof navigator === "object" && (function () {
|
||||
return;
|
||||
}
|
||||
|
||||
_this.toggle();
|
||||
_this.player.listeners.proxy(event, _this.toggle, 'fullscreen');
|
||||
}); // Tap focus when in fullscreen
|
||||
|
||||
on.call(this, this.player.elements.container, 'keydown', function (event) {
|
||||
@ -24850,7 +24890,9 @@ typeof navigator === "object" && (function () {
|
||||
} // Set property synchronously to respect the call order
|
||||
|
||||
|
||||
this.media.setAttribute('data-poster', poster); // Wait until ui is ready
|
||||
this.media.setAttribute('data-poster', poster); // Show the poster
|
||||
|
||||
this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready
|
||||
|
||||
return ready.call(this) // Load image
|
||||
.then(function () {
|
||||
@ -25282,7 +25324,14 @@ typeof navigator === "object" && (function () {
|
||||
ratio = _setPlayerSize.ratio; // Set Vimeo gutter
|
||||
|
||||
|
||||
setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
setGutter(ratio, padding, isEnter); // Horrible hack for Safari 14 not repainting properly on entering fullscreen
|
||||
|
||||
if (isEnter) {
|
||||
setTimeout(function () {
|
||||
return repaint(elements.container);
|
||||
}, 100);
|
||||
} // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
|
||||
|
||||
if (!usingNative) {
|
||||
if (isEnter) {
|
||||
@ -25473,9 +25522,17 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind
|
||||
this.bind(elements.buttons.rewind, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after rewind
|
||||
player.lastSeekTime = Date.now();
|
||||
player.rewind();
|
||||
}, 'rewind'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle
|
||||
this.bind(elements.buttons.fastForward, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after fast forward
|
||||
player.lastSeekTime = Date.now();
|
||||
player.forward();
|
||||
}, 'fastForward'); // Mute toggle
|
||||
|
||||
this.bind(elements.buttons.mute, 'click', function () {
|
||||
player.muted = !player.muted;
|
||||
@ -26183,35 +26240,32 @@ typeof navigator === "object" && (function () {
|
||||
} // Inject the package
|
||||
|
||||
|
||||
var poster = player.poster;
|
||||
|
||||
if (premium) {
|
||||
iframe.setAttribute('data-poster', poster);
|
||||
if (premium || !config.customControls) {
|
||||
iframe.setAttribute('data-poster', player.poster);
|
||||
player.media = replaceElement(iframe, player.media);
|
||||
} else {
|
||||
var wrapper = createElement$1('div', {
|
||||
class: player.config.classNames.embedContainer,
|
||||
'data-poster': poster
|
||||
'data-poster': player.poster
|
||||
});
|
||||
wrapper.appendChild(iframe);
|
||||
player.media = replaceElement(wrapper, player.media);
|
||||
} // Get poster image
|
||||
|
||||
|
||||
fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
|
||||
if (is$2.empty(response)) {
|
||||
return;
|
||||
} // Get the URL for thumbnail
|
||||
if (!config.customControls) {
|
||||
fetch(format(player.config.urls.vimeo.api, src)).then(function (response) {
|
||||
if (is$2.empty(response) || !response.thumbnail_url) {
|
||||
return;
|
||||
} // Set and show poster
|
||||
|
||||
|
||||
var url = new URL(response[0].thumbnail_large); // Get original image
|
||||
|
||||
url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster
|
||||
|
||||
ui.setPoster.call(player, url.href).catch(function () {});
|
||||
}); // Setup instance
|
||||
ui.setPoster.call(player, response.thumbnail_url).catch(function () {});
|
||||
});
|
||||
} // Setup instance
|
||||
// https://github.com/vimeo/player.js
|
||||
|
||||
|
||||
player.embed = new window.Vimeo.Player(iframe, {
|
||||
autopause: player.config.autopause,
|
||||
muted: player.muted
|
||||
@ -26451,9 +26505,11 @@ typeof navigator === "object" && (function () {
|
||||
triggerEvent.call(player, player.media, 'error');
|
||||
}); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -26544,7 +26600,8 @@ typeof navigator === "object" && (function () {
|
||||
},
|
||||
// API ready
|
||||
ready: function ready() {
|
||||
var player = this; // Ignore already setup (race condition)
|
||||
var player = this;
|
||||
var config = player.config.youtube; // Ignore already setup (race condition)
|
||||
|
||||
var currentId = player.media && player.media.getAttribute('id');
|
||||
|
||||
@ -26561,53 +26618,53 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
|
||||
var videoId = parseId$1(source);
|
||||
var id = generateId(player.provider); // Get poster, if already set
|
||||
|
||||
var poster = player.poster; // Replace media element
|
||||
var id = generateId(player.provider); // Replace media element
|
||||
|
||||
var container = createElement$1('div', {
|
||||
id: id,
|
||||
'data-poster': poster
|
||||
'data-poster': config.customControls ? player.poster : undefined
|
||||
});
|
||||
player.media = replaceElement(container, player.media); // Id to poster wrapper
|
||||
player.media = replaceElement(container, player.media); // Only load the poster when using custom controls
|
||||
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
if (config.customControls) {
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
|
||||
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
var config = player.config.youtube; // Setup instance
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
} // Setup instance
|
||||
// https://developers.google.com/youtube/iframe_api_reference
|
||||
|
||||
player.embed = new window.YT.Player(id, {
|
||||
|
||||
player.embed = new window.YT.Player(player.media, {
|
||||
videoId: videoId,
|
||||
host: getHost$2(config),
|
||||
playerVars: extend$1({}, {
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// Autoplay
|
||||
hl: player.config.hl,
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// iframe interface language
|
||||
controls: player.supported.ui ? 0 : 1,
|
||||
// Only show controls if not fully supported
|
||||
disablekb: 1,
|
||||
hl: player.config.hl,
|
||||
// Only show controls if not fully supported or opted out
|
||||
controls: player.supported.ui && config.customControls ? 0 : 1,
|
||||
// Disable keyboard as we handle it
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
disablekb: 1,
|
||||
// Allow iOS inline playback
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
// Captions are flaky on YouTube
|
||||
cc_load_policy: player.captions.active ? 1 : 0,
|
||||
cc_lang_pref: player.config.captions.language,
|
||||
@ -26718,6 +26775,7 @@ typeof navigator === "object" && (function () {
|
||||
var toggle = is$2.boolean(input) ? input : muted;
|
||||
muted = toggle;
|
||||
instance[toggle ? 'mute' : 'unMute']();
|
||||
instance.setVolume(volume * 100);
|
||||
triggerEvent.call(player, player.media, 'volumechange');
|
||||
}
|
||||
}); // Source
|
||||
@ -26740,7 +26798,7 @@ typeof navigator === "object" && (function () {
|
||||
return player.config.speed.options.includes(s);
|
||||
}); // Set the tabindex to avoid focus entering iframe
|
||||
|
||||
if (player.supported.ui) {
|
||||
if (player.supported.ui && config.customControls) {
|
||||
player.media.setAttribute('tabindex', -1);
|
||||
}
|
||||
|
||||
@ -26767,9 +26825,11 @@ typeof navigator === "object" && (function () {
|
||||
}
|
||||
}, 200); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
}
|
||||
},
|
||||
onStateChange: function onStateChange(event) {
|
||||
// Get the instance
|
||||
@ -26815,7 +26875,7 @@ typeof navigator === "object" && (function () {
|
||||
|
||||
case 1:
|
||||
// Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
|
||||
if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
if (config.customControls && !player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
player.media.pause();
|
||||
} else {
|
||||
assurePlaybackState$1.call(player, true);
|
||||
@ -26888,7 +26948,8 @@ typeof navigator === "object" && (function () {
|
||||
wrap$4(this.media, this.elements.wrapper); // Poster image container
|
||||
|
||||
this.elements.poster = createElement$1('div', {
|
||||
class: this.config.classNames.poster
|
||||
class: this.config.classNames.poster,
|
||||
hidden: ''
|
||||
});
|
||||
this.elements.wrapper.appendChild(this.elements.poster);
|
||||
}
|
||||
|
6
demo/dist/demo.min.js
vendored
6
demo/dist/demo.min.js
vendored
File diff suppressed because one or more lines are too long
2
demo/dist/demo.min.js.map
vendored
2
demo/dist/demo.min.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.css
vendored
2
dist/plyr.css
vendored
File diff suppressed because one or more lines are too long
164
dist/plyr.js
vendored
164
dist/plyr.js
vendored
@ -3659,7 +3659,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
// Quality default
|
||||
@ -3777,7 +3777,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
vimeo: {
|
||||
sdk: 'https://player.vimeo.com/api/player.js',
|
||||
iframe: 'https://player.vimeo.com/video/{0}?{1}',
|
||||
api: 'https://vimeo.com/api/v2/video/{0}.json'
|
||||
api: 'https://vimeo.com/api/oembed.json?url={0}'
|
||||
},
|
||||
youtube: {
|
||||
sdk: 'https://www.youtube.com/iframe_api',
|
||||
@ -3947,24 +3947,27 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
title: false,
|
||||
speed: true,
|
||||
transparent: false,
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
referrerPolicy: null,
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
// Whether the owner of the video has a Pro or Business account
|
||||
// (which allows us to properly hide controls without CSS hacks, etc)
|
||||
premium: false,
|
||||
// Custom settings from Plyr
|
||||
referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
|
||||
premium: false
|
||||
},
|
||||
// YouTube plugin
|
||||
youtube: {
|
||||
noCookie: true,
|
||||
// Whether to use an alternative version of YouTube without cookies
|
||||
rel: 0,
|
||||
// No related vids
|
||||
showinfo: 0,
|
||||
// Hide info
|
||||
iv_load_policy: 3,
|
||||
// Hide annotations
|
||||
modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)
|
||||
modestbranding: 1,
|
||||
// Hide logos as much as possible (they still show one in the corner when paused)
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
noCookie: false // Whether to use an alternative version of YouTube without cookies
|
||||
|
||||
}
|
||||
};
|
||||
@ -4083,7 +4086,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return;
|
||||
}
|
||||
|
||||
_this.toggle();
|
||||
_this.player.listeners.proxy(event, _this.toggle, 'fullscreen');
|
||||
}); // Tap focus when in fullscreen
|
||||
|
||||
on.call(this, this.player.elements.container, 'keydown', function (event) {
|
||||
@ -4493,7 +4496,9 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
} // Set property synchronously to respect the call order
|
||||
|
||||
|
||||
this.media.setAttribute('data-poster', poster); // Wait until ui is ready
|
||||
this.media.setAttribute('data-poster', poster); // Show the poster
|
||||
|
||||
this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready
|
||||
|
||||
return ready.call(this) // Load image
|
||||
.then(function () {
|
||||
@ -4925,7 +4930,14 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
ratio = _setPlayerSize.ratio; // Set Vimeo gutter
|
||||
|
||||
|
||||
setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
setGutter(ratio, padding, isEnter); // Horrible hack for Safari 14 not repainting properly on entering fullscreen
|
||||
|
||||
if (isEnter) {
|
||||
setTimeout(function () {
|
||||
return repaint(elements.container);
|
||||
}, 100);
|
||||
} // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
|
||||
|
||||
if (!usingNative) {
|
||||
if (isEnter) {
|
||||
@ -5116,9 +5128,17 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind
|
||||
this.bind(elements.buttons.rewind, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after rewind
|
||||
player.lastSeekTime = Date.now();
|
||||
player.rewind();
|
||||
}, 'rewind'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle
|
||||
this.bind(elements.buttons.fastForward, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after fast forward
|
||||
player.lastSeekTime = Date.now();
|
||||
player.forward();
|
||||
}, 'fastForward'); // Mute toggle
|
||||
|
||||
this.bind(elements.buttons.mute, 'click', function () {
|
||||
player.muted = !player.muted;
|
||||
@ -5773,35 +5793,32 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
} // Inject the package
|
||||
|
||||
|
||||
var poster = player.poster;
|
||||
|
||||
if (premium) {
|
||||
iframe.setAttribute('data-poster', poster);
|
||||
if (premium || !config.customControls) {
|
||||
iframe.setAttribute('data-poster', player.poster);
|
||||
player.media = replaceElement(iframe, player.media);
|
||||
} else {
|
||||
var wrapper = createElement('div', {
|
||||
class: player.config.classNames.embedContainer,
|
||||
'data-poster': poster
|
||||
'data-poster': player.poster
|
||||
});
|
||||
wrapper.appendChild(iframe);
|
||||
player.media = replaceElement(wrapper, player.media);
|
||||
} // Get poster image
|
||||
|
||||
|
||||
fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
|
||||
if (is$1.empty(response)) {
|
||||
return;
|
||||
} // Get the URL for thumbnail
|
||||
if (!config.customControls) {
|
||||
fetch(format(player.config.urls.vimeo.api, src)).then(function (response) {
|
||||
if (is$1.empty(response) || !response.thumbnail_url) {
|
||||
return;
|
||||
} // Set and show poster
|
||||
|
||||
|
||||
var url = new URL(response[0].thumbnail_large); // Get original image
|
||||
|
||||
url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster
|
||||
|
||||
ui.setPoster.call(player, url.href).catch(function () {});
|
||||
}); // Setup instance
|
||||
ui.setPoster.call(player, response.thumbnail_url).catch(function () {});
|
||||
});
|
||||
} // Setup instance
|
||||
// https://github.com/vimeo/player.js
|
||||
|
||||
|
||||
player.embed = new window.Vimeo.Player(iframe, {
|
||||
autopause: player.config.autopause,
|
||||
muted: player.muted
|
||||
@ -6041,9 +6058,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
triggerEvent.call(player, player.media, 'error');
|
||||
}); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -6136,7 +6155,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
},
|
||||
// API ready
|
||||
ready: function ready() {
|
||||
var player = this; // Ignore already setup (race condition)
|
||||
var player = this;
|
||||
var config = player.config.youtube; // Ignore already setup (race condition)
|
||||
|
||||
var currentId = player.media && player.media.getAttribute('id');
|
||||
|
||||
@ -6153,53 +6173,53 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
|
||||
var videoId = parseId$1(source);
|
||||
var id = generateId(player.provider); // Get poster, if already set
|
||||
|
||||
var poster = player.poster; // Replace media element
|
||||
var id = generateId(player.provider); // Replace media element
|
||||
|
||||
var container = createElement('div', {
|
||||
id: id,
|
||||
'data-poster': poster
|
||||
'data-poster': config.customControls ? player.poster : undefined
|
||||
});
|
||||
player.media = replaceElement(container, player.media); // Id to poster wrapper
|
||||
player.media = replaceElement(container, player.media); // Only load the poster when using custom controls
|
||||
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
if (config.customControls) {
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
|
||||
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
var config = player.config.youtube; // Setup instance
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
} // Setup instance
|
||||
// https://developers.google.com/youtube/iframe_api_reference
|
||||
|
||||
player.embed = new window.YT.Player(id, {
|
||||
|
||||
player.embed = new window.YT.Player(player.media, {
|
||||
videoId: videoId,
|
||||
host: getHost(config),
|
||||
playerVars: extend({}, {
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// Autoplay
|
||||
hl: player.config.hl,
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// iframe interface language
|
||||
controls: player.supported.ui ? 0 : 1,
|
||||
// Only show controls if not fully supported
|
||||
disablekb: 1,
|
||||
hl: player.config.hl,
|
||||
// Only show controls if not fully supported or opted out
|
||||
controls: player.supported.ui && config.customControls ? 0 : 1,
|
||||
// Disable keyboard as we handle it
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
disablekb: 1,
|
||||
// Allow iOS inline playback
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
// Captions are flaky on YouTube
|
||||
cc_load_policy: player.captions.active ? 1 : 0,
|
||||
cc_lang_pref: player.config.captions.language,
|
||||
@ -6310,6 +6330,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var toggle = is$1.boolean(input) ? input : muted;
|
||||
muted = toggle;
|
||||
instance[toggle ? 'mute' : 'unMute']();
|
||||
instance.setVolume(volume * 100);
|
||||
triggerEvent.call(player, player.media, 'volumechange');
|
||||
}
|
||||
}); // Source
|
||||
@ -6332,7 +6353,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return player.config.speed.options.includes(s);
|
||||
}); // Set the tabindex to avoid focus entering iframe
|
||||
|
||||
if (player.supported.ui) {
|
||||
if (player.supported.ui && config.customControls) {
|
||||
player.media.setAttribute('tabindex', -1);
|
||||
}
|
||||
|
||||
@ -6359,9 +6380,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
}
|
||||
}, 200); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
}
|
||||
},
|
||||
onStateChange: function onStateChange(event) {
|
||||
// Get the instance
|
||||
@ -6407,7 +6430,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
case 1:
|
||||
// Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
|
||||
if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
if (config.customControls && !player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
player.media.pause();
|
||||
} else {
|
||||
assurePlaybackState$1.call(player, true);
|
||||
@ -6481,7 +6504,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
wrap(this.media, this.elements.wrapper); // Poster image container
|
||||
|
||||
this.elements.poster = createElement('div', {
|
||||
class: this.config.classNames.poster
|
||||
class: this.config.classNames.poster,
|
||||
hidden: ''
|
||||
});
|
||||
this.elements.wrapper.appendChild(this.elements.poster);
|
||||
}
|
||||
|
4
dist/plyr.min.js
vendored
4
dist/plyr.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.min.js.map
vendored
2
dist/plyr.min.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.min.mjs
vendored
2
dist/plyr.min.mjs
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.min.mjs.map
vendored
2
dist/plyr.min.mjs.map
vendored
File diff suppressed because one or more lines are too long
164
dist/plyr.mjs
vendored
164
dist/plyr.mjs
vendored
@ -3653,7 +3653,7 @@ var defaults$1 = {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
// Quality default
|
||||
@ -3771,7 +3771,7 @@ var defaults$1 = {
|
||||
vimeo: {
|
||||
sdk: 'https://player.vimeo.com/api/player.js',
|
||||
iframe: 'https://player.vimeo.com/video/{0}?{1}',
|
||||
api: 'https://vimeo.com/api/v2/video/{0}.json'
|
||||
api: 'https://vimeo.com/api/oembed.json?url={0}'
|
||||
},
|
||||
youtube: {
|
||||
sdk: 'https://www.youtube.com/iframe_api',
|
||||
@ -3941,24 +3941,27 @@ var defaults$1 = {
|
||||
title: false,
|
||||
speed: true,
|
||||
transparent: false,
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
referrerPolicy: null,
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
// Whether the owner of the video has a Pro or Business account
|
||||
// (which allows us to properly hide controls without CSS hacks, etc)
|
||||
premium: false,
|
||||
// Custom settings from Plyr
|
||||
referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
|
||||
premium: false
|
||||
},
|
||||
// YouTube plugin
|
||||
youtube: {
|
||||
noCookie: true,
|
||||
// Whether to use an alternative version of YouTube without cookies
|
||||
rel: 0,
|
||||
// No related vids
|
||||
showinfo: 0,
|
||||
// Hide info
|
||||
iv_load_policy: 3,
|
||||
// Hide annotations
|
||||
modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)
|
||||
modestbranding: 1,
|
||||
// Hide logos as much as possible (they still show one in the corner when paused)
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
noCookie: false // Whether to use an alternative version of YouTube without cookies
|
||||
|
||||
}
|
||||
};
|
||||
@ -4077,7 +4080,7 @@ var Fullscreen = /*#__PURE__*/function () {
|
||||
return;
|
||||
}
|
||||
|
||||
_this.toggle();
|
||||
_this.player.listeners.proxy(event, _this.toggle, 'fullscreen');
|
||||
}); // Tap focus when in fullscreen
|
||||
|
||||
on.call(this, this.player.elements.container, 'keydown', function (event) {
|
||||
@ -4487,7 +4490,9 @@ var ui = {
|
||||
} // Set property synchronously to respect the call order
|
||||
|
||||
|
||||
this.media.setAttribute('data-poster', poster); // Wait until ui is ready
|
||||
this.media.setAttribute('data-poster', poster); // Show the poster
|
||||
|
||||
this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready
|
||||
|
||||
return ready.call(this) // Load image
|
||||
.then(function () {
|
||||
@ -4919,7 +4924,14 @@ var Listeners = /*#__PURE__*/function () {
|
||||
ratio = _setPlayerSize.ratio; // Set Vimeo gutter
|
||||
|
||||
|
||||
setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
setGutter(ratio, padding, isEnter); // Horrible hack for Safari 14 not repainting properly on entering fullscreen
|
||||
|
||||
if (isEnter) {
|
||||
setTimeout(function () {
|
||||
return repaint(elements.container);
|
||||
}, 100);
|
||||
} // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
|
||||
|
||||
if (!usingNative) {
|
||||
if (isEnter) {
|
||||
@ -5110,9 +5122,17 @@ var Listeners = /*#__PURE__*/function () {
|
||||
|
||||
this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind
|
||||
this.bind(elements.buttons.rewind, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after rewind
|
||||
player.lastSeekTime = Date.now();
|
||||
player.rewind();
|
||||
}, 'rewind'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle
|
||||
this.bind(elements.buttons.fastForward, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after fast forward
|
||||
player.lastSeekTime = Date.now();
|
||||
player.forward();
|
||||
}, 'fastForward'); // Mute toggle
|
||||
|
||||
this.bind(elements.buttons.mute, 'click', function () {
|
||||
player.muted = !player.muted;
|
||||
@ -5767,35 +5787,32 @@ var vimeo = {
|
||||
} // Inject the package
|
||||
|
||||
|
||||
var poster = player.poster;
|
||||
|
||||
if (premium) {
|
||||
iframe.setAttribute('data-poster', poster);
|
||||
if (premium || !config.customControls) {
|
||||
iframe.setAttribute('data-poster', player.poster);
|
||||
player.media = replaceElement(iframe, player.media);
|
||||
} else {
|
||||
var wrapper = createElement('div', {
|
||||
class: player.config.classNames.embedContainer,
|
||||
'data-poster': poster
|
||||
'data-poster': player.poster
|
||||
});
|
||||
wrapper.appendChild(iframe);
|
||||
player.media = replaceElement(wrapper, player.media);
|
||||
} // Get poster image
|
||||
|
||||
|
||||
fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
|
||||
if (is$1.empty(response)) {
|
||||
return;
|
||||
} // Get the URL for thumbnail
|
||||
if (!config.customControls) {
|
||||
fetch(format(player.config.urls.vimeo.api, src)).then(function (response) {
|
||||
if (is$1.empty(response) || !response.thumbnail_url) {
|
||||
return;
|
||||
} // Set and show poster
|
||||
|
||||
|
||||
var url = new URL(response[0].thumbnail_large); // Get original image
|
||||
|
||||
url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster
|
||||
|
||||
ui.setPoster.call(player, url.href).catch(function () {});
|
||||
}); // Setup instance
|
||||
ui.setPoster.call(player, response.thumbnail_url).catch(function () {});
|
||||
});
|
||||
} // Setup instance
|
||||
// https://github.com/vimeo/player.js
|
||||
|
||||
|
||||
player.embed = new window.Vimeo.Player(iframe, {
|
||||
autopause: player.config.autopause,
|
||||
muted: player.muted
|
||||
@ -6035,9 +6052,11 @@ var vimeo = {
|
||||
triggerEvent.call(player, player.media, 'error');
|
||||
}); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -6130,7 +6149,8 @@ var youtube = {
|
||||
},
|
||||
// API ready
|
||||
ready: function ready() {
|
||||
var player = this; // Ignore already setup (race condition)
|
||||
var player = this;
|
||||
var config = player.config.youtube; // Ignore already setup (race condition)
|
||||
|
||||
var currentId = player.media && player.media.getAttribute('id');
|
||||
|
||||
@ -6147,53 +6167,53 @@ var youtube = {
|
||||
|
||||
|
||||
var videoId = parseId$1(source);
|
||||
var id = generateId(player.provider); // Get poster, if already set
|
||||
|
||||
var poster = player.poster; // Replace media element
|
||||
var id = generateId(player.provider); // Replace media element
|
||||
|
||||
var container = createElement('div', {
|
||||
id: id,
|
||||
'data-poster': poster
|
||||
'data-poster': config.customControls ? player.poster : undefined
|
||||
});
|
||||
player.media = replaceElement(container, player.media); // Id to poster wrapper
|
||||
player.media = replaceElement(container, player.media); // Only load the poster when using custom controls
|
||||
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
if (config.customControls) {
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
|
||||
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
var config = player.config.youtube; // Setup instance
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
} // Setup instance
|
||||
// https://developers.google.com/youtube/iframe_api_reference
|
||||
|
||||
player.embed = new window.YT.Player(id, {
|
||||
|
||||
player.embed = new window.YT.Player(player.media, {
|
||||
videoId: videoId,
|
||||
host: getHost(config),
|
||||
playerVars: extend({}, {
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// Autoplay
|
||||
hl: player.config.hl,
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// iframe interface language
|
||||
controls: player.supported.ui ? 0 : 1,
|
||||
// Only show controls if not fully supported
|
||||
disablekb: 1,
|
||||
hl: player.config.hl,
|
||||
// Only show controls if not fully supported or opted out
|
||||
controls: player.supported.ui && config.customControls ? 0 : 1,
|
||||
// Disable keyboard as we handle it
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
disablekb: 1,
|
||||
// Allow iOS inline playback
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
// Captions are flaky on YouTube
|
||||
cc_load_policy: player.captions.active ? 1 : 0,
|
||||
cc_lang_pref: player.config.captions.language,
|
||||
@ -6304,6 +6324,7 @@ var youtube = {
|
||||
var toggle = is$1.boolean(input) ? input : muted;
|
||||
muted = toggle;
|
||||
instance[toggle ? 'mute' : 'unMute']();
|
||||
instance.setVolume(volume * 100);
|
||||
triggerEvent.call(player, player.media, 'volumechange');
|
||||
}
|
||||
}); // Source
|
||||
@ -6326,7 +6347,7 @@ var youtube = {
|
||||
return player.config.speed.options.includes(s);
|
||||
}); // Set the tabindex to avoid focus entering iframe
|
||||
|
||||
if (player.supported.ui) {
|
||||
if (player.supported.ui && config.customControls) {
|
||||
player.media.setAttribute('tabindex', -1);
|
||||
}
|
||||
|
||||
@ -6353,9 +6374,11 @@ var youtube = {
|
||||
}
|
||||
}, 200); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
}
|
||||
},
|
||||
onStateChange: function onStateChange(event) {
|
||||
// Get the instance
|
||||
@ -6401,7 +6424,7 @@ var youtube = {
|
||||
|
||||
case 1:
|
||||
// Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
|
||||
if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
if (config.customControls && !player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
player.media.pause();
|
||||
} else {
|
||||
assurePlaybackState$1.call(player, true);
|
||||
@ -6475,7 +6498,8 @@ var media = {
|
||||
wrap(this.media, this.elements.wrapper); // Poster image container
|
||||
|
||||
this.elements.poster = createElement('div', {
|
||||
class: this.config.classNames.poster
|
||||
class: this.config.classNames.poster,
|
||||
hidden: ''
|
||||
});
|
||||
this.elements.wrapper.appendChild(this.elements.poster);
|
||||
}
|
||||
|
347
dist/plyr.polyfilled.js
vendored
347
dist/plyr.polyfilled.js
vendored
@ -74,7 +74,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
check(typeof self == 'object' && self) ||
|
||||
check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
|
||||
// eslint-disable-next-line no-new-func
|
||||
Function('return this')();
|
||||
(function () { return this; })() || Function('return this')();
|
||||
|
||||
var fails = function (exec) {
|
||||
try {
|
||||
@ -269,7 +269,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
(module.exports = function (key, value) {
|
||||
return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});
|
||||
})('versions', []).push({
|
||||
version: '3.6.5',
|
||||
version: '3.7.0',
|
||||
mode: 'global',
|
||||
copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
|
||||
});
|
||||
@ -307,11 +307,12 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
};
|
||||
|
||||
if (nativeWeakMap) {
|
||||
var store$1 = new WeakMap$2();
|
||||
var store$1 = sharedStore.state || (sharedStore.state = new WeakMap$2());
|
||||
var wmget = store$1.get;
|
||||
var wmhas = store$1.has;
|
||||
var wmset = store$1.set;
|
||||
set = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
wmset.call(store$1, it, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -325,6 +326,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var STATE = sharedKey('state');
|
||||
hiddenKeys[STATE] = true;
|
||||
set = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
createNonEnumerableProperty(it, STATE, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -353,9 +355,15 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var unsafe = options ? !!options.unsafe : false;
|
||||
var simple = options ? !!options.enumerable : false;
|
||||
var noTargetGet = options ? !!options.noTargetGet : false;
|
||||
var state;
|
||||
if (typeof value == 'function') {
|
||||
if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
|
||||
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
if (typeof key == 'string' && !has(value, 'name')) {
|
||||
createNonEnumerableProperty(value, 'name', key);
|
||||
}
|
||||
state = enforceInternalState(value);
|
||||
if (!state.source) {
|
||||
state.source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
}
|
||||
}
|
||||
if (O === global_1) {
|
||||
if (simple) O[key] = value;
|
||||
@ -2441,14 +2449,20 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
} return T;
|
||||
} : nativeAssign;
|
||||
|
||||
var iteratorClose = function (iterator) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) {
|
||||
return anObject(returnMethod.call(iterator)).value;
|
||||
}
|
||||
};
|
||||
|
||||
// call something on iterator step with safe closing on error
|
||||
var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) {
|
||||
try {
|
||||
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
|
||||
// 7.4.6 IteratorClose(iterator, completion)
|
||||
} catch (error) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
@ -2845,7 +2859,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
|
||||
|
||||
redefineAll(URLSearchParamsPrototype, {
|
||||
// `URLSearchParams.prototype.appent` method
|
||||
// `URLSearchParams.prototype.append` method
|
||||
// https://url.spec.whatwg.org/#dom-urlsearchparams-append
|
||||
append: function append(name, value) {
|
||||
validateArgumentsLength(arguments.length, 2);
|
||||
@ -4506,12 +4520,14 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var _URL = global.URL;
|
||||
|
||||
var URL = function URL(url, base) {
|
||||
if (typeof url !== 'string') url = String(url); // Only create another document if the base is different from current location.
|
||||
if (typeof url !== 'string') url = String(url);
|
||||
if (base && typeof base !== 'string') base = String(base); // Only create another document if the base is different from current location.
|
||||
|
||||
var doc = document,
|
||||
baseElement;
|
||||
|
||||
if (base && (global.location === void 0 || base !== global.location.href)) {
|
||||
base = base.toLowerCase();
|
||||
doc = document.implementation.createHTMLDocument('');
|
||||
baseElement = doc.createElement('base');
|
||||
baseElement.href = base;
|
||||
@ -5017,11 +5033,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var regexp = /./;
|
||||
try {
|
||||
'/./'[METHOD_NAME](regexp);
|
||||
} catch (e) {
|
||||
} catch (error1) {
|
||||
try {
|
||||
regexp[MATCH$1] = false;
|
||||
return '/./'[METHOD_NAME](regexp);
|
||||
} catch (f) { /* empty */ }
|
||||
} catch (error2) { /* empty */ }
|
||||
} return false;
|
||||
};
|
||||
|
||||
@ -5103,16 +5119,31 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var internalMetadata_3 = internalMetadata.getWeakData;
|
||||
var internalMetadata_4 = internalMetadata.onFreeze;
|
||||
|
||||
var iterate_1 = createCommonjsModule(function (module) {
|
||||
var Result = function (stopped, result) {
|
||||
this.stopped = stopped;
|
||||
this.result = result;
|
||||
};
|
||||
|
||||
var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {
|
||||
var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1);
|
||||
var iterate = function (iterable, unboundFunction, options) {
|
||||
var that = options && options.that;
|
||||
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
|
||||
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
|
||||
var INTERRUPTED = !!(options && options.INTERRUPTED);
|
||||
var fn = functionBindContext(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
|
||||
var iterator, iterFn, index, length, result, next, step;
|
||||
|
||||
var stop = function (condition) {
|
||||
if (iterator) iteratorClose(iterator);
|
||||
return new Result(true, condition);
|
||||
};
|
||||
|
||||
var callFn = function (value) {
|
||||
if (AS_ENTRIES) {
|
||||
anObject(value);
|
||||
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
|
||||
} return INTERRUPTED ? fn(value, stop) : fn(value);
|
||||
};
|
||||
|
||||
if (IS_ITERATOR) {
|
||||
iterator = iterable;
|
||||
} else {
|
||||
@ -5121,9 +5152,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
// optimisation for array iterators
|
||||
if (isArrayIteratorMethod(iterFn)) {
|
||||
for (index = 0, length = toLength(iterable.length); length > index; index++) {
|
||||
result = AS_ENTRIES
|
||||
? boundFunction(anObject(step = iterable[index])[0], step[1])
|
||||
: boundFunction(iterable[index]);
|
||||
result = callFn(iterable[index]);
|
||||
if (result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
}
|
||||
@ -5132,16 +5161,16 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
next = iterator.next;
|
||||
while (!(step = next.call(iterator)).done) {
|
||||
result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);
|
||||
try {
|
||||
result = callFn(step.value);
|
||||
} catch (error) {
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
if (typeof result == 'object' && result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
};
|
||||
|
||||
iterate.stop = function (result) {
|
||||
return new Result(true, result);
|
||||
};
|
||||
});
|
||||
|
||||
var collection = function (CONSTRUCTOR_NAME, wrapper, common) {
|
||||
var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
|
||||
var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
|
||||
@ -5199,7 +5228,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
Constructor = wrapper(function (dummy, iterable) {
|
||||
anInstance(dummy, Constructor, CONSTRUCTOR_NAME);
|
||||
var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
|
||||
if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
return that;
|
||||
});
|
||||
Constructor.prototype = NativePrototype;
|
||||
@ -5289,7 +5318,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
id: id$1++,
|
||||
frozen: undefined
|
||||
});
|
||||
if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
});
|
||||
|
||||
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
|
||||
@ -5978,6 +6007,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent);
|
||||
|
||||
var engineIsNode = classofRaw(global_1.process) == 'process';
|
||||
|
||||
var location = global_1.location;
|
||||
var set$1 = global_1.setImmediate;
|
||||
var clear = global_1.clearImmediate;
|
||||
@ -6030,7 +6061,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
delete queue[id];
|
||||
};
|
||||
// Node.js 0.8-
|
||||
if (classofRaw(process$1) == 'process') {
|
||||
if (engineIsNode) {
|
||||
defer = function (id) {
|
||||
process$1.nextTick(runner(id));
|
||||
};
|
||||
@ -6052,8 +6083,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
global_1.addEventListener &&
|
||||
typeof postMessage == 'function' &&
|
||||
!global_1.importScripts &&
|
||||
!fails(post) &&
|
||||
location.protocol !== 'file:'
|
||||
location && location.protocol !== 'file:' &&
|
||||
!fails(post)
|
||||
) {
|
||||
defer = post;
|
||||
global_1.addEventListener('message', listener, false);
|
||||
@ -6079,14 +6110,14 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
};
|
||||
|
||||
var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
|
||||
|
||||
var macrotask = task.set;
|
||||
|
||||
|
||||
|
||||
var MutationObserver$1 = global_1.MutationObserver || global_1.WebKitMutationObserver;
|
||||
var document$2 = global_1.document;
|
||||
var process$2 = global_1.process;
|
||||
var Promise$1 = global_1.Promise;
|
||||
var IS_NODE = classofRaw(process$2) == 'process';
|
||||
// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
|
||||
var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global_1, 'queueMicrotask');
|
||||
var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
|
||||
@ -6097,7 +6128,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
if (!queueMicrotask) {
|
||||
flush = function () {
|
||||
var parent, fn;
|
||||
if (IS_NODE && (parent = process$2.domain)) parent.exit();
|
||||
if (engineIsNode && (parent = process$2.domain)) parent.exit();
|
||||
while (head) {
|
||||
fn = head.fn;
|
||||
head = head.next;
|
||||
@ -6112,15 +6143,10 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
if (parent) parent.enter();
|
||||
};
|
||||
|
||||
// Node.js
|
||||
if (IS_NODE) {
|
||||
notify = function () {
|
||||
process$2.nextTick(flush);
|
||||
};
|
||||
// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
|
||||
} else if (MutationObserver$1 && !engineIsIos) {
|
||||
if (!engineIsIos && !engineIsNode && MutationObserver$1 && document$2) {
|
||||
toggle = true;
|
||||
node = document.createTextNode('');
|
||||
node = document$2.createTextNode('');
|
||||
new MutationObserver$1(flush).observe(node, { characterData: true });
|
||||
notify = function () {
|
||||
node.data = toggle = !toggle;
|
||||
@ -6133,6 +6159,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
notify = function () {
|
||||
then.call(promise, flush);
|
||||
};
|
||||
// Node.js without promises
|
||||
} else if (engineIsNode) {
|
||||
notify = function () {
|
||||
process$2.nextTick(flush);
|
||||
};
|
||||
// for other environments - macrotask based on:
|
||||
// - setImmediate
|
||||
// - MessageChannel
|
||||
@ -6211,6 +6242,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
|
||||
|
||||
|
||||
var SPECIES$6 = wellKnownSymbol('species');
|
||||
var PROMISE = 'Promise';
|
||||
var getInternalState$3 = internalState.get;
|
||||
@ -6218,13 +6250,13 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var getInternalPromiseState = internalState.getterFor(PROMISE);
|
||||
var PromiseConstructor = nativePromiseConstructor;
|
||||
var TypeError$1 = global_1.TypeError;
|
||||
var document$2 = global_1.document;
|
||||
var document$3 = global_1.document;
|
||||
var process$3 = global_1.process;
|
||||
var $fetch$1 = getBuiltIn('fetch');
|
||||
var newPromiseCapability$1 = newPromiseCapability.f;
|
||||
var newGenericPromiseCapability = newPromiseCapability$1;
|
||||
var IS_NODE$1 = classofRaw(process$3) == 'process';
|
||||
var DISPATCH_EVENT = !!(document$2 && document$2.createEvent && global_1.dispatchEvent);
|
||||
var DISPATCH_EVENT = !!(document$3 && document$3.createEvent && global_1.dispatchEvent);
|
||||
var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
|
||||
var UNHANDLED_REJECTION = 'unhandledrejection';
|
||||
var REJECTION_HANDLED = 'rejectionhandled';
|
||||
var PENDING = 0;
|
||||
@ -6242,7 +6274,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
// We can't detect it synchronously, so just check versions
|
||||
if (engineV8Version === 66) return true;
|
||||
// Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
|
||||
if (!IS_NODE$1 && typeof PromiseRejectionEvent != 'function') return true;
|
||||
if (!engineIsNode && !NATIVE_REJECTION_EVENT) return true;
|
||||
}
|
||||
// We can't use @@species feature detection in V8 since it causes
|
||||
// deoptimization and performance degradation
|
||||
@ -6268,7 +6300,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
|
||||
};
|
||||
|
||||
var notify$1 = function (promise, state, isReject) {
|
||||
var notify$1 = function (state, isReject) {
|
||||
if (state.notified) return;
|
||||
state.notified = true;
|
||||
var chain = state.reactions;
|
||||
@ -6287,7 +6319,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
try {
|
||||
if (handler) {
|
||||
if (!ok) {
|
||||
if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);
|
||||
if (state.rejection === UNHANDLED) onHandleUnhandled(state);
|
||||
state.rejection = HANDLED;
|
||||
}
|
||||
if (handler === true) result = value;
|
||||
@ -6312,36 +6344,37 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
}
|
||||
state.reactions = [];
|
||||
state.notified = false;
|
||||
if (isReject && !state.rejection) onUnhandled(promise, state);
|
||||
if (isReject && !state.rejection) onUnhandled(state);
|
||||
});
|
||||
};
|
||||
|
||||
var dispatchEvent = function (name, promise, reason) {
|
||||
var event, handler;
|
||||
if (DISPATCH_EVENT) {
|
||||
event = document$2.createEvent('Event');
|
||||
event = document$3.createEvent('Event');
|
||||
event.promise = promise;
|
||||
event.reason = reason;
|
||||
event.initEvent(name, false, true);
|
||||
global_1.dispatchEvent(event);
|
||||
} else event = { promise: promise, reason: reason };
|
||||
if (handler = global_1['on' + name]) handler(event);
|
||||
if (!NATIVE_REJECTION_EVENT && (handler = global_1['on' + name])) handler(event);
|
||||
else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
|
||||
};
|
||||
|
||||
var onUnhandled = function (promise, state) {
|
||||
var onUnhandled = function (state) {
|
||||
task$1.call(global_1, function () {
|
||||
var promise = state.facade;
|
||||
var value = state.value;
|
||||
var IS_UNHANDLED = isUnhandled(state);
|
||||
var result;
|
||||
if (IS_UNHANDLED) {
|
||||
result = perform(function () {
|
||||
if (IS_NODE$1) {
|
||||
if (engineIsNode) {
|
||||
process$3.emit('unhandledRejection', value, promise);
|
||||
} else dispatchEvent(UNHANDLED_REJECTION, promise, value);
|
||||
});
|
||||
// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
|
||||
state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED;
|
||||
state.rejection = engineIsNode || isUnhandled(state) ? UNHANDLED : HANDLED;
|
||||
if (result.error) throw result.value;
|
||||
}
|
||||
});
|
||||
@ -6351,55 +6384,56 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return state.rejection !== HANDLED && !state.parent;
|
||||
};
|
||||
|
||||
var onHandleUnhandled = function (promise, state) {
|
||||
var onHandleUnhandled = function (state) {
|
||||
task$1.call(global_1, function () {
|
||||
if (IS_NODE$1) {
|
||||
var promise = state.facade;
|
||||
if (engineIsNode) {
|
||||
process$3.emit('rejectionHandled', promise);
|
||||
} else dispatchEvent(REJECTION_HANDLED, promise, state.value);
|
||||
});
|
||||
};
|
||||
|
||||
var bind = function (fn, promise, state, unwrap) {
|
||||
var bind = function (fn, state, unwrap) {
|
||||
return function (value) {
|
||||
fn(promise, state, value, unwrap);
|
||||
fn(state, value, unwrap);
|
||||
};
|
||||
};
|
||||
|
||||
var internalReject = function (promise, state, value, unwrap) {
|
||||
var internalReject = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
state.value = value;
|
||||
state.state = REJECTED;
|
||||
notify$1(promise, state, true);
|
||||
notify$1(state, true);
|
||||
};
|
||||
|
||||
var internalResolve = function (promise, state, value, unwrap) {
|
||||
var internalResolve = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
try {
|
||||
if (promise === value) throw TypeError$1("Promise can't be resolved itself");
|
||||
if (state.facade === value) throw TypeError$1("Promise can't be resolved itself");
|
||||
var then = isThenable(value);
|
||||
if (then) {
|
||||
microtask(function () {
|
||||
var wrapper = { done: false };
|
||||
try {
|
||||
then.call(value,
|
||||
bind(internalResolve, promise, wrapper, state),
|
||||
bind(internalReject, promise, wrapper, state)
|
||||
bind(internalResolve, wrapper, state),
|
||||
bind(internalReject, wrapper, state)
|
||||
);
|
||||
} catch (error) {
|
||||
internalReject(promise, wrapper, error, state);
|
||||
internalReject(wrapper, error, state);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
state.value = value;
|
||||
state.state = FULFILLED;
|
||||
notify$1(promise, state, false);
|
||||
notify$1(state, false);
|
||||
}
|
||||
} catch (error) {
|
||||
internalReject(promise, { done: false }, error, state);
|
||||
internalReject({ done: false }, error, state);
|
||||
}
|
||||
};
|
||||
|
||||
@ -6412,9 +6446,9 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
Internal.call(this);
|
||||
var state = getInternalState$3(this);
|
||||
try {
|
||||
executor(bind(internalResolve, this, state), bind(internalReject, this, state));
|
||||
executor(bind(internalResolve, state), bind(internalReject, state));
|
||||
} catch (error) {
|
||||
internalReject(this, state, error);
|
||||
internalReject(state, error);
|
||||
}
|
||||
};
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
@ -6438,10 +6472,10 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor));
|
||||
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
|
||||
reaction.fail = typeof onRejected == 'function' && onRejected;
|
||||
reaction.domain = IS_NODE$1 ? process$3.domain : undefined;
|
||||
reaction.domain = engineIsNode ? process$3.domain : undefined;
|
||||
state.parent = true;
|
||||
state.reactions.push(reaction);
|
||||
if (state.state != PENDING) notify$1(this, state, false);
|
||||
if (state.state != PENDING) notify$1(state, false);
|
||||
return reaction.promise;
|
||||
},
|
||||
// `Promise.prototype.catch` method
|
||||
@ -6454,8 +6488,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var promise = new Internal();
|
||||
var state = getInternalState$3(promise);
|
||||
this.promise = promise;
|
||||
this.resolve = bind(internalResolve, promise, state);
|
||||
this.reject = bind(internalReject, promise, state);
|
||||
this.resolve = bind(internalResolve, state);
|
||||
this.reject = bind(internalReject, state);
|
||||
};
|
||||
newPromiseCapability.f = newPromiseCapability$1 = function (C) {
|
||||
return C === PromiseConstructor || C === PromiseWrapper
|
||||
@ -6526,7 +6560,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var values = [];
|
||||
var counter = 0;
|
||||
var remaining = 1;
|
||||
iterate_1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
var index = counter++;
|
||||
var alreadyCalled = false;
|
||||
values.push(undefined);
|
||||
@ -6551,7 +6585,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var reject = capability.reject;
|
||||
var result = perform(function () {
|
||||
var $promiseResolve = aFunction$1(C.resolve);
|
||||
iterate_1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
$promiseResolve.call(C, promise).then(capability.resolve, reject);
|
||||
});
|
||||
});
|
||||
@ -6798,12 +6832,17 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var STRICT_METHOD$5 = arrayMethodIsStrict('reduce');
|
||||
var USES_TO_LENGTH$9 = arrayMethodUsesToLength('reduce', { 1: 0 });
|
||||
// Chrome 80-82 has a critical bug
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
|
||||
var CHROME_BUG = !engineIsNode && engineV8Version > 79 && engineV8Version < 83;
|
||||
|
||||
// `Array.prototype.reduce` method
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.reduce
|
||||
_export({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$9 }, {
|
||||
_export({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$9 || CHROME_BUG }, {
|
||||
reduce: function reduce(callbackfn /* , initialValue */) {
|
||||
return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
|
||||
}
|
||||
@ -9984,7 +10023,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
// Quality default
|
||||
@ -10102,7 +10141,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
vimeo: {
|
||||
sdk: 'https://player.vimeo.com/api/player.js',
|
||||
iframe: 'https://player.vimeo.com/video/{0}?{1}',
|
||||
api: 'https://vimeo.com/api/v2/video/{0}.json'
|
||||
api: 'https://vimeo.com/api/oembed.json?url={0}'
|
||||
},
|
||||
youtube: {
|
||||
sdk: 'https://www.youtube.com/iframe_api',
|
||||
@ -10272,24 +10311,27 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
title: false,
|
||||
speed: true,
|
||||
transparent: false,
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
referrerPolicy: null,
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
// Whether the owner of the video has a Pro or Business account
|
||||
// (which allows us to properly hide controls without CSS hacks, etc)
|
||||
premium: false,
|
||||
// Custom settings from Plyr
|
||||
referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
|
||||
premium: false
|
||||
},
|
||||
// YouTube plugin
|
||||
youtube: {
|
||||
noCookie: true,
|
||||
// Whether to use an alternative version of YouTube without cookies
|
||||
rel: 0,
|
||||
// No related vids
|
||||
showinfo: 0,
|
||||
// Hide info
|
||||
iv_load_policy: 3,
|
||||
// Hide annotations
|
||||
modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)
|
||||
modestbranding: 1,
|
||||
// Hide logos as much as possible (they still show one in the corner when paused)
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
noCookie: false // Whether to use an alternative version of YouTube without cookies
|
||||
|
||||
}
|
||||
};
|
||||
@ -10408,7 +10450,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return;
|
||||
}
|
||||
|
||||
_this.toggle();
|
||||
_this.player.listeners.proxy(event, _this.toggle, 'fullscreen');
|
||||
}); // Tap focus when in fullscreen
|
||||
|
||||
on.call(this, this.player.elements.container, 'keydown', function (event) {
|
||||
@ -10831,7 +10873,9 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
} // Set property synchronously to respect the call order
|
||||
|
||||
|
||||
this.media.setAttribute('data-poster', poster); // Wait until ui is ready
|
||||
this.media.setAttribute('data-poster', poster); // Show the poster
|
||||
|
||||
this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready
|
||||
|
||||
return ready.call(this) // Load image
|
||||
.then(function () {
|
||||
@ -11263,7 +11307,14 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
ratio = _setPlayerSize.ratio; // Set Vimeo gutter
|
||||
|
||||
|
||||
setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
setGutter(ratio, padding, isEnter); // Horrible hack for Safari 14 not repainting properly on entering fullscreen
|
||||
|
||||
if (isEnter) {
|
||||
setTimeout(function () {
|
||||
return repaint(elements.container);
|
||||
}, 100);
|
||||
} // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
|
||||
|
||||
if (!usingNative) {
|
||||
if (isEnter) {
|
||||
@ -11454,9 +11505,17 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind
|
||||
this.bind(elements.buttons.rewind, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after rewind
|
||||
player.lastSeekTime = Date.now();
|
||||
player.rewind();
|
||||
}, 'rewind'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle
|
||||
this.bind(elements.buttons.fastForward, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after fast forward
|
||||
player.lastSeekTime = Date.now();
|
||||
player.forward();
|
||||
}, 'fastForward'); // Mute toggle
|
||||
|
||||
this.bind(elements.buttons.mute, 'click', function () {
|
||||
player.muted = !player.muted;
|
||||
@ -12164,35 +12223,32 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
} // Inject the package
|
||||
|
||||
|
||||
var poster = player.poster;
|
||||
|
||||
if (premium) {
|
||||
iframe.setAttribute('data-poster', poster);
|
||||
if (premium || !config.customControls) {
|
||||
iframe.setAttribute('data-poster', player.poster);
|
||||
player.media = replaceElement(iframe, player.media);
|
||||
} else {
|
||||
var wrapper = createElement('div', {
|
||||
class: player.config.classNames.embedContainer,
|
||||
'data-poster': poster
|
||||
'data-poster': player.poster
|
||||
});
|
||||
wrapper.appendChild(iframe);
|
||||
player.media = replaceElement(wrapper, player.media);
|
||||
} // Get poster image
|
||||
|
||||
|
||||
fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
|
||||
if (is$1.empty(response)) {
|
||||
return;
|
||||
} // Get the URL for thumbnail
|
||||
if (!config.customControls) {
|
||||
fetch(format(player.config.urls.vimeo.api, src)).then(function (response) {
|
||||
if (is$1.empty(response) || !response.thumbnail_url) {
|
||||
return;
|
||||
} // Set and show poster
|
||||
|
||||
|
||||
var url = new URL(response[0].thumbnail_large); // Get original image
|
||||
|
||||
url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster
|
||||
|
||||
ui.setPoster.call(player, url.href).catch(function () {});
|
||||
}); // Setup instance
|
||||
ui.setPoster.call(player, response.thumbnail_url).catch(function () {});
|
||||
});
|
||||
} // Setup instance
|
||||
// https://github.com/vimeo/player.js
|
||||
|
||||
|
||||
player.embed = new window.Vimeo.Player(iframe, {
|
||||
autopause: player.config.autopause,
|
||||
muted: player.muted
|
||||
@ -12432,9 +12488,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
triggerEvent.call(player, player.media, 'error');
|
||||
}); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -12525,7 +12583,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
},
|
||||
// API ready
|
||||
ready: function ready() {
|
||||
var player = this; // Ignore already setup (race condition)
|
||||
var player = this;
|
||||
var config = player.config.youtube; // Ignore already setup (race condition)
|
||||
|
||||
var currentId = player.media && player.media.getAttribute('id');
|
||||
|
||||
@ -12542,53 +12601,53 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
|
||||
var videoId = parseId$1(source);
|
||||
var id = generateId(player.provider); // Get poster, if already set
|
||||
|
||||
var poster = player.poster; // Replace media element
|
||||
var id = generateId(player.provider); // Replace media element
|
||||
|
||||
var container = createElement('div', {
|
||||
id: id,
|
||||
'data-poster': poster
|
||||
'data-poster': config.customControls ? player.poster : undefined
|
||||
});
|
||||
player.media = replaceElement(container, player.media); // Id to poster wrapper
|
||||
player.media = replaceElement(container, player.media); // Only load the poster when using custom controls
|
||||
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
if (config.customControls) {
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
|
||||
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
var config = player.config.youtube; // Setup instance
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
} // Setup instance
|
||||
// https://developers.google.com/youtube/iframe_api_reference
|
||||
|
||||
player.embed = new window.YT.Player(id, {
|
||||
|
||||
player.embed = new window.YT.Player(player.media, {
|
||||
videoId: videoId,
|
||||
host: getHost$1(config),
|
||||
playerVars: extend({}, {
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// Autoplay
|
||||
hl: player.config.hl,
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// iframe interface language
|
||||
controls: player.supported.ui ? 0 : 1,
|
||||
// Only show controls if not fully supported
|
||||
disablekb: 1,
|
||||
hl: player.config.hl,
|
||||
// Only show controls if not fully supported or opted out
|
||||
controls: player.supported.ui && config.customControls ? 0 : 1,
|
||||
// Disable keyboard as we handle it
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
disablekb: 1,
|
||||
// Allow iOS inline playback
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
// Captions are flaky on YouTube
|
||||
cc_load_policy: player.captions.active ? 1 : 0,
|
||||
cc_lang_pref: player.config.captions.language,
|
||||
@ -12699,6 +12758,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
var toggle = is$1.boolean(input) ? input : muted;
|
||||
muted = toggle;
|
||||
instance[toggle ? 'mute' : 'unMute']();
|
||||
instance.setVolume(volume * 100);
|
||||
triggerEvent.call(player, player.media, 'volumechange');
|
||||
}
|
||||
}); // Source
|
||||
@ -12721,7 +12781,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
return player.config.speed.options.includes(s);
|
||||
}); // Set the tabindex to avoid focus entering iframe
|
||||
|
||||
if (player.supported.ui) {
|
||||
if (player.supported.ui && config.customControls) {
|
||||
player.media.setAttribute('tabindex', -1);
|
||||
}
|
||||
|
||||
@ -12748,9 +12808,11 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
}
|
||||
}, 200); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
}
|
||||
},
|
||||
onStateChange: function onStateChange(event) {
|
||||
// Get the instance
|
||||
@ -12796,7 +12858,7 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
|
||||
case 1:
|
||||
// Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
|
||||
if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
if (config.customControls && !player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
player.media.pause();
|
||||
} else {
|
||||
assurePlaybackState$1.call(player, true);
|
||||
@ -12869,7 +12931,8 @@ typeof navigator === "object" && (function (global, factory) {
|
||||
wrap$1(this.media, this.elements.wrapper); // Poster image container
|
||||
|
||||
this.elements.poster = createElement('div', {
|
||||
class: this.config.classNames.poster
|
||||
class: this.config.classNames.poster,
|
||||
hidden: ''
|
||||
});
|
||||
this.elements.wrapper.appendChild(this.elements.poster);
|
||||
}
|
||||
|
4
dist/plyr.polyfilled.min.js
vendored
4
dist/plyr.polyfilled.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.polyfilled.min.js.map
vendored
2
dist/plyr.polyfilled.min.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/plyr.polyfilled.min.mjs
vendored
4
dist/plyr.polyfilled.min.mjs
vendored
File diff suppressed because one or more lines are too long
2
dist/plyr.polyfilled.min.mjs.map
vendored
2
dist/plyr.polyfilled.min.mjs.map
vendored
File diff suppressed because one or more lines are too long
347
dist/plyr.polyfilled.mjs
vendored
347
dist/plyr.polyfilled.mjs
vendored
@ -68,7 +68,7 @@ var global_1 =
|
||||
check(typeof self == 'object' && self) ||
|
||||
check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
|
||||
// eslint-disable-next-line no-new-func
|
||||
Function('return this')();
|
||||
(function () { return this; })() || Function('return this')();
|
||||
|
||||
var fails = function (exec) {
|
||||
try {
|
||||
@ -263,7 +263,7 @@ var shared = createCommonjsModule(function (module) {
|
||||
(module.exports = function (key, value) {
|
||||
return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});
|
||||
})('versions', []).push({
|
||||
version: '3.6.5',
|
||||
version: '3.7.0',
|
||||
mode: 'global',
|
||||
copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
|
||||
});
|
||||
@ -301,11 +301,12 @@ var getterFor = function (TYPE) {
|
||||
};
|
||||
|
||||
if (nativeWeakMap) {
|
||||
var store$1 = new WeakMap$2();
|
||||
var store$1 = sharedStore.state || (sharedStore.state = new WeakMap$2());
|
||||
var wmget = store$1.get;
|
||||
var wmhas = store$1.has;
|
||||
var wmset = store$1.set;
|
||||
set = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
wmset.call(store$1, it, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -319,6 +320,7 @@ if (nativeWeakMap) {
|
||||
var STATE = sharedKey('state');
|
||||
hiddenKeys[STATE] = true;
|
||||
set = function (it, metadata) {
|
||||
metadata.facade = it;
|
||||
createNonEnumerableProperty(it, STATE, metadata);
|
||||
return metadata;
|
||||
};
|
||||
@ -347,9 +349,15 @@ var TEMPLATE = String(String).split('String');
|
||||
var unsafe = options ? !!options.unsafe : false;
|
||||
var simple = options ? !!options.enumerable : false;
|
||||
var noTargetGet = options ? !!options.noTargetGet : false;
|
||||
var state;
|
||||
if (typeof value == 'function') {
|
||||
if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
|
||||
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
if (typeof key == 'string' && !has(value, 'name')) {
|
||||
createNonEnumerableProperty(value, 'name', key);
|
||||
}
|
||||
state = enforceInternalState(value);
|
||||
if (!state.source) {
|
||||
state.source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||
}
|
||||
}
|
||||
if (O === global_1) {
|
||||
if (simple) O[key] = value;
|
||||
@ -2435,14 +2443,20 @@ var objectAssign = !nativeAssign || fails(function () {
|
||||
} return T;
|
||||
} : nativeAssign;
|
||||
|
||||
var iteratorClose = function (iterator) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) {
|
||||
return anObject(returnMethod.call(iterator)).value;
|
||||
}
|
||||
};
|
||||
|
||||
// call something on iterator step with safe closing on error
|
||||
var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) {
|
||||
try {
|
||||
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
|
||||
// 7.4.6 IteratorClose(iterator, completion)
|
||||
} catch (error) {
|
||||
var returnMethod = iterator['return'];
|
||||
if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
@ -2839,7 +2853,7 @@ var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
|
||||
var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
|
||||
|
||||
redefineAll(URLSearchParamsPrototype, {
|
||||
// `URLSearchParams.prototype.appent` method
|
||||
// `URLSearchParams.prototype.append` method
|
||||
// https://url.spec.whatwg.org/#dom-urlsearchparams-append
|
||||
append: function append(name, value) {
|
||||
validateArgumentsLength(arguments.length, 2);
|
||||
@ -4500,12 +4514,14 @@ function _nonIterableRest() {
|
||||
var _URL = global.URL;
|
||||
|
||||
var URL = function URL(url, base) {
|
||||
if (typeof url !== 'string') url = String(url); // Only create another document if the base is different from current location.
|
||||
if (typeof url !== 'string') url = String(url);
|
||||
if (base && typeof base !== 'string') base = String(base); // Only create another document if the base is different from current location.
|
||||
|
||||
var doc = document,
|
||||
baseElement;
|
||||
|
||||
if (base && (global.location === void 0 || base !== global.location.href)) {
|
||||
base = base.toLowerCase();
|
||||
doc = document.implementation.createHTMLDocument('');
|
||||
baseElement = doc.createElement('base');
|
||||
baseElement.href = base;
|
||||
@ -5011,11 +5027,11 @@ var correctIsRegexpLogic = function (METHOD_NAME) {
|
||||
var regexp = /./;
|
||||
try {
|
||||
'/./'[METHOD_NAME](regexp);
|
||||
} catch (e) {
|
||||
} catch (error1) {
|
||||
try {
|
||||
regexp[MATCH$1] = false;
|
||||
return '/./'[METHOD_NAME](regexp);
|
||||
} catch (f) { /* empty */ }
|
||||
} catch (error2) { /* empty */ }
|
||||
} return false;
|
||||
};
|
||||
|
||||
@ -5097,16 +5113,31 @@ var internalMetadata_2 = internalMetadata.fastKey;
|
||||
var internalMetadata_3 = internalMetadata.getWeakData;
|
||||
var internalMetadata_4 = internalMetadata.onFreeze;
|
||||
|
||||
var iterate_1 = createCommonjsModule(function (module) {
|
||||
var Result = function (stopped, result) {
|
||||
this.stopped = stopped;
|
||||
this.result = result;
|
||||
};
|
||||
|
||||
var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {
|
||||
var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1);
|
||||
var iterate = function (iterable, unboundFunction, options) {
|
||||
var that = options && options.that;
|
||||
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
|
||||
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
|
||||
var INTERRUPTED = !!(options && options.INTERRUPTED);
|
||||
var fn = functionBindContext(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
|
||||
var iterator, iterFn, index, length, result, next, step;
|
||||
|
||||
var stop = function (condition) {
|
||||
if (iterator) iteratorClose(iterator);
|
||||
return new Result(true, condition);
|
||||
};
|
||||
|
||||
var callFn = function (value) {
|
||||
if (AS_ENTRIES) {
|
||||
anObject(value);
|
||||
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
|
||||
} return INTERRUPTED ? fn(value, stop) : fn(value);
|
||||
};
|
||||
|
||||
if (IS_ITERATOR) {
|
||||
iterator = iterable;
|
||||
} else {
|
||||
@ -5115,9 +5146,7 @@ var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITER
|
||||
// optimisation for array iterators
|
||||
if (isArrayIteratorMethod(iterFn)) {
|
||||
for (index = 0, length = toLength(iterable.length); length > index; index++) {
|
||||
result = AS_ENTRIES
|
||||
? boundFunction(anObject(step = iterable[index])[0], step[1])
|
||||
: boundFunction(iterable[index]);
|
||||
result = callFn(iterable[index]);
|
||||
if (result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
}
|
||||
@ -5126,16 +5155,16 @@ var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITER
|
||||
|
||||
next = iterator.next;
|
||||
while (!(step = next.call(iterator)).done) {
|
||||
result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);
|
||||
try {
|
||||
result = callFn(step.value);
|
||||
} catch (error) {
|
||||
iteratorClose(iterator);
|
||||
throw error;
|
||||
}
|
||||
if (typeof result == 'object' && result && result instanceof Result) return result;
|
||||
} return new Result(false);
|
||||
};
|
||||
|
||||
iterate.stop = function (result) {
|
||||
return new Result(true, result);
|
||||
};
|
||||
});
|
||||
|
||||
var collection = function (CONSTRUCTOR_NAME, wrapper, common) {
|
||||
var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
|
||||
var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
|
||||
@ -5193,7 +5222,7 @@ var collection = function (CONSTRUCTOR_NAME, wrapper, common) {
|
||||
Constructor = wrapper(function (dummy, iterable) {
|
||||
anInstance(dummy, Constructor, CONSTRUCTOR_NAME);
|
||||
var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
|
||||
if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
return that;
|
||||
});
|
||||
Constructor.prototype = NativePrototype;
|
||||
@ -5283,7 +5312,7 @@ var collectionWeak = {
|
||||
id: id$1++,
|
||||
frozen: undefined
|
||||
});
|
||||
if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP);
|
||||
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
|
||||
});
|
||||
|
||||
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
|
||||
@ -5972,6 +6001,8 @@ var setSpecies = function (CONSTRUCTOR_NAME) {
|
||||
|
||||
var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent);
|
||||
|
||||
var engineIsNode = classofRaw(global_1.process) == 'process';
|
||||
|
||||
var location = global_1.location;
|
||||
var set$1 = global_1.setImmediate;
|
||||
var clear = global_1.clearImmediate;
|
||||
@ -6024,7 +6055,7 @@ if (!set$1 || !clear) {
|
||||
delete queue[id];
|
||||
};
|
||||
// Node.js 0.8-
|
||||
if (classofRaw(process$1) == 'process') {
|
||||
if (engineIsNode) {
|
||||
defer = function (id) {
|
||||
process$1.nextTick(runner(id));
|
||||
};
|
||||
@ -6046,8 +6077,8 @@ if (!set$1 || !clear) {
|
||||
global_1.addEventListener &&
|
||||
typeof postMessage == 'function' &&
|
||||
!global_1.importScripts &&
|
||||
!fails(post) &&
|
||||
location.protocol !== 'file:'
|
||||
location && location.protocol !== 'file:' &&
|
||||
!fails(post)
|
||||
) {
|
||||
defer = post;
|
||||
global_1.addEventListener('message', listener, false);
|
||||
@ -6073,14 +6104,14 @@ var task = {
|
||||
};
|
||||
|
||||
var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
|
||||
|
||||
var macrotask = task.set;
|
||||
|
||||
|
||||
|
||||
var MutationObserver$1 = global_1.MutationObserver || global_1.WebKitMutationObserver;
|
||||
var document$2 = global_1.document;
|
||||
var process$2 = global_1.process;
|
||||
var Promise$1 = global_1.Promise;
|
||||
var IS_NODE = classofRaw(process$2) == 'process';
|
||||
// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
|
||||
var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global_1, 'queueMicrotask');
|
||||
var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
|
||||
@ -6091,7 +6122,7 @@ var flush, head, last, notify, toggle, node, promise, then;
|
||||
if (!queueMicrotask) {
|
||||
flush = function () {
|
||||
var parent, fn;
|
||||
if (IS_NODE && (parent = process$2.domain)) parent.exit();
|
||||
if (engineIsNode && (parent = process$2.domain)) parent.exit();
|
||||
while (head) {
|
||||
fn = head.fn;
|
||||
head = head.next;
|
||||
@ -6106,15 +6137,10 @@ if (!queueMicrotask) {
|
||||
if (parent) parent.enter();
|
||||
};
|
||||
|
||||
// Node.js
|
||||
if (IS_NODE) {
|
||||
notify = function () {
|
||||
process$2.nextTick(flush);
|
||||
};
|
||||
// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
|
||||
} else if (MutationObserver$1 && !engineIsIos) {
|
||||
if (!engineIsIos && !engineIsNode && MutationObserver$1 && document$2) {
|
||||
toggle = true;
|
||||
node = document.createTextNode('');
|
||||
node = document$2.createTextNode('');
|
||||
new MutationObserver$1(flush).observe(node, { characterData: true });
|
||||
notify = function () {
|
||||
node.data = toggle = !toggle;
|
||||
@ -6127,6 +6153,11 @@ if (!queueMicrotask) {
|
||||
notify = function () {
|
||||
then.call(promise, flush);
|
||||
};
|
||||
// Node.js without promises
|
||||
} else if (engineIsNode) {
|
||||
notify = function () {
|
||||
process$2.nextTick(flush);
|
||||
};
|
||||
// for other environments - macrotask based on:
|
||||
// - setImmediate
|
||||
// - MessageChannel
|
||||
@ -6205,6 +6236,7 @@ var task$1 = task.set;
|
||||
|
||||
|
||||
|
||||
|
||||
var SPECIES$6 = wellKnownSymbol('species');
|
||||
var PROMISE = 'Promise';
|
||||
var getInternalState$3 = internalState.get;
|
||||
@ -6212,13 +6244,13 @@ var setInternalState$6 = internalState.set;
|
||||
var getInternalPromiseState = internalState.getterFor(PROMISE);
|
||||
var PromiseConstructor = nativePromiseConstructor;
|
||||
var TypeError$1 = global_1.TypeError;
|
||||
var document$2 = global_1.document;
|
||||
var document$3 = global_1.document;
|
||||
var process$3 = global_1.process;
|
||||
var $fetch$1 = getBuiltIn('fetch');
|
||||
var newPromiseCapability$1 = newPromiseCapability.f;
|
||||
var newGenericPromiseCapability = newPromiseCapability$1;
|
||||
var IS_NODE$1 = classofRaw(process$3) == 'process';
|
||||
var DISPATCH_EVENT = !!(document$2 && document$2.createEvent && global_1.dispatchEvent);
|
||||
var DISPATCH_EVENT = !!(document$3 && document$3.createEvent && global_1.dispatchEvent);
|
||||
var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
|
||||
var UNHANDLED_REJECTION = 'unhandledrejection';
|
||||
var REJECTION_HANDLED = 'rejectionhandled';
|
||||
var PENDING = 0;
|
||||
@ -6236,7 +6268,7 @@ var FORCED$3 = isForced_1(PROMISE, function () {
|
||||
// We can't detect it synchronously, so just check versions
|
||||
if (engineV8Version === 66) return true;
|
||||
// Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
|
||||
if (!IS_NODE$1 && typeof PromiseRejectionEvent != 'function') return true;
|
||||
if (!engineIsNode && !NATIVE_REJECTION_EVENT) return true;
|
||||
}
|
||||
// We can't use @@species feature detection in V8 since it causes
|
||||
// deoptimization and performance degradation
|
||||
@ -6262,7 +6294,7 @@ var isThenable = function (it) {
|
||||
return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
|
||||
};
|
||||
|
||||
var notify$1 = function (promise, state, isReject) {
|
||||
var notify$1 = function (state, isReject) {
|
||||
if (state.notified) return;
|
||||
state.notified = true;
|
||||
var chain = state.reactions;
|
||||
@ -6281,7 +6313,7 @@ var notify$1 = function (promise, state, isReject) {
|
||||
try {
|
||||
if (handler) {
|
||||
if (!ok) {
|
||||
if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);
|
||||
if (state.rejection === UNHANDLED) onHandleUnhandled(state);
|
||||
state.rejection = HANDLED;
|
||||
}
|
||||
if (handler === true) result = value;
|
||||
@ -6306,36 +6338,37 @@ var notify$1 = function (promise, state, isReject) {
|
||||
}
|
||||
state.reactions = [];
|
||||
state.notified = false;
|
||||
if (isReject && !state.rejection) onUnhandled(promise, state);
|
||||
if (isReject && !state.rejection) onUnhandled(state);
|
||||
});
|
||||
};
|
||||
|
||||
var dispatchEvent = function (name, promise, reason) {
|
||||
var event, handler;
|
||||
if (DISPATCH_EVENT) {
|
||||
event = document$2.createEvent('Event');
|
||||
event = document$3.createEvent('Event');
|
||||
event.promise = promise;
|
||||
event.reason = reason;
|
||||
event.initEvent(name, false, true);
|
||||
global_1.dispatchEvent(event);
|
||||
} else event = { promise: promise, reason: reason };
|
||||
if (handler = global_1['on' + name]) handler(event);
|
||||
if (!NATIVE_REJECTION_EVENT && (handler = global_1['on' + name])) handler(event);
|
||||
else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
|
||||
};
|
||||
|
||||
var onUnhandled = function (promise, state) {
|
||||
var onUnhandled = function (state) {
|
||||
task$1.call(global_1, function () {
|
||||
var promise = state.facade;
|
||||
var value = state.value;
|
||||
var IS_UNHANDLED = isUnhandled(state);
|
||||
var result;
|
||||
if (IS_UNHANDLED) {
|
||||
result = perform(function () {
|
||||
if (IS_NODE$1) {
|
||||
if (engineIsNode) {
|
||||
process$3.emit('unhandledRejection', value, promise);
|
||||
} else dispatchEvent(UNHANDLED_REJECTION, promise, value);
|
||||
});
|
||||
// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
|
||||
state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED;
|
||||
state.rejection = engineIsNode || isUnhandled(state) ? UNHANDLED : HANDLED;
|
||||
if (result.error) throw result.value;
|
||||
}
|
||||
});
|
||||
@ -6345,55 +6378,56 @@ var isUnhandled = function (state) {
|
||||
return state.rejection !== HANDLED && !state.parent;
|
||||
};
|
||||
|
||||
var onHandleUnhandled = function (promise, state) {
|
||||
var onHandleUnhandled = function (state) {
|
||||
task$1.call(global_1, function () {
|
||||
if (IS_NODE$1) {
|
||||
var promise = state.facade;
|
||||
if (engineIsNode) {
|
||||
process$3.emit('rejectionHandled', promise);
|
||||
} else dispatchEvent(REJECTION_HANDLED, promise, state.value);
|
||||
});
|
||||
};
|
||||
|
||||
var bind = function (fn, promise, state, unwrap) {
|
||||
var bind = function (fn, state, unwrap) {
|
||||
return function (value) {
|
||||
fn(promise, state, value, unwrap);
|
||||
fn(state, value, unwrap);
|
||||
};
|
||||
};
|
||||
|
||||
var internalReject = function (promise, state, value, unwrap) {
|
||||
var internalReject = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
state.value = value;
|
||||
state.state = REJECTED;
|
||||
notify$1(promise, state, true);
|
||||
notify$1(state, true);
|
||||
};
|
||||
|
||||
var internalResolve = function (promise, state, value, unwrap) {
|
||||
var internalResolve = function (state, value, unwrap) {
|
||||
if (state.done) return;
|
||||
state.done = true;
|
||||
if (unwrap) state = unwrap;
|
||||
try {
|
||||
if (promise === value) throw TypeError$1("Promise can't be resolved itself");
|
||||
if (state.facade === value) throw TypeError$1("Promise can't be resolved itself");
|
||||
var then = isThenable(value);
|
||||
if (then) {
|
||||
microtask(function () {
|
||||
var wrapper = { done: false };
|
||||
try {
|
||||
then.call(value,
|
||||
bind(internalResolve, promise, wrapper, state),
|
||||
bind(internalReject, promise, wrapper, state)
|
||||
bind(internalResolve, wrapper, state),
|
||||
bind(internalReject, wrapper, state)
|
||||
);
|
||||
} catch (error) {
|
||||
internalReject(promise, wrapper, error, state);
|
||||
internalReject(wrapper, error, state);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
state.value = value;
|
||||
state.state = FULFILLED;
|
||||
notify$1(promise, state, false);
|
||||
notify$1(state, false);
|
||||
}
|
||||
} catch (error) {
|
||||
internalReject(promise, { done: false }, error, state);
|
||||
internalReject({ done: false }, error, state);
|
||||
}
|
||||
};
|
||||
|
||||
@ -6406,9 +6440,9 @@ if (FORCED$3) {
|
||||
Internal.call(this);
|
||||
var state = getInternalState$3(this);
|
||||
try {
|
||||
executor(bind(internalResolve, this, state), bind(internalReject, this, state));
|
||||
executor(bind(internalResolve, state), bind(internalReject, state));
|
||||
} catch (error) {
|
||||
internalReject(this, state, error);
|
||||
internalReject(state, error);
|
||||
}
|
||||
};
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
@ -6432,10 +6466,10 @@ if (FORCED$3) {
|
||||
var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor));
|
||||
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
|
||||
reaction.fail = typeof onRejected == 'function' && onRejected;
|
||||
reaction.domain = IS_NODE$1 ? process$3.domain : undefined;
|
||||
reaction.domain = engineIsNode ? process$3.domain : undefined;
|
||||
state.parent = true;
|
||||
state.reactions.push(reaction);
|
||||
if (state.state != PENDING) notify$1(this, state, false);
|
||||
if (state.state != PENDING) notify$1(state, false);
|
||||
return reaction.promise;
|
||||
},
|
||||
// `Promise.prototype.catch` method
|
||||
@ -6448,8 +6482,8 @@ if (FORCED$3) {
|
||||
var promise = new Internal();
|
||||
var state = getInternalState$3(promise);
|
||||
this.promise = promise;
|
||||
this.resolve = bind(internalResolve, promise, state);
|
||||
this.reject = bind(internalReject, promise, state);
|
||||
this.resolve = bind(internalResolve, state);
|
||||
this.reject = bind(internalReject, state);
|
||||
};
|
||||
newPromiseCapability.f = newPromiseCapability$1 = function (C) {
|
||||
return C === PromiseConstructor || C === PromiseWrapper
|
||||
@ -6520,7 +6554,7 @@ _export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, {
|
||||
var values = [];
|
||||
var counter = 0;
|
||||
var remaining = 1;
|
||||
iterate_1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
var index = counter++;
|
||||
var alreadyCalled = false;
|
||||
values.push(undefined);
|
||||
@ -6545,7 +6579,7 @@ _export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, {
|
||||
var reject = capability.reject;
|
||||
var result = perform(function () {
|
||||
var $promiseResolve = aFunction$1(C.resolve);
|
||||
iterate_1(iterable, function (promise) {
|
||||
iterate(iterable, function (promise) {
|
||||
$promiseResolve.call(C, promise).then(capability.resolve, reject);
|
||||
});
|
||||
});
|
||||
@ -6792,12 +6826,17 @@ var $reduce = arrayReduce.left;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var STRICT_METHOD$5 = arrayMethodIsStrict('reduce');
|
||||
var USES_TO_LENGTH$9 = arrayMethodUsesToLength('reduce', { 1: 0 });
|
||||
// Chrome 80-82 has a critical bug
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
|
||||
var CHROME_BUG = !engineIsNode && engineV8Version > 79 && engineV8Version < 83;
|
||||
|
||||
// `Array.prototype.reduce` method
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.reduce
|
||||
_export({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$9 }, {
|
||||
_export({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$9 || CHROME_BUG }, {
|
||||
reduce: function reduce(callbackfn /* , initialValue */) {
|
||||
return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
|
||||
}
|
||||
@ -9978,7 +10017,7 @@ var defaults$1 = {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
// Quality default
|
||||
@ -10096,7 +10135,7 @@ var defaults$1 = {
|
||||
vimeo: {
|
||||
sdk: 'https://player.vimeo.com/api/player.js',
|
||||
iframe: 'https://player.vimeo.com/video/{0}?{1}',
|
||||
api: 'https://vimeo.com/api/v2/video/{0}.json'
|
||||
api: 'https://vimeo.com/api/oembed.json?url={0}'
|
||||
},
|
||||
youtube: {
|
||||
sdk: 'https://www.youtube.com/iframe_api',
|
||||
@ -10266,24 +10305,27 @@ var defaults$1 = {
|
||||
title: false,
|
||||
speed: true,
|
||||
transparent: false,
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
referrerPolicy: null,
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
// Whether the owner of the video has a Pro or Business account
|
||||
// (which allows us to properly hide controls without CSS hacks, etc)
|
||||
premium: false,
|
||||
// Custom settings from Plyr
|
||||
referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy
|
||||
|
||||
premium: false
|
||||
},
|
||||
// YouTube plugin
|
||||
youtube: {
|
||||
noCookie: true,
|
||||
// Whether to use an alternative version of YouTube without cookies
|
||||
rel: 0,
|
||||
// No related vids
|
||||
showinfo: 0,
|
||||
// Hide info
|
||||
iv_load_policy: 3,
|
||||
// Hide annotations
|
||||
modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)
|
||||
modestbranding: 1,
|
||||
// Hide logos as much as possible (they still show one in the corner when paused)
|
||||
// Custom settings from Plyr
|
||||
customControls: true,
|
||||
noCookie: false // Whether to use an alternative version of YouTube without cookies
|
||||
|
||||
}
|
||||
};
|
||||
@ -10402,7 +10444,7 @@ var Fullscreen = /*#__PURE__*/function () {
|
||||
return;
|
||||
}
|
||||
|
||||
_this.toggle();
|
||||
_this.player.listeners.proxy(event, _this.toggle, 'fullscreen');
|
||||
}); // Tap focus when in fullscreen
|
||||
|
||||
on.call(this, this.player.elements.container, 'keydown', function (event) {
|
||||
@ -10825,7 +10867,9 @@ var ui = {
|
||||
} // Set property synchronously to respect the call order
|
||||
|
||||
|
||||
this.media.setAttribute('data-poster', poster); // Wait until ui is ready
|
||||
this.media.setAttribute('data-poster', poster); // Show the poster
|
||||
|
||||
this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready
|
||||
|
||||
return ready.call(this) // Load image
|
||||
.then(function () {
|
||||
@ -11257,7 +11301,14 @@ var Listeners = /*#__PURE__*/function () {
|
||||
ratio = _setPlayerSize.ratio; // Set Vimeo gutter
|
||||
|
||||
|
||||
setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
setGutter(ratio, padding, isEnter); // Horrible hack for Safari 14 not repainting properly on entering fullscreen
|
||||
|
||||
if (isEnter) {
|
||||
setTimeout(function () {
|
||||
return repaint(elements.container);
|
||||
}, 100);
|
||||
} // If not using native browser fullscreen API, we need to check for resizes of viewport
|
||||
|
||||
|
||||
if (!usingNative) {
|
||||
if (isEnter) {
|
||||
@ -11448,9 +11499,17 @@ var Listeners = /*#__PURE__*/function () {
|
||||
|
||||
this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind
|
||||
this.bind(elements.buttons.rewind, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after rewind
|
||||
player.lastSeekTime = Date.now();
|
||||
player.rewind();
|
||||
}, 'rewind'); // Rewind
|
||||
|
||||
this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle
|
||||
this.bind(elements.buttons.fastForward, 'click', function () {
|
||||
// Record seek time so we can prevent hiding controls for a few seconds after fast forward
|
||||
player.lastSeekTime = Date.now();
|
||||
player.forward();
|
||||
}, 'fastForward'); // Mute toggle
|
||||
|
||||
this.bind(elements.buttons.mute, 'click', function () {
|
||||
player.muted = !player.muted;
|
||||
@ -12158,35 +12217,32 @@ var vimeo = {
|
||||
} // Inject the package
|
||||
|
||||
|
||||
var poster = player.poster;
|
||||
|
||||
if (premium) {
|
||||
iframe.setAttribute('data-poster', poster);
|
||||
if (premium || !config.customControls) {
|
||||
iframe.setAttribute('data-poster', player.poster);
|
||||
player.media = replaceElement(iframe, player.media);
|
||||
} else {
|
||||
var wrapper = createElement('div', {
|
||||
class: player.config.classNames.embedContainer,
|
||||
'data-poster': poster
|
||||
'data-poster': player.poster
|
||||
});
|
||||
wrapper.appendChild(iframe);
|
||||
player.media = replaceElement(wrapper, player.media);
|
||||
} // Get poster image
|
||||
|
||||
|
||||
fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {
|
||||
if (is$1.empty(response)) {
|
||||
return;
|
||||
} // Get the URL for thumbnail
|
||||
if (!config.customControls) {
|
||||
fetch(format(player.config.urls.vimeo.api, src)).then(function (response) {
|
||||
if (is$1.empty(response) || !response.thumbnail_url) {
|
||||
return;
|
||||
} // Set and show poster
|
||||
|
||||
|
||||
var url = new URL(response[0].thumbnail_large); // Get original image
|
||||
|
||||
url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster
|
||||
|
||||
ui.setPoster.call(player, url.href).catch(function () {});
|
||||
}); // Setup instance
|
||||
ui.setPoster.call(player, response.thumbnail_url).catch(function () {});
|
||||
});
|
||||
} // Setup instance
|
||||
// https://github.com/vimeo/player.js
|
||||
|
||||
|
||||
player.embed = new window.Vimeo.Player(iframe, {
|
||||
autopause: player.config.autopause,
|
||||
muted: player.muted
|
||||
@ -12426,9 +12482,11 @@ var vimeo = {
|
||||
triggerEvent.call(player, player.media, 'error');
|
||||
}); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -12519,7 +12577,8 @@ var youtube = {
|
||||
},
|
||||
// API ready
|
||||
ready: function ready() {
|
||||
var player = this; // Ignore already setup (race condition)
|
||||
var player = this;
|
||||
var config = player.config.youtube; // Ignore already setup (race condition)
|
||||
|
||||
var currentId = player.media && player.media.getAttribute('id');
|
||||
|
||||
@ -12536,53 +12595,53 @@ var youtube = {
|
||||
|
||||
|
||||
var videoId = parseId$1(source);
|
||||
var id = generateId(player.provider); // Get poster, if already set
|
||||
|
||||
var poster = player.poster; // Replace media element
|
||||
var id = generateId(player.provider); // Replace media element
|
||||
|
||||
var container = createElement('div', {
|
||||
id: id,
|
||||
'data-poster': poster
|
||||
'data-poster': config.customControls ? player.poster : undefined
|
||||
});
|
||||
player.media = replaceElement(container, player.media); // Id to poster wrapper
|
||||
player.media = replaceElement(container, player.media); // Only load the poster when using custom controls
|
||||
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
if (config.customControls) {
|
||||
var posterSrc = function posterSrc(s) {
|
||||
return "https://i.ytimg.com/vi/".concat(videoId, "/").concat(s, "default.jpg");
|
||||
}; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)
|
||||
|
||||
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
var config = player.config.youtube; // Setup instance
|
||||
loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('sd'), 121);
|
||||
}) // 480p padded 4:3
|
||||
.catch(function () {
|
||||
return loadImage(posterSrc('hq'));
|
||||
}) // 360p padded 4:3. Always exists
|
||||
.then(function (image) {
|
||||
return ui.setPoster.call(player, image.src);
|
||||
}).then(function (src) {
|
||||
// If the image is padded, use background-size "cover" instead (like youtube does too with their posters)
|
||||
if (!src.includes('maxres')) {
|
||||
player.elements.poster.style.backgroundSize = 'cover';
|
||||
}
|
||||
}).catch(function () {});
|
||||
} // Setup instance
|
||||
// https://developers.google.com/youtube/iframe_api_reference
|
||||
|
||||
player.embed = new window.YT.Player(id, {
|
||||
|
||||
player.embed = new window.YT.Player(player.media, {
|
||||
videoId: videoId,
|
||||
host: getHost$1(config),
|
||||
playerVars: extend({}, {
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// Autoplay
|
||||
hl: player.config.hl,
|
||||
autoplay: player.config.autoplay ? 1 : 0,
|
||||
// iframe interface language
|
||||
controls: player.supported.ui ? 0 : 1,
|
||||
// Only show controls if not fully supported
|
||||
disablekb: 1,
|
||||
hl: player.config.hl,
|
||||
// Only show controls if not fully supported or opted out
|
||||
controls: player.supported.ui && config.customControls ? 0 : 1,
|
||||
// Disable keyboard as we handle it
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
disablekb: 1,
|
||||
// Allow iOS inline playback
|
||||
playsinline: !player.config.fullscreen.iosNative ? 1 : 0,
|
||||
// Captions are flaky on YouTube
|
||||
cc_load_policy: player.captions.active ? 1 : 0,
|
||||
cc_lang_pref: player.config.captions.language,
|
||||
@ -12693,6 +12752,7 @@ var youtube = {
|
||||
var toggle = is$1.boolean(input) ? input : muted;
|
||||
muted = toggle;
|
||||
instance[toggle ? 'mute' : 'unMute']();
|
||||
instance.setVolume(volume * 100);
|
||||
triggerEvent.call(player, player.media, 'volumechange');
|
||||
}
|
||||
}); // Source
|
||||
@ -12715,7 +12775,7 @@ var youtube = {
|
||||
return player.config.speed.options.includes(s);
|
||||
}); // Set the tabindex to avoid focus entering iframe
|
||||
|
||||
if (player.supported.ui) {
|
||||
if (player.supported.ui && config.customControls) {
|
||||
player.media.setAttribute('tabindex', -1);
|
||||
}
|
||||
|
||||
@ -12742,9 +12802,11 @@ var youtube = {
|
||||
}
|
||||
}, 200); // Rebuild UI
|
||||
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
if (config.customControls) {
|
||||
setTimeout(function () {
|
||||
return ui.build.call(player);
|
||||
}, 50);
|
||||
}
|
||||
},
|
||||
onStateChange: function onStateChange(event) {
|
||||
// Get the instance
|
||||
@ -12790,7 +12852,7 @@ var youtube = {
|
||||
|
||||
case 1:
|
||||
// Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)
|
||||
if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
if (config.customControls && !player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {
|
||||
player.media.pause();
|
||||
} else {
|
||||
assurePlaybackState$1.call(player, true);
|
||||
@ -12863,7 +12925,8 @@ var media = {
|
||||
wrap$1(this.media, this.elements.wrapper); // Poster image container
|
||||
|
||||
this.elements.poster = createElement('div', {
|
||||
class: this.config.classNames.poster
|
||||
class: this.config.classNames.poster,
|
||||
hidden: ''
|
||||
});
|
||||
this.elements.wrapper.appendChild(this.elements.poster);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "plyr",
|
||||
"version": "3.6.2",
|
||||
"version": "3.6.3",
|
||||
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
|
||||
"homepage": "https://plyr.io",
|
||||
"author": "Sam Potts <sam@potts.es>",
|
||||
|
@ -61,7 +61,7 @@ const defaults = {
|
||||
// Sprite (for icons)
|
||||
loadSprite: true,
|
||||
iconPrefix: 'plyr',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.2/plyr.svg',
|
||||
iconUrl: 'https://cdn.plyr.io/3.6.3/plyr.svg',
|
||||
|
||||
// Blank video (used to prevent errors on source change)
|
||||
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
|
||||
|
@ -1,6 +1,6 @@
|
||||
// ==========================================================================
|
||||
// Plyr
|
||||
// plyr.js v3.6.2
|
||||
// plyr.js v3.6.3
|
||||
// https://github.com/sampotts/plyr
|
||||
// License: The MIT License (MIT)
|
||||
// ==========================================================================
|
||||
|
@ -1,6 +1,6 @@
|
||||
// ==========================================================================
|
||||
// Plyr Polyfilled Build
|
||||
// plyr.js v3.6.2
|
||||
// plyr.js v3.6.3
|
||||
// https://github.com/sampotts/plyr
|
||||
// License: The MIT License (MIT)
|
||||
// ==========================================================================
|
||||
|
219
yarn.lock
219
yarn.lock
@ -1096,18 +1096,18 @@
|
||||
lodash "^4.17.13"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@gulp-sourcemaps/identity-map@1.X":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9"
|
||||
integrity sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==
|
||||
"@gulp-sourcemaps/identity-map@^2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz#a6e8b1abec8f790ec6be2b8c500e6e68037c0019"
|
||||
integrity sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==
|
||||
dependencies:
|
||||
acorn "^5.0.3"
|
||||
css "^2.2.1"
|
||||
normalize-path "^2.1.1"
|
||||
acorn "^6.4.1"
|
||||
normalize-path "^3.0.0"
|
||||
postcss "^7.0.16"
|
||||
source-map "^0.6.0"
|
||||
through2 "^2.0.3"
|
||||
through2 "^3.0.1"
|
||||
|
||||
"@gulp-sourcemaps/map-sources@1.X":
|
||||
"@gulp-sourcemaps/map-sources@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda"
|
||||
integrity sha1-iQrnxdjId/bThIYCFazp1+yUW9o=
|
||||
@ -1348,10 +1348,10 @@ acorn-jsx@^5.2.0:
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
|
||||
integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
|
||||
|
||||
acorn@5.X, acorn@^5.0.3:
|
||||
version "5.7.4"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
|
||||
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
|
||||
acorn@^6.4.1:
|
||||
version "6.4.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
|
||||
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
|
||||
|
||||
acorn@^7.1.1:
|
||||
version "7.1.1"
|
||||
@ -1816,13 +1816,13 @@ atob@^2.1.2:
|
||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||
|
||||
autoprefixer@^10.0.1:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.0.1.tgz#e2d9000f84ebd98d77b7bc16f8adb2ff1f7bb946"
|
||||
integrity sha512-aQo2BDIsoOdemXUAOBpFv4ZQa2DrOtEufarYhtFsK1088Ca0TUwu/aQWf0M3mrILXZ3mTIVn1lR3hPW8acacsw==
|
||||
autoprefixer@^10.0.2:
|
||||
version "10.0.2"
|
||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.0.2.tgz#a79f9a02bfb95c621998776ac0d85f8f855b367e"
|
||||
integrity sha512-okBmu9OMdt6DNEcZmnl0IYVv8Xl/xYWRSnc2OJ9UJEOt1u30opG1B8aLsViqKryBaYv1SKB4f85fOGZs5zYxHQ==
|
||||
dependencies:
|
||||
browserslist "^4.14.5"
|
||||
caniuse-lite "^1.0.30001137"
|
||||
browserslist "^4.14.7"
|
||||
caniuse-lite "^1.0.30001157"
|
||||
colorette "^1.2.1"
|
||||
normalize-range "^0.1.2"
|
||||
num2fraction "^1.2.2"
|
||||
@ -2091,9 +2091,9 @@ bindings@^1.5.0:
|
||||
file-uri-to-path "1.0.0"
|
||||
|
||||
bl@^1.0.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
|
||||
integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
|
||||
integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==
|
||||
dependencies:
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
@ -2254,15 +2254,16 @@ browserslist@^4.12.0:
|
||||
escalade "^3.0.2"
|
||||
node-releases "^1.1.60"
|
||||
|
||||
browserslist@^4.14.5:
|
||||
version "4.14.5"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015"
|
||||
integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==
|
||||
browserslist@^4.14.7:
|
||||
version "4.14.7"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
|
||||
integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001135"
|
||||
electron-to-chromium "^1.3.571"
|
||||
escalade "^3.1.0"
|
||||
node-releases "^1.1.61"
|
||||
caniuse-lite "^1.0.30001157"
|
||||
colorette "^1.2.1"
|
||||
electron-to-chromium "^1.3.591"
|
||||
escalade "^3.1.1"
|
||||
node-releases "^1.1.66"
|
||||
|
||||
bs-recipes@1.3.4:
|
||||
version "1.3.4"
|
||||
@ -2464,10 +2465,10 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001111:
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001120.tgz#cd21d35e537214e19f7b9f4f161f7b0f2710d46c"
|
||||
integrity sha512-JBP68okZs1X8D7MQTY602jxMYBmXEKOFkzTBaNSkubooMPFOAv2TXWaKle7qgHpjLDhUzA/TMT0qsNleVyXGUQ==
|
||||
|
||||
caniuse-lite@^1.0.30001135, caniuse-lite@^1.0.30001137:
|
||||
version "1.0.30001148"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz#dc97c7ed918ab33bf8706ddd5e387287e015d637"
|
||||
integrity sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==
|
||||
caniuse-lite@^1.0.30001157:
|
||||
version "1.0.30001157"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz#2d11aaeb239b340bc1aa730eca18a37fdb07a9ab"
|
||||
integrity sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA==
|
||||
|
||||
capture-stack-trace@^1.0.0:
|
||||
version "1.0.1"
|
||||
@ -2969,7 +2970,7 @@ content-disposition@^0.5.2:
|
||||
dependencies:
|
||||
safe-buffer "5.1.2"
|
||||
|
||||
convert-source-map@1.X, convert-source-map@^1.5.0, convert-source-map@^1.7.0:
|
||||
convert-source-map@^1.0.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
||||
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
|
||||
@ -3007,10 +3008,10 @@ core-js-pure@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
|
||||
integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
|
||||
|
||||
core-js@^3.6.5:
|
||||
version "3.6.5"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
|
||||
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
|
||||
core-js@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f"
|
||||
integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==
|
||||
|
||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
@ -3159,15 +3160,14 @@ css-what@^3.2.1:
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1"
|
||||
integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==
|
||||
|
||||
css@2.X, css@^2.2.1:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
|
||||
integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
|
||||
css@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d"
|
||||
integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
inherits "^2.0.4"
|
||||
source-map "^0.6.1"
|
||||
source-map-resolve "^0.5.2"
|
||||
urix "^0.1.0"
|
||||
source-map-resolve "^0.6.0"
|
||||
|
||||
cssesc@^3.0.0:
|
||||
version "3.0.0"
|
||||
@ -3221,7 +3221,7 @@ dateformat@^1.0.11:
|
||||
get-stdin "^4.0.1"
|
||||
meow "^3.3.0"
|
||||
|
||||
debug-fabulous@1.X:
|
||||
debug-fabulous@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.1.0.tgz#af8a08632465224ef4174a9f06308c3c2a1ebc8e"
|
||||
integrity sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==
|
||||
@ -3426,7 +3426,7 @@ detect-file@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
|
||||
integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
|
||||
|
||||
detect-newline@2.X:
|
||||
detect-newline@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
|
||||
integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
|
||||
@ -3655,10 +3655,10 @@ electron-to-chromium@^1.3.523:
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.555.tgz#a096716ff77cf8da9a608eb628fd6927869503d2"
|
||||
integrity sha512-/55x3nF2feXFZ5tdGUOr00TxnUjUgdxhrn+eCJ1FAcoAt+cKQTjQkUC5XF4frMWE1R5sjHk+JueuBalimfe5Pg==
|
||||
|
||||
electron-to-chromium@^1.3.571:
|
||||
version "1.3.582"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz#1adfac5affce84d85b3d7b3dfbc4ade293a6ffc4"
|
||||
integrity sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==
|
||||
electron-to-chromium@^1.3.591:
|
||||
version "1.3.595"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.595.tgz#e8a9e7c6919963419f892ea981d7b3438ccb834d"
|
||||
integrity sha512-JpaBIhdBkF9FLG7x06ONfe0f5bxPrxRcq0X+Sc8vsCt+OPWIzxOD+qM71NEHLGbDfN9Q6hbtHRv4/dnvcOxo6g==
|
||||
|
||||
"emoji-regex@>=6.0.0 <=6.1.1":
|
||||
version "6.1.1"
|
||||
@ -3869,7 +3869,7 @@ escalade@^3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4"
|
||||
integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==
|
||||
|
||||
escalade@^3.1.0:
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
@ -5264,7 +5264,7 @@ got@^8.3.1:
|
||||
url-parse-lax "^3.0.0"
|
||||
url-to-options "^1.0.1"
|
||||
|
||||
graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2:
|
||||
graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
||||
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
||||
@ -5468,22 +5468,22 @@ gulp-size@^3.0.0:
|
||||
stream-counter "^1.0.0"
|
||||
through2 "^2.0.0"
|
||||
|
||||
gulp-sourcemaps@^2.6.5:
|
||||
version "2.6.5"
|
||||
resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz#a3f002d87346d2c0f3aec36af7eb873f23de8ae6"
|
||||
integrity sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==
|
||||
gulp-sourcemaps@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz#2e154e1a2efed033c0e48013969e6f30337b2743"
|
||||
integrity sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==
|
||||
dependencies:
|
||||
"@gulp-sourcemaps/identity-map" "1.X"
|
||||
"@gulp-sourcemaps/map-sources" "1.X"
|
||||
acorn "5.X"
|
||||
convert-source-map "1.X"
|
||||
css "2.X"
|
||||
debug-fabulous "1.X"
|
||||
detect-newline "2.X"
|
||||
graceful-fs "4.X"
|
||||
source-map "~0.6.0"
|
||||
strip-bom-string "1.X"
|
||||
through2 "2.X"
|
||||
"@gulp-sourcemaps/identity-map" "^2.0.1"
|
||||
"@gulp-sourcemaps/map-sources" "^1.0.0"
|
||||
acorn "^6.4.1"
|
||||
convert-source-map "^1.0.0"
|
||||
css "^3.0.0"
|
||||
debug-fabulous "^1.0.0"
|
||||
detect-newline "^2.0.0"
|
||||
graceful-fs "^4.0.0"
|
||||
source-map "^0.6.0"
|
||||
strip-bom-string "^1.0.0"
|
||||
through2 "^2.0.0"
|
||||
|
||||
gulp-svgstore@^7.0.1:
|
||||
version "7.0.1"
|
||||
@ -5495,10 +5495,10 @@ gulp-svgstore@^7.0.1:
|
||||
plugin-error "^0.1.2"
|
||||
vinyl "^2.1.0"
|
||||
|
||||
gulp-terser@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-1.4.0.tgz#0ac4dfdbed4ab46906007c5b358810c1642b9764"
|
||||
integrity sha512-7df9leJna3WOmj76tYHxjpn7BSU+vmKVjVSd6bz3uLEyrzCfZI97KPhRcIabrSNzs0UY/UXTt+JwkxPw3sF85w==
|
||||
gulp-terser@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-1.4.1.tgz#06b30023889b149bdbbdd49fada31b233fe737df"
|
||||
integrity sha512-VUoKrk24G0ojr7fXqlZ7vA8qDFHRloYAM6doNRyKdJ/LFkj+X3P04f+7LlOp7j05WtdOCEg65oG6nGjSf//78A==
|
||||
dependencies:
|
||||
is-promise "^4.0.0"
|
||||
plugin-error "^1.0.1"
|
||||
@ -5916,7 +5916,7 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3:
|
||||
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
@ -7539,10 +7539,10 @@ nan@^2.12.1, nan@^2.13.2:
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
|
||||
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
|
||||
|
||||
nanoid@^3.1.12:
|
||||
version "3.1.12"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"
|
||||
integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==
|
||||
nanoid@^3.1.16:
|
||||
version "3.1.16"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64"
|
||||
integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==
|
||||
|
||||
nanomatch@^1.2.9:
|
||||
version "1.2.13"
|
||||
@ -7621,10 +7621,10 @@ node-releases@^1.1.60:
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084"
|
||||
integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==
|
||||
|
||||
node-releases@^1.1.61:
|
||||
version "1.1.63"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.63.tgz#db6dbb388544c31e888216304e8fd170efee3ff5"
|
||||
integrity sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==
|
||||
node-releases@^1.1.66:
|
||||
version "1.1.66"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814"
|
||||
integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==
|
||||
|
||||
node-sass@^4.8.3:
|
||||
version "4.14.0"
|
||||
@ -8677,6 +8677,15 @@ postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.23, postcss@^6.0.6, postcss@^6.0.
|
||||
source-map "^0.6.1"
|
||||
supports-color "^5.4.0"
|
||||
|
||||
postcss@^7.0.16:
|
||||
version "7.0.35"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
|
||||
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
source-map "^0.6.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.6:
|
||||
version "7.0.32"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d"
|
||||
@ -8686,14 +8695,14 @@ postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.6:
|
||||
source-map "^0.6.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
postcss@^8.1.2:
|
||||
version "8.1.2"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.2.tgz#9731fcaa4f7b0bef47121821bdae9eeb609a324c"
|
||||
integrity sha512-mToqEVFq8jF9TFhlIK4HhE34zknFJuNTgqtsr60vUvrWn+9TIYugCwiV1JZRxCuOrej2jjstun1bn4Bc7/1HkA==
|
||||
postcss@^8.1.7:
|
||||
version "8.1.7"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f"
|
||||
integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==
|
||||
dependencies:
|
||||
colorette "^1.2.1"
|
||||
line-column "^1.0.2"
|
||||
nanoid "^3.1.12"
|
||||
nanoid "^3.1.16"
|
||||
source-map "^0.6.1"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
@ -9621,10 +9630,10 @@ rollup-pluginutils@^2.8.1:
|
||||
dependencies:
|
||||
estree-walker "^0.6.1"
|
||||
|
||||
rollup@^2.32.0:
|
||||
version "2.32.0"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.32.0.tgz#ac58c8e85782bea8aa2d440fc05aba345013582a"
|
||||
integrity sha512-0FIG1jY88uhCP2yP4CfvtKEqPDRmsUwfY1kEOOM+DH/KOGATgaIFd/is1+fQOxsvh62ELzcFfKonwKWnHhrqmw==
|
||||
rollup@^2.33.1:
|
||||
version "2.33.1"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.33.1.tgz#802795164164ee63cd47769d8879c33ec8ae0c40"
|
||||
integrity sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==
|
||||
optionalDependencies:
|
||||
fsevents "~2.1.2"
|
||||
|
||||
@ -9663,9 +9672,9 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
safe-regex@^1.1.0:
|
||||
version "1.1.0"
|
||||
@ -10035,7 +10044,7 @@ sort-keys@^2.0.0:
|
||||
dependencies:
|
||||
is-plain-obj "^1.0.0"
|
||||
|
||||
source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
|
||||
source-map-resolve@^0.5.0:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
|
||||
integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
|
||||
@ -10046,6 +10055,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
|
||||
source-map-url "^0.4.0"
|
||||
urix "^0.1.0"
|
||||
|
||||
source-map-resolve@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2"
|
||||
integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==
|
||||
dependencies:
|
||||
atob "^2.1.2"
|
||||
decode-uri-component "^0.2.0"
|
||||
|
||||
source-map-support@~0.5.12:
|
||||
version "0.5.19"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
||||
@ -10382,7 +10399,7 @@ strip-ansi@^6.0.0:
|
||||
dependencies:
|
||||
ansi-regex "^5.0.0"
|
||||
|
||||
strip-bom-string@1.X:
|
||||
strip-bom-string@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
|
||||
integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=
|
||||
@ -10897,7 +10914,7 @@ through2-filter@^3.0.0:
|
||||
through2 "~2.0.0"
|
||||
xtend "~4.0.0"
|
||||
|
||||
through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0:
|
||||
through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
|
||||
@ -11535,10 +11552,10 @@ url-parse-lax@^3.0.0:
|
||||
dependencies:
|
||||
prepend-http "^2.0.0"
|
||||
|
||||
url-polyfill@^1.1.11:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.11.tgz#85d2b2e67292f6d825297d4bed01d66da0b20dc3"
|
||||
integrity sha512-p3Vw21dz901xeu++K6db2CZgfwMZjzVAH2buek66I0HKY+DHSh/AXz+p9B/+RhhZ9l3xDMBviwe99Eeu+UJB3g==
|
||||
url-polyfill@^1.1.12:
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.12.tgz#6cdaa17f6b022841b3aec0bf8dbd87ac0cd33331"
|
||||
integrity sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==
|
||||
|
||||
url-to-options@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user