{"version":3,"file":"js/default-e92168f71871da4f91a9.js","mappings":"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","sources":["webpack://polygonjs/./app/javascript/src/default/Rails.ts","webpack://polygonjs/./app/javascript/src/default/VisibilityChecker.ts","webpack://polygonjs/./app/javascript/src/default/icons/mute.ts","webpack://polygonjs/./app/javascript/src/default/VideoVisibilityChecker.ts","webpack://polygonjs/./app/javascript/src/default/PartialLoader.ts","webpack://polygonjs/./app/javascript/src/default/HTMLElementRatioResizer.ts","webpack://polygonjs/./app/javascript/src/default/Toolbar.ts","webpack://polygonjs/./app/javascript/src/default/YoutubeLiteEmbedder.ts","webpack://polygonjs/./app/javascript/src/default/CodeClipboardHandler.ts","webpack://polygonjs/./app/javascript/packs/default.ts","webpack://polygonjs/./app/javascript/src/default/Email.ts","webpack://polygonjs/./app/javascript/src/default/SceneCardsController.ts","webpack://polygonjs/./app/javascript/src/default/Form.ts"],"sourcesContent":["const Rails = require('@rails/ujs');\nimport * as activestorage from 'activestorage';\n\nexport class RailsInitializer {\n\tstatic init() {\n\t\tif (!window._rails_loaded) {\n\t\t\tRails.start();\n\n\t\t\tactivestorage.start();\n\t\t}\n\t}\n}\n","export class VisibilityChecker {\n\tstatic isElementCenterInViewport(element: Element): boolean {\n\t\tconst bounding = element.getBoundingClientRect();\n\t\tconst center = {\n\t\t\tx: 0.5 * (bounding.left + bounding.right),\n\t\t\ty: 0.5 * (bounding.top + bounding.bottom),\n\t\t};\n\t\tconst max = {\n\t\t\tx: window.innerWidth || document.documentElement.clientWidth,\n\t\t\ty: window.innerHeight || document.documentElement.clientHeight,\n\t\t};\n\t\tconst isInCenter = center.x >= 0 && center.x <= max.x && center.y >= 0 && center.y <= max.y;\n\t\treturn isInCenter;\n\t}\n\n\tstatic isElementFullyInViewport(element: Element): boolean {\n\t\tconst bounding = element.getBoundingClientRect();\n\t\treturn (\n\t\t\tbounding.top >= 0 &&\n\t\t\tbounding.left >= 0 &&\n\t\t\tbounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\tbounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t);\n\t}\n}\n","export const ICONS = {\n\tMUTE: ``,\n\tVOLUME_UP: ``,\n\tFULLSCREEN: ``,\n};\n","import {ICONS} from './icons/mute';\nimport {VisibilityChecker} from './VisibilityChecker';\n\n// const HAS_BEEN_MANUALLY_PAUSED_ATTR = \"has_been_manually_paused\";\n\nexport class VideoVisibilityCheckerHandler {\n\tprivate static _checker: VideoVisibilityChecker;\n\n\tstatic init() {\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\tthis._checker = this._checker || new VideoVisibilityChecker();\n\t\t});\n\t}\n\tstatic reset() {\n\t\tif (this._checker) {\n\t\t\tthis._checker.reset();\n\t\t}\n\t}\n}\n\nfunction _fadeOut(image: HTMLImageElement) {\n\treturn;\n\tconst opacityStr = image.style.opacity || '1';\n\tconst opacity = parseFloat(opacityStr);\n\tif (opacity <= 0) {\n\t\treturn;\n\t}\n\timage.style.opacity = `${opacity - 0.05}`;\n\tsetTimeout(() => {\n\t\t_fadeOut(image);\n\t}, 50);\n}\n\n// https://mdn.github.io/dom-examples/fullscreen-api/index.html\nfunction toggleFullScreen(video: HTMLVideoElement) {\n\tif (!document.fullscreenElement) {\n\t\t// If the document is not in full screen mode\n\t\t// make the video full screen\n\t\tvideo.requestFullscreen();\n\t} else {\n\t\t// Otherwise exit the full screen\n\t\tif (document.exitFullscreen) {\n\t\t\tdocument.exitFullscreen();\n\t\t}\n\t}\n}\n\n// checks video visibility\nclass VideoVisibilityChecker {\n\tprivate _boundListener: () => void = this._onScroll.bind(this);\n\tprivate _videoControllers: VideoController[] = [];\n\n\tconstructor() {\n\t\tthis.init();\n\n\t\tthis._setOnScrollEvents();\n\t\tthis._setOnPauseEvents();\n\t\tsetTimeout(() => {\n\t\t\tthis._checkVideosVisibility();\n\t\t}, 500);\n\t}\n\n\t// TODO: check when calling that with turbolinks if used\n\tdestroy() {\n\t\tthis.remove_events();\n\t}\n\tinit() {\n\t\tthis._videoControllers = this._findVideos();\n\t}\n\treset() {\n\t\tthis.init();\n\t}\n\n\tprivate _setOnScrollEvents() {\n\t\twindow.addEventListener('scroll', this._boundListener, {passive: true});\n\t}\n\tprivate _setOnPauseEvents() {\n\t\tfor (let i = 0; i < this._videoControllers.length; i++) {\n\t\t\tthis._videoControllers[i].setOnPauseEvent();\n\t\t}\n\t}\n\tprivate remove_events() {\n\t\twindow.removeEventListener('scroll', this._boundListener);\n\t}\n\n\tprivate _findVideos() {\n\t\tconst elements = document.getElementsByClassName('scene_video') as HTMLCollectionOf;\n\t\tconst list: HTMLElement[] = [];\n\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\tlist.push(elements[i]);\n\t\t}\n\t\tconst elements_no_top = document.getElementsByClassName('scene_video_no_top') as HTMLCollectionOf;\n\t\tfor (let i = 0; i < elements_no_top.length; i++) {\n\t\t\tlist.push(elements_no_top[i]);\n\t\t}\n\n\t\treturn list.map((e) => new VideoController(e));\n\t}\n\tprivate _onScroll() {\n\t\tthis._checkVideosVisibility();\n\t}\n\tprivate _checkVideosVisibility() {\n\t\tfor (let videoController of this._videoControllers) {\n\t\t\tvideoController.checkVideosVisibility();\n\t\t}\n\t}\n}\n\nclass VideoController {\n\tprivate _videoElement: HTMLVideoElement | null = null;\n\tprivate _playButtonElement: HTMLElement | null = null;\n\tprivate _soundButton: HTMLElement | null = null;\n\tconstructor(public readonly element: HTMLElement) {}\n\tsetOnPauseEvent() {\n\t\tconst on_pause_event = () => {\n\t\t\tif (VisibilityChecker.isElementCenterInViewport(this.element)) {\n\t\t\t\tthis.toggleToVideoAndPlay();\n\t\t\t}\n\t\t};\n\t\tthis.element.addEventListener('pause', on_pause_event, false);\n\t}\n\tcheckVideosVisibility() {\n\t\tconst isVisible = VisibilityChecker.isElementCenterInViewport(this.element);\n\t\tif (isVisible) {\n\t\t\tthis.toggleToVideoAndPlay();\n\t\t} else {\n\t\t\tthis._pauseVideo();\n\t\t}\n\t}\n\n\tprivate _createVideoElement() {\n\t\tconst element = this.element;\n\t\tconst image = element.querySelector('img') as HTMLImageElement;\n\t\tconst src = element.dataset['src'];\n\t\tif (src) {\n\t\t\tconst videoClassesStr = element.dataset['videoClass'];\n\t\t\tconst withSound = element.dataset['videoWithsound'] != null;\n\n\t\t\tconst video = document.createElement('video');\n\t\t\tconst imageClasses = image.classList.toString().split(' ');\n\t\t\tfor (let imageClass of imageClasses) {\n\t\t\t\tif (imageClass.length > 0) {\n\t\t\t\t\tvideo.classList.add(imageClass);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (videoClassesStr) {\n\t\t\t\tconst videoClasses = videoClassesStr.split(' ');\n\t\t\t\tfor (let videoClass of videoClasses) {\n\t\t\t\t\tvideo.classList.add(videoClass);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvideo.poster = image.src;\n\t\t\tvideo.loop = true;\n\t\t\tvideo.autoplay = true;\n\t\t\tvideo.muted = true;\n\t\t\tvideo.controls = false;\n\t\t\t// video.setAttribute(\"controls\", \"false\");\n\t\t\tconst source = document.createElement('source');\n\t\t\tsource.setAttribute('src', src);\n\t\t\tsource.setAttribute('type', 'video/mp4');\n\t\t\tvideo.appendChild(source);\n\t\t\telement.insertBefore(video, image.nextElementSibling);\n\n\t\t\t// add fullscreen button\n\t\t\tconst fullscreenButton = document.createElement('div');\n\t\t\tfullscreenButton.innerHTML = ICONS.FULLSCREEN;\n\t\t\telement.appendChild(fullscreenButton);\n\t\t\tfullscreenButton.style.position = 'absolute';\n\t\t\tfullscreenButton.style.bottom = '0px';\n\t\t\tfullscreenButton.style.right = '0px';\n\t\t\tfullscreenButton.style.cursor = 'pointer';\n\t\t\tfullscreenButton.style.backgroundColor = 'black';\n\t\t\tfullscreenButton.style.color = 'white';\n\t\t\t// fullscreenButton.style.width = '20px';\n\t\t\t// fullscreenButton.style.height = '20px';\n\t\t\tfullscreenButton.addEventListener('click', () => {\n\t\t\t\ttoggleFullScreen(video);\n\t\t\t});\n\n\t\t\t// add sound button\n\t\t\tif (withSound) {\n\t\t\t\tthis._soundButton = document.createElement('div');\n\t\t\t\tthis._soundButton.innerHTML = ICONS.VOLUME_UP;\n\t\t\t\telement.appendChild(this._soundButton);\n\t\t\t\tthis._soundButton.style.position = 'absolute';\n\t\t\t\tthis._soundButton.style.top = '0px';\n\t\t\t\tthis._soundButton.style.right = '0px';\n\t\t\t\tthis._soundButton.style.cursor = 'pointer';\n\t\t\t\tthis._soundButton.style.backgroundColor = 'black';\n\t\t\t\tthis._soundButton.style.color = 'white';\n\t\t\t\tthis._soundButton.addEventListener('click', () => {\n\t\t\t\t\tthis._toggleSound();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._playButtonElement = element.querySelector('.play-button') as HTMLElement;\n\t\t\tthis._playButtonElement.addEventListener('click', () => {\n\t\t\t\tthis.toggleToVideoAndPlay();\n\t\t\t});\n\n\t\t\t// fade out image\n\t\t\t_fadeOut(image);\n\t\t\treturn video;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _toggleSound() {\n\t\tconst video = this.videoElement();\n\t\tif (video && this._soundButton) {\n\t\t\tvideo.muted = !video.muted;\n\t\t\tconst icon = video.muted ? ICONS.VOLUME_UP : ICONS.MUTE;\n\t\t\tthis._soundButton.innerHTML = icon;\n\t\t}\n\t}\n\n\tvideoElement() {\n\t\treturn (this._videoElement = this._videoElement || this._createVideoElement());\n\t}\n\n\ttoggleToVideoAndPlay() {\n\t\tthis._playVideo();\n\t}\n\tprivate _playVideo() {\n\t\t// wrap in a try, to avoid browser errors such as\n\t\t// Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first\n\t\ttry {\n\t\t\t// use a promise\n\t\t\t// https://developers.google.com/web/updates/2017/09/autoplay-policy-changes\n\t\t\tconst promise = this.videoElement()?.play();\n\t\t\tif (promise !== undefined) {\n\t\t\t\tpromise\n\t\t\t\t\t.then((_) => {\n\t\t\t\t\t\tthis._playButtonElement?.remove();\n\t\t\t\t\t\t// Autoplay started!\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t// Autoplay was prevented.\n\t\t\t\t\t\tthis._playButtonElement?.classList.remove('hidden');\n\t\t\t\t\t});\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\tprivate _pauseVideo() {\n\t\tconst element = this.element;\n\n\t\tconst video = element.children[1] as HTMLVideoElement;\n\t\tif (video) {\n\t\t\t// wrap in a try, to avoid browser errors such as\n\t\t\t// Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first\n\t\t\ttry {\n\t\t\t\tvideo.pause();\n\t\t\t} catch (e) {}\n\t\t}\n\t}\n}\n","import {VisibilityChecker} from './VisibilityChecker';\nimport {VideoVisibilityCheckerHandler} from './VideoVisibilityChecker';\n\nexport class PartialsLoader {\n\tprivate _boundListener: () => void = this._onScroll.bind(this);\n\tprivate _partialLoaders: PartialLoader[] = [];\n\n\tstatic init() {\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\tnew PartialsLoader();\n\t\t});\n\t}\n\n\tconstructor() {\n\t\tthis._setOnscrollEvents();\n\t\tthis.init();\n\t}\n\n\telements() {\n\t\treturn document.body.querySelectorAll('[data-widget=partial_loader]');\n\t}\n\tprivate init() {\n\t\tconst elements = this.elements();\n\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\tconst element = elements[i] as HTMLElement;\n\t\t\tconst partialLoader = new PartialLoader(element);\n\t\t\tthis._partialLoaders.push(partialLoader);\n\t\t}\n\n\t\tthis._onScroll();\n\t}\n\tprivate _setOnscrollEvents() {\n\t\twindow.addEventListener('scroll', this._boundListener, false);\n\t}\n\n\tprivate _onScroll() {\n\t\tthis._checkElementsVisibility();\n\t}\n\tprivate _checkElementsVisibility() {\n\t\tfor (let i = 0; i < this._partialLoaders.length; i++) {\n\t\t\tconst partialLoader = this._partialLoaders[i];\n\n\t\t\tif (partialLoader.isVisible()) {\n\t\t\t\tpartialLoader.load();\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass PartialLoader {\n\tprivate _loading: boolean = false;\n\tprivate _loaded: boolean = false;\n\n\tconstructor(private _element: HTMLElement) {}\n\n\tisVisible() {\n\t\treturn VisibilityChecker.isElementFullyInViewport(this._element);\n\t}\n\n\tasync load() {\n\t\tif (this._loaded || this._loading) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._loading = true;\n\t\tconst url = this._element.dataset['url'];\n\t\ttry {\n\t\t\tif (url) {\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tconst text = await response.text();\n\t\t\t\t\tthis._element.innerHTML = text;\n\t\t\t\t\tthis._loaded = true;\n\n\t\t\t\t\tVideoVisibilityCheckerHandler.reset();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(`failed to load ${url}`);\n\t\t}\n\t}\n}\n","export class HTMLElementRatioResizer {\n\tprivate static _initialized = false;\n\tstatic init() {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t}\n\t\tthis._initialized = true;\n\t\tnew HTMLElementRatioResizer()._init();\n\t}\n\tconstructor() {}\n\tprivate _init() {\n\t\tthis._process();\n\t\twindow.addEventListener('resize', this._process.bind(this));\n\t}\n\tprivate _process() {\n\t\tconst elements: Element[] = [\n\t\t\t...document.getElementsByTagName('iframe'),\n\t\t\t// ...document.getElementsByTagName('lite-youtube'), // not necessary to resize those if the poster\n\t\t];\n\t\tfor (let element of elements) {\n\t\t\tconst ratio = element.getAttribute('ratio');\n\t\t\tif (ratio != null) {\n\t\t\t\tthis._processElement(element, parseFloat(ratio));\n\t\t\t}\n\t\t}\n\t}\n\tprivate _processElement(element: Element, ratio: number) {\n\t\tconst box = element.getBoundingClientRect();\n\t\tconst expectedheight = box.width / ratio;\n\t\t(element as HTMLElement).style.height = `${expectedheight}px`;\n\t}\n}\n","export class Toolbar {\n\tprivate static _initialized = false;\n\tstatic init() {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t}\n\t\tthis._initialized = true;\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\tconst homepage_toolbar_mobile_menu = document.getElementById('homepage_toolbar_mobile_menu');\n\t\t\tconst homepage_toolbar_collapser = document.getElementById('homepage_toolbar_collapser');\n\t\t\tconst homepage_toolbar_expander = document.getElementById('homepage_toolbar_expander');\n\n\t\t\tconst CLASS = {\n\t\t\t\tHIDDEN: 'hidden',\n\t\t\t};\n\t\t\tfunction collapse() {\n\t\t\t\tif (homepage_toolbar_mobile_menu) {\n\t\t\t\t\thomepage_toolbar_mobile_menu.classList.add(CLASS.HIDDEN);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('no #homepage_toolbar_mobile_expanded found');\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction expand() {\n\t\t\t\tif (homepage_toolbar_mobile_menu) {\n\t\t\t\t\thomepage_toolbar_mobile_menu.classList.remove(CLASS.HIDDEN);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('no #homepage_toolbar_mobile_expanded found');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (homepage_toolbar_collapser) {\n\t\t\t\thomepage_toolbar_collapser.addEventListener('click', collapse);\n\t\t\t} else {\n\t\t\t\tconsole.warn('no #homepage_toolbar_collapser found');\n\t\t\t}\n\t\t\tif (homepage_toolbar_expander) {\n\t\t\t\thomepage_toolbar_expander.addEventListener('click', expand);\n\t\t\t} else {\n\t\t\t\tconsole.warn('no #homepage_toolbar_collapser found');\n\t\t\t}\n\t\t});\n\t}\n}\n","// @ts-ignore\n// import a from 'lite-youtube-embed';\n// copied the repo here, as there is a webpack js loading error when going to a scene public page\n\n/**\n * A lightweight youtube embed. Still should feel the same to the user, just MUCH faster to initialize and paint.\n *\n * Thx to these as the inspiration\n * https://storage.googleapis.com/amp-vs-non-amp/youtube-lazy.html\n * https://autoplay-youtube-player.glitch.me/\n *\n * Once built it, I also found these:\n * https://github.com/ampproject/amphtml/blob/master/extensions/amp-youtube (👍👍)\n * https://github.com/Daugilas/lazyYT\n * https://github.com/vb/lazyframe\n */\nclass LiteYTEmbed extends HTMLElement {\n\tprivate videoId: string | null = null;\n\tprivate playLabel: string | undefined;\n\tprivate posterUrl: string | undefined;\n\n\tconnectedCallback() {\n\t\tthis.videoId = this.getAttribute('videoid');\n\n\t\tlet playBtnEl = this.querySelector('.lty-playbtn') as HTMLButtonElement;\n\t\t// A label for the button takes priority over a [playlabel] attribute on the custom-element\n\t\tthis.playLabel = (playBtnEl && playBtnEl.textContent?.trim()) || this.getAttribute('playlabel') || 'Play';\n\n\t\t/**\n\t\t * Lo, the youtube placeholder image! (aka the thumbnail, poster image, etc)\n\t\t *\n\t\t * See https://github.com/paulirish/lite-youtube-embed/blob/master/youtube-thumbnail-urls.md\n\t\t *\n\t\t * TODO: Do the sddefault->hqdefault fallback\n\t\t * - When doing this, apply referrerpolicy (https://github.com/ampproject/amphtml/pull/3940)\n\t\t * TODO: Consider using webp if supported, falling back to jpg\n\t\t */\n\t\tif (!this.style.backgroundImage) {\n\t\t\tthis.posterUrl = `https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg`;\n\t\t\t// Warm the connection for the poster image\n\t\t\tLiteYTEmbed.addPrefetch('preload', this.posterUrl, 'image');\n\n\t\t\tthis.style.backgroundImage = `url(\"${this.posterUrl}\")`;\n\t\t}\n\n\t\t// Set up play button, and its visually hidden label\n\t\tif (!playBtnEl) {\n\t\t\tplayBtnEl = document.createElement('button') as HTMLButtonElement;\n\t\t\tplayBtnEl.type = 'button';\n\t\t\tplayBtnEl.classList.add('lty-playbtn');\n\t\t\tthis.append(playBtnEl);\n\t\t}\n\t\tif (!playBtnEl.textContent) {\n\t\t\tconst playBtnLabelEl = document.createElement('span');\n\t\t\tplayBtnLabelEl.className = 'lyt-visually-hidden';\n\t\t\tplayBtnLabelEl.textContent = this.playLabel;\n\t\t\tplayBtnEl.append(playBtnLabelEl);\n\t\t}\n\n\t\t// On hover (or tap), warm up the TCP connections we're (likely) about to use.\n\t\tthis.addEventListener('pointerover', LiteYTEmbed.warmConnections, {once: true});\n\n\t\t// Once the user clicks, add the real iframe and drop our play button\n\t\t// TODO: In the future we could be like amp-youtube and silently swap in the iframe during idle time\n\t\t// We'd want to only do this for in-viewport or near-viewport ones: https://github.com/ampproject/amphtml/pull/5003\n\t\tthis.addEventListener('click', (e) => this.addIframe());\n\t}\n\n\t// // TODO: Support the the user changing the [videoid] attribute\n\t// attributeChangedCallback() {\n\t// }\n\n\t/**\n\t * Add a to the head\n\t */\n\tstatic addPrefetch(kind: string, url: string, as: string) {\n\t\tconst linkEl = document.createElement('link');\n\t\tlinkEl.rel = kind;\n\t\tlinkEl.href = url;\n\t\tif (as) {\n\t\t\tlinkEl.as = as;\n\t\t}\n\t\tdocument.head.append(linkEl);\n\t}\n\n\t/**\n\t * Begin pre-connecting to warm up the iframe load\n\t * Since the embed's network requests load within its iframe,\n\t * preload/prefetch'ing them outside the iframe will only cause double-downloads.\n\t * So, the best we can do is warm up a few connections to origins that are in the critical path.\n\t *\n\t * Maybe `` would work, but it's unsupported: http://crbug.com/593267\n\t * But TBH, I don't think it'll happen soon with Site Isolation and split caches adding serious complexity.\n\t */\n\tstatic warmConnections() {\n\t\tif ((LiteYTEmbed as any).preconnected) return;\n\n\t\t// The iframe document and most of its subresources come right off youtube.com\n\t\t(LiteYTEmbed as any).addPrefetch('preconnect', 'https://www.youtube-nocookie.com');\n\t\t// The botguard script is fetched off from google.com\n\t\t(LiteYTEmbed as any).addPrefetch('preconnect', 'https://www.google.com');\n\n\t\t// Not certain if these ad related domains are in the critical path. Could verify with domain-specific throttling.\n\t\t(LiteYTEmbed as any).addPrefetch('preconnect', 'https://googleads.g.doubleclick.net');\n\t\t(LiteYTEmbed as any).addPrefetch('preconnect', 'https://static.doubleclick.net');\n\n\t\t(LiteYTEmbed as any).preconnected = true;\n\t}\n\n\taddIframe() {\n\t\tconst params = new URLSearchParams(this.getAttribute('params') || []);\n\t\tparams.append('autoplay', '1');\n\n\t\tconst iframeEl = document.createElement('iframe');\n\t\tiframeEl.width = `${560}px`;\n\t\tiframeEl.height = `${315}px`;\n\t\t// No encoding necessary as [title] is safe. https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#:~:text=Safe%20HTML%20Attributes%20include\n\t\tiframeEl.title = `${this.playLabel}`;\n\t\tiframeEl.allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture';\n\t\tiframeEl.allowFullscreen = true;\n\t\t// AFAIK, the encoding here isn't necessary for XSS, but we'll do it only because this is a URL\n\t\t// https://stackoverflow.com/q/64959723/89484\n\t\tiframeEl.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(\n\t\t\tthis.videoId || ''\n\t\t)}?${params.toString()}`;\n\t\tthis.append(iframeEl);\n\n\t\tthis.classList.add('lyt-activated');\n\n\t\t// Set focus for a11y\n\t\tthis.querySelector('iframe')?.focus();\n\t}\n}\n\nexport class YoutubeLiteEmbedder {\n\tprivate static _initialized = false;\n\tstatic init() {\n\t\tif (this._initialized) {\n\t\t\tconsole.warn('already initialized');\n\t\t\treturn;\n\t\t}\n\t\tthis._initialized = true;\n\t\t// Register custom element\n\t\ttry {\n\t\t\tcustomElements.define('lite-youtube', LiteYTEmbed);\n\t\t} catch (err) {\n\t\t\tconsole.warn('customElement creation failed');\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n}\n","export class CodeClipboardHandler {\n\tstatic init() {\n\t\tnew CodeClipboardHandler();\n\t}\n\tconstructor() {\n\t\tconst elements = Array.from(document.querySelectorAll('[data-widget=copycode]')) as HTMLElement[];\n\t\tfor (let element of elements) {\n\t\t\tthis._initElement(element);\n\t\t}\n\t}\n\tprivate _initElement(element: HTMLElement) {\n\t\telement.addEventListener('click', () => {\n\t\t\tthis._onElementClick(element);\n\t\t});\n\t}\n\tprivate _onElementClick(element: HTMLElement) {\n\t\tconst targetId = element.dataset['target'];\n\t\tif (!targetId) {\n\t\t\tconsole.error(`this element has no target ${targetId}`);\n\t\t\treturn;\n\t\t}\n\t\tconst targetElement = document.getElementById(targetId);\n\t\tif (!targetElement) {\n\t\t\tconsole.error('target not found');\n\t\t\treturn;\n\t\t}\n\t\tconst content = targetElement.innerText;\n\t\tconst inputElement = document.createElement('textarea');\n\t\tinputElement.value = content;\n\n\t\tinputElement.select();\n\t\tinputElement.setSelectionRange(0, 99999); /* For mobile devices */\n\n\t\t/* Copy the text inside the text field */\n\t\tnavigator.clipboard.writeText(inputElement.value);\n\t}\n}\n","import {RailsInitializer} from '../src/default/Rails';\nimport {PartialsLoader} from '../src/default/PartialLoader';\nimport {EmailDisplay} from '../src/default/Email';\nimport {VideoVisibilityCheckerHandler} from '../src/default/VideoVisibilityChecker';\nimport {HTMLElementRatioResizer} from '../src/default/HTMLElementRatioResizer';\nimport {SceneCardsController} from '../src/default/SceneCardsController';\nimport {Toolbar} from '../src/default/Toolbar';\nimport {FormController} from '../src/default/Form';\nimport {YoutubeLiteEmbedder} from '../src/default/YoutubeLiteEmbedder';\nimport {CodeClipboardHandler} from '../src/default/CodeClipboardHandler';\n\nconst libsToInitialize = {\n\tRailsInitializer,\n\tPartialsLoader,\n\tEmailDisplay,\n\tVideoVisibilityCheckerHandler,\n\tHTMLElementRatioResizer,\n\tSceneCardsController,\n\tToolbar,\n\tFormController,\n\tYoutubeLiteEmbedder,\n\tCodeClipboardHandler,\n};\n\nfor (let libName of Object.keys(libsToInitialize)) {\n\tconst lib = (libsToInitialize as any)[libName];\n\tlib.init();\n}\n","export class EmailDisplay {\n\tstatic init() {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\t\tconst elements = document.getElementsByClassName(\n\t\t\t\t\"email_no_bots_please\"\n\t\t\t);\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst element = elements[i];\n\t\t\t\tconst email = \"gui\" + \"@\" + window.config.domain;\n\t\t\t\telement.innerHTML = email;\n\t\t\t\tif (element.tagName == \"A\") {\n\t\t\t\t\telement.setAttribute(\"href\", `mailto:${email}`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","export class SceneCardsController {\n\tstatic init() {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\t\tconst elements = document.getElementsByClassName(\n\t\t\t\t\"design_video_container\"\n\t\t\t) as HTMLCollectionOf;\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst element = elements[i];\n\n\t\t\t\t// const current_display = element.style.display;\n\t\t\t\t// if (current_display == \"none\") {\n\t\t\t\t// then we are on desktop\n\t\t\t\tthis.init_element_for_desktop(element);\n\t\t\t\t// } else {\n\t\t\t\t// nothing to do since the VideoVisibilityChecker should handle it\n\t\t\t\t// }\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic init_element_for_desktop(element: HTMLElement) {\n\t\tconst video = element.querySelector(\"video\");\n\t\tif (video) {\n\t\t\telement.addEventListener(\"mouseenter\", () => {\n\t\t\t\tvideo.play();\n\t\t\t});\n\t\t\telement.addEventListener(\"mouseleave\", () => {\n\t\t\t\tvideo.pause();\n\t\t\t});\n\t\t}\n\t}\n}\n","export class FormController {\n\tstatic init() {\n\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\tconst autoFocusedElements = document.querySelectorAll('input[data-focus]');\n\t\t\tconst element = autoFocusedElements[0] as HTMLElement;\n\t\t\tif (element) {\n\t\t\t\telement.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["Rails","require","VisibilityChecker","static","element","bounding","getBoundingClientRect","center","left","right","top","bottom","max","window","innerWidth","document","documentElement","clientWidth","innerHeight","clientHeight","ICONS","MUTE","VOLUME_UP","FULLSCREEN","VideoVisibilityCheckerHandler","addEventListener","this","_checker","VideoVisibilityChecker","reset","constructor","_boundListener","_onScroll","bind","_videoControllers","init","_setOnScrollEvents","_setOnPauseEvents","setTimeout","_checkVideosVisibility","destroy","remove_events","_findVideos","passive","i","length","setOnPauseEvent","removeEventListener","elements","getElementsByClassName","list","push","elements_no_top","map","e","VideoController","videoController","checkVideosVisibility","_videoElement","_playButtonElement","_soundButton","isElementCenterInViewport","toggleToVideoAndPlay","_pauseVideo","_createVideoElement","image","querySelector","src","dataset","videoClassesStr","withSound","video","createElement","imageClasses","classList","toString","split","imageClass","add","videoClasses","videoClass","poster","loop","autoplay","muted","controls","source","setAttribute","appendChild","insertBefore","nextElementSibling","fullscreenButton","innerHTML","style","position","cursor","backgroundColor","color","fullscreenElement","exitFullscreen","requestFullscreen","toggleFullScreen","_toggleSound","videoElement","icon","_playVideo","promise","_a","play","then","_","remove","catch","error","children","pause","PartialsLoader","_partialLoaders","_setOnscrollEvents","body","querySelectorAll","partialLoader","PartialLoader","_checkElementsVisibility","isVisible","load","_element","_loading","_loaded","isElementFullyInViewport","url","response","fetch","ok","text","console","warn","_HTMLElementRatioResizer","_initialized","_init","_process","getElementsByTagName","ratio","getAttribute","_processElement","parseFloat","expectedheight","width","height","HTMLElementRatioResizer","Toolbar","homepage_toolbar_mobile_menu","getElementById","homepage_toolbar_collapser","homepage_toolbar_expander","CLASS","LiteYTEmbed","HTMLElement","videoId","connectedCallback","playBtnEl","playLabel","textContent","trim","backgroundImage","posterUrl","addPrefetch","type","append","playBtnLabelEl","className","warmConnections","once","addIframe","kind","as","linkEl","rel","href","head","preconnected","params","URLSearchParams","iframeEl","title","allow","allowFullscreen","encodeURIComponent","focus","YoutubeLiteEmbedder","customElements","define","err","log","CodeClipboardHandler","Array","from","_initElement","_onElementClick","targetId","targetElement","content","innerText","inputElement","value","select","setSelectionRange","navigator","clipboard","writeText","libsToInitialize","RailsInitializer","_rails_loaded","start","activestorage","EmailDisplay","email","config","domain","tagName","SceneCardsController","init_element_for_desktop","FormController","libName","Object","keys"],"sourceRoot":""}