otofune
https://github.com/otofune.png /otofune/otofune.icon
↑ SendGrid みたいだね
こいつは新規投稿を押したときに記事テンプレを適用してくれる UserScript
code:script.js
(() => {
const fill = (s, length, fill) =>
${fill}.repeat(length - ${s}.length) + s;
const project = "otofune-diary";
const sleep = (ms) => new Promise((res) => setTimeout(() => res(), ms));
const isPageCreated = async (title) => {
const page = await fetch(/api/pages/${project}/${title}).then((r) =>
r.json()
);
if (page.descriptions.length) {
console.log(${title} was already created!);
return true;
}
return false;
};
const onNew = async () => {
const now = new Date();
const toString = (d) =>
`${d.getFullYear()}.${fill(d.getMonth() + 1, 2, 0)}.${fill(
d.getDate(),
2,
0
)}`;
const newPageTitle = toString(now);
if (await isPageCreated(newPageTitle)) {
console.log("already created!");
return;
}
const prev = new Date();
prev.setDate(now.getDate() - 1);
const next = new Date();
next.setDate(now.getDate() + 1);
prev
// ?body= の URL が履歴に残ったりすると追記が走って不愉快なので、iframe で作成させてから遷移する
const createIframe = document.createElement("iframe");
createIframe.style =
"position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 10000;";
createIframe.src = `/${project}/${newPageTitle}?body=${encodeURIComponent(
body
)}`;
document.body.appendChild(createIframe);
while (true) {
console.log("sleeping while document created");
if (await isPageCreated(newPageTitle)) break;
await sleep(200);
}
location.href = /${project}/${newPageTitle};
};
const onMove = (p) => {
console.log(p);
if (p.endsWith(/${project}/new)) {
console.log("hooking new");
onNew(p);
}
};
const enableEventHandleOnPushState = (h) => () => {
const orig = history.pushState.bind(history);
history.pushState = (state, title, path) => {
h(path);
return orig(state, title, path);
};
};
enableEventHandleOnPushState(onMove)();
})();
code:script.js
code:script.js