proportions: sort firmware based on version
This commit is contained in:
parent
5a278f5b86
commit
aeae866998
|
@ -1,5 +1,5 @@
|
|||
define(["chroma-js", "virtual-dom", "numeral-intl"],
|
||||
function (Chroma, V, numeral) {
|
||||
define(["chroma-js", "virtual-dom", "numeral-intl", "vercomp" ],
|
||||
function (Chroma, V, numeral, vercomp) {
|
||||
|
||||
return function (config) {
|
||||
var self = this
|
||||
|
@ -128,7 +128,7 @@ define(["chroma-js", "virtual-dom", "numeral-intl"],
|
|||
})
|
||||
|
||||
fillTable(statusTable, statusDict.sort(function (a, b) { return b[1] - a[1] }))
|
||||
fillTable(fwTable, fwDict.sort(function (a, b) { return b[1] - a[1] }))
|
||||
fillTable(fwTable, fwDict.sort(function (a, b) { return vercomp(b[0], a[0]) }))
|
||||
fillTable(hwTable, hwDict.sort(function (a, b) { return b[1] - a[1] }))
|
||||
fillTable(geoTable, geoDict.sort(function (a, b) { return b[1] - a[1] }))
|
||||
fillTable(autoTable, autoDict.sort(function (a, b) { return b[1] - a[1] }))
|
||||
|
|
60
lib/vercomp.js
Normal file
60
lib/vercomp.js
Normal file
|
@ -0,0 +1,60 @@
|
|||
define([], function () {
|
||||
function order(c) {
|
||||
if (/^\d$/.test(c))
|
||||
return 0
|
||||
else if (/^[a-z]$/i.test(c))
|
||||
return c.charCodeAt(0)
|
||||
else if (c === "~")
|
||||
return -1
|
||||
else if (c)
|
||||
return c.charCodeAt(0) + 256
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
// Based on dpkg code
|
||||
function vercomp(a, b) {
|
||||
var apos = 0, bpos = 0
|
||||
while (apos < a.length || bpos < b.length) {
|
||||
var firstDiff = 0
|
||||
|
||||
while ((apos < a.length && !/^\d$/.test(a[apos])) || (bpos < b.length && !/^\d$/.test(b[bpos]))) {
|
||||
var ac = order(a[apos])
|
||||
var bc = order(b[bpos])
|
||||
|
||||
if (ac !== bc)
|
||||
return ac - bc
|
||||
|
||||
apos++
|
||||
bpos++
|
||||
}
|
||||
|
||||
while (a[apos] === "0")
|
||||
apos++
|
||||
|
||||
while (b[bpos] === "0")
|
||||
bpos++
|
||||
|
||||
while (/^\d$/.test(a[apos]) && /^\d$/.test(b[bpos])) {
|
||||
if (firstDiff === 0)
|
||||
firstDiff = a.charCodeAt(apos) - b.charCodeAt(bpos)
|
||||
|
||||
apos++
|
||||
bpos++
|
||||
}
|
||||
|
||||
if (/^\d$/.test(a[apos]))
|
||||
return 1
|
||||
|
||||
if (/^\d$/.test(b[bpos]))
|
||||
return -1
|
||||
|
||||
if (firstDiff !== 0)
|
||||
return firstDiff
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
return vercomp
|
||||
})
|
Loading…
Reference in a new issue