diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-06-25 22:35:21 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-06-25 23:35:46 +0300 |
commit | 8707c1eccd1f27454ee46ebef5613579c4c3c736 (patch) | |
tree | 80d0b770ab3b09e2208524d8ea6e10f912919252 /web | |
parent | 9b1a1d67f288ef3ba01d2c6c5724d844eb67ca02 (diff) | |
download | aconf-8707c1eccd1f27454ee46ebef5613579c4c3c736.tar.bz2 aconf-8707c1eccd1f27454ee46ebef5613579c4c3c736.tar.xz |
web client: editable sets of primitive types
Diffstat (limited to 'web')
-rw-r--r-- | web/widget/abstract/base.js | 33 | ||||
-rw-r--r-- | web/widget/abstract/fields.js | 2 | ||||
-rw-r--r-- | web/widget/inline.js | 29 |
3 files changed, 38 insertions, 26 deletions
diff --git a/web/widget/abstract/base.js b/web/widget/abstract/base.js index 4b2fc37..5dd49a6 100644 --- a/web/widget/abstract/base.js +++ b/web/widget/abstract/base.js @@ -25,11 +25,28 @@ define( this.meta = meta; this.level = level; + function appendRemoveButton(el) { + if (removable) { + var link = dom.href().click(function() { + data.delete(name).done(function(txnValid) { + $("#content").trigger("reload", [txnValid]); + }) + }).text("Delete"); + el = dom.makeRow(el); + if (el.is("tr")) link = $("<td>").html(link); + el.append(link); + } + + return el; + } + var value = data.get(name); - if (!removable && (!editable || !meta.editable)) { + if (!editable || !meta.editable) { var el = this.staticRender(value, meta); if (el) { + el = appendRemoveButton(el); + _.each(["start", "updated"], function(event) { el.on(event, function(event) { event.stopPropagation(); @@ -42,21 +59,9 @@ define( this.makeEl(); this.dynamic = meta.dynamic; - - this.wrapped = this.wrap(); this.visible = true; - if (removable) { - var link = dom.href().click(function() { - data.delete(name).done(function(txnValid) { - $("#content").trigger("reload", [txnValid]); - }) - }).text("Delete"); - this.wrapped = dom.makeRow(this.wrapped); - if (this.wrapped.is("tr")) link = $("<td>").html(link); - this.wrapped.append(link); - } - + this.wrapped = appendRemoveButton(this.wrap()); this.wrapped.data("description", meta.description); this.handleResponse(this.requestData(value, meta)); diff --git a/web/widget/abstract/fields.js b/web/widget/abstract/fields.js index 7a9773f..f7fdfbe 100644 --- a/web/widget/abstract/fields.js +++ b/web/widget/abstract/fields.js @@ -111,7 +111,7 @@ define( name, meta.members, !set, - !set && _.contains(meta.removable, name) + _.contains(meta.removable, name) ); this.setupWidget( widget, set ? null : meta["ui-member"] + " " + name diff --git a/web/widget/inline.js b/web/widget/inline.js index 87e6bc7..9fd89f8 100644 --- a/web/widget/inline.js +++ b/web/widget/inline.js @@ -24,8 +24,7 @@ define( this.el.append(this.div); - if (meta.editable && - _.contains(["collection", "list"], meta.type)) { + if (meta.editable && type.isCollection(meta)) { if (!this.table) this.makeSortable(this.div); var self = this; @@ -36,8 +35,11 @@ define( function insert() { var name = getter(); + var set = meta.type == "set"; + + if (set ? _.contains(data.data, name) : + name in data.data) { - if (name in data.data) { statusBar.setError("Already exists: " + name); return; } @@ -48,8 +50,13 @@ define( return self.renderCollectionMember(name, meta); } + var task; if (type.isTreeNode(meta.members)) - data.set(name, {}).done(function(txnValid) { + task = data.set(name, {}); + else if (set) task = data.add(name); + + if (task) + task.done(function(txnValid) { render(txnValid); button.show(); }).fail(function(xhr) { @@ -71,7 +78,13 @@ define( button.hide(); - if (meta.type == "collection") { + if (meta.type == "list") { + getter = function() { + return data.data.length + 1; + }; + insert(); + } + else { var field = $("<input>").attr({type: "text"}) .change(insert); row = $("<tr>").html($("<td>").html(field)); @@ -79,12 +92,6 @@ define( self.appendRow(row); field.focus(); } - else { - getter = function() { - return data.data.length + 1; - }; - insert(); - } }); this.el.append($("<p>").html(button)); } |