From fbece2f1513387ce19476a06d72e9e13a5d94b07 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Thu, 14 Nov 2013 09:23:12 +0200 Subject: web client: allow conditional inline widgets --- web/client.js | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'web') diff --git a/web/client.js b/web/client.js index 3ed4fe2..2ae17ec 100644 --- a/web/client.js +++ b/web/client.js @@ -162,21 +162,21 @@ $(function() { var tn = _.isObject(newValue); var npv = tn ? mpath : newValue; + function ignore(path) { + _.each(_.keys(invalid), function(p) { + if (isSubordinate(p, path)) + delete invalid[p]; + }); + } + function resolve() { if (mpath in invalid && invalid[mpath][1] == def) { var del = invalid[mpath][0] == null; - delete invalid[mpath]; - - if (del) - _.each( - _.keys(invalid), - function(p) { - if (isSubordinate(p, mpath, true)) - delete invalid[p]; - } - ); + + delete invalid[mpath]; + if (del) ignore(mpath); } def.resolve(isValid()); @@ -237,9 +237,9 @@ $(function() { field.condition[ name ] != newValue) - delete invalid[ + ignore( join(path, field.name) - ]; + ); } ) @@ -651,9 +651,9 @@ $(function() { var self = this; if (data.meta.type == "model") { - var flds = {}; + this.fields = {}; _.each(data.meta.fields, function(field) { - flds[field.name] = self.renderField( + self.fields[field.name] = self.renderField( field.name, field, field["ui-name"], @@ -666,11 +666,13 @@ $(function() { if (field.condition) { var validate = false; function change() { - var f = flds[field.name]; + var f = self.fields[field.name]; var visible = _.every(_.map( field.condition, function(value, key) { - return flds[key].widget.get() == value; + return self.fields[ + key + ].widget.get() == value; } )); if (visible) { @@ -683,7 +685,7 @@ $(function() { validate = true; _.each(field.condition, function(value, key) { - flds[key].widget.onChange(change); + self.fields[key].widget.onChange(change); }); } }); @@ -730,6 +732,13 @@ $(function() { Inline.wrap = function() { return this.el; }; + Inline.validate = function() { + if (this.fields) + _.each(this.fields, function(field) { + field.widget.validate(); + }); + }; + var Horizontal = Object.create(Inline); -- cgit v1.2.3