井戸端の底
井戸端のlast updated順で一番下の方にあるページって何だろう

ほい

jsimport {browse} from "https://scrapbox.io/api/code/villagepump/井戸端の底/browse.js";
await browse("updated");
last visitedの一番下も気になる
ほい

jsimport {browse} from "https://scrapbox.io/api/code/villagepump/井戸端の底/browse.js";
await browse("accessed");
井戸端の井戸の底?
browse.d.tsexport type SortOptions = "updated" | "accessed" | "views" | "created" | "linked" | "pageRank";
export function browse(type: SortOptions, project?: string): Promise<void>;
browse.jsimport {fetchPages} from "https://scrapbox.io/api/code/villagepump/井戸端の底/fetch.js";
export async function browse(type, project = scrapbox.Project.name) {
const pages = await fetchPages(project);
const messages = pages
.sort((a, b) => a[type] - b[type])
.map(({title}) => title);
console.log(messages);
alert(messages.map((title, index) => `${index + 1}\t${title}`).join("\n"));
}
alert()で表示できる最大文字数を軽く超えてしまったので、正確なリストはコンソールの方を見てください
fetch.jsexport async function fetchPages(project) {
const pageNum = await getProjectPageCount(project); //取得するページ数
const limitParam = pageNum > 1000 ? 1000 : pageNum; // APIで一度に取得するページ数
const maxIndex = pageNum > 1000 ? Math.floor(pageNum / 1000) + 1 : 1; // APIを叩く回数
// 一気にAPIを叩いてページ情報を取得する
return (
await Promise.all(
[...Array(maxIndex).keys()]
.map(async (index) => {
const res = await fetch(`/api/pages/${project}/?limit=${limitParam}&skip=${index*1000}`);
const {pages} = await res.json();
return pages;
})
)
).flat();
}
fetch.jsasync function getProjectPageCount(project) {
try {
const response = await fetch(`/api/pages/${project}/?limit=1`);
if(!response.ok) throw Error(`Invalid response. status code: ${response.status}`);
const json = await response.json();
return parseInt(json.count);
} catch(e) {
throw e;
}
}