diff options
Diffstat (limited to 'web/widget/inline.js')
-rw-r--r-- | web/widget/inline.js | 29 |
1 files changed, 18 insertions, 11 deletions
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)); } |