2020-07-13 09:29:16 +00:00
import "./shared" ;
2020-04-01 13:36:37 +00:00
import * as loader from "../loader/loader" ;
2020-08-07 23:03:19 +00:00
import { ApplicationLoader , SourcePath } from "../loader/loader" ;
2020-07-13 09:29:16 +00:00
import { script_name } from "../loader/utils" ;
2020-07-20 17:08:13 +00:00
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
}
2020-07-13 09:29:16 +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 = {
2020-07-13 09:29:16 +00:00
load_scripts : async taskId = > {
loader . setCurrentTaskName ( taskId , "manifest" ) ;
2020-07-20 17:08:13 +00:00
await loadManifest ( ) ;
await loadManifestTarget ( __build . entry_chunk_name , taskId ) ;
2019-08-30 21:06:39 +00:00
}
} ;
const loader_webassembly = {
test_webassembly : async ( ) = > {
/ * W e d o n t r e q u i r e d W e b A s s e m b l y a n y m o r e f o r f u n d a m e n t a l f u n c t i o n s , o n l y f o r a u t o d e c o d i n g
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" )
2020-07-13 09:29:16 +00:00
( < 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 , {
2020-07-13 09:29:16 +00:00
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" ,
2020-07-13 09:29:16 +00:00
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
2020-07-13 09:29:16 +00:00
} , 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
} ) ;
2020-07-20 17:08:13 +00:00
export default class implements ApplicationLoader {
execute() {
2020-10-04 18:47:19 +00:00
loader . execute_managed ( true ) ;
2020-03-30 11:44:18 +00:00
}
2019-08-30 21:06:39 +00:00
}