Skip to content

Commit 3ecc113

Browse files
committed
Sort blogs by vote score
1 parent f555174 commit 3ecc113

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

‎config/pages/blogs.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ sections:
1414
page_rows: 5
1515
search_category: posts
1616
browse:
17-
randomize: true
17+
randomize: false
1818
search_category: blogs
1919
blog_metadata: !import "data/blogs/metadata.yaml"
2020
post_cache: !import-list "data/blogs/posts"

‎frontend/src/pages/blogs.ts‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,30 @@ function setBusy(element: HTMLElement, busy: boolean): void {
9292
});
9393
}
9494

95+
function sortByScore(): void {
96+
const grid = document.querySelector<HTMLElement>(".blog-grid");
97+
if (!grid) return;
98+
99+
const score = (card: HTMLElement): number =>
100+
Number(
101+
card.querySelector<HTMLElement>("[data-blog-vote]")?.dataset.score ?? 0,
102+
);
103+
104+
const cards = Array.from(
105+
grid.querySelectorAll<HTMLElement>(":scope > .blog-card"),
106+
);
107+
cards.sort((left, right) => {
108+
const difference = score(right) - score(left);
109+
if (difference) return difference;
110+
return (left.dataset.searchTitle ?? "").localeCompare(
111+
right.dataset.searchTitle ?? "",
112+
undefined,
113+
{ sensitivity: "base" },
114+
);
115+
});
116+
grid.append(...cards);
117+
}
118+
95119
function redirectTarget(): string {
96120
const url = new URL(window.location.href);
97121
url.hash = "";
@@ -121,6 +145,7 @@ export async function initBlogVoting(): Promise<void> {
121145
const element = byId.get(row.blog_id);
122146
if (element) setScore(element, Number(row.score) || 0);
123147
}
148+
sortByScore();
124149
}
125150

126151
async function loadUserVotes(session: SupabaseSession | null): Promise<void> {

0 commit comments

Comments
 (0)