Path: blob/main/extensions/media-preview/media/videoPreview.js
3292 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4// @ts-check5"use strict";67(function () {8// @ts-ignore9const vscode = acquireVsCodeApi();1011function getSettings() {12const element = document.getElementById('settings');13if (element) {14const data = element.getAttribute('data-settings');15if (data) {16return JSON.parse(data);17}18}1920throw new Error(`Could not load settings`);21}2223const settings = getSettings();2425// State26let hasLoadedMedia = false;2728// Elements29const video = document.createElement('video');30if (settings.src !== null) {31video.src = settings.src;32}33video.playsInline = true;34video.controls = true;35video.autoplay = settings.autoplay;36video.muted = settings.autoplay;37video.loop = settings.loop;3839function onLoaded() {40if (hasLoadedMedia) {41return;42}43hasLoadedMedia = true;4445document.body.classList.remove('loading');46document.body.classList.add('ready');47document.body.append(video);48}4950video.addEventListener('error', e => {51if (hasLoadedMedia) {52return;53}5455hasLoadedMedia = true;56document.body.classList.add('error');57document.body.classList.remove('loading');58});5960if (settings.src === null) {61onLoaded();62} else {63video.addEventListener('canplaythrough', () => {64onLoaded();65});66}6768document.querySelector('.open-file-link')?.addEventListener('click', (e) => {69e.preventDefault();70vscode.postMessage({71type: 'reopen-as-text',72});73});74}());757677