From ead660139489d3b0cf082d97117f735929adaf49 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Mon, 2 Jul 2018 23:11:59 +1000 Subject: [PATCH] Merge --- demo/dist/demo.css | 1 + demo/dist/demo.min.js | 2 ++ demo/dist/demo.min.js.map | 1 + demo/dist/error.css | 1 + dist/plyr.css | 1 + dist/plyr.min.js | 2 ++ dist/plyr.min.js.map | 1 + dist/plyr.polyfilled.min.js | 2 ++ dist/plyr.polyfilled.min.js.map | 1 + dist/plyr.svg | 1 + 10 files changed, 13 insertions(+) create mode 100644 demo/dist/demo.css create mode 100644 demo/dist/demo.min.js create mode 100644 demo/dist/demo.min.js.map create mode 100644 demo/dist/error.css create mode 100644 dist/plyr.css create mode 100644 dist/plyr.min.js create mode 100644 dist/plyr.min.js.map create mode 100644 dist/plyr.polyfilled.min.js create mode 100644 dist/plyr.polyfilled.min.js.map create mode 100644 dist/plyr.svg diff --git a/demo/dist/demo.css b/demo/dist/demo.css new file mode 100644 index 00000000..9ea80efb --- /dev/null +++ b/demo/dist/demo.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js new file mode 100644 index 00000000..52cbd81a --- /dev/null +++ b/demo/dist/demo.min.js @@ -0,0 +1,2 @@ +"object"==typeof navigator&&function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var t,r=(function(e,t){function r(e,t){for(var r=0;r0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function l(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!d(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&g(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){if(null!=e){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])}},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;no?e(t,n-1):a},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 r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""},sanitize:function(e,t){if(!s(t)||s(t)&&0===t.length)return e;var n,o=p(t),a="********";try{n=JSON.parse(r(e))}catch(t){return e}return function e(t){return s(t)?t.map(function(t){return e(t)}):i(t)?Object.keys(t).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=e(t[n]),r},{}):t}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(t)?t.message:t;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var h,p={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(O))&&(f=h[1],u=h[2]);p.func=S,a({name:f,message:u,url:C(),stack:[p]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=w.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=x.onerror,x.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(x.onerror=e,t=!1,e=void 0),r=[]},l}(),w.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),p=l.length;h eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",m=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(m){var _=m[1];"~"===_.charAt(0)&&(_=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+_.slice(1)),n.url=_.slice(0,-4)}}}u.push(n)}return u.length?{name:e.name,message:e.message,url:C(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=S),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==w.report){if(a={url:null,func:S,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var p={name:e.name,message:e.message,url:C(),stack:c};return t(p,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),p}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(w.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(w.debug)throw e}return{name:t.name,message:t.message,url:C()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var R=w;function j(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function T(e,t,r,n,o,i){return j((a=j(j(t,e),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function F(e,t,r,n,o,i,a){return T(t&r|~t&n,e,t,o,i,a)}function D(e,t,r,n,o,i,a){return T(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return T(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return T(r^(t|~n),e,t,o,i,a)}function M(e,t){var r,n,o,i,a;e[t>>5]|=128<>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(M(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(t)),512+8*t.length),H(M(a.concat(n),640))}(I(e),I(t))}var q=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function z(e){this.name="RavenConfigError",this.message=e}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=E.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(E.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,ee=E.isString,te=E.isArray,re=E.isEmptyObject,ne=E.each,oe=E.objectMerge,ie=E.truncate,ae=E.objectFrozen,se=E.hasKey,ce=E.joinRegExp,le=E.urlencode,ue=E.uuid4,he=E.htmlTreeAsString,pe=E.isSameException,fe=E.isSameStacktrace,de=E.parseUrl,ge=E.fill,me=E.supportsFetch,_e=E.supportsReferrerPolicy,ve=E.serializeKeysForMessage,be=E.serializeException,ye=E.sanitize,Ee=W,we="source protocol user pass host port path".split(" "),xe=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ke(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Oe=Se.document,Ce=Se.navigator;function Re(e,t){return Q(t)?function(r){return t(r,e)}:t}function je(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Oe),this._hasNavigator=!Z(Ce),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",keepalive:!0,referrerPolicy:_e()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ke(),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]}je.prototype={VERSION:"3.26.2",debug:!1,TraceKit:R,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ne(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ce(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ce(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ce(n.whitelistUrls),n.includePaths=ce(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=oe(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=oe(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(R.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),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return Q(e)&&(r=t||[],t=e,e={}),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(Z(t)&&!Q(e))return e;if(Q(e)&&(t=e,e=void 0),!Q(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)se(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return R.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=oe({trimHeadFrames:0},t||{}),V(e)&&e.error)e=e.error;else{if($(e)||X(e)){var r=e.name||($(e)?"DOMError":"DOMException"),n=e.message?r+": "+e.message:r;return this.captureMessage(n,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!Y(e))return this.captureMessage(e,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var o=R.computeStackTrace(e);this._handleStackInfo(o,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=oe(e,{message:"Non-Error exception captured with keys: "+ve(r),fingerprint:[q(r)],extra:e.extra||{}});return n.extra.__serialized__=be(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=oe({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=R.computeStackTrace(r),i=te(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=oe({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=te(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=oe({timestamp:ke()/1e3},e);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(G(r)&&!re(r))t=r;else if(!1===r)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(r(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=Re(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Re(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Re(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(Oe){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new K("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Oe.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Oe.head||Oe.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Oe.createEvent?(r=Oe.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=Oe.createEventObject()).eventType=e,t)se(t,n)&&(r[n]=t[n]);if(Oe.createEvent)Oe.dispatchEvent(r);else try{Oe.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=he(r.target)}catch(e){n=""}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=de(this._location.href),n=de(t),o=de(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.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 r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i"}}},a)),t.apply?t.apply(this,o):t(o[0],o[1])}}var n=this._globalOptions.autoBreadcrumbs;function o(r){var o=Se[r]&&Se[r].prototype;o&&o.hasOwnProperty&&o.hasOwnProperty("addEventListener")&&(ge(o,"addEventListener",function(t){return function(o,i,a,s){try{i&&i.handleEvent&&(i.handleEvent=e.wrap({mechanism:{type:"instrument",data:{target:r,function:"handleEvent",handler:i&&i.name||""}}},i.handleEvent))}catch(e){}var c,l,u;return n&&n.dom&&("EventTarget"===r||"Node"===r)&&(l=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),c=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?l(e):"keypress"===t?u(e):void 0}}),t.call(this,o,e.wrap({mechanism:{type:"instrument",data:{target:r,function:"addEventListener",handler:i&&i.name||""}}},i,c),a,s)}},t),ge(o,"removeEventListener",function(e){return function(t,r,n,o){try{r=r&&(r.__raven_wrapper__?r.__raven_wrapper__:r)}catch(e){}return e.call(this,t,r,n,o)}},t))}ge(Se,"setTimeout",r,t),ge(Se,"setInterval",r,t),Se.requestAnimationFrame&&ge(Se,"requestAnimationFrame",function(t){return function(r){return t(e.wrap({mechanism:{type:"instrument",data:{function:"requestAnimationFrame",handler:t&&t.name||""}}},r))}},t);for(var i=["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"],a=0;a"}}},r)})}if(t.xhr&&"XMLHttpRequest"in Se){var o=Se.XMLHttpRequest&&Se.XMLHttpRequest.prototype;ge(o,"open",function(t){return function(r,n){return ee(n)&&-1===n.indexOf(e._globalKey)&&(this.__raven_xhr={method:r,url:n,status_code:null}),t.apply(this,arguments)}},r),ge(o,"send",function(t){return function(){var r=this;function o(){if(r.__raven_xhr&&4===r.readyState){try{r.__raven_xhr.status_code=r.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:r.__raven_xhr})}}for(var i=["onload","onerror","onprogress"],a=0;a"}}},t,o)}):r.onreadystatechange=o,t.apply(this,arguments)}},r)}t.xhr&&me()&&ge(Se,"fetch",function(t){return function(){for(var r=new Array(arguments.length),n=0;n2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};ge(Se.history,"pushState",c,r),ge(Se.history,"replaceState",c,r)}if(t.console&&"console"in Se&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ne(["debug","info","warn","error","log"],function(e,t){Ee(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ne(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=xe.exec(e),r={},n=7;try{for(;n--;)r[we[n]]=t[n]||""}catch(t){throw new K("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_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 r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ne(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o0&&(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]||re(e[t]))&&delete e[t]}),Q(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!re(e)&&(Q(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random() 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 keepalive: true,\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.26.2',\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 if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\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 = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\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 // 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","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n clickToPlay: false,\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (\n !(type in types) ||\n (!init && type === currentType) ||\n (!currentType.length && type === types.video)\n ) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n },\n ],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [\n {\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n },\n ],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file diff --git a/demo/dist/error.css b/demo/dist/error.css new file mode 100644 index 00000000..4898e3e7 --- /dev/null +++ b/demo/dist/error.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}.error body,html.error{height:100%}html.error{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed}.error body{align-items:center;display:flex;width:100%}.error main{padding:20px;text-align:center;width:100%}.error main p{font-size:18px;font-size:1.125rem}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none} \ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css new file mode 100644 index 00000000..7495d1db --- /dev/null +++ b/dist/plyr.css @@ -0,0 +1 @@ +@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0;margin-right:auto}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important} \ No newline at end of file diff --git a/dist/plyr.min.js b/dist/plyr.min.js new file mode 100644 index 00000000..1a3a616f --- /dev/null +++ b/dist/plyr.min.js @@ -0,0 +1,2 @@ +"object"==typeof navigator&&function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e=function(e){return null!=e?e.constructor:null},t=function(e,t){return Boolean(e&&t&&e instanceof t)},i=function(e){return null==e},n=function(t){return e(t)===Object},a=function(t){return e(t)===String},s=function(e){return Array.isArray(e)},r=function(e){return t(e,NodeList)},l=function(e){return i(e)||(a(e)||s(e)||r(e))&&!e.length||n(e)&&!Object.keys(e).length},o={nullOrUndefined:i,object:n,number:function(t){return e(t)===Number&&!Number.isNaN(t)},string:a,boolean:function(t){return e(t)===Boolean},function:function(t){return e(t)===Function},array:s,weakMap:function(e){return t(e,WeakMap)},nodeList:r,element:function(e){return t(e,Element)},textNode:function(t){return e(t)===Text},event:function(e){return t(e,Event)},cue:function(e){return t(e,window.TextTrackCue)||t(e,window.VTTCue)},track:function(e){return t(e,TextTrack)||!i(e)&&a(e.kind)},url:function(e){if(t(e,window.URL))return!0;var i=e;e.startsWith("http://")&&e.startsWith("https://")||(i="http://"+e);try{return!l(new URL(i).hostname)}catch(e){return!1}},empty:l},c=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 u(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e&&"addEventListener"in e&&!o.empty(t)&&o.function(i)){var l=t.split(" "),u=r;c&&(u={passive:s,capture:r}),l.forEach(function(t){a&&a.eventListeners&&n&&a.eventListeners.push({element:e,type:t,callback:i,options:u}),e[n?"addEventListener":"removeEventListener"](t,i,u)})}}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!0,n,a)}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,i,!1,n,a)}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.call(this,e,t,function s(){h(e,t,s,n,a);for(var r=arguments.length,l=Array(r),o=0;o1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(o.element(e)&&!o.empty(t)){var a=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:this})});e.dispatchEvent(a)}}var f=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},g=function(){function e(e,t){for(var i=0;i0?t.cloneNode(!0):t,a=e.parentNode,s=e.nextSibling;n.appendChild(e),s?a.insertBefore(n,s):a.appendChild(n)})}function k(e,t){o.element(e)&&!o.empty(t)&&Object.entries(t).filter(function(e){var t=v(e,2)[1];return!o.nullOrUndefined(t)}).forEach(function(t){var i=v(t,2),n=i[0],a=i[1];return e.setAttribute(n,a)})}function w(e,t,i){var n=document.createElement(e);return o.object(t)&&k(n,t),o.string(i)&&(n.innerText=i),n}function T(e,t,i,n){o.element(t)&&t.appendChild(w(e,i,n))}function A(e){o.nodeList(e)||o.array(e)?Array.from(e).forEach(A):o.element(e)&&o.element(e.parentNode)&&e.parentNode.removeChild(e)}function C(e){if(o.element(e))for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1}function E(e,t){return o.element(t)&&o.element(t.parentNode)&&o.element(e)?(t.parentNode.replaceChild(e,t),e):null}function P(e,t){if(!o.string(e)||o.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),a=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),r=s[0],l=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":o.object(n)&&o.string(n.class)&&(n.class+=" "+a),i.class=a;break;case"#":i.id=t.replace("#","");break;case"[":i[r]=l}}),i}function S(e,t){if(o.element(e)){var i=t;o.boolean(i)||(i=!e.hasAttribute("hidden")),i?e.setAttribute("hidden",""):e.removeAttribute("hidden")}}function N(e,t,i){if(o.element(e)){var n="toggle";return void 0!==i&&(n=i?"add":"remove"),e.classList[n](t),e.classList.contains(t)}return null}function M(e,t){return o.element(e)&&e.classList.contains(t)}function L(e,t){var i={Element:Element};return(i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function x(e){return this.elements.container.querySelectorAll(e)}function _(e){return this.elements.container.querySelector(e)}function I(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null}function q(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o.element(e)&&(e.focus(),t&&N(e,this.config.classNames.tabFocus))}var O,j,R,B=(O=document.createElement("span"),j={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},R=Object.keys(j).find(function(e){return void 0!==O.style[e]}),!!o.string(R)&&j[R]);var H,V={isIE:!!document.documentMode,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)},D={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},F={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=V.isIPhone&&i&&F.playsinline,a=F[e]||"html5"!==t;return{api:a,ui:a&&F.rangeInput&&("video"!==e||!V.isIPhone||n)}},pip:!V.isIPhone&&o.function(w("video").webkitSetPresentationMode),airplay:o.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=e.split("/"),i=v(t,1)[0];if(!this.isHTML5||i!==this.type)return!1;var n=void 0;e&&e.includes("codecs=")?n=e:"audio/mpeg"===e?n="audio/mpeg;":e in D&&(n=e+'; codecs="'+D[e]+'"');try{return Boolean(n&&this.media.canPlayType(n).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(H=document.createElement("input"),H.type="range","range"===H.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==B,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},U={getSources:function(){var e=this;return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter(function(t){return F.mime.call(e,t.getAttribute("type"))}):[]},getQualityOptions:function(){return U.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=U.getSources.call(e).find(function(t){return t.getAttribute("src")===e.source});return t&&Number(t.getAttribute("size"))},set:function(t){var i=U.getSources.call(e).find(function(e){return Number(e.getAttribute("size"))===t});if(i){var n=e.media,a=n.currentTime,s=n.paused,r=n.preload,l=n.readyState;e.media.src=i.getAttribute("src"),("none"!==r||l)&&(e.once("loadedmetadata",function(){e.currentTime=a,s||e.play()}),e.media.load()),m.call(e,e.media,"qualitychange",!1,{quality:t})}}})}},cancelRequests:function(){this.isHTML5&&(A(U.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function z(e,t){return t.split(".").reduce(function(e,t){return e&&e[t]},e)}function W(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())}function Q(){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 J(){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=Y(e,"-"," "),e=Y(e,"_"," "),Y(e=Q(e)," ","")}(e)).charAt(0).toLowerCase()+e.slice(1)}function $(e){var t=document.createElement("div");return t.appendChild(e),t.innerHTML}var G=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o.empty(e)||o.empty(t))return"";var i=z(t.i18n,e);if(o.empty(i))return"";var n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=v(e,2),n=t[0],a=t[1];i=Y(i,n,a)}),i};function X(e){return o.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e}var Z=function(){function e(t){f(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return g(e,[{key:"get",value:function(t){if(!e.supported||!this.enabled)return null;var i=window.localStorage.getItem(this.key);if(o.empty(i))return null;var n=JSON.parse(i);return o.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&o.object(t)){var i=this.get();o.empty(i)&&(i={}),W(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{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 ee(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var a=new XMLHttpRequest;if(!("withCredentials"in a))return;a.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(a.responseText))}catch(e){i(a.responseText)}else i(a.response)}),a.addEventListener("error",function(){throw new Error(a.status)}),a.open("GET",e,!0),a.responseType=t,a.send()}catch(e){n(e)}})}function te(e,t){if(o.string(e)){var i=o.string(t),n=function(){return null!==document.getElementById(t)},a=function(e,t){e.innerHTML=t,i&&n()||document.body.insertAdjacentElement("afterbegin",e)};if(!i||!n()){var s=Z.supported,r=document.createElement("div");if(r.setAttribute("hidden",""),i&&r.setAttribute("id",t),s){var l=window.localStorage.getItem("cache-"+t);if(null!==l){var c=JSON.parse(l);a(r,c.content)}}ee(e).then(function(e){o.empty(e)||(s&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a(r,e))}).catch(function(){})}}}var ie=function(e){return parseInt(e/60/60%60,10)},ne=function(e){return parseInt(e/60%60,10)},ae=function(e){return parseInt(e%60,10)};function se(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!o.number(e))return se(null,t,i);var n=function(e){return("0"+e).slice(-2)},a=ie(e),s=ne(e),r=ae(e);return t||a>0?a+=":":a="",(i&&e>0?"-":"")+a+n(s)+":"+n(r)}var re={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||V.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=_.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:x.call(this,this.config.selectors.buttons.play),pause:_.call(this,this.config.selectors.buttons.pause),restart:_.call(this,this.config.selectors.buttons.restart),rewind:_.call(this,this.config.selectors.buttons.rewind),fastForward:_.call(this,this.config.selectors.buttons.fastForward),mute:_.call(this,this.config.selectors.buttons.mute),pip:_.call(this,this.config.selectors.buttons.pip),airplay:_.call(this,this.config.selectors.buttons.airplay),settings:_.call(this,this.config.selectors.buttons.settings),captions:_.call(this,this.config.selectors.buttons.captions),fullscreen:_.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=_.call(this,this.config.selectors.progress),this.elements.inputs={seek:_.call(this,this.config.selectors.inputs.seek),volume:_.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:_.call(this,this.config.selectors.display.buffer),currentTime:_.call(this,this.config.selectors.display.currentTime),duration:_.call(this,this.config.selectors.display.duration)},o.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+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 i=re.getIconUrl.call(this),n=(i.cors?"":i.url)+"#"+this.config.iconPrefix,a=document.createElementNS("http://www.w3.org/2000/svg","svg");k(a,W(t,{role:"presentation",focusable:"false"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use"),r=n+"-"+e;return"href"in s?s.setAttributeNS("http://www.w3.org/1999/xlink","href",r):s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r),a.appendChild(s),a},createLabel:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i={pip:"PIP",airplay:"AirPlay"}[e]||G(e,this.config);return w("span",Object.assign({},t,{class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")}),i)},createBadge:function(e){if(o.empty(e))return null;var t=w("span",{class:this.config.classNames.menu.value});return t.appendChild(w("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=w("button"),n=Object.assign({},t),a=J(e),s=!1,r=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)||(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":s=!0,r="play",c="pause",l="play",u="pause";break;case"mute":s=!0,r="mute",c="unmute",l="volume",u="muted";break;case"captions":s=!0,r="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":s=!0,r="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",a="play",r="play",l="play";break;default:r=a,l=e}s?(i.appendChild(re.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(re.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(re.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(re.createLabel.call(this,r,{class:"label--not-pressed"}))):(i.appendChild(re.createIcon.call(this,l)),i.appendChild(re.createLabel.call(this,r))),W(n,P(this.config.selectors.buttons[a],n)),k(i,n),"play"===a?(o.array(this.elements.buttons[a])||(this.elements.buttons[a]=[]),this.elements.buttons[a].push(i)):this.elements.buttons[a]=i;var d=this.config.classNames.controlPressed;return Object.defineProperty(i,"pressed",{enumerable:!0,get:function(){return M(i,d)},set:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];N(i,d,e)}}),i},createRange:function(e,t){var i=w("input",W(P(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":G(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,re.updateRangeFill.call(this,i),i},createProgress:function(e,t){var i=w("progress",W(P(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(w("span",null,"0"));var n={played:"played",buffer:"buffered"}[e],a=n?G(n,this.config):"";i.innerText="% "+a.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=P(this.config.selectors.display[e]),i=w("div",W(t,{class:(this.config.classNames.display.time+" "+(t.class?t.class:"")).trim(),"aria-label":G(e,this.config)}),"00:00");return this.elements.display[e]=i,i},createMenuItem:function(e){var t=this,i=e.value,n=e.list,a=e.type,s=e.title,r=e.badge,l=void 0===r?null:r,c=e.checked,u=void 0!==c&&c,d=P(this.config.selectors.inputs[a]),h=w("button",W(d,{type:"button",role:"menuitemradio",class:(this.config.classNames.control+" "+(d.class?d.class:"")).trim(),"aria-checked":u,value:i})),p=w("span");p.innerHTML=s,o.element(l)&&p.appendChild(l),h.appendChild(p),Object.defineProperty(h,"checked",{enumerable:!0,get:function(){return"true"===h.getAttribute("aria-checked")},set:function(e){e&&Array.from(h.parentNode.children).filter(function(e){return L(e,'[role="menuitemradio"]')}).forEach(function(e){return e.setAttribute("aria-checked","false")}),h.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(h,"click",function(){switch(h.checked=!0,a){case"language":t.currentTrack=Number(i);break;case"quality":t.quality=i;break;case"speed":t.speed=parseFloat(i)}re.showMenuPanel.call(t,"home")},a),n.appendChild(h)},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 o.number(e)?se(e,ie(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,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.element(e)&&o.number(t)&&(e.innerText=re.formatTime(t,i))},updateVolume:function(){this.supported.ui&&(o.element(this.elements.inputs.volume)&&re.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),o.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;o.element(e)&&(e.value=t,re.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&o.event(e)){var i,n,a=0;if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":i=this.currentTime,n=this.duration,a=0===i||0===n||Number.isNaN(i)||Number.isNaN(n)?0:(i/n*100).toFixed(2),"timeupdate"===e.type&&re.setRange.call(this,this.elements.inputs.seek,a);break;case"playing":case"progress":!function(e,i){var n=o.number(i)?i:0,a=o.element(e)?e:t.elements.display.buffer;if(o.element(a)){a.value=n;var s=a.getElementsByTagName("span")[0];o.element(s)&&(s.childNodes[0].nodeValue=n)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=o.event(e)?e.target:e;if(o.element(t)&&"range"===t.getAttribute("type")){if(L(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);var i=re.formatTime(this.currentTime),n=re.formatTime(this.duration),a=G("seekLabel",this.config);t.setAttribute("aria-valuetext",a.replace("{currentTime}",i).replace("{duration}",n))}else if(L(t,this.config.selectors.inputs.volume)){var s=100*t.value;t.setAttribute("aria-valuenow",s),t.setAttribute("aria-valuetext",s+"%")}else t.setAttribute("aria-valuenow",t.value);V.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&o.element(this.elements.inputs.seek)&&o.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.progress.getBoundingClientRect(),a=this.config.classNames.tooltip+"--visible",s=function(e){N(t.elements.display.seekTooltip,a,e)};if(this.touch)s(!1);else{if(o.event(e))i=100/n.width*(e.pageX-n.left);else{if(!M(this.elements.display.seekTooltip,a))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),re.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",o.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)}}},timeUpdate:function(e){var t=!o.element(this.elements.display.duration)&&this.config.invertTime;re.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||re.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){if(this.duration>=Math.pow(2,32))return S(this.elements.display.currentTime,!0),void S(this.elements.progress,!0);o.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);var e=o.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&re.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&re.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),re.updateSeekTooltip.call(this)}},toggleMenuButton:function(e,t){S(this.elements.settings.buttons[e],!t)},updateSetting:function(e,t,i){var n=this.elements.settings.panels[e],a=null,s=t;if("captions"===e)a=this.currentTrack;else{if(a=o.empty(i)?this[e]:i,o.empty(a)&&(a=this.config[e].default),!o.empty(this.options[e])&&!this.options[e].includes(a))return void this.debug.warn("Unsupported value of '"+a+"' for "+e);if(!this.config[e].options.includes(a))return void this.debug.warn("Disabled value of '"+a+"' for "+e)}if(o.element(s)||(s=n&&n.querySelector('[role="menu"]')),o.element(s)){this.elements.settings.buttons[e].querySelector("."+this.config.classNames.menu.value).innerHTML=re.getLabel.call(this,e,a);var r=s&&s.querySelector('[value="'+a+'"]');o.element(r)&&(r.checked=!0)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?G("normal",this.config):t+"×";case"quality":if(o.number(t)){var i=G("qualityLabel."+t,this.config);return i.length?i:t+"p"}return Q(t);case"captions":return ce.getLabel.call(this);default:return null}},setQualityMenu:function(e){var t=this;if(o.element(this.elements.settings.panels.quality)){var i=this.elements.settings.panels.quality.querySelector('[role="menu"]');o.array(e)&&(this.options.quality=X(e).filter(function(e){return t.config.quality.options.includes(e)}));var n=!o.empty(this.options.quality)&&this.options.quality.length>1;if(re.toggleMenuButton.call(this,"quality",n),C(i),re.checkMenu.call(this),n){this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){re.createMenuItem.call(t,{value:e,list:i,type:"quality",title:re.getLabel.call(t,"quality",e),badge:function(e){var i=G("qualityBadge."+e,t.config);return i.length?re.createBadge.call(t,i):null}(e)})}),re.updateSetting.call(this,"quality",i)}}},setCaptionsMenu:function(){var e=this;if(o.element(this.elements.settings.panels.captions)){var t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),i=ce.getTracks.call(this),n=Boolean(i.length);if(re.toggleMenuButton.call(this,"captions",n),C(t),re.checkMenu.call(this),n){var a=i.map(function(i,n){return{value:n,checked:e.captions.toggled&&e.currentTrack===n,title:ce.getLabel.call(e,i),badge:i.language&&re.createBadge.call(e,i.language.toUpperCase()),list:t,type:"language"}});a.unshift({value:-1,checked:!this.captions.toggled,title:G("disabled",this.config),list:t,type:"language"}),a.forEach(re.createMenuItem.bind(this)),re.updateSetting.call(this,"captions",t)}}},setSpeedMenu:function(e){var t=this;if(o.element(this.elements.settings.panels.speed)){var i=this.elements.settings.panels.speed.querySelector('[role="menu"]');o.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 n=!o.empty(this.options.speed)&&this.options.speed.length>1;re.toggleMenuButton.call(this,"speed",n),C(i),re.checkMenu.call(this),n&&(this.options.speed.forEach(function(e){re.createMenuItem.call(t,{value:e,list:i,type:"speed",title:re.getLabel.call(t,"speed",e)})}),re.updateSetting.call(this,"speed",i))}},checkMenu:function(){var e=this.elements.settings.buttons,t=!o.empty(e)&&Object.values(e).some(function(e){return!e.hidden});S(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.popup,i=this.elements.buttons.settings;if(o.element(t)&&o.element(i)){var n=o.boolean(e)?e:o.element(t)&&t.hasAttribute("hidden");if(o.event(e)){var a=o.element(t)&&t.contains(e.target),s=e.target===this.elements.buttons.settings;if(a||!a&&!s&&n)return;s&&e.stopPropagation()}if(o.element(i)&&i.setAttribute("aria-expanded",n),o.element(t))if(S(t,!n),N(this.elements.container,this.config.classNames.menu.open,n),n){if(t.removeAttribute("tabindex"),"keydown"===e.type){var r=Object.values(this.elements.settings.panels).find(function(e){return!e.hidden}).querySelector('[role^="menuitem"]');q.call(this,r,!0)}}else t.setAttribute("tabindex",-1)}},getMenuSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return A(t),{width:i,height:n}},showMenuPanel:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=document.getElementById("plyr-settings-"+this.id+"-"+t);if(o.element(i)){var n=i.parentNode,a=Array.from(n.children).find(function(e){return!e.hidden});if(F.transitions&&!F.reducedMotion){n.style.width=a.scrollWidth+"px",n.style.height=a.scrollHeight+"px";var s=re.getMenuSize.call(this,i);d.call(this,n,B,function t(i){i.target===n&&["width","height"].includes(i.propertyName)&&(n.style.width="",n.style.height="",h.call(e,n,B,t))}),n.style.width=s.width+"px",n.style.height=s.height+"px"}S(a,!0),S(i,!1);var r=i.querySelector('[role^="menuitem"]');q.call(this,r,!0)}},create:function(e){var t=this;if(o.empty(this.config.controls))return null;var i=w("div",P(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(re.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(re.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(re.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(re.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=w("div",P(this.config.selectors.progress));if(n.appendChild(re.createRange.call(this,"seek",{id:"plyr-seek-"+e.id})),n.appendChild(re.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=w("span",{class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(re.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(re.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(re.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=w("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume};s.appendChild(re.createRange.call(this,"volume",W(r,{id:"plyr-volume-"+e.id}))),this.elements.volume=s,i.appendChild(s)}if(this.config.controls.includes("captions")&&i.appendChild(re.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!o.empty(this.config.settings)){var l=w("div",{class:"plyr__menu",hidden:""});l.appendChild(re.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var c=w("div",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,hidden:"","aria-labelled-by":"plyr-settings-toggle-"+e.id}),u=w("div"),h=w("div",{id:"plyr-settings-"+e.id+"-home"}),p=w("div",{role:"menu"});h.appendChild(p),u.appendChild(h),this.config.settings.forEach(function(i){var n=w("button",W(P(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",role:"menuitem","aria-haspopup":!0,hidden:""}));d(n,"keydown",function(e){[32,39].includes(e.which)&&(e.preventDefault(),e.stopPropagation(),re.showMenuPanel.call(t,i))},!1),d(n,"click",function(){re.showMenuPanel.call(t,i)});var a=w("span",null,G(i,t.config)),s=w("span",{class:t.config.classNames.menu.value});s.innerHTML=e[i],a.appendChild(s),n.appendChild(a),p.appendChild(n);var r=w("div",{id:"plyr-settings-"+e.id+"-"+i,hidden:""}),l=w("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back"});l.appendChild(w("span",{"aria-hidden":!0},G(i,t.config))),l.appendChild(w("span",{class:t.config.classNames.hidden},G("menuBack",t.config))),d(l,"keydown",function(e){37===e.which&&(e.preventDefault(),e.stopPropagation(),re.showMenuPanel.call(t,"home"))},!1),d(l,"click",function(){re.showMenuPanel.call(t,"home")}),r.appendChild(l),r.appendChild(w("div",{role:"menu"})),u.appendChild(r),t.elements.settings.buttons[i]=n,t.elements.settings.panels[i]=r}),c.appendChild(u),l.appendChild(c),i.appendChild(l),this.elements.settings.popup=c,this.elements.settings.menu=l}return this.config.controls.includes("pip")&&F.pip&&i.appendChild(re.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&F.airplay&&i.appendChild(re.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(re.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(re.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&re.setQualityMenu.call(this,U.getQualityOptions.call(this)),re.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=re.getIconUrl.call(this);t.cors&&te(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null;var n={id:this.id,seektime:this.config.seekTime,title:this.config.title},a=!0;o.string(this.config.controls)||o.element(this.config.controls)?i=this.config.controls:o.function(this.config.controls)?i=this.config.controls.call(this,n):(i=re.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ce.getLabel.call(this)}),a=!1);var s=function(e){var t=e;return Object.entries(n).forEach(function(e){var i=v(e,2),n=i[0],a=i[1];t=Y(t,"{"+n+"}",a)}),t};a&&(o.string(this.config.controls)?i=s(i):o.element(i)&&(i.innerHTML=s(i.innerHTML)));var r,l=void 0;if(o.string(this.config.selectors.controls.container)&&(l=document.querySelector(this.config.selectors.controls.container)),o.element(l)||(l=this.elements.container),o.element(i)?l.appendChild(i):i&&l.insertAdjacentHTML("beforeend",i),o.element(this.elements.controls)||re.findElements.call(this),window.navigator.userAgent.includes("Edge")&&(r=l,setTimeout(function(){S(r,!0),r.offsetHeight,S(r,!1)},0)),this.config.tooltips.controls){var c=this.config,u=c.classNames,d=c.selectors,h=d.controls.wrapper+" "+d.labels+" ."+u.hidden,p=x.call(this,h);Array.from(p).forEach(function(t){N(t,e.config.classNames.hidden,!1),N(t,e.config.classNames.tooltip,!0)})}}};function le(e){var t=e;if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var i=document.createElement("a");i.href=t,t=i.href}try{return new URL(t)}catch(e){return null}}function oe(e){var t=new URLSearchParams;return o.object(e)&&Object.entries(e).forEach(function(e){var i=v(e,2),n=i[0],a=i[1];t.set(n,a)}),t}var ce={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!F.textTracks)o.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&re.setCaptionsMenu.call(this);else{var e,t;if(o.element(this.elements.captions)||(this.elements.captions=w("div",P(this.config.selectors.captions)),e=this.elements.captions,t=this.elements.wrapper,o.element(e)&&o.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),V.isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),i=le(t);null!==i&&i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&ee(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){A(e)})})}var n=X(Array.from(navigator.languages||navigator.userLanguage).map(function(e){return e.split("-")[0]})),a=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();if("auto"===a)a=v(n,1)[0];var s=this.storage.get("captions");if(o.boolean(s)||(s=this.config.captions.active),Object.assign(this.captions,{toggled:!1,active:s,language:a,languages:n}),this.isHTML5){var r=this.config.captions.update?"addtrack removetrack":"removetrack";d.call(this,this.media.textTracks,r,ce.update.bind(this))}setTimeout(ce.update.bind(this),0)}},update:function(){var e=this,t=ce.getTracks.call(this,!0),i=this.captions,n=i.active,a=i.language,s=i.meta,r=i.currentTrackNode,l=Boolean(t.find(function(e){return e.language===a}));this.isHTML5&&this.isVideo&&t.filter(function(e){return!s.get(e)}).forEach(function(t){e.debug.log("Track added",t),s.set(t,{default:"showing"===t.mode}),t.mode="hidden",d.call(e,t,"cuechange",function(){return ce.updateCues.call(e)})}),(l&&this.language!==a||!t.includes(r))&&(ce.setLanguage.call(this,a),ce.toggle.call(this,n&&l)),N(this.elements.container,this.config.classNames.captions.enabled,!o.empty(t)),(this.config.controls||[]).includes("settings")&&this.config.settings.includes("captions")&&re.setCaptionsMenu.call(this)},toggle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.supported.ui){var i=this.captions.toggled,n=this.config.classNames.captions.active,a=o.nullOrUndefined(e)?!i:e;if(a!==i){if(t||(this.captions.active=a,this.storage.set({captions:a})),!this.language&&a&&!t){var s=ce.getTracks.call(this),r=ce.findTrack.call(this,[this.captions.language].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t1&&void 0!==arguments[1])||arguments[1],i=ce.getTracks.call(this);if(-1!==e)if(o.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var n=i[e],a=(n||{}).language;this.captions.currentTrackNode=n,re.updateSetting.call(this,"captions"),t||(this.captions.language=a,this.storage.set({language:a})),this.isVimeo&&this.embed.enableTextTrack(a),m.call(this,this.media,"languagechange")}ce.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&ce.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else ce.toggle.call(this,!1,t)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(o.string(e)){var i=e.toLowerCase();this.captions.language=i;var n=ce.getTracks.call(this),a=ce.findTrack.call(this,[i]);ce.set.call(this,n.indexOf(a),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(i){return!e.isHTML5||t||e.captions.meta.has(i)}).filter(function(e){return["captions","subtitles"].includes(e.kind)})},findTrack:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=ce.getTracks.call(this),a=function(e){return Number((t.captions.meta.get(e)||{}).default)},s=Array.from(n).sort(function(e,t){return a(t)-a(e)}),r=void 0;return e.every(function(e){return!(r=s.find(function(t){return t.language===e}))}),r||(i?s[0]:void 0)},getCurrentTrack:function(){return ce.getTracks.call(this)[this.currentTrack]},getLabel:function(e){var t=e;return!o.track(t)&&F.textTracks&&this.captions.toggled&&(t=ce.getCurrentTrack.call(this)),o.track(t)?o.empty(t.label)?o.empty(t.language)?G("enabled",this.config):e.language.toUpperCase():t.label:G("disabled",this.config)},updateCues:function(e){if(this.supported.ui)if(o.element(this.elements.captions))if(o.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var i=ce.getCurrentTrack.call(this);t=Array.from((i||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map($)}var n=t.map(function(e){return e.trim()}).join("\n");if(n!==this.elements.captions.innerHTML){C(this.elements.captions);var a=w("span",P(this.config.selectors.caption));a.innerHTML=n,this.elements.captions.appendChild(a),m.call(this,this.media,"cuechange")}}else this.debug.warn("updateCues: Invalid input",e);else this.debug.warn("No captions element to render to")}},ue={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.3.12/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},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",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:{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,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","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","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"]',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"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},de={html5:"html5",youtube:"youtube",vimeo:"vimeo"},he={audio:"audio",video:"video"};var pe=function(){},me=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];f(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return g(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):pe}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):pe}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):pe}}]),e}();function fe(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;o.element(e)&&(e.pressed=this.active),m.call(this.player,this.target,this.active?"enterfullscreen":"exitfullscreen",!0),V.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(o.element(e)){var i=x.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],a=i[i.length-1];u.call(this,this.elements.container,"keydown",function(e){if("Tab"===e.key&&9===e.keyCode){var t=I();t!==a||e.shiftKey?t===n&&e.shiftKey&&(a.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}},t,!1)}}.call(this.player,this.target,this.active)}}function ge(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",N(this.target,this.player.config.classNames.fullscreen.fallback,e),fe.call(this)}var ye=function(){function e(t){var i=this;f(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},d.call(this.player,document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){fe.call(i)}),d.call(this.player,this.player.elements.container,"dblclick",function(e){o.element(i.player.elements.controls)&&i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return g(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),N(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(V.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?o.empty(this.prefix)||this.target[this.prefix+"Request"+this.property]():this.target.requestFullscreen():ge.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(V.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!o.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else ge.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{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.prefix?document[""+this.prefix+this.property+"Element"]:document.fullscreenElement)===this.target:M(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return V.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(o.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!o.function(document[t+"ExitFullscreen"])&&!o.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"property",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}();function ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(i,n){var a=new Image,s=function(){delete a.onload,delete a.onerror,(a.naturalWidth>=t?i:n)(a)};Object.assign(a,{onload:s,onerror:s,src:e})})}var be={addStyleHook:function(){N(this.elements.container,this.config.selectors.container.replace(".",""),!0),N(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 "+this.provider+" "+this.type),void be.toggleNativeControls.call(this,!0);o.element(this.elements.controls)||(re.inject.call(this),this.listeners.controls()),be.toggleNativeControls.call(this),this.isHTML5&&ce.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,re.updateVolume.call(this),re.timeUpdate.call(this),be.checkPlaying.call(this),N(this.elements.container,this.config.classNames.pip.supported,F.pip&&this.isHTML5&&this.isVideo),N(this.elements.container,this.config.classNames.airplay.supported,F.airplay&&this.isHTML5),N(this.elements.container,this.config.classNames.isIos,V.isIos),N(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){m.call(e,e.media,"ready")},0),be.setTitle.call(this),this.poster&&be.setPoster.call(this,this.poster,!1).catch(function(){}),this.config.duration&&re.durationUpdate.call(this)},setTitle:function(){var e=G("play",this.config);if(o.string(this.config.title)&&!o.empty(this.config.title)&&(e+=", "+this.config.title),Array.from(this.elements.buttons.play||[]).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=_.call(this,"iframe");if(!o.element(t))return;var i=o.empty(this.config.title)?"video":this.config.title,n=G("frameTitle",this.config);t.setAttribute("title",n.replace("{title}",i))}},togglePoster:function(e){N(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):d.call(e,e.elements.container,"ready",t)}).then(function(){})}.call(this).then(function(){return ve(e)}).catch(function(i){throw e===t.poster&&be.togglePoster.call(t,!1),i}).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('"+e+"')",backgroundSize:""}),be.togglePoster.call(t,!0),e})):Promise.reject(new Error("Poster already set"))},checkPlaying:function(e){var t=this;N(this.elements.container,this.config.classNames.playing,this.playing),N(this.elements.container,this.config.classNames.paused,this.paused),N(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach(function(e){e.pressed=t.playing}),o.event(e)&&"timeupdate"===e.type||be.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(){N(t.elements.container,t.config.classNames.loading,t.loading),be.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},ke=function(){function e(t){f(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return g(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,a=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&o.number(i)){if(n){var s=I();if(o.element(s)&&s!==this.player.elements.inputs.seek&&L(s,this.player.config.selectors.editable))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.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:a||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:a||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:a||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){re.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,N(this.player.elements.container,this.player.config.classNames.isTouch,!0)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.call(this.player,window,"keydown keyup",this.handleKey,e,!1),u.call(this.player,document.body,"click",this.toggleMenu,e),p.call(this.player,document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&d.call(this.player,this.player.elements.container,"keydown keyup",this.handleKey,!1),d.call(this.player,this.player.elements.container,"focusout",function(t){N(t.target,e.player.config.classNames.tabFocus,!1)}),d.call(this.player,this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){N(I(),e.player.config.classNames.tabFocus,!0)},0)}),d.call(this.player,this.player.elements.container,"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen",function(t){var i=e.player.elements.controls;"enterfullscreen"===t.type&&(i.pressed=!1,i.hover=!1);var n=0;["touchstart","touchmove","mousemove"].includes(t.type)&&(be.toggleControls.call(e.player,!0),n=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return be.toggleControls.call(e.player,!1)},n)})}},{key:"media",value:function(){var e=this;if(d.call(this.player,this.player.media,"timeupdate seeking seeked",function(t){return re.timeUpdate.call(e.player,t)}),d.call(this.player,this.player.media,"durationchange loadeddata loadedmetadata",function(t){return re.durationUpdate.call(e.player,t)}),d.call(this.player,this.player.media,"canplay",function(){S(e.player.elements.volume,!e.player.hasAudio),S(e.player.elements.buttons.mute,!e.player.hasAudio)}),d.call(this.player,this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),d.call(this.player,this.player.media,"progress playing seeking seeked",function(t){return re.updateProgress.call(e.player,t)}),d.call(this.player,this.player.media,"volumechange",function(t){return re.updateVolume.call(e.player,t)}),d.call(this.player,this.player.media,"playing play pause ended emptied timeupdate",function(t){return be.checkPlaying.call(e.player,t)}),d.call(this.player,this.player.media,"waiting canplay seeked playing",function(t){return be.checkLoading.call(e.player,t)}),d.call(this.player,this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=_.call(this.player,"."+this.player.config.classNames.video);if(!o.element(t))return;d.call(this.player,t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&d.call(this.player,this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),d.call(this.player,this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),d.call(this.player,this.player.media,"ratechange",function(){re.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),d.call(this.player,this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),d.call(this.player,this.player.media,"qualitychange",function(t){re.updateSetting.call(e.player,"quality",null,t.detail.quality)});var i=this.player.config.events.concat(["keyup","keydown"]).join(" ");d.call(this.player,this.player.media,i,function(t){var i=t.detail,n=void 0===i?{}:i;"error"===t.type&&(n=e.player.media.error),m.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"proxy",value:function(e,t,i){var n=this.player.config.listeners[i],a=!0;o.function(n)&&(a=n.call(this.player,e)),a&&o.function(t)&&t.call(this.player,e)}},{key:"bind",value:function(e,t,i,n){var a=this,s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.player.config.listeners[n],l=o.function(r);d.call(this.player,e,t,function(e){return a.proxy(e,i,n)},s&&!l)}},{key:"controls",value:function(){var e=this,t=V.isIE?"change":"input";this.player.elements.buttons.play&&Array.from(this.player.elements.buttons.play).forEach(function(t){e.bind(t,"click",e.player.togglePlay,"play")}),this.bind(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),this.bind(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),this.bind(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),this.bind(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),this.bind(this.player.elements.buttons.captions,"click",function(){return e.player.toggleCaptions()}),this.bind(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),this.bind(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),this.bind(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),this.bind(this.player.elements.buttons.settings,"click",function(t){re.toggleMenu.call(e.player,t)}),this.bind(this.player.elements.buttons.settings,"keydown",function(t){32===t.which&&(t.preventDefault(),t.stopPropagation(),re.toggleMenu.call(e.player,t))},null,!1),this.bind(this.player.elements.inputs.seek,"mousedown mousemove",function(t){var i=e.player.elements.progress.getBoundingClientRect(),n=100/i.width*(t.pageX-i.left);t.currentTarget.setAttribute("seek-value",n)}),this.bind(this.player.elements.inputs.seek,"mousedown mouseup keydown keyup touchstart touchend",function(t){var i=t.currentTarget,n=t.keyCode?t.keyCode:t.which,a=t.type;if("keydown"!==a&&"keyup"!==a||39===n||37===n){var s=i.hasAttribute("play-on-seeked"),r=["mouseup","touchend","keyup"].includes(t.type);s&&r?(i.removeAttribute("play-on-seeked"),e.player.play()):!r&&e.player.playing&&(i.setAttribute("play-on-seeked",""),e.player.pause())}}),this.bind(this.player.elements.inputs.seek,t,function(t){var i=t.currentTarget,n=i.getAttribute("seek-value");o.empty(n)&&(n=i.value),i.removeAttribute("seek-value"),e.player.currentTime=n/i.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!o.element(this.player.elements.display.duration)&&this.bind(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,re.timeUpdate.call(e.player))}),this.bind(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),V.isWebkit&&Array.from(x.call(this.player,'input[type="range"]')).forEach(function(t){e.bind(t,"input",function(t){return re.updateRangeFill.call(e.player,t.target)})}),this.bind(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return re.updateSeekTooltip.call(e.player,t)}),this.bind(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),this.bind(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),this.bind(this.player.elements.controls,"focusin focusout",function(t){var i=e.player,n=i.config,a=i.elements,s=i.timers;if(N(a.controls,n.classNames.noTransition,"focusin"===t.type),be.toggleControls.call(e.player,"focusin"===t.type),"focusin"===t.type){setTimeout(function(){N(a.controls,n.classNames.noTransition,!1)},0);var r=e.touch?3e3:4e3;clearTimeout(s.controls),s.controls=setTimeout(function(){return be.toggleControls.call(e.player,!1)},r)}}),this.bind(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=[t.deltaX,-t.deltaY].map(function(e){return i?-e:e}),a=v(n,2),s=a[0],r=a[1],l=Math.sign(Math.abs(s)>Math.abs(r)?s:r);e.player.increaseVolume(l/50);var o=e.player.media.volume;(1===l&&o<1||-1===l&&o>0)&&t.preventDefault()},"volume",!1)}}]),e}();"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var we,Te=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function a(e,t){if(e){var a=n[e];if(i[e]=t,a)for(;a.length;)a[0](e,t),a.splice(0,1)}}function s(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,n,a){var s,l,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,h=t.replace(/^(css|img)!/,"");a=a||0,/(^css!|\.css$)/.test(t)?(s=!0,(l=o.createElement("link")).rel="stylesheet",l.href=h):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(l=o.createElement("img")).src=h:((l=o.createElement("script")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(s&&"hideFocus"in l)try{l.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(a+=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=se(Math.max(e.manager.getRemainingTime(),0)),i=G("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),o.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e1?i-1:0),a=1;a1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(A(t.elements.buttons.play),A(t.elements.captions),A(t.elements.controls),A(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),o.function(e)&&e()):(function(){this&&this.eventListeners&&(this.eventListeners.forEach(function(e){var t=e.element,i=e.type,n=e.callback,a=e.options;t.removeEventListener(i,n,a)}),this.eventListeners=[])}.call(t),E(t.elements.original,t.elements.container),m.call(t,t.elements.original,"destroyed",!0),o.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),be.toggleNativeControls.call(this,!0),n()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&o.function(this.embed.destroy)&&this.embed.destroy(),n()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200))}}},{key:"supports",value:function(e){return F.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===de.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===de.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===de.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===he.video)}},{key:"isAudio",get:function(){return Boolean(this.type===he.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=o.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log("Seeking to "+this.currentTime+" seconds")}},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return o.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,i=o.number(t)&&t!==1/0?t:0;return e||i}},{key:"volume",set:function(e){var t=e;o.string(t)&&(t=Number(t)),o.number(t)||(t=this.storage.get("volume")),o.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!o.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;o.boolean(t)||(t=this.storage.get("muted")),o.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;o.number(e)&&(t=e),o.number(t)||(t=this.storage.get("speed")),o.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 ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=this.config.quality,i=this.options.quality;if(i.length){var n=[!o.empty(e)&&Number(e),this.storage.get("quality"),t.selected,t.default].find(o.number);if(!i.includes(n)){var a=function(e,t){return o.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)1&&void 0!==arguments[1]?arguments[1]:{},n=null;return o.string(t)?n=Array.from(document.querySelectorAll(t)):o.nodeList(t)?n=Array.from(t):o.array(t)&&(n=t.filter(o.element)),o.empty(n)?null:n.map(function(t){return new e(t,i)})}}]),e}();return Ie.defaults=(Ne=ue,JSON.parse(JSON.stringify(Ne))),Ie}); +//# sourceMappingURL=plyr.min.js.map diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map new file mode 100644 index 00000000..fb3ee723 --- /dev/null +++ b/dist/plyr.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.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","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","arguments","undefined","_this","this","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","getElements","container","getElement","querySelector","getFocusElement","focused","activeElement","body","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","err","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","map","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","blankVideo","debug","log","getDeep","path","reduce","obj","target","sources","shift","concat","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","indexOf","Storage","classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","prefix","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","createMenuItem","list","_ref$badge","_ref$checked","checked","aria-checked","flex","children","node","listeners","bind","currentTrack","speed","parseFloat","showMenuPanel","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","_this2","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this3","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","left","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this4","checkMenu","sort","a","b","sorting","getBadge","setCaptionsMenu","_this5","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this6","isVimeo","values","some","toggleMenu","popup","show","isMenuItem","isButton","stopPropagation","firstItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this7","size","restore","propertyName","create","_this8","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","inner","home","menuItem","which","preventDefault","backButton","inject","_this9","floor","random","props","seektime","insertAdjacentHTML","setTimeout","offsetHeight","_config","labels","parseUrl","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","iframe","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","console","onChange","first","last","keyCode","shiftKey","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","currentTarget","eventType","done","seekTo","_player","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","sign","abs","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","head","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","module","exports","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split","_split2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","name","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","getAspectRatio","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","entry","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","format$$1","playerVars","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","_this10","destroy","_this11","handlers","_this12","base","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","searchParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","prev","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\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 isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\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 // 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 cue: isCue,\n track: isTrack,\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 function 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(\n resolve => (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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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();\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 toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 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 only currently\n pip: (() => !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode))(),\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(inputType) {\n const [mediaType] = inputType.split('/');\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n let type;\n if (inputType && inputType.includes('codecs=')) {\n // Use input directly\n type = inputType;\n } else if (inputType === 'audio/mpeg') {\n // Skip codec\n type = 'audio/mpeg;';\n } else if (inputType in defaultCodecs) {\n // Use codec\n type = `${inputType}; codecs=\"${defaultCodecs[inputType]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (err) {\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';\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\n return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/strings';\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 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// 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// 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 => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\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 } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr = {}) {\n // Skip i18n for abbreviations and brand names\n const universals = {\n pip: 'PIP',\n airplay: 'AirPlay',\n };\n const text = universals[type] || i18n.get(type, this.config);\n\n const attributes = Object.assign({}, attr, {\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\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 setAspectRatio(input) {\n const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\n const padding = 100 / x * y;\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = buildUrlParams(options);\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 })\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 ratio = getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, 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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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 { format, generateId } from '../utils/strings';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 youtube.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 // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\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