summaryrefslogtreecommitdiffstats
path: root/web/client.js
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-05 19:08:27 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-05 19:08:27 +0200
commitc868daaa200e8f3be183f0ecd14046d2af615153 (patch)
treeb59778d53f751bb8cdc5839c28fe0e4185580f95 /web/client.js
parentede05534efb0e4c373e661832de1a146482e1b3a (diff)
downloadaconf-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.js33
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();