import compareUrls from "compare-urls"; import { monthNames } from "../libs/utils"; function getSimilarSubmissions(storyLink, metadata) { // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { const API_URL = "https://hn.algolia.com/api/v1/search_by_date?tags=story&restrictSearchableAttributes=url&query="; const safeStoryLink = encodeURI(storyLink); const results = []; const rawResults = await fetch(API_URL + safeStoryLink) .then((res) => res.json()) .then((obj) => obj.hits); if (!rawResults) { return resolve(results); } for (const result of rawResults) { // eslint-disable-next-line eqeqeq if (result.objectID == metadata.item.id) { continue; } if ( !result.url || !compareUrls(result.url.split("://").pop(), storyLink) ) { continue; } if ( !metadata.options.showDiscussionsWithNoComments && result.num_comments === 0 ) { continue; } const date = new Date(result.created_at); const renderedDate = `${ monthNames[date.getMonth()] } ${date.getDate()}, ${date.getFullYear()}`; results.push({ link: `https://news.ycombinator.com/item?id=${result.objectID}`, title: result.title, date: renderedDate, comments: result.num_comments, points: result.points, }); } resolve(results); }); } async function init(metadata) { if (metadata.item.type !== "story") { return false; } const storyLink = document .querySelector("span.titleline a") .href.split("://") .pop(); const results = await getSimilarSubmissions(storyLink, metadata); if (results.length === 0) { return false; } const discussionRow = document.createElement("tr"); discussionRow.innerHTML = `
Discussions on similar submissions: