diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-09-16 15:49:56 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-09-16 15:49:56 +0300 |
commit | db136cebdda6f853fdc08a3b4beaeef310a11a22 (patch) | |
tree | 8f4e4d831b5f885c7a08f82cd8455cdd89d586a1 /web | |
parent | f5d7f3107b446b8169e61a14cb1c584af3bed7dd (diff) | |
download | aconf-db136cebdda6f853fdc08a3b4beaeef310a11a22.tar.bz2 aconf-db136cebdda6f853fdc08a3b4beaeef310a11a22.tar.xz |
web client: redirect to parent if object does not exist
current object may disappear when reverting the transaction
Diffstat (limited to 'web')
-rw-r--r-- | web/client.js | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/web/client.js b/web/client.js index fbb2cd8..fc352c7 100644 --- a/web/client.js +++ b/web/client.js @@ -41,12 +41,20 @@ $(function() { return res; } - function join(path, name) { + function join() { + var arg = _.toArray(arguments); + if (arg.length == 1) return arg[0]; + + var path = arg.shift(); + var name = arg.shift(); + if (_.isString(name)) { name = name.replace(/([\\\/])/g, "\\$1"); if (!isNaN(Number(name))) name = "\\" + name; } - return (path == "/" ? "" : path) + "/" + name; + arg.unshift((path == "/" ? "" : path) + "/" + name); + + return join.apply(undefined, arg); } function isRealSubordinate(p1, p2) { @@ -689,12 +697,17 @@ $(function() { } function fetchAndRender(path, target, level) { + var def = $.Deferred(); txnMgr.query(path).done(function(data) { renderObject(path, data, target, level); - }); + def.resolve(); + }).fail(function() { def.reject(); }); + return def; } + function redirect(path) { $.bbq.pushState("#" + path); } + function render() { var path = $.param.fragment(); @@ -742,7 +755,13 @@ $(function() { renderMenu(tabs, "/" + comps[0], comps[1], true) .done(function(first) { - fetchAndRender(topLevel ? join(path, first) : path); + fetchAndRender( + topLevel ? join(path, first) : path + ).fail(function() { + comps.pop(); + comps.unshift("/"); + redirect(join.apply(undefined, comps)); + }); }) .fail(function(data) { if (topLevel) renderObject(path, data); @@ -778,7 +797,7 @@ $(function() { $("#content").empty(); $(window).bind("hashchange", render); - $.bbq.pushState("#/"); + redirect("/"); }).fail(function() { statusBar.setError("Login failed", "login"); |