TeaWeb/loader/app/targets/app.ts

134 lines
4.1 KiB
TypeScript
Raw Normal View History

import "./shared";
import * as loader from "../loader/loader";
import {ApplicationLoader, SourcePath} from "../loader/loader";
import {script_name} from "../loader/utils";
import {loadManifest, loadManifestTarget} from "../maifest";
2019-08-30 21:06:39 +00:00
2020-03-30 11:44:18 +00:00
declare global {
interface Window {
native_client: boolean;
2019-08-30 21:06:39 +00:00
}
2020-03-30 11:44:18 +00:00
}
2019-08-30 21:06:39 +00:00
2020-09-30 20:51:04 +00:00
function getCacheTag() {
return "?_ts=" + (__build.mode === "debug" ? Date.now() : __build.timestamp);
2019-08-30 21:06:39 +00:00
}
const LoaderTaskCallback = taskId => (script: SourcePath, state) => {
if(state !== "loading")
return;
loader.setCurrentTaskName(taskId, script_name(script, false));
};
2019-08-30 21:06:39 +00:00
/* all javascript loaders */
const loader_javascript = {
load_scripts: async taskId => {
loader.setCurrentTaskName(taskId, "manifest");
await loadManifest();
await loadManifestTarget(__build.entry_chunk_name, taskId);
2019-08-30 21:06:39 +00:00
}
};
const loader_webassembly = {
test_webassembly: async () => {
/* We dont required WebAssembly anymore for fundamental functions, only for auto decoding
if(typeof (WebAssembly) === "undefined" || typeof (WebAssembly.compile) === "undefined") {
console.log(navigator.browserSpecs);
if (navigator.browserSpecs.name == 'Safari') {
if (parseInt(navigator.browserSpecs.version) < 11) {
displayCriticalError("You require Safari 11 or higher to use the web client!<br>Safari " + navigator.browserSpecs.version + " does not support WebAssambly!");
return;
}
}
else {
// Do something for all other browsers.
}
displayCriticalError("You require WebAssembly for TeaSpeak-Web!");
throw "Missing web assembly";
}
*/
}
};
loader.register_task(loader.Stage.INITIALIZING, {
name: "secure tester",
function: async () => {
/* we need https or localhost to use some things like the storage API */
if(typeof isSecureContext === "undefined")
(<any>window)["isSecureContext"] = location.protocol !== 'https:' || location.hostname === 'localhost';
2019-08-30 21:06:39 +00:00
if(!isSecureContext) {
loader.critical_error("TeaWeb cant run on unsecured sides.", "App requires to be loaded via HTTPS!");
throw "App requires a secure context!"
}
},
priority: 20
});
loader.register_task(loader.Stage.INITIALIZING, {
name: "webassembly tester",
function: loader_webassembly.test_webassembly,
priority: 20
});
loader.register_task(loader.Stage.JAVASCRIPT, {
name: "scripts",
2019-08-30 21:06:39 +00:00
function: loader_javascript.load_scripts,
priority: 10
});
loader.register_task(loader.Stage.TEMPLATES, {
name: "templates",
function: async taskId => {
2020-03-30 23:27:59 +00:00
await loader.templates.load_multiple([
2020-02-22 13:30:17 +00:00
"templates.html",
2020-03-27 15:15:15 +00:00
"templates/modal/musicmanage.html",
"templates/modal/newcomer.html",
2020-03-30 23:27:59 +00:00
], {
2020-09-30 20:51:04 +00:00
cache_tag: getCacheTag(),
2020-03-30 23:27:59 +00:00
max_parallel_requests: -1
}, LoaderTaskCallback(taskId));
2020-02-22 13:30:17 +00:00
},
2019-08-30 21:06:39 +00:00
priority: 10
});
2019-08-31 16:31:01 +00:00
loader.register_task(loader.Stage.SETUP, {
name: "page setup",
function: async () => {
const body = document.body;
2020-10-05 10:50:50 +00:00
2019-08-31 16:31:01 +00:00
/* template containers */
{
const container = document.createElement("div");
container.setAttribute('id', "templates");
body.append(container);
}
2020-10-05 10:50:50 +00:00
2019-08-31 16:31:01 +00:00
/* sounds container */
{
const container = document.createElement("div");
container.setAttribute('id', "sounds");
body.append(container);
}
},
priority: 10
});
2019-09-18 23:25:57 +00:00
/* test if we're getting loaded within a TeaClient preview window */
loader.register_task(loader.Stage.SETUP, {
name: "TeaClient tester",
function: async () => {
if(typeof __teaclient_preview_notice !== "undefined" && typeof __teaclient_preview_error !== "undefined") {
loader.critical_error("Why you're opening TeaWeb within the TeaSpeak client?!");
throw "we're already a TeaClient!";
}
},
priority: 100
});
export default class implements ApplicationLoader {
execute() {
loader.execute_managed(true);
2020-03-30 11:44:18 +00:00
}
2019-08-30 21:06:39 +00:00
}