X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=modules%2Fluci-base%2Fhtdocs%2Fluci-static%2Fresources%2Fcbi.js;h=b819230cf3af0d96accfb710ead029d7e9ced59f;hb=efb7e5f365da3e007b603055f2326a75115e5a92;hp=0ca7e264a7172f6d3aa4ba1c8672ecac9a0fe65a;hpb=859bac61fccc3ae66b542c592115e0f0bddc892b;p=project%2Fluci.git diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 0ca7e264a..b819230cf 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -118,6 +118,50 @@ var cbi_validators = { return false; }, + 'ipmask': function() + { + return cbi_validators.ipmask4.apply(this) || + cbi_validators.ipmask6.apply(this); + }, + + 'ipmask4': function() + { + var ip = this, mask = 32; + + if (ip.match(/^(\S+)\/(\S+)$/)) + { + ip = RegExp.$1; + mask = RegExp.$2; + } + + if (!isNaN(mask) && (mask < 0 || mask > 32)) + return false; + + if (isNaN(mask) && !cbi_validators.ip4addr.apply(mask)) + return false; + + return cbi_validators.ip4addr.apply(ip); + }, + + 'ipmask6': function() + { + var ip = this, mask = 128; + + if (ip.match(/^(\S+)\/(\S+)$/)) + { + ip = RegExp.$1; + mask = RegExp.$2; + } + + if (!isNaN(mask) && (mask < 0 || mask > 128)) + return false; + + if (isNaN(mask) && !cbi_validators.ip6addr.apply(mask)) + return false; + + return cbi_validators.ip6addr.apply(ip); + }, + 'port': function() { var p = Int(this); @@ -437,8 +481,9 @@ function cbi_d_check(deps) { istat = (istat && cbi_d_checkvalue(j, deps[i][j])) } } - if (istat) { - return !reverse; + + if (istat ^ reverse) { + return true; } } return def; @@ -604,9 +649,6 @@ function cbi_combobox(id, values, def, man, focus) { var dt = obj.getAttribute('cbi_datatype'); var op = obj.getAttribute('cbi_optional'); - if (dt) - cbi_validate_field(sel, op == 'true', dt); - if (!values[obj.value]) { if (obj.value == "") { var optdef = document.createElement("option"); @@ -641,6 +683,9 @@ function cbi_combobox(id, values, def, man, focus) { obj.style.display = "none"; + if (dt) + cbi_validate_field(sel, op == 'true', dt); + cbi_bind(sel, "change", function() { if (sel.selectedIndex == sel.options.length - 1) { obj.style.display = "inline"; @@ -683,7 +728,7 @@ function cbi_filebrowser(id, defpath) { browser.focus(); } -function cbi_browser_init(id, defpath) +function cbi_browser_init(id, resource, defpath) { function cbi_browser_btnclick(e) { cbi_filebrowser(id, defpath); @@ -694,7 +739,7 @@ function cbi_browser_init(id, defpath) var btn = document.createElement('img'); btn.className = 'cbi-image-button'; - btn.src = cbi_strings.path.resource + '/cbi/folder.gif'; + btn.src = (resource || cbi_strings.path.resource) + '/cbi/folder.gif'; field.parentNode.insertBefore(btn, field.nextSibling); cbi_bind(btn, 'click', cbi_browser_btnclick); @@ -761,7 +806,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices) parent.appendChild(b); if (datatype == 'file') { - cbi_browser_init(t.id, parent.getAttribute('data-browser-path')); + cbi_browser_init(t.id, null, parent.getAttribute('data-browser-path')); } parent.appendChild(document.createElement('br'));