diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-05 19:08:27 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-05 19:08:27 +0200 |
commit | c868daaa200e8f3be183f0ecd14046d2af615153 (patch) | |
tree | b59778d53f751bb8cdc5839c28fe0e4185580f95 /web/client.js | |
parent | ede05534efb0e4c373e661832de1a146482e1b3a (diff) | |
download | aconf-c868daaa200e8f3be183f0ecd14046d2af615153.tar.bz2 aconf-c868daaa200e8f3be183f0ecd14046d2af615153.tar.xz |
web client: properly handle required conditional fields
Diffstat (limited to 'web/client.js')
-rw-r--r-- | web/client.js | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/web/client.js b/web/client.js index aa681a8..9bc6329 100644 --- a/web/client.js +++ b/web/client.js @@ -82,6 +82,12 @@ $(function() { _.contains(["collection", "model"], meta.type); } + function match(data, filter) { + return _.every(_.map(filter, function(values, key) { + return _.contains(values, data[key]); + })); + } + var txnMgr = (function(token, saveRequired) { var txn, changed, invalid; @@ -256,7 +262,10 @@ $(function() { mpath, field.name ); if (field.required && - !field.condition && + match( + data.data, + field.condition + ) && !(mmpath in invalid) && data.get( field.name @@ -677,19 +686,21 @@ $(function() { var validate = false; function change() { var f = self.fields[field.name]; - var visible = _.every(_.map( - field.condition, - function(values, key) { - return _.contains( - values, - self.fields[key].widget.get() - ); - } - )); - if (visible) { + + if (match( + _.object(_.map( + self.fields, + function(field, name) { + return [name, field.widget.get()]; + } + )), + field.condition) + ) { + if (validate) f.widget.validate(); f.el.show(); } + else f.el.hide(); } change(); |