treewide: switch to shared isObject(), toArray() and sortedKeys() helpers

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-07-07 20:11:35 +02:00
parent 37ca6fe6d6
commit f970c485cf
7 changed files with 56 additions and 186 deletions

View File

@ -64,22 +64,6 @@ var protocols = [
'rohc', 142, 'ROHC',
];
function toArray(x) {
if (x == null)
return [];
else if (Array.isArray(x))
return x.map(String);
else if (typeof(x) == 'object')
return [ x ];
var s = String(x).trim();
if (s == '')
return [];
return s.split(/\s+/);
}
function lookupProto(x) {
if (x == null || x == '')
return null;
@ -104,7 +88,7 @@ return L.Class.extend({
},
fmt_mac: function(x) {
var rv = E([]), l = toArray(x);
var rv = E([]), l = L.toArray(x);
if (l.length == 0)
return null;
@ -123,7 +107,7 @@ return L.Class.extend({
},
fmt_port: function(x, d) {
var rv = E([]), l = toArray(x);
var rv = E([]), l = L.toArray(x);
if (l.length == 0) {
if (d) {
@ -159,7 +143,7 @@ return L.Class.extend({
},
fmt_ip: function(x, d) {
var rv = E([]), l = toArray(x);
var rv = E([]), l = L.toArray(x);
if (l.length == 0) {
if (d) {
@ -205,7 +189,7 @@ return L.Class.extend({
},
fmt_icmp_type: function(x) {
var rv = E([]), l = toArray(x);
var rv = E([]), l = L.toArray(x);
if (l.length == 0)
return null;
@ -228,7 +212,7 @@ return L.Class.extend({
},
fmt_proto: function(x, icmp_types) {
var rv = E([]), l = toArray(x);
var rv = E([]), l = L.toArray(x);
if (l.length == 0)
return null;

View File

@ -6,34 +6,6 @@
'require tools.firewall as fwtool';
'require tools.widgets as widgets';
function skeys(obj, key, mode) {
if (obj == null || typeof(obj) != 'object')
return [];
return Object.keys(obj).map(function(e) {
var v = (key != null) ? obj[e][key] : e;
switch (mode) {
case 'addr':
v = (v != null) ? v.replace(/(?:^|[.:])([0-9a-fA-F]{1,4})/g,
function(m0, m1) { return ('000' + m1.toLowerCase()).substr(-4) }) : null;
break;
case 'num':
v = (v != null) ? +v : null;
break;
}
return [ e, v ];
}).filter(function(e) {
return (e[1] != null);
}).sort(function(a, b) {
return (a[1] > b[1]);
}).map(function(e) {
return e[0];
});
}
function fmt(fmt /*, ...*/) {
var repl = [], wrap = false;
@ -192,7 +164,7 @@ return L.view.extend({
o.rmempty = true;
o.datatype = 'neg(macaddr)';
o.placeholder = E('em', _('any'));
skeys(hosts).forEach(function(mac) {
L.sortedKeys(hosts).forEach(function(mac) {
o.value(mac, '%s (%s)'.format(
mac,
hosts[mac].name || hosts[mac].ipv4 || hosts[mac].ipv6 || '?'
@ -205,7 +177,7 @@ return L.view.extend({
o.rmempty = true;
o.datatype = 'neg(ipmask4)';
o.placeholder = E('em', _('any'));
skeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac
@ -229,7 +201,7 @@ return L.view.extend({
o.rmempty = true;
o.datatype = 'neg(ipmask4)';
o.placeholder = E('em', _('any'));
skeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac
@ -257,7 +229,7 @@ return L.view.extend({
o.modalonly = true;
o.rmempty = true;
o.datatype = 'ipmask4';
skeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac

View File

@ -6,34 +6,6 @@
'require tools.firewall as fwtool';
'require tools.widgets as widgets';
function skeys(obj, key, mode) {
if (obj == null || typeof(obj) != 'object')
return [];
return Object.keys(obj).map(function(e) {
var v = (key != null) ? obj[e][key] : e;
switch (mode) {
case 'addr':
v = (v != null) ? v.replace(/(?:^|[.:])([0-9a-fA-F]{1,4})/g,
function(m0, m1) { return ('000' + m1.toLowerCase()).substr(-4) }) : null;
break;
case 'num':
v = (v != null) ? +v : null;
break;
}
return [ e, v ];
}).filter(function(e) {
return (e[1] != null);
}).sort(function(a, b) {
return (a[1] > b[1]);
}).map(function(e) {
return e[0];
});
}
function fmt(fmt /*, ...*/) {
var repl = [], wrap = false;
@ -276,7 +248,7 @@ return L.view.extend({
o.modalonly = true;
o.datatype = 'list(macaddr)';
o.placeholder = _('any');
skeys(hosts).forEach(function(mac) {
L.sortedKeys(hosts).forEach(function(mac) {
o.value(mac, '%s (%s)'.format(
mac,
hosts[mac].name || hosts[mac].ipv4 || hosts[mac].ipv6 || '?'
@ -287,7 +259,7 @@ return L.view.extend({
o.modalonly = true;
o.datatype = 'list(neg(ipmask))';
o.placeholder = _('any');
skeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac
@ -324,7 +296,7 @@ return L.view.extend({
o.modalonly = true;
o.datatype = 'list(neg(ipmask))';
o.placeholder = _('any');
skeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
o.value(hosts[mac].ipv4, '%s (%s)'.format(
hosts[mac].ipv4,
hosts[mac].name || mac

View File

@ -8,21 +8,6 @@ function initFirewallState() {
return uci.load('firewall');
}
function toArray(val) {
if (val == null)
return [];
if (Array.isArray(val))
return val;
var s = String(val).trim();
if (s == '')
return [];
return s.split(/\s+/);
}
function parseEnum(s, values) {
if (s == null)
return null;
@ -155,7 +140,7 @@ Firewall = L.Class.extend({
var sections = uci.sections('firewall', 'zone');
for (var i = 0; i < sections.length; i++)
if (toArray(sections[i].network || sections[i].name).indexOf(network) != -1)
if (L.toArray(sections[i].network || sections[i].name).indexOf(network) != -1)
return new Zone(sections[i]['.name']);
return null;
@ -217,7 +202,7 @@ Firewall = L.Class.extend({
if (sections[i].name != oldName)
continue;
if (toArray(sections[i].network).length == 0)
if (L.toArray(sections[i].network).length == 0)
uci.set('firewall', sections[i]['.name'], 'network', oldName);
uci.set('firewall', sections[i]['.name'], 'name', newName);
@ -383,7 +368,7 @@ Zone = AbstractFirewallItem.extend({
},
getNetworks: function() {
return toArray(this.get('network') || this.get('name'));
return L.toArray(this.get('network') || this.get('name'));
},
clearNetworks: function() {

View File

@ -1430,12 +1430,7 @@ var CBIDynamicList = CBIValue.extend({
renderWidget: function(section_id, option_index, cfgvalue) {
var value = (cfgvalue != null) ? cfgvalue : this.default,
choices = this.transformChoices(),
items = null;
if (Array.isArray(value))
items = value;
else if (value != null)
items = String(value).trim().split(/\s+/);
items = L.toArray(value);
var widget = new ui.DynamicList(items, choices, {
id: this.cbid(section_id),
@ -1541,10 +1536,7 @@ var CBIMultiValue = CBIDynamicList.extend({
var value = (cfgvalue != null) ? cfgvalue : this.default,
choices = this.transformChoices();
if (!Array.isArray(value))
value = String(value).split(/\s+/);
var widget = new ui.Dropdown(value, choices, {
var widget = new ui.Dropdown(L.toArray(value), choices, {
id: this.cbid(section_id),
sort: this.keylist,
multiple: true,

View File

@ -90,7 +90,7 @@ var _cache = {},
function getWifiState() {
if (_cache.wifi == null)
return callNetworkWirelessStatus().then(function(state) {
if (!isObject(state))
if (!L.isObject(state))
throw !1;
return (_cache.wifi = state);
}).catch(function() {
@ -116,7 +116,7 @@ function getInterfaceState() {
function getDeviceState() {
if (_cache.devicedump == null)
return callNetworkDeviceStatus().then(function(state) {
if (!isObject(state))
if (!L.isObject(state))
throw !1;
return (_cache.devicedump = state);
}).catch(function() {
@ -142,7 +142,7 @@ function getIfaddrState() {
function getNetdevState() {
if (_cache.devices == null)
return callLuciNetdevs().then(function(state) {
if (!isObject(state))
if (!L.isObject(state))
throw !1;
return (_cache.devices = state);
}).catch(function() {
@ -155,7 +155,7 @@ function getNetdevState() {
function getBoardState() {
if (_cache.board == null)
return callLuciBoardjson().then(function(state) {
if (!isObject(state))
if (!L.isObject(state))
throw !1;
return (_cache.board = state);
}).catch(function() {
@ -222,7 +222,7 @@ function getWifiIwinfoByIfname(ifname, forcePhyOnly) {
devstate = info[1],
phyonly = forcePhyOnly || !devstate[ifname] || (devstate[ifname].type != 1);
if (isObject(iwinfo)) {
if (L.isObject(iwinfo)) {
if (phyonly) {
delete iwinfo.bitrate;
delete iwinfo.quality;
@ -266,7 +266,7 @@ function getWifiSidByIfname(ifname) {
var res = getWifiStateByIfname(ifname);
if (res != null && isObject(res[2]) && typeof(res[2].section) == 'string')
if (res != null && L.isObject(res[2]) && typeof(res[2].section) == 'string')
return res[2].section;
return null;
@ -330,10 +330,6 @@ function isIgnoredIfname(ifname) {
return false;
}
function isObject(val) {
return (val != null && typeof(val) == 'object')
}
function appendValue(config, section, option, value) {
var values = uci.get(config, section, option),
isArray = Array.isArray(values),
@ -375,21 +371,6 @@ function removeValue(config, section, option, value) {
return rv;
}
function toArray(val) {
if (val == null)
return [];
if (Array.isArray(val))
return val;
var s = String(val).trim();
if (s == '')
return [];
return s.split(/\s+/);
}
function prefixToMask(bits, v6) {
var w = v6 ? 128 : 32,
m = [];
@ -499,7 +480,7 @@ function initNetworkState() {
}
}
if (isObject(board.switch)) {
if (L.isObject(board.switch)) {
for (var switchname in board.switch) {
var layout = board.switch[switchname],
netdevs = {},
@ -508,7 +489,7 @@ function initNetworkState() {
pnum = null,
role = null;
if (isObject(layout) && Array.isArray(layout.ports)) {
if (L.isObject(layout) && Array.isArray(layout.ports)) {
for (var i = 0, port; (port = layout.ports[i]) != null; i++) {
if (typeof(port) == 'object' && typeof(port.num) == 'number' &&
(typeof(port.role) == 'string' || typeof(port.device) == 'string')) {
@ -653,7 +634,7 @@ Network = L.Class.extend({
var sid = uci.add('network', 'interface', name);
if (sid != null) {
if (isObject(options))
if (L.isObject(options))
for (var key in options)
if (options.hasOwnProperty(key))
uci.set('network', sid, key, options[key]);
@ -662,7 +643,7 @@ Network = L.Class.extend({
}
}
else if (existingNetwork != null && existingNetwork.isEmpty()) {
if (isObject(options))
if (L.isObject(options))
for (var key in options)
if (options.hasOwnProperty(key))
existingNetwork.set(key, options[key]);
@ -742,7 +723,7 @@ Network = L.Class.extend({
});
uci.sections('wireless', 'wifi-iface', function(s) {
var networks = toArray(s.network).filter(function(network) { return network != name });
var networks = L.toArray(s.network).filter(function(network) { return network != name });
if (networks.length > 0)
uci.set('wireless', s['.name'], 'network', networks.join(' '));
@ -797,7 +778,7 @@ Network = L.Class.extend({
});
uci.sections('wireless', 'wifi-iface', function(s) {
var networks = toArray(s.network).map(function(network) { return (network == oldName ? newName : network) });
var networks = L.toArray(s.network).map(function(network) { return (network == oldName ? newName : network) });
if (networks.length > 0)
uci.set('wireless', s['.name'], 'network', networks.join(' '));
@ -832,7 +813,7 @@ Network = L.Class.extend({
/* find simple devices */
var uciInterfaces = uci.sections('network', 'interface');
for (var i = 0; i < uciInterfaces.length; i++) {
var ifnames = toArray(uciInterfaces[i].ifname);
var ifnames = L.toArray(uciInterfaces[i].ifname);
for (var j = 0; j < ifnames.length; j++) {
if (ifnames[j].charAt(0) == '@')
@ -955,7 +936,7 @@ Network = L.Class.extend({
var rv = [];
for (var i = 0; i < deviceNames.length; i++)
if (isObject(iwinfos[i]))
if (L.isObject(iwinfos[i]))
rv.push(this.instantiateWifiDevice(deviceNames[i], iwinfos[i]));
rv.sort(function(a, b) { return a.getName() < b.getName() });
@ -1248,7 +1229,7 @@ Protocol = L.Class.extend({
getZoneName: function() {
var d = this._ubus('data');
if (isObject(d) && typeof(d.zone) == 'string')
if (L.isObject(d) && typeof(d.zone) == 'string')
return d.zone;
return null;
@ -1339,12 +1320,12 @@ Protocol = L.Class.extend({
getIP6Addr: function() {
var addrs = this._ubus('ipv6-address');
if (Array.isArray(addrs) && isObject(addrs[0]))
if (Array.isArray(addrs) && L.isObject(addrs[0]))
return '%s/%d'.format(addrs[0].address, addrs[0].mask);
addrs = this._ubus('ipv6-prefix-assignment');
if (Array.isArray(addrs) && isObject(addrs[0]) && isObject(addrs[0]['local-address']))
if (Array.isArray(addrs) && L.isObject(addrs[0]) && L.isObject(addrs[0]['local-address']))
return '%s/%d'.format(addrs[0]['local-address'].address, addrs[0]['local-address'].mask);
return null;
@ -1356,14 +1337,14 @@ Protocol = L.Class.extend({
if (Array.isArray(addrs))
for (var i = 0; i < addrs.length; i++)
if (isObject(addrs[i]))
if (L.isObject(addrs[i]))
rv.push('%s/%d'.format(addrs[i].address, addrs[i].mask));
addrs = this._ubus('ipv6-prefix-assignment');
if (Array.isArray(addrs))
for (var i = 0; i < addrs.length; i++)
if (isObject(addrs[i]) && isObject(addrs[i]['local-address']))
if (L.isObject(addrs[i]) && L.isObject(addrs[i]['local-address']))
rv.push('%s/%d'.format(addrs[i]['local-address'].address, addrs[i]['local-address'].mask));
return rv;
@ -1384,7 +1365,7 @@ Protocol = L.Class.extend({
getIP6Prefix: function() {
var prefixes = this._ubus('ipv6-prefix');
if (Array.isArray(prefixes) && isObject(prefixes[0]))
if (Array.isArray(prefixes) && L.isObject(prefixes[0]))
return '%s/%d'.format(prefixes[0].address, prefixes[0].mask);
return null;
@ -1396,7 +1377,7 @@ Protocol = L.Class.extend({
if (Array.isArray(errors)) {
for (var i = 0; i < errors.length; i++) {
if (!isObject(errors[i]) || typeof(errors[i].code) != 'string')
if (!L.isObject(errors[i]) || typeof(errors[i].code) != 'string')
continue;
rv = rv || [];
@ -1432,7 +1413,7 @@ Protocol = L.Class.extend({
},
isAlias: function() {
var ifnames = toArray(uci.get('network', this.sid, 'ifname')),
var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')),
parent = null;
for (var i = 0; i < ifnames.length; i++)
@ -1514,7 +1495,7 @@ Protocol = L.Class.extend({
if (ifname != null)
return L.network.instantiateDevice(ifname, this);
var ifnames = toArray(uci.get('network', this.sid, 'ifname'));
var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
for (var i = 0; i < ifnames.length; i++) {
var m = ifnames[i].match(/^([^:/]+)/);
@ -1533,7 +1514,7 @@ Protocol = L.Class.extend({
if (!this.isBridge() && !(this.isVirtual() && !this.isFloating()))
return null;
var ifnames = toArray(uci.get('network', this.sid, 'ifname'));
var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
for (var i = 0; i < ifnames.length; i++) {
if (ifnames[i].charAt(0) == '@')
@ -1550,7 +1531,7 @@ Protocol = L.Class.extend({
if (typeof(uciWifiIfaces[i].device) != 'string')
continue;
var networks = toArray(uciWifiIfaces[i].network);
var networks = L.toArray(uciWifiIfaces[i].network);
for (var j = 0; j < networks.length; j++) {
if (networks[j] != this.sid)
@ -1578,7 +1559,7 @@ Protocol = L.Class.extend({
else if (this.isBridge() && 'br-%s'.format(this.sid) == ifname)
return true;
var ifnames = toArray(uci.get('network', this.sid, 'ifname'));
var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
for (var i = 0; i < ifnames.length; i++) {
var m = ifnames[i].match(/^([^:/]+)/);
@ -1589,7 +1570,7 @@ Protocol = L.Class.extend({
var wif = getWifiSidByIfname(ifname);
if (wif != null) {
var networks = toArray(uci.get('wireless', wif, 'network'));
var networks = L.toArray(uci.get('wireless', wif, 'network'));
for (var i = 0; i < networks.length; i++)
if (networks[i] == this.sid)
@ -1814,7 +1795,7 @@ WifiDevice = L.Class.extend({
},
getHWModes: function() {
if (isObject(this.iwinfo.hwmodelist))
if (L.isObject(this.iwinfo.hwmodelist))
for (var k in this.iwinfo.hwmodelist)
return this.iwinfo.hwmodelist;
@ -1840,7 +1821,7 @@ WifiDevice = L.Class.extend({
},
isUp: function() {
if (isObject(_cache.wifi[this.sid]))
if (L.isObject(_cache.wifi[this.sid]))
return (_cache.wifi[this.sid].up == true);
return false;
@ -1869,7 +1850,7 @@ WifiDevice = L.Class.extend({
},
addWifiNetwork: function(options) {
if (!isObject(options))
if (!L.isObject(options))
options = {};
options.device = this.sid;
@ -1916,7 +1897,7 @@ WifiNetwork = L.Class.extend({
var v = this._ubusdata;
for (var i = 0; i < arguments.length; i++)
if (isObject(v))
if (L.isObject(v))
v = v[arguments[i]];
else
return null;
@ -1945,7 +1926,7 @@ WifiNetwork = L.Class.extend({
},
getNetworkNames: function() {
return toArray(this.ubus('net', 'config', 'network') || this.get('network'));
return L.toArray(this.ubus('net', 'config', 'network') || this.get('network'));
},
getID: function() {
@ -2020,7 +2001,7 @@ WifiNetwork = L.Class.extend({
getActiveEncryption: function() {
var encryption = this.iwinfo.encryption;
return (isObject(encryption) ? encryption.description || '-' : '-');
return (L.isObject(encryption) ? encryption.description || '-' : '-');
},
getAssocList: function() {

View File

@ -4,22 +4,6 @@
'require network';
'require firewall';
function toArray(x) {
if (x == null)
return [];
else if (Array.isArray(x))
return x.map(String);
else if (typeof(x) == 'object')
return [ x ];
var s = String(x).trim();
if (s == '')
return [];
return s.split(/\s+/);
}
var CBIZoneSelect = form.ListValue.extend({
__name__: 'CBI.ZoneSelect',
@ -45,7 +29,7 @@ var CBIZoneSelect = form.ListValue.extend({
},
renderWidget: function(section_id, option_index, cfgvalue) {
var values = toArray((cfgvalue != null) ? cfgvalue : this.default),
var values = L.toArray((cfgvalue != null) ? cfgvalue : this.default),
choices = {};
if (this.allowlocal) {
@ -94,7 +78,7 @@ var CBIZoneSelect = form.ListValue.extend({
'class': 'ifacebadge' + (network.getName() == this.network ? ' ifacebadge-active' : '')
}, network.getName() + ': ');
var devices = network.isBridge() ? network.getDevices() : toArray(network.getDevice());
var devices = network.isBridge() ? network.getDevices() : L.toArray(network.getDevice());
for (var k = 0; k < devices.length; k++) {
span.appendChild(E('img', {
@ -168,7 +152,7 @@ var CBIZoneForwards = form.DummyValue.extend({
'class': 'ifacebadge' + (network.getName() == this.network ? ' ifacebadge-active' : '')
}, network.getName() + ': ');
var devices = network.isBridge() ? network.getDevices() : toArray(network.getDevice());
var devices = network.isBridge() ? network.getDevices() : L.toArray(network.getDevice());
for (var k = 0; k < devices.length && devices[k]; k++) {
span.appendChild(E('img', {
@ -243,7 +227,7 @@ var CBINetworkSelect = form.ListValue.extend({
renderIfaceBadge: function(network) {
var span = E('span', { 'class': 'ifacebadge' }, network.getName() + ': '),
devices = network.isBridge() ? network.getDevices() : toArray(network.getDevice());
devices = network.isBridge() ? network.getDevices() : L.toArray(network.getDevice());
for (var j = 0; j < devices.length && devices[j]; j++) {
span.appendChild(E('img', {
@ -261,7 +245,7 @@ var CBINetworkSelect = form.ListValue.extend({
},
renderWidget: function(section_id, option_index, cfgvalue) {
var values = toArray((cfgvalue != null) ? cfgvalue : this.default),
var values = L.toArray((cfgvalue != null) ? cfgvalue : this.default),
choices = {},
checked = {};
@ -312,7 +296,7 @@ var CBINetworkSelect = form.ListValue.extend({
textvalue: function(section_id) {
var cfgvalue = this.cfgvalue(section_id),
values = toArray((cfgvalue != null) ? cfgvalue : this.default),
values = L.toArray((cfgvalue != null) ? cfgvalue : this.default),
rv = E([]);
for (var i = 0; i < (this.networks || []).length; i++) {