From 54110f83582e3c6d12ee7ba3f09e4b116be87ffd Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Tue, 19 Feb 2019 01:05:59 +1100 Subject: [PATCH] Update build process --- build.json | 46 + bundles.json | 20 - demo/dist/demo.js | 16 +- demo/dist/demo.min.js | 2 +- demo/dist/demo.min.js.map | 2 +- demo/dist/{plyr.svg => demo.svg} | 2 +- demo/src/js/demo.js | 13 +- deploy.json | 12 + dist/plyr.js | 2 +- dist/plyr.min.js | 2 +- dist/plyr.min.js.map | 2 +- dist/plyr.min.mjs | 2 +- dist/plyr.min.mjs.map | 2 +- dist/plyr.mjs | 2 +- dist/plyr.polyfilled.js | 4 +- dist/plyr.polyfilled.min.js | 2 +- dist/plyr.polyfilled.min.js.map | 2 +- dist/plyr.polyfilled.min.mjs | 2 +- dist/plyr.polyfilled.min.mjs.map | 2 +- dist/plyr.polyfilled.mjs | 4 +- dist/plyr.svg | 2 +- gulpfile.js | 613 ++++----- package.json | 27 +- yarn.lock | 2080 +++++++++++++++++++++--------- 24 files changed, 1918 insertions(+), 945 deletions(-) create mode 100644 build.json delete mode 100644 bundles.json rename demo/dist/{plyr.svg => demo.svg} (57%) create mode 100644 deploy.json diff --git a/build.json b/build.json new file mode 100644 index 00000000..462649e3 --- /dev/null +++ b/build.json @@ -0,0 +1,46 @@ +{ + "js": { + "plyr.js": { + "src": "./src/js/plyr.js", + "dist": "./dist/", + "formats": ["es", "umd"], + "namespace": "Plyr" + }, + "plyr.polyfilled.js": { + "src": "./src/js/plyr.polyfilled.js", + "dist": "./dist/", + "formats": ["es", "umd"], + "namespace": "Plyr" + }, + "demo.js": { + "src": "./demo/src/js/demo.js", + "dist": "./demo/dist/", + "formats": ["iife"], + "namespace": "Demo" + } + }, + "css": { + "plyr.css": { + "src": "./src/sass/plyr.scss", + "dist": "./dist/" + }, + "demo.css": { + "src": "./demo/src/sass/bundles/demo.scss", + "dist": "./demo/dist/" + }, + "error.css": { + "src": "./demo/src/sass/bundles/error.scss", + "dist": "./demo/dist/" + } + }, + "sprite": { + "plyr.svg": { + "src": "./src/sprite/*.svg", + "dist": "./dist" + }, + "demo.svg": { + "src": "./src/sprite/*.svg", + "dist": "./demo/dist" + } + } +} diff --git a/bundles.json b/bundles.json deleted file mode 100644 index 9c7733cc..00000000 --- a/bundles.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "plyr": { - "sass": { - "plyr.css": "src/sass/plyr.scss" - }, - "js": { - "plyr.js": "src/js/plyr.js", - "plyr.polyfilled.js": "src/js/plyr.polyfilled.js" - } - }, - "demo": { - "sass": { - "demo.css": "demo/src/sass/bundles/demo.scss", - "error.css": "demo/src/sass/bundles/error.scss" - }, - "js": { - "demo.js": "demo/src/js/demo.js" - } - } -} diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 71f09f65..db0b36a0 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -5911,7 +5911,7 @@ typeof navigator === "object" && (function () { min: 0, max: 100, value: 0, - role: 'presentation', + role: 'progressbar', 'aria-hidden': true }, attributes)); // Create the label inside @@ -13004,17 +13004,12 @@ typeof navigator === "object" && (function () { focused.classList.add(tabClassName); }, 10); - }); - var userType = 'annon'; - var contentType = 'on-demand'; - var cmsid = 2490180; - var vid = 3788; - var tagUrl = "https://pubads.g.doubleclick.net/gampad/live/ads?sz=640x360&iu=/21736521837/ovo/web&impl=s&gdfp_req=1&env=vp&output=vast&cust_params=usergroup%3D".concat(userType, "%26content-type%3D").concat(contentType, "&cmsid=").concat(cmsid, "&vid=").concat(vid); // Setup the player + }); // Setup the player var player = new Plyr(selector, { debug: true, title: 'View From A Blue Moon', - iconUrl: 'dist/plyr.svg', + iconUrl: 'dist/demo.svg', keyboard: { global: true }, @@ -13028,9 +13023,8 @@ typeof navigator === "object" && (function () { google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c' }, ads: { - enabled: true, - // env.prod || env.dev, - tagUrl: tagUrl + enabled: env.prod || env.dev, + publisherId: '918848828995742' }, previewThumbnails: { enabled: true, diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js index e2751e72..028035ea 100644 --- a/demo/dist/demo.min.js +++ b/demo/dist/demo.min.js @@ -1,2 +1,2 @@ -"object"==typeof navigator&&function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){function n(e,t){for(var n=0;n0){var o=n(i,this);~o?i.splice(o+1):i.push(this),~o?r.splice(o,1/0,a):r.push(a),~n(i,s)&&(s=t.call(this,a,s))}else i.push(s);return null==e?s instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}(s):s:e.call(this,a,s)}}(e.exports=function(e,t,n,r){return JSON.stringify(e,i(t,r),n)}).getSerialize=i}),i=(n.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function r(e){return void 0===e}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function s(e){return"[object String]"===Object.prototype.toString.call(e)}function o(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(){if(!("fetch"in i))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function c(e,t){var n,i;if(r(e.length))for(n in e)d(e,n)&&t.call(null,n,e[n]);else if(i=e.length)for(n=0;n ".length;e&&i++<5&&!("html"===(t=p(e))||i>1&&r+n.length*a+t.length>=80);)n.push(t),r+=t.length,e=e.parentNode;return n.reverse().join(" > ")},htmlElementAsString:p,isSameException:function(e,t){return!m(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(n=e.stacktrace,i=t.stacktrace,(!r(n)||!r(i))&&f(e.stacktrace,t.stacktrace)));var n,i},isSameStacktrace:f,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),n=t[6]||"",i=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+n+i}},fill:function(e,t,n,i){if(null!=e){var r=e[t];e[t]=n(r),e[t].__raven__=!0,e[t].__orig__=r,i&&i.push([e,t,r])}},safeJoin:function(e,t){if(!o(e))return"";for(var n=[],i=0;ir?e(t,i-1):s},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var n=e.length;n>0;n--){var i=e.slice(0,n).join(", ");if(!(i.length>t))return n===e.length?i:i+"…"}return""},sanitize:function(e,t){if(!o(t)||o(t)&&0===t.length)return e;var i,r=h(t),s="********";try{i=JSON.parse(n(e))}catch(t){return e}return function e(t){return o(t)?t.map(function(t){return e(t)}):a(t)?Object.keys(t).reduce(function(n,i){return r.test(i)?n[i]=s:n[i]=e(t[i]),n},{}):t}(i)}},_={collectWindowErrors:!0,debug:!1},T="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},E=[].slice,S="?",C=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function x(){return"undefined"==typeof document||null==document.location?"":document.location.href}_.report=function(){var e,t,n=[],i=null,r=null,a=null;function s(e,t){var i=null;if(!t||_.collectWindowErrors){for(var r in n)if(n.hasOwnProperty(r))try{n[r].apply(null,[e].concat(E.call(arguments,2)))}catch(e){i=e}if(i)throw i}}function o(t,n,i,r,o){var c=w.isErrorEvent(o)?o.error:o,u=w.isErrorEvent(t)?t.message:t;if(a)_.computeStackTrace.augmentStackTraceWithInitialElement(a,n,i,u),l();else if(c&&w.isError(c))s(_.computeStackTrace(c),!0);else{var d,h={url:n,line:i,column:r},p=void 0;if("[object String]"==={}.toString.call(u))(d=u.match(C))&&(p=d[1],u=d[2]);h.func=S,s({name:p,message:u,url:x(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function l(){var e=a,t=i;i=null,a=null,r=null,s.apply(null,[e,!1].concat(t))}function c(e,t){var n=E.call(arguments,1);if(a){if(r===e)return;l()}var s=_.computeStackTrace(e);if(a=s,r=e,i=n,setTimeout(function(){r===e&&l()},s.incomplete?2e3:0),!1!==t)throw e}return c.subscribe=function(i){t||(e=T.onerror,T.onerror=o,t=!0),n.push(i)},c.unsubscribe=function(e){for(var t=n.length-1;t>=0;--t)n[t]===e&&n.splice(t,1)},c.uninstall=function(){t&&(T.onerror=e,t=!1,e=void 0),n=[]},c}(),_.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,n,i,r=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,o=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,c=e.stack.split("\n"),u=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=c.length;d eval")>-1&&(t=o.exec(n[3]))?(n[3]=t[1],n[4]=t[2],n[5]=null):0!==d||n[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),i={url:n[3],func:n[1]||S,args:n[2]?n[2].split(","):[],line:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}if(!i.func&&i.line&&(i.func=S),i.url&&"blob:"===i.url.substr(0,5)){var m=new XMLHttpRequest;if(m.open("GET",i.url,!1),m.send(null),200===m.status){var f=m.responseText||"",g=(f=f.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(g){var y=g[1];"~"===y.charAt(0)&&(y=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+y.slice(1)),i.url=y.slice(0,-4)}}}u.push(i)}return u.length?{name:e.name,message:e.message,url:x(),stack:u}:null}}function t(e,t,n,i){var r={url:t,line:n};if(r.url&&r.line){if(e.incomplete=!1,r.func||(r.func=S),e.stack.length>0&&e.stack[0].url===r.url){if(e.stack[0].line===r.line)return!1;if(!e.stack[0].line&&e.stack[0].func===r.func)return e.stack[0].line=r.line,!1}return e.stack.unshift(r),e.partial=!0,!0}return e.incomplete=!0,!1}function n(e,r){for(var a,s,o=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],c={},u=!1,d=n.caller;d&&!u;d=d.caller)if(d!==i&&d!==_.report){if(s={url:null,func:S,line:null,column:null},d.name?s.func=d.name:(a=o.exec(d.toString()))&&(s.func=a[1]),void 0===s.func)try{s.func=a.input.substring(0,a.input.indexOf("{"))}catch(e){}c[""+d]?u=!0:c[""+d]=!0,l.push(s)}r&&l.splice(0,r);var h={name:e.name,message:e.message,url:x(),stack:l};return t(h,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),h}function i(t,i){var r=null;i=null==i?0:+i;try{if(r=e(t))return r}catch(e){if(_.debug)throw e}try{if(r=n(t,i+1))return r}catch(e){if(_.debug)throw e}return{name:t.name,message:t.message,url:x()}}return i.augmentStackTraceWithInitialElement=t,i.computeStackTraceFromStackProp=e,i}();var A=_;function P(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function O(e,t,n,i,r,a){return P((s=P(P(t,e),P(i,a)))<<(o=r)|s>>>32-o,n);var s,o}function M(e,t,n,i,r,a,s){return O(t&n|~t&i,e,t,r,a,s)}function N(e,t,n,i,r,a,s){return O(t&i|n&~i,e,t,r,a,s)}function L(e,t,n,i,r,a,s){return O(t^n^i,e,t,r,a,s)}function I(e,t,n,i,r,a,s){return O(n^(t|~i),e,t,r,a,s)}function j(e,t){var n,i,r,a,s;e[t>>5]|=128<>>9<<4)]=t;var o=1732584193,l=-271733879,c=-1732584194,u=271733878;for(n=0;n>5]>>>t%32&255);return n}function D(e){var t,n=[];for(n[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return i}function B(e){return unescape(encodeURIComponent(e))}function H(e){return function(e){return R(j(D(e),8*e.length))}(B(e))}function q(e,t){return function(e,t){var n,i,r=D(e),a=[],s=[];for(a[15]=s[15]=void 0,r.length>16&&(r=j(r,8*e.length)),n=0;n<16;n+=1)a[n]=909522486^r[n],s[n]=1549556828^r[n];return i=j(a.concat(D(t)),512+8*t.length),R(j(s.concat(i),640))}(B(e),B(t))}var U=function(e,t,n){return t?n?q(t,e):F(q(t,e)):n?H(e):F(H(e))};function V(e){this.name="RavenConfigError",this.message=e}V.prototype=new Error,V.prototype.constructor=V;var z=V,W=function(e,t,n){var i=e[t],r=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),s=w.safeJoin(e," "),o={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(s="Assertion failed: "+(w.safeJoin(e.slice(1)," ")||"console.assert"),o.extra.arguments=e.slice(1),n&&n(s,o)):n&&n(s,o),i&&Function.prototype.apply.call(i,r,e)}}},K=w.isErrorEvent,X=w.isDOMError,$=w.isDOMException,Y=w.isError,J=w.isObject,G=w.isPlainObject,Q=w.isUndefined,Z=w.isFunction,ee=w.isString,te=w.isArray,ne=w.isEmptyObject,ie=w.each,re=w.objectMerge,ae=w.truncate,se=w.objectFrozen,oe=w.hasKey,le=w.joinRegExp,ce=w.urlencode,ue=w.uuid4,de=w.htmlTreeAsString,he=w.isSameException,pe=w.isSameStacktrace,me=w.parseUrl,fe=w.fill,ge=w.supportsFetch,ye=w.supportsReferrerPolicy,ve=w.serializeKeysForMessage,be=w.serializeException,ke=w.sanitize,we=W,_e="source protocol user pass host port path".split(" "),Te=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function Ee(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Ce=Se.document,xe=Se.navigator;function Ae(e,t){return Z(t)?function(n){return t(n,e)}:t}function Pe(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Q(Ce),this._hasNavigator=!Q(xe),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Se.SENTRY_RELEASE&&Se.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",referrerPolicy:ye()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=Ee(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Se.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Pe.prototype={VERSION:"3.27.0",debug:!1,TraceKit:A,config:function(e,t){var n=this;if(n._globalServer)return this._logDebug("error","Error: Raven has already been configured"),n;if(!e)return n;var i=n._globalOptions;t&&ie(t,function(e,t){"tags"===e||"extra"===e||"user"===e?n._globalContext[e]=t:i[e]=t}),n.setDSN(e),i.ignoreErrors.push(/^Script error\.?$/),i.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),i.ignoreErrors=le(i.ignoreErrors),i.ignoreUrls=!!i.ignoreUrls.length&&le(i.ignoreUrls),i.whitelistUrls=!!i.whitelistUrls.length&&le(i.whitelistUrls),i.includePaths=le(i.includePaths),i.maxBreadcrumbs=Math.max(0,Math.min(i.maxBreadcrumbs||100,100));var r={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},a=i.autoBreadcrumbs;"[object Object]"==={}.toString.call(a)?a=re(r,a):!1!==a&&(a=r),i.autoBreadcrumbs=a;var s={tryCatch:!0},o=i.instrument;return"[object Object]"==={}.toString.call(o)?o=re(s,o):!1!==o&&(o=s),i.instrument=o,A.collectWindowErrors=!!i.collectWindowErrors,n},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(A.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),n=t.path.lastIndexOf("/"),i=t.path.substr(1,n);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(n+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+i+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,n){return Z(e)&&(n=t||[],t=e,e={}),this.wrap(e,t).apply(this,n)},wrap:function(e,t,n){var i=this;if(Q(t)&&!Z(e))return e;if(Z(e)&&(t=e,e=void 0),!Z(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function r(){var r=[],a=arguments.length,s=!e||e&&!1!==e.deep;for(n&&Z(n)&&n.apply(this,arguments);a--;)r[a]=s?i.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,r)}catch(t){throw i._ignoreNextOnError(),i.captureException(t,e),t}}for(var a in t)oe(t,a)&&(r[a]=t[a]);return r.prototype=t.prototype,t.__raven_wrapper__=r,r.__raven__=!0,r.__orig__=t,r},uninstall:function(){return A.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Se.addEventListener&&Se.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Se.removeEventListener&&Se.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=re({trimHeadFrames:0},t||{}),K(e)&&e.error)e=e.error;else{if(X(e)||$(e)){var n=e.name||(X(e)?"DOMError":"DOMException"),i=e.message?n+": "+e.message:n;return this.captureMessage(i,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(Y(e))e=e;else{if(!G(e))return this.captureMessage(e,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var r=A.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var n=Object.keys(t).sort(),i=re(e,{message:"Non-Error exception captured with keys: "+ve(n),fingerprint:[U(n)],extra:e.extra||{}});return i.extra.__serialized__=be(t),i},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var n,i=re({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){n=e}n.name=null;var r=A.computeStackTrace(n),a=te(r.stack)&&r.stack[1];a&&"Raven.captureException"===a.func&&(a=r.stack[2]);var s=a&&a.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(s))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(s))){if(this._globalOptions.stacktrace||t.stacktrace||""===i.message){i.fingerprint=null==i.fingerprint?e:i.fingerprint,(t=re({trimHeadFrames:0},t)).trimHeadFrames+=1;var o=this._prepareFrames(r,t);i.stacktrace={frames:o.reverse()}}return i.fingerprint&&(i.fingerprint=te(i.fingerprint)?i.fingerprint:[i.fingerprint]),this._send(i),this}}},captureBreadcrumb:function(e){var t=re({timestamp:Ee()/1e3},e);if(Z(this._globalOptions.breadcrumbCallback)){var n=this._globalOptions.breadcrumbCallback(t);if(J(n)&&!ne(n))t=n;else if(!1===n)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Ae(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Ae(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Ae(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Se.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Ce){if(!(e=re({eventId:this.lastEventId(),dsn:this._dsn,user:this._globalContext.user||{}},e)).eventId)throw new z("Missing eventId");if(!e.dsn)throw new z("Missing DSN");var t=encodeURIComponent,n=[];for(var i in e)if("user"===i){var r=e.user;r.name&&n.push("name="+t(r.name)),r.email&&n.push("email="+t(r.email))}else n.push(t(i)+"="+t(e[i]));var a=this._getGlobalServer(this._parseDSN(e.dsn)),s=Ce.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/?"+n.join("&"),(Ce.head||Ce.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var n,i;if(this._hasDocument){for(i in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Ce.createEvent?(n=Ce.createEvent("HTMLEvents")).initEvent(e,!0,!0):(n=Ce.createEventObject()).eventType=e,t)oe(t,i)&&(n[i]=t[i]);if(Ce.createEvent)Ce.dispatchEvent(n);else try{Ce.fireEvent("on"+n.eventType.toLowerCase(),n)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(n){if(t._keypressTimeout=null,t._lastCapturedEvent!==n){var i;t._lastCapturedEvent=n;try{i=de(n.target)}catch(e){i=""}t.captureBreadcrumb({category:"ui."+e,message:i})}}},_keypressEventHandler:function(){var e=this;return function(t){var n;try{n=t.target}catch(e){return}var i=n&&n.tagName;if(i&&("INPUT"===i||"TEXTAREA"===i||n.isContentEditable)){var r=e._keypressTimeout;r||e._breadcrumbEventHandler("input")(t),clearTimeout(r),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var n=me(this._location.href),i=me(t),r=me(e);this._lastHref=t,n.protocol===i.protocol&&n.host===i.host&&(t=i.relative),n.protocol===r.protocol&&n.host===r.host&&(e=r.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function n(t){return function(n,i){for(var r=new Array(arguments.length),a=0;a"}}},s)),t.apply?t.apply(this,r):t(r[0],r[1])}}var i=this._globalOptions.autoBreadcrumbs;function r(n){var r=Se[n]&&Se[n].prototype;r&&r.hasOwnProperty&&r.hasOwnProperty("addEventListener")&&(fe(r,"addEventListener",function(t){return function(r,a,s,o){try{a&&a.handleEvent&&(a.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:n,function:"handleEvent",handler:a&&a.name||""}}},a.handleEvent))}catch(e){}var l,c,u;return i&&i.dom&&("EventTarget"===n||"Node"===n)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),l=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,r,e.wrap({mechanism:{type:"instrument",data:{target:n,function:"addEventListener",handler:a&&a.name||""}}},a,l),s,o)}},t),fe(r,"removeEventListener",function(e){return function(t,n,i,r){try{n=n&&(n.__raven_wrapper__?n.__raven_wrapper__:n)}catch(e){}return e.call(this,t,n,i,r)}},t))}fe(Se,"setTimeout",n,t),fe(Se,"setInterval",n,t),Se.requestAnimationFrame&&fe(Se,"requestAnimationFrame",function(t){return function(n){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||""}}},n))}},t);for(var a=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],s=0;s"}}},n)})}if(t.xhr&&"XMLHttpRequest"in Se){var r=Se.XMLHttpRequest&&Se.XMLHttpRequest.prototype;fe(r,"open",function(t){return function(n,i){return ee(i)&&-1===i.indexOf(e._globalKey)&&(this.__raven_xhr={method:n,url:i,status_code:null}),t.apply(this,arguments)}},n),fe(r,"send",function(t){return function(){var n=this;function r(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var a=["onload","onerror","onprogress"],s=0;s"}}},t,r)}):n.onreadystatechange=r,t.apply(this,arguments)}},n)}t.xhr&&ge()&&fe(Se,"fetch",function(t){return function(){for(var n=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return n&&e._captureUrlChange(e._lastHref,n+""),t.apply(this,arguments)}};fe(Se.history,"pushState",l,n),fe(Se.history,"replaceState",l,n)}if(t.console&&"console"in Se&&console.log){var c=function(t,n){e.captureBreadcrumb({message:t,level:n.level,category:"console"})};ie(["debug","info","warn","error","log"],function(e,t){we(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],n=e[1],i=e[2];t[n]=i}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ie(this._plugins,function(t,n){var i=n[0],r=n[1];i.apply(e,[e].concat(r))})},_parseDSN:function(e){var t=Te.exec(e),n={},i=7;try{for(;i--;)n[_e[i]]=t[i]||""}catch(t){throw new z("Invalid DSN: "+e)}if(n.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return n},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var n=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,n,t)},_prepareFrames:function(e,t){var n=this,i=[];if(e.stack&&e.stack.length&&(ie(e.stack,function(t,r){var a=n._normalizeFrame(r,e.url);a&&i.push(a)}),t&&t.trimHeadFrames))for(var r=0;r0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||ne(e[t]))&&delete e[t]}),Z(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!ne(e)&&(Z(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()null!=e?e.constructor:null,ze=(e,t)=>Boolean(e&&t&&e instanceof t),We=e=>null==e,Ke=e=>Ve(e)===Object,Xe=e=>Ve(e)===String,$e=e=>Array.isArray(e),Ye=e=>ze(e,NodeList);var Je={nullOrUndefined:We,object:Ke,number:e=>Ve(e)===Number&&!Number.isNaN(e),string:Xe,boolean:e=>Ve(e)===Boolean,function:e=>Ve(e)===Function,array:$e,nodeList:Ye,element:e=>ze(e,Element),event:e=>ze(e,Event),empty:e=>We(e)||(Xe(e)||$e(e)||Ye(e))&&!e.length||Ke(e)&&!Object.keys(e).length};function Ge(e,t){if(t<1){const n=function(e){const t=`${e}`.match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}(t);return parseFloat(e.toFixed(n))}return Math.round(e/t)*t}class Qe{constructor(e,t){Je.element(e)?this.element=e:Je.string(e)&&(this.element=document.querySelector(e)),Je.element(this.element)&&Je.empty(this.element.rangeTouch)&&(this.config=Object.assign({},Ue,t),this.init())}static get enabled(){return"ontouchstart"in document.documentElement}static setup(e,t={}){let n=null;if(Je.empty(e)||Je.string(e)?n=Array.from(document.querySelectorAll(Je.string(e)?e:'input[type="range"]')):Je.element(e)?n=[e]:Je.nodeList(e)?n=Array.from(e):Je.array(e)&&(n=e.filter(Je.element)),Je.empty(n))return null;const i=Object.assign({},Ue,t);if(Je.string(e)&&i.watch){new MutationObserver(t=>{Array.from(t).forEach(t=>{Array.from(t.addedNodes).forEach(t=>{if(!Je.element(t)||!function(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}(t,e))return;new Qe(t,i)})})}).observe(document.body,{childList:!0,subtree:!0})}return n.map(e=>new Qe(e,t))}init(){Qe.enabled&&(this.config.addCSS&&(this.element.style.userSelect="none",this.element.style.webKitUserSelect="none",this.element.style.touchAction="manipulation"),this.listeners(!0),this.element.rangeTouch=this)}destroy(){Qe.enabled&&(this.listeners(!1),this.element.rangeTouch=null)}listeners(e){const t=e?"addEventListener":"removeEventListener";["touchstart","touchmove","touchend"].forEach(e=>{this.element[t](e,e=>this.set(e),!1)})}get(e){if(!Qe.enabled||!Je.event(e))return null;const t=e.target,n=e.changedTouches[0],i=parseFloat(t.getAttribute("min"))||0,r=parseFloat(t.getAttribute("max"))||100,a=parseFloat(t.getAttribute("step"))||1,s=r-i;let o;const l=t.getBoundingClientRect(),c=100/l.width*(this.config.thumbWidth/2)/100;return(o=100/l.width*(n.clientX-l.left))<0?o=0:o>100&&(o=100),o<50?o-=(100-2*o)*c:o>50&&(o+=2*(o-50)*c),i+Ge(s*(o/100),a)}set(e){Qe.enabled&&Je.event(e)&&!e.target.disabled&&(e.preventDefault(),e.target.value=this.get(e),function(e,t){if(!e||!t)return;const n=new Event(t);e.dispatchEvent(n)}(e.target,"touchend"===e.type?"change":"input"))}}var Ze=function(e){return null!=e?e.constructor:null},et=function(e,t){return Boolean(e&&t&&e instanceof t)},tt=function(e){return null==e},nt=function(e){return Ze(e)===Object},it=function(e){return Ze(e)===String},rt=function(e){return Array.isArray(e)},at=function(e){return et(e,NodeList)},st=function(e){return tt(e)||(it(e)||rt(e)||at(e))&&!e.length||nt(e)&&!Object.keys(e).length},ot={nullOrUndefined:tt,object:nt,number:function(e){return Ze(e)===Number&&!Number.isNaN(e)},string:it,boolean:function(e){return Ze(e)===Boolean},function:function(e){return Ze(e)===Function},array:rt,weakMap:function(e){return et(e,WeakMap)},nodeList:at,element:function(e){return et(e,Element)},textNode:function(e){return Ze(e)===Text},event:function(e){return et(e,Event)},keyboardEvent:function(e){return et(e,KeyboardEvent)},cue:function(e){return et(e,window.TextTrackCue)||et(e,window.VTTCue)},track:function(e){return et(e,TextTrack)||!tt(e)&&it(e.kind)},promise:function(e){return et(e,Promise)},url:function(e){if(et(e,window.URL))return!0;if(!it(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!st(new URL(t).hostname)}catch(e){return!1}},empty:st},lt=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function ct(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!ot.empty(t)&&ot.function(n)){var o=t.split(" "),l=s;lt&&(l={passive:a,capture:s}),o.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,t,n,!0,i,r)}function dt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,t,n,!1,i,r)}function ht(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,n,function s(){dt(e,n,s,r,a);for(var o=arguments.length,l=new Array(o),c=0;c1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(ot.element(e)&&!ot.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function mt(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,a=e.nextSibling;i.appendChild(e),a?r.insertBefore(i,a):r.appendChild(i)})}function ft(e,t){ot.element(e)&&!ot.empty(t)&&Object.entries(t).filter(function(e){var t=He(e,2)[1];return!ot.nullOrUndefined(t)}).forEach(function(t){var n=He(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function gt(e,t,n){var i=document.createElement(e);return ot.object(t)&&ft(i,t),ot.string(n)&&(i.innerText=n),i}function yt(e,t,n,i){ot.element(t)&&t.appendChild(gt(e,n,i))}function vt(e){ot.nodeList(e)||ot.array(e)?Array.from(e).forEach(vt):ot.element(e)&&ot.element(e.parentNode)&&e.parentNode.removeChild(e)}function bt(e){if(ot.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function kt(e,t){return ot.element(t)&&ot.element(t.parentNode)&&ot.element(e)?(t.parentNode.replaceChild(e,t),e):null}function wt(e,t){if(!ot.string(e)||ot.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),s=a[0],o=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":ot.object(i)&&ot.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=o}}),n}function _t(e,t){if(ot.element(e)){var n=t;ot.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function Tt(e,t,n){if(ot.nodeList(e))return Array.from(e).map(function(e){return Tt(e,t,n)});if(ot.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function Et(e,t){return ot.element(e)&&e.classList.contains(t)}function St(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function Ct(e){return this.elements.container.querySelectorAll(e)}function xt(e){return this.elements.container.querySelector(e)}function At(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ot.element(e)&&(e.focus({preventScroll:!0}),t&&Tt(e,this.config.classNames.tabFocus))}var Pt,Ot,Mt,Nt=(Pt=document.createElement("span"),Ot={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Mt=Object.keys(Ot).find(function(e){return void 0!==Pt.style[e]}),!!ot.string(Mt)&&Ot[Mt]);function Lt(e){setTimeout(function(){try{_t(e,!0),e.offsetHeight,_t(e,!1)}catch(e){}},0)}var It,jt={isIE:!!document.documentMode,isEdge:window.navigator.userAgent.includes("Edge"),isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},Rt={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Dt={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=jt.isIPhone&&n&&Dt.playsinline,r=Dt[e]||"html5"!==t;return{api:r,ui:r&&Dt.rangeInput&&("video"!==e||!jt.isIPhone||i)}},pip:!(jt.isIPhone||!ot.function(gt("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||gt("video").disablePictureInPicture)),airplay:ot.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){if(ot.empty(e))return!1;var t=He(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Rt).includes(n)&&(n+='; codecs="'.concat(Rt[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(It=document.createElement("input"),It.type="range","range"===It.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Nt,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Ft={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){var n=t.getAttribute("type");return!!ot.empty(n)||Dt.mime.call(e,n)}):[]},getQualityOptions:function(){return Ft.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Ft.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=Ft.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,a=i.paused,s=i.preload,o=i.readyState;e.media.src=n.getAttribute("src"),("none"!==s||o)&&(e.once("loadedmetadata",function(){e.currentTime=r,a||e.play()}),e.media.load()),pt.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(vt(Ft.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function Bt(e){return ot.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Ht(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function qt(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function zt(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function Wt(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Vt(e,"-"," "),e=Vt(e,"_"," "),Vt(e=zt(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Kt(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Xt={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},$t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ot.empty(e)||ot.empty(t))return"";var n=Ht(t.i18n,e);if(ot.empty(n))return Object.keys(Xt).includes(e)?Xt[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=He(e,2),i=t[0],r=t[1];n=Vt(n,i,r)}),n},Yt=function(){function e(t){Re(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Fe(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(ot.empty(n))return null;var i=JSON.parse(n);return ot.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&ot.object(t)){var n=this.get();ot.empty(n)&&(n={}),qt(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function Jt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function Gt(e,t){if(ot.string(e)){var n=ot.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var a=Yt.supported,s=document.createElement("div");if(s.setAttribute("hidden",""),n&&s.setAttribute("id",t),a){var o=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==o){var l=JSON.parse(o);r(s,l.content)}}Jt(e).then(function(e){ot.empty(e)||(a&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(s,e))}).catch(function(){})}}}var Qt=function(e){return Math.trunc(e/60/60%60,10)},Zt=function(e){return Math.trunc(e/60%60,10)},en=function(e){return Math.trunc(e%60,10)};function tn(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!ot.number(e))return tn(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=Qt(e),a=Zt(e),s=en(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(a),":").concat(i(s))}var nn={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||jt.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=xt.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Ct.call(this,this.config.selectors.buttons.play),pause:xt.call(this,this.config.selectors.buttons.pause),restart:xt.call(this,this.config.selectors.buttons.restart),rewind:xt.call(this,this.config.selectors.buttons.rewind),fastForward:xt.call(this,this.config.selectors.buttons.fastForward),mute:xt.call(this,this.config.selectors.buttons.mute),pip:xt.call(this,this.config.selectors.buttons.pip),airplay:xt.call(this,this.config.selectors.buttons.airplay),settings:xt.call(this,this.config.selectors.buttons.settings),captions:xt.call(this,this.config.selectors.buttons.captions),fullscreen:xt.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=xt.call(this,this.config.selectors.progress),this.elements.inputs={seek:xt.call(this,this.config.selectors.inputs.seek),volume:xt.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:xt.call(this,this.config.selectors.display.buffer),currentTime:xt.call(this,this.config.selectors.display.currentTime),duration:xt.call(this,this.config.selectors.display.duration)},ot.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(this.config.classNames.tooltip))),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=nn.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");ft(r,qt(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),s="".concat(i,"-").concat(e);return"href"in a&&a.setAttributeNS("http://www.w3.org/1999/xlink","href",s),a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(a),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=$t(e,this.config);return gt("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(ot.empty(e))return null;var t=gt("span",{class:this.config.classNames.menu.value});return t.appendChild(gt("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=Wt(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:ot.empty(r.label)&&(r.label=i),ot.empty(r.icon)&&(r.icon=e)}var a=gt(r.element);return r.toggle?(a.appendChild(nn.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),a.appendChild(nn.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),a.appendChild(nn.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),a.appendChild(nn.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(a.appendChild(nn.createIcon.call(this,r.icon)),a.appendChild(nn.createLabel.call(this,r.label))),qt(n,wt(this.config.selectors.buttons[i],n)),ft(a,n),"play"===i?(ot.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(a)):this.elements.buttons[i]=a,a},createRange:function(e,t){var n=gt("input",qt(wt(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":$t(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,nn.updateRangeFill.call(this,n),Qe.setup(n),n},createProgress:function(e,t){var n=gt("progress",qt(wt(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(gt("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?$t(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=wt(this.config.selectors.display[e]),n=gt("div",qt(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":$t(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;ut(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,a=St(e,'[role="menuitemradio"]');if(!a&&[32,39].includes(i.which))nn.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||a&&39===i.which?(r=e.nextElementSibling,ot.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,ot.element(r)||(r=e.parentNode.lastElementChild)),At.call(n,r,!0))}},!1),ut(e,"keyup",function(e){13===e.which&&nn.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,a=e.title,s=e.badge,o=void 0===s?null:s,l=e.checked,c=void 0!==l&&l,u=wt(this.config.selectors.inputs[r]),d=gt("button",qt(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=gt("span");h.innerHTML=a,ot.element(o)&&h.appendChild(o),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return St(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!ot.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}nn.showMenuPanel.call(t,"home",ot.keyboardEvent(e))}},r,!1),nn.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return ot.number(e)?tn(e,Qt(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];ot.element(e)&&ot.number(t)&&(e.innerText=nn.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(ot.element(this.elements.inputs.volume)&&nn.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),ot.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;ot.element(e)&&(e.value=t,nn.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&ot.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&nn.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=ot.number(n)?n:0,r=ot.element(e)?e:t.elements.display.buffer;if(ot.element(r)){r.value=i;var a=r.getElementsByTagName("span")[0];ot.element(a)&&(a.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=ot.event(e)?e.target:e;if(ot.element(t)&&"range"===t.getAttribute("type")){if(St(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=nn.formatTime(this.currentTime),i=nn.formatTime(this.duration),r=$t("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(St(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext","".concat(a.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);jt.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&ot.element(this.elements.inputs.seek)&&ot.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),a=function(e){Tt(t.elements.display.seekTooltip,r,e)};if(this.touch)a(!1);else{if(ot.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Et(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),nn.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),ot.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!ot.element(this.elements.display.duration)&&this.config.invertTime;nn.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||nn.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return _t(this.elements.display.currentTime,!0),void _t(this.elements.progress,!0);ot.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=ot.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&nn.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&nn.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),nn.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){_t(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,a=t;if("captions"===e)r=this.currentTrack;else{if(r=ot.empty(n)?this[e]:n,ot.empty(r)&&(r=this.config[e].default),!ot.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if(ot.element(a)||(a=i&&i.querySelector('[role="menu"]')),ot.element(a)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=nn.getLabel.call(this,e,r);var s=a&&a.querySelector('[value="'.concat(r,'"]'));ot.element(s)&&(s.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?$t("normal",this.config):"".concat(t,"×");case"quality":if(ot.number(t)){var n=$t("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return zt(t);case"captions":return sn.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(ot.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');ot.array(e)&&(this.options.quality=Bt(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!ot.empty(this.options.quality)&&this.options.quality.length>1;if(nn.toggleMenuButton.call(this,"quality",i),bt(n),nn.checkMenu.call(this),i){var r=function(e){var n=$t("qualityBadge.".concat(e),t.config);return n.length?nn.createBadge.call(t,n):null};this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){nn.createMenuItem.call(t,{value:e,list:n,type:"quality",title:nn.getLabel.call(t,"quality",e),badge:r(e)})}),nn.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(ot.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=sn.getTracks.call(this),i=Boolean(n.length);if(nn.toggleMenuButton.call(this,"captions",i),bt(t),nn.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:sn.getLabel.call(e,n),badge:n.language&&nn.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:$t("disabled",this.config),list:t,type:"language"}),r.forEach(nn.createMenuItem.bind(this)),nn.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(ot.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');ot.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!ot.empty(this.options.speed)&&this.options.speed.length>1;nn.toggleMenuButton.call(this,"speed",i),bt(n),nn.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){nn.createMenuItem.call(t,{value:e,list:n,type:"speed",title:nn.getLabel.call(t,"speed",e)})}),nn.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!ot.empty(e)&&Object.values(e).some(function(e){return!e.hidden});_t(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;ot.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');At.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(ot.element(t)&&ot.element(n)){var i=t.hidden,r=i;if(ot.boolean(e))r=e;else if(ot.keyboardEvent(e)&&27===e.which)r=!1;else if(ot.event(e)){var a=t.contains(e.target);if(a||!a&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),_t(t,!r),Tt(this.elements.container,this.config.classNames.menu.open,r),r&&ot.keyboardEvent(e)?nn.focusFirstMenuItem.call(this,null,!0):r||i||At.call(this,n,ot.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return vt(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(ot.element(i)){var r=i.parentNode,a=Array.from(r.children).find(function(e){return!e.hidden});if(Dt.transitions&&!Dt.reducedMotion){r.style.width="".concat(a.scrollWidth,"px"),r.style.height="".concat(a.scrollHeight,"px");var s=nn.getMenuSize.call(this,i);ut.call(this,r,Nt,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",dt.call(e,r,Nt,t))}),r.style.width="".concat(s.width,"px"),r.style.height="".concat(s.height,"px")}_t(a,!0),_t(i,!1),nn.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;ot.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=gt("div",wt(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(nn.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(nn.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(nn.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(nn.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=gt("div",wt(this.config.selectors.progress));if(i.appendChild(nn.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(nn.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=gt("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(nn.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(nn.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var a=gt("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&a.appendChild(nn.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s={max:1,step:.05,value:this.config.volume};a.appendChild(nn.createRange.call(this,"volume",qt(s,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=a}n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(nn.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!ot.empty(this.config.settings)){var o=gt("div",{class:"plyr__menu",hidden:""});o.appendChild(nn.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=gt("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=gt("div"),u=gt("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=gt("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=gt("button",qt(wt(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));nn.bindMenuItemShortcuts.call(t,i,n),ut(i,"click",function(){nn.showMenuPanel.call(t,n,!1)});var r=gt("span",null,$t(n,t.config)),a=gt("span",{class:t.config.classNames.menu.value});a.innerHTML=e[n],r.appendChild(a),i.appendChild(r),d.appendChild(i);var s=gt("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),o=gt("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});o.appendChild(gt("span",{"aria-hidden":!0},$t(n,t.config))),o.appendChild(gt("span",{class:t.config.classNames.hidden},$t("menuBack",t.config))),ut(s,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),nn.showMenuPanel.call(t,"home",!0))},!1),ut(o,"click",function(){nn.showMenuPanel.call(t,"home",!1)}),s.appendChild(o),s.appendChild(gt("div",{role:"menu"})),c.appendChild(s),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=s}),l.appendChild(c),o.appendChild(l),n.appendChild(o),this.elements.settings.popup=l,this.elements.settings.menu=o}if(this.config.controls.includes("pip")&&Dt.pip&&n.appendChild(nn.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Dt.airplay&&n.appendChild(nn.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!ot.url(p)&&this.isEmbed&&qt(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(nn.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(nn.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(nn.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&nn.setQualityMenu.call(this,Ft.getQualityOptions.call(this)),nn.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=nn.getIconUrl.call(this);t.cors&&Gt(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;ot.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),ot.element(this.config.controls)||ot.string(this.config.controls)?n=this.config.controls:(n=nn.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:sn.getLabel.call(this)}),r=!1);var a,s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=He(e,2),i=n[0],r=n[1];t=Vt(t,"{".concat(i,"}"),r)}),t};if(r&&(ot.string(this.config.controls)?n=s(n):ot.element(n)&&(n.innerHTML=s(n.innerHTML))),ot.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),ot.element(a)||(a=this.elements.container),a[ot.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),ot.element(this.elements.controls)||nn.findElements.call(this),!ot.empty(this.elements.buttons)){var o=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return Et(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Tt(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){ot.array(e)||ot.nodeList(e)?Array.from(e).filter(Boolean).forEach(o):o(e)})}if(jt.isEdge&&Lt(a),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=Ct.call(this,d);Array.from(h).forEach(function(t){Tt(t,e.config.classNames.hidden,!1),Tt(t,e.config.classNames.tooltip,!0)})}}};function rn(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function an(e){var t=new URLSearchParams;return ot.object(e)&&Object.entries(e).forEach(function(e){var n=He(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var sn={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Dt.textTracks)ot.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&nn.setCaptionsMenu.call(this);else{var e,t;if(ot.element(this.elements.captions)||(this.elements.captions=gt("div",wt(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,ot.element(e)&&ot.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),jt.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=rn(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Jt(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){vt(e)})})}var i=Bt((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=He(i,1)[0];var a=this.storage.get("captions");if(ot.boolean(a)||(a=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:a,language:r,languages:i}),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";ut.call(this,this.media.textTracks,s,sn.update.bind(this))}setTimeout(sn.update.bind(this),0)}},update:function(){var e=this,t=sn.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,a=n.meta,s=n.currentTrackNode,o=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!a.get(e)}).forEach(function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),t.mode="hidden",ut.call(e,t,"cuechange",function(){return sn.updateCues.call(e)})}),(o&&this.language!==r||!t.includes(s))&&(sn.setLanguage.call(this,r),sn.toggle.call(this,i&&o)),Tt(this.elements.container,this.config.classNames.captions.enabled,!ot.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&nn.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=ot.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var a=sn.getTracks.call(this),s=sn.findTrack.call(this,[this.captions.language].concat(qe(this.captions.languages)),!0);return this.captions.language=s.language,void sn.set.call(this,a.indexOf(s))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),Tt(this.elements.container,i,r),this.captions.toggled=r,nn.updateSetting.call(this,"captions"),pt.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=sn.getTracks.call(this);if(-1!==e)if(ot.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,nn.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),pt.call(this,this.media,"languagechange")}sn.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&sn.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else sn.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(ot.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=sn.getTracks.call(this),r=sn.findTrack.call(this,[n]);sn.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=sn.getTracks.call(this),a=function(e){return Number((n.captions.meta.get(e)||{}).default)},s=Array.from(r).sort(function(e,t){return a(t)-a(e)});return e.every(function(e){return!(t=s.find(function(t){return t.language===e}))}),t||(i?s[0]:void 0)},getCurrentTrack:function(){return sn.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!ot.track(t)&&Dt.textTracks&&this.captions.toggled&&(t=sn.getCurrentTrack.call(this)),ot.track(t)?ot.empty(t.label)?ot.empty(t.language)?$t("enabled",this.config):e.language.toUpperCase():t.label:$t("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(ot.element(this.elements.captions))if(ot.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=sn.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Kt)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){bt(this.elements.captions);var r=gt("span",wt(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),pt.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},on={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.5.0-beta.4/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,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"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus",previewThumbnails:{thumbContainer:"plyr__preview-thumb",thumbContainerShown:"plyr__preview-thumb--is-shown",imageContainer:"plyr__preview-thumb__image-container",timeContainer:"plyr__preview-thumb__time-container",scrubbingContainer:"plyr__preview-scrubbing",scrubbingContainerShown:"plyr__preview-scrubbing--is-shown"}},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:"",tagUrl:""},previewThumbnails:{enabled:!1,src:""},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1},youtube:{noCookie:!1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1}},ln="picture-in-picture",cn="inline",un={html5:"html5",youtube:"youtube",vimeo:"vimeo"},dn={audio:"audio",video:"video"};var hn=function(){},pn=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Re(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Fe(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):hn}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):hn}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):hn}}]),e}();function mn(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;ot.element(e)&&(e.pressed=this.active),pt.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),jt.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(ot.element(e)){var n=Ct.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];ct.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function fn(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",Tt(this.target,this.player.config.classNames.fullscreen.fallback,t),jt.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=ot.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return Lt(e.target)},100)}mn.call(this)}var gn=function(){function e(t){var n=this;Re(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},this.forceFallback="force"===t.config.fullscreen.fallback,ut.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){mn.call(n)}),ut.call(this.player,this.player.elements.container,"dblclick",function(e){ot.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Fe(e,[{key:"update",value:function(){var t;this.enabled?(t=this.forceFallback?"Fallback (forced)":e.native?"Native":"Fallback",this.player.debug.log("".concat(t," fullscreen enabled"))):this.player.debug.log("Fullscreen not supported and fallback disabled");Tt(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(jt.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():!e.native||this.forceFallback?fn.call(this,!0):this.prefix?ot.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen())}},{key:"exit",value:function(){if(this.enabled)if(jt.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(!e.native||this.forceFallback)fn.call(this,!1);else if(this.prefix){if(!ot.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"usingNative",get:function(){return e.native&&!this.forceFallback}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(!e.native||this.forceFallback?Et(this.target,this.player.config.classNames.fullscreen.fallback):(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target)}},{key:"target",get:function(){return jt.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(ot.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!ot.function(document["".concat(t,"ExitFullscreen")])&&!ot.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function yn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,a=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:a,onerror:a,src:e})})}var vn={addStyleHook:function(){Tt(this.elements.container,this.config.selectors.container.replace(".",""),!0),Tt(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void vn.toggleNativeControls.call(this,!0);ot.element(this.elements.controls)||(nn.inject.call(this),this.listeners.controls()),vn.toggleNativeControls.call(this),this.isHTML5&&sn.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,nn.updateVolume.call(this),nn.timeUpdate.call(this),vn.checkPlaying.call(this),Tt(this.elements.container,this.config.classNames.pip.supported,Dt.pip&&this.isHTML5&&this.isVideo),Tt(this.elements.container,this.config.classNames.airplay.supported,Dt.airplay&&this.isHTML5),Tt(this.elements.container,this.config.classNames.isIos,jt.isIos),Tt(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){pt.call(e,e.media,"ready")},0),vn.setTitle.call(this),this.poster&&vn.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&nn.durationUpdate.call(this)},setTitle:function(){var e=$t("play",this.config);if(ot.string(this.config.title)&&!ot.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=xt.call(this,"iframe");if(!ot.element(t))return;var n=ot.empty(this.config.title)?"video":this.config.title,i=$t("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Tt(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):ut.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return yn(e)}).catch(function(n){throw e===t.poster&&vn.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),vn.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;Tt(this.elements.container,this.config.classNames.playing,this.playing),Tt(this.elements.container,this.config.classNames.paused,this.paused),Tt(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),ot.event(e)&&"timeupdate"===e.type||vn.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Tt(t.elements.container,t.config.classNames.loading,t.loading),vn.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}};function bn(e){var t=e;ot.string(t)||ot.nullOrUndefined(this.embed)||(t=this.embed.ratio),ot.string(t)||(t=this.config.ratio);var n=He(t.split(":").map(Number),2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom="".concat(i,"%"),this.isVimeo&&this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-".concat(r,"%)")}return{padding:i,ratio:t}}var kn=function(){function e(t){Re(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Fe(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,a=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&ot.number(i)){if(r){var s=document.activeElement;if(ot.element(s)){var o=t.config.selectors.editable;if(s!==n.inputs.seek&&St(s,o))return;if(32===e.which&&St(s,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:a||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:a||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:a||t.toggleCaptions();break;case 76:t.loop=!t.loop}27===i&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){nn.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,Tt(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,Tt(Ct.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&Tt(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&ct.call(t,window,"keydown keyup",this.handleKey,e,!1),ct.call(t,document.body,"click",this.toggleMenu,e),ht.call(t,document.body,"touchstart",this.firstTouch),ct.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.config,n=e.elements,i=e.timers;!t.keyboard.global&&t.keyboard.focused&&ut.call(e,n.container,"keydown keyup",this.handleKey,!1),ut.call(e,n.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var r=n.controls;r&&"enterfullscreen"===t.type&&(r.pressed=!1,r.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(vn.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(i.controls),i.controls=setTimeout(function(){return vn.toggleControls.call(e,!1)},a)});var r=function(t){if(!t)return bn.call(e);var i=n.container.getBoundingClientRect(),r=i.width,a=i.height;return bn.call(e,"".concat(r,":").concat(a))},a=function(){window.clearTimeout(i.resized),i.resized=window.setTimeout(r,50)};ut.call(e,n.container,"enterfullscreen exitfullscreen",function(t){var i=e.fullscreen,s=i.target,o=i.usingNative;if(e.isEmbed&&s===n.container){var l="enterfullscreen"===t.type,c=r(l);c.padding;!function(t,n,i){if(e.isVimeo){var r=e.elements.wrapper.firstChild,a=He(t.split(":").map(Number),2)[1],s=He(e.embed.ratio.split(":").map(Number),2),o=s[0],l=s[1];r.style.maxWidth=i?"".concat(a/l*o,"px"):null,r.style.margin=i?"0 auto":null}}(c.ratio,0,l),o||(l?ut.call(e,window,"resize",a):dt.call(e,window,"resize",a))}})}},{key:"media",value:function(){var e=this,t=this.player,n=t.elements;if(ut.call(t,t.media,"timeupdate seeking seeked",function(e){return nn.timeUpdate.call(t,e)}),ut.call(t,t.media,"durationchange loadeddata loadedmetadata",function(e){return nn.durationUpdate.call(t,e)}),ut.call(t,t.media,"canplay loadeddata",function(){_t(n.volume,!t.hasAudio),_t(n.buttons.mute,!t.hasAudio)}),ut.call(t,t.media,"ended",function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&t.restart()}),ut.call(t,t.media,"progress playing seeking seeked",function(e){return nn.updateProgress.call(t,e)}),ut.call(t,t.media,"volumechange",function(e){return nn.updateVolume.call(t,e)}),ut.call(t,t.media,"playing play pause ended emptied timeupdate",function(e){return vn.checkPlaying.call(t,e)}),ut.call(t,t.media,"waiting canplay seeked playing",function(e){return vn.checkLoading.call(t,e)}),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var i=xt.call(t,".".concat(t.config.classNames.video));if(!ot.element(i))return;ut.call(t,n.container,"click",function(r){([n.container,i].includes(r.target)||i.contains(r.target))&&(t.touch&&t.config.hideControls||(t.ended?(e.proxy(r,t.restart,"restart"),e.proxy(r,t.play,"play")):e.proxy(r,t.togglePlay,"play")))})}t.supported.ui&&t.config.disableContextMenu&&ut.call(t,n.wrapper,"contextmenu",function(e){e.preventDefault()},!1),ut.call(t,t.media,"volumechange",function(){t.storage.set({volume:t.volume,muted:t.muted})}),ut.call(t,t.media,"ratechange",function(){nn.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})}),ut.call(t,t.media,"qualitychange",function(e){nn.updateSetting.call(t,"quality",null,e.detail.quality)}),ut.call(t,t.media,"ready qualitychange",function(){nn.setDownloadLink.call(t)});var r=t.config.events.concat(["keyup","keydown"]).join(" ");ut.call(t,t.media,r,function(e){var i=e.detail,r=void 0===i?{}:i;"error"===e.type&&(r=t.media.error),pt.call(t,n.container,e.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],a=!0;ot.function(r)&&(a=r.call(i,e)),a&&ot.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.player,o=s.config.listeners[i],l=ot.function(o);ut.call(s,e,t,function(e){return r.proxy(e,n,i)},a&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=jt.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){pt.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),nn.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),nn.toggleMenu.call(t,e)):nn.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&nn.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!ot.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(e.type);r&&a?(n.removeAttribute("play-on-seeked"),t.play()):!a&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),jt.isIos){var r=Ct.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return Lt(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");ot.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return nn.updateSeekTooltip.call(t,e)}),this.bind(n.progress,"mousemove touchmove",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startMove(e)}),this.bind(n.progress,"mouseleave click",function(){var e=t.previewThumbnails;e&&e.loaded&&e.endMove(!1,!0)}),this.bind(n.progress,"mousedown touchstart",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startScrubbing(e)}),this.bind(n.progress,"mouseup touchend",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.endScrubbing(e)}),jt.isWebkit&&Array.from(Ct.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return nn.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!ot.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,nn.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;Tt(i.controls,n.classNames.noTransition,!0),vn.toggleControls.call(t,!0),setTimeout(function(){Tt(i.controls,n.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return vn.toggleControls.call(t,!1)},a)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=He([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],a=i[1],s=Math.sign(Math.abs(r)>Math.abs(a)?r:a);t.increaseVolume(s/50);var o=t.media.volume;(1===s&&o<1||-1===s&&o>0)&&e.preventDefault()},"volume",!1)}}]),e}(),wn=t(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function a(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var a,o,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(a=!0,(o=l.createElement("link")).rel="stylesheet",o.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(o=l.createElement("img")).src=h:((o=l.createElement("script")).src=t,o.async=void 0===c||c),o.onload=o.onerror=o.onbeforeload=function(e){var l=e.type[0];if(a&&"hideFocus"in o)try{o.sheet.cssText.length||(l="e")}catch(e){18!=e.code&&(l="e")}if("e"==l&&(r+=1)0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=tn(Math.max(e.manager.getRemainingTime(),0)),n="".concat($t("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}}},{key:"addCuePoints",value:function(){var e=this;ot.empty(this.cuePoints)||this.cuePoints.forEach(function(t){if(0!==t&&-1!==t&&t1?n-1:0),r=1;r ?)([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);a&&(t.startTime=60*Number(a[1])*60+60*Number(a[2])+Number(a[3])+Number("0.".concat(a[4])),t.endTime=60*Number(a[6])*60+60*Number(a[7])+Number(a[8])+Number("0.".concat(a[9])))}}),t.text&&a.push(t)}),a),height:null,urlPrefix:""};s.frames[0].text.startsWith("/")||(s.urlPrefix=e.substring(0,e.lastIndexOf("/")+1));var o=new Image;o.onload=function(){s.height=o.naturalHeight,s.width=o.naturalWidth,t.thumbnails.push(s),n()},o.src=s.urlPrefix+s.frames[0].text})})}},{key:"startMove",value:function(e){if(this.loaded&&ot.event(e)&&["touchmove","mousemove"].includes(e.type)&&this.player.media.duration){if("touchmove"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t=this.player.elements.progress.getBoundingClientRect(),n=100/t.width*(e.pageX-t.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=tn(this.seekTime)}this.showImageAtCurrentTime()}}},{key:"endMove",value:function(){this.toggleThumbContainer(!1,!0)}},{key:"startScrubbing",value:function(e){!1!==e.button&&0!==e.button||(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))}},{key:"endScrubbing",value:function(){var e=this;this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):ht.call(this.player,this.player.media,"timeupdate",function(){e.mouseDown||e.toggleScrubbingContainer(!1)})}},{key:"listeners",value:function(){var e=this;this.player.on("play",function(){e.toggleThumbContainer(!1,!0)}),this.player.on("seeked",function(){e.toggleThumbContainer(!1)}),this.player.on("timeupdate",function(){e.lastTime=e.player.media.currentTime})}},{key:"render",value:function(){this.elements.thumb.container=gt("div",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=gt("div",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);var e=gt("div",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=gt("span",{},"00:00"),e.appendChild(this.elements.thumb.time),this.elements.thumb.container.appendChild(e),this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=gt("div",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)}},{key:"showImageAtCurrentTime",value:function(){var e=this;this.mouseDown?this.setScrubbingContainerSize():(this.toggleThumbContainer(!0),this.setThumbContainerSizeAndPos());var t=this.thumbnails[0].frames.findIndex(function(t){return e.seekTime>=t.startTime&&e.seekTime<=t.endTime}),n=t>=0,i=0;this.toggleThumbContainer(n),n&&(this.thumbnails.forEach(function(n,r){e.loadedImages.includes(n.frames[t].text)&&(i=r)}),t!==this.showingThumb&&(this.showingThumb=t,this.loadImage(i)))}},{key:"loadImage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=this.showingThumb,i=this.thumbnails[t],r=i.urlPrefix,a=i.frames[n],s=i.frames[n].text,o=r+s;if(this.currentImageElement&&this.currentImageElement.dataset.filename===s)this.showImage(this.currentImageElement,a,t,n,s,!1),this.currentImageElement.dataset.index=n,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);var l=new Image;l.src=o,l.dataset.index=n,l.dataset.filename=s,this.showingThumbFilename=s,this.player.debug.log("Loading image: ".concat(o)),l.onload=function(){return e.showImage(l,a,t,n,s,!0)},this.loadingImage=l,this.removeOldImages(l)}}},{key:"showImage",value:function(e,t,n,i,r){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];this.player.debug.log("Showing thumb: ".concat(r,". num: ").concat(i,". qual: ").concat(n,". newimg: ").concat(a)),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(r)||this.loadedImages.push(r)),this.preloadNearby(i,!0).then(this.preloadNearby(i,!1)).then(this.getHigherQuality(n,e,t,r))}},{key:"removeOldImages",value:function(e){var t=this;Array.from(this.currentImageContainer.children).forEach(function(n){if("img"===n.tagName.toLowerCase()){var i=t.usingSprites?500:1e3;if(n.dataset.index!==e.dataset.index&&!n.dataset.deleting){n.dataset.deleting=!0;var r=t.currentImageContainer;setTimeout(function(){r.removeChild(n),t.player.debug.log("Removing thumb: ".concat(n.dataset.filename))},i)}}})}},{key:"preloadNearby",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return new Promise(function(i){setTimeout(function(){var r=t.thumbnails[0].frames[e].text;if(t.showingThumbFilename===r){var a;a=n?t.thumbnails[0].frames.slice(e):t.thumbnails[0].frames.slice(0,e).reverse();var s=!1;a.forEach(function(e){var n=e.text;if(n!==r&&!t.loadedImages.includes(n)){s=!0,t.player.debug.log("Preloading thumb filename: ".concat(n));var a=t.thumbnails[0].urlPrefix+n,o=new Image;o.src=a,o.onload=function(){t.player.debug.log("Preloaded thumb filename: ".concat(n)),t.loadedImages.includes(n)||t.loadedImages.push(n),i()}}}),s||i()}},300)})}},{key:"getHigherQuality",value:function(e,t,n,i){var r=this;if(e0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(n,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"toggleScrubbingContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"determineContainerAutoSizing",value:function(){this.elements.thumb.imageContainer.clientHeight>20&&(this.sizeSpecifiedInCSS=!0)}},{key:"setThumbContainerSizeAndPos",value:function(){if(!this.sizeSpecifiedInCSS){var e=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(this.thumbContainerHeight,"px"),this.elements.thumb.imageContainer.style.width="".concat(e,"px")}this.setThumbContainerPos()}},{key:"setThumbContainerPos",value:function(){var e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),n=this.elements.thumb.container,i=t.left-e.left+10,r=t.right-e.left-n.clientWidth-10,a=this.mousePosX-e.left-n.clientWidth/2;ar&&(a=r),n.style.left="".concat(a,"px")}},{key:"setScrubbingContainerSize",value:function(){this.elements.scrubbing.container.style.width="".concat(this.player.media.clientWidth,"px"),this.elements.scrubbing.container.style.height="".concat(this.player.media.clientWidth/this.thumbAspectRatio,"px")}},{key:"setImageSizeAndOffset",value:function(e,t){if(this.usingSprites){var n=this.thumbContainerHeight/t.h;e.style.height="".concat(Math.floor(e.naturalHeight*n),"px"),e.style.width="".concat(Math.floor(e.naturalWidth*n),"px"),e.style.left="-".concat(t.x*n,"px"),e.style.top="-".concat(t.y*n,"px")}}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}},{key:"currentImageContainer",get:function(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}},{key:"usingSprites",get:function(){return Object.keys(this.thumbnails[0].frames[0]).includes("w")}},{key:"thumbAspectRatio",get:function(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}},{key:"thumbContainerHeight",get:function(){return this.mouseDown?Math.floor(this.player.media.clientWidth/this.thumbAspectRatio):Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}},{key:"currentImageElement",get:function(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement},set:function(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}]),e}(),Ln={insertElements:function(e,t){var n=this;ot.string(t)?yt(e,this.media,{src:t}):ot.array(t)&&t.forEach(function(t){yt(e,n.media,t)})},change:function(e){var t=this;Ht(e,"sources.length")?(Ft.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],vt(t.media),t.media=null,ot.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=He(n,1)[0],a=r.provider,s=void 0===a?un.html5:a,o=r.src,l="html5"===s?i:"div",c="html5"===s?{}:{src:o};Object.assign(t,{provider:s,type:i,supported:Dt.check(i,s,t.config.playsinline),media:gt(l,c)}),t.elements.container.appendChild(t.media),ot.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),ot.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),vn.addStyleHook.call(t),t.isHTML5&&Ln.insertElements.call(t,"source",n),t.config.title=e.title,On.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&Ln.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&vn.build.call(t),t.isHTML5&&t.media.load(),t.previewThumbnails&&t.previewThumbnails.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},In=function(){function e(t,n){var i=this;if(Re(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Dt.touch,this.media=t,ot.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||ot.nodeList(this.media)||ot.array(this.media))&&(this.media=this.media[0]),this.config=qt({},on,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new pn(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Dt),!ot.nullOrUndefined(this.media)&&ot.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Dt.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var a=this.media.tagName.toLowerCase(),s=null,o=null;switch(a){case"div":if(s=this.media.querySelector("iframe"),ot.element(s)){if(o=rn(s.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtube-nocookie\.com|youtu\.?be)\/.+$/.test(e)?un.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?un.vimeo:null}(o.toString()),this.elements.container=this.media,this.media=s,this.elements.container.className="",o.search.length){var l=["1","true"];l.includes(o.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(o.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(o.searchParams.get("playsinline")),this.config.youtube.hl=o.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(ot.empty(this.provider)||!Object.keys(un).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=dn.video;break;case"video":case"audio":this.type=a,this.provider=un.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Dt.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new kn(this),this.storage=new Yt(this),this.media.plyr=this,ot.element(this.elements.container)||(this.elements.container=gt("div",{tabindex:0}),mt(this.media,this.elements.container)),vn.addStyleHook.call(this),On.setup.call(this),this.config.debug&&ut.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&vn.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new gn(this),this.config.ads.enabled&&(this.ads=new Mn(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new Nn(this))):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Fe(e,[{key:"play",value:function(){var e=this;return ot.function(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.media.play()}),this.media.play()):null}},{key:"pause",value:function(){this.playing&&ot.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(ot.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):ot.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(ot.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(ot.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(ot.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){sn.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Dt.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Et(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Tt(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!ot.empty(this.config.settings)&&nn.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";pt.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){ut.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){ht.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){dt(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(vt(t.elements.buttons.play),vt(t.elements.captions),vt(t.elements.controls),vt(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),ot.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),kt(t.elements.original,t.elements.container),pt.call(t,t.elements.original,"destroyed",!0),ot.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),vn.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&ot.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Dt.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===un.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===un.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===un.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===dn.video)}},{key:"isAudio",get:function(){return Boolean(this.type===dn.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=ot.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return ot.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=ot.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;ot.string(t)&&(t=Number(t)),ot.number(t)||(t=this.storage.get("volume")),ot.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!ot.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;ot.boolean(t)||(t=this.storage.get("muted")),ot.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;ot.number(e)&&(t=e),ot.number(t)||(t=this.storage.get("speed")),ot.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!ot.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(ot.number),r=!0;if(!n.includes(i)){var a=function(e,t){return ot.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)1&&void 0!==arguments[1]?arguments[1]:{},i=null;return ot.string(t)?i=Array.from(document.querySelectorAll(t)):ot.nodeList(t)?i=Array.from(t):ot.array(t)&&(i=t.filter(ot.element)),ot.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();In.defaults=(Cn=on,JSON.parse(JSON.stringify(Cn))),xn=window.location.host,An="plyr.io"===xn,document.addEventListener("DOMContentLoaded",function(){Ie.context(function(){var e=document.getElementById("container");window.Shr&&window.Shr.setup(".js-shr-button",{count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){t.target.classList&&!e.contains(t.target)&&t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&t.classList&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t="https://pubads.g.doubleclick.net/gampad/live/ads?sz=640x360&iu=/21736521837/ovo/web&impl=s&gdfp_req=1&env=vp&output=vast&cust_params=usergroup%3D".concat("annon","%26content-type%3D").concat("on-demand","&cmsid=").concat(2490180,"&vid=").concat(3788),n=new In("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0,tagUrl:t},previewThumbnails:{enabled:!0,src:["https://cdn.plyr.io/static/demo/thumbs/100p.vtt","https://cdn.plyr.io/static/demo/thumbs/240p.vtt"]}});window.player=n;var i=document.querySelectorAll("[data-source]"),r={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},a=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;function o(e,t,n){e&&e.classList[n?"add":"remove"](t)}function l(e,t){if(e in r&&(t||e!==a)&&(a.length||e!==r.video)){switch(e){case r.video:n.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case r.audio:n.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case r.youtube:n.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case r.vimeo:n.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}a=e,Array.from(i).forEach(function(e){return o(e.parentElement,"active",!1)}),o(document.querySelector('[data-source="'.concat(e,'"]')),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--".concat(e)).removeAttribute("hidden")}}if(Array.from(i).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");l(t),s&&window.history.pushState({type:t},"","#".concat(t))})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&l(e.state.type)}),s){var c=!a.length;c&&(a=r.video),a in r&&window.history.replaceState({type:a},"",c?"":"#".concat(a)),a!==r.video&&l(a,!0)}})}),An&&Ie.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install()}(); +"object"==typeof navigator&&function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){function n(e,t){for(var n=0;n0){var o=n(i,this);~o?i.splice(o+1):i.push(this),~o?r.splice(o,1/0,a):r.push(a),~n(i,s)&&(s=t.call(this,a,s))}else i.push(s);return null==e?s instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}(s):s:e.call(this,a,s)}}(e.exports=function(e,t,n,r){return JSON.stringify(e,i(t,r),n)}).getSerialize=i}),i=(n.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function r(e){return void 0===e}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}function s(e){return"[object String]"===Object.prototype.toString.call(e)}function o(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(){if(!("fetch"in i))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function c(e,t){var n,i;if(r(e.length))for(n in e)d(e,n)&&t.call(null,n,e[n]);else if(i=e.length)for(n=0;n ".length;e&&i++<5&&!("html"===(t=p(e))||i>1&&r+n.length*a+t.length>=80);)n.push(t),r+=t.length,e=e.parentNode;return n.reverse().join(" > ")},htmlElementAsString:p,isSameException:function(e,t){return!m(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(n=e.stacktrace,i=t.stacktrace,(!r(n)||!r(i))&&f(e.stacktrace,t.stacktrace)));var n,i},isSameStacktrace:f,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),n=t[6]||"",i=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+n+i}},fill:function(e,t,n,i){if(null!=e){var r=e[t];e[t]=n(r),e[t].__raven__=!0,e[t].__orig__=r,i&&i.push([e,t,r])}},safeJoin:function(e,t){if(!o(e))return"";for(var n=[],i=0;ir?e(t,i-1):s},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var n=e.length;n>0;n--){var i=e.slice(0,n).join(", ");if(!(i.length>t))return n===e.length?i:i+"…"}return""},sanitize:function(e,t){if(!o(t)||o(t)&&0===t.length)return e;var i,r=h(t),s="********";try{i=JSON.parse(n(e))}catch(t){return e}return function e(t){return o(t)?t.map(function(t){return e(t)}):a(t)?Object.keys(t).reduce(function(n,i){return r.test(i)?n[i]=s:n[i]=e(t[i]),n},{}):t}(i)}},_={collectWindowErrors:!0,debug:!1},T="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},E=[].slice,S="?",C=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function x(){return"undefined"==typeof document||null==document.location?"":document.location.href}_.report=function(){var e,t,n=[],i=null,r=null,a=null;function s(e,t){var i=null;if(!t||_.collectWindowErrors){for(var r in n)if(n.hasOwnProperty(r))try{n[r].apply(null,[e].concat(E.call(arguments,2)))}catch(e){i=e}if(i)throw i}}function o(t,n,i,r,o){var c=w.isErrorEvent(o)?o.error:o,u=w.isErrorEvent(t)?t.message:t;if(a)_.computeStackTrace.augmentStackTraceWithInitialElement(a,n,i,u),l();else if(c&&w.isError(c))s(_.computeStackTrace(c),!0);else{var d,h={url:n,line:i,column:r},p=void 0;if("[object String]"==={}.toString.call(u))(d=u.match(C))&&(p=d[1],u=d[2]);h.func=S,s({name:p,message:u,url:x(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function l(){var e=a,t=i;i=null,a=null,r=null,s.apply(null,[e,!1].concat(t))}function c(e,t){var n=E.call(arguments,1);if(a){if(r===e)return;l()}var s=_.computeStackTrace(e);if(a=s,r=e,i=n,setTimeout(function(){r===e&&l()},s.incomplete?2e3:0),!1!==t)throw e}return c.subscribe=function(i){t||(e=T.onerror,T.onerror=o,t=!0),n.push(i)},c.unsubscribe=function(e){for(var t=n.length-1;t>=0;--t)n[t]===e&&n.splice(t,1)},c.uninstall=function(){t&&(T.onerror=e,t=!1,e=void 0),n=[]},c}(),_.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,n,i,r=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,o=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,c=e.stack.split("\n"),u=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=c.length;d eval")>-1&&(t=o.exec(n[3]))?(n[3]=t[1],n[4]=t[2],n[5]=null):0!==d||n[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),i={url:n[3],func:n[1]||S,args:n[2]?n[2].split(","):[],line:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}if(!i.func&&i.line&&(i.func=S),i.url&&"blob:"===i.url.substr(0,5)){var m=new XMLHttpRequest;if(m.open("GET",i.url,!1),m.send(null),200===m.status){var f=m.responseText||"",g=(f=f.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(g){var y=g[1];"~"===y.charAt(0)&&(y=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+y.slice(1)),i.url=y.slice(0,-4)}}}u.push(i)}return u.length?{name:e.name,message:e.message,url:x(),stack:u}:null}}function t(e,t,n,i){var r={url:t,line:n};if(r.url&&r.line){if(e.incomplete=!1,r.func||(r.func=S),e.stack.length>0&&e.stack[0].url===r.url){if(e.stack[0].line===r.line)return!1;if(!e.stack[0].line&&e.stack[0].func===r.func)return e.stack[0].line=r.line,!1}return e.stack.unshift(r),e.partial=!0,!0}return e.incomplete=!0,!1}function n(e,r){for(var a,s,o=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],c={},u=!1,d=n.caller;d&&!u;d=d.caller)if(d!==i&&d!==_.report){if(s={url:null,func:S,line:null,column:null},d.name?s.func=d.name:(a=o.exec(d.toString()))&&(s.func=a[1]),void 0===s.func)try{s.func=a.input.substring(0,a.input.indexOf("{"))}catch(e){}c[""+d]?u=!0:c[""+d]=!0,l.push(s)}r&&l.splice(0,r);var h={name:e.name,message:e.message,url:x(),stack:l};return t(h,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),h}function i(t,i){var r=null;i=null==i?0:+i;try{if(r=e(t))return r}catch(e){if(_.debug)throw e}try{if(r=n(t,i+1))return r}catch(e){if(_.debug)throw e}return{name:t.name,message:t.message,url:x()}}return i.augmentStackTraceWithInitialElement=t,i.computeStackTraceFromStackProp=e,i}();var A=_;function P(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function O(e,t,n,i,r,a){return P((s=P(P(t,e),P(i,a)))<<(o=r)|s>>>32-o,n);var s,o}function M(e,t,n,i,r,a,s){return O(t&n|~t&i,e,t,r,a,s)}function N(e,t,n,i,r,a,s){return O(t&i|n&~i,e,t,r,a,s)}function L(e,t,n,i,r,a,s){return O(t^n^i,e,t,r,a,s)}function I(e,t,n,i,r,a,s){return O(n^(t|~i),e,t,r,a,s)}function j(e,t){var n,i,r,a,s;e[t>>5]|=128<>>9<<4)]=t;var o=1732584193,l=-271733879,c=-1732584194,u=271733878;for(n=0;n>5]>>>t%32&255);return n}function D(e){var t,n=[];for(n[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return i}function B(e){return unescape(encodeURIComponent(e))}function H(e){return function(e){return R(j(D(e),8*e.length))}(B(e))}function q(e,t){return function(e,t){var n,i,r=D(e),a=[],s=[];for(a[15]=s[15]=void 0,r.length>16&&(r=j(r,8*e.length)),n=0;n<16;n+=1)a[n]=909522486^r[n],s[n]=1549556828^r[n];return i=j(a.concat(D(t)),512+8*t.length),R(j(s.concat(i),640))}(B(e),B(t))}var U=function(e,t,n){return t?n?q(t,e):F(q(t,e)):n?H(e):F(H(e))};function V(e){this.name="RavenConfigError",this.message=e}V.prototype=new Error,V.prototype.constructor=V;var z=V,W=function(e,t,n){var i=e[t],r=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),s=w.safeJoin(e," "),o={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(s="Assertion failed: "+(w.safeJoin(e.slice(1)," ")||"console.assert"),o.extra.arguments=e.slice(1),n&&n(s,o)):n&&n(s,o),i&&Function.prototype.apply.call(i,r,e)}}},K=w.isErrorEvent,X=w.isDOMError,$=w.isDOMException,Y=w.isError,J=w.isObject,G=w.isPlainObject,Q=w.isUndefined,Z=w.isFunction,ee=w.isString,te=w.isArray,ne=w.isEmptyObject,ie=w.each,re=w.objectMerge,ae=w.truncate,se=w.objectFrozen,oe=w.hasKey,le=w.joinRegExp,ce=w.urlencode,ue=w.uuid4,de=w.htmlTreeAsString,he=w.isSameException,pe=w.isSameStacktrace,me=w.parseUrl,fe=w.fill,ge=w.supportsFetch,ye=w.supportsReferrerPolicy,ve=w.serializeKeysForMessage,be=w.serializeException,ke=w.sanitize,we=W,_e="source protocol user pass host port path".split(" "),Te=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function Ee(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Ce=Se.document,xe=Se.navigator;function Ae(e,t){return Z(t)?function(n){return t(n,e)}:t}function Pe(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Q(Ce),this._hasNavigator=!Q(xe),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Se.SENTRY_RELEASE&&Se.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",referrerPolicy:ye()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=Ee(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Se.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}Pe.prototype={VERSION:"3.27.0",debug:!1,TraceKit:A,config:function(e,t){var n=this;if(n._globalServer)return this._logDebug("error","Error: Raven has already been configured"),n;if(!e)return n;var i=n._globalOptions;t&&ie(t,function(e,t){"tags"===e||"extra"===e||"user"===e?n._globalContext[e]=t:i[e]=t}),n.setDSN(e),i.ignoreErrors.push(/^Script error\.?$/),i.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),i.ignoreErrors=le(i.ignoreErrors),i.ignoreUrls=!!i.ignoreUrls.length&&le(i.ignoreUrls),i.whitelistUrls=!!i.whitelistUrls.length&&le(i.whitelistUrls),i.includePaths=le(i.includePaths),i.maxBreadcrumbs=Math.max(0,Math.min(i.maxBreadcrumbs||100,100));var r={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},a=i.autoBreadcrumbs;"[object Object]"==={}.toString.call(a)?a=re(r,a):!1!==a&&(a=r),i.autoBreadcrumbs=a;var s={tryCatch:!0},o=i.instrument;return"[object Object]"==={}.toString.call(o)?o=re(s,o):!1!==o&&(o=s),i.instrument=o,A.collectWindowErrors=!!i.collectWindowErrors,n},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(A.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),n=t.path.lastIndexOf("/"),i=t.path.substr(1,n);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(n+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+i+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,n){return Z(e)&&(n=t||[],t=e,e={}),this.wrap(e,t).apply(this,n)},wrap:function(e,t,n){var i=this;if(Q(t)&&!Z(e))return e;if(Z(e)&&(t=e,e=void 0),!Z(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function r(){var r=[],a=arguments.length,s=!e||e&&!1!==e.deep;for(n&&Z(n)&&n.apply(this,arguments);a--;)r[a]=s?i.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,r)}catch(t){throw i._ignoreNextOnError(),i.captureException(t,e),t}}for(var a in t)oe(t,a)&&(r[a]=t[a]);return r.prototype=t.prototype,t.__raven_wrapper__=r,r.__raven__=!0,r.__orig__=t,r},uninstall:function(){return A.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Se.addEventListener&&Se.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Se.removeEventListener&&Se.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=re({trimHeadFrames:0},t||{}),K(e)&&e.error)e=e.error;else{if(X(e)||$(e)){var n=e.name||(X(e)?"DOMError":"DOMException"),i=e.message?n+": "+e.message:n;return this.captureMessage(i,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(Y(e))e=e;else{if(!G(e))return this.captureMessage(e,re(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var r=A.computeStackTrace(e);this._handleStackInfo(r,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var n=Object.keys(t).sort(),i=re(e,{message:"Non-Error exception captured with keys: "+ve(n),fingerprint:[U(n)],extra:e.extra||{}});return i.extra.__serialized__=be(t),i},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var n,i=re({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){n=e}n.name=null;var r=A.computeStackTrace(n),a=te(r.stack)&&r.stack[1];a&&"Raven.captureException"===a.func&&(a=r.stack[2]);var s=a&&a.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(s))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(s))){if(this._globalOptions.stacktrace||t.stacktrace||""===i.message){i.fingerprint=null==i.fingerprint?e:i.fingerprint,(t=re({trimHeadFrames:0},t)).trimHeadFrames+=1;var o=this._prepareFrames(r,t);i.stacktrace={frames:o.reverse()}}return i.fingerprint&&(i.fingerprint=te(i.fingerprint)?i.fingerprint:[i.fingerprint]),this._send(i),this}}},captureBreadcrumb:function(e){var t=re({timestamp:Ee()/1e3},e);if(Z(this._globalOptions.breadcrumbCallback)){var n=this._globalOptions.breadcrumbCallback(t);if(J(n)&&!ne(n))t=n;else if(!1===n)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Ae(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Ae(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Ae(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Se.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Ce){if(!(e=re({eventId:this.lastEventId(),dsn:this._dsn,user:this._globalContext.user||{}},e)).eventId)throw new z("Missing eventId");if(!e.dsn)throw new z("Missing DSN");var t=encodeURIComponent,n=[];for(var i in e)if("user"===i){var r=e.user;r.name&&n.push("name="+t(r.name)),r.email&&n.push("email="+t(r.email))}else n.push(t(i)+"="+t(e[i]));var a=this._getGlobalServer(this._parseDSN(e.dsn)),s=Ce.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/?"+n.join("&"),(Ce.head||Ce.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var n,i;if(this._hasDocument){for(i in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Ce.createEvent?(n=Ce.createEvent("HTMLEvents")).initEvent(e,!0,!0):(n=Ce.createEventObject()).eventType=e,t)oe(t,i)&&(n[i]=t[i]);if(Ce.createEvent)Ce.dispatchEvent(n);else try{Ce.fireEvent("on"+n.eventType.toLowerCase(),n)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(n){if(t._keypressTimeout=null,t._lastCapturedEvent!==n){var i;t._lastCapturedEvent=n;try{i=de(n.target)}catch(e){i=""}t.captureBreadcrumb({category:"ui."+e,message:i})}}},_keypressEventHandler:function(){var e=this;return function(t){var n;try{n=t.target}catch(e){return}var i=n&&n.tagName;if(i&&("INPUT"===i||"TEXTAREA"===i||n.isContentEditable)){var r=e._keypressTimeout;r||e._breadcrumbEventHandler("input")(t),clearTimeout(r),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var n=me(this._location.href),i=me(t),r=me(e);this._lastHref=t,n.protocol===i.protocol&&n.host===i.host&&(t=i.relative),n.protocol===r.protocol&&n.host===r.host&&(e=r.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function n(t){return function(n,i){for(var r=new Array(arguments.length),a=0;a"}}},s)),t.apply?t.apply(this,r):t(r[0],r[1])}}var i=this._globalOptions.autoBreadcrumbs;function r(n){var r=Se[n]&&Se[n].prototype;r&&r.hasOwnProperty&&r.hasOwnProperty("addEventListener")&&(fe(r,"addEventListener",function(t){return function(r,a,s,o){try{a&&a.handleEvent&&(a.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:n,function:"handleEvent",handler:a&&a.name||""}}},a.handleEvent))}catch(e){}var l,c,u;return i&&i.dom&&("EventTarget"===n||"Node"===n)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),l=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,r,e.wrap({mechanism:{type:"instrument",data:{target:n,function:"addEventListener",handler:a&&a.name||""}}},a,l),s,o)}},t),fe(r,"removeEventListener",function(e){return function(t,n,i,r){try{n=n&&(n.__raven_wrapper__?n.__raven_wrapper__:n)}catch(e){}return e.call(this,t,n,i,r)}},t))}fe(Se,"setTimeout",n,t),fe(Se,"setInterval",n,t),Se.requestAnimationFrame&&fe(Se,"requestAnimationFrame",function(t){return function(n){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||""}}},n))}},t);for(var a=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],s=0;s"}}},n)})}if(t.xhr&&"XMLHttpRequest"in Se){var r=Se.XMLHttpRequest&&Se.XMLHttpRequest.prototype;fe(r,"open",function(t){return function(n,i){return ee(i)&&-1===i.indexOf(e._globalKey)&&(this.__raven_xhr={method:n,url:i,status_code:null}),t.apply(this,arguments)}},n),fe(r,"send",function(t){return function(){var n=this;function r(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var a=["onload","onerror","onprogress"],s=0;s"}}},t,r)}):n.onreadystatechange=r,t.apply(this,arguments)}},n)}t.xhr&&ge()&&fe(Se,"fetch",function(t){return function(){for(var n=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return n&&e._captureUrlChange(e._lastHref,n+""),t.apply(this,arguments)}};fe(Se.history,"pushState",l,n),fe(Se.history,"replaceState",l,n)}if(t.console&&"console"in Se&&console.log){var c=function(t,n){e.captureBreadcrumb({message:t,level:n.level,category:"console"})};ie(["debug","info","warn","error","log"],function(e,t){we(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],n=e[1],i=e[2];t[n]=i}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ie(this._plugins,function(t,n){var i=n[0],r=n[1];i.apply(e,[e].concat(r))})},_parseDSN:function(e){var t=Te.exec(e),n={},i=7;try{for(;i--;)n[_e[i]]=t[i]||""}catch(t){throw new z("Invalid DSN: "+e)}if(n.pass&&!this._globalOptions.allowSecretKey)throw new z("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return n},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var n=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,n,t)},_prepareFrames:function(e,t){var n=this,i=[];if(e.stack&&e.stack.length&&(ie(e.stack,function(t,r){var a=n._normalizeFrame(r,e.url);a&&i.push(a)}),t&&t.trimHeadFrames))for(var r=0;r0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||ne(e[t]))&&delete e[t]}),Z(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!ne(e)&&(Z(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()null!=e?e.constructor:null,ze=(e,t)=>Boolean(e&&t&&e instanceof t),We=e=>null==e,Ke=e=>Ve(e)===Object,Xe=e=>Ve(e)===String,$e=e=>Array.isArray(e),Ye=e=>ze(e,NodeList);var Je={nullOrUndefined:We,object:Ke,number:e=>Ve(e)===Number&&!Number.isNaN(e),string:Xe,boolean:e=>Ve(e)===Boolean,function:e=>Ve(e)===Function,array:$e,nodeList:Ye,element:e=>ze(e,Element),event:e=>ze(e,Event),empty:e=>We(e)||(Xe(e)||$e(e)||Ye(e))&&!e.length||Ke(e)&&!Object.keys(e).length};function Ge(e,t){if(t<1){const n=function(e){const t=`${e}`.match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}(t);return parseFloat(e.toFixed(n))}return Math.round(e/t)*t}class Qe{constructor(e,t){Je.element(e)?this.element=e:Je.string(e)&&(this.element=document.querySelector(e)),Je.element(this.element)&&Je.empty(this.element.rangeTouch)&&(this.config=Object.assign({},Ue,t),this.init())}static get enabled(){return"ontouchstart"in document.documentElement}static setup(e,t={}){let n=null;if(Je.empty(e)||Je.string(e)?n=Array.from(document.querySelectorAll(Je.string(e)?e:'input[type="range"]')):Je.element(e)?n=[e]:Je.nodeList(e)?n=Array.from(e):Je.array(e)&&(n=e.filter(Je.element)),Je.empty(n))return null;const i=Object.assign({},Ue,t);if(Je.string(e)&&i.watch){new MutationObserver(t=>{Array.from(t).forEach(t=>{Array.from(t.addedNodes).forEach(t=>{if(!Je.element(t)||!function(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}(t,e))return;new Qe(t,i)})})}).observe(document.body,{childList:!0,subtree:!0})}return n.map(e=>new Qe(e,t))}init(){Qe.enabled&&(this.config.addCSS&&(this.element.style.userSelect="none",this.element.style.webKitUserSelect="none",this.element.style.touchAction="manipulation"),this.listeners(!0),this.element.rangeTouch=this)}destroy(){Qe.enabled&&(this.listeners(!1),this.element.rangeTouch=null)}listeners(e){const t=e?"addEventListener":"removeEventListener";["touchstart","touchmove","touchend"].forEach(e=>{this.element[t](e,e=>this.set(e),!1)})}get(e){if(!Qe.enabled||!Je.event(e))return null;const t=e.target,n=e.changedTouches[0],i=parseFloat(t.getAttribute("min"))||0,r=parseFloat(t.getAttribute("max"))||100,a=parseFloat(t.getAttribute("step"))||1,s=r-i;let o;const l=t.getBoundingClientRect(),c=100/l.width*(this.config.thumbWidth/2)/100;return(o=100/l.width*(n.clientX-l.left))<0?o=0:o>100&&(o=100),o<50?o-=(100-2*o)*c:o>50&&(o+=2*(o-50)*c),i+Ge(s*(o/100),a)}set(e){Qe.enabled&&Je.event(e)&&!e.target.disabled&&(e.preventDefault(),e.target.value=this.get(e),function(e,t){if(!e||!t)return;const n=new Event(t);e.dispatchEvent(n)}(e.target,"touchend"===e.type?"change":"input"))}}var Ze=function(e){return null!=e?e.constructor:null},et=function(e,t){return Boolean(e&&t&&e instanceof t)},tt=function(e){return null==e},nt=function(e){return Ze(e)===Object},it=function(e){return Ze(e)===String},rt=function(e){return Array.isArray(e)},at=function(e){return et(e,NodeList)},st=function(e){return tt(e)||(it(e)||rt(e)||at(e))&&!e.length||nt(e)&&!Object.keys(e).length},ot={nullOrUndefined:tt,object:nt,number:function(e){return Ze(e)===Number&&!Number.isNaN(e)},string:it,boolean:function(e){return Ze(e)===Boolean},function:function(e){return Ze(e)===Function},array:rt,weakMap:function(e){return et(e,WeakMap)},nodeList:at,element:function(e){return et(e,Element)},textNode:function(e){return Ze(e)===Text},event:function(e){return et(e,Event)},keyboardEvent:function(e){return et(e,KeyboardEvent)},cue:function(e){return et(e,window.TextTrackCue)||et(e,window.VTTCue)},track:function(e){return et(e,TextTrack)||!tt(e)&&it(e.kind)},promise:function(e){return et(e,Promise)},url:function(e){if(et(e,window.URL))return!0;if(!it(e))return!1;var t=e;e.startsWith("http://")&&e.startsWith("https://")||(t="http://".concat(e));try{return!st(new URL(t).hostname)}catch(e){return!1}},empty:st},lt=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}();function ct(e,t,n){var i=this,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!ot.empty(t)&&ot.function(n)){var o=t.split(" "),l=s;lt&&(l={passive:a,capture:s}),o.forEach(function(t){i&&i.eventListeners&&r&&i.eventListeners.push({element:e,type:t,callback:n,options:l}),e[r?"addEventListener":"removeEventListener"](t,n,l)})}}function ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,t,n,!0,i,r)}function dt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,t,n,!1,i,r)}function ht(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];ct.call(this,e,n,function s(){dt(e,n,s,r,a);for(var o=arguments.length,l=new Array(o),c=0;c1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(ot.element(e)&&!ot.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}}function mt(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,a=e.nextSibling;i.appendChild(e),a?r.insertBefore(i,a):r.appendChild(i)})}function ft(e,t){ot.element(e)&&!ot.empty(t)&&Object.entries(t).filter(function(e){var t=He(e,2)[1];return!ot.nullOrUndefined(t)}).forEach(function(t){var n=He(t,2),i=n[0],r=n[1];return e.setAttribute(i,r)})}function gt(e,t,n){var i=document.createElement(e);return ot.object(t)&&ft(i,t),ot.string(n)&&(i.innerText=n),i}function yt(e,t,n,i){ot.element(t)&&t.appendChild(gt(e,n,i))}function vt(e){ot.nodeList(e)||ot.array(e)?Array.from(e).forEach(vt):ot.element(e)&&ot.element(e.parentNode)&&e.parentNode.removeChild(e)}function bt(e){if(ot.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function kt(e,t){return ot.element(t)&&ot.element(t.parentNode)&&ot.element(e)?(t.parentNode.replaceChild(e,t),e):null}function wt(e,t){if(!ot.string(e)||ot.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),s=a[0],o=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":ot.object(i)&&ot.string(i.class)&&(i.class+=" ".concat(r)),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=o}}),n}function _t(e,t){if(ot.element(e)){var n=t;ot.boolean(n)||(n=!e.hidden),n?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function Tt(e,t,n){if(ot.nodeList(e))return Array.from(e).map(function(e){return Tt(e,t,n)});if(ot.element(e)){var i="toggle";return void 0!==n&&(i=n?"add":"remove"),e.classList[i](t),e.classList.contains(t)}return!1}function Et(e,t){return ot.element(e)&&e.classList.contains(t)}function St(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}function Ct(e){return this.elements.container.querySelectorAll(e)}function xt(e){return this.elements.container.querySelector(e)}function At(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ot.element(e)&&(e.focus({preventScroll:!0}),t&&Tt(e,this.config.classNames.tabFocus))}var Pt,Ot,Mt,Nt=(Pt=document.createElement("span"),Ot={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},Mt=Object.keys(Ot).find(function(e){return void 0!==Pt.style[e]}),!!ot.string(Mt)&&Ot[Mt]);function Lt(e){setTimeout(function(){try{_t(e,!0),e.offsetHeight,_t(e,!1)}catch(e){}},0)}var It,jt={isIE:!!document.documentMode,isEdge:window.navigator.userAgent.includes("Edge"),isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)},Rt={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Dt={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=jt.isIPhone&&n&&Dt.playsinline,r=Dt[e]||"html5"!==t;return{api:r,ui:r&&Dt.rangeInput&&("video"!==e||!jt.isIPhone||i)}},pip:!(jt.isIPhone||!ot.function(gt("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||gt("video").disablePictureInPicture)),airplay:ot.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){if(ot.empty(e))return!1;var t=He(e.split("/"),1)[0],n=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(Rt).includes(n)&&(n+='; codecs="'.concat(Rt[e],'"'));try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(It=document.createElement("input"),It.type="range","range"===It.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Nt,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Ft={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){var n=t.getAttribute("type");return!!ot.empty(n)||Dt.mime.call(e,n)}):[]},getQualityOptions:function(){return Ft.getSources.call(this).map(function(e){return Number(e.getAttribute("size"))}).filter(Boolean)},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Ft.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var n=Ft.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(n){var i=e.media,r=i.currentTime,a=i.paused,s=i.preload,o=i.readyState;e.media.src=n.getAttribute("src"),("none"!==s||o)&&(e.once("loadedmetadata",function(){e.currentTime=r,a||e.play()}),e.media.load()),pt.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(vt(Ft.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function Bt(e){return ot.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e}function Ht(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function qt(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1"),"g"),n.toString())}function zt(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}function Wt(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=Vt(e,"-"," "),e=Vt(e,"_"," "),Vt(e=zt(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function Kt(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var Xt={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},$t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ot.empty(e)||ot.empty(t))return"";var n=Ht(t.i18n,e);if(ot.empty(n))return Object.keys(Xt).includes(e)?Xt[e]:"";var i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=He(e,2),i=t[0],r=t[1];n=Vt(n,i,r)}),n},Yt=function(){function e(t){Re(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Fe(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(ot.empty(n))return null;var i=JSON.parse(n);return ot.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&ot.object(t)){var n=this.get();ot.empty(n)&&(n={}),qt(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}();function Jt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.status)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})}function Gt(e,t){if(ot.string(e)){var n=ot.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement("afterbegin",e)};if(!n||!i()){var a=Yt.supported,s=document.createElement("div");if(s.setAttribute("hidden",""),n&&s.setAttribute("id",t),a){var o=window.localStorage.getItem("".concat("cache","-").concat(t));if(null!==o){var l=JSON.parse(o);r(s,l.content)}}Jt(e).then(function(e){ot.empty(e)||(a&&window.localStorage.setItem("".concat("cache","-").concat(t),JSON.stringify({content:e})),r(s,e))}).catch(function(){})}}}var Qt=function(e){return Math.trunc(e/60/60%60,10)},Zt=function(e){return Math.trunc(e/60%60,10)},en=function(e){return Math.trunc(e%60,10)};function tn(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!ot.number(e))return tn(null,t,n);var i=function(e){return"0".concat(e).slice(-2)},r=Qt(e),a=Zt(e),s=en(e);return r=t||r>0?"".concat(r,":"):"","".concat(n&&e>0?"-":"").concat(r).concat(i(a),":").concat(i(s))}var nn={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||jt.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=xt.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Ct.call(this,this.config.selectors.buttons.play),pause:xt.call(this,this.config.selectors.buttons.pause),restart:xt.call(this,this.config.selectors.buttons.restart),rewind:xt.call(this,this.config.selectors.buttons.rewind),fastForward:xt.call(this,this.config.selectors.buttons.fastForward),mute:xt.call(this,this.config.selectors.buttons.mute),pip:xt.call(this,this.config.selectors.buttons.pip),airplay:xt.call(this,this.config.selectors.buttons.airplay),settings:xt.call(this,this.config.selectors.buttons.settings),captions:xt.call(this,this.config.selectors.buttons.captions),fullscreen:xt.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=xt.call(this,this.config.selectors.progress),this.elements.inputs={seek:xt.call(this,this.config.selectors.inputs.seek),volume:xt.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:xt.call(this,this.config.selectors.display.buffer),currentTime:xt.call(this,this.config.selectors.display.currentTime),duration:xt.call(this,this.config.selectors.display.duration)},ot.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(".".concat(this.config.classNames.tooltip))),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=nn.getIconUrl.call(this),i="".concat(n.cors?"":n.url,"#").concat(this.config.iconPrefix),r=document.createElementNS("http://www.w3.org/2000/svg","svg");ft(r,qt(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),s="".concat(i,"-").concat(e);return"href"in a&&a.setAttributeNS("http://www.w3.org/1999/xlink","href",s),a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(a),r},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=$t(e,this.config);return gt("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),n)},createBadge:function(e){if(ot.empty(e))return null;var t=gt("span",{class:this.config.classNames.menu.value});return t.appendChild(gt("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Object.assign({},t),i=Wt(e),r={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach(function(e){Object.keys(n).includes(e)&&(r[e]=n[e],delete n[e])}),"button"!==r.element||Object.keys(n).includes("type")||(n.type="button"),Object.keys(n).includes("class")?n.class.includes(this.config.classNames.control)||(n.class+=" ".concat(this.config.classNames.control)):n.class=this.config.classNames.control,e){case"play":r.toggle=!0,r.label="play",r.labelPressed="pause",r.icon="play",r.iconPressed="pause";break;case"mute":r.toggle=!0,r.label="mute",r.labelPressed="unmute",r.icon="volume",r.iconPressed="muted";break;case"captions":r.toggle=!0,r.label="enableCaptions",r.labelPressed="disableCaptions",r.icon="captions-off",r.iconPressed="captions-on";break;case"fullscreen":r.toggle=!0,r.label="enterFullscreen",r.labelPressed="exitFullscreen",r.icon="enter-fullscreen",r.iconPressed="exit-fullscreen";break;case"play-large":n.class+=" ".concat(this.config.classNames.control,"--overlaid"),i="play",r.label="play",r.icon="play";break;default:ot.empty(r.label)&&(r.label=i),ot.empty(r.icon)&&(r.icon=e)}var a=gt(r.element);return r.toggle?(a.appendChild(nn.createIcon.call(this,r.iconPressed,{class:"icon--pressed"})),a.appendChild(nn.createIcon.call(this,r.icon,{class:"icon--not-pressed"})),a.appendChild(nn.createLabel.call(this,r.labelPressed,{class:"label--pressed"})),a.appendChild(nn.createLabel.call(this,r.label,{class:"label--not-pressed"}))):(a.appendChild(nn.createIcon.call(this,r.icon)),a.appendChild(nn.createLabel.call(this,r.label))),qt(n,wt(this.config.selectors.buttons[i],n)),ft(a,n),"play"===i?(ot.array(this.elements.buttons[i])||(this.elements.buttons[i]=[]),this.elements.buttons[i].push(a)):this.elements.buttons[i]=a,a},createRange:function(e,t){var n=gt("input",qt(wt(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":$t(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,nn.updateRangeFill.call(this,n),Qe.setup(n),n},createProgress:function(e,t){var n=gt("progress",qt(wt(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"progressbar","aria-hidden":!0},t));if("volume"!==e){n.appendChild(gt("span",null,"0"));var i={played:"played",buffer:"buffered"}[e],r=i?$t(i,this.config):"";n.innerText="% ".concat(r.toLowerCase())}return this.elements.display[e]=n,n},createTime:function(e){var t=wt(this.config.selectors.display[e]),n=gt("div",qt(t,{class:"".concat(this.config.classNames.display.time," ").concat(t.class?t.class:"").trim(),"aria-label":$t(e,this.config)}),"00:00");return this.elements.display[e]=n,n},bindMenuItemShortcuts:function(e,t){var n=this;ut(e,"keydown keyup",function(i){if([32,38,39,40].includes(i.which)&&(i.preventDefault(),i.stopPropagation(),"keydown"!==i.type)){var r,a=St(e,'[role="menuitemradio"]');if(!a&&[32,39].includes(i.which))nn.showMenuPanel.call(n,t,!0);else 32!==i.which&&(40===i.which||a&&39===i.which?(r=e.nextElementSibling,ot.element(r)||(r=e.parentNode.firstElementChild)):(r=e.previousElementSibling,ot.element(r)||(r=e.parentNode.lastElementChild)),At.call(n,r,!0))}},!1),ut(e,"keyup",function(e){13===e.which&&nn.focusFirstMenuItem.call(n,null,!0)})},createMenuItem:function(e){var t=this,n=e.value,i=e.list,r=e.type,a=e.title,s=e.badge,o=void 0===s?null:s,l=e.checked,c=void 0!==l&&l,u=wt(this.config.selectors.inputs[r]),d=gt("button",qt(u,{type:"button",role:"menuitemradio",class:"".concat(this.config.classNames.control," ").concat(u.class?u.class:"").trim(),"aria-checked":c,value:n})),h=gt("span");h.innerHTML=a,ot.element(o)&&h.appendChild(o),d.appendChild(h),Object.defineProperty(d,"checked",{enumerable:!0,get:function(){return"true"===d.getAttribute("aria-checked")},set:function(e){e&&Array.from(d.parentNode.children).filter(function(e){return St(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),d.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(d,"click keyup",function(e){if(!ot.keyboardEvent(e)||32===e.which){switch(e.preventDefault(),e.stopPropagation(),d.checked=!0,r){case"language":t.currentTrack=Number(n);break;case"quality":t.quality=n;break;case"speed":t.speed=parseFloat(n)}nn.showMenuPanel.call(t,"home",ot.keyboardEvent(e))}},r,!1),nn.bindMenuItemShortcuts.call(this,d,r),i.appendChild(d)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return ot.number(e)?tn(e,Qt(this.duration)>0,t):e},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];ot.element(e)&&ot.number(t)&&(e.innerText=nn.formatTime(t,n))},updateVolume:function(){this.supported.ui&&(ot.element(this.elements.inputs.volume)&&nn.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),ot.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;ot.element(e)&&(e.value=t,nn.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&ot.event(e)){var n,i,r=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":n=this.currentTime,i=this.duration,r=0===n||0===i||Number.isNaN(n)||Number.isNaN(i)?0:(n/i*100).toFixed(2),"timeupdate"===e.type&&nn.setRange.call(this,this.elements.inputs.seek,r);break;case"playing":case"progress":!function(e,n){var i=ot.number(n)?n:0,r=ot.element(e)?e:t.elements.display.buffer;if(ot.element(r)){r.value=i;var a=r.getElementsByTagName("span")[0];ot.element(a)&&(a.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=ot.event(e)?e.target:e;if(ot.element(t)&&"range"===t.getAttribute("type")){if(St(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var n=nn.formatTime(this.currentTime),i=nn.formatTime(this.duration),r=$t("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",n).replace("{duration}",i))}else if(St(t,this.config.selectors.inputs.volume)){var a=100*t.value;t.setAttribute("aria-valuenow",a),t.setAttribute("aria-valuetext","".concat(a.toFixed(1),"%"))}else t.setAttribute("aria-valuenow",t.value);jt.isWebkit&&t.style.setProperty("--value","".concat(t.value/t.max*100,"%"))}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&ot.element(this.elements.inputs.seek)&&ot.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r="".concat(this.config.classNames.tooltip,"--visible"),a=function(e){Tt(t.elements.display.seekTooltip,r,e)};if(this.touch)a(!1);else{if(ot.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Et(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),nn.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left="".concat(n,"%"),ot.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!ot.element(this.elements.display.duration)&&this.config.invertTime;nn.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||nn.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return _t(this.elements.display.currentTime,!0),void _t(this.elements.progress,!0);ot.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=ot.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&nn.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&nn.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),nn.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){_t(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,n){var i=this.elements.settings.panels[e],r=null,a=t;if("captions"===e)r=this.currentTrack;else{if(r=ot.empty(n)?this[e]:n,ot.empty(r)&&(r=this.config[e].default),!ot.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '".concat(r,"' for ").concat(e));if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '".concat(r,"' for ").concat(e))}if(ot.element(a)||(a=i&&i.querySelector('[role="menu"]')),ot.element(a)){this.elements.settings.buttons[e].querySelector(".".concat(this.config.classNames.menu.value)).innerHTML=nn.getLabel.call(this,e,r);var s=a&&a.querySelector('[value="'.concat(r,'"]'));ot.element(s)&&(s.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?$t("normal",this.config):"".concat(t,"×");case"quality":if(ot.number(t)){var n=$t("qualityLabel.".concat(t),this.config);return n.length?n:"".concat(t,"p")}return zt(t);case"captions":return sn.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(ot.element(this.elements.settings.panels.quality)){var n=this.elements.settings.panels.quality.querySelector('[role="menu"]');ot.array(e)&&(this.options.quality=Bt(e).filter(function(e){return t.config.quality.options.includes(e)}));var i=!ot.empty(this.options.quality)&&this.options.quality.length>1;if(nn.toggleMenuButton.call(this,"quality",i),bt(n),nn.checkMenu.call(this),i){var r=function(e){var n=$t("qualityBadge.".concat(e),t.config);return n.length?nn.createBadge.call(t,n):null};this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){nn.createMenuItem.call(t,{value:e,list:n,type:"quality",title:nn.getLabel.call(t,"quality",e),badge:r(e)})}),nn.updateSetting.call(this,"quality",n)}}},setCaptionsMenu:function(){var e=this;if(ot.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),n=sn.getTracks.call(this),i=Boolean(n.length);if(nn.toggleMenuButton.call(this,"captions",i),bt(t),nn.checkMenu.call(this),i){var r=n.map(function(n,i){return{value:i,checked:e.captions.toggled&&e.currentTrack===i,title:sn.getLabel.call(e,n),badge:n.language&&nn.createBadge.call(e,n.language.toUpperCase()),list:t,type:"language"}});r.unshift({value:-1,checked:!this.captions.toggled,title:$t("disabled",this.config),list:t,type:"language"}),r.forEach(nn.createMenuItem.bind(this)),nn.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(ot.element(this.elements.settings.panels.speed)){var n=this.elements.settings.panels.speed.querySelector('[role="menu"]');ot.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!ot.empty(this.options.speed)&&this.options.speed.length>1;nn.toggleMenuButton.call(this,"speed",i),bt(n),nn.checkMenu.call(this),i&&(this.options.speed.forEach(function(e){nn.createMenuItem.call(t,{value:e,list:n,type:"speed",title:nn.getLabel.call(t,"speed",e)})}),nn.updateSetting.call(this,"speed",n))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!ot.empty(e)&&Object.values(e).some(function(e){return!e.hidden});_t(this.elements.settings.menu,!t)},focusFirstMenuItem:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.elements.settings.popup.hidden){var n=e;ot.element(n)||(n=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}));var i=n.querySelector('[role^="menuitem"]');At.call(this,i,t)}},toggleMenu:function(e){var t=this.elements.settings.popup,n=this.elements.buttons.settings;if(ot.element(t)&&ot.element(n)){var i=t.hidden,r=i;if(ot.boolean(e))r=e;else if(ot.keyboardEvent(e)&&27===e.which)r=!1;else if(ot.event(e)){var a=t.contains(e.target);if(a||!a&&e.target!==n&&r)return}n.setAttribute("aria-expanded",r),_t(t,!r),Tt(this.elements.container,this.config.classNames.menu.open,r),r&&ot.keyboardEvent(e)?nn.focusFirstMenuItem.call(this,null,!0):r||i||At.call(this,n,ot.keyboardEvent(e))}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return vt(t),{width:n,height:i}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.getElementById("plyr-settings-".concat(this.id,"-").concat(t));if(ot.element(i)){var r=i.parentNode,a=Array.from(r.children).find(function(e){return!e.hidden});if(Dt.transitions&&!Dt.reducedMotion){r.style.width="".concat(a.scrollWidth,"px"),r.style.height="".concat(a.scrollHeight,"px");var s=nn.getMenuSize.call(this,i);ut.call(this,r,Nt,function t(n){n.target===r&&["width","height"].includes(n.propertyName)&&(r.style.width="",r.style.height="",dt.call(e,r,Nt,t))}),r.style.width="".concat(s.width,"px"),r.style.height="".concat(s.height,"px")}_t(a,!0),_t(i,!1),nn.focusFirstMenuItem.call(this,i,n)}},setDownloadLink:function(){var e=this.elements.buttons.download;ot.element(e)&&e.setAttribute("href",this.download)},create:function(e){var t=this,n=gt("div",wt(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(nn.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(nn.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(nn.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(nn.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=gt("div",wt(this.config.selectors.progress));if(i.appendChild(nn.createRange.call(this,"seek",{id:"plyr-seek-".concat(e.id)})),i.appendChild(nn.createProgress.call(this,"buffer")),this.config.tooltips.seek){var r=gt("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(r),this.elements.display.seekTooltip=r}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(nn.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(nn.createTime.call(this,"duration")),this.config.controls.includes("mute")||this.config.controls.includes("volume")){var a=gt("div",{class:"plyr__volume"});if(this.config.controls.includes("mute")&&a.appendChild(nn.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s={max:1,step:.05,value:this.config.volume};a.appendChild(nn.createRange.call(this,"volume",qt(s,{id:"plyr-volume-".concat(e.id)}))),this.elements.volume=a}n.appendChild(a)}if(this.config.controls.includes("captions")&&n.appendChild(nn.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!ot.empty(this.config.settings)){var o=gt("div",{class:"plyr__menu",hidden:""});o.appendChild(nn.createButton.call(this,"settings",{"aria-haspopup":!0,"aria-controls":"plyr-settings-".concat(e.id),"aria-expanded":!1}));var l=gt("div",{class:"plyr__menu__container",id:"plyr-settings-".concat(e.id),hidden:""}),c=gt("div"),u=gt("div",{id:"plyr-settings-".concat(e.id,"-home")}),d=gt("div",{role:"menu"});u.appendChild(d),c.appendChild(u),this.elements.settings.panels.home=u,this.config.settings.forEach(function(n){var i=gt("button",qt(wt(t.config.selectors.buttons.settings),{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--forward"),role:"menuitem","aria-haspopup":!0,hidden:""}));nn.bindMenuItemShortcuts.call(t,i,n),ut(i,"click",function(){nn.showMenuPanel.call(t,n,!1)});var r=gt("span",null,$t(n,t.config)),a=gt("span",{class:t.config.classNames.menu.value});a.innerHTML=e[n],r.appendChild(a),i.appendChild(r),d.appendChild(i);var s=gt("div",{id:"plyr-settings-".concat(e.id,"-").concat(n),hidden:""}),o=gt("button",{type:"button",class:"".concat(t.config.classNames.control," ").concat(t.config.classNames.control,"--back")});o.appendChild(gt("span",{"aria-hidden":!0},$t(n,t.config))),o.appendChild(gt("span",{class:t.config.classNames.hidden},$t("menuBack",t.config))),ut(s,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),nn.showMenuPanel.call(t,"home",!0))},!1),ut(o,"click",function(){nn.showMenuPanel.call(t,"home",!1)}),s.appendChild(o),s.appendChild(gt("div",{role:"menu"})),c.appendChild(s),t.elements.settings.buttons[n]=i,t.elements.settings.panels[n]=s}),l.appendChild(c),o.appendChild(l),n.appendChild(o),this.elements.settings.popup=l,this.elements.settings.menu=o}if(this.config.controls.includes("pip")&&Dt.pip&&n.appendChild(nn.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Dt.airplay&&n.appendChild(nn.createButton.call(this,"airplay")),this.config.controls.includes("download")){var h={element:"a",href:this.download,target:"_blank"},p=this.config.urls.download;!ot.url(p)&&this.isEmbed&&qt(h,{icon:"logo-".concat(this.provider),label:this.provider}),n.appendChild(nn.createButton.call(this,"download",h))}return this.config.controls.includes("fullscreen")&&n.appendChild(nn.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(nn.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&nn.setQualityMenu.call(this,Ft.getQualityOptions.call(this)),nn.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=nn.getIconUrl.call(this);t.cors&&Gt(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;ot.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,i)),this.config.controls||(this.config.controls=[]),ot.element(this.config.controls)||ot.string(this.config.controls)?n=this.config.controls:(n=nn.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:sn.getLabel.call(this)}),r=!1);var a,s=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=He(e,2),i=n[0],r=n[1];t=Vt(t,"{".concat(i,"}"),r)}),t};if(r&&(ot.string(this.config.controls)?n=s(n):ot.element(n)&&(n.innerHTML=s(n.innerHTML))),ot.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),ot.element(a)||(a=this.elements.container),a[ot.element(n)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",n),ot.element(this.elements.controls)||nn.findElements.call(this),!ot.empty(this.elements.buttons)){var o=function(t){var n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return Et(t,n)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Tt(t,n,e)}})};Object.values(this.elements.buttons).filter(Boolean).forEach(function(e){ot.array(e)||ot.nodeList(e)?Array.from(e).filter(Boolean).forEach(o):o(e)})}if(jt.isEdge&&Lt(a),this.config.tooltips.controls){var l=this.config,c=l.classNames,u=l.selectors,d="".concat(u.controls.wrapper," ").concat(u.labels," .").concat(c.hidden),h=Ct.call(this,d);Array.from(h).forEach(function(t){Tt(t,e.config.classNames.hidden,!1),Tt(t,e.config.classNames.tooltip,!0)})}}};function rn(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=document.createElement("a");n.href=t,t=n.href}try{return new URL(t)}catch(e){return null}}function an(e){var t=new URLSearchParams;return ot.object(e)&&Object.entries(e).forEach(function(e){var n=He(e,2),i=n[0],r=n[1];t.set(i,r)}),t}var sn={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Dt.textTracks)ot.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&nn.setCaptionsMenu.call(this);else{var e,t;if(ot.element(this.elements.captions)||(this.elements.captions=gt("div",wt(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,ot.element(e)&&ot.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),jt.isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),n=rn(t);null!==n&&n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Jt(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){vt(e)})})}var i=Bt((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map(function(e){return e.split("-")[0]})),r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===r)r=He(i,1)[0];var a=this.storage.get("captions");if(ot.boolean(a)||(a=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:a,language:r,languages:i}),this.isHTML5){var s=this.config.captions.update?"addtrack removetrack":"removetrack";ut.call(this,this.media.textTracks,s,sn.update.bind(this))}setTimeout(sn.update.bind(this),0)}},update:function(){var e=this,t=sn.getTracks.call(this,!0),n=this.captions,i=n.active,r=n.language,a=n.meta,s=n.currentTrackNode,o=Boolean(t.find(function(e){return e.language===r}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!a.get(e)}).forEach(function(t){e.debug.log("Track added",t),a.set(t,{default:"showing"===t.mode}),t.mode="hidden",ut.call(e,t,"cuechange",function(){return sn.updateCues.call(e)})}),(o&&this.language!==r||!t.includes(s))&&(sn.setLanguage.call(this,r),sn.toggle.call(this,i&&o)),Tt(this.elements.container,this.config.classNames.captions.enabled,!ot.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&nn.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var n=this.captions.toggled,i=this.config.classNames.captions.active,r=ot.nullOrUndefined(e)?!n:e;if(r!==n){if(t||(this.captions.active=r,this.storage.set({captions:r})),!this.language&&r&&!t){var a=sn.getTracks.call(this),s=sn.findTrack.call(this,[this.captions.language].concat(qe(this.captions.languages)),!0);return this.captions.language=s.language,void sn.set.call(this,a.indexOf(s))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=r),Tt(this.elements.container,i,r),this.captions.toggled=r,nn.updateSetting.call(this,"captions"),pt.call(this,this.media,r?"captionsenabled":"captionsdisabled")}}},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=sn.getTracks.call(this);if(-1!==e)if(ot.number(e))if(e in n){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var i=n[e],r=(i||{}).language;this.captions.currentTrackNode=i,nn.updateSetting.call(this,"captions"),t||(this.captions.language=r,this.storage.set({language:r})),this.isVimeo&&this.embed.enableTextTrack(r),pt.call(this,this.media,"languagechange")}sn.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&sn.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else sn.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(ot.string(e)){var n=e.toLowerCase();this.captions.language=n;var i=sn.getTracks.call(this),r=sn.findTrack.call(this,[n]);sn.set.call(this,i.indexOf(r),t)}else this.debug.warn("Invalid language argument",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t,n=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=sn.getTracks.call(this),a=function(e){return Number((n.captions.meta.get(e)||{}).default)},s=Array.from(r).sort(function(e,t){return a(t)-a(e)});return e.every(function(e){return!(t=s.find(function(t){return t.language===e}))}),t||(i?s[0]:void 0)},getCurrentTrack:function(){return sn.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!ot.track(t)&&Dt.textTracks&&this.captions.toggled&&(t=sn.getCurrentTrack.call(this)),ot.track(t)?ot.empty(t.label)?ot.empty(t.language)?$t("enabled",this.config):e.language.toUpperCase():t.label:$t("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(ot.element(this.elements.captions))if(ot.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=sn.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Kt)}var i=t.map(function(e){return e.trim()}).join("\n");if(i!==this.elements.captions.innerHTML){bt(this.elements.captions);var r=gt("span",wt(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),pt.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},on={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.5.0-beta.4/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of {duration}",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",download:"Download",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",menuBack:"Go back to previous menu",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad",qualityBadge:{2160:"4K",1440:"HD",1080:"HD",720:"HD",576:"SD",480:"SD"}},urls:{download:null,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"},youtube:{sdk:"https://www.youtube.com/iframe_api",api:"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet"},googleIMA:{sdk:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","download","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',download:'[data-plyr="download"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress__buffer",loop:".plyr__progress__loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",caption:".plyr__caption",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{type:"plyr--{0}",provider:"plyr--{0}",video:"plyr__video-wrapper",embed:"plyr__video-embed",embedContainer:"plyr__video-embed__container",poster:"plyr__poster",posterEnabled:"plyr__poster-enabled",ads:"plyr__ads",control:"plyr__control",controlPressed:"plyr__control--pressed",playing:"plyr--playing",paused:"plyr--paused",stopped:"plyr--stopped",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",display:{time:"plyr__time"},menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus",previewThumbnails:{thumbContainer:"plyr__preview-thumb",thumbContainerShown:"plyr__preview-thumb--is-shown",imageContainer:"plyr__preview-thumb__image-container",timeContainer:"plyr__preview-thumb__time-container",scrubbingContainer:"plyr__preview-scrubbing",scrubbingContainerShown:"plyr__preview-scrubbing--is-shown"}},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:"",tagUrl:""},previewThumbnails:{enabled:!1,src:""},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1},youtube:{noCookie:!1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1}},ln="picture-in-picture",cn="inline",un={html5:"html5",youtube:"youtube",vimeo:"vimeo"},dn={audio:"audio",video:"video"};var hn=function(){},pn=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Re(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Fe(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):hn}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):hn}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):hn}}]),e}();function mn(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;ot.element(e)&&(e.pressed=this.active),pt.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),jt.isIos||function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(ot.element(e)){var n=Ct.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1];ct.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=document.activeElement;t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function fn(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=t?"hidden":"",Tt(this.target,this.player.config.classNames.fullscreen.fallback,t),jt.isIos){var n=document.head.querySelector('meta[name="viewport"]'),i="viewport-fit=cover";n||(n=document.createElement("meta")).setAttribute("name","viewport");var r=ot.string(n.content)&&n.content.includes(i);t?(this.cleanupViewport=!r,r||(n.content+=",".concat(i))):this.cleanupViewport&&(n.content=n.content.split(",").filter(function(e){return e.trim()!==i}).join(",")),setTimeout(function(){return Lt(e.target)},100)}mn.call(this)}var gn=function(){function e(t){var n=this;Re(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},this.forceFallback="force"===t.config.fullscreen.fallback,ut.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":"".concat(this.prefix,"fullscreenchange"),function(){mn.call(n)}),ut.call(this.player,this.player.elements.container,"dblclick",function(e){ot.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Fe(e,[{key:"update",value:function(){var t;this.enabled?(t=this.forceFallback?"Fallback (forced)":e.native?"Native":"Fallback",this.player.debug.log("".concat(t," fullscreen enabled"))):this.player.debug.log("Fullscreen not supported and fallback disabled");Tt(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(jt.isIos&&this.player.config.fullscreen.iosNative?this.target.webkitEnterFullscreen():!e.native||this.forceFallback?fn.call(this,!0):this.prefix?ot.empty(this.prefix)||this.target["".concat(this.prefix,"Request").concat(this.property)]():this.target.requestFullscreen())}},{key:"exit",value:function(){if(this.enabled)if(jt.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(!e.native||this.forceFallback)fn.call(this,!1);else if(this.prefix){if(!ot.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document["".concat(this.prefix).concat(t).concat(this.property)]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"usingNative",get:function(){return e.native&&!this.forceFallback}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(!e.native||this.forceFallback?Et(this.target,this.player.config.classNames.fullscreen.fallback):(this.prefix?document["".concat(this.prefix).concat(this.property,"Element")]:document.fullscreenElement)===this.target)}},{key:"target",get:function(){return jt.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(ot.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!ot.function(document["".concat(t,"ExitFullscreen")])&&!ot.function(document["".concat(t,"CancelFullScreen")]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function yn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,a=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:a,onerror:a,src:e})})}var vn={addStyleHook:function(){Tt(this.elements.container,this.config.selectors.container.replace(".",""),!0),Tt(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for ".concat(this.provider," ").concat(this.type)),void vn.toggleNativeControls.call(this,!0);ot.element(this.elements.controls)||(nn.inject.call(this),this.listeners.controls()),vn.toggleNativeControls.call(this),this.isHTML5&&sn.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,nn.updateVolume.call(this),nn.timeUpdate.call(this),vn.checkPlaying.call(this),Tt(this.elements.container,this.config.classNames.pip.supported,Dt.pip&&this.isHTML5&&this.isVideo),Tt(this.elements.container,this.config.classNames.airplay.supported,Dt.airplay&&this.isHTML5),Tt(this.elements.container,this.config.classNames.isIos,jt.isIos),Tt(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){pt.call(e,e.media,"ready")},0),vn.setTitle.call(this),this.poster&&vn.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&nn.durationUpdate.call(this)},setTitle:function(){var e=$t("play",this.config);if(ot.string(this.config.title)&&!ot.empty(this.config.title)&&(e+=", ".concat(this.config.title)),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=xt.call(this,"iframe");if(!ot.element(t))return;var n=ot.empty(this.config.title)?"video":this.config.title,i=$t("frameTitle",this.config);t.setAttribute("title",i.replace("{title}",n))}},togglePoster:function(e){Tt(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]||!this.poster?(this.media.setAttribute("poster",e),function(){var e=this;return new Promise(function(t){return e.ready?setTimeout(t,0):ut.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return yn(e)}).catch(function(n){throw e===t.poster&&vn.togglePoster.call(t,!1),n}).then(function(){if(e!==t.poster)throw new Error("setPoster cancelled by later call to setPoster")}).then(function(){return Object.assign(t.elements.poster.style,{backgroundImage:"url('".concat(e,"')"),backgroundSize:""}),vn.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;Tt(this.elements.container,this.config.classNames.playing,this.playing),Tt(this.elements.container,this.config.classNames.paused,this.paused),Tt(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),ot.event(e)&&"timeupdate"===e.type||vn.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Tt(t.elements.container,t.config.classNames.loading,t.loading),vn.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;if(t&&this.config.hideControls){var n=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||n))}}};function bn(e){var t=e;ot.string(t)||ot.nullOrUndefined(this.embed)||(t=this.embed.ratio),ot.string(t)||(t=this.config.ratio);var n=He(t.split(":").map(Number),2),i=100/n[0]*n[1];if(this.elements.wrapper.style.paddingBottom="".concat(i,"%"),this.isVimeo&&this.supported.ui){var r=(240-i)/4.8;this.media.style.transform="translateY(-".concat(r,"%)")}return{padding:i,ratio:t}}var kn=function(){function e(t){Re(this,e),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.setTabFocus=this.setTabFocus.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Fe(e,[{key:"handleKey",value:function(e){var t=this.player,n=t.elements,i=e.keyCode?e.keyCode:e.which,r="keydown"===e.type,a=r&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&ot.number(i)){if(r){var s=document.activeElement;if(ot.element(s)){var o=t.config.selectors.editable;if(s!==n.inputs.seek&&St(s,o))return;if(32===e.which&&St(s,'button, [role^="menuitem"]'))return}switch([32,37,38,39,40,48,49,50,51,52,53,54,56,57,67,70,73,75,76,77,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(t.currentTime=t.duration/10*(i-48));break;case 32:case 75:a||t.togglePlay();break;case 38:t.increaseVolume(.1);break;case 40:t.decreaseVolume(.1);break;case 77:a||(t.muted=!t.muted);break;case 39:t.forward();break;case 37:t.rewind();break;case 70:t.fullscreen.toggle();break;case 67:a||t.toggleCaptions();break;case 76:t.loop=!t.loop}27===i&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){nn.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){var e=this.player,t=e.elements;e.touch=!0,Tt(t.container,e.config.classNames.isTouch,!0)}},{key:"setTabFocus",value:function(e){var t=this.player,n=t.elements;if(clearTimeout(this.focusTimer),"keydown"!==e.type||9===e.which){"keydown"===e.type&&(this.lastKeyDown=e.timeStamp);var i,r=e.timeStamp-this.lastKeyDown<=20;if("focus"!==e.type||r)i=t.config.classNames.tabFocus,Tt(Ct.call(t,".".concat(i)),i,!1),this.focusTimer=setTimeout(function(){var e=document.activeElement;n.container.contains(e)&&Tt(document.activeElement,t.config.classNames.tabFocus,!0)},10)}}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.player;t.config.keyboard.global&&ct.call(t,window,"keydown keyup",this.handleKey,e,!1),ct.call(t,document.body,"click",this.toggleMenu,e),ht.call(t,document.body,"touchstart",this.firstTouch),ct.call(t,document.body,"keydown focus blur",this.setTabFocus,e,!1,!0)}},{key:"container",value:function(){var e=this.player,t=e.config,n=e.elements,i=e.timers;!t.keyboard.global&&t.keyboard.focused&&ut.call(e,n.container,"keydown keyup",this.handleKey,!1),ut.call(e,n.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var r=n.controls;r&&"enterfullscreen"===t.type&&(r.pressed=!1,r.hover=!1);var a=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(vn.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(i.controls),i.controls=setTimeout(function(){return vn.toggleControls.call(e,!1)},a)});var r=function(t){if(!t)return bn.call(e);var i=n.container.getBoundingClientRect(),r=i.width,a=i.height;return bn.call(e,"".concat(r,":").concat(a))},a=function(){window.clearTimeout(i.resized),i.resized=window.setTimeout(r,50)};ut.call(e,n.container,"enterfullscreen exitfullscreen",function(t){var i=e.fullscreen,s=i.target,o=i.usingNative;if(e.isEmbed&&s===n.container){var l="enterfullscreen"===t.type,c=r(l);c.padding;!function(t,n,i){if(e.isVimeo){var r=e.elements.wrapper.firstChild,a=He(t.split(":").map(Number),2)[1],s=He(e.embed.ratio.split(":").map(Number),2),o=s[0],l=s[1];r.style.maxWidth=i?"".concat(a/l*o,"px"):null,r.style.margin=i?"0 auto":null}}(c.ratio,0,l),o||(l?ut.call(e,window,"resize",a):dt.call(e,window,"resize",a))}})}},{key:"media",value:function(){var e=this,t=this.player,n=t.elements;if(ut.call(t,t.media,"timeupdate seeking seeked",function(e){return nn.timeUpdate.call(t,e)}),ut.call(t,t.media,"durationchange loadeddata loadedmetadata",function(e){return nn.durationUpdate.call(t,e)}),ut.call(t,t.media,"canplay loadeddata",function(){_t(n.volume,!t.hasAudio),_t(n.buttons.mute,!t.hasAudio)}),ut.call(t,t.media,"ended",function(){t.isHTML5&&t.isVideo&&t.config.resetOnEnd&&t.restart()}),ut.call(t,t.media,"progress playing seeking seeked",function(e){return nn.updateProgress.call(t,e)}),ut.call(t,t.media,"volumechange",function(e){return nn.updateVolume.call(t,e)}),ut.call(t,t.media,"playing play pause ended emptied timeupdate",function(e){return vn.checkPlaying.call(t,e)}),ut.call(t,t.media,"waiting canplay seeked playing",function(e){return vn.checkLoading.call(t,e)}),t.supported.ui&&t.config.clickToPlay&&!t.isAudio){var i=xt.call(t,".".concat(t.config.classNames.video));if(!ot.element(i))return;ut.call(t,n.container,"click",function(r){([n.container,i].includes(r.target)||i.contains(r.target))&&(t.touch&&t.config.hideControls||(t.ended?(e.proxy(r,t.restart,"restart"),e.proxy(r,t.play,"play")):e.proxy(r,t.togglePlay,"play")))})}t.supported.ui&&t.config.disableContextMenu&&ut.call(t,n.wrapper,"contextmenu",function(e){e.preventDefault()},!1),ut.call(t,t.media,"volumechange",function(){t.storage.set({volume:t.volume,muted:t.muted})}),ut.call(t,t.media,"ratechange",function(){nn.updateSetting.call(t,"speed"),t.storage.set({speed:t.speed})}),ut.call(t,t.media,"qualitychange",function(e){nn.updateSetting.call(t,"quality",null,e.detail.quality)}),ut.call(t,t.media,"ready qualitychange",function(){nn.setDownloadLink.call(t)});var r=t.config.events.concat(["keyup","keydown"]).join(" ");ut.call(t,t.media,r,function(e){var i=e.detail,r=void 0===i?{}:i;"error"===e.type&&(r=t.media.error),pt.call(t,n.container,e.type,!0,r)})}},{key:"proxy",value:function(e,t,n){var i=this.player,r=i.config.listeners[n],a=!0;ot.function(r)&&(a=r.call(i,e)),a&&ot.function(t)&&t.call(i,e)}},{key:"bind",value:function(e,t,n,i){var r=this,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.player,o=s.config.listeners[i],l=ot.function(o);ut.call(s,e,t,function(e){return r.proxy(e,n,i)},a&&!l)}},{key:"controls",value:function(){var e=this,t=this.player,n=t.elements,i=jt.isIE?"change":"input";if(n.buttons.play&&Array.from(n.buttons.play).forEach(function(n){e.bind(n,"click",t.togglePlay,"play")}),this.bind(n.buttons.restart,"click",t.restart,"restart"),this.bind(n.buttons.rewind,"click",t.rewind,"rewind"),this.bind(n.buttons.fastForward,"click",t.forward,"fastForward"),this.bind(n.buttons.mute,"click",function(){t.muted=!t.muted},"mute"),this.bind(n.buttons.captions,"click",function(){return t.toggleCaptions()}),this.bind(n.buttons.download,"click",function(){pt.call(t,t.media,"download")},"download"),this.bind(n.buttons.fullscreen,"click",function(){t.fullscreen.toggle()},"fullscreen"),this.bind(n.buttons.pip,"click",function(){t.pip="toggle"},"pip"),this.bind(n.buttons.airplay,"click",t.airplay,"airplay"),this.bind(n.buttons.settings,"click",function(e){e.stopPropagation(),nn.toggleMenu.call(t,e)}),this.bind(n.buttons.settings,"keyup",function(e){var n=e.which;[13,32].includes(n)&&(13!==n?(e.preventDefault(),e.stopPropagation(),nn.toggleMenu.call(t,e)):nn.focusFirstMenuItem.call(t,null,!0))},null,!1),this.bind(n.settings.menu,"keydown",function(e){27===e.which&&nn.toggleMenu.call(t,e)}),this.bind(n.inputs.seek,"mousedown mousemove",function(e){var t=n.progress.getBoundingClientRect(),i=100/t.width*(e.pageX-t.left);e.currentTarget.setAttribute("seek-value",i)}),this.bind(n.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(e){var n=e.currentTarget,i=e.keyCode?e.keyCode:e.which;if(!ot.keyboardEvent(e)||39===i||37===i){t.lastSeekTime=Date.now();var r=n.hasAttribute("play-on-seeked"),a=["mouseup","touchend","keyup"].includes(e.type);r&&a?(n.removeAttribute("play-on-seeked"),t.play()):!a&&t.playing&&(n.setAttribute("play-on-seeked",""),t.pause())}}),jt.isIos){var r=Ct.call(t,'input[type="range"]');Array.from(r).forEach(function(t){return e.bind(t,i,function(e){return Lt(e.target)})})}this.bind(n.inputs.seek,i,function(e){var n=e.currentTarget,i=n.getAttribute("seek-value");ot.empty(i)&&(i=n.value),n.removeAttribute("seek-value"),t.currentTime=i/n.max*t.duration},"seek"),this.bind(n.progress,"mouseenter mouseleave mousemove",function(e){return nn.updateSeekTooltip.call(t,e)}),this.bind(n.progress,"mousemove touchmove",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startMove(e)}),this.bind(n.progress,"mouseleave click",function(){var e=t.previewThumbnails;e&&e.loaded&&e.endMove(!1,!0)}),this.bind(n.progress,"mousedown touchstart",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.startScrubbing(e)}),this.bind(n.progress,"mouseup touchend",function(e){var n=t.previewThumbnails;n&&n.loaded&&n.endScrubbing(e)}),jt.isWebkit&&Array.from(Ct.call(t,'input[type="range"]')).forEach(function(n){e.bind(n,"input",function(e){return nn.updateRangeFill.call(t,e.target)})}),t.config.toggleInvert&&!ot.element(n.display.duration)&&this.bind(n.display.currentTime,"click",function(){0!==t.currentTime&&(t.config.invertTime=!t.config.invertTime,nn.timeUpdate.call(t))}),this.bind(n.inputs.volume,i,function(e){t.volume=e.target.value},"volume"),this.bind(n.controls,"mouseenter mouseleave",function(e){n.controls.hover=!t.touch&&"mouseenter"===e.type}),this.bind(n.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){n.controls.pressed=["mousedown","touchstart"].includes(e.type)}),this.bind(n.controls,"focusin",function(){var n=t.config,i=t.elements,r=t.timers;Tt(i.controls,n.classNames.noTransition,!0),vn.toggleControls.call(t,!0),setTimeout(function(){Tt(i.controls,n.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(r.controls),r.controls=setTimeout(function(){return vn.toggleControls.call(t,!1)},a)}),this.bind(n.inputs.volume,"wheel",function(e){var n=e.webkitDirectionInvertedFromDevice,i=He([e.deltaX,-e.deltaY].map(function(e){return n?-e:e}),2),r=i[0],a=i[1],s=Math.sign(Math.abs(r)>Math.abs(a)?r:a);t.increaseVolume(s/50);var o=t.media.volume;(1===s&&o<1||-1===s&&o>0)&&e.preventDefault()},"volume",!1)}}]),e}(),wn=t(function(e,t){e.exports=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function a(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var a,o,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,h=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(a=!0,(o=l.createElement("link")).rel="stylesheet",o.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(o=l.createElement("img")).src=h:((o=l.createElement("script")).src=t,o.async=void 0===c||c),o.onload=o.onerror=o.onbeforeload=function(e){var l=e.type[0];if(a&&"hideFocus"in o)try{o.sheet.cssText.length||(l="e")}catch(e){18!=e.code&&(l="e")}if("e"==l&&(r+=1)0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=tn(Math.max(e.manager.getRemainingTime(),0)),n="".concat($t("advertisement",e.player.config)," - ").concat(t);e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this;if(this.enabled){var n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}}},{key:"addCuePoints",value:function(){var e=this;ot.empty(this.cuePoints)||this.cuePoints.forEach(function(t){if(0!==t&&-1!==t&&t1?n-1:0),r=1;r ?)([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);a&&(t.startTime=60*Number(a[1])*60+60*Number(a[2])+Number(a[3])+Number("0.".concat(a[4])),t.endTime=60*Number(a[6])*60+60*Number(a[7])+Number(a[8])+Number("0.".concat(a[9])))}}),t.text&&a.push(t)}),a),height:null,urlPrefix:""};s.frames[0].text.startsWith("/")||(s.urlPrefix=e.substring(0,e.lastIndexOf("/")+1));var o=new Image;o.onload=function(){s.height=o.naturalHeight,s.width=o.naturalWidth,t.thumbnails.push(s),n()},o.src=s.urlPrefix+s.frames[0].text})})}},{key:"startMove",value:function(e){if(this.loaded&&ot.event(e)&&["touchmove","mousemove"].includes(e.type)&&this.player.media.duration){if("touchmove"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t=this.player.elements.progress.getBoundingClientRect(),n=100/t.width*(e.pageX-t.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=tn(this.seekTime)}this.showImageAtCurrentTime()}}},{key:"endMove",value:function(){this.toggleThumbContainer(!1,!0)}},{key:"startScrubbing",value:function(e){!1!==e.button&&0!==e.button||(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))}},{key:"endScrubbing",value:function(){var e=this;this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):ht.call(this.player,this.player.media,"timeupdate",function(){e.mouseDown||e.toggleScrubbingContainer(!1)})}},{key:"listeners",value:function(){var e=this;this.player.on("play",function(){e.toggleThumbContainer(!1,!0)}),this.player.on("seeked",function(){e.toggleThumbContainer(!1)}),this.player.on("timeupdate",function(){e.lastTime=e.player.media.currentTime})}},{key:"render",value:function(){this.elements.thumb.container=gt("div",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=gt("div",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);var e=gt("div",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=gt("span",{},"00:00"),e.appendChild(this.elements.thumb.time),this.elements.thumb.container.appendChild(e),this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=gt("div",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)}},{key:"showImageAtCurrentTime",value:function(){var e=this;this.mouseDown?this.setScrubbingContainerSize():(this.toggleThumbContainer(!0),this.setThumbContainerSizeAndPos());var t=this.thumbnails[0].frames.findIndex(function(t){return e.seekTime>=t.startTime&&e.seekTime<=t.endTime}),n=t>=0,i=0;this.toggleThumbContainer(n),n&&(this.thumbnails.forEach(function(n,r){e.loadedImages.includes(n.frames[t].text)&&(i=r)}),t!==this.showingThumb&&(this.showingThumb=t,this.loadImage(i)))}},{key:"loadImage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=this.showingThumb,i=this.thumbnails[t],r=i.urlPrefix,a=i.frames[n],s=i.frames[n].text,o=r+s;if(this.currentImageElement&&this.currentImageElement.dataset.filename===s)this.showImage(this.currentImageElement,a,t,n,s,!1),this.currentImageElement.dataset.index=n,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);var l=new Image;l.src=o,l.dataset.index=n,l.dataset.filename=s,this.showingThumbFilename=s,this.player.debug.log("Loading image: ".concat(o)),l.onload=function(){return e.showImage(l,a,t,n,s,!0)},this.loadingImage=l,this.removeOldImages(l)}}},{key:"showImage",value:function(e,t,n,i,r){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];this.player.debug.log("Showing thumb: ".concat(r,". num: ").concat(i,". qual: ").concat(n,". newimg: ").concat(a)),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(r)||this.loadedImages.push(r)),this.preloadNearby(i,!0).then(this.preloadNearby(i,!1)).then(this.getHigherQuality(n,e,t,r))}},{key:"removeOldImages",value:function(e){var t=this;Array.from(this.currentImageContainer.children).forEach(function(n){if("img"===n.tagName.toLowerCase()){var i=t.usingSprites?500:1e3;if(n.dataset.index!==e.dataset.index&&!n.dataset.deleting){n.dataset.deleting=!0;var r=t.currentImageContainer;setTimeout(function(){r.removeChild(n),t.player.debug.log("Removing thumb: ".concat(n.dataset.filename))},i)}}})}},{key:"preloadNearby",value:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return new Promise(function(i){setTimeout(function(){var r=t.thumbnails[0].frames[e].text;if(t.showingThumbFilename===r){var a;a=n?t.thumbnails[0].frames.slice(e):t.thumbnails[0].frames.slice(0,e).reverse();var s=!1;a.forEach(function(e){var n=e.text;if(n!==r&&!t.loadedImages.includes(n)){s=!0,t.player.debug.log("Preloading thumb filename: ".concat(n));var a=t.thumbnails[0].urlPrefix+n,o=new Image;o.src=a,o.onload=function(){t.player.debug.log("Preloaded thumb filename: ".concat(n)),t.loadedImages.includes(n)||t.loadedImages.push(n),i()}}}),s||i()}},300)})}},{key:"getHigherQuality",value:function(e,t,n,i){var r=this;if(e0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(n,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"toggleScrubbingContainer",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)}},{key:"determineContainerAutoSizing",value:function(){this.elements.thumb.imageContainer.clientHeight>20&&(this.sizeSpecifiedInCSS=!0)}},{key:"setThumbContainerSizeAndPos",value:function(){if(!this.sizeSpecifiedInCSS){var e=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);this.elements.thumb.imageContainer.style.height="".concat(this.thumbContainerHeight,"px"),this.elements.thumb.imageContainer.style.width="".concat(e,"px")}this.setThumbContainerPos()}},{key:"setThumbContainerPos",value:function(){var e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),n=this.elements.thumb.container,i=t.left-e.left+10,r=t.right-e.left-n.clientWidth-10,a=this.mousePosX-e.left-n.clientWidth/2;ar&&(a=r),n.style.left="".concat(a,"px")}},{key:"setScrubbingContainerSize",value:function(){this.elements.scrubbing.container.style.width="".concat(this.player.media.clientWidth,"px"),this.elements.scrubbing.container.style.height="".concat(this.player.media.clientWidth/this.thumbAspectRatio,"px")}},{key:"setImageSizeAndOffset",value:function(e,t){if(this.usingSprites){var n=this.thumbContainerHeight/t.h;e.style.height="".concat(Math.floor(e.naturalHeight*n),"px"),e.style.width="".concat(Math.floor(e.naturalWidth*n),"px"),e.style.left="-".concat(t.x*n,"px"),e.style.top="-".concat(t.y*n,"px")}}},{key:"enabled",get:function(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}},{key:"currentImageContainer",get:function(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}},{key:"usingSprites",get:function(){return Object.keys(this.thumbnails[0].frames[0]).includes("w")}},{key:"thumbAspectRatio",get:function(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}},{key:"thumbContainerHeight",get:function(){return this.mouseDown?Math.floor(this.player.media.clientWidth/this.thumbAspectRatio):Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}},{key:"currentImageElement",get:function(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement},set:function(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}]),e}(),Ln={insertElements:function(e,t){var n=this;ot.string(t)?yt(e,this.media,{src:t}):ot.array(t)&&t.forEach(function(t){yt(e,n.media,t)})},change:function(e){var t=this;Ht(e,"sources.length")?(Ft.cancelRequests.call(this),this.destroy.call(this,function(){t.options.quality=[],vt(t.media),t.media=null,ot.element(t.elements.container)&&t.elements.container.removeAttribute("class");var n=e.sources,i=e.type,r=He(n,1)[0],a=r.provider,s=void 0===a?un.html5:a,o=r.src,l="html5"===s?i:"div",c="html5"===s?{}:{src:o};Object.assign(t,{provider:s,type:i,supported:Dt.check(i,s,t.config.playsinline),media:gt(l,c)}),t.elements.container.appendChild(t.media),ot.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),ot.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),vn.addStyleHook.call(t),t.isHTML5&&Ln.insertElements.call(t,"source",n),t.config.title=e.title,On.setup.call(t),t.isHTML5&&Object.keys(e).includes("tracks")&&Ln.insertElements.call(t,"track",e.tracks),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&vn.build.call(t),t.isHTML5&&t.media.load(),t.previewThumbnails&&t.previewThumbnails.load(),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}},In=function(){function e(t,n){var i=this;if(Re(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Dt.touch,this.media=t,ot.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||ot.nodeList(this.media)||ot.array(this.media))&&(this.media=this.media[0]),this.config=qt({},on,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new pn(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Dt),!ot.nullOrUndefined(this.media)&&ot.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Dt.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var a=this.media.tagName.toLowerCase(),s=null,o=null;switch(a){case"div":if(s=this.media.querySelector("iframe"),ot.element(s)){if(o=rn(s.getAttribute("src")),this.provider=function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtube-nocookie\.com|youtu\.?be)\/.+$/.test(e)?un.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{0,9}(?=\b|\/)/.test(e)?un.vimeo:null}(o.toString()),this.elements.container=this.media,this.media=s,this.elements.container.className="",o.search.length){var l=["1","true"];l.includes(o.searchParams.get("autoplay"))&&(this.config.autoplay=!0),l.includes(o.searchParams.get("loop"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=l.includes(o.searchParams.get("playsinline")),this.config.youtube.hl=o.searchParams.get("hl")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(ot.empty(this.provider)||!Object.keys(un).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=dn.video;break;case"video":case"audio":this.type=a,this.provider=un.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),(this.media.hasAttribute("playsinline")||this.media.hasAttribute("webkit-playsinline"))&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Dt.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.eventListeners=[],this.listeners=new kn(this),this.storage=new Yt(this),this.media.plyr=this,ot.element(this.elements.container)||(this.elements.container=gt("div",{tabindex:0}),mt(this.media,this.elements.container)),vn.addStyleHook.call(this),On.setup.call(this),this.config.debug&&ut.call(this,this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: ".concat(e.type))}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&vn.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new gn(this),this.config.ads.enabled&&(this.ads=new Mn(this)),this.config.autoplay&&this.play(),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new Nn(this))):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Fe(e,[{key:"play",value:function(){var e=this;return ot.function(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then(function(){return e.ads.play()}).catch(function(){return e.media.play()}),this.media.play()):null}},{key:"pause",value:function(){this.playing&&ot.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(ot.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?(this.pause(),this.restart()):ot.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(ot.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(ot.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(ot.number(e)?e:0)}},{key:"decreaseVolume",value:function(e){this.increaseVolume(-e)}},{key:"toggleCaptions",value:function(e){sn.toggle.call(this,e,!1)}},{key:"airplay",value:function(){Dt.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Et(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Tt(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes("settings")&&!ot.empty(this.config.settings)&&nn.toggleMenu.call(this,!1),i!==t){var r=i?"controlshidden":"controlsshown";pt.call(this,this.media,r)}return!i}return!1}},{key:"on",value:function(e,t){ut.call(this,this.elements.container,e,t)}},{key:"once",value:function(e,t){ht.call(this,this.elements.container,e,t)}},{key:"off",value:function(e,t){dt(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(vt(t.elements.buttons.play),vt(t.elements.captions),vt(t.elements.controls),vt(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),ot.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,n=e.type,i=e.callback,r=e.options;t.removeEventListener(n,i,r)}),this.eventListeners=[])}.call(t),kt(t.elements.original,t.elements.container),pt.call(t,t.elements.original,"destroyed",!0),ot.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};this.stop(),this.isHTML5?(clearTimeout(this.timers.loading),vn.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&ot.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))}}},{key:"supports",value:function(e){return Dt.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===un.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===un.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===un.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===dn.video)}},{key:"isAudio",get:function(){return Boolean(this.type===dn.audio)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"stopped",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){if(this.duration){var t=ot.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to ".concat(this.currentTime," seconds"))}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return ot.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration,n=ot.number(t)&&t!==1/0?t:0;return e||n}},{key:"volume",set:function(e){var t=e;ot.string(t)&&(t=Number(t)),ot.number(t)||(t=this.storage.get("volume")),ot.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!ot.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;ot.boolean(t)||(t=this.storage.get("muted")),ot.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;ot.number(e)&&(t=e),ot.number(t)||(t=this.storage.get("speed")),ot.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed (".concat(t,")"))},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,n=this.options.quality;if(n.length){var i=[!ot.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(ot.number),r=!0;if(!n.includes(i)){var a=function(e,t){return ot.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)1&&void 0!==arguments[1]?arguments[1]:{},i=null;return ot.string(t)?i=Array.from(document.querySelectorAll(t)):ot.nodeList(t)?i=Array.from(t):ot.array(t)&&(i=t.filter(ot.element)),ot.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();In.defaults=(Cn=on,JSON.parse(JSON.stringify(Cn))),xn=window.location.host,An={prod:"plyr.io"===xn,dev:"dev.plyr.io"===xn},document.addEventListener("DOMContentLoaded",function(){Ie.context(function(){var e=document.getElementById("container");window.Shr&&window.Shr.setup(".js-shr-button",{count:{classname:"button__count"}}),document.addEventListener("focusout",function(t){t.target.classList&&!e.contains(t.target)&&t.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(t){9===t.keyCode&&setTimeout(function(){var t=document.activeElement;t&&t.classList&&!e.contains(t)&&t.classList.add("tab-focus")},10)});var t=new In("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"dist/demo.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:An.prod||An.dev,publisherId:"918848828995742"},previewThumbnails:{enabled:!0,src:["https://cdn.plyr.io/static/demo/thumbs/100p.vtt","https://cdn.plyr.io/static/demo/thumbs/240p.vtt"]}});window.player=t;var n=document.querySelectorAll("[data-source]"),i={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState;function s(e,t,n){e&&e.classList[n?"add":"remove"](t)}function o(e,a){if(e in i&&(a||e!==r)&&(r.length||e!==i.video)){switch(e){case i.video:t.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",type:"video/mp4",size:576},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4",type:"video/mp4",size:720},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4",type:"video/mp4",size:1080},{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4",type:"video/mp4",size:1440}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case i.audio:t.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case i.youtube:t.source={type:"video",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case i.vimeo:t.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}r=e,Array.from(n).forEach(function(e){return s(e.parentElement,"active",!1)}),s(document.querySelector('[data-source="'.concat(e,'"]')),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--".concat(e)).removeAttribute("hidden")}}if(Array.from(n).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");o(t),a&&window.history.pushState({type:t},"","#".concat(t))})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&o(e.state.type)}),a){var l=!r.length;l&&(r=i.video),r in i&&window.history.replaceState({type:r},"",l?"":"#".concat(r)),r!==i.video&&o(r,!0)}})}),An.prod&&Ie.config("https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555").install()}(); //# sourceMappingURL=demo.min.js.map diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map index c86eba94..5ed41268 100644 --- a/demo/dist/demo.min.js.map +++ b/demo/dist/demo.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/raven-js/vendor/json-stringify-safe/stringify.js","node_modules/raven-js/src/utils.js","node_modules/raven-js/vendor/TraceKit/tracekit.js","node_modules/raven-js/vendor/md5/md5.js","node_modules/raven-js/src/configError.js","node_modules/raven-js/src/console.js","node_modules/raven-js/src/raven.js","node_modules/raven-js/src/singleton.js","node_modules/rangetouch/src/js/config.js","node_modules/rangetouch/src/js/utils/is.js","node_modules/rangetouch/src/js/utils/numbers.js","node_modules/rangetouch/src/js/rangetouch.js","node_modules/rangetouch/src/js/utils/css.js","node_modules/rangetouch/src/js/utils/events.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/utils/style.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","demo/src/js/demo.js","src/js/media.js","src/js/plugins/ads.js","src/js/plugins/previewThumbnails.js","src/js/source.js","src/js/plyr.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","undefined","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodedOptions","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","singleton","Client","defaults","addCSS","thumbWidth","watch","getConstructor","instanceOf","Boolean","isNullOrUndefined","isNodeList","NodeList","is","nullOrUndefined","number","Number","isNaN","boolean","array","nodeList","Element","Event","empty","round","step","places","getDecimalPlaces","parseFloat","toFixed","RangeTouch","[object Object]","querySelector","rangeTouch","assign","init","enabled","documentElement","targets","querySelectorAll","MutationObserver","mutations","mutation","addedNodes","node","selector","includes","matches","observe","childList","subtree","style","userSelect","webKitUserSelect","touchAction","listeners","toggle","set","touch","changedTouches","delta","percent","clientRect","getBoundingClientRect","width","clientX","left","disabled","preventDefault","trigger","isEmpty","is$1","weakMap","WeakMap","textNode","Text","keyboardEvent","KeyboardEvent","cue","TextTrackCue","VTTCue","TextTrack","kind","promise","Promise","URL","startsWith","supportsPassiveListeners","supported","defineProperty","toggleListener","_this","passive","events","eventListeners","on","off","once","_this2","onceCallback","_len","_key","triggerEvent","bubbles","detail","CustomEvent","plyr","elements","wrapper","index","child","cloneNode","parent","sibling","nextSibling","insertBefore","setAttributes","attributes","entries","_ref","_slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","trim","class","toggleHidden","hidden","hide","removeAttribute","toggleClass","force","classList","contains","hasClass","getElements","container","getElement","setFocus","tabFocus","focus","preventScroll","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","repaint","offsetHeight","range","browser","isIE","documentMode","isEdge","isWebkit","isIPhone","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","mediaType","isHTML5","media","canPlayType","textTracks","transitions","reducedMotion","matchMedia","html5","getSources","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","play","load","quality","cancelRequests","blankVideo","dedupe","getDeep","_defineProperty","format","replaceAll","toTitleCase","toCamelCase","toPascalCase","getHTML","innerHTML","resources","vimeo","youtube","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","_classCallCheck","storage","store","localStorage","getItem","json","setItem","removeItem","responseType","resolve","reject","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","content","catch","getHours","trunc","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","createBadge","badge","menu","createButton","buttonType","label","labelPressed","iconPressed","control","button","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","setup","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","_ref$badge","_ref$checked","checked","aria-checked","flex","enumerable","children","currentTrack","speed","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","getElementsByTagName","nodeValue","setProgress","buffered","setProperty","updateSeekTooltip","_this4","tooltips","visible","pageX","timeUpdate","invert","invertTime","seeking","durationUpdate","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","getBadge","sorting","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","setSpeedMenu","_this7","isVimeo","some","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","scrollHeight","_this8","size","restore","propertyName","setDownloadLink","download","create","_this9","aria-haspopup","aria-controls","aria-expanded","home","backButton","urls","isEmbed","inject","_this10","floor","seektime","addProperty","controlPressed","_this$config","labels","parser","buildUrlParams","params","URLSearchParams","isVideo","isYouTube","blob","createObjectURL","languages","userLanguage","active","trackEvents","_this$captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","_toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","advertisement","qualityBadge","2160","1440","1080","720","576","480","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","previewThumbnails","thumbContainer","thumbContainerShown","imageContainer","timeContainer","scrubbingContainer","scrubbingContainerShown","google","publisherId","tagUrl","byline","portrait","transparent","noCookie","rel","showinfo","iv_load_policy","modestbranding","providers","types","noop","Console","onChange","first","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","viewport","hasProperty","cleanupViewport","part","Fullscreen","prefix","forceFallback","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","timers","recentTouchSeek","lastSeekTime","setAspectRatio","_ratio$split$map2","padding","paddingBottom","offset","transform","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","usingNative","timeStamp","wasKeyDown","delay","setPlayerSize","measure","rect","resized","_player$fullscreen","isEnter","_setPlayerSize","firstChild","_player$embed$ratio$s2","videoWidth","videoHeight","maxWidth","margin","setGutter","hasAudio","isAudio","ended","proxy","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","currentTarget","hasAttribute","done","seekTo","loaded","startMove","endMove","startScrubbing","endScrubbing","webkitDirectionInvertedFromDevice","_map2","deltaX","deltaY","direction","sign","abs","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","pathStripped","onbeforeload","ev","sheet","cssText","defaultPrevented","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","isDefined","factory","loadScript","assurePlaybackState","hasPlayed","Vimeo","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","_dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","createDocumentFragment","getPaused","seconds","env","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","disablekb","cc_load_policy","cc_lang_pref","widget_referrer","2","5","100","101","150","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","initialized","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","managerPromise","ima","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","setDisableCustomPlaybackForIOS10Plus","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","AdEvent","onAdEvent","cuePoint","seekElement","cuePercentage","ad","getAd","adData","getAdData","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","LOG","adError","getMessage","cancel","addCuePoints","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","zIndex","_this11","destroy","_this12","_this13","AV_PUBLISHERID","AV_CHANNELID","AV_URL","AV_WIDTH","AV_HEIGHT","AV_CDIM2","PreviewThumbnails","thumbnails","lastMouseMoveTime","mouseDown","loadedImages","thumb","scrubbing","getThumbnails","render","determineContainerAutoSizing","promises","u","getThumbnail","vttDataString","processedList","thumbnail","startTime","lineSplit","_lineSplit","_lineSplit$1$split2","w","h","matchTimes","endTime","urlPrefix","tempImage","naturalHeight","percentage","mousePosX","showImageAtCurrentTime","toggleThumbContainer","toggleScrubbingContainer","ceil","lastTime","setScrubbingContainerSize","setThumbContainerSizeAndPos","thumbNum","findIndex","hasThumb","qualityIndex","showingThumb","thumbFilename","thumbUrl","currentImageElement","dataset","showImage","removeOldImages","loadingImage","usingSprites","previewImage","showingThumbFilename","newImage","setImageSizeAndOffset","currentImageContainer","preloadNearby","getHigherQuality","currentImage","removeDelay","deleting","oldThumbFilename","thumbnailsClone","foundOne","newThumbFilename","thumbURL","currentQualityIndex","previewImageHeight","thumbContainerHeight","clearShowing","clientHeight","sizeSpecifiedInCSS","thumbAspectRatio","setThumbContainerPos","seekbarRect","plyrRect","minVal","maxVal","right","clientWidth","previewPos","multiplier","top","currentScrubbingImageElement","currentThumbnailImageElement","insertElements","attribute","change","_sources$","_sources$$provider","crossorigin","Plyr","failed","jQuery","getProviderByUrl","search","truthy","searchParams","tabindex","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","prev","closest","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","inline","Shr","count","classname","remove","add","currentType","historySupport","newSource","srclang","parentElement","cite"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.27.0',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = objectMerge(\n {\n eventId: this.lastEventId(),\n dsn: this._dsn,\n user: this._globalContext.user || {}\n },\n options\n );\n\n if (!options.eventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n if (!options.dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var encodedOptions = [];\n\n for (var key in options) {\n if (key === 'user') {\n var user = options.user;\n if (user.name) encodedOptions.push('name=' + encode(user.name));\n if (user.email) encodedOptions.push('email=' + encode(user.email));\n } else {\n encodedOptions.push(encode(key) + '=' + encode(options[key]));\n }\n }\n var globalServer = this._getGlobalServer(this._parseDSN(options.dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&');\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || ''}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || ''\n }\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || ''}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || ''\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","const defaults = {\n addCSS: true, // Add CSS to the element to improve usability (required here or in your CSS!)\n thumbWidth: 15, // The width of the thumb handle\n watch: true, // Watch for new elements that match a string target\n};\n\nexport default defaults;","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isEvent = input => instanceOf(input, Event);\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n nodeList: isNodeList,\n element: isElement,\n event: isEvent,\n empty: isEmpty,\n};\n","// Get the number of decimal places\nexport function getDecimalPlaces(value) {\n const match = `${value}`.match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n if (!match) {\n return 0;\n }\n\n return Math.max(\n 0,\n // Number of digits right of decimal point.\n (match[1] ? match[1].length : 0) -\n // Adjust for scientific notation.\n (match[2] ? +match[2] : 0),\n );\n}\n\n// Round to the nearest step\nexport function round(number, step) {\n if (step < 1) {\n const places = getDecimalPlaces(step);\n return parseFloat(number.toFixed(places));\n }\n return Math.round(number / step) * step;\n}\n\nexport default {};\n","// ==========================================================================\n// rangetouch.js v2.0.0\n// Making work on touch devices\n// https://github.com/sampotts/rangetouch\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport defaults from './config';\nimport { matches } from './utils/css';\nimport { trigger } from './utils/events';\nimport is from './utils/is';\nimport { round } from './utils/numbers';\n\nclass RangeTouch {\n /**\n * Setup a new instance\n * @param {String|Element} target\n * @param {Object} options\n */\n constructor(target, options) {\n if (is.element(target)) {\n // An Element is passed, use it directly\n this.element = target;\n } else if (is.string(target)) {\n // A CSS Selector is passed, fetch it from the DOM\n this.element = document.querySelector(target);\n }\n\n if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {\n return;\n }\n\n this.config = Object.assign({}, defaults, options);\n\n this.init();\n }\n\n static get enabled() {\n return 'ontouchstart' in document.documentElement;\n }\n\n /**\n * Setup multiple instances\n * @param {String|Element|NodeList|Array} target\n * @param {Object} options\n */\n static setup(target, options = {}) {\n let targets = null;\n\n if (is.empty(target) || is.string(target)) {\n targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type=\"range\"]'));\n } else if (is.element(target)) {\n targets = [target];\n } else if (is.nodeList(target)) {\n targets = Array.from(target);\n } else if (is.array(target)) {\n targets = target.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n const config = Object.assign({}, defaults, options);\n\n if (is.string(target) && config.watch) {\n // Create an observer instance\n const observer = new MutationObserver(mutations => {\n Array.from(mutations).forEach(mutation => {\n Array.from(mutation.addedNodes).forEach(node => {\n if (!is.element(node) || !matches(node, target)) {\n return;\n }\n\n // eslint-disable-next-line no-unused-vars\n const range = new RangeTouch(node, config);\n });\n });\n });\n\n // Pass in the target node, as well as the observer options\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n return targets.map(t => new RangeTouch(t, options));\n }\n\n init() {\n // Bail if not a touch enabled device\n if (!RangeTouch.enabled) {\n return;\n }\n\n // Add useful CSS\n if (this.config.addCSS) {\n // TODO: Restore original values on destroy\n this.element.style.userSelect = 'none';\n this.element.style.webKitUserSelect = 'none';\n this.element.style.touchAction = 'manipulation';\n }\n\n this.listeners(true);\n\n this.element.rangeTouch = this;\n }\n\n destroy() {\n // Bail if not a touch enabled device\n if (!RangeTouch.enabled) {\n return;\n }\n\n this.listeners(false);\n\n this.element.rangeTouch = null;\n }\n\n listeners(toggle) {\n const method = toggle ? 'addEventListener' : 'removeEventListener';\n\n // Listen for events\n ['touchstart', 'touchmove', 'touchend'].forEach(type => {\n this.element[method](type, event => this.set(event), false);\n });\n }\n\n /**\n * Get the value based on touch position\n * @param {Event} event\n */\n get(event) {\n if (!RangeTouch.enabled || !is.event(event)) {\n return null;\n }\n\n const input = event.target;\n const touch = event.changedTouches[0];\n const min = parseFloat(input.getAttribute('min')) || 0;\n const max = parseFloat(input.getAttribute('max')) || 100;\n const step = parseFloat(input.getAttribute('step')) || 1;\n const delta = max - min;\n\n // Calculate percentage\n let percent;\n const clientRect = input.getBoundingClientRect();\n const thumbWidth = ((100 / clientRect.width) * (this.config.thumbWidth / 2)) / 100;\n\n // Determine left percentage\n percent = (100 / clientRect.width) * (touch.clientX - clientRect.left);\n\n // Don't allow outside bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Factor in the thumb offset\n if (percent < 50) {\n percent -= (100 - percent * 2) * thumbWidth;\n } else if (percent > 50) {\n percent += (percent - 50) * 2 * thumbWidth;\n }\n\n // Find the closest step to the mouse position\n return min + round(delta * (percent / 100), step);\n }\n\n /**\n * Update range value based on position\n * @param {Event} event\n */\n set(event) {\n if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {\n return;\n }\n\n // Prevent text highlight on iOS\n event.preventDefault();\n\n // Set value\n event.target.value = this.get(event);\n\n // Trigger event\n trigger(event.target, event.type === 'touchend' ? 'change' : 'input');\n }\n}\n\nexport default RangeTouch;\n","// Element matches a selector\nexport function matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\nexport default {};\n","// Trigger event\nexport function trigger(element, type) {\n if (!element || !type) {\n return;\n }\n\n // Create and dispatch the event\n const event = new Event(type);\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\nexport default {};\n","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\nconst isPromise = input => instanceOf(input, Promise);\n\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (e) {\n return false;\n }\n};\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(resolve =>\n this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve),\n ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n }\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.object(existing) && is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n if (!is.element(element)) {\n return;\n }\n\n const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = document.activeElement;\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n }\n\n // Set regular focus\n element.focus({ preventScroll: true });\n\n // If we want to mimic keyboard focus via tab\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n try {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\n } catch (e) {\n // Do nothing\n }\n }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isEdge: window.navigator.userAgent.includes('Edge'),\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n\n return false;\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(input) {\n if (is.empty(input)) {\n return false;\n }\n\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (e) {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter(source => {\n const type = source.getAttribute('type');\n\n if (is.empty(type)) {\n return true;\n }\n\n return support.mime.call(this, type);\n });\n },\n\n // Get quality levels\n getQualityOptions() {\n // Get sizes from elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('size')))\n .filter(Boolean);\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(source => source.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n // Get first match for requested size\n const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n player.play();\n }\n });\n\n // Load new source\n player.media.load();\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(\n new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n replace.toString(),\n );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([key, value]) => {\n string = replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => Math.trunc((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => Math.trunc((value / 60) % 60, 10);\nexport const getSeconds = value => Math.trunc(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport RangeTouch from 'rangetouch';\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n setFocus,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(\n `.${this.config.classNames.tooltip}`,\n );\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n });\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a
to hide the standard controls and UI\n if (this.isVimeo && this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n\n return { padding, ratio };\n}\n\nexport default { setAspectRatio };\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { setAspectRatio } from './utils/style';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = (player.duration / 10) * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keycodes should we prevent default\n const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n player.forward();\n break;\n\n case 37:\n // Arrow back\n player.rewind();\n break;\n\n case 70:\n // F key\n player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n player.loop = !player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (code === 27 && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n }\n\n setTabFocus(event) {\n const { player } = this;\n const { elements } = player;\n\n clearTimeout(this.focusTimer);\n\n // Ignore any key other than tab\n if (event.type === 'keydown' && event.which !== 9) {\n return;\n }\n\n // Store reference to event timeStamp\n if (event.type === 'keydown') {\n this.lastKeyDown = event.timeStamp;\n }\n\n // Remove current classes\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n };\n\n // Determine if a key was pressed to trigger this event\n const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n // Ignore focus events if a key was pressed prior\n if (event.type === 'focus' && !wasKeyDown) {\n return;\n }\n\n // Remove all current\n removeCurrent();\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement;\n\n // Ignore if current focus element isn't inside the player\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n\n // Tab focus detection\n toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n }\n\n // Container listeners\n container() {\n const { player } = this;\n const { config, elements, timers } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = elements;\n\n // Remove button states for fullscreen\n if (controls && event.type === 'enterfullscreen') {\n controls.pressed = false;\n controls.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n\n // Force edge to repaint on exit fullscreen\n // TODO: Fix weird bug where Edge doesn't re-draw when exiting fullscreen\n /* if (browser.isEdge) {\n on.call(player, elements.container, 'exitfullscreen', () => {\n setTimeout(() => repaint(elements.container), 100);\n });\n } */\n\n // Set a gutter for Vimeo\n const setGutter = (ratio, padding, toggle) => {\n if (!player.isVimeo) {\n return;\n }\n\n const target = player.elements.wrapper.firstChild;\n const [, height] = ratio.split(':').map(Number);\n const [videoWidth, videoHeight] = player.embed.ratio.split(':').map(Number);\n\n target.style.maxWidth = toggle ? `${(height / videoHeight) * videoWidth}px` : null;\n target.style.margin = toggle ? '0 auto' : null;\n };\n\n // Resize on fullscreen change\n const setPlayerSize = measure => {\n // If we don't need to measure the viewport\n if (!measure) {\n return setAspectRatio.call(player);\n }\n\n const rect = elements.container.getBoundingClientRect();\n const { width, height } = rect;\n\n return setAspectRatio.call(player, `${width}:${height}`);\n };\n\n const resized = () => {\n window.clearTimeout(timers.resized);\n timers.resized = window.setTimeout(setPlayerSize, 50);\n };\n\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const { target, usingNative } = player.fullscreen;\n\n // Ignore for iOS native\n if (!player.isEmbed || target !== elements.container) {\n return;\n }\n\n const isEnter = event.type === 'enterfullscreen';\n\n // Set the player size when entering fullscreen to viewport size\n const { padding, ratio } = setPlayerSize(isEnter);\n\n // Set Vimeo gutter\n setGutter(ratio, padding, isEnter);\n\n // If not using native fullscreen, we need to check for resizes of viewport\n if (!usingNative) {\n if (isEnter) {\n on.call(player, window, 'resize', resized);\n } else {\n off.call(player, window, 'resize', resized);\n }\n }\n });\n }\n\n // Listen for media events\n media() {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event),\n );\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n on.call(player, player.media, 'canplay loadeddata', () => {\n toggleHidden(elements.volume, !player.hasAudio);\n toggleHidden(elements.buttons.mute, !player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event),\n );\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event),\n );\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(event, player.play, 'play');\n } else {\n this.proxy(event, player.togglePlay, 'play');\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadLink.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n }\n\n // Run default and custom handlers\n proxy(event, defaultHandler, customHandlerKey) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n }\n\n // Trigger custom and default handlers\n bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n }\n\n // Listen for control events\n controls() {\n const { player } = this;\n const { elements } = player;\n\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', player.togglePlay, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n\n controls.toggleMenu.call(player, event);\n });\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n event => {\n const code = event.which;\n\n // We only care about space and return\n if (![13, 32].includes(code)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (code === 13) {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.which === 27) {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = (100 / rect.width) * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const code = event.keyCode ? event.keyCode : event.which;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n player.play();\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n event => {\n const seek = event.currentTarget;\n\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event),\n );\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave click', () => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n\n this.bind(elements.progress, 'mouseup touchend', event => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n event => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, elements, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, stripHTML } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n setAspectRatio.call(this);\n\n // Load the API if not already\n if (!is.object(window.Vimeo)) {\n loadScript(this.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams(\n extend(\n {},\n {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n },\n config,\n ),\n );\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = parseId(source);\n\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Get poster, if already set\n const { poster } = player;\n\n // Inject the package\n const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n\n // Get poster image\n fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href).catch(() => {});\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n controls.setDownloadLink.call(player);\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const [width, height] = dimensions;\n player.embed.ratio = `${width}:${height}`;\n setAspectRatio.call(this, player.embed.ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, generateId } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n setAspectRatio.call(this);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (is.string(key) && !is.empty(key)) {\n const url = format(this.config.urls.youtube.api, videoId, key);\n\n fetch(url)\n .then(result => {\n if (is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the