summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/htdocs/luci-static/resources/network.js
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-07-27 17:19:08 +0200
committerJo-Philipp Wich <jo@mein.io>2022-07-27 17:32:58 +0200
commit37422e891a47f15659356ce75b6f6cce831e0041 (patch)
treed1e16dfb79a16f13d0fb368fac75fad7a0d27f16 /modules/luci-base/htdocs/luci-static/resources/network.js
parent8199b2ce9a7d36359aedea1ad9dab157134a46c2 (diff)
luci-base: revise array sorting
Refactor various sort operations throughout luci-base to use the new L.naturalCompare() comparator function. This primarily ensures that embedded numbers are sorted numerically and not in a lexicographical way. It also simplifies some code as a side effect. Ref: #5899 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/htdocs/luci-static/resources/network.js')
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/network.js52
1 files changed, 12 insertions, 40 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/network.js b/modules/luci-base/htdocs/luci-static/resources/network.js
index 864cbba52c..e0013c8ec0 100644
--- a/modules/luci-base/htdocs/luci-static/resources/network.js
+++ b/modules/luci-base/htdocs/luci-static/resources/network.js
@@ -101,15 +101,6 @@ var _init = null,
_protocols = {},
_protospecs = {};
-function strcmp(a, b) {
- if (a > b)
- return 1;
- else if (a < b)
- return -1;
- else
- return 0;
-}
-
function getProtocolHandlers(cache) {
return callNetworkProtoHandlers().then(function(protos) {
/* Register "none" protocol */
@@ -485,10 +476,7 @@ function initNetworkState(refresh) {
}
ports.sort(function(a, b) {
- if (a.role != b.role)
- return (a.role < b.role) ? -1 : 1;
-
- return (a.index - b.index);
+ return L.naturalCompare(a.role, b.role) || L.naturalCompare(a.index, b.index);
});
for (var i = 0, port; (port = ports[i]) != null; i++) {
@@ -562,18 +550,14 @@ function ifnameOf(obj) {
}
function networkSort(a, b) {
- return strcmp(a.getName(), b.getName());
+ return L.naturalCompare(a.getName(), b.getName());
}
function deviceSort(a, b) {
- var typeWeigth = { wifi: 2, alias: 3 },
- weightA = typeWeigth[a.getType()] || 1,
- weightB = typeWeigth[b.getType()] || 1;
-
- if (weightA != weightB)
- return weightA - weightB;
+ var typeWeigth = { wifi: 2, alias: 3 };
- return strcmp(a.getName(), b.getName());
+ return L.naturalCompare(typeWeigth[a.getType()] || 1, typeWeigth[b.getType()] || 1) ||
+ L.naturalCompare(a.getName(), b.getName());
}
function formatWifiEncryption(enc) {
@@ -1441,7 +1425,7 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
rv.push(this.lookupWifiNetwork(wifiIfaces[i]['.name']));
rv.sort(function(a, b) {
- return strcmp(a.getID(), b.getID());
+ return L.naturalCompare(a.getID(), b.getID());
});
return rv;
@@ -1539,10 +1523,7 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
}
rv.sort(function(a, b) {
- if (a.metric != b.metric)
- return (a.metric - b.metric);
-
- return strcmp(a.interface, b.interface);
+ return L.naturalCompare(a.metric, b.metric) || L.naturalCompare(a.interface, b.interface);
});
return rv;
@@ -1990,7 +1971,7 @@ Hosts = baseclass.extend(/** @lends LuCI.network.Hosts.prototype */ {
}
return rv.sort(function(a, b) {
- return strcmp(a[0], b[0]);
+ return L.naturalCompare(a[0], b[0]);
});
}
});
@@ -3419,19 +3400,10 @@ WifiDevice = baseclass.extend(/** @lends LuCI.network.WifiDevice.prototype */ {
if (this.ubus('dev', 'iwinfo', 'type') == 'wl')
type = 'Broadcom';
- var hwmodes = this.getHWModes(),
- modestr = '';
-
- hwmodes.sort(function(a, b) {
- if (a.length != b.length)
- return a.length - b.length;
-
- return strcmp(a, b);
- });
-
- modestr = hwmodes.join('');
-
- return '%s 802.11%s Wireless Controller (%s)'.format(type || 'Generic', modestr, this.getName());
+ return '%s 802.11%s Wireless Controller (%s)'.format(
+ type || 'Generic',
+ this.getHWModes().sort(L.naturalCompare).join(''),
+ this.getName());
},
/**