{"version":3,"sources":["node_modules/styleselect/js/styleselect.js","components/atoms/forms/select/styleSelect.js","node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js","components/atoms/animations/smooth-scroll.js","components/atoms/atoms.js","components/molecules/menus/main-menu.js","components/molecules/menus/main-menu-mobile.js","components/molecules/safe-exit/safe-exit.js","plyr.js","node_modules/.pnpm/rangetouch@2.0.1/node_modules/rangetouch/dist/rangetouch.mjs","src/js/utils/is.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/utils/objects.js","src/js/utils/elements.js","src/js/support.js","src/js/utils/events.js","src/js/utils/promise.js","src/js/utils/arrays.js","src/js/utils/style.js","src/js/html5.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/load-sprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/load-image.js","src/js/ui.js","src/js/listeners.js","node_modules/.pnpm/loadjs@4.2.0/node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/load-script.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/utils/numbers.js","src/js/plugins/preview-thumbnails.js","src/js/source.js","src/js/plyr.js","components/molecules/video/player.js","components/molecules/video/youtube-embed.js","helper-functions.js","components/molecules/modal/modal.js","components/molecules/accordion/accordion.js","components/molecules/cards/agenda.js","components/molecules/tabs/child-pages-content.js","components/molecules/molecules.js","node_modules/lodash.throttle/index.js","components/organisms/header/header.js","components/organisms/partners-resources/partners-resources.js","components/organisms/sliders/two-columns.js","components/organisms/organisms.js","main.js"],"names":["_styleselect","_interopRequireDefault","require","e","__esModule","default","initStyleSelect","selects","document","querySelectorAll","setTimeout","forEach","select","firstOption","querySelector","styleSelect","classList","contains","nextSibling","add","_smoothScroll","smoothScrollAnimation","documentElement","style","SmoothScroll","_styleSelect","atoms","mainMenu","currentMenuItem","currentSubMenu","subMenuSelector","menuItemWithImageSelector","toggleSubMenu","preventDefault","target","getAttribute","closeCurrentSubMenu","parentElement","setAttribute","currentMenuItemWithImage","menuItem","menuItemParent","closest","offsetHeight","height","concat","addEventListener","onDocumentClick","remove","removeEventListener","closeSubMenu","sectionHeight","scrollHeight","subMenu","safeExit","btnSafeExit","tooltipSafeExit","navigator","global","factory","exports","module","define","amd","globalThis","self","Plyr","this","_defineProperty$1","obj","key","value","arg","input","hint","prim","Symbol","toPrimitive","res","call","TypeError","String","Object","defineProperty","enumerable","configurable","writable","_defineProperties","t","n","length","r","_defineProperty","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","getOwnPropertyDescriptors","defineProperties","defaults","addCSS","thumbWidth","watch","getConstructor","constructor","instanceOf","isNullOrUndefined","isObject","isString","isArray","Array","isNodeList","NodeList","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","Boolean","function","Function","array","nodeList","element","Element","event","Event","empty","RangeTouch","rangeTouch","config","init","prototype","enabled","userSelect","webKitUserSelect","touchAction","listeners","set","i","changedTouches","o","parseFloat","s","u","c","getBoundingClientRect","a","width","clientX","left","match","Math","max","toFixed","round","disabled","get","bubbles","dispatchEvent","type","from","MutationObserver","addedNodes","includes","observe","body","childList","subtree","map","isFunction","isEmpty","weakMap","WeakMap","nodeType","ownerDocument","textNode","Text","keyboardEvent","KeyboardEvent","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","promise","Promise","then","url","URL","startsWith","hostname","_","transitionEndEvent","createElement","events","WebkitTransition","MozTransition","OTransition","transition","find","repaint","delay","hidden","browser","isIE","documentMode","isEdge","test","userAgent","isWebKit","isIPhone","maxTouchPoints","isIPadOS","platform","isIos","getDeep","path","split","reduce","extend","sources","source","shift","assign","wrap","elements","wrapper","targets","reverse","index","child","cloneNode","parent","parentNode","sibling","appendChild","insertBefore","setAttributes","attributes","entries","text","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hide","toggleClass","force","method","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","container","getElement","setFocus","focusVisible","focus","preventScroll","defaultCodecs","support","audio","video","check","provider","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","playsinline","mime","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","supportsPassiveListeners","supported","options","toggleListener","callback","toggle","passive","capture","eventListeners","on","off","once","onceCallback","args","triggerEvent","detail","CustomEvent","plyr","silencePromise","dedupe","item","indexOf","prev","curr","abs","supportsCSS","declaration","CSS","supports","standardRatios","out","x","y","validateAspectRatio","every","reduceAspectRatio","ratio","getDivider","w","h","divider","getAspectRatio","parse","embed","videoWidth","videoHeight","setAspectRatio","isVideo","padding","aspectRatio","paddingBottom","isVimeo","vimeo","premium","offsetWidth","parseInt","getComputedStyle","offset","fullscreen","active","transform","classNames","videoFixedRatio","roundAspectRatio","tolerance","closestRatio","html5","getSources","getQualityOptions","quality","forced","setup","player","speed","onChange","currentTime","paused","preload","readyState","playbackRate","src","play","load","cancelRequests","blankVideo","debug","log","format","toString","replaceAll","RegExp","toTitleCase","toUpperCase","slice","toLowerCase","getHTML","innerHTML","resources","youtube","i18n","seekTime","title","v","k","Storage","store","localStorage","getItem","json","JSON","storage","setItem","stringify","removeItem","fetch","responseType","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","error","loadSprite","prefix","hasId","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","trunc","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","host","top","cors","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","toCamelCase","props","label","labelPressed","iconPressed","some","control","button","createRange","min","step","autocomplete","role","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","attrs","bindMenuItemShortcuts","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","children","node","bind","currentTrack","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","current","setProgress","val","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","_this$config$markers","_this$config$markers$","tooltips","tipElement","visible","show","clientRect","pageX","point","markers","points","insertAdjacentHTML","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","setMarkers","toggleMenuButton","setting","updateSetting","pane","panels","getLabel","setQualityMenu","checkMenu","getBadge","sort","b","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","minimumSpeed","maximumSpeed","values","popup","p","firstItem","toggleMenu","composedPath","isMenuItem","getMenuSize","tab","clone","position","opacity","removeAttribute","scrollWidth","size","restore","propertyName","setDownloadUrl","download","create","defaultAttributes","progressContainer","inner","home","backButton","href","urls","isEmbed","inject","floor","random","seektime","addProperty","controlPressed","labels","setMediaMetadata","mediaSession","metadata","MediaMetadata","mediaMetadata","artist","album","artwork","_this$config$markers2","_this$config$markers3","containerFragment","createDocumentFragment","pointsFragment","tipVisible","toggleTip","markerElement","marker","tip","parseUrl","safe","parser","buildUrlParams","params","URLSearchParams","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","enableTextTrack","has","sortIsDefault","sorted","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","autoplay","autopause","toggleInvert","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","previewThumbnails","thumbContainer","thumbContainerShown","imageContainer","timeContainer","scrubbingContainer","scrubbingContainerShown","hash","publisherId","tagUrl","byline","portrait","transparent","customControls","referrerPolicy","rel","showinfo","iv_load_policy","modestbranding","noCookie","providers","types","noop","Console","console","Fullscreen","scrollPosition","scrollX","scrollY","scrollTo","overflow","viewport","head","property","hasProperty","cleanupViewport","part","activeElement","first","last","shiftKey","forceFallback","nativeSupported","requestFullscreen","webkitEnterFullscreen","toggleFallback","navigationUI","action","cancelFullScreen","exit","enter","el","proxy","trapFocus","useNative","getRootNode","fullscreenElement","shadowRoot","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","controlsElement","recentTouchSeek","lastSeekTime","Date","now","migrateStyles","getPropertyValue","removeProperty","Listeners","handleKey","firstTouch","setGutter","useNativeAspectRatio","clientWidth","innerWidth","clientHeight","innerHeight","viewportHeight","viewportWidth","maxWidth","margin","resized","isAudio","ended","togglePlay","proxyEvents","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","forward","toggleCaptions","rect","currentTarget","attribute","hasAttribute","done","seekTo","loaded","startMove","endMove","startScrubbing","endScrubbing","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","increaseVolume","lastKey","focusTimer","lastKeyDown","increment","altKey","ctrlKey","metaKey","repeat","decreaseVolume","usingNative","loadjs_umd","fn","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isLegacyIECss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathname","pathStripped","relList","as","onbeforeload","ev","sheet","cssText","code","defaultPrevented","loadFiles","paths","numWaiting","loadjs","arg1","arg2","loadFn","returnPromise","deps","bundleIds","subscribe","isDefined","loadScript","assurePlaybackState","hasPlayed","Vimeo","frameParams","found","hashParam","sidedock","gesture","$2","thumbnail_url","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setMuted","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","fragment","firstChild","getPaused","seconds","getHost","YT","onYouTubeIframeAPIReady","getTitle","videoId","currentId","posterSrc","playerVars","hl","disablekb","cc_load_policy","cc_lang_pref","widget_referrer","onError","message","onPlaybackRateChange","instance","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","speeds","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","google","ima","trigger","manager","destroy","displayContainer","startSafetyTimer","managerPromise","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","setDisableCustomPlaybackForIOS10Plus","AdDisplayContainer","loader","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","requestAds","AdsRequest","adTagUrl","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","countdownTimer","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","cuePoints","getCuePoints","AdEvent","onAdEvent","cuePoint","seekElement","cuePercentage","ad","getAd","adData","getAdData","LOADED","pollCountdown","isLinear","STARTED","ALL_ADS_COMPLETED","loadAds","contentComplete","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","LOG","adError","getMessage","cancel","addCuePoints","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","initialized","zIndex","handlers","safetyTimer","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","clamp","parseVtt","vttDataString","processedList","frame","line","startTime","lineSplit","matchTimes","endTime","fitRatio","outer","PreviewThumbnails","getThumbnails","render","determineContainerAutoSizing","sortAndResolve","thumbnails","promises","getThumbnail","thumbnail","frames","urlPrefix","substring","lastIndexOf","tempImage","naturalHeight","_this$player$config$m","_this$player$config$m2","percentage","mousePosX","thumb","showImageAtCurrentTime","toggleThumbContainer","mouseDown","toggleScrubbingContainer","ceil","lastTime","scrubbing","setScrubbingContainerSize","setThumbContainerSizeAndPos","thumbNum","findIndex","hasThumb","qualityIndex","loadedImages","showingThumb","thumbFilename","thumbUrl","currentImageElement","dataset","filename","showImage","removeOldImages","loadingImage","usingSprites","previewImage","showingThumbFilename","newImage","setImageSizeAndOffset","currentImageContainer","preloadNearby","getHigherQuality","currentImage","tagName","removeDelay","deleting","oldThumbFilename","thumbnailsClone","foundOne","newThumbFilename","thumbURL","currentQualityIndex","previewImageHeight","thumbContainerHeight","clearShowing","sizeSpecifiedInCSS","thumbAspectRatio","thumbHeight","setThumbContainerPos","scrubberRect","containerRect","right","clamped","multiplier","lastMouseMoveTime","currentScrubbingImageElement","currentThumbnailImageElement","insertElements","change","crossorigin","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","original","unload","failed","jQuery","search","truthy","searchParams","inputIsValid","fauxDuration","realDuration","Infinity","hasAudio","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","webkitPresentationMode","pictureInPictureElement","setPreviewThumbnails","requestPictureInPicture","exitPictureInPicture","thumbnailSource","static","_plyr","_typeof","iterator","_objectSpread","_toPropertyKey","_toPrimitive","videoPlayer","defaultOptions","youtubeEmbed","videoItem","videoAlt","alt","div","thumbNode","playButton","dataLayer","youtubeVideoId","googleAnalyticsEvent","youtubeIframe","initYouTubeVideos","throttle","limit","wait","isMobile","isTablet","isStyleguide","lockBody","unlockBody","_player","_helperFunctions","modal","currentTrigger","modalTriggers","closeModalBtn","modalOverlay","modalContent","toggleModal","ariaHidden","modalHTMLContent","videoURL","playerEl","addModalContent","modalTrigger","accordion","currentItem","currentSubitem","currentBox","subitemSelector","flckViewportSelector","items","pages","toggleSubitem","btn","closeItem","currentViewport","pageHeight","scrollIntoView","behavior","subitem","pagesItem","Flickity","initSlider","agenda","languageSelector","agendaDownloadPdf","agendaReadOnline","visionGuideDownloadPdf","visionGuideReadOnline","activeItem","agendaLanguage","childPagesContent","pageContentNavigation","navigationMenu","pageFooterPosition","observer","IntersectionObserver","isIntersecting","sectionIntercepted","threshold","pageContentSections","navigationSelectMenu","navigationSelectMenuWrapper","lastKnownScrollPosition","newActiveItem","navigationBtnClick","targetSection","scrollMovileSection","scrollListenerFn","offsetTop","bottom","stickySidebar","wrapperInitialPostition","scrollTop","stickyMenuSelect","_mainMenu","_mainMenuMobile","_safeExit","_youtubeEmbed","_modal","_accordion","_agenda","_childPagesContent","molecules","mainMenuMobile","videoPlayerElement","_lodash","header","hamburger","mobileMenu","closeMobileMenu","updateRate","openMenu","closeMenu","pageYOffset","addEventListeners","partnersResources","resourceTypeSelector","partnersResourcesElements","partnersResourcesElement","partnersResourcesTarget","twoColSliders","sliders","slider","col","scrollEl","scrollbarEl","flkty","stopPlayer","playPlayer","_header","_partnersResources","_twoColumns","organisms","partnersResourcesBlock","twoColSliderBLocks","_atoms","_molecules","_organisms"],"mappings":"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","file":"main.js","sourceRoot":"..","sourcesContent":["// UMD module from From https://github.com/umdjs/umd/blob/master/returnExports.js\r\n// From 'if the module has no dependencies' example.\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node. Does not work with strict CommonJS, but\r\n // only CommonJS-like environments that support module.exports,\r\n // like Node.\r\n module.exports = factory();\r\n } else {\r\n // Browser globals (root is window)\r\n root.styleSelect = factory();\r\n \t}\r\n}(this, function () {\r\n// End of UMD module\r\n\r\n\t// Quick aliases and polyfills if needed\r\n\tvar query = document.querySelector.bind(document);\r\n\tvar queryAll = document.querySelectorAll.bind(document);\r\n\r\n\tvar KEYCODES = {\r\n\t\tSPACE: 32,\r\n\t\tUP: 38,\r\n\t\tDOWN: 40,\r\n\t\tENTER: 13\r\n\t};\r\n\r\n\tif ( ! NodeList.prototype.forEach ) {\r\n\t\tNodeList.prototype.forEach = Array.prototype.forEach;\r\n\t}\r\n\tif ( ! HTMLCollection.prototype.forEach ) {\r\n\t\tHTMLCollection.prototype.forEach = Array.prototype.forEach;\r\n\t}\r\n\tif ( ! Element.prototype.matches ) {\r\n\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector\r\n\t}\r\n\r\n\t// IE 9-11 CustomEvent polyfill\r\n\t// From https://developer.mozilla.org/en/docs/Web/API/CustomEvent\r\n\tvar CustomEvent = function( eventName, params ) {\r\n\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\r\n\t\tvar event = document.createEvent( 'CustomEvent' );\r\n\t\tevent.initCustomEvent( eventName, params.bubbles, params.cancelable, params.detail );\r\n\t\treturn event;\r\n\t};\r\n\tCustomEvent.prototype = window.Event.prototype;\r\n\twindow.CustomEvent = CustomEvent;\r\n\r\n\t// IE10 dataset polyfill\r\n\t// From https://gist.githubusercontent.com/brettz9/4093766/raw/ba31a05e7ce21af67c6cafee9b3f439c86e95b01/html5-dataset.js\r\n\tif (!document.documentElement.dataset &&\r\n\t\t\t // FF is empty while IE gives empty object\r\n\t\t\t(!Object.getOwnPropertyDescriptor(Element.prototype, 'dataset') ||\r\n\t\t\t!Object.getOwnPropertyDescriptor(Element.prototype, 'dataset').get)\r\n\t\t) {\r\n\t\tvar propDescriptor = {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function () {\r\n\t\t\t\t'use strict';\r\n\t\t\t\tvar i,\r\n\t\t\t\t\tthat = this,\r\n\t\t\t\t\tHTML5_DOMStringMap,\r\n\t\t\t\t\tattrVal, attrName, propName,\r\n\t\t\t\t\tattribute,\r\n\t\t\t\t\tattributes = this.attributes,\r\n\t\t\t\t\tattsLength = attributes.length,\r\n\t\t\t\t\ttoUpperCase = function (n0) {\r\n\t\t\t\t\t\treturn n0.charAt(1).toUpperCase();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetter = function () {\r\n\t\t\t\t\t\treturn this;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetter = function (attrName, value) {\r\n\t\t\t\t\t\treturn (typeof value !== 'undefined') ?\r\n\t\t\t\t\t\t\tthis.setAttribute(attrName, value) :\r\n\t\t\t\t\t\t\tthis.removeAttribute(attrName);\r\n\t\t\t\t\t};\r\n\t\t\t\ttry { // Simulate DOMStringMap w/accessor support\r\n\t\t\t\t\t// Test setting accessor on normal object\r\n\t\t\t\t\t({}).__defineGetter__('test', function () {});\r\n\t\t\t\t\tHTML5_DOMStringMap = {};\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e1) { // Use a DOM object for IE8\r\n\t\t\t\t\tHTML5_DOMStringMap = document.createElement('div');\r\n\t\t\t\t}\r\n\t\t\t\tfor (i = 0; i < attsLength; i++) {\r\n\t\t\t\t\tattribute = attributes[i];\r\n\t\t\t\t\t// Fix: This test really should allow any XML Name without\r\n\t\t\t\t\t// colons (and non-uppercase for XHTML)\r\n\t\t\t\t\tif (attribute && attribute.name &&\r\n\t\t\t\t\t\t(/^data-\\w[\\w\\-]*$/).test(attribute.name)) {\r\n\t\t\t\t\t\tattrVal = attribute.value;\r\n\t\t\t\t\t\tattrName = attribute.name;\r\n\t\t\t\t\t\t// Change to CamelCase\r\n\t\t\t\t\t\tpropName = attrName.substr(5).replace(/-./g, toUpperCase);\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tObject.defineProperty(HTML5_DOMStringMap, propName, {\r\n\t\t\t\t\t\t\t\tenumerable: this.enumerable,\r\n\t\t\t\t\t\t\t\tget: getter.bind(attrVal || ''),\r\n\t\t\t\t\t\t\t\tset: setter.bind(that, attrName)\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (e2) { // if accessors are not working\r\n\t\t\t\t\t\t\tHTML5_DOMStringMap[propName] = attrVal;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn HTML5_DOMStringMap;\r\n\t\t\t}\r\n\t\t};\r\n\t\ttry {\r\n\t\t\t// FF enumerates over element's dataset, but not\r\n\t\t\t// Element.prototype.dataset; IE9 iterates over both\r\n\t\t\tObject.defineProperty(Element.prototype, 'dataset', propDescriptor);\r\n\t\t} catch (e) {\r\n\t\t\tpropDescriptor.enumerable = false; // IE8 does not allow setting to true\r\n\t\t\tObject.defineProperty(Element.prototype, 'dataset', propDescriptor);\r\n\t\t}\r\n\t}\r\n\r\n\t// Return true if any ancestor matches selector\r\n\t// Borrowed from ancestorMatches() from agave.js (MIT)\r\n\tvar isAncestorOf = function(element, selector, includeSelf) {\r\n\t\tvar parent = element.parentNode;\r\n\t\tif ( includeSelf && element.matches(selector) ) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t// While parents are 'element' type nodes\r\n\t\t// See https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType\r\n\t\twhile ( parent && parent.nodeType && parent.nodeType === 1 ) {\r\n\t\t\tif ( parent.matches(selector) ) {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t\tparent = parent.parentNode;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\r\n\t// Used to match select boxes to their style select partners\r\n\tvar makeUUID = function(){\r\n\t\treturn 'ss-xxxx-xxxx-xxxx-xxxx-xxxx'.replace(/x/g, function (c) {\r\n\t\t\tvar r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\t\t\treturn v.toString(16);\r\n\t\t})\r\n\t};\r\n\r\n\r\n\t// The 'styleSelect' main function\r\n\t// selector:String - CSS selector for the select box to style\r\n\treturn function(selector) {\r\n\r\n\t\t// Use native selects (which pop up large native UIs to go through the options ) on iOS/Android\r\n\t\tif ( navigator.userAgent.match( /iPad|iPhone|Android/i ) ) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tvar realSelect = typeof selector == 'object' ? selector : query(selector),\r\n\t\t\trealOptions = realSelect.children,\r\n\t\t\tselectedIndex = realSelect.selectedIndex,\r\n\t\t\tuuid = makeUUID(),\r\n\t\t\tstyleSelectHTML = '
';\r\n\r\n\t\t// The index of the item that's being highlighted by the mouse or keyboard\r\n\t\tvar highlightedOptionIndex;\r\n\t\tvar highlightedOptionIndexMax = realOptions.length - 1;\r\n\r\n\t\trealSelect.setAttribute('data-ss-uuid', uuid);\r\n\t\t// Even though the element is display: none, a11y users should still see it.\r\n\t\t// According to http://www.w3.org/TR/wai-aria/states_and_properties#aria-hidden\r\n\t\t// some browsers may have bugs with this but future implementation may improve\r\n\t\trealSelect.setAttribute('aria-hidden', \"false\");\r\n\r\n\t\t// Build styled clones of all the real options\r\n\t\tvar selectedOptionHTML;\r\n\t\tvar optionsHTML = '
';\r\n\t\trealOptions.forEach(function(realOption, index){\r\n\t\t\tvar text = realOption.textContent,\r\n\t\t\t\tvalue = realOption.getAttribute('value') || '',\r\n cssClass = 'ss-option';\r\n\r\n\t\t\tif (index === selectedIndex) {\r\n\t\t\t\t// Mark first item as selected-option - this is where we store state for the styled select box\r\n\t\t\t\t// aria-hidden=true so screen readers ignore the styles selext box in favor of the real one (which is visible by default)\r\n\t\t\t\tselectedOptionHTML = '
' + text + '
'\r\n\t\t\t}\r\n\r\n if (realOption.disabled) {\r\n cssClass += ' disabled';\r\n }\r\n\r\n // Continue building optionsHTML\r\n\t\t\toptionsHTML += '
' + text + '
';\r\n\t\t});\r\n\t\toptionsHTML += '
';\r\n\t\tstyleSelectHTML += selectedOptionHTML += optionsHTML += '
';\r\n\t\t// And add out styled select just after the real select\r\n\t\trealSelect.insertAdjacentHTML('afterend', styleSelectHTML);\r\n\r\n\t\tvar styledSelect = query('.style-select[data-ss-uuid=\"'+uuid+'\"]');\r\n\t\tvar styleSelectOptions = styledSelect.querySelectorAll('.ss-option');\r\n\t\tvar selectedOption = styledSelect.querySelector('.ss-selected-option');\r\n\r\n\t\tvar changeRealSelectBox = function(newValue, newLabel) {\r\n\t\t\t// Close styledSelect\r\n\t\t\tstyledSelect.classList.remove('open');\r\n\r\n\t\t\t// Update styled value\r\n\t\t\tselectedOption.textContent = newLabel;\r\n\t\t\tselectedOption.dataset.value = newValue;\r\n\r\n\t\t\t// Update the 'tick' that shows the option with the current value\r\n\t\t\tstyleSelectOptions.forEach(function(styleSelectOption){\r\n\t\t\t\tif ( styleSelectOption.dataset.value === newValue) {\r\n\t\t\t\t\tstyleSelectOption.classList.add('ticked')\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstyleSelectOption.classList.remove('ticked')\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Update real select box\r\n\t\t\trealSelect.value = newValue;\r\n\r\n\t\t\t// Send 'change' event to real select - to trigger any change event listeners\r\n\t\t\tvar changeEvent = new CustomEvent('change');\r\n\t\t\trealSelect.dispatchEvent(changeEvent);\r\n\t\t};\r\n\r\n\t\t// Change real select box when a styled option is clicked\r\n\t\tstyleSelectOptions.forEach(function(unused, index){\r\n\t\t\tvar styleSelectOption = styleSelectOptions.item(index);\r\n\r\n if (styleSelectOption.className.match(/\\bdisabled\\b/)) {\r\n return;\r\n }\r\n\r\n styleSelectOption.addEventListener('click', function(ev) {\r\n\t\t\t\tvar target = ev.target,\r\n\t\t\t\t\tstyledSelectBox = target.parentNode.parentNode,\r\n\t\t\t\t\tuuid = styledSelectBox.getAttribute('data-ss-uuid'),\r\n\t\t\t\t\tnewValue = target.getAttribute('data-value'),\r\n\t\t\t\t\tnewLabel = target.textContent;\r\n\r\n\t\t\t\tchangeRealSelectBox(newValue, newLabel)\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Tick and highlight the option that's currently in use\r\n\t\t\tif ( styleSelectOption.dataset.value === realSelect.value ) {\r\n\t\t\t\thighlightedOptionIndex = index;\r\n\t\t\t\tstyleSelectOption.classList.add('ticked');\r\n\t\t\t\tstyleSelectOption.classList.add('highlighted')\r\n\t\t\t}\r\n\r\n\t\t\t// Important: we can't use ':hover' as the keyboard and default value can also set the highlight\r\n\t\t\tstyleSelectOption.addEventListener('mouseover', function(ev){\r\n\t\t\t\tstyleSelectOption.parentNode.childNodes.forEach(function(sibling, index){\r\n\t\t\t\t\tif ( sibling === ev.target ) {\r\n\t\t\t\t\t\tsibling.classList.add('highlighted');\r\n\t\t\t\t\t\thighlightedOptionIndex = index;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsibling.classList.remove('highlighted')\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t});\r\n\r\n\r\n\r\n\t\tvar closeAllStyleSelects = function(exception){\r\n\t\t\tqueryAll('.style-select').forEach(function(styleSelectEl) {\r\n\t\t\t\tif ( styleSelectEl !== exception ) {\r\n\t\t\t\t\tstyleSelectEl.classList.remove('open');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tvar toggleStyledSelect = function(styledSelectBox){\r\n\t\t\tif ( ! styledSelectBox.classList.contains('open') ) {\r\n\t\t\t\t// If we're closed and about to open, close other style selects on the page\r\n\t\t\t\tcloseAllStyleSelects(styledSelectBox);\r\n\t\t\t}\r\n\t\t\t// Then toggle open/close\r\n\t\t\tstyledSelectBox.classList.toggle('open');\r\n\t\t};\r\n\r\n\t\t// When a styled select box is clicked\r\n\t\tvar styledSelectedOption = query('.style-select[data-ss-uuid=\"' + uuid + '\"] .ss-selected-option');\r\n\t\tstyledSelectedOption.addEventListener('click', function(ev) {\r\n\t\t\tev.preventDefault();\r\n\t\t\tev.stopPropagation();\r\n\t\t\ttoggleStyledSelect(ev.target.parentNode);\r\n\t\t});\r\n\r\n\t\t// Keyboard handling\r\n\t\tstyledSelectedOption.addEventListener('keydown', function(ev) {\r\n\t\t\tvar styledSelectBox = ev.target.parentNode;\r\n\r\n\t\t\tswitch (ev.keyCode) {\r\n\t\t\t\tcase KEYCODES.SPACE:\r\n\t\t\t\t\t// Space shows and hides styles select boxes\r\n\t\t\t\t\ttoggleStyledSelect(styledSelectBox);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase KEYCODES.DOWN:\r\n\t\t\t\tcase KEYCODES.UP:\r\n\t\t\t\t\t// Move the highlight up and down\r\n\t\t\t\t\tif ( ! styledSelectBox.classList.contains('open') ) {\r\n\t\t\t\t\t\t// If style select is not open, up/down should open it.\r\n\t\t\t\t\t\ttoggleStyledSelect(styledSelectBox);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// If style select is already open, these should change what the highlighted option is\r\n\t\t\t\t\t\tif ( ev.keyCode === KEYCODES.UP ) {\r\n\t\t\t\t\t\t\t// Up arrow moves earlier in list\r\n\t\t\t\t\t\t\tif ( highlightedOptionIndex !== 0 ) {\r\n\t\t\t\t\t\t\t\thighlightedOptionIndex = highlightedOptionIndex - 1\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Down arrow moves later in list\r\n\t\t\t\t\t\t\tif ( highlightedOptionIndex < highlightedOptionIndexMax ) {\r\n\t\t\t\t\t\t\t\thighlightedOptionIndex = highlightedOptionIndex + 1\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstyleSelectOptions.forEach(function(option, index){\r\n\t\t\t\t\t\t\tif ( index === highlightedOptionIndex ) {\r\n\t\t\t\t\t\t\t\toption.classList.add('highlighted')\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\toption.classList.remove('highlighted')\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\tev.preventDefault();\r\n\t\t\t\t\tev.stopPropagation();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// User has picked an item from the keyboard\r\n\t\t\t\tcase KEYCODES.ENTER:\r\n\t\t\t\t\tvar highlightedOption = styledSelectedOption.parentNode.querySelectorAll('.ss-option')[highlightedOptionIndex],\r\n\t\t\t\t\t\tnewValue = highlightedOption.dataset.value,\r\n\t\t\t\t\t\tnewLabel = highlightedOption.textContent;\r\n\r\n\t\t\t\t\tchangeRealSelectBox(newValue, newLabel);\r\n\t\t\t\t\tev.preventDefault();\r\n\t\t\t\t\tev.stopPropagation();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Clicking outside of the styled select box closes any open styled select boxes\r\n\t\tquery('body').addEventListener('click', function(ev){\r\n\r\n\t\t\tif ( ! isAncestorOf(ev.target, '.style-select', true) ) {\r\n\t\t\t\tcloseAllStyleSelects();\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t};\r\n\r\n// Close UMD module\r\n}));\r\n\r\n","import styleSelect from 'styleselect'\n\n/**\n * Init SelectStyle to all Selects.\n * http://mikemaccana.github.io/styleselect/\n */\nexport default function initStyleSelect() {\n const selects = document.querySelectorAll( 'select:not([name=\"page-content-navigation-select\"])' )\n\n setTimeout( () => selects.forEach( select => {\n const firstOption = select.querySelector( 'option' )\n\n styleSelect( select )\n\n // Hide placeholder from options list if applicable.\n if ( firstOption.classList.contains( 'gf_placeholder' ) ) {\n select.nextSibling.querySelector( '.ss-option' ).classList.add( 'hidden' )\n }\n }),\n 200 )\n}","/*! smooth-scroll v16.1.3 | (c) 2020 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\nwindow.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(e){var t,n=(this.document||this.ownerDocument).querySelectorAll(e),o=this;do{for(t=n.length;0<=--t&&n.item(t)!==o;);}while(t<0&&(o=o.parentElement));return o}),(function(){if(\"function\"==typeof window.CustomEvent)return;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e})(),(function(){for(var r=0,e=[\"ms\",\"moz\",\"webkit\",\"o\"],t=0;to.durationMax?o.durationMax:o.durationMin&&u=v)return C.cancelScroll(!0),x(a,t,c),H(\"scrollStop\",i,a,r),!(O=l=null)})(d,g)||(O=M.requestAnimationFrame(E),l=e)};0===M.pageYOffset&&M.scrollTo(0,0),f=a,h=i,c||history.pushState&&h.updateURL&&history.pushState({smoothScroll:JSON.stringify(h),anchor:f.id},document.title,f===document.documentElement?\"#top\":\"#\"+f.id),\"matchMedia\"in M&&M.matchMedia(\"(prefers-reduced-motion)\").matches?x(a,Math.floor(g),!1):(H(\"scrollStart\",i,a,r),C.cancelScroll(!0),M.requestAnimationFrame(E))}};var t=function(e){if(!e.defaultPrevented&&!(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey)&&\"closest\"in e.target&&(a=e.target.closest(o))&&\"a\"===a.tagName.toLowerCase()&&!e.target.closest(b.ignore)&&a.hostname===M.location.hostname&&a.pathname===M.location.pathname&&/#/.test(a.href)){var t,n;try{t=r(decodeURIComponent(a.hash))}catch(e){t=r(a.hash)}if(\"#\"===t){if(!b.topOnEmptyHash)return;n=document.documentElement}else n=document.querySelector(t);(n=n||\"#top\"!==t?n:document.documentElement)&&(e.preventDefault(),(function(e){if(history.replaceState&&e.updateURL&&!history.state){var t=M.location.hash;t=t||\"\",history.replaceState({smoothScroll:JSON.stringify(e),anchor:t||M.pageYOffset},document.title,t||M.location.href)}})(b),C.animateScroll(n,a))}},n=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(b)){var t=history.state.anchor;\"string\"==typeof t&&t&&!(t=document.querySelector(r(history.state.anchor)))||C.animateScroll(t,null,{updateURL:!1})}};C.destroy=function(){b&&(document.removeEventListener(\"click\",t,!1),M.removeEventListener(\"popstate\",n,!1),C.cancelScroll(),O=A=a=b=null)};return (function(){if(!(\"querySelector\"in document&&\"addEventListener\"in M&&\"requestAnimationFrame\"in M&&\"closest\"in M.Element.prototype))throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";C.destroy(),b=I(q,e||{}),A=b.header?document.querySelector(b.header):null,document.addEventListener(\"click\",t,!1),b.updateURL&&b.popstate&&M.addEventListener(\"popstate\",n,!1)})(),C}}));","import SmoothScroll from 'smooth-scroll'\n\n/**\n * Polyfill for smooth scroll behaviour\n */\nexport default function smoothScrollAnimation () {\n if ( !( 'scrollBehavior' in document.documentElement.style ) ) {\n new SmoothScroll( 'a[href*=\"#\"]' )\n }\n}\n","import styleSelect from './forms/select/styleSelect'\nimport smoothScrollAnimation from './animations/smooth-scroll'\n\n/**\n * Atoms functions.\n */\nexport default function atoms() {\n styleSelect()\n smoothScrollAnimation()\n}","/**\n * Main menu logic scripts.\n */\nexport default function mainMenu () {\n const mainMenuSelector = '#menu-main-menu'\n const menuItemWithChildrenSelector = 'li.menu-item-has-children > a'\n const subMenuSelector = '.sub-menu'\n const menuItemWithImageSelector = '.menu-item-image'\n const mainMenu = document.querySelector( mainMenuSelector )\n const menuItemsWithChildren = mainMenu.querySelectorAll( menuItemWithChildrenSelector )\n let currentMenuItem\n let currentSubMenu\n\n init()\n\n /**\n * Init Main Menu functionalities.\n */\n function init() {\n addEventListeners()\n }\n\n /**\n * Add Main Menu event listeners.\n */\n function addEventListeners() {\n menuItemsWithChildren.forEach( menuItem => {\n menuItem.addEventListener( 'click', toggleSubMenu )\n })\n }\n\n /**\n * Function to toggle the submenu.\n *\n * @param {Element} e - The clicked element.\n * @return {mixed} Returns in case there's no submenu or the user clicked on the current one.\n */\n function toggleSubMenu( e ) {\n e.preventDefault()\n\n if ( e.target.getAttribute( 'aria-expanded' ) === 'true' ) {\n closeCurrentSubMenu()\n return false\n }\n\n closeCurrentSubMenu()\n\n currentMenuItem = this\n currentSubMenu = this.parentElement.querySelector( subMenuSelector )\n\n if ( !currentSubMenu ) {\n return\n }\n\n currentSubMenu.classList.add( 'fade-in-from-hidden' )\n currentMenuItem.setAttribute( 'aria-expanded', 'true' )\n\n const currentMenuItemWithImage = currentSubMenu.querySelectorAll( menuItemWithImageSelector )\n adjustItemsWithImageHeight( currentMenuItemWithImage )\n\n document.addEventListener( 'click', onDocumentClick )\n }\n\n /**\n * Adjust height of items with image when the container is taller.\n * \n * @param {Element} menuItemsWithImage - The element to adjust.\n */\n function adjustItemsWithImageHeight( menuItemsWithImage ) {\n menuItemsWithImage.forEach( menuItem => {\n const menuItemParent = menuItem.closest( subMenuSelector )\n \n if ( menuItem.offsetHeight < menuItemParent.offsetHeight ) {\n menuItem.style.height = `${menuItemParent.offsetHeight}px`\n }\n })\n }\n\n /**\n * Document click event listener.\n *\n * @param {Element} e - The clicked element.\n */\n function onDocumentClick( e ) {\n if ( e.target !== currentMenuItem && e.target !== currentSubMenu ) {\n closeCurrentSubMenu()\n }\n }\n\n /**\n * Function to close submenu.\n */\n function closeCurrentSubMenu() {\n if ( !currentSubMenu ) {\n return\n }\n\n currentSubMenu.classList.remove( 'fade-in-from-hidden' )\n currentMenuItem.setAttribute( 'aria-expanded', 'false' )\n document.removeEventListener( 'click', onDocumentClick )\n }\n}","/**\n * Main menu logic scripts.\n */\nexport default function mainMenu () {\n const menuItemWithChildrenSelector = '#menu-main-menu-mobile > li.menu-item-has-children > a'\n const subMenuSelector = '.sub-menu'\n const menuItemsWithChildren = document.querySelectorAll( menuItemWithChildrenSelector )\n let currentMenuItem\n let currentSubMenu\n\n addEventListeners()\n\n /**\n * Add Main Menu event listeners.\n */\n function addEventListeners() {\n menuItemsWithChildren.forEach( menuItem => {\n menuItem.addEventListener( 'click', toggleSubMenu )\n })\n }\n\n /**\n * Function to toggle the submenu.\n *\n * @param {Element} e - The clicked element.\n * @return {mixed} Returns in case there's no submenu or the user clicked on the current one.\n */\n function toggleSubMenu( e ) {\n e.preventDefault()\n\n if ( e.target.getAttribute( 'aria-expanded' ) === 'true' ) {\n closeSubMenu( currentSubMenu )\n return false\n }\n\n closeSubMenu( currentSubMenu )\n\n currentMenuItem = this\n currentSubMenu = this.parentElement.querySelector( subMenuSelector )\n\n if ( !currentSubMenu ) {\n return\n }\n\n const sectionHeight = currentSubMenu.scrollHeight\n currentSubMenu.style.height = `${sectionHeight}px`\n currentMenuItem.setAttribute( 'aria-expanded', 'true' )\n }\n\n /**\n * Function to close submenu.\n *\n * @param {Element} subMenu - The submenu element.\n */\n function closeSubMenu( subMenu ) {\n if ( !subMenu ) {\n return\n }\n\n subMenu.style.height = 0\n currentMenuItem.setAttribute( 'aria-expanded', 'false' )\n }\n}","/**\n * Safe exit logic scripts.\n */\nexport default function safeExit () {\n const btnSafeExit = document.querySelector( '.btn-safe-exit' )\n const tooltipSafeExit = document.querySelector( '#safe-exit-tooltip' )\n\n btnSafeExit.addEventListener( 'mouseover', mOver, false )\n btnSafeExit.addEventListener( 'mouseout', mOut, false )\n\n /**\n * Button over function.\n */\n function mOver() {\n tooltipSafeExit.setAttribute( 'style', 'display:inherit' )\n }\n\n /**\n * Button out function.\n */\n function mOut() {\n tooltipSafeExit.setAttribute( 'style', 'display:none' )\n }\n}","typeof navigator === \"object\" && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('Plyr', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Plyr = factory());\n})(this, (function () { 'use strict';\n\n function _defineProperty$1(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n\n function _classCallCheck(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }\n function _defineProperties(e, t) {\n for (var n = 0; n < t.length; n++) {\n var r = t[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r);\n }\n }\n function _createClass(e, t, n) {\n return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e;\n }\n function _defineProperty(e, t, n) {\n return t in e ? Object.defineProperty(e, t, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = n, e;\n }\n function ownKeys(e, t) {\n var n = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(e);\n t && (r = r.filter(function (t) {\n return Object.getOwnPropertyDescriptor(e, t).enumerable;\n })), n.push.apply(n, r);\n }\n return n;\n }\n function _objectSpread2(e) {\n for (var t = 1; t < arguments.length; t++) {\n var n = null != arguments[t] ? arguments[t] : {};\n t % 2 ? ownKeys(Object(n), !0).forEach(function (t) {\n _defineProperty(e, t, n[t]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ownKeys(Object(n)).forEach(function (t) {\n Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));\n });\n }\n return e;\n }\n var defaults$1 = {\n addCSS: !0,\n thumbWidth: 15,\n watch: !0\n };\n function matches$1(e, t) {\n return function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }.call(e, t);\n }\n function trigger(e, t) {\n if (e && t) {\n var n = new Event(t, {\n bubbles: !0\n });\n e.dispatchEvent(n);\n }\n }\n var getConstructor$1 = function (e) {\n return null != e ? e.constructor : null;\n },\n instanceOf$1 = function (e, t) {\n return !!(e && t && e instanceof t);\n },\n isNullOrUndefined$1 = function (e) {\n return null == e;\n },\n isObject$1 = function (e) {\n return getConstructor$1(e) === Object;\n },\n isNumber$1 = function (e) {\n return getConstructor$1(e) === Number && !Number.isNaN(e);\n },\n isString$1 = function (e) {\n return getConstructor$1(e) === String;\n },\n isBoolean$1 = function (e) {\n return getConstructor$1(e) === Boolean;\n },\n isFunction$1 = function (e) {\n return getConstructor$1(e) === Function;\n },\n isArray$1 = function (e) {\n return Array.isArray(e);\n },\n isNodeList$1 = function (e) {\n return instanceOf$1(e, NodeList);\n },\n isElement$1 = function (e) {\n return instanceOf$1(e, Element);\n },\n isEvent$1 = function (e) {\n return instanceOf$1(e, Event);\n },\n isEmpty$1 = function (e) {\n return isNullOrUndefined$1(e) || (isString$1(e) || isArray$1(e) || isNodeList$1(e)) && !e.length || isObject$1(e) && !Object.keys(e).length;\n },\n is$1 = {\n nullOrUndefined: isNullOrUndefined$1,\n object: isObject$1,\n number: isNumber$1,\n string: isString$1,\n boolean: isBoolean$1,\n function: isFunction$1,\n array: isArray$1,\n nodeList: isNodeList$1,\n element: isElement$1,\n event: isEvent$1,\n empty: isEmpty$1\n };\n function getDecimalPlaces(e) {\n var t = \"\".concat(e).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n return t ? Math.max(0, (t[1] ? t[1].length : 0) - (t[2] ? +t[2] : 0)) : 0;\n }\n function round(e, t) {\n if (1 > t) {\n var n = getDecimalPlaces(t);\n return parseFloat(e.toFixed(n));\n }\n return Math.round(e / t) * t;\n }\n var RangeTouch = function () {\n function e(t, n) {\n _classCallCheck(this, e), is$1.element(t) ? this.element = t : is$1.string(t) && (this.element = document.querySelector(t)), is$1.element(this.element) && is$1.empty(this.element.rangeTouch) && (this.config = _objectSpread2({}, defaults$1, {}, n), this.init());\n }\n return _createClass(e, [{\n key: \"init\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"none\", this.element.style.webKitUserSelect = \"none\", this.element.style.touchAction = \"manipulation\"), this.listeners(!0), this.element.rangeTouch = this);\n }\n }, {\n key: \"destroy\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"\", this.element.style.webKitUserSelect = \"\", this.element.style.touchAction = \"\"), this.listeners(!1), this.element.rangeTouch = null);\n }\n }, {\n key: \"listeners\",\n value: function (e) {\n var t = this,\n n = e ? \"addEventListener\" : \"removeEventListener\";\n [\"touchstart\", \"touchmove\", \"touchend\"].forEach(function (e) {\n t.element[n](e, function (e) {\n return t.set(e);\n }, !1);\n });\n }\n }, {\n key: \"get\",\n value: function (t) {\n if (!e.enabled || !is$1.event(t)) return null;\n var n,\n r = t.target,\n i = t.changedTouches[0],\n o = parseFloat(r.getAttribute(\"min\")) || 0,\n s = parseFloat(r.getAttribute(\"max\")) || 100,\n u = parseFloat(r.getAttribute(\"step\")) || 1,\n c = r.getBoundingClientRect(),\n a = 100 / c.width * (this.config.thumbWidth / 2) / 100;\n return 0 > (n = 100 / c.width * (i.clientX - c.left)) ? n = 0 : 100 < n && (n = 100), 50 > n ? n -= (100 - 2 * n) * a : 50 < n && (n += 2 * (n - 50) * a), o + round(n / 100 * (s - o), u);\n }\n }, {\n key: \"set\",\n value: function (t) {\n e.enabled && is$1.event(t) && !t.target.disabled && (t.preventDefault(), t.target.value = this.get(t), trigger(t.target, \"touchend\" === t.type ? \"change\" : \"input\"));\n }\n }], [{\n key: \"setup\",\n value: function (t) {\n var n = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},\n r = null;\n if (is$1.empty(t) || is$1.string(t) ? r = Array.from(document.querySelectorAll(is$1.string(t) ? t : 'input[type=\"range\"]')) : is$1.element(t) ? r = [t] : is$1.nodeList(t) ? r = Array.from(t) : is$1.array(t) && (r = t.filter(is$1.element)), is$1.empty(r)) return null;\n var i = _objectSpread2({}, defaults$1, {}, n);\n if (is$1.string(t) && i.watch) {\n var o = new MutationObserver(function (n) {\n Array.from(n).forEach(function (n) {\n Array.from(n.addedNodes).forEach(function (n) {\n is$1.element(n) && matches$1(n, t) && new e(n, i);\n });\n });\n });\n o.observe(document.body, {\n childList: !0,\n subtree: !0\n });\n }\n return r.map(function (t) {\n return new e(t, n);\n });\n }\n }, {\n key: \"enabled\",\n get: function () {\n return \"ontouchstart\" in document.documentElement;\n }\n }]), e;\n }();\n\n // ==========================================================================\n // Type checking utils\n // ==========================================================================\n\n const getConstructor = input => input !== null && typeof input !== 'undefined' ? input.constructor : null;\n const instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n const isNullOrUndefined = input => input === null || typeof input === 'undefined';\n const isObject = input => getConstructor(input) === Object;\n const isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\n const isString = input => getConstructor(input) === String;\n const isBoolean = input => getConstructor(input) === Boolean;\n const isFunction = input => typeof input === 'function';\n const isArray = input => Array.isArray(input);\n const isWeakMap = input => instanceOf(input, WeakMap);\n const isNodeList = input => instanceOf(input, NodeList);\n const isTextNode = input => getConstructor(input) === Text;\n const isEvent = input => instanceOf(input, Event);\n const isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\n const isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\n const isTrack = input => instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind);\n const isPromise = input => instanceOf(input, Promise) && isFunction(input.then);\n const isElement = input => input !== null && typeof input === 'object' && input.nodeType === 1 && typeof input.style === 'object' && typeof input.ownerDocument === 'object';\n const isEmpty = input => isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\n const isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (_) {\n return false;\n }\n };\n var is = {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty\n };\n\n // ==========================================================================\n const transitionEndEvent = (() => {\n const element = document.createElement('span');\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n return is.string(type) ? events[type] : false;\n })();\n\n // Force repaint of element\n function repaint(element, delay) {\n setTimeout(() => {\n try {\n // eslint-disable-next-line no-param-reassign\n element.hidden = true;\n\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight;\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = false;\n } catch (_) {\n // Do nothing\n }\n }, delay);\n }\n\n // ==========================================================================\n // Browser sniffing\n // Unfortunately, due to mixed support, UA sniffing is required\n // ==========================================================================\n\n const isIE = Boolean(window.document.documentMode);\n const isEdge = /Edge/g.test(navigator.userAgent);\n const isWebKit = 'WebkitAppearance' in document.documentElement.style && !/Edge/g.test(navigator.userAgent);\n const isIPhone = /iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n // navigator.platform may be deprecated but this check is still required\n const isIPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n const isIos = /iPad|iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n var browser = {\n isIE,\n isEdge,\n isWebKit,\n isIPhone,\n isIPadOS,\n isIos\n };\n\n // ==========================================================================\n\n // Clone nested objects\n function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n // Get a nested value in an object\n 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\n function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n if (!is.object(source)) {\n return target;\n }\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, {\n [key]: {}\n });\n }\n extend(target[key], source[key]);\n } else {\n Object.assign(target, {\n [key]: source[key]\n });\n }\n });\n return extend(target, ...sources);\n }\n\n // ==========================================================================\n\n // Wrap an element\n 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).reverse().forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\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\n function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) return;\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).filter(([, value]) => !is.nullOrUndefined(value)).forEach(([key, value]) => element.setAttribute(key, value));\n }\n\n // Create a DocumentFragment\n 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 // Insert an element after another\n function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) return;\n target.parentNode.insertBefore(element, target.nextSibling);\n }\n\n // Insert a DocumentFragment\n function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) return;\n parent.appendChild(createElement(type, attributes, text));\n }\n\n // Remove element(s)\n function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n element.parentNode.removeChild(element);\n }\n\n // Remove all child elements\n function emptyElement(element) {\n if (!is.element(element)) return;\n let {\n length\n } = element.childNodes;\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n }\n\n // Replace element\n function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) return null;\n oldChild.parentNode.replaceChild(newChild, oldChild);\n return newChild;\n }\n\n // Get an attribute object from a string selector\n 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)) return {};\n const attributes = {};\n const existing = extend({}, existingAttributes);\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 // Get the parts and value\n const parts = stripped.split('=');\n const [key] = parts;\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n // Get the first character\n const start = selector.charAt(0);\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.string(existing.class)) {\n attributes.class = `${existing.class} ${className}`;\n } else {\n attributes.class = className;\n }\n break;\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n case '[':\n // Attribute selector\n attributes[key] = value;\n break;\n }\n });\n return extend(existing, attributes);\n }\n\n // Toggle hidden\n function toggleHidden(element, hidden) {\n if (!is.element(element)) return;\n let hide = hidden;\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = hide;\n }\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n element.classList[method](className);\n return element.classList.contains(className);\n }\n return false;\n }\n\n // Has class name\n function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n }\n\n // Element matches selector\n function matches(element, selector) {\n const {\n prototype\n } = Element;\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n const method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n return method.call(element, selector);\n }\n\n // Closest ancestor element matching selector (also tests element itself)\n function closest$1(element, selector) {\n const {\n prototype\n } = Element;\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n function closestElement() {\n let el = this;\n do {\n if (matches.matches(el, selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n }\n const method = prototype.closest || closestElement;\n return method.call(element, selector);\n }\n\n // Find all elements\n function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n }\n\n // Find a single element\n function getElement(selector) {\n return this.elements.container.querySelector(selector);\n }\n\n // Set focus and tab focus class\n function setFocus(element = null, focusVisible = false) {\n if (!is.element(element)) return;\n\n // Set regular focus\n element.focus({\n preventScroll: true,\n focusVisible\n });\n }\n\n // ==========================================================================\n\n // Default codecs for checking mimetype support\n const 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\n const support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n // Check for support\n // Basic functionality vs full UI\n check(type, provider) {\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput;\n return {\n api,\n ui\n };\n },\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n // While iPhone's support picture-in-picture for some apps, seemingly Safari isn't one of them\n // It will throw the following error when trying to enter picture-in-picture\n // `NotSupportedError: The Picture-in-Picture mode is not supported.`\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n return false;\n })(),\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(input) {\n if (is.empty(input)) {\n return false;\n }\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (_) {\n return false;\n }\n },\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\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 // Detect transitions support\n transitions: transitionEndEvent !== false,\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\n // ==========================================================================\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\n const 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 (_) {\n // Do nothing\n }\n return supported;\n })();\n\n // Toggle event listener\n 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 // 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({\n element,\n type,\n callback,\n options\n });\n }\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n }\n\n // Bind event handler\n 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\n 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\n function once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n }\n\n // Trigger event\n 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: {\n ...detail,\n plyr: this\n }\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n }\n\n // Unbind all cached event listeners\n function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const {\n element,\n type,\n callback,\n options\n } = item;\n element.removeEventListener(type, callback, options);\n });\n this.eventListeners = [];\n }\n }\n\n // Run method when / if player is ready\n function ready() {\n return new Promise(resolve => this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)).then(() => {});\n }\n\n /**\n * Silence a Promise-like object.\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n * @param {Object} value An object that may or may not be `Promise`-like.\n */\n function silencePromise(value) {\n if (is.promise(value)) {\n value.then(null, () => {});\n }\n }\n\n // ==========================================================================\n\n // Remove duplicates in an array\n function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n return array.filter((item, index) => array.indexOf(item) === index);\n }\n\n // Get the closest value in an array\n function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n return array.reduce((prev, curr) => Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev);\n }\n\n // ==========================================================================\n\n // Check support for a CSS declaration\n function supportsCSS(declaration) {\n if (!window || !window.CSS) {\n return false;\n }\n return window.CSS.supports(declaration);\n }\n\n // Standard/common aspect ratios\n const standardRatios = [[1, 1], [4, 3], [3, 4], [5, 4], [4, 5], [3, 2], [2, 3], [16, 10], [10, 16], [16, 9], [9, 16], [21, 9], [9, 21], [32, 9], [9, 32]].reduce((out, [x, y]) => ({\n ...out,\n [x / y]: [x, y]\n }), {});\n\n // Validate an aspect ratio\n function validateAspectRatio(input) {\n if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n return false;\n }\n const ratio = is.array(input) ? input : input.split(':');\n return ratio.map(Number).every(is.number);\n }\n\n // Reduce an aspect ratio to it's lowest form\n function reduceAspectRatio(ratio) {\n if (!is.array(ratio) || !ratio.every(is.number)) {\n return null;\n }\n const [width, height] = ratio;\n const getDivider = (w, h) => h === 0 ? w : getDivider(h, w % h);\n const divider = getDivider(width, height);\n return [width / divider, height / divider];\n }\n\n // Calculate an aspect ratio\n function getAspectRatio(input) {\n const parse = ratio => validateAspectRatio(ratio) ? ratio.split(':').map(Number) : null;\n // Try provided ratio\n let ratio = parse(input);\n\n // Get from config\n if (ratio === null) {\n ratio = parse(this.config.ratio);\n }\n\n // Get from embed\n if (ratio === null && !is.empty(this.embed) && is.array(this.embed.ratio)) {\n ({\n ratio\n } = this.embed);\n }\n\n // Get from HTML5 video\n if (ratio === null && this.isHTML5) {\n const {\n videoWidth,\n videoHeight\n } = this.media;\n ratio = [videoWidth, videoHeight];\n }\n return reduceAspectRatio(ratio);\n }\n\n // Set aspect ratio for responsive container\n function setAspectRatio(input) {\n if (!this.isVideo) {\n return {};\n }\n const {\n wrapper\n } = this.elements;\n const ratio = getAspectRatio.call(this, input);\n if (!is.array(ratio)) {\n return {};\n }\n const [x, y] = reduceAspectRatio(ratio);\n const useNative = supportsCSS(`aspect-ratio: ${x}/${y}`);\n const padding = 100 / x * y;\n if (useNative) {\n wrapper.style.aspectRatio = `${x}/${y}`;\n } else {\n wrapper.style.paddingBottom = `${padding}%`;\n }\n\n // For Vimeo we have an extra
to hide the standard controls and UI\n if (this.isVimeo && !this.config.vimeo.premium && this.supported.ui) {\n const height = 100 / this.media.offsetWidth * parseInt(window.getComputedStyle(this.media).paddingBottom, 10);\n const offset = (height - padding) / (height / 50);\n if (this.fullscreen.active) {\n wrapper.style.paddingBottom = null;\n } else {\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n } else if (this.isHTML5) {\n wrapper.classList.add(this.config.classNames.videoFixedRatio);\n }\n return {\n padding,\n ratio\n };\n }\n\n // Round an aspect ratio to closest standard ratio\n function roundAspectRatio(x, y, tolerance = 0.05) {\n const ratio = x / y;\n const closestRatio = closest(Object.keys(standardRatios), ratio);\n\n // Check match is within tolerance\n if (Math.abs(closestRatio - ratio) <= tolerance) {\n return standardRatios[closestRatio];\n }\n\n // No match\n return [x, y];\n }\n\n // Get the size of the viewport\n // https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions\n function getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return [width, height];\n }\n\n // ==========================================================================\n const html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter(source => {\n const type = source.getAttribute('type');\n if (is.empty(type)) {\n return true;\n }\n return support.mime.call(this, type);\n });\n },\n // Get quality levels\n getQualityOptions() {\n // Whether we're forcing all options (e.g. for streaming)\n if (this.config.quality.forced) {\n return this.config.quality.options;\n }\n\n // Get sizes from elements\n return html5.getSources.call(this).map(source => Number(source.getAttribute('size'))).filter(Boolean);\n },\n setup() {\n if (!this.isHTML5) {\n return;\n }\n const player = this;\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set aspect ratio if fixed\n if (!is.empty(this.config.ratio)) {\n setAspectRatio.call(player);\n }\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(s => s.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n if (player.quality === input) {\n return;\n }\n\n // If we're using an external handler...\n if (player.config.quality.forced && is.function(player.config.quality.onChange)) {\n player.config.quality.onChange(input);\n } else {\n // Get sources\n const sources = html5.getSources.call(player);\n // Get first match for requested size\n const source = sources.find(s => Number(s.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const {\n currentTime,\n paused,\n preload,\n readyState,\n playbackRate\n } = 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.speed = playbackRate;\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n silencePromise(player.play());\n }\n });\n\n // Load new source\n player.media.load();\n }\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input\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\n // ==========================================================================\n\n // Generate a random ID\n function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n }\n\n // Format string\n function format(input, ...args) {\n if (is.empty(input)) return input;\n return input.toString().replace(/{(\\d+)}/g, (_, i) => args[i].toString());\n }\n\n // Get percentage\n function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n }\n\n // Replace all occurrences of a string in a string\n const replaceAll = (input = '', find = '', replace = '') => input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n\n // Convert to title case\n const toTitleCase = (input = '') => input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase());\n\n // Convert string to pascalCase\n 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\n 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\n 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\n function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n }\n\n // ==========================================================================\n\n // Skip i18n for abbreviations and brand names\n const resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube'\n };\n const i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n let string = getDeep(config.i18n, key);\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n return '';\n }\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title\n };\n Object.entries(replace).forEach(([k, v]) => {\n string = replaceAll(string, k, v);\n });\n return string;\n }\n };\n\n class Storage {\n constructor(player) {\n _defineProperty$1(this, \"get\", key => {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n const store = window.localStorage.getItem(this.key);\n if (is.empty(store)) {\n return null;\n }\n const json = JSON.parse(store);\n return is.string(key) && key.length ? json[key] : json;\n });\n _defineProperty$1(this, \"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 try {\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n } catch (_) {\n // Do nothing\n }\n });\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 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 return true;\n } catch (_) {\n return false;\n }\n }\n }\n\n // ==========================================================================\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n // ==========================================================================\n\n 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 request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (_) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n // ==========================================================================\n\n // Load an external SVG sprite\n function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n const exists = () => document.getElementById(id) !== null;\n const update = (container, data) => {\n // eslint-disable-next-line no-param-reassign\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 // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\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 if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url).then(result => {\n if (is.empty(result)) {\n return;\n }\n if (useStorage) {\n try {\n window.localStorage.setItem(`${prefix}-${id}`, JSON.stringify({\n content: result\n }));\n } catch (_) {\n // Do nothing\n }\n }\n update(container, result);\n }).catch(() => {});\n }\n }\n\n // ==========================================================================\n\n // Time helpers\n const getHours = value => Math.trunc(value / 60 / 60 % 60, 10);\n const getMinutes = value => Math.trunc(value / 60 % 60, 10);\n const getSeconds = value => Math.trunc(value % 60, 10);\n\n // Format time to UI friendly string\n 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(undefined, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\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 // ==========================================================================\n\n // TODO: Don't export a massive object - break down and create class\n const controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const host = window.location.host ? window.location.host : window.top.location.host;\n const cors = url.host !== host || browser.isIE && !window.svg4everybody;\n return {\n url: this.config.iconUrl,\n cors\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(`.${this.config.classNames.tooltip}`);\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 return false;\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 // Create \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(icon, extend(attributes, {\n 'aria-hidden': 'true',\n focusable: 'false'\n }));\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n return icon;\n },\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n const attributes = {\n ...attr,\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n };\n return createElement('span', attributes, text);\n },\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n const badge = createElement('span', {\n class: this.config.classNames.menu.value\n });\n badge.appendChild(createElement('span', {\n class: this.config.classNames.menu.badge\n }, text));\n return badge;\n },\n // Create a
`);\n }\n\n // Set position\n tipElement.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || !this.config.invertTime && this.currentTime) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n if (this.config.markers.enabled) {\n controls.setMarkers.call(this);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n if (is.element(target)) {\n target.checked = true;\n }\n },\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n if (!label.length) {\n return `${value}p`;\n }\n return label;\n }\n return toTitleCase(value);\n case 'captions':\n return captions.getLabel.call(this);\n default:\n return null;\n }\n },\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n if (!label.length) {\n return null;\n }\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality.sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n }).forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n // Empty the menu\n emptyElement(list);\n options.forEach(option => {\n const item = createElement('li');\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language'\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language'\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n controls.updateSetting.call(this, type, list);\n },\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Filter out invalid speeds\n this.options.speed = this.options.speed.filter(o => o >= this.minimumSpeed && o <= this.maximumSpeed);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const {\n buttons\n } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n toggleHidden(this.elements.settings.menu, !visible);\n },\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, focusVisible = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n let target = pane;\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(p => !p.hidden);\n }\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, focusVisible);\n },\n // Show/hide menu\n toggleMenu(input) {\n const {\n popup\n } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const {\n hidden\n } = popup;\n let show = hidden;\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.key === 'Escape') {\n show = false;\n } else if (is.event(input)) {\n // If Plyr is in a shadowDOM, the event target is set to the component, instead of the\n // Element in the shadowDOM. The path, if available, is complete.\n const target = is.function(input.composedPath) ? input.composedPath()[0] : input.target;\n const isMenuItem = popup.contains(target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || !isMenuItem && input.target !== button && show) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n return {\n width,\n height\n };\n },\n // Show a panel in the menu\n showMenuPanel(type = '', focusVisible = false) {\n const target = this.elements.container.querySelector(`#plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, focusVisible);\n },\n // Set the download URL\n setDownloadUrl() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set attribute\n button.setAttribute('href', this.download);\n },\n // Build the default HTML\n create(data) {\n const {\n bindMenuItemShortcuts,\n createButton,\n createProgress,\n createRange,\n createTime,\n setQualityMenu,\n setSpeedMenu,\n showMenuPanel\n } = controls;\n this.elements.controls = null;\n\n // Larger overlaid play button\n if (is.array(this.config.controls) && this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(createButton.call(this, 'play-large'));\n }\n\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n this.elements.controls = container;\n\n // Default item attributes\n const defaultAttributes = {\n class: 'plyr__controls__item'\n };\n\n // Loop through controls in order\n dedupe(is.array(this.config.controls) ? this.config.controls : []).forEach(control => {\n // Restart button\n if (control === 'restart') {\n container.appendChild(createButton.call(this, 'restart', defaultAttributes));\n }\n\n // Rewind button\n if (control === 'rewind') {\n container.appendChild(createButton.call(this, 'rewind', defaultAttributes));\n }\n\n // Play/Pause button\n if (control === 'play') {\n container.appendChild(createButton.call(this, 'play', defaultAttributes));\n }\n\n // Fast forward button\n if (control === 'fast-forward') {\n container.appendChild(createButton.call(this, 'fast-forward', defaultAttributes));\n }\n\n // Progress\n if (control === 'progress') {\n const progressContainer = createElement('div', {\n class: `${defaultAttributes.class} plyr__progress__container`\n });\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`\n }));\n\n // Buffer progress\n progress.appendChild(createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement('span', {\n class: this.config.classNames.tooltip\n }, '00:00');\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n this.elements.progress = progress;\n progressContainer.appendChild(this.elements.progress);\n container.appendChild(progressContainer);\n }\n\n // Media current time display\n if (control === 'current-time') {\n container.appendChild(createTime.call(this, 'currentTime', defaultAttributes));\n }\n\n // Media duration display\n if (control === 'duration') {\n container.appendChild(createTime.call(this, 'duration', defaultAttributes));\n }\n\n // Volume controls\n if (control === 'mute' || control === 'volume') {\n let {\n volume\n } = this.elements;\n\n // Create the volume container if needed\n if (!is.element(volume) || !container.contains(volume)) {\n volume = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__volume`.trim()\n }));\n this.elements.volume = volume;\n container.appendChild(volume);\n }\n\n // Toggle mute button\n if (control === 'mute') {\n volume.appendChild(createButton.call(this, 'mute'));\n }\n\n // Volume range control\n // Ignored on iOS as it's handled globally\n // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html\n if (control === 'volume' && !browser.isIos && !browser.isIPadOS) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume\n };\n\n // Create the volume range slider\n volume.appendChild(createRange.call(this, 'volume', extend(attributes, {\n id: `plyr-volume-${data.id}`\n })));\n }\n }\n\n // Toggle captions button\n if (control === 'captions') {\n container.appendChild(createButton.call(this, 'captions', defaultAttributes));\n }\n\n // Settings button / menu\n if (control === 'settings' && !is.empty(this.config.settings)) {\n const wrapper = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__menu`.trim(),\n hidden: ''\n }));\n wrapper.appendChild(createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false\n }));\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: ''\n });\n const inner = createElement('div');\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu'\n });\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement('button', extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: ''\n }));\n\n // Bind menu shortcuts for keyboard users\n bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on.call(this, menuItem, 'click', () => {\n showMenuPanel.call(this, type, false);\n });\n const flex = createElement('span', null, i18n.get(type, this.config));\n const value = createElement('span', {\n class: this.config.classNames.menu.value\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: ''\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`\n });\n\n // Visible label\n backButton.appendChild(createElement('span', {\n 'aria-hidden': true\n }, i18n.get(type, this.config)));\n\n // Screen reader label\n backButton.appendChild(createElement('span', {\n class: this.config.classNames.hidden\n }, i18n.get('menuBack', this.config)));\n\n // Go back via keyboard\n on.call(this, pane, 'keydown', event => {\n if (event.key !== 'ArrowLeft') return;\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n showMenuPanel.call(this, 'home', true);\n }, false);\n\n // Go back via button click\n on.call(this, backButton, 'click', () => {\n showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(createElement('div', {\n role: 'menu'\n }));\n inner.appendChild(pane);\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n popup.appendChild(inner);\n wrapper.appendChild(popup);\n container.appendChild(wrapper);\n this.elements.settings.popup = popup;\n this.elements.settings.menu = wrapper;\n }\n\n // Picture in picture button\n if (control === 'pip' && support.pip) {\n container.appendChild(createButton.call(this, 'pip', defaultAttributes));\n }\n\n // Airplay button\n if (control === 'airplay' && support.airplay) {\n container.appendChild(createButton.call(this, 'airplay', defaultAttributes));\n }\n\n // Download button\n if (control === 'download') {\n const attributes = extend({}, defaultAttributes, {\n element: 'a',\n href: this.download,\n target: '_blank'\n });\n\n // Set download attribute for HTML5 only\n if (this.isHTML5) {\n attributes.download = '';\n }\n const {\n download\n } = this.config.urls;\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider\n });\n }\n container.appendChild(createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (control === 'fullscreen') {\n container.appendChild(createButton.call(this, 'fullscreen', defaultAttributes));\n }\n });\n\n // Set available quality levels\n if (this.isHTML5) {\n setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n setSpeedMenu.call(this);\n return container;\n },\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this)\n // TODO: Looping\n // loop: 'None',\n });\n\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n button.setAttribute('aria-pressed', 'false');\n Object.defineProperty(button, 'pressed', {\n configurable: true,\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n button.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n }\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons).filter(Boolean).forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a repaint\n if (browser.isEdge) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const {\n classNames,\n selectors\n } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n // Set media metadata\n setMediaMetadata() {\n try {\n if ('mediaSession' in navigator) {\n navigator.mediaSession.metadata = new window.MediaMetadata({\n title: this.config.mediaMetadata.title,\n artist: this.config.mediaMetadata.artist,\n album: this.config.mediaMetadata.album,\n artwork: this.config.mediaMetadata.artwork\n });\n }\n } catch (_) {\n // Do nothing\n }\n },\n // Add markers\n setMarkers() {\n var _this$config$markers2, _this$config$markers3;\n if (!this.duration || this.elements.markers) return;\n\n // Get valid points\n const points = (_this$config$markers2 = this.config.markers) === null || _this$config$markers2 === void 0 ? void 0 : (_this$config$markers3 = _this$config$markers2.points) === null || _this$config$markers3 === void 0 ? void 0 : _this$config$markers3.filter(({\n time\n }) => time > 0 && time < this.duration);\n if (!(points !== null && points !== void 0 && points.length)) return;\n const containerFragment = document.createDocumentFragment();\n const pointsFragment = document.createDocumentFragment();\n let tipElement = null;\n const tipVisible = `${this.config.classNames.tooltip}--visible`;\n const toggleTip = show => toggleClass(tipElement, tipVisible, show);\n\n // Inject markers to progress container\n points.forEach(point => {\n const markerElement = createElement('span', {\n class: this.config.classNames.marker\n }, '');\n const left = `${point.time / this.duration * 100}%`;\n if (tipElement) {\n // Show on hover\n markerElement.addEventListener('mouseenter', () => {\n if (point.label) return;\n tipElement.style.left = left;\n tipElement.innerHTML = point.label;\n toggleTip(true);\n });\n\n // Hide on leave\n markerElement.addEventListener('mouseleave', () => {\n toggleTip(false);\n });\n }\n markerElement.addEventListener('click', () => {\n this.currentTime = point.time;\n });\n markerElement.style.left = left;\n pointsFragment.appendChild(markerElement);\n });\n containerFragment.appendChild(pointsFragment);\n\n // Inject a tooltip if needed\n if (!this.config.tooltips.seek) {\n tipElement = createElement('span', {\n class: this.config.classNames.tooltip\n }, '');\n containerFragment.appendChild(tipElement);\n }\n this.elements.markers = {\n points: pointsFragment,\n tip: tipElement\n };\n this.elements.progress.appendChild(containerFragment);\n }\n };\n\n // ==========================================================================\n\n /**\n * Parse a string to a URL object\n * @param {String} input - the URL to be parsed\n * @param {Boolean} safe - failsafe parsing\n */\n function parseUrl(input, safe = true) {\n let url = input;\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n try {\n return new URL(url);\n } catch (_) {\n return null;\n }\n }\n\n // Convert object to URLSearchParams\n function buildUrlParams(input) {\n const params = new URLSearchParams();\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n return params;\n }\n\n // ==========================================================================\n const captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {\n // Clear menu and hide\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n this.elements.captions.setAttribute('dir', 'auto');\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) {\n fetch(src, 'blob').then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n }).catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({\n active\n } = this.config.captions);\n }\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const {\n active,\n language,\n meta,\n currentTrackNode\n } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing'\n });\n\n // Turn off native caption rendering to avoid double captions\n // Note: mode='hidden' forces a track to download. To ensure every track\n // isn't downloaded at once, only 'showing' tracks should be reassigned\n // eslint-disable-next-line no-param-reassign\n if (track.mode === 'showing') {\n // eslint-disable-next-line no-param-reassign\n track.mode = 'hidden';\n }\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n if (this.elements) {\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n }\n\n // Update available languages in list\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n const {\n toggled\n } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({\n captions: active\n });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n // Wait for the call stack to clear before setting mode='hidden'\n // on the active track - forcing the browser to download it\n setTimeout(() => {\n if (active && this.captions.toggled) {\n this.captions.currentTrackNode.mode = 'hidden';\n }\n });\n },\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const {\n language\n } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({\n language\n });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks.filter(track => !this.isHTML5 || update || this.captions.meta.has(track)).filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(t => t.language === language);\n return !track; // Break iteration if there is a match\n });\n\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n return i18n.get('enabled', this.config);\n }\n return i18n.get('disabled', this.config);\n },\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || []).map(cue => cue.getCueAsHTML()).map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n }\n };\n\n // ==========================================================================\n // Plyr default config\n // ==========================================================================\n\n const defaults = {\n // Disable\n enabled: true,\n // Custom media title\n title: '',\n // Logging to console\n debug: false,\n // Auto play (if supported)\n autoplay: false,\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n // Allow inline playback on iOS\n playsinline: true,\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n // Default volume\n volume: 1,\n muted: false,\n // Pass a custom duration\n duration: null,\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n // Invert the current time to be a countdown\n invertTime: true,\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n // Force an aspect ratio\n // The format must be `'w:h'` (e.g. `'16:9'`)\n ratio: null,\n // Click video container to play/pause\n clickToPlay: true,\n // Auto hide the controls\n hideControls: true,\n // Reset to start when playback ended\n resetOnEnd: false,\n // Disable the standard context menu\n disableContextMenu: true,\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.7.8/plyr.svg',\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n // Quality default\n quality: {\n default: 576,\n // The options to display in the UI, if available for the source media\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n forced: false,\n onChange: null\n },\n // Set loops\n loop: {\n active: false\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n // The options to display in the UI, if available for the source media (e.g. Vimeo and YouTube only support 0.5x-4x)\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 4]\n },\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false\n },\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true\n },\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false\n },\n // Fullscreen settings\n fullscreen: {\n enabled: true,\n // Allow fullscreen?\n fallback: true,\n // Fallback using full viewport/window\n iosNative: false // Use the native fullscreen in iOS (disables custom controls)\n // Selector for the fullscreen container so contextual / non-player content can remain visible in fullscreen mode\n // Non-ancestors of the player element will be ignored\n // container: null, // defaults to the player element\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr'\n },\n // Default controls\n controls: ['play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress', 'current-time',\n // 'duration',\n 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay',\n // 'download',\n 'fullscreen'],\n settings: ['captions', 'quality', 'speed'],\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n pip: 'PIP',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD'\n }\n },\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/oembed.json?url={0}'\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}'\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'\n }\n },\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null\n },\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',\n // Custom events\n 'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',\n // YouTube\n 'statechange',\n // Quality\n 'qualitychange',\n // Ads\n 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls'\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]'\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]'\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop',\n // Used later\n volume: '.plyr__volume--display'\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption'\n },\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n marker: 'plyr__progress__marker',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time'\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open'\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active'\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback'\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active'\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active'\n },\n previewThumbnails: {\n // Tooltip thumbs\n thumbContainer: 'plyr__preview-thumb',\n thumbContainerShown: 'plyr__preview-thumb--is-shown',\n imageContainer: 'plyr__preview-thumb__image-container',\n timeContainer: 'plyr__preview-thumb__time-container',\n // Scrubbing\n scrubbingContainer: 'plyr__preview-scrubbing',\n scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown'\n }\n },\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n hash: 'data-plyr-embed-hash'\n }\n },\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n tagUrl: ''\n },\n // Preview Thumbnails plugin\n previewThumbnails: {\n enabled: false,\n src: ''\n },\n // Vimeo plugin\n vimeo: {\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: false,\n // Custom settings from Plyr\n customControls: true,\n referrerPolicy: null,\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy\n // Whether the owner of the video has a Pro or Business account\n // (which allows us to properly hide controls without CSS hacks, etc)\n premium: false\n },\n // YouTube plugin\n youtube: {\n rel: 0,\n // No related vids\n showinfo: 0,\n // Hide info\n iv_load_policy: 3,\n // Hide annotations\n modestbranding: 1,\n // Hide logos as much as possible (they still show one in the corner when paused)\n // Custom settings from Plyr\n customControls: true,\n noCookie: false // Whether to use an alternative version of YouTube without cookies\n },\n\n // Media Metadata\n mediaMetadata: {\n title: '',\n artist: '',\n album: '',\n artwork: []\n },\n // Markers\n markers: {\n enabled: false,\n points: []\n }\n };\n\n // ==========================================================================\n // Plyr states\n // ==========================================================================\n\n const pip = {\n active: 'picture-in-picture',\n inactive: 'inline'\n };\n\n // ==========================================================================\n // Plyr supported types and providers\n // ==========================================================================\n\n const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo'\n };\n const types = {\n audio: 'audio',\n video: 'video'\n };\n\n /**\n * Get provider by URL\n * @param {String} url\n */\n function getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n return null;\n }\n\n // ==========================================================================\n // Console wrapper\n // ==========================================================================\n\n const noop = () => {};\n class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n }\n\n class Fullscreen {\n constructor(player) {\n _defineProperty$1(this, \"onChange\", () => {\n if (!this.supported) return;\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Always trigger events on the plyr / media element (not a fullscreen container) and let them bubble up\n const target = this.target === this.player.media ? this.target : this.player.elements.container;\n // Trigger an event\n triggerEvent.call(this.player, target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n });\n _defineProperty$1(this, \"toggleFallback\", (toggle = false) => {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX ?? 0,\n y: window.scrollY ?? 0\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n if (!hasProperty) viewport.content += `,${property}`;\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content.split(',').filter(part => part.trim() !== property).join(',');\n }\n }\n\n // Toggle button and fire events\n this.onChange();\n });\n // Trap focus inside container\n _defineProperty$1(this, \"trapFocus\", event => {\n // Bail if iOS/iPadOS, not active, not the tab key\n if (browser.isIos || browser.isIPadOS || !this.active || event.key !== 'Tab') return;\n\n // Get the current focused element\n const focused = document.activeElement;\n const focusable = getElements.call(this.player, 'a[href], button:not(:disabled), input:not(:disabled), [tabindex]');\n const [first] = focusable;\n const last = focusable[focusable.length - 1];\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 // Update UI\n _defineProperty$1(this, \"update\", () => {\n if (this.supported) {\n let mode;\n if (this.forceFallback) mode = 'Fallback (forced)';else if (Fullscreen.nativeSupported) mode = 'Native';else mode = 'Fallback';\n this.player.debug.log(`${mode} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.supported);\n });\n // Make an element fullscreen\n _defineProperty$1(this, \"enter\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.requestFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(true);\n } else if (!this.prefix) {\n this.target.requestFullscreen({\n navigationUI: 'hide'\n });\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n });\n // Bail from fullscreen\n _defineProperty$1(this, \"exit\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.exitFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n silencePromise(this.player.play());\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n });\n // Toggle state\n _defineProperty$1(this, \"toggle\", () => {\n if (!this.active) this.enter();else this.exit();\n });\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = {\n x: 0,\n y: 0\n };\n\n // Force the use of 'full window/browser' rather than fullscreen\n this.forceFallback = player.config.fullscreen.fallback === 'force';\n\n // Get the fullscreen element\n // Checks container is an ancestor, defaults to null\n this.player.elements.fullscreen = player.config.fullscreen.container && closest$1(this.player.elements.container, player.config.fullscreen.container);\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n this.onChange();\n });\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n this.player.listeners.proxy(event, this.toggle, 'fullscreen');\n });\n\n // Tap focus when in fullscreen\n on.call(this, this.player.elements.container, 'keydown', event => this.trapFocus(event));\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get nativeSupported() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // If we're actually using native\n get useNative() {\n return Fullscreen.nativeSupported && !this.forceFallback;\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) return '';\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n return false;\n });\n return value;\n }\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is supported\n get supported() {\n return [\n // Fullscreen is enabled in config\n this.player.config.fullscreen.enabled,\n // Must be a video\n this.player.isVideo,\n // Either native is supported or fallback enabled\n Fullscreen.nativeSupported || this.player.config.fullscreen.fallback,\n // YouTube has no way to trigger fullscreen, so on devices with no native support, playsinline\n // must be enabled and iosNative fullscreen must be disabled to offer the fullscreen fallback\n !this.player.isYouTube || Fullscreen.nativeSupported || !browser.isIos || this.player.config.playsinline && !this.player.config.fullscreen.iosNative].every(Boolean);\n }\n\n // Get active state\n get active() {\n if (!this.supported) return false;\n\n // Fallback using classname\n if (!Fullscreen.nativeSupported || this.forceFallback) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n const element = !this.prefix ? this.target.getRootNode().fullscreenElement : this.target.getRootNode()[`${this.prefix}${this.property}Element`];\n return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.fullscreen ?? this.player.elements.container;\n }\n }\n\n // ==========================================================================\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n // By default it checks if it is at least 1px, but you can add a second argument to change this\n // ==========================================================================\n\n function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {\n onload: handler,\n onerror: handler,\n src\n });\n });\n }\n\n // ==========================================================================\n const ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Reset duration display\n controls.durationUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n\n // Media metadata\n if (this.config.mediaMetadata) {\n controls.setMediaMetadata.call(this);\n }\n },\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('data-poster', poster);\n\n // Show the poster\n this.elements.poster.removeAttribute('hidden');\n\n // Wait until ui is ready\n return ready.call(this)\n // Load image\n .then(() => loadImage(poster)).catch(error => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw error;\n }).then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n }).then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: ''\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n },\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n Object.assign(target, {\n pressed: this.playing\n });\n target.setAttribute('aria-label', i18n.get(this.playing ? 'pause' : 'play', this.config));\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const {\n controls: controlsElement\n } = this.elements;\n if (controlsElement && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now();\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek));\n }\n },\n // Migrate any custom properties from the media to the parent\n migrateStyles() {\n // Loop through values (as they are the keys when the object is spread 🤔)\n Object.values({\n ...this.media.style\n })\n // We're only fussed about Plyr specific properties\n .filter(key => !is.empty(key) && is.string(key) && key.startsWith('--plyr')).forEach(key => {\n // Set on the container\n this.elements.container.style.setProperty(key, this.media.style.getPropertyValue(key));\n\n // Clean up from media element\n this.media.style.removeProperty(key);\n });\n\n // Remove attribute if empty\n if (is.empty(this.media.style)) {\n this.media.removeAttribute('style');\n }\n }\n };\n\n class Listeners {\n constructor(_player) {\n // Device is touch enabled\n _defineProperty$1(this, \"firstTouch\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n });\n // Global window & document listeners\n _defineProperty$1(this, \"global\", (toggle = true) => {\n const {\n player\n } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n });\n // Container listeners\n _defineProperty$1(this, \"container\", () => {\n const {\n player\n } = this;\n const {\n config,\n elements,\n timers\n } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const {\n controls: controlsElement\n } = elements;\n\n // Remove button states for fullscreen\n if (controlsElement && event.type === 'enterfullscreen') {\n controlsElement.pressed = false;\n controlsElement.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n let delay = 0;\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Set a gutter for Vimeo\n const setGutter = () => {\n if (!player.isVimeo || player.config.vimeo.premium) {\n return;\n }\n const target = elements.wrapper;\n const {\n active\n } = player.fullscreen;\n const [videoWidth, videoHeight] = getAspectRatio.call(player);\n const useNativeAspectRatio = supportsCSS(`aspect-ratio: ${videoWidth} / ${videoHeight}`);\n\n // If not active, remove styles\n if (!active) {\n if (useNativeAspectRatio) {\n target.style.width = null;\n target.style.height = null;\n } else {\n target.style.maxWidth = null;\n target.style.margin = null;\n }\n return;\n }\n\n // Determine which dimension will overflow and constrain view\n const [viewportWidth, viewportHeight] = getViewportSize();\n const overflow = viewportWidth / viewportHeight > videoWidth / videoHeight;\n if (useNativeAspectRatio) {\n target.style.width = overflow ? 'auto' : '100%';\n target.style.height = overflow ? '100%' : 'auto';\n } else {\n target.style.maxWidth = overflow ? `${viewportHeight / videoHeight * videoWidth}px` : null;\n target.style.margin = overflow ? '0 auto' : null;\n }\n };\n\n // Handle resizing\n const resized = () => {\n clearTimeout(timers.resized);\n timers.resized = setTimeout(setGutter, 50);\n };\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const {\n target\n } = player.fullscreen;\n\n // Ignore events not from target\n if (target !== elements.container) {\n return;\n }\n\n // If it's not an embed and no ratio specified\n if (!player.isEmbed && is.empty(player.config.ratio)) {\n return;\n }\n\n // Set Vimeo gutter\n setGutter();\n\n // Watch for resizes\n const method = event.type === 'enterfullscreen' ? on : off;\n method.call(player, window, 'resize', resized);\n });\n });\n // Listen for media events\n _defineProperty$1(this, \"media\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(player, event));\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n\n // Call pause otherwise IE11 will start playing the video again\n player.pause();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(player, event));\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(player, event));\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(event, () => {\n silencePromise(player.play());\n }, 'play');\n } else {\n this.proxy(event, () => {\n silencePromise(player.togglePlay());\n }, 'play');\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(player, elements.wrapper, 'contextmenu', event => {\n event.preventDefault();\n }, false);\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({\n speed: player.speed\n });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadUrl.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(player, player.media, proxyEvents, event => {\n let {\n detail = {}\n } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n });\n // Run default and custom handlers\n _defineProperty$1(this, \"proxy\", (event, defaultHandler, customHandlerKey) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned !== false && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n });\n // Trigger custom and default handlers\n _defineProperty$1(this, \"bind\", (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n on.call(player, element, type, event => this.proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n });\n // Listen for control events\n _defineProperty$1(this, \"controls\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', () => {\n silencePromise(player.togglePlay());\n }, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after rewind\n player.lastSeekTime = Date.now();\n player.rewind();\n }, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after fast forward\n player.lastSeekTime = Date.now();\n player.forward();\n }, 'fastForward');\n\n // Mute toggle\n this.bind(elements.buttons.mute, 'click', () => {\n player.muted = !player.muted;\n }, 'mute');\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(elements.buttons.download, 'click', () => {\n triggerEvent.call(player, player.media, 'download');\n }, 'download');\n\n // Fullscreen toggle\n this.bind(elements.buttons.fullscreen, 'click', () => {\n player.fullscreen.toggle();\n }, 'fullscreen');\n\n // Picture-in-Picture\n this.bind(elements.buttons.pip, 'click', () => {\n player.pip = 'toggle';\n }, 'pip');\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n event.preventDefault();\n controls.toggleMenu.call(player, event);\n }, null, false); // Can't be passive as we're preventing default\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(elements.buttons.settings, 'keyup', event => {\n if (![' ', 'Enter'].includes(event.key)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (event.key === 'Enter') {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n }, null, false // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.key === 'Escape') {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = 100 / rect.width * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const attribute = 'play-on-seeked';\n if (is.keyboardEvent(event) && !['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n silencePromise(player.play());\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(elements.inputs.seek, inputEvent, event => {\n const seek = event.currentTarget;\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n seek.removeAttribute('seek-value');\n player.currentTime = seekTo / seek.max * player.duration;\n }, 'seek');\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(player, event));\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave touchend click', () => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n this.bind(elements.progress, 'mouseup touchend', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebKit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n player.config.invertTime = !player.config.invertTime;\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(elements.inputs.volume, inputEvent, event => {\n player.volume = event.target.value;\n }, 'volume');\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Also update controls.hover state for any non-player children of fullscreen element (as above)\n if (elements.fullscreen) {\n Array.from(elements.fullscreen.children).filter(c => !c.contains(elements.container)).forEach(child => {\n this.bind(child, 'mouseenter mouseleave', event => {\n if (elements.controls) {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n }\n });\n });\n }\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const {\n config,\n timers\n } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(elements.inputs.volume, 'wheel', event => {\n // Detect \"natural\" scroll - supported on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => inverted ? -value : value);\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const {\n volume\n } = player.media;\n if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n event.preventDefault();\n }\n }, 'volume', false);\n });\n this.player = _player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n const {\n key,\n type,\n altKey,\n ctrlKey,\n metaKey,\n shiftKey\n } = event;\n const pressed = type === 'keydown';\n const repeat = pressed && key === this.lastKey;\n\n // Bail if a modifier key is set\n if (altKey || ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the key for whatever reason\n if (!key) {\n return;\n }\n\n // Seek by increment\n const seekByIncrement = increment => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = player.duration / 10 * increment;\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const {\n editable\n } = player.config.selectors;\n const {\n seek\n } = elements.inputs;\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n if (event.key === ' ' && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keys should we prevent default\n const preventDefault = [' ', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'c', 'f', 'k', 'l', 'm'];\n\n // If the key is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n }\n switch (key) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n if (!repeat) {\n seekByIncrement(parseInt(key, 10));\n }\n break;\n case ' ':\n case 'k':\n if (!repeat) {\n silencePromise(player.togglePlay());\n }\n break;\n case 'ArrowUp':\n player.increaseVolume(0.1);\n break;\n case 'ArrowDown':\n player.decreaseVolume(0.1);\n break;\n case 'm':\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n case 'ArrowRight':\n player.forward();\n break;\n case 'ArrowLeft':\n player.rewind();\n break;\n case 'f':\n player.fullscreen.toggle();\n break;\n case 'c':\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n case 'l':\n player.loop = !player.loop;\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (key === 'Escape' && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n }\n\n // Store last key for next cycle\n this.lastKey = key;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n }\n\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var loadjs_umd = createCommonjsModule(function (module, exports) {\n (function (root, factory) {\n {\n module.exports = factory();\n }\n })(commonjsGlobal, function () {\n /**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\n var devnull = function () {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n /**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\n function subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n }\n\n /**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\n function publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n }\n\n /**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\n function executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {\n success: args\n };\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n }\n\n /**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\n function loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathname = path.replace(/[\\?|#].*$/, ''),\n pathStripped = path.replace(/^(css|img)!/, ''),\n isLegacyIECss,\n e;\n numTries = numTries || 0;\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped;\n\n // tag IE9+\n isLegacyIECss = 'hideFocus' in e;\n\n // use preload in IE Edge (to detect load errors)\n if (isLegacyIECss && e.relList) {\n isLegacyIECss = 0;\n e.rel = 'preload';\n e.as = 'style';\n }\n } else if (/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(pathname)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped;\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n if (isLegacyIECss) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n } else if (e.rel == 'preload' && e.as == 'style') {\n // activate preloaded stylesheets\n return e.rel = 'stylesheet'; // jshint ignore:line\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n }\n\n /**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\n function loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function (path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);else return;\n }\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i = 0; i < x; i++) loadFile(paths[i], fn, args);\n }\n\n /**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n * callback or (3) object literal with success/error arguments, numRetries,\n * etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n * literal with success/error arguments, numRetries, etc.\n */\n function loadjs(paths, arg1, arg2) {\n var bundleId, args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // resolve Promise\n if (resolve) {\n executeCallbacks({\n success: resolve,\n error: reject\n }, pathsNotFound);\n }\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n }\n if (args.returnPromise) return new Promise(loadFn);else loadFn();\n }\n\n /**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\n loadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n return loadjs;\n };\n\n /**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\n loadjs.done = function done(bundleId) {\n publish(bundleId, []);\n };\n\n /**\n * Reset loadjs dependencies statuses\n */\n loadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n };\n\n /**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\n loadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n };\n\n // export\n return loadjs;\n });\n });\n\n // ==========================================================================\n function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs_umd(url, {\n success: resolve,\n error: reject\n });\n });\n }\n\n // ==========================================================================\n\n // Parse Vimeo ID from URL\n function parseId$1(url) {\n if (is.empty(url)) {\n return null;\n }\n if (is.number(Number(url))) {\n return url;\n }\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n }\n\n // Try to extract a hash for private videos from the URL\n function parseHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n return found && found.length === 5 ? found[4] : null;\n }\n\n // Set playback state and trigger change (only on actual change)\n function assurePlaybackState$1(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 const vimeo = {\n setup() {\n const player = this;\n\n // Add embed class for responsive\n toggleClass(player.elements.wrapper, player.config.classNames.embed, true);\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set intial ratio\n setAspectRatio.call(player);\n\n // Load the SDK if not already\n if (!is.object(window.Vimeo)) {\n loadScript(player.config.urls.vimeo.sdk).then(() => {\n vimeo.ready.call(player);\n }).catch(error => {\n player.debug.warn('Vimeo SDK (player.js) failed to load', error);\n });\n } else {\n vimeo.ready.call(player);\n }\n },\n // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n const {\n premium,\n referrerPolicy,\n ...frameParams\n } = config;\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n let hash = '';\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n // hash can also be set as attribute on the
\n hash = player.media.getAttribute(player.config.attributes.embed.hash);\n } else {\n hash = parseHash(source);\n }\n const hashParam = hash ? {\n h: hash\n } : {};\n\n // If the owner has a pro or premium account then we can hide controls etc\n if (premium) {\n Object.assign(frameParams, {\n controls: false,\n sidedock: false\n });\n }\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams({\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: player.config.playsinline,\n // hash has to be added to iframe-URL\n ...hashParam,\n ...frameParams\n });\n const id = parseId$1(source);\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('allow', ['autoplay', 'fullscreen', 'picture-in-picture', 'encrypted-media', 'accelerometer', 'gyroscope'].join('; '));\n\n // Set the referrer policy if required\n if (!is.empty(referrerPolicy)) {\n iframe.setAttribute('referrerPolicy', referrerPolicy);\n }\n\n // Inject the package\n if (premium || !config.customControls) {\n iframe.setAttribute('data-poster', player.poster);\n player.media = replaceElement(iframe, player.media);\n } else {\n const wrapper = createElement('div', {\n class: player.config.classNames.embedContainer,\n 'data-poster': player.poster\n });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n }\n\n // Get poster image\n if (!config.customControls) {\n fetch(format(player.config.urls.vimeo.api, src)).then(response => {\n if (is.empty(response) || !response.thumbnail_url) {\n return;\n }\n\n // Set and show poster\n ui.setPoster.call(player, response.thumbnail_url).catch(() => {});\n });\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 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$1.call(player, true);\n return player.embed.play();\n };\n player.media.pause = () => {\n assurePlaybackState$1.call(player, false);\n return player.embed.pause();\n };\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let {\n currentTime\n } = 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 {\n embed,\n media,\n paused,\n volume\n } = 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)).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.setPlaybackRate(input).then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n }).catch(() => {\n // Cannot set Playback Rate, Video is probably not on Pro account\n player.options.speed = [1];\n });\n }\n });\n\n // Volume\n let {\n volume\n } = 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 {\n muted\n } = 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 player.embed.setMuted(toggle ? true : player.config.muted).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n });\n\n // Loop\n let {\n loop\n } = 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 player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n }\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n controls.setDownloadUrl.call(player);\n }).catch(error => {\n this.debug.warn(error);\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n }\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n }\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const [width, height] = dimensions;\n player.embed.ratio = roundAspectRatio(width, height);\n setAspectRatio.call(this);\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 player.embed.on('cuechange', ({\n cues = []\n }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState$1.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\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 player.embed.on('bufferstart', () => {\n triggerEvent.call(player, player.media, 'waiting');\n });\n player.embed.on('bufferend', () => {\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('play', () => {\n assurePlaybackState$1.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('pause', () => {\n assurePlaybackState$1.call(player, false);\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 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 player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\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 if (config.customControls) {\n setTimeout(() => ui.build.call(player), 0);\n }\n }\n };\n\n // ==========================================================================\n\n // Parse YouTube ID from URL\n function parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n }\n\n // Set playback state and trigger change (only on actual change)\n function 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 function getHost(config) {\n if (config.noCookie) {\n return 'https://www.youtube-nocookie.com';\n }\n if (window.location.protocol === 'http:') {\n return 'http://www.youtube.com';\n }\n\n // Use YouTube's default\n return undefined;\n }\n const youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Reference current global callback\n const callback = window.onYouTubeIframeAPIReady;\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n // Call global callback if set\n if (is.function(callback)) {\n callback();\n }\n youtube.ready.call(this);\n };\n\n // Load the SDK\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n }\n },\n // Get the media title\n getTitle(videoId) {\n const url = format(this.config.urls.youtube.api, videoId);\n fetch(url).then(data => {\n if (is.object(data)) {\n const {\n title,\n height,\n width\n } = data;\n\n // Set title\n this.config.title = title;\n ui.setTitle.call(this);\n\n // Set aspect ratio\n this.embed.ratio = roundAspectRatio(width, height);\n }\n setAspectRatio.call(this);\n }).catch(() => {\n // Set aspect ratio\n setAspectRatio.call(this);\n });\n },\n // API ready\n ready() {\n const player = this;\n const config = player.config.youtube;\n // Ignore already setup (race condition)\n const currentId = player.media && 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 \n
`\n\n modalContent.innerHTML = modalHTMLContent\n const playerElSelector = '[data-molecule=\"video/player\"]'\n const playerEl = modalContent.querySelector( playerElSelector )\n\n player = videoPlayer( playerEl, {autoplay: true})\n\n if ( isMobile() ) {\n player.fullscreen.enter()\n }\n }\n }\n}","/* global Flickity */\n/**\n * Accordion logic scripts.\n */\nexport default function accordion () {\n const AccordionWithChildrenSelector = '.accordion_item > button, .accordion_box > button'\n const subitemSelector = '.accordion_subitem_container'\n const pageSelector = '.accordion-pages'\n const flckViewportSelector = '.flickity-viewport'\n const items = document.querySelectorAll( AccordionWithChildrenSelector )\n const pages = document.querySelectorAll( pageSelector )\n let currentItem\n let currentSubitem\n let currentBox\n\n addEventListeners()\n\n /**\n * Add Accordion event listeners.\n */\n function addEventListeners() {\n items.forEach( item => {\n item.addEventListener( 'click', toggleSubitem )\n })\n\n pages.forEach( pagesItem => {\n initSlider( pagesItem )\n })\n }\n\n /**\n * Add Flickity slider to accordion list pages.\n *\n * @param {Element} pagesItem The element to convert to slider.\n */\n function initSlider( pagesItem ) {\n const flkty = new Flickity( pagesItem, {\n 'adaptiveHeight': false,\n 'wrapAround': true,\n 'draggable': false,\n 'prevNextButtons': true, \n 'pageDots': false,\n 'autoPlay': false,\n 'accessibility': true,\n 'selectedAttraction': 0.02,\n 'friction': 0.18,\n 'on': {\n 'ready': function flktyReady() {\n const currentViewport = pagesItem.querySelector( flckViewportSelector )\n if ( currentViewport ) {\n currentViewport.dataset.pageHeight = currentViewport.scrollHeight\n }\n }\n }\n })\n\n flkty.on( 'change', () => {\n closeItem( currentSubitem )\n const currentViewport = pagesItem.querySelector( flckViewportSelector )\n if ( currentViewport ) {\n currentViewport.style.height = `${currentViewport.dataset.pageHeight}px`\n setTimeout( () => currentViewport.scrollIntoView({ behavior: 'smooth' }), 600 )\n }\n })\n }\n\n /**\n * Function to toggle the subitems.\n *\n * @param {Element} e - The clicked element.\n * @return {mixed} Returns in case there's no subitems or the user clicked on the current one.\n */\n function toggleSubitem( e ) {\n e.preventDefault()\n\n const btn = e.target.tagName === 'button' ? e.target : e.target.closest( 'button' )\n\n if ( btn.getAttribute( 'aria-expanded' ) === 'true' ) {\n closeItem( currentSubitem )\n return false\n }\n\n closeItem( currentSubitem )\n\n currentItem = btn\n currentBox = btn.closest( '.accordion_item, .accordion_box' )\n currentSubitem = btn.parentElement.querySelector( subitemSelector )\n\n if ( !currentSubitem ) {\n return\n }\n\n const sectionHeight = currentSubitem.scrollHeight\n currentSubitem.style.height = `${sectionHeight}px`\n currentItem.setAttribute( 'aria-expanded', 'true' )\n currentBox.classList.add( 'active' )\n\n const currentViewport = this.closest( flckViewportSelector )\n if ( currentViewport ) {\n currentViewport.style.height = `${parseInt( currentViewport.dataset.pageHeight ) + parseInt( sectionHeight )}px`\n setTimeout( () => currentItem.scrollIntoView({ behavior: 'smooth' }), 600 )\n }\n }\n\n /**\n * Function to close item.\n *\n * @param {Element} subitem - The subitem element.\n */\n function closeItem( subitem ) {\n if ( !subitem ) {\n return\n }\n\n subitem.style.height = 0\n currentItem.setAttribute( 'aria-expanded', 'false' )\n currentBox.classList.remove( 'active' )\n\n const currentViewport = subitem.closest( flckViewportSelector )\n if ( currentViewport ) {\n currentViewport.style.height = `${currentViewport.dataset.pageHeight}px`\n }\n }\n}\n","/**\n * Agenda logic scripts.\n */\nexport default function agenda () {\n const languageSelector = document.getElementById( 'agenda_guide_language_selector' )\n const agendaDownloadPdf = document.querySelectorAll( '.agenda-download-pdf' )\n const agendaReadOnline = document.querySelectorAll( '.agenda-read-online' )\n const visionGuideDownloadPdf = document.querySelectorAll( '.vision_guide-download-pdf' )\n const visionGuideReadOnline = document.querySelectorAll( '.vision_guide-read-online' )\n\n let activeItem = document.querySelector( '.active-agenda-item' )\n\n /**\n * Send the Google Analytics event for played video.\n *\n * @param {string} event - The clicked event.\n * @param {Element} language - The clicked video element.\n */\n function googleAnalyticsEvent( event, language ) {\n const dataLayer = window.dataLayer\n\n try {\n dataLayer.push({\n event: event,\n agendaLanguage: language\n })\n // eslint-disable-next-line no-empty\n } catch ( error ) {\n }\n }\n\n agendaDownloadPdf.forEach( item => {\n item.addEventListener( 'click', () => {\n googleAnalyticsEvent( 'agenda-pdf-downloaded', languageSelector.value )\n })\n })\n\n agendaReadOnline.forEach( item => {\n item.addEventListener( 'click', () => {\n googleAnalyticsEvent( 'agenda-read-online', languageSelector.value )\n })\n })\n\n visionGuideDownloadPdf.forEach( item => {\n item.addEventListener( 'click', () => {\n googleAnalyticsEvent( 'vision-guide-pdf-downloaded', languageSelector.value )\n })\n })\n\n visionGuideReadOnline.forEach( item => {\n item.addEventListener( 'click', () => {\n googleAnalyticsEvent( 'vision-guide-read-online', languageSelector.value )\n })\n })\n\n languageSelector.addEventListener( 'change', event => {\n const item = document.getElementById( `item-language-${ event.target.value }` )\n\n googleAnalyticsEvent( 'agenda-language-switched', event.target.value )\n\n activeItem.classList.remove( 'active-agenda-item' )\n activeItem.classList.remove( 'block' )\n activeItem.classList.add( 'hidden' )\n\n item.classList.remove( 'hidden' )\n item.classList.add( 'block' )\n item.classList.add( 'active-agenda-item' )\n\n activeItem = item\n })\n}\n","/**\n * Accordion logic scripts.\n */\nexport default function childPagesContent() {\n const pageContentNavigation = document.getElementById( 'page-content-navigation' )\n const navigationMenu = pageContentNavigation.getElementsByTagName( 'ul' )[0]\n const pageFooter = document.querySelectorAll( '[data-organism=\"footer\"]' )\n const pageFooterPosition = pageFooter[0].getBoundingClientRect()\n const observer = new IntersectionObserver( intersectionObserverFn, { threshold: [0] })\n const pageContentSections = document.querySelectorAll( '.page-content-section' )\n const navigationSelectMenu = document.getElementById( 'page-content-navigation-select' )\n const navigationSelectMenuWrapper = document.getElementById( 'page-content-navigation-select-wrapper' )\n\n let lastKnownScrollPosition = window.scrollY\n\n addEventListeners()\n observeElements()\n\n /**\n * Intersection observer functionality.\n *\n * @param {Element} entries - The element.\n // */\n function intersectionObserverFn( entries ) {\n if ( entries[0].isIntersecting === true ) {\n\n if ( entries[0].target.classList.contains( 'page-content-section' ) ) {\n sectionIntercepted( entries[0].target.id )\n }\n }\n }\n\n /**\n * Section content intercepted functionality.\n *\n * @param {Element} target - The element intercepted.\n */\n function sectionIntercepted( target ) {\n const activeItem = document.querySelector( '.active-navigation-item' )\n const newActiveItem = document.getElementById( `section-nav-${ target }` )\n\n activeItem.classList.remove( 'active-navigation-item' )\n activeItem.classList.remove( 'bg-black' )\n activeItem.classList.remove( 'text-white' )\n\n newActiveItem.classList.add( 'active-navigation-item' )\n newActiveItem.classList.add( 'bg-black' )\n newActiveItem.classList.add( 'text-white' )\n }\n\n /**\n * Add header event listeners.\n */\n function addEventListeners() {\n window.addEventListener( 'scroll', scrollListenerFn )\n navigationSelectMenu.addEventListener( 'change', scrollMovileSection )\n\n navigationMenu.querySelectorAll( 'a' ).forEach( item => {\n item.addEventListener( 'click', navigationBtnClick )\n })\n }\n\n /**\n * Update intecepted section on navigation item click.\n */\n function navigationBtnClick() {\n sectionIntercepted( this.dataset.targetSection )\n }\n\n /**\n * Go to section on select change.\n *\n * @param {Event} event - The event.\n */\n function scrollMovileSection( event ) {\n const itemSection = document.getElementById( event.target.value )\n itemSection.scrollIntoView()\n }\n\n /**\n * Add observer to elements.\n */\n function observeElements() {\n pageContentSections.forEach( item => {\n observer.observe( document.getElementById( item.id ) )\n })\n }\n\n /**\n * Scroll listner function.\n */\n function scrollListenerFn() {\n lastKnownScrollPosition = window.scrollY\n\n stickySidebar( lastKnownScrollPosition )\n stickyMenuSelect( lastKnownScrollPosition )\n }\n\n /**\n * Sticky menu select functionality.\n *\n * @param {Integer} scrollPosition - The scroll position.\n */\n function stickyMenuSelect( scrollPosition ) {\n const wrapperInitialPostition = navigationSelectMenuWrapper.scrollTop\n\n if ( scrollPosition <= wrapperInitialPostition ) {\n navigationSelectMenuWrapper.classList.remove( 'fixed' )\n navigationSelectMenuWrapper.classList.remove( 'top-0' )\n return\n }\n\n if ( 0 >= navigationSelectMenuWrapper.getBoundingClientRect().top ) {\n navigationSelectMenuWrapper.classList.add( 'fixed' )\n navigationSelectMenuWrapper.classList.add( 'top-0' )\n return\n }\n }\n\n /**\n * Sticky sidebar functionality.\n *\n * @param {Integer} scrollPosition - The scroll position.\n */\n function stickySidebar( scrollPosition ) {\n if ( scrollPosition > pageContentNavigation.offsetTop ) {\n if ( scrollPosition + window.innerHeight > pageFooterPosition.bottom ) {\n return\n }\n\n navigationMenu.setAttribute( 'style', `margin-top: ${scrollPosition - 100}px` )\n\n return\n }\n\n navigationMenu.removeAttribute( 'style' )\n }\n}\n","import mainMenu from './menus/main-menu'\nimport mainMenuMobile from './menus/main-menu-mobile'\nimport safeExit from './safe-exit/safe-exit'\nimport videoPlayer from './video/player'\nimport youtubeEmbed from './video/youtube-embed'\nimport modal from './modal/modal'\nimport accordion from './accordion/accordion'\nimport agenda from './cards/agenda'\nimport childPagesContent from './tabs/child-pages-content'\n\n/**\n * Molecules functions.\n */\nexport default function molecules() {\n mainMenu()\n mainMenuMobile()\n safeExit()\n modal()\n accordion()\n youtubeEmbed()\n\n const videoPlayerSelector = '[data-molecule=\"video/player\"]'\n const videoPlayers = document.querySelectorAll( videoPlayerSelector )\n videoPlayers.forEach( videoPlayerElement => {\n videoPlayer( videoPlayerElement )\n })\n\n if ( document.getElementById( 'agenda_guide_language_selector' ) ) {\n agenda()\n }\n\n if ( document.getElementById( 'page-content-navigation' ) ) {\n childPagesContent()\n }\n}","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","import throttle from 'lodash.throttle'\nimport {lockBody, unlockBody} from '../../../helper-functions'\n\n/**\n * Function that toggles the header menu.\n */\nexport default function header () {\n const hamburgerSelector = '[data-type=\"atom/buttons/hamburger\"]'\n const hamburger = document.querySelector( hamburgerSelector )\n const mobileMenuSelector = '#mobile-menu-wrapper'\n const closeMobileMenuSelector = '.close-mobile-menu'\n const mobileMenu = document.querySelector( mobileMenuSelector )\n const closeMobileMenu = document.querySelector( closeMobileMenuSelector )\n\n const headerSelector = '[data-type=\"organism/header/header\"]'\n const header = document.querySelector( headerSelector )\n\n const updateRate = 250\n\n if ( !hamburger ) {\n return\n }\n\n addEventListeners()\n\n /**\n * Add header event listeners.\n */\n function addEventListeners() {\n window.addEventListener( 'scroll', throttle( onScroll.bind( this ), updateRate ) )\n hamburger.addEventListener( 'click', openMenu )\n closeMobileMenu.addEventListener( 'click', closeMenu )\n }\n\n /**\n * Open the mobile menu.\n */\n function openMenu () {\n const expanded = 'true' === hamburger.getAttribute( 'aria-expanded' )\n\n if ( expanded ) {\n return\n }\n\n lockBody()\n mobileMenu.classList.remove( /* 'hidden', */'left-w-screen' )\n mobileMenu.classList.add( 'left-0' )\n mobileMenu.classList.remove( 'opacity-0' )\n hamburger.setAttribute( 'aria-expanded', 'true' )\n }\n\n /**\n * Close the mobile menu.\n */\n function closeMenu () {\n const expanded = 'true' === hamburger.getAttribute( 'aria-expanded' )\n\n if ( !expanded ) {\n return\n }\n\n unlockBody()\n mobileMenu.classList.add( 'left-w-screen' )\n hamburger.setAttribute( 'aria-expanded', 'false' )\n }\n\n /**\n * Function triggered when the user scrolls the page.\n */\n function onScroll () {\n // Set window scroll y property to restore the body scroll position\n // after opening/closing the mobile menu or any modal.\n document.documentElement.style.setProperty( '--scroll-y', `${window.scrollY}px` )\n\n // Add shadow to header.\n if ( window.pageYOffset > 0 ) {\n header.classList.add( 'shadow-lg' )\n\n if ( document.body.classList.contains( 'header-dark' ) ) {\n header.classList.remove( 'bg-black' )\n header.classList.add( 'bg-white' )\n }\n } else {\n header.classList.remove( 'shadow-lg' )\n\n if ( document.body.classList.contains( 'header-dark' ) ) {\n header.classList.add( 'bg-black' )\n header.classList.remove( 'bg-white' )\n }\n }\n }\n}\n","/**\n * Function that toggles the header menu.\n */\nexport default function partnersResources () {\n const resourceTypeSelector = document.getElementById( 'partners_resources_type' )\n const partnersResourcesElements = document.querySelectorAll( '.partners-resources-elements' )\n\n resourceTypeSelector.addEventListener( 'change', event => {\n partnersResourcesElements.forEach( partnersResourcesElement => {\n if ( !partnersResourcesElement.classList.contains( 'hidden' ) ) {\n partnersResourcesElement.classList.add( 'hidden' )\n }\n\n const partnersResourcesTarget = document.querySelector( `[data-target*=\"${event.target.value}\"]` )\n\n partnersResourcesTarget.classList.remove( 'hidden' )\n partnersResourcesTarget.classList.add( 'block' )\n })\n })\n}\n","\n/* global Flickity */\n/**\n * Function to initialize Two Column Slider blocks.\n *\n * @param {Array} sliders - The two col slider elements.\n */\nexport default function twoColSliders ( sliders ) {\n sliders.forEach( slider => {\n slider.querySelectorAll( '[data-molecule=\"slides/two-columns/right\"]' ).forEach( col => {\n const scrollEl = col.querySelector( '.c-scroll-track' )\n const scrollbarEl = col.querySelector( '.c-scroll-bar' )\n const contentEl = col.querySelectorAll( 'div' )[1]\n\n if ( contentEl.offsetHeight <= col.offsetHeight ) {\n scrollEl.classList.add( 'hidden' )\n scrollbarEl.classList.add( 'hidden' )\n }\n })\n\n const flkty = new Flickity( slider, {\n 'adaptiveHeight': true,\n 'wrapAround': true,\n 'draggable': false,\n 'prevNextButtons': true, \n 'pageDots': false,\n 'autoPlay': 8000,\n 'accessibility': true,\n 'selectedAttraction': 0.02,\n 'friction': 0.18,\n })\n\n flkty.on( 'changed', () => {\n flkty.stopPlayer()\n flkty.playPlayer()\n })\n })\n}\n","import header from './header/header'\nimport partnersResources from './partners-resources/partners-resources'\nimport twoColSliders from './sliders/two-columns'\n\n/**\n * Organisms functions.\n */\nexport default function organisms() {\n const partnersResourcesBlock = document.querySelector( '[data-organism*=\"partners-resources\"]' )\n const twoColSliderBLocks = document.querySelectorAll( '[data-organism=\"sliders/two-columns\"]' )\n\n header()\n\n if ( partnersResourcesBlock ) {\n partnersResources()\n }\n\n if ( twoColSliderBLocks ) {\n twoColSliders( twoColSliderBLocks )\n }\n}\n","// Styles.\nimport './tailwind.css'\n\n// Our custom JS\nimport atoms from './components/atoms/atoms'\nimport molecules from './components/molecules/molecules'\nimport organisms from './components/organisms/organisms'\n\n// Note that DOMContentLoaded is available in IE9+ so you'll have to look at a more complex solution if you need\n// to support older browsers, see https://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery.\ndocument.addEventListener( 'DOMContentLoaded', () => {\n atoms()\n molecules()\n organisms()\n})\n"]}