diff --git a/public/assets/mockup/ajax/PageNotFound-Main.js b/public/assets/mockup/ajax/PageNotFound-Main.js new file mode 100644 index 0000000..6528e70 --- /dev/null +++ b/public/assets/mockup/ajax/PageNotFound-Main.js @@ -0,0 +1,13 @@ +PageNotFound.prototype.Main = function () { + $('#404-modal').modal('setting', 'closable', false).modal('show'); +}; + +function gotoDash() { + $('#404-modal').modal('hide'); + router.navigate('Testing/Bob'); +} + +function goBack() { + $('#404-modal').modal('hide'); + history.back(); +} \ No newline at end of file diff --git a/public/assets/mockup/ajax/testing.js b/public/assets/mockup/ajax/Testing-Bob.js similarity index 55% rename from public/assets/mockup/ajax/testing.js rename to public/assets/mockup/ajax/Testing-Bob.js index 2f6ba81..ec7f4d3 100644 --- a/public/assets/mockup/ajax/testing.js +++ b/public/assets/mockup/ajax/Testing-Bob.js @@ -1,3 +1,11 @@ +Testing.prototype.Bob = function() { + let dp = new tts.DeferredPromise(); + tts.when([this.loadLeft(), this.loadRight()]).then(val=>{ + dp.resolve("All Done"); + }); + return dp; +}; + Testing.prototype.loadLeft = function() { let dp = new tts.DeferredPromise(); console.log("Left"); @@ -7,7 +15,7 @@ Testing.prototype.loadLeft = function() { Testing.prototype.loadRight = function() { let dp = new tts.DeferredPromise(); dp.then(val=>{ - alert(this.name); + alert(this.tab); }); dp.resolve(); return dp; diff --git a/public/assets/mockup/ajax/Testing-Main.js b/public/assets/mockup/ajax/Testing-Main.js new file mode 100644 index 0000000..8888f06 --- /dev/null +++ b/public/assets/mockup/ajax/Testing-Main.js @@ -0,0 +1,6 @@ +Testing.prototype.Main = function() { + let dp = new tts.DeferredPromise(); + alert("HI"); + dp.resolve("All Done"); + return dp; +}; diff --git a/public/assets/mockup/js/router_loader.js b/public/assets/mockup/js/router_loader.js new file mode 100644 index 0000000..1c3982e --- /dev/null +++ b/public/assets/mockup/js/router_loader.js @@ -0,0 +1,188 @@ +/* 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 */ +} \ No newline at end of file diff --git a/public/assets/mockup/js/routes.js b/public/assets/mockup/js/routes.js index a9818f7..9aa9c7b 100644 --- a/public/assets/mockup/js/routes.js +++ b/public/assets/mockup/js/routes.js @@ -1,21 +1,32 @@ function Testing(req) { - this.name = req.params.name; - tts.when([this.loadLeft(), this.loadRight()]).then(val=>{ - alert("All DOne"); - }); + this.tab = req.params.tab; } +function PageNotFound(req) {} + /* Redirect user if no hash tag was found */ if (location.hash == '') { location.hash = '#Hello'; } tts.DoCacheAssets = false; -tts.Router.get('Testing/:name', function(req) { - tts.getAsset({name: 'testing.js', path: ajax_folder}).then(val=>{ - var obj = new Testing(req); - }); +/* + * @todo add Middle-ware showLoader, userAuth + */ +tts.Router.get('Testing/:tab', function(req) { + do_tabs('Testing', req); +}); + +var empty_tab_pages = ['Dashboard', 'Reports', 'Maintenance', 'Tenant', 'Notes', 'Activity', 'NewProperty']; +var do_404_page_on_bad_tabs = true; + +/* Keep this as the very last Route, for 404 to work right! +tts.Router.get('*', function (req, e) { + if (!e.parent()) { + do_tabs('PageNotFound', req); // 404 Page on NON: [Tenants/Properties] hash routes + } }); +*/ tts(function() { /* diff --git a/src/mockup/views/default/app/footer.php b/src/mockup/views/default/app/footer.php index efe5bdd..fe39f3b 100644 --- a/src/mockup/views/default/app/footer.php +++ b/src/mockup/views/default/app/footer.php @@ -6,6 +6,7 @@ const JS_CDN_FILES = [ ]; const JS_FILES = [ + "js/router_loader.js" => [], "js/routes.js" => [], ];