{"version":3,"sources":["player.js"],"names":["const","lsKeys","page","urlPrefix","urlIdentifier","urlInput","document","querySelector","reloadBtn","downloadBtn","uploadRoot","titleFormat","videoContainer","player","window","HELP_IMPROVE_VIDEOJS","onAxiosError","error","statusText","520","521","522","523","524","525","526","527","530","response","status","description","data","swal","toggleReloadBtn","enabled","classList","remove","removeAttribute","add","setAttribute","reloadVideo","value","src","Math","round","Date","now","axios","head","then","test","headers","dispose","innerHTML","videoElement","createElement","id","className","sourceElement","type","appendChild","videojs","language","playbackRates","responsive","seekButtons","forward","back","title","replace","history","pushState","catch","addEventListener","mainScript","dataset","let","location","protocol","host","match","pathname","substring","indexOf","form","event","preventDefault","checkValidity"],"mappings":"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","file":"player.js","sourcesContent":["/* global swal, axios, videojs */\n\n// eslint-disable-next-line no-unused-vars\nconst lsKeys = {}\n\n// eslint-disable-next-line no-unused-vars\nconst page = {\n urlPrefix: null,\n urlIdentifier: null,\n\n urlInput: document.querySelector('#identifier'),\n reloadBtn: document.querySelector('#reloadBtn'),\n downloadBtn: document.querySelector('#downloadBtn'),\n uploadRoot: null,\n titleFormat: null,\n\n videoContainer: document.querySelector('#playerContainer'),\n player: null\n}\n\n// Disable video.js telemetry (should already be disabled by default since v7 though)\nwindow.HELP_IMPROVE_VIDEOJS = false\n\n// Handler for Axios errors\npage.onAxiosError = error => {\n // Better Cloudflare errors\n const cloudflareErrors = {\n 520: 'Unknown Error',\n 521: 'Web Server Is Down',\n 522: 'Connection Timed Out',\n 523: 'Origin Is Unreachable',\n 524: 'A Timeout Occurred',\n 525: 'SSL Handshake Failed',\n 526: 'Invalid SSL Certificate',\n 527: 'Railgun Error',\n 530: 'Origin DNS Error'\n }\n\n const statusText = cloudflareErrors[error.response.status] || error.response.statusText\n\n const description = error.response.data && error.response.data.description\n ? error.response.data.description\n : ''\n return swal(`${error.response.status} ${statusText}`, description, 'error')\n}\n\npage.toggleReloadBtn = enabled => {\n if (enabled) {\n page.reloadBtn.classList.remove('is-loading')\n page.reloadBtn.removeAttribute('disabled')\n } else {\n page.reloadBtn.classList.add('is-loading')\n page.reloadBtn.setAttribute('disabled', true)\n }\n}\n\npage.reloadVideo = () => {\n if (!page.urlInput.value) return\n\n page.toggleReloadBtn(false)\n const src = `${page.uploadRoot}/${page.urlInput.value}?_=${Math.round(Date.now() / 1000)}`\n\n axios.head(src).then(response => {\n if (response.status !== 200 && response.status !== 304) {\n page.toggleReloadBtn(true)\n return page.onAxiosError(response)\n }\n\n if (!/^(video|audio)\\//.test(response.headers['content-type'])) {\n page.toggleReloadBtn(true)\n return swal('An error occurred!', 'The requested upload does not appear to be a media file.', 'error')\n }\n\n if (page.player) {\n page.player.dispose()\n page.videoContainer.innerHTML = ''\n }\n\n const videoElement = document.createElement('video-js')\n videoElement.id = 'video-js'\n videoElement.className = 'video-js vjs-default-skin vjs-fluid vjs-big-play-centered'\n videoElement.setAttribute('controls', true)\n videoElement.setAttribute('preload', 'auto')\n\n const sourceElement = document.createElement('source')\n sourceElement.src = src\n sourceElement.type = response.headers['content-type']\n\n videoElement.appendChild(sourceElement)\n page.videoContainer.appendChild(videoElement)\n\n page.player = videojs('video-js', {\n language: 'en',\n playbackRates: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n responsive: true\n })\n page.player.seekButtons({ forward: 10, back: 10 })\n\n if (page.titleFormat) {\n document.title = page.titleFormat.replace(/%identifier%/g, page.urlInput.value)\n }\n\n if (page.downloadBtn) {\n page.downloadBtn.setAttribute('href', src)\n }\n\n window.history.pushState(null, null, page.urlPrefix + page.urlInput.value)\n page.toggleReloadBtn(true)\n }).catch(error => {\n page.toggleReloadBtn(true)\n page.onAxiosError(error)\n })\n}\n\nwindow.addEventListener('DOMContentLoaded', () => {\n const mainScript = document.querySelector('#mainScript')\n if (!mainScript || typeof mainScript.dataset.uploadRoot === 'undefined') return\n\n page.uploadRoot = mainScript.dataset.uploadRoot\n page.titleFormat = mainScript.dataset.titleFormat\n\n let urlPrefix = window.location.protocol + '//' + window.location.host\n const match = window.location.pathname.match(/.*\\/(.*)$/)\n if (!match || !match[1]) {\n return swal('An error occurred!', 'Failed to parse upload identifier from URL.', 'error')\n }\n\n page.urlIdentifier = match[1]\n urlPrefix += window.location.pathname.substring(0, window.location.pathname.indexOf(match[1]))\n page.urlPrefix = urlPrefix\n\n if (!page.urlInput) return\n page.urlInput.value = page.urlIdentifier\n\n // Prevent default form's submit actio\n const form = document.querySelector('#inputForm')\n form.addEventListener('submit', event => {\n event.preventDefault()\n })\n\n if (!page.videoContainer) return\n\n page.reloadBtn = document.querySelector('#reloadBtn')\n if (page.reloadBtn) {\n page.reloadBtn.addEventListener('click', event => {\n if (!form.checkValidity()) return\n page.reloadVideo()\n })\n }\n\n page.reloadVideo()\n})\n"]}