diff options
Diffstat (limited to 'public/assets/js/lib/views/keywords/keywords.js')
| -rw-r--r-- | public/assets/js/lib/views/keywords/keywords.js | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/public/assets/js/lib/views/keywords/keywords.js b/public/assets/js/lib/views/keywords/keywords.js index 777bebf..ef1d084 100644 --- a/public/assets/js/lib/views/keywords/keywords.js +++ b/public/assets/js/lib/views/keywords/keywords.js @@ -14,7 +14,17 @@ var KeywordsView = View.extend({ $.get(this.action, this.populate.bind(this)); }, + sort: { + field: "name", + order: "desc", + }, + + onSort: function () { + this.sort = {}; + }, + populate: function (data) { + this.data = data; // console.log(data) var keywordThreads = {}; var keywordStats = {}; @@ -24,14 +34,8 @@ var KeywordsView = View.extend({ data.threadGroups.forEach((kw) => { keywordStats[kw.keyword] = kw; }); - data.keywords - .map((a) => [ - parseInt((keywordThreads[a.keyword] || {})["sum(`viewed`)"]) || 0, - a, - ]) - .sort((b, a) => cmp(a[0], b[0])) - .map((a) => a[1]) - .forEach((keyword) => { + this.sortKeywords(data.keywords, this.sort.field, this.sort.order).forEach( + (keyword) => { var thread = keywordThreads[keyword.keyword.toLowerCase()] || {}; var stats = keywordStats[keyword.keyword.toLowerCase()] || {}; // { @@ -78,7 +82,41 @@ var KeywordsView = View.extend({ .replace(/{{color}}/g, thread.color || "blue"); this.$el.append(t); - }); + } + ); $("body").removeClass("loading"); }, + + sortKeywords: function (keywords, sort, order) { + if (!keywords.length) { + return []; + } + let mapper, sorter; + switch (sort) { + case "name": + mapper = (keyword) => [keyword.keyword.toLowerCase(), keyword]; + sorter = order === "asc" ? sortTextAscending : sortTextDescending; + break; + + case "date": + mapper = (keyword) => [keyword.date, keyword]; + sorter = order === "asc" ? sortNumberDescending : sortNumberAscending; + break; + default: + case "views": + return files; + mapper = (keyword) => [keyword["sum(`viewed`)"], keyword]; + sorter = order === "asc" ? sortNumberAscending : sortNumberDescending; + break; + } + return keywords + .map(mapper) + .sort(sorter) + .map(([, keyword]) => keyword); + }, }); + +const sortTextAscending = (a, b) => a[0].localeCompare(b[0]); +const sortTextDescending = (a, b) => b[0].localeCompare(a[0]); +const sortNumberAscending = (a, b) => a[0] - b[0]; +const sortNumberDescending = (a, b) => b[0] - a[0]; |
