summaryrefslogtreecommitdiff
path: root/public/assets
diff options
context:
space:
mode:
authorjulian laplace <julescarbon@gmail.com>2022-10-28 15:41:38 +0200
committerjulian laplace <julescarbon@gmail.com>2022-10-28 15:41:38 +0200
commitf38a624d0358114a0db957e45c397f8b9ebb67a8 (patch)
tree63000b10948e9392a6b96145d1df0129b9788129 /public/assets
parentbd72a7e7154ffbe968dc4d0109198f2f0d8521a0 (diff)
keywords links
Diffstat (limited to 'public/assets')
-rw-r--r--public/assets/js/lib/views/keywords/keywords.js56
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];