X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci2%2Fui.git;a=blobdiff_plain;f=luci2%2Fhtdocs%2Fluci2%2Fluci2.js;h=45584e70485269a0e5a09b3897b6aac3f836d22f;hp=220e040273f448db3aa90835987e0788360e83d2;hb=4bb42cc51fbf15038be9548c002c3a3d6b2a296f;hpb=d6ff503b64b24f2028ebec032945df24eda62074 diff --git a/luci2/htdocs/luci2/luci2.js b/luci2/htdocs/luci2/luci2.js index 220e040..45584e7 100644 --- a/luci2/htdocs/luci2/luci2.js +++ b/luci2/htdocs/luci2/luci2.js @@ -4966,6 +4966,7 @@ function LuCI2() this.instance = { }; this.dependencies = [ ]; this.rdependency = { }; + this.events = { }; this.options = _luci2.defaults(options, { placeholder: '', @@ -5021,6 +5022,11 @@ function LuCI2() return i.top; }, + active: function(sid) + { + return (this.instance[sid] && !this.instance[sid].disabled); + }, + ucipath: function(sid) { return { @@ -5160,14 +5166,30 @@ function LuCI2() } if (rv) + { for (var field in d.self.rdependency) d.self.rdependency[field].toggle(d.sid); + d.self.section.tabtoggle(d.sid); + } + return rv; }, validator: function(sid, elem, multi) { + var evdata = { + self: this, + sid: sid, + elem: elem, + multi: multi, + inst: this.instance[sid], + opt: this.options.optional + }; + + for (var evname in this.events) + elem.on(evname, evdata, this.events[evname]); + if (typeof(this.options.datatype) == 'undefined' && $.isEmptyObject(this.rdependency)) return elem; @@ -5175,13 +5197,13 @@ function LuCI2() if (typeof(this.options.datatype) == 'string') { try { - vstack = _luci2.cbi.validation.compile(this.options.datatype); + evdata.vstack = _luci2.cbi.validation.compile(this.options.datatype); } catch(e) { }; } else if (typeof(this.options.datatype) == 'function') { var vfunc = this.options.datatype; - vstack = [ function(elem) { + evdata.vstack = [ function(elem) { var rv = vfunc(this, elem); if (rv !== true) validation.message = rv; @@ -5189,16 +5211,6 @@ function LuCI2() }, [ elem ] ]; } - var evdata = { - self: this, - sid: sid, - elem: elem, - multi: multi, - vstack: vstack, - inst: this.instance[sid], - opt: this.options.optional - }; - if (elem.prop('tagName') == 'SELECT') { elem.change(evdata, this._ev_validate); @@ -5228,7 +5240,7 @@ function LuCI2() return (i.disabled || i.error.text() == ''); }, - depends: function(d, v) + depends: function(d, v, add) { var dep; @@ -5273,7 +5285,11 @@ function LuCI2() if ($.isEmptyObject(dep)) return this; - this.dependencies.push(dep); + if (!add || !this.dependencies.length) + this.dependencies.push(dep); + else + for (var i = 0; i < this.dependencies.length; i++) + $.extend(this.dependencies[i], dep); return this; }, @@ -5303,7 +5319,7 @@ function LuCI2() break; } } - else if (typeof(cmp) == 'string') + else if (typeof(cmp) == 'string' || typeof(cmp) == 'number') { if (val != cmp) { @@ -5348,6 +5364,12 @@ function LuCI2() } return false; + }, + + on: function(evname, evfunc) + { + this.events[evname] = evfunc; + return this; } }); @@ -5467,7 +5489,7 @@ function LuCI2() var s = $('