{"version":3,"file":"jquery.youtube-background.6dcdcb07.js","sources":["../../node_modules/youtube-background/jquery.youtube-background.js"],"sourcesContent":["/* youtube-background v1.1.8 | https://github.com/stamat/youtube-background | MIT License */\n(() => {\n // src/lib/buttons.js\n function buttonOn(buttonObj) {\n if (!buttonObj)\n return;\n buttonObj.element.classList.add(buttonObj.stateClassName);\n buttonObj.element.firstChild.classList.remove(buttonObj.stateChildClassNames[0]);\n buttonObj.element.firstChild.classList.add(buttonObj.stateChildClassNames[1]);\n buttonObj.element.setAttribute(\"aria-pressed\", false);\n }\n function buttonOff(buttonObj) {\n if (!buttonObj)\n return;\n buttonObj.element.classList.remove(buttonObj.stateClassName);\n buttonObj.element.firstChild.classList.add(buttonObj.stateChildClassNames[0]);\n buttonObj.element.firstChild.classList.remove(buttonObj.stateChildClassNames[1]);\n buttonObj.element.setAttribute(\"aria-pressed\", true);\n }\n function generateActionButton(obj, props) {\n const btn = document.createElement(\"button\");\n btn.className = props.className;\n btn.innerHTML = props.innerHtml;\n btn.setAttribute(\"role\", \"switch\");\n btn.firstChild.classList.add(props.stateChildClassNames[0]);\n btn.setAttribute(\"aria-pressed\", !props.initialState);\n props.element = btn;\n if (obj.params[props.condition_parameter] === props.initialState) {\n buttonOn(props);\n }\n btn.addEventListener(\"click\", function(e) {\n if (this.classList.contains(props.stateClassName)) {\n buttonOff(props);\n obj[props.actions[0]]();\n } else {\n buttonOn(props);\n obj[props.actions[1]]();\n }\n });\n obj.buttons[props.name] = {\n element: btn,\n button_properties: props\n };\n obj.controls_element.appendChild(btn);\n }\n\n // node_modules/book-of-spells/src/helpers.mjs\n function stringToBoolean(str) {\n if (/^\\s*(true|false)\\s*$/i.test(str))\n return str === \"true\";\n }\n function stringToNumber(str) {\n if (/^\\s*\\d+\\s*$/.test(str))\n return parseInt(str);\n if (/^\\s*[\\d.]+\\s*$/.test(str))\n return parseFloat(str);\n }\n function stringToArray(str) {\n if (!/^\\s*\\[.*\\]\\s*$/.test(str))\n return;\n try {\n return JSON.parse(str);\n } catch (e) {\n }\n }\n function stringToObject(str) {\n if (!/^\\s*\\{.*\\}\\s*$/.test(str))\n return;\n try {\n return JSON.parse(str);\n } catch (e) {\n }\n }\n function stringToRegex(str) {\n if (!/^\\s*\\/.*\\/g?i?\\s*$/.test(str))\n return;\n try {\n return new RegExp(str);\n } catch (e) {\n }\n }\n function stringToType(str) {\n if (/^\\s*null\\s*$/.test(str))\n return null;\n const bool = stringToBoolean(str);\n if (bool !== void 0)\n return bool;\n return stringToNumber(str) || stringToArray(str) || stringToObject(str) || stringToRegex(str) || str;\n }\n function isArray(o) {\n return Array.isArray(o);\n }\n function isString(o) {\n return typeof o === \"string\";\n }\n function randomIntInclusive(min, max, safe = false) {\n min = Number(min);\n max = Number(max);\n if (isNaN(min) || isNaN(max))\n throw new TypeError(\"Both min and max must be numbers\");\n if (min > max)\n [min, max] = [max, min];\n if (min === max)\n return min;\n min = Math.round(min);\n max = Math.round(max);\n const rand = safe ? random() : Math.random();\n return Math.floor(rand * (max - min + 1)) + min;\n }\n function fixed(number, digits) {\n if (!digits)\n return parseInt(number);\n return parseFloat(number.toFixed(digits));\n }\n function percentage(num, total) {\n if (!num || !total || Number.isNaN(num) || Number.isNaN(total))\n return 0;\n return num / total * 100;\n }\n function random() {\n if (!crypto)\n return Math.random();\n if (crypto.getRandomValues)\n return crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n }\n\n // node_modules/book-of-spells/src/regex.mjs\n var RE_YOUTUBE = /(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/ ]{11})/i;\n var RE_VIMEO = /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_\\-]+)?/i;\n var RE_VIDEO = /\\/([^\\/]+\\.(?:mp4|ogg|ogv|ogm|webm|avi))\\s*$/i;\n\n // node_modules/book-of-spells/src/parsers.mjs\n function parseResolutionString(res) {\n const DEFAULT_RESOLUTION = 1.7777777778;\n if (!res || !res.length || /16[\\:x\\-\\/]{1}9/i.test(res))\n return DEFAULT_RESOLUTION;\n const pts = res.split(/\\s?[\\:x\\-\\/]{1}\\s?/i);\n if (pts.length < 2)\n return DEFAULT_RESOLUTION;\n const w = parseInt(pts[0]);\n const h = parseInt(pts[1]);\n if (w === 0 || h === 0)\n return DEFAULT_RESOLUTION;\n if (isNaN(w) || isNaN(h))\n return DEFAULT_RESOLUTION;\n return w / h;\n }\n\n // node_modules/book-of-spells/src/dom.mjs\n function query(selector, from = document) {\n if (selector instanceof Array || selector instanceof NodeList)\n return selector;\n if (selector instanceof Element)\n return [selector];\n if (from instanceof Element || from instanceof Document)\n return from.querySelectorAll(selector);\n if (isString(from))\n from = query(from);\n if (!from instanceof Array && !from instanceof NodeList)\n return [];\n const res = [];\n for (const element of from) {\n res.push(...element.querySelectorAll(selector));\n }\n return res;\n }\n function proportionalParentCoverResize(elements, ratio = 1, offset = 0) {\n if (elements instanceof Element)\n elements = [elements];\n if (typeof elements === \"string\")\n elements = query(elements);\n for (const element of elements) {\n const h = element.parentNode.offsetHeight + offset;\n const w = element.parentNode.offsetWidth + offset;\n if (ratio > w / h) {\n element.style.width = h * ratio + \"px\";\n element.style.height = h + \"px\";\n } else {\n element.style.width = w + \"px\";\n element.style.height = w / ratio + \"px\";\n }\n }\n }\n\n // node_modules/book-of-spells/src/browser.mjs\n function isUserAgentMobile(str) {\n return /\\b(BlackBerry|webOS|iPhone|IEMobile)\\b/i.test(str) || /\\b(Android|Windows Phone|iPad|iPod)\\b/i.test(str);\n }\n function isMobile() {\n if (\"maxTouchPoints\" in navigator)\n return navigator.maxTouchPoints > 0;\n if (\"matchMedia\" in window)\n return !!matchMedia(\"(pointer:coarse)\").matches;\n if (\"orientation\" in window)\n return true;\n return isUserAgentMobile(navigator.userAgent);\n }\n\n // src/lib/super-video-background.js\n var SuperVideoBackground = class {\n constructor(elem, params, id, uid, type, factoryInstance) {\n if (!id)\n return;\n this.is_mobile = isMobile();\n this.type = type;\n this.id = id;\n this.factoryInstance = factoryInstance;\n this.element = elem;\n this.playerElement = null;\n this.uid = uid;\n this.element.setAttribute(\"data-vbg-uid\", uid);\n this.buttons = {};\n this.isIntersecting = false;\n this.paused = false;\n this.muted = false;\n this.currentState = \"notstarted\";\n this.initialPlay = false;\n this.initialVolume = false;\n this.volume = 1;\n this.params = {};\n const DEFAULTS = {\n \"pause\": false,\n //deprecated\n \"play-button\": false,\n \"mute-button\": false,\n \"autoplay\": true,\n \"muted\": true,\n \"loop\": true,\n \"mobile\": true,\n \"load-background\": false,\n \"resolution\": \"16:9\",\n \"inline-styles\": true,\n \"fit-box\": false,\n \"offset\": 100,\n // since showinfo is deprecated and ignored after September 25, 2018. we add +100 to hide it in the overflow\n \"start-at\": 0,\n \"end-at\": 0,\n \"poster\": null,\n \"always-play\": false,\n \"volume\": 1,\n \"no-cookie\": true,\n \"force-on-low-battery\": false,\n \"lazyloading\": false,\n \"title\": \"Video background\"\n };\n this.params = this.parseProperties(params, DEFAULTS, this.element, [\"data-ytbg-\", \"data-vbg-\"]);\n if (this.params.pause) {\n this.params[\"play-button\"] = this.params.pause;\n }\n this.params.resolution_mod = parseResolutionString(this.params.resolution);\n this.muted = this.params.muted;\n this.volume = this.params.volume;\n this.currentTime = this.params[\"start-at\"] || 0;\n this.duration = this.params[\"end-at\"] || 0;\n this.percentComplete = 0;\n if (this.params[\"start-at\"])\n this.percentComplete = this.timeToPercentage(this.params[\"start-at\"]);\n this.buildWrapperHTML();\n if (this.is_mobile && !this.params.mobile)\n return;\n if (this.params[\"play-button\"]) {\n generateActionButton(this, {\n name: \"playing\",\n className: \"play-toggle\",\n innerHtml: '',\n initialState: !this.paused,\n stateClassName: \"paused\",\n condition_parameter: \"paused\",\n stateChildClassNames: [\"fa-pause-circle\", \"fa-play-circle\"],\n actions: [\"play\", \"pause\"]\n });\n }\n if (this.params[\"mute-button\"]) {\n generateActionButton(this, {\n name: \"muted\",\n className: \"mute-toggle\",\n innerHtml: '',\n initialState: this.muted,\n stateClassName: \"muted\",\n condition_parameter: \"muted\",\n stateChildClassNames: [\"fa-volume-up\", \"fa-volume-mute\"],\n actions: [\"unmute\", \"mute\"]\n });\n }\n }\n timeToPercentage(time) {\n if (time <= this.params[\"start-at\"])\n return 0;\n if (time >= this.duration)\n return 100;\n if (time <= 0)\n return 0;\n time -= this.params[\"start-at\"];\n const duration = this.duration - this.params[\"start-at\"];\n return percentage(time, duration);\n }\n percentageToTime(percentage2) {\n if (!this.duration)\n return this.params[\"start-at\"] || 0;\n if (percentage2 > 100)\n return this.duration;\n if (percentage2 <= 0)\n return this.params[\"start-at\"] || 0;\n const duration = this.duration - this.params[\"start-at\"];\n let time = percentage2 * duration / 100;\n time = fixed(time, 3);\n if (time > duration)\n time = duration;\n if (this.params[\"start-at\"])\n time += this.params[\"start-at\"];\n return time;\n }\n resize(element) {\n if (!this.params[\"fit-box\"])\n proportionalParentCoverResize(element || this.playerElement, this.params.resolution_mod, this.params.offset);\n this.dispatchEvent(\"video-background-resize\");\n }\n stylePlayerElement(element) {\n if (!element)\n return;\n if (this.params[\"inline-styles\"]) {\n element.style.top = \"50%\";\n element.style.left = \"50%\";\n element.style.transform = \"translateX(-50%) translateY(-50%)\";\n element.style.position = \"absolute\";\n element.style.opacity = 0;\n }\n if (this.params[\"fit-box\"]) {\n element.style.width = \"100%\";\n element.style.height = \"100%\";\n }\n }\n buildWrapperHTML() {\n const parent = this.element.parentNode;\n this.element.classList.add(\"youtube-background\", \"video-background\");\n const wrapper_styles = {\n \"height\": \"100%\",\n \"width\": \"100%\",\n \"z-index\": \"0\",\n \"position\": \"absolute\",\n \"overflow\": \"hidden\",\n \"top\": 0,\n // added by @insad\n \"left\": 0,\n \"bottom\": 0,\n \"right\": 0\n };\n if (!this.params[\"mute-button\"]) {\n wrapper_styles[\"pointer-events\"] = \"none\";\n }\n if (this.params[\"load-background\"] || this.params[\"poster\"]) {\n this.loadBackground(this.id);\n if (this.params[\"poster\"])\n wrapper_styles[\"background-image\"] = `url(${this.params[\"poster\"]})`;\n wrapper_styles[\"background-size\"] = \"cover\";\n wrapper_styles[\"background-repeat\"] = \"no-repeat\";\n wrapper_styles[\"background-position\"] = \"center\";\n }\n if (this.params[\"inline-styles\"]) {\n for (let property in wrapper_styles) {\n this.element.style[property] = wrapper_styles[property];\n }\n if (![\"absolute\", \"fixed\", \"relative\", \"sticky\"].indexOf(parent.style.position)) {\n parent.style.position = \"relative\";\n }\n }\n if (this.params[\"play-button\"] || this.params[\"mute-button\"]) {\n const controls = document.createElement(\"div\");\n controls.className = \"video-background-controls\";\n controls.style.position = \"absolute\";\n controls.style.top = \"10px\";\n controls.style.right = \"10px\";\n controls.style[\"z-index\"] = 2;\n this.controls_element = controls;\n parent.appendChild(controls);\n }\n return this.element;\n }\n loadBackground(id) {\n if (!this.params[\"load-background\"])\n return;\n if (!id)\n return;\n if (this.type === \"youtube\")\n this.element.style[\"background-image\"] = `url(https://img.youtube.com/vi/${id}/hqdefault.jpg)`;\n if (this.type === \"vimeo\")\n this.element.style[\"background-image\"] = `url(https://vumbnail.com/${id}.jpg)`;\n }\n destroy() {\n this.playerElement.remove();\n this.element.classList.remove(\"youtube-background\", \"video-background\");\n this.element.removeAttribute(\"data-vbg-uid\");\n this.element.style = \"\";\n if (this.params[\"play-button\"] || this.params[\"mute-button\"]) {\n this.controls_element.remove();\n }\n if (this.timeUpdateTimer)\n clearInterval(this.timeUpdateTimer);\n this.dispatchEvent(\"video-background-destroyed\");\n }\n setDuration(duration) {\n if (this.duration === duration)\n return;\n if (this.params[\"end-at\"]) {\n if (duration > this.params[\"end-at\"]) {\n this.duration = this.params[\"end-at\"];\n return;\n }\n if (duration < this.params[\"end-at\"]) {\n this.duration = duration;\n return;\n }\n } else {\n this.duration = duration;\n return;\n }\n if (duration <= 0)\n this.duration = this.params[\"end-at\"];\n }\n setStartAt(startAt) {\n this.params[\"start-at\"] = startAt;\n }\n setEndAt(endAt) {\n this.params[\"end-at\"] = endAt;\n if (this.duration > endAt)\n this.duration = endAt;\n if (this.currentTime > endAt)\n this.onVideoEnded();\n }\n dispatchEvent(name) {\n this.element.dispatchEvent(new CustomEvent(name, { bubbles: true, detail: this }));\n }\n shouldPlay() {\n if (this.currentState === \"ended\" && !this.params.loop)\n return false;\n if (this.params[\"always-play\"] && this.currentState !== \"playing\")\n return true;\n if (this.isIntersecting && this.params.autoplay && this.currentState !== \"playing\")\n return true;\n return false;\n }\n mobileLowBatteryAutoplayHack() {\n if (!this.params[\"force-on-low-battery\"])\n return;\n if (!this.is_mobile && this.params.mobile)\n return;\n const forceAutoplay = function() {\n if (!this.initialPlay && this.params.autoplay && this.params.muted) {\n this.softPlay();\n if (!this.isIntersecting && !this.params[\"always-play\"]) {\n this.softPause();\n }\n }\n };\n document.addEventListener(\"touchstart\", forceAutoplay.bind(this), { once: true });\n }\n parseProperties(params, defaults, element, attr_prefix) {\n let res_params = {};\n if (!params) {\n res_params = defaults;\n } else {\n for (let k in defaults) {\n res_params[k] = !params.hasOwnProperty(k) ? defaults[k] : params[k];\n }\n }\n if (!element)\n return res_params;\n for (let k in res_params) {\n let data;\n if (isArray(attr_prefix)) {\n for (let i = 0; i < attr_prefix.length; i++) {\n const temp_data = element.getAttribute(attr_prefix[i] + k);\n if (temp_data) {\n data = temp_data;\n break;\n }\n }\n } else {\n data = element.getAttribute(attr_prefix + k);\n }\n if (data !== void 0 && data !== null) {\n res_params[k] = stringToType(data);\n }\n }\n return res_params;\n }\n };\n\n // src/lib/youtube-background.js\n var YoutubeBackground = class extends SuperVideoBackground {\n constructor(elem, params, id, uid, factoryInstance) {\n super(elem, params, id, uid, \"youtube\", factoryInstance);\n if (!id)\n return;\n if (this.is_mobile && !this.params.mobile)\n return;\n this.injectScript();\n this.player = null;\n this.injectPlayer();\n this.STATES = {\n \"-1\": \"notstarted\",\n \"0\": \"ended\",\n \"1\": \"playing\",\n \"2\": \"paused\",\n \"3\": \"buffering\",\n \"5\": \"cued\"\n };\n this.timeUpdateTimer = null;\n this.timeUpdateInterval = 250;\n this.initYTPlayer();\n }\n startTimeUpdateTimer() {\n if (this.timeUpdateTimer)\n return;\n this.timeUpdateTimer = setInterval(this.onVideoTimeUpdate.bind(this), this.timeUpdateInterval);\n }\n stopTimeUpdateTimer() {\n clearInterval(this.timeUpdateTimer);\n this.timeUpdateTimer = null;\n }\n convertState(state) {\n return this.STATES[state];\n }\n initYTPlayer() {\n if (!window.hasOwnProperty(\"YT\") || this.player !== null)\n return;\n this.player = new YT.Player(this.uid, {\n events: {\n \"onReady\": this.onVideoPlayerReady.bind(this),\n \"onStateChange\": this.onVideoStateChange.bind(this)\n // 'onError': this.onVideoError.bind(this)\n }\n });\n if (this.volume !== 1 && !this.muted)\n this.setVolume(this.volume);\n }\n onVideoError(event) {\n console.error(event);\n }\n injectScript() {\n const src = \"https://www.youtube.com/player_api\";\n if (window.hasOwnProperty(\"YT\") || document.querySelector(`script[src=\"${src}\"]`))\n return;\n const tag = document.createElement(\"script\");\n tag.async = true;\n tag.src = src;\n const firstScriptTag = document.getElementsByTagName(\"script\")[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n }\n generatePlayerElement() {\n const playerElement = document.createElement(\"iframe\");\n if (this.params.title)\n playerElement.setAttribute(\"title\", this.params.title);\n playerElement.setAttribute(\"frameborder\", 0);\n playerElement.setAttribute(\"allow\", \"autoplay; mute\");\n if (this.params[\"lazyloading\"])\n playerElement.setAttribute(\"loading\", \"lazy\");\n return playerElement;\n }\n generateSrcURL(id) {\n let site = \"https://www.youtube.com/embed/\";\n if (this.params[\"no-cookie\"]) {\n site = \"https://www.youtube-nocookie.com/embed/\";\n }\n let src = `${site}${id}?&enablejsapi=1&disablekb=1&controls=0&rel=0&iv_load_policy=3&cc_load_policy=0&playsinline=1&showinfo=0&modestbranding=1&fs=0`;\n if (this.params.muted) {\n src += \"&mute=1\";\n }\n if (this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting)) {\n src += \"&autoplay=1\";\n }\n if (this.params.loop) {\n src += \"&loop=1\";\n }\n return src;\n }\n injectPlayer() {\n this.playerElement = this.generatePlayerElement();\n this.src = this.generateSrcURL(this.id);\n this.playerElement.src = this.src;\n this.playerElement.id = this.uid;\n this.stylePlayerElement(this.playerElement);\n this.element.appendChild(this.playerElement);\n this.resize(this.playerElement);\n }\n /* ===== API ===== */\n setSource(url) {\n const pts = url.match(RE_YOUTUBE);\n if (!pts || !pts.length)\n return;\n this.id = pts[1];\n this.src = this.generateSrcURL(this.id);\n this.playerElement.src = this.src;\n if (this.element.hasAttribute(\"data-vbg\"))\n this.element.setAttribute(\"data-vbg\", this.src);\n if (this.element.hasAttribute(\"data-ytbg\"))\n this.element.setAttribute(\"data-ytbg\", this.src);\n this.loadBackground(this.id);\n }\n onVideoTimeUpdate() {\n const ctime = this.player.getCurrentTime();\n if (ctime === this.currentTime)\n return;\n this.currentTime = ctime;\n this.percentComplete = this.timeToPercentage(this.currentTime);\n if (this.params[\"end-at\"] && this.duration && this.currentTime >= this.duration) {\n this.currentState = \"ended\";\n this.dispatchEvent(\"video-background-state-change\");\n this.onVideoEnded();\n this.stopTimeUpdateTimer();\n return;\n }\n this.dispatchEvent(\"video-background-time-update\");\n }\n onVideoPlayerReady() {\n this.mobileLowBatteryAutoplayHack();\n if (this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting)) {\n if (this.params[\"start-at\"])\n this.seekTo(this.params[\"start-at\"]);\n this.player.playVideo();\n }\n this.setDuration(this.player.getDuration());\n this.dispatchEvent(\"video-background-ready\");\n }\n onVideoStateChange(event) {\n this.currentState = this.convertState(event.data);\n if (this.currentState === \"ended\")\n this.onVideoEnded();\n if (this.currentState === \"notstarted\" && this.params.autoplay) {\n this.seekTo(this.params[\"start-at\"]);\n this.player.playVideo();\n }\n if (this.currentState === \"playing\")\n this.onVideoPlay();\n if (this.currentState === \"paused\")\n this.onVideoPause();\n this.dispatchEvent(\"video-background-state-change\");\n }\n onVideoPlay() {\n if (!this.initialPlay) {\n this.initialPlay = true;\n this.playerElement.style.opacity = 1;\n }\n const seconds = this.player.getCurrentTime();\n if (this.params[\"start-at\"] && seconds < this.params[\"start-at\"]) {\n this.seekTo(this.params[\"start-at\"]);\n }\n if (this.duration && seconds >= this.duration) {\n this.seekTo(this.params[\"start-at\"]);\n }\n if (!this.duration) {\n this.setDuration(this.player.getDuration());\n }\n this.dispatchEvent(\"video-background-play\");\n this.startTimeUpdateTimer();\n }\n onVideoPause() {\n this.stopTimeUpdateTimer();\n this.dispatchEvent(\"video-background-pause\");\n }\n onVideoEnded() {\n this.dispatchEvent(\"video-background-ended\");\n if (!this.params.loop)\n return this.pause();\n this.seekTo(this.params[\"start-at\"]);\n this.player.playVideo();\n }\n seek(percentage2) {\n this.seekTo(this.percentageToTime(percentage2), true);\n }\n seekTo(seconds, allowSeekAhead = true) {\n if (!this.player)\n return;\n this.player.seekTo(seconds, allowSeekAhead);\n this.dispatchEvent(\"video-background-seeked\");\n }\n softPause() {\n if (!this.player || this.currentState === \"paused\")\n return;\n this.stopTimeUpdateTimer();\n this.player.pauseVideo();\n }\n softPlay() {\n if (!this.player || this.currentState === \"playing\")\n return;\n this.player.playVideo();\n }\n play() {\n if (!this.player)\n return;\n this.paused = false;\n this.player.playVideo();\n }\n pause() {\n if (!this.player)\n return;\n this.paused = true;\n this.stopTimeUpdateTimer();\n this.player.pauseVideo();\n }\n unmute() {\n if (!this.player)\n return;\n this.muted = false;\n if (!this.initialVolume) {\n this.initialVolume = true;\n this.setVolume(this.params.volume);\n }\n this.player.unMute();\n this.dispatchEvent(\"video-background-unmute\");\n }\n mute() {\n if (!this.player)\n return;\n this.muted = true;\n this.player.mute();\n this.dispatchEvent(\"video-background-mute\");\n }\n getVolume() {\n if (!this.player)\n return;\n return this.player.getVolume() / 100;\n }\n setVolume(volume) {\n if (!this.player)\n return;\n this.volume = volume;\n this.player.setVolume(volume * 100);\n this.dispatchEvent(\"video-background-volume-change\");\n }\n };\n\n // src/lib/vimeo-background.js\n var VimeoBackground = class extends SuperVideoBackground {\n constructor(elem, params, id, uid, factoryInstance) {\n super(elem, params, id.id, uid, \"vimeo\", factoryInstance);\n if (!id)\n return;\n this.unlisted = id.unlisted;\n if (this.is_mobile && !this.params.mobile)\n return;\n this.injectScript();\n this.player = null;\n this.injectPlayer();\n this.initVimeoPlayer();\n }\n injectScript() {\n const src = \"https://player.vimeo.com/api/player.js\";\n if (window.hasOwnProperty(\"Vimeo\") || document.querySelector(`script[src=\"${src}\"]`))\n return;\n const tag = document.createElement(\"script\");\n tag.async = true;\n if (window.hasOwnProperty(\"onVimeoIframeAPIReady\") && typeof window.onVimeoIframeAPIReady === \"function\")\n tag.addEventListener(\"load\", () => {\n window.onVimeoIframeAPIReady();\n });\n tag.src = src;\n const firstScriptTag = document.getElementsByTagName(\"script\")[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n }\n initVimeoPlayer() {\n if (!window.hasOwnProperty(\"Vimeo\") || this.player !== null)\n return;\n this.player = new Vimeo.Player(this.playerElement);\n this.player.on(\"loaded\", this.onVideoPlayerReady.bind(this));\n this.player.on(\"ended\", this.onVideoEnded.bind(this));\n this.player.on(\"play\", this.onVideoPlay.bind(this));\n this.player.on(\"pause\", this.onVideoPause.bind(this));\n this.player.on(\"bufferstart\", this.onVideoBuffering.bind(this));\n this.player.on(\"timeupdate\", this.onVideoTimeUpdate.bind(this));\n if (this.volume !== 1 && !this.muted)\n this.setVolume(this.volume);\n }\n onVideoError(event) {\n console.error(event);\n }\n generatePlayerElement() {\n const playerElement = document.createElement(\"iframe\");\n if (this.params.title)\n playerElement.setAttribute(\"title\", this.params.title);\n playerElement.setAttribute(\"frameborder\", 0);\n playerElement.setAttribute(\"allow\", \"autoplay; mute\");\n if (this.params[\"lazyloading\"])\n playerElement.setAttribute(\"loading\", \"lazy\");\n return playerElement;\n }\n generateSrcURL(id, unlisted) {\n unlisted = unlisted ? `h=${unlisted}&` : \"\";\n let src = `https://player.vimeo.com/video/${id}?${unlisted}background=1&controls=0`;\n if (this.params.muted) {\n src += \"&muted=1\";\n }\n if (this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting)) {\n src += \"&autoplay=1\";\n }\n if (this.params.loop) {\n src += \"&loop=1&autopause=0\";\n }\n if (this.params[\"no-cookie\"]) {\n src += \"&dnt=1\";\n }\n if (this.params[\"start-at\"]) {\n src += \"#t=\" + this.params[\"start-at\"] + \"s\";\n }\n return src;\n }\n injectPlayer() {\n this.playerElement = this.generatePlayerElement();\n this.src = this.generateSrcURL(this.id, this.unlisted);\n this.playerElement.src = this.src;\n this.playerElement.id = this.uid;\n this.stylePlayerElement(this.playerElement);\n this.element.appendChild(this.playerElement);\n this.resize(this.playerElement);\n }\n updateState(state) {\n this.currentState = state;\n this.dispatchEvent(\"video-background-state-change\");\n }\n /* ===== API ===== */\n setSource(url) {\n const pts = url.match(RE_VIMEO);\n if (!pts || !pts.length)\n return;\n this.id = pts[1];\n this.src = this.generateSrcURL(this.id);\n this.playerElement.src = this.src;\n if (this.element.hasAttribute(\"data-vbg\"))\n this.element.setAttribute(\"data-vbg\", this.src);\n if (this.element.hasAttribute(\"data-ytbg\"))\n this.element.setAttribute(\"data-ytbg\", this.src);\n this.loadBackground(this.id);\n }\n onVideoPlayerReady() {\n this.mobileLowBatteryAutoplayHack();\n if (this.params[\"start-at\"])\n this.seekTo(this.params[\"start-at\"]);\n if (this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting)) {\n this.player.play();\n }\n this.player.getDuration().then((duration) => {\n this.setDuration(duration);\n });\n this.dispatchEvent(\"video-background-ready\");\n }\n onVideoEnded() {\n this.updateState(\"ended\");\n this.dispatchEvent(\"video-background-ended\");\n if (!this.params.loop)\n return this.pause();\n this.seekTo(this.params[\"start-at\"]);\n this.updateState(\"playing\");\n this.dispatchEvent(\"video-background-play\");\n }\n onVideoTimeUpdate(event) {\n this.currentTime = event.seconds;\n this.percentComplete = this.timeToPercentage(event.seconds);\n this.dispatchEvent(\"video-background-time-update\");\n this.setDuration(event.duration);\n if (this.params[\"end-at\"] && this.duration && event.seconds >= this.duration) {\n this.onVideoEnded();\n }\n }\n onVideoBuffering() {\n this.updateState(\"buffering\");\n }\n onVideoPlay(event) {\n this.setDuration(event.duration);\n if (!this.initialPlay) {\n this.initialPlay = true;\n this.playerElement.style.opacity = 1;\n this.player.setLoop(this.params.loop);\n if (!(this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting))) {\n return this.player.pause();\n }\n }\n const seconds = event.seconds;\n if (this.params[\"start-at\"] && seconds < this.params[\"start-at\"]) {\n this.seekTo(this.params[\"start-at\"]);\n }\n if (this.duration && seconds >= this.duration) {\n this.seekTo(this.params[\"start-at\"]);\n }\n this.updateState(\"playing\");\n this.dispatchEvent(\"video-background-play\");\n }\n onVideoPause() {\n this.updateState(\"paused\");\n this.dispatchEvent(\"video-background-pause\");\n }\n seek(percentage2) {\n this.seekTo(this.percentageToTime(percentage2));\n }\n seekTo(time) {\n if (!this.player)\n return;\n this.player.setCurrentTime(time);\n this.dispatchEvent(\"video-background-seeked\");\n }\n softPause() {\n if (!this.player || this.currentState === \"paused\")\n return;\n this.player.pause();\n }\n softPlay() {\n if (!this.player || this.currentState === \"playing\")\n return;\n this.player.play();\n }\n play() {\n if (!this.player)\n return;\n this.paused = false;\n this.player.play();\n }\n pause() {\n if (!this.player)\n return;\n this.paused = true;\n this.player.pause();\n }\n unmute() {\n if (!this.player)\n return;\n this.muted = false;\n if (!this.initialVolume) {\n this.initialVolume = true;\n this.setVolume(this.params.volume);\n }\n this.player.setMuted(false);\n this.dispatchEvent(\"video-background-unmute\");\n }\n mute() {\n if (!this.player)\n return;\n this.muted = true;\n this.player.setMuted(true);\n this.dispatchEvent(\"video-background-mute\");\n }\n getVolume() {\n if (!this.player)\n return;\n return this.player.getVolume();\n }\n setVolume(volume) {\n if (!this.player)\n return;\n this.volume = volume;\n this.player.setVolume(volume);\n this.dispatchEvent(\"video-background-volume-change\");\n }\n };\n\n // src/lib/video-background.js\n var VideoBackground = class extends SuperVideoBackground {\n constructor(elem, params, vid_data, uid, factoryInstance) {\n super(elem, params, vid_data.link, uid, \"video\", factoryInstance);\n if (!vid_data || !vid_data.link)\n return;\n if (this.is_mobile && !this.params.mobile)\n return;\n this.src = vid_data.link;\n this.ext = /(?:\\.([^.]+))?$/.exec(vid_data.id)[1];\n this.uid = uid;\n this.element.setAttribute(\"data-vbg-uid\", uid);\n this.player = null;\n this.buttons = {};\n this.MIME_MAP = {\n \"ogv\": \"video/ogg\",\n \"ogm\": \"video/ogg\",\n \"ogg\": \"video/ogg\",\n \"avi\": \"video/avi\",\n \"mp4\": \"video/mp4\",\n \"webm\": \"video/webm\",\n \"m4v\": \"video/x-m4v\",\n \"mov\": \"video/quicktime\",\n \"qt\": \"video/quicktime\"\n };\n this.mime = this.MIME_MAP[this.ext.toLowerCase()];\n this.injectPlayer();\n this.mobileLowBatteryAutoplayHack();\n this.dispatchEvent(\"video-background-ready\");\n }\n generatePlayerElement() {\n const playerElement = document.createElement(\"video\");\n if (this.params.title)\n playerElement.setAttribute(\"title\", this.params.title);\n playerElement.setAttribute(\"playsinline\", \"\");\n if (this.params.loop)\n playerElement.setAttribute(\"loop\", \"\");\n if (this.params.autoplay && (this.params[\"always-play\"] || this.isIntersecting)) {\n playerElement.setAttribute(\"autoplay\", \"\");\n playerElement.autoplay = true;\n }\n if (this.muted) {\n playerElement.setAttribute(\"muted\", \"\");\n playerElement.muted = true;\n }\n if (this.params[\"lazyloading\"])\n playerElement.setAttribute(\"loading\", \"lazy\");\n return playerElement;\n }\n injectPlayer() {\n this.player = this.generatePlayerElement();\n this.playerElement = this.player;\n if (this.volume !== 1 && !this.muted)\n this.setVolume(this.volume);\n this.playerElement.setAttribute(\"id\", this.uid);\n this.stylePlayerElement(this.playerElement);\n this.player.addEventListener(\"loadedmetadata\", this.onVideoLoadedMetadata.bind(this));\n this.player.addEventListener(\"durationchange\", this.onVideoLoadedMetadata.bind(this));\n this.player.addEventListener(\"canplay\", this.onVideoCanPlay.bind(this));\n this.player.addEventListener(\"timeupdate\", this.onVideoTimeUpdate.bind(this));\n this.player.addEventListener(\"play\", this.onVideoPlay.bind(this));\n this.player.addEventListener(\"pause\", this.onVideoPause.bind(this));\n this.player.addEventListener(\"waiting\", this.onVideoBuffering.bind(this));\n this.player.addEventListener(\"ended\", this.onVideoEnded.bind(this));\n this.element.appendChild(this.playerElement);\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", this.src);\n source.setAttribute(\"type\", this.mime);\n this.playerElement.appendChild(source);\n this.resize(this.playerElement);\n }\n updateState(state) {\n this.currentState = state;\n this.dispatchEvent(\"video-background-state-change\");\n }\n /* ===== API ===== */\n setSource(url) {\n const pts = url.match(RE_VIDEO);\n if (!pts || !pts.length)\n return;\n this.id = pts[1];\n this.ext = /(?:\\.([^.]+))?$/.exec(this.id)[1];\n this.mime = this.MIME_MAP[this.ext.toLowerCase()];\n this.playerElement.innerHTML = \"\";\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", url);\n source.setAttribute(\"type\", this.mime);\n this.playerElement.appendChild(source);\n this.src = url;\n if (this.element.hasAttribute(\"data-vbg\"))\n this.element.setAttribute(\"data-vbg\", this.src);\n if (this.element.hasAttribute(\"data-ytbg\"))\n this.element.setAttribute(\"data-ytbg\", this.src);\n }\n onVideoLoadedMetadata() {\n this.setDuration(this.player.duration);\n }\n onVideoCanPlay() {\n this.setDuration(this.player.duration);\n }\n onVideoTimeUpdate() {\n this.currentTime = this.player.currentTime;\n this.percentComplete = this.timeToPercentage(this.player.currentTime);\n this.dispatchEvent(\"video-background-time-update\");\n if (this.params[\"end-at\"] && this.currentTime >= this.duration) {\n this.onVideoEnded();\n }\n }\n onVideoPlay() {\n if (!this.initialPlay) {\n this.initialPlay = true;\n this.playerElement.style.opacity = 1;\n }\n const seconds = this.player.currentTime;\n if (this.params[\"start-at\"] && seconds <= this.params[\"start-at\"]) {\n this.seekTo(this.params[\"start-at\"]);\n }\n if (this.duration && seconds >= this.duration) {\n this.seekTo(this.params[\"start-at\"]);\n }\n this.updateState(\"playing\");\n this.dispatchEvent(\"video-background-play\");\n }\n onVideoPause() {\n this.updateState(\"paused\");\n this.dispatchEvent(\"video-background-pause\");\n }\n onVideoEnded() {\n this.updateState(\"ended\");\n this.dispatchEvent(\"video-background-ended\");\n if (!this.params.loop)\n return this.pause();\n this.seekTo(this.params[\"start-at\"]);\n this.onVideoPlay();\n }\n onVideoBuffering() {\n this.updateState(\"buffering\");\n }\n seek(percentage2) {\n this.seekTo(this.percentageToTime(percentage2));\n }\n seekTo(seconds) {\n if (!this.player)\n return;\n if (this.player.hasOwnProperty(\"fastSeek\")) {\n this.player.fastSeek(seconds);\n return;\n }\n this.player.currentTime = seconds;\n this.dispatchEvent(\"video-background-seeked\");\n }\n softPause() {\n if (!this.player || this.currentState === \"paused\")\n return;\n this.player.pause();\n }\n softPlay() {\n if (!this.player || this.currentState === \"playing\")\n return;\n this.player.play();\n }\n play() {\n if (!this.player)\n return;\n this.paused = false;\n this.player.play();\n }\n pause() {\n if (!this.player)\n return;\n this.paused = true;\n this.player.pause();\n }\n unmute() {\n if (!this.player)\n return;\n this.muted = false;\n this.player.muted = false;\n if (!this.initialVolume) {\n this.initialVolume = true;\n this.setVolume(this.params.volume);\n }\n this.dispatchEvent(\"video-background-unmute\");\n }\n mute() {\n if (!this.player)\n return;\n this.muted = true;\n this.player.muted = true;\n this.dispatchEvent(\"video-background-mute\");\n }\n getVolume() {\n if (!this.player)\n return;\n return this.player.volume;\n }\n setVolume(volume) {\n if (!this.player)\n return;\n this.volume = volume;\n this.player.volume = volume;\n this.dispatchEvent(\"video-background-volume-change\");\n }\n };\n\n // src/video-backgrounds.js\n var VideoBackgrounds = class {\n constructor(selector, params) {\n this.elements = selector;\n if (this.elements instanceof Element)\n this.elements = [this.elements];\n if (typeof this.elements === \"string\")\n this.elements = document.querySelectorAll(selector);\n this.index = {};\n const self = this;\n this.intersectionObserver = null;\n if (\"IntersectionObserver\" in window) {\n this.intersectionObserver = new IntersectionObserver(function(entries) {\n entries.forEach(function(entry) {\n const uid = entry.target.getAttribute(\"data-vbg-uid\");\n if (uid && self.index.hasOwnProperty(uid) && entry.isIntersecting) {\n self.index[uid].isIntersecting = true;\n try {\n if (self.index[uid].player && !self.index[uid].paused)\n self.index[uid].softPlay();\n } catch (e) {\n }\n } else {\n self.index[uid].isIntersecting = false;\n try {\n if (self.index[uid].player)\n self.index[uid].softPause();\n } catch (e) {\n }\n }\n });\n });\n }\n this.resizeObserver = null;\n if (\"ResizeObserver\" in window) {\n this.resizeObserver = new ResizeObserver(function(entries) {\n entries.forEach(function(entry) {\n const uid = entry.target.getAttribute(\"data-vbg-uid\");\n if (uid && self.index.hasOwnProperty(uid)) {\n window.requestAnimationFrame(() => self.index[uid].resize());\n }\n });\n });\n } else {\n window.addEventListener(\"resize\", function() {\n for (let k in self.index) {\n window.requestAnimationFrame(() => self.index[k].resize(self.index[k].playerElement));\n }\n });\n }\n this.initPlayers();\n if (!this.elements || !this.elements.length)\n return;\n for (let i = 0; i < this.elements.length; i++) {\n const element = this.elements[i];\n this.add(element, params);\n }\n document.addEventListener(\"visibilitychange\", this.onVisibilityChange.bind(this));\n }\n onVisibilityChange() {\n if (document.hidden)\n return;\n for (let k in this.index) {\n const instance = this.index[k];\n if (instance.shouldPlay()) {\n instance.softPlay();\n }\n }\n }\n add(element, params) {\n if (!element)\n return;\n if (element.hasAttribute(\"data-vbg-uid\"))\n return;\n if (!this.intersectionObserver) {\n if (!params)\n params = {};\n params[\"always-play\"] = true;\n }\n const link = element.getAttribute(\"data-youtube\") || element.getAttribute(\"data-vbg\");\n const vid_data = this.getVidID(link);\n if (!vid_data)\n return;\n const uid = this.generateUID(vid_data.id);\n if (!uid)\n return;\n switch (vid_data.type) {\n case \"YOUTUBE\":\n const yb = new YoutubeBackground(element, params, vid_data.id, uid, this);\n this.index[uid] = yb;\n break;\n case \"VIMEO\":\n const vm = new VimeoBackground(element, params, vid_data, uid, this);\n this.index[uid] = vm;\n break;\n case \"VIDEO\":\n const vid = new VideoBackground(element, params, vid_data, uid, this);\n this.index[uid] = vid;\n break;\n }\n if (this.resizeObserver) {\n this.resizeObserver.observe(element);\n }\n if (!this.index[uid].params[\"always-play\"] && this.intersectionObserver) {\n this.intersectionObserver.observe(element);\n }\n }\n destroy(element) {\n const uid = element.uid || element.getAttribute(\"data-vbg-uid\");\n if (uid && this.index.hasOwnProperty(uid)) {\n if (!this.index[uid].params[\"always-play\"] && this.intersectionObserver)\n this.intersectionObserver.unobserve(element);\n if (this.resizeObserver)\n this.resizeObserver.unobserve(element);\n this.index[uid].destroy();\n delete this.index[uid];\n }\n }\n destroyAll() {\n for (let k in this.index) {\n this.destroy(this.index[k].playerElement);\n }\n }\n getVidID(link) {\n if (link === void 0 && link === null)\n return;\n this.re = {};\n this.re.YOUTUBE = RE_YOUTUBE;\n this.re.VIMEO = RE_VIMEO;\n this.re.VIDEO = RE_VIDEO;\n for (let k in this.re) {\n const pts = link.match(this.re[k]);\n if (pts && pts.length) {\n this.re[k].lastIndex = 0;\n const data = {\n id: pts[1],\n type: k,\n regex_pts: pts,\n link\n };\n if (k === \"VIMEO\") {\n const unlistedQueryRegex = /(\\?|&)h=([^=&#?]+)/;\n const unlistedPathRegex = /\\/[^\\/\\:\\.]+(\\:|\\/)([^:?\\/]+)\\s?$/;\n const unlistedQuery = link.match(unlistedPathRegex) || link.match(unlistedQueryRegex);\n if (unlistedQuery)\n data.unlisted = unlistedQuery[2];\n }\n return data;\n }\n }\n return;\n }\n generateUID(pref) {\n pref = pref.replace(/[^a-zA-Z0-9\\-_]/g, \"-\");\n pref = pref.replace(/-{2,}/g, \"-\");\n pref = pref.replace(/^-+/, \"\").replace(/-+$/, \"\");\n pref = \"vbg-\" + pref;\n let uid = pref + \"-\" + randomIntInclusive(0, 9999);\n while (this.index.hasOwnProperty(uid)) {\n uid = pref + \"-\" + randomIntInclusive(0, 9999);\n }\n return uid;\n }\n get(element) {\n const uid = typeof element === \"string\" ? element : element.getAttribute(\"data-vbg-uid\");\n if (uid && this.index.hasOwnProperty(uid))\n return this.index[uid];\n }\n pauseAll() {\n for (let k in this.index) {\n this.index[k].pause();\n }\n }\n playAll() {\n for (let k in this.index) {\n this.index[k].play();\n }\n }\n muteAll() {\n for (let k in this.index) {\n this.index[k].mute();\n }\n }\n unmuteAll() {\n for (let k in this.index) {\n this.index[k].unmute();\n }\n }\n setVolumeAll(volume) {\n for (let k in this.index) {\n this.index[k].setVolume(volume);\n }\n }\n initPlayers(callback) {\n const self = this;\n window.onYouTubeIframeAPIReady = function() {\n for (let k in self.index) {\n if (self.index[k] instanceof YoutubeBackground) {\n self.index[k].initYTPlayer();\n }\n }\n if (callback) {\n setTimeout(callback, 100);\n }\n };\n if (window.hasOwnProperty(\"YT\") && window.YT.loaded) {\n window.onYouTubeIframeAPIReady();\n }\n window.onVimeoIframeAPIReady = function() {\n for (let k in self.index) {\n if (self.index[k] instanceof VimeoBackground) {\n self.index[k].initVimeoPlayer();\n }\n }\n if (callback) {\n setTimeout(callback, 100);\n }\n };\n if (window.hasOwnProperty(\"Vimeo\") && window.Vimeo.hasOwnProperty(\"Player\")) {\n window.onVimeoIframeAPIReady();\n }\n }\n };\n\n // src/main.js\n if (typeof jQuery == \"function\") {\n (function($) {\n $.fn.youtube_background = function(params) {\n const $this = $(this);\n if (window.hasOwnProperty(\"VIDEO_BACKGROUNDS\")) {\n window.VIDEO_BACKGROUNDS.add($this, params);\n return $this;\n }\n window.VIDEO_BACKGROUNDS = new VideoBackgrounds(this, params);\n return $this;\n };\n })(jQuery);\n }\n window.VideoBackgrounds = VideoBackgrounds;\n})();\n//# sourceMappingURL=jquery.youtube-background.js.map\n"],"names":["buttonOn","buttonObj","buttonOff","generateActionButton","obj","props","btn","e","stringToBoolean","str","stringToNumber","stringToArray","stringToObject","stringToRegex","stringToType","bool","isArray","o","isString","randomIntInclusive","min","max","safe","rand","random","fixed","number","digits","percentage","num","total","RE_YOUTUBE","RE_VIMEO","RE_VIDEO","parseResolutionString","res","DEFAULT_RESOLUTION","pts","w","h","query","selector","from","element","proportionalParentCoverResize","elements","ratio","offset","isUserAgentMobile","isMobile","SuperVideoBackground","elem","params","id","uid","type","factoryInstance","DEFAULTS","time","duration","percentage2","parent","wrapper_styles","property","controls","startAt","endAt","name","forceAutoplay","defaults","attr_prefix","res_params","k","data","i","temp_data","YoutubeBackground","state","event","src","tag","firstScriptTag","playerElement","site","url","ctime","seconds","allowSeekAhead","volume","VimeoBackground","unlisted","VideoBackground","vid_data","source","VideoBackgrounds","self","entries","entry","instance","link","yb","vm","vid","unlistedQueryRegex","unlistedPathRegex","unlistedQuery","pref","callback","$","$this"],"mappings":"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"}
Crown-Sports-app-admin@orkexpo.net
欧洲杯竞猜官网
MISSHA谜尚官方网站
欧洲杯买球
qq个性网
太阳城
Sabah-online-platform-marketing@beanslot.net
Crown-betting-hr@tdwang.net
信阳电视网
买球平台
大西北网
新葡京博彩官网
博彩app
17173QQ炫舞专区
皇冠博彩
Official-entrance-to-Sun-City-service@educoncepts-sdr.com
如皋商务信息网
WPYOU
European-Cup-buying-feedback@at-funeral.com
太阳城娱乐城
游戏多
培恩电器
驾考宝典
会员购
新浪游戏
怡达化学
天福天美仕
苏州美罗商城
中国证券投资者保护网
南昌汽车网
大楚十堰网
漂亮女人
长沙列表网
施坦威STEINWAY中国
玩家网PSP中国站