summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-09-16 15:49:56 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-09-16 15:49:56 +0300
commitdb136cebdda6f853fdc08a3b4beaeef310a11a22 (patch)
tree8f4e4d831b5f885c7a08f82cd8455cdd89d586a1 /web
parentf5d7f3107b446b8169e61a14cb1c584af3bed7dd (diff)
downloadaconf-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.js29
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");