luci-base: form.js: add a new "contains" dependency mode
By tagging option dependencies with `!contains`, dependencies are
considered satisfied when the value is contained in the value of
a related field, instead of being equal to it.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 601c4ee01e
)
This commit is contained in:
parent
80dcda8a29
commit
2f219f85fc
1 changed files with 26 additions and 4 deletions
|
@ -403,11 +403,12 @@ var CBIMap = CBINode.extend({
|
|||
|
||||
for (var i = 0; i < depends.length; i++) {
|
||||
var istat = true,
|
||||
reverse = false;
|
||||
reverse = depends[i]['!reverse'],
|
||||
contains = depends[i]['!contains'];
|
||||
|
||||
for (var dep in depends[i]) {
|
||||
if (dep == '!reverse') {
|
||||
reverse = true;
|
||||
if (dep == '!reverse' || dep == '!contains') {
|
||||
continue;
|
||||
}
|
||||
else if (dep == '!default') {
|
||||
def = true;
|
||||
|
@ -417,7 +418,11 @@ var CBIMap = CBINode.extend({
|
|||
var res = this.lookupOption(dep, section_id, config_name),
|
||||
val = (res && res[0].isActive(res[1])) ? res[0].formvalue(res[1]) : null;
|
||||
|
||||
istat = (istat && isEqual(val, depends[i][dep]));
|
||||
var equal = contains
|
||||
? isContained(val, depends[i][dep])
|
||||
: isEqual(val, depends[i][dep]);
|
||||
|
||||
istat = (istat && equal);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -633,6 +638,23 @@ var isEqual = function(x, y) {
|
|||
return true;
|
||||
};
|
||||
|
||||
var isContained = function(x, y) {
|
||||
if (Array.isArray(x)) {
|
||||
for (var i = 0; i < x.length; i++)
|
||||
if (x[i] == y)
|
||||
return true;
|
||||
}
|
||||
else if (L.isObject(x)) {
|
||||
if (x.hasOwnProperty(y) && x[y] != null)
|
||||
return true;
|
||||
}
|
||||
else if (typeof(x) == 'string') {
|
||||
return (x.indexOf(y) > -1);
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
var CBIAbstractValue = CBINode.extend({
|
||||
__init__: function(map, section, option /*, ... */) {
|
||||
this.super('__init__', this.varargs(arguments, 3));
|
||||
|
|
Loading…
Reference in a new issue