route validation and prevent navigation from breaking on re-cklick

This commit is contained in:
Joe
2017-02-07 21:55:04 -06:00
parent b557c002ae
commit cb3e4ca7a0
7 changed files with 68 additions and 27 deletions

View File

@@ -8,8 +8,18 @@ var ibuyproperties=(function(){
function navShow(cls,ele){
$("."+cls).addClass('hide');
$("#pnl_"+ele).removeClass('hide');
$(".topNav"+cls).removeClass('active');
$(".topNav"+ele).addClass('active');
$(".topNav"+cls).removeClass('active disabled');
$(".topNav"+cls).removeAttr('href');
$.each($(".topNav"+cls+">a"),function(pos,ele){
$(ele).attr("href", $(ele).attr("mytargeturl"));
});
$($(".topNav"+ele)[0]).addClass('active disabled');
$($(".topNav"+ele)[0]).addClass('active disabled');
$($(".topNav"+ele+">a")[0]).removeAttr('href');
}
function toggleButton(elEnable,elDisable){
@@ -38,6 +48,7 @@ $(document).ready(function(){
if (ibuyproperties.isDebugMode) {
$("body").append(ibuyproperties.templateHelper.get("debug")({}));
}
ibuyproperties.router.route();
$(window).on('hashchange', ibuyproperties.router.route);
});

View File

@@ -2,7 +2,7 @@
ibuyproperties.router=(function(){
var allRoutes=[];
function route() {
var hash = window.location.hash;
var lastLocation = null;
@@ -14,12 +14,18 @@ ibuyproperties.router=(function(){
if (lastLocation != hash) {
this.lastLocation=hash;
var routeFoundMainNav=false;
var promisesMainNav=[];
// Generic routing based on template names
$.each(ibuyproperties.templates.getType("mainPages"),function(pos,name){
var def = new $.Deferred();
promisesMainNav.push(def);
var re=new RegExp("^#" + name + "[/]*");
if (ibuyproperties.isDebugMode) { console.log("Generic Router - test ",name);}
// debugger;
if (hash.match(re)) {
routeFoundMainNav=true;
if (ibuyproperties.isDebugMode) { console.log("Generic Router - match ",name);}
if ($("#pnl_" +name).length === 0) {
$("#content").empty().append(ibuyproperties.templateHelper.get(name)({templateName:name}));
@@ -27,30 +33,40 @@ ibuyproperties.router=(function(){
ibuyproperties.navShow('mainScreen',name);
$('.in,.open').removeClass('in open');
}
def.resolve();
});
$.when.apply(undefined,promisesMainNav).then(function(){if (!routeFoundMainNav) {console.error("NO matching Navigation tab route found");}});
var promisesDyn=[];
var routeFoundDynamic=false;
// Dynamic route handling
$.each(allRoutes,function(pos,theRoute){
var def = new $.Deferred();
promisesDyn.push(def);
if (ibuyproperties.isDebugMode) { console.log("Dynamic Router - test ",hash ,theRoute);}
var re=new RegExp(theRoute.re);
if (hash.match(re)) {
routeFoundDynamic=true;
if (ibuyproperties.isDebugMode) { console.log("Dynamic Router - match ",hash,theRoute);}
theRoute.cb.call();
return false; // exit the loop
}
def.resolve();
});
$.when.apply(undefined,promisesDyn).then(function(){if (!routeFoundDynamic) {console.error("NO matching Dynamic route found");}});
}
}
function addRoute(re, callBack){
var theRoute={re:re,cb:callBack};
allRoutes.push(theRoute);
}
return {
route:route,
addRoute:addRoute
};
}());
}());