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.
301 lines
12 KiB
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 */
|
|
|