import { format } from "timeago.js"; import { getUrlParams } from "../libs/utils"; function navbarLink() { const navbar = document.querySelector("span.pagetop"); if (!navbar) { return false; } const submitLink = navbar.querySelector('a[href="submit"]'); if (!submitLink) { return false; } const pollsLink = document.createElement("a"); const separator = document.createTextNode(" | "); pollsLink.innerText = "polls"; pollsLink.href = "/#polls"; navbar.insertBefore(pollsLink, submitLink); navbar.insertBefore(separator, submitLink); return pollsLink; } async function getPollItems(page) { const order = getUrlParams("order") === "score" ? "score" : undefined; const rawResults = await fetch( `https://hn.algolia.com/api/v1/${ order ? "search" : "search_by_date" }?tags=poll&page=${page}&hitsPerPage=30` ) .then((res) => res.json()) .then((obj) => obj.hits); const results = []; for (const result of rawResults) { results.push({ id: result.objectID, author: result.author, comments: result.num_comments + " comment" + (result.num_comments === 1 ? "" : "s"), points: result.points + " point" + (result.points === 1 ? "" : "s"), title: result.title, date: format(result.created_at), }); } return results; } async function setPollItems() { const itemlistTable = document.querySelector("table.itemlist > tbody"); const stories = itemlistTable.querySelectorAll(":scope > tr"); const [moreSpace, moreButton] = [...stories].slice(-2); for (const row of stories) { row.remove(); } const pageNumber = Number(getUrlParams("p")); const realPageNumber = pageNumber === 0 ? 1 : pageNumber; const order = getUrlParams("order") === "score" ? "score" : undefined; const orderUrl = `/?p=${realPageNumber}${order ? "" : "&order=score"}#polls`; itemlistTable.innerHTML = `