1 |
|
2 | module.exports = TagList;
|
3 |
|
4 | function TagList (tagList, latest) {
|
5 | this.latest = latest;
|
6 | this.all = tagList
|
7 | }
|
8 |
|
9 | TagList.parse = function (data, customSort) {
|
10 | var number = function (input) {
|
11 | if (typeof input === 'string') {
|
12 | return parseInt(input.replace(/^\D+/g, ''), 10) || 0;
|
13 | }
|
14 |
|
15 | return 0;
|
16 | };
|
17 |
|
18 | var tags = data
|
19 | .trim()
|
20 | .split('\n')
|
21 | .map(function (item) { return item.trim(); })
|
22 | .filter(Boolean);
|
23 |
|
24 | if (!customSort) {
|
25 | tags.sort(function (tagA, tagB) {
|
26 | var partsA = tagA.split('.');
|
27 | var partsB = tagB.split('.');
|
28 |
|
29 | if (partsA.length === 1 || partsB.length === 1) {
|
30 | return tagA - tagB > 0 ? 1 : -1;
|
31 | }
|
32 |
|
33 | for (var i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {
|
34 | var a = number(partsA[i]);
|
35 | var b = number(partsB[i]);
|
36 |
|
37 | var diff = a - b;
|
38 | if (diff) {
|
39 | return diff > 0 ? 1 : -1;
|
40 | }
|
41 | }
|
42 |
|
43 | return 0;
|
44 | });
|
45 | }
|
46 |
|
47 | var latest = customSort ? tags[0] : tags.filter(function (tag) { return tag.indexOf('.') >= 0; }).pop();
|
48 |
|
49 | return new TagList(tags, latest);
|
50 | };
|