A Sample PHP Project for the tts_framework.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
tts_project/public/assets/mockup/js/router_loader.js

188 lines
5.8 KiB

/* Was this Asset loaded yet, and did the PHP Footer file find this Asset */
function doesAssetExists(filename) {
let dfd = new tts.DeferredPromise();
if ( hasLoaded(filename) === true ) {
dfd.resolve("loaded");
return dfd;
}
var exists = false;
for (i = 0; i < assets_files.length; i++) {
if (filename == assets_files[i].filename) {
debug_print('Loading: ' + filename)
dfd.resolve(assets_files[i].ts);
include_once_files.push(filename);
exists = true;
break;
}
}
if (exists === false) {
dfd.reject("skipped");
}
return dfd;
}
/**
* @todo Finsh this FN
*/
/* Helper method to apply CSS dynamicly */
function apply_css(href, version) {
var dfd_css = new tts.DeferredPromise();
tts.getAsset({name: href, path: ajax_folder, ts: version}).then(val=>{
dfd_css.resolve("Loaded CSS");
}).catch(function (err) {
dfd_css.reject(err);
});
return dfd_css;
}
/* Run Main method on Class File */
function do_run_main(obj, req) {
var dfd_run_main = new tts.DeferredPromise();
if (obj['Main']) {
tts.when([obj['Main']()]).then(function () {
debug_print(obj.constructor.name + ' Main complete');
dfd_run_main.resolve("Main_ajax_complete");
});
} else {
debug_print(obj.constructor.name + " MAIN FN not found!");
dfd_run_main.reject('Main FN not found!');
}
return dfd_run_main;
}
/* This will Run JS code for Tabs! */
function do_run(obj, req) {
var dfd_run = new tts.DeferredPromise();
if (obj[req.params.tab]) {
tts.when([obj[req.params.tab]()]).then(function () {
debug_print(obj.constructor.name + ' ' + req.params.tab + ' complete');
dfd_run.resolve("fn_ajax_complete");
});
} else if ( is_404(req.params.tab) ) {
console.log(obj.constructor.name + " " + req.params.tab + " tab FN not found!");
do_404_page();
dfd_run.reject('FN not found!');
} else {
dfd_run.resolve("empty_page"); /* Known empty page */
}
return dfd_run;
}
/* Just checks if file has been loaded once yet */
var include_once_files = [];
function hasLoaded(file) {
if (include_once_files.indexOf(file) === -1) {
return false;
} else {
return true;
}
}
/* JS Loader */
function loadJS(scriptFile, version, obj, req, fn) {
var method_fn = window[fn];
var dfd_loadjs = new tts.DeferredPromise();
tts.getAsset({name: scriptFile + version, path: ajax_folder, ts: version}).then(val=>{
tts.when([method_fn(obj, req)]).then(function() {
dfd_loadjs.resolve("js_complete");
}).catch(function (exception) {
method_fn(obj, req);
dfd_loadjs.reject('Something went wrong');
console.warn("Something went wrong: " + exception);
});
return dfd_loadjs;
});
}
/* Does Class StartUp, CSS, and JS - After Main JS has completed loading... */
function do_other_FN(obj, req) {
var className = obj.constructor.name;
if (obj['StartUp']) {
obj['StartUp']();
}
var Script_File = className + "-" + req.params.tab + ".js";
var CSS_File = className + "-" + req.params.tab + ".css";
var MainCSS_File = className + "-Main.css";
var dfdScript = doesAssetExists(Script_File);
dfdScript.then(function (versionNumber) {
if (versionNumber === 'loaded') {
do_run(obj, req);
} else {
loadJS(Script_File, versionNumber, obj, req, 'do_run');
}
}).catch(function (err) {
do_run(obj, req);
});
var Main_dfd_CSS = doesAssetExists(MainCSS_File);
Main_dfd_CSS.then(function (versionNumber) {
if (versionNumber !== 'loaded') {
var applied_main_css = apply_css(MainCSS_File, versionNumber);
tts.when([applied_main_css]).then(function() {
Main_dfd_CSS.resolve("Added main css");
});
}
}).catch(function (err) {
Main_dfd_CSS.reject(err);
});
var dfdCSS = doesAssetExists(CSS_File);
dfdCSS.then(function (versionNumber) {
if (versionNumber !== 'loaded') {
var applied_css = apply_css(CSS_File, versionNumber);
tts.when([applied_main_css]).then(function() {
dfdCSS.resolve("Added CSS");
});
}
}).catch(function (err) {
dfdCSS.reject(err);
});
}
/* This is the core loader for Tabs and Main Route */
var cloneObject = {};
function do_tabs(className, req) {
var myclass = window[className];
var obj = new myclass(req);
cloneObject = obj;
var MainScript_File = className + "-Main.js";
var Main_dfd_Script = doesAssetExists(MainScript_File);
Main_dfd_Script.then(function (versionNumber) {
if (versionNumber === 'loaded') {
var dfd_main_code = do_run_main(obj, req);
tts.when([dfd_main_code]).then(function () { do_other_FN(obj, req); });
} else {
var dfd_main_code = loadJS(MainScript_File, versionNumber, obj, req, 'do_run_main');
tts.when([dfd_main_code]).then(function () { do_other_FN(obj, req); });
}
}).catch(function (err) {
var dfd_main_code = do_run_main(obj, req);
tts.when([dfd_main_code]).then(function () { do_other_FN(obj, req); });
});
return true;
}
/* Load 404 JS for doing 404 Page */
function do_404_page() {
var ErrorScript_File = "PageNotFound-Main.js";
var err_page = new PageNotFound(false);
if ( hasLoaded(ErrorScript_File) === true ) {
err_page.Main();
} else {
tts.getAsset({name: ErrorScript_File, path: ajax_folder}).then(val=>{
include_once_files.push(ErrorScript_File);
err_page.Main();
});
}
}
/* Is 404 on, if so does Tab Method/File exists, if not was an exception made */
function is_404(tab_name) {
if (do_404_page_on_bad_tabs === false) return false; /* Is 404 off?? */
for (i = 0; i < empty_tab_pages.length; i++) {
if (empty_tab_pages[i] == tab_name) {
return false; /* Found allowed empty tab page */
}
}
return true; /* Unable to find tab page hash in allowed list */
}