summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-01-30 17:10:27 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-01-30 17:24:43 +0200
commitd13d53842d9ed9d28bbf891871697ab6c96674c3 (patch)
treea8ed1b222ea00cb8f27dad52c99fe5104fae4bd5
parentc0be1f26ec77439770ded5482142f1e3237eb4e6 (diff)
downloadaconf-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.js81
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("/");
});
}