proportions: sort firmware based on version

This commit is contained in:
Nils Schneider 2015-07-08 10:06:43 +02:00
parent 5a278f5b86
commit aeae866998
2 changed files with 63 additions and 3 deletions

View file

@ -1,5 +1,5 @@
define(["chroma-js", "virtual-dom", "numeral-intl"], define(["chroma-js", "virtual-dom", "numeral-intl", "vercomp" ],
function (Chroma, V, numeral) { function (Chroma, V, numeral, vercomp) {
return function (config) { return function (config) {
var self = this 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(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(hwTable, hwDict.sort(function (a, b) { return b[1] - a[1] }))
fillTable(geoTable, geoDict.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] })) fillTable(autoTable, autoDict.sort(function (a, b) { return b[1] - a[1] }))

60
lib/vercomp.js Normal file
View 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
})