summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--web/widget/abstract/fields.js6
-rw-r--r--web/widget/inline.js36
2 files changed, 29 insertions, 13 deletions
diff --git a/web/widget/abstract/fields.js b/web/widget/abstract/fields.js
index 689f88a..4afa0e7 100644
--- a/web/widget/abstract/fields.js
+++ b/web/widget/abstract/fields.js
@@ -48,11 +48,14 @@ define(
_.each(this.widgets, function(f1, name) {
self.setupWidget(f1, labels[name]);
+ f1.on("validated", function(event) {
+ event.stopPropagation();
+ });
+
_.each(self.widgets, function(f2) {
if (f1 != f2)
f1.on("validated", function(event) {
f2.trigger("updated", [name]);
- event.stopPropagation();
});
});
});
@@ -112,6 +115,7 @@ define(
);
this.setupWidget(widget, meta["ui-member"] + " " + name);
widget.trigger("start");
+ return widget;
},
widget: function(meta) {
diff --git a/web/widget/inline.js b/web/widget/inline.js
index 86e9128..d016088 100644
--- a/web/widget/inline.js
+++ b/web/widget/inline.js
@@ -42,22 +42,34 @@ define(
return;
}
- data.set(
- name, type.isTreeNode(meta.members) ? {} : null
- ).done(function(txnValid) {
- self.renderCollectionMember(name, meta);
- if (row) row.remove();
- button.prop("class", null);
+ function render(txnValid) {
statusBar.validationReady(txnValid);
- }).fail(function(xhr) {
- statusBar.setError(
- self.formatValidationError(xhr)
- );
- data.delete(name);
+ if (row) row.remove();
+ return self.renderCollectionMember(name, meta);
+ }
+
+ if (type.isTreeNode(meta.members))
+ data.set(name, {}).done(function(txnValid) {
+ render(txnValid);
+ button.show();
+ }).fail(function(xhr) {
+ statusBar.setError(
+ self.formatValidationError(xhr)
+ );
+ data.delete(name);
+ });
+
+ else data.set(name, null).always(function() {
+ var widget = render(false);
+ function handler(event) {
+ button.show();
+ widget.off("validated", handler);
+ }
+ widget.on("validated", handler);
});
}
- button.prop("class", "hidden");
+ button.hide();
if (meta.type == "collection") {
var field = $("<input>").attr({type: "text"})