vscode/extensions/media-preview/media/videoPreview.js
mxwj 018ff30de3
Some checks failed
Monaco Editor checks / Monaco Editor checks (push) Has been cancelled
Initial commit
2024-11-15 14:29:18 +08:00

76 lines
1.7 KiB
JavaScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// @ts-check
"use strict";
(function () {
// @ts-ignore
const vscode = acquireVsCodeApi();
function getSettings() {
const element = document.getElementById('settings');
if (element) {
const data = element.getAttribute('data-settings');
if (data) {
return JSON.parse(data);
}
}
throw new Error(`Could not load settings`);
}
const settings = getSettings();
// State
let hasLoadedMedia = false;
// Elements
const video = document.createElement('video');
if (settings.src !== null) {
video.src = settings.src;
}
video.playsInline = true;
video.controls = true;
video.autoplay = settings.autoplay;
video.muted = settings.autoplay;
video.loop = settings.loop;
function onLoaded() {
if (hasLoadedMedia) {
return;
}
hasLoadedMedia = true;
document.body.classList.remove('loading');
document.body.classList.add('ready');
document.body.append(video);
}
video.addEventListener('error', e => {
if (hasLoadedMedia) {
return;
}
hasLoadedMedia = true;
document.body.classList.add('error');
document.body.classList.remove('loading');
});
if (settings.src === null) {
onLoaded();
} else {
video.addEventListener('canplaythrough', () => {
onLoaded();
});
}
document.querySelector('.open-file-link')?.addEventListener('click', (e) => {
e.preventDefault();
vscode.postMessage({
type: 'reopen-as-text',
});
});
}());