TTS Framework - JavaScript assets.
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_js/old_router/router.js

301 lines
12 KiB

/* Robs Router Loader */
tts.RouteObject = {}; /* This is the main Object to use for AJAX Pages */
var include_once_files = []; /* Was this Asset loaded yet, and did the PHP Footer file find this Asset */
tts.AddRouterCachedFile = function(filename) {
include_once_files.push(filename);
};
function doesAssetExists(filename) {
// console.log(filename);
return new Promise((resolve, reject) => {
if (hasLoaded(filename) === false) {
var exists = false;
for (var i = 0; i < assets_files.length; i++) {
if (filename == assets_files[i].filename) {
tts.logger('Loading: ' + filename)
include_once_files.push(filename);
exists = true;
break;
}
}
if (exists === false) {
reject("skipped: " + filename);
} else {
resolve(assets_files[i].ts);
}
} else {
resolve("loaded");
}
});
}
function getClassName(obj) {
if (typeof obj.constructor.name === "undefined") {
return obj.constructor.toString().match(/^function\s(.+)\(/)[1];
} else {
return obj.constructor.name;
}
}
function hasLoaded(file) {
return tts.inArray(file, include_once_files);
} /* Just checks if file has been loaded once yet */
function apply_css(css_file, version) {
return new Promise((resolve, reject) => {
tts.getAsset({name: css_file, path: AJAX_Folder, version: version}).then(function () {
resolve();
}).catch(function () {
reject();
});
});
}
function hasPromise(obj, fn, text) { // tts.logger("promise"+fn, "trace");
if (typeof text === "undefined") {
text = "";
}
return new Promise((resolve, reject) => {
var usePromise = tts.getValue(obj.Promise, true);
if (typeof fn === "undefined" && typeof fn !== "function") {
reject(text + " Function does not exist");
} else {
if (usePromise === true) {
tts.logger("Promise exec of " + text);
fn().then(function (out) {
resolve(out);
}).catch(function (e) {
reject(e);
});
} else {
tts.logger("Exec of " + text);
fn();
resolve();
}
}
});
}
/* Run Main method on Class File */
function do_run_main(obj) {
var className = getClassName(obj);
return new Promise((resolve, reject) => {
hasPromise(obj, obj['Main'], className).then(function () {
resolve();
}).catch(function (e) {
reject(e);
});
});
}
;
/* This will Run JS code for Tabs! */
function do_run(obj) {
var className = getClassName(obj);
return new Promise((resolve, reject) => {
hasPromise(obj, obj[obj.tab], className + " " + obj.tab).then(function () {
resolve();
}).catch(function (e) {
reject(e);
});
});
}
;
function is_unknown(obj) {
if (is_404(obj.tab)) {
var className = getClassName(obj);
tts.logger(className + " " + obj.tab + " tab FN not found!");
do_404_page();
return true;
}
return false;
}
function loadJS(scriptFile, version, obj, fn) {
var stuff = { name: scriptFile, path: AJAX_Folder, ts: version };
// console.log(stuff);
return new Promise((resolve, reject) => {
tts.getAsset(stuff)
.then(function () {
switch (fn) {
case 'ErrorMain':
hasPromise(obj, obj.Main, "404").then(function () {
resolve();
}).catch(function () {
reject();
});
break;
case 'do_run_main':
do_run_main(obj).then(function () {
resolve("js_complete");
}).catch(function (e) {
reject(e);
});
break;
case 'do_run':
do_run(obj).then(function () {
resolve("js_complete");
}).catch(function (e) {
reject(e);
});
break;
default:
window[fn](obj).then(function () {
resolve("js_complete");
}).catch(function (e) {
reject(e);
});
break;
}
}).catch(function (exception) {
switch (fn) {
case 'ErrorMain':
tts.logger("404 Page - does not exist", "error");
break;
case 'do_run_main':
do_run_main(obj).catch(function () {
reject(e);
});
break;
case 'do_run':
do_run(obj).catch(function () {
reject(e);
});
break;
default:
window[fn](obj).catch(function () { });
break;
}
if (fn !== 'ErrorMain') {
tts.logger("Something went wrong: " + exception, "warn");
}
reject('Something went wrong');
});
});
}
tts.JS_EXT = ".js";
tts.CSS_EXT = ".css";
/* Does Class StartUp, CSS, and JS - After Main JS has completed loading... */
function do_other_FN(obj) {
return new Promise((resolve, reject) => {
var className = getClassName(obj);
var tab = tts.getValue(obj.tab, false);
hasPromise(obj, obj['StartUp'], "Start Up").catch(function () { });
if (tab === false) {
resolve();
} else {
var Script_File = className + "_" + tab + tts.JS_EXT;
var CSS_File = className + "_" + tab + tts.CSS_EXT;
var MainCSS_File = className + "_Main" + tts.CSS_EXT;
doesAssetExists(Script_File).then(function (versionNumber) {
if (versionNumber === 'loaded') {
do_run(obj).then(function (ok) {
resolve(ok);
}).catch(function (e) {
reject(e);
});
} else {
loadJS(Script_File, versionNumber, obj, 'do_run').then(function (ok) {
resolve(ok);
}).catch(function (e) {
reject(e);
});
}
}).catch(function (err) {
do_run(obj).then(function (ok) {
resolve(ok);
}).catch(function (e) {
is_unknown(obj);
reject(e);
});
});
doesAssetExists(MainCSS_File).then(function (versionNumber) {
if (versionNumber !== 'loaded') {
apply_css(MainCSS_File, versionNumber);
}
}).catch(function (e) { });
doesAssetExists(CSS_File).then(function (versionNumber) {
if (versionNumber !== 'loaded') {
apply_css(CSS_File, versionNumber);
}
}).catch(function (e) { });
}
});
}
function mainRouting(obj) {
return new Promise((resolve, reject) => {
tts.RouteObject = obj;
var className = getClassName(obj);
var MainScript_File = className + "_Main" + tts.JS_EXT;
doesAssetExists(MainScript_File).then(function (versionNumber) {
if (versionNumber === 'loaded') {
do_run_main(obj).then(function () {
do_other_FN(obj).then(function (ok) {
resolve(ok);
}).catch(function (e) {
reject(e);
});
}).catch(function (e) {
reject(e);
});
} else {
loadJS(MainScript_File, versionNumber, obj, 'do_run_main').then(function () {
do_other_FN(obj).then(function (ok) {
resolve(ok);
}).catch(function (e) {
reject(e);
});
}).catch(function (e) {
reject(e);
});
}
}).catch(function (err) {
do_run_main(obj).then(function () {
do_other_FN(obj).then(function (ok) {
resolve(ok);
}).catch(function (e) {
reject(e);
});
}).catch(function (e) {
reject(e);
});
});
});
}
tts.Route = function (obj) { /* This is the core loader for Tabs and Main Route */
tts.startCodeTimer();
return new Promise((resolve, reject) => {
mainRouting(obj).then(function (r) {
tts.endCodeTimer();
$_.logger(r + " - Resolved Took " + tts.completedCodeTimer);
resolve(r);
}).catch(function (e) {
tts.endCodeTimer();
$_.logger(e + " - Rejected Took " + tts.completedCodeTimer);
reject(e);
});
});
};
/* Load 404 JS for doing 404 Page */
function do_404_page() {
var ErrorScript_File = "PageNotFound_Main" + tts.JS_EXT;
var err_page = new PageNotFound(false);
doesAssetExists(ErrorScript_File).then(function (versionNumber) {
if (versionNumber === 'loaded') {
err_page.Main();
} else {
loadJS(ErrorScript_File, versionNumber, err_page, "ErrorMain").catch(function (e) { });
}
}).catch(function (err) {
tts.logger("404 Page - does not exist", "error");
});
}
/* Is 404 on, if so does Tab Method/File exists, if not was an exception made */
tts.do_404_page_on_bad_Route = true;
tts.empty_Route_pages = [];
function is_404(tab_name) {
if (tts.do_404_page_on_bad_Route === false)
return false; /* Is 404 off?? */
for (var i = 0; i < tts.empty_Route_pages.length; i++) {
if (tts.empty_Route_pages[i] == tab_name) {
return false; /* Found allowed empty tab page */
}
}
return true; /* Unable to find tab page hash in allowed list */
}
/* End of Robs Router Loader */