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:
Sam Potts 2020-11-14 13:35:22 +11:00
commit 87078d7a44
24 changed files with 944 additions and 692 deletions

2
.nvmrc
View File

@ -1 +1 @@
v13.8.0
v12.8

View File

@ -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

File diff suppressed because one or more lines are too long

343
demo/dist/demo.js vendored
View File

@ -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);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
dist/plyr.css vendored

File diff suppressed because one or more lines are too long

164
dist/plyr.js vendored
View File

@ -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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
dist/plyr.min.mjs vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

164
dist/plyr.mjs vendored
View File

@ -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);
}

View File

@ -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);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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);
}

View File

@ -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>",

View File

@ -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',

View File

@ -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)
// ==========================================================================

View File

@ -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
View File

@ -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"