diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-01-30 17:10:27 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-01-30 17:24:43 +0200 |
commit | d13d53842d9ed9d28bbf891871697ab6c96674c3 (patch) | |
tree | a8ed1b222ea00cb8f27dad52c99fe5104fae4bd5 | |
parent | c0be1f26ec77439770ded5482142f1e3237eb4e6 (diff) | |
download | aconf-d13d53842d9ed9d28bbf891871697ab6c96674c3.tar.bz2 aconf-d13d53842d9ed9d28bbf891871697ab6c96674c3.tar.xz |
web client: improved tabbing
Enable tabs also when module's top-level object is not a model. Tabs
will appear when the user navigates to a model object.
Enable tabs also when the model has attributes. The respective fields
are put onto the 'General' tab.
-rw-r--r-- | web/client.js | 81 |
1 files changed, 54 insertions, 27 deletions
diff --git a/web/client.js b/web/client.js index 5751edc..ce8d45b 100644 --- a/web/client.js +++ b/web/client.js @@ -1271,35 +1271,52 @@ $(function() { var def = $.Deferred(); txnMgr.query(path).done(function(data) { - if (data.meta.type != "model" || _.filter( - data.meta.fields, function(field) { - return !isTreeNode(field); - } - ).length) { + if (data.meta.type != "model") { def.reject(data); return; } - var first; + var tnFields = []; + var extraFields = false; _.each(data.meta.fields, function(field) { - if (!data.data[field.name]) return; - if (!first) { - first = field.name; - if (!current && selectFirst) current = first; - } + if (!field.visible) return; + + if (!isTreeNode(field)) extraFields = true; + else if (data.data[field.name]) + tnFields.push(field); + }); + + if (!tnFields.length) { + def.reject(data); + return; + } - var el = $("<li>"); - var link = objectRef(data.get(field.name)); - link.text(field["ui-name"]); - el.prop("class", data.status(field.name)); - if (field.name == current) - el.addClass("current"); - el.append(link); + function addItem(path, ui_name, status, current) { + var el = $("<li>").html(objectRef(path).text(ui_name)); + el.prop("class", status); + if (current) el.addClass("current"); target.append(el); + } + + if (extraFields) { + addItem(path, "General", null, !current); + selectFirst = false; + } + + _.each(tnFields, function(field, i) { + addItem( + data.get(field.name), + field["ui-name"], + data.status(field.name), + current == field.name || ( + !current && !i && selectFirst + ) + ); + field.visible = false; }); - def.resolve(first); + def.resolve(extraFields ? data : tnFields[0].name); }); return def; @@ -1314,15 +1331,25 @@ $(function() { var tabs = $("#tabs").empty(); if (path == "/") return; - var topLevel = comps.length == 1; - renderMenu(tabs, "/" + comps[0], comps[1], true) - .done(function(first) { - renderObject(topLevel ? join(path, first) : path); - }) - .fail(function(data) { - renderObject(path, topLevel ? data : null); - }); + function renderTabs(p) { + p = join(p, comps.shift()); + renderMenu(tabs, p, comps[0], true) + .done(function(data) { + var tabLevel = !comps.length; + renderObject( + ( + tabLevel && _.isString(data) + ) ? join(p, data) : path, + tabLevel && _.isObject(data) ? data : null + ); + }) + .fail(function(data) { + if (comps.length) renderTabs(p); + else renderObject(p, data); + }); + } + renderTabs("/"); }); } |