73 lines
1.7 KiB
JavaScript
73 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 container = document.createElement('div');
|
|
container.className = 'audio-container';
|
|
document.body.appendChild(container);
|
|
|
|
const audio = new Audio(settings.src === null ? undefined : settings.src);
|
|
audio.controls = true;
|
|
|
|
function onLoaded() {
|
|
if (hasLoadedMedia) {
|
|
return;
|
|
}
|
|
hasLoadedMedia = true;
|
|
|
|
document.body.classList.remove('loading');
|
|
document.body.classList.add('ready');
|
|
container.append(audio);
|
|
}
|
|
|
|
audio.addEventListener('error', e => {
|
|
if (hasLoadedMedia) {
|
|
return;
|
|
}
|
|
|
|
hasLoadedMedia = true;
|
|
document.body.classList.add('error');
|
|
document.body.classList.remove('loading');
|
|
});
|
|
|
|
if (settings.src === null) {
|
|
onLoaded();
|
|
} else {
|
|
audio.addEventListener('canplaythrough', () => {
|
|
onLoaded();
|
|
});
|
|
}
|
|
|
|
document.querySelector('.open-file-link')?.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
vscode.postMessage({
|
|
type: 'reopen-as-text',
|
|
});
|
|
});
|
|
}());
|