|
module.exports = TagList;
|
|
function TagList (tagList, latest) {
|
this.latest = latest;
|
this.all = tagList
|
}
|
|
TagList.parse = function (data, customSort) {
|
var number = function (input) {
|
if (typeof input === 'string') {
|
return parseInt(input.replace(/^\D+/g, ''), 10) || 0;
|
}
|
|
return 0;
|
};
|
|
var tags = data
|
.trim()
|
.split('\n')
|
.map(function (item) { return item.trim(); })
|
.filter(Boolean);
|
|
if (!customSort) {
|
tags.sort(function (tagA, tagB) {
|
var partsA = tagA.split('.');
|
var partsB = tagB.split('.');
|
|
if (partsA.length === 1 || partsB.length === 1) {
|
return tagA - tagB > 0 ? 1 : -1;
|
}
|
|
for (var i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {
|
var a = number(partsA[i]);
|
var b = number(partsB[i]);
|
|
var diff = a - b;
|
if (diff) {
|
return diff > 0 ? 1 : -1;
|
}
|
}
|
|
return 0;
|
});
|
}
|
|
var latest = customSort ? tags[0] : tags.filter(function (tag) { return tag.indexOf('.') >= 0; }).pop();
|
|
return new TagList(tags, latest);
|
};
|