summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-11 16:44:01 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-11 16:44:01 +0200
commit6439c5d52ae5771341902bcf28b7e06af94d5389 (patch)
treed75afaa2ef11b743a46617b5c22d611d68972650
parent97703f26017aff4dcd3435fdc612719b040278c6 (diff)
downloadaconf-6439c5d52ae5771341902bcf28b7e06af94d5389.tar.bz2
aconf-6439c5d52ae5771341902bcf28b7e06af94d5389.tar.xz
web client: postpone validation until request completes
-rw-r--r--web/client.js51
1 files changed, 29 insertions, 22 deletions
diff --git a/web/client.js b/web/client.js
index 3497039..b3261cb 100644
--- a/web/client.js
+++ b/web/client.js
@@ -513,7 +513,8 @@ $(function() {
this.makeEl();
var self = this;
- this.request = this.requestData(value, meta)
+
+ var request = this.requestData(value, meta)
.done(function(value, meta) {
self.render(value, meta);
self.setStatus(status);
@@ -534,8 +535,14 @@ $(function() {
this.wrapped.append(link);
}
+ function validate() {
+ request.done(function(value) {
+ self.validate(value);
+ });
+ }
+
this.wrapped.on("start", function(event) {
- if (data.status(name) == "invalid") self.validate();
+ if (data.status(name) == "invalid") validate();
else self.setVisible();
event.stopPropagation();
});
@@ -543,7 +550,7 @@ $(function() {
this.wrapped.on("updated", function(event, field) {
if (!field ||
(meta.condition && field in meta.condition))
- self.validate();
+ validate();
event.stopPropagation();
});
@@ -573,7 +580,7 @@ $(function() {
this.wrapped.trigger("setVisible", [this.visible]);
},
- validate: function() { this.setVisible(); }
+ validate: function(value) { this.setVisible(); }
};
@@ -596,7 +603,7 @@ $(function() {
);
if (this.editable)
- this.field.change(_.bind(this.validate, this));
+ this.field.change(_.bind(this.validateChange, this));
return el;
},
@@ -624,10 +631,13 @@ $(function() {
return td;
},
- validate: function() {
- this.super(Field, "validate");
+ validate: function(value) {
+ this.super(Field, "validate", value);
if (!this.visible || !this.editable) return;
-
+ this.validateChange();
+ },
+
+ validateChange: function() {
this.msg.text("[checking]");
statusBar.setError("Validating changes", "validate");
@@ -830,22 +840,19 @@ $(function() {
wrap: function() { return this.el; },
- validate: function() {
- this.super(Inline, "validate");
+ validate: function(data) {
+ this.super(Inline, "validate", data);
- var self = this;
- this.request.done(function(data, meta) {
- if (self.data.match(self.meta.condition)) {
- var valid = data.validate();
- self.setStatus(data.status());
- statusBar.validationReady(valid);
- }
+ if (this.data.match(this.meta.condition)) {
+ var valid = data.validate();
+ this.setStatus(data.status());
+ statusBar.validationReady(valid);
+ }
- if (self.fields)
- _.each(self.fields, function(field) {
- field.trigger("updated");
- });
- });
+ if (this.fields)
+ _.each(this.fields, function(field) {
+ field.trigger("updated");
+ });
}
});