空リンクを置換するPopup Menu
ほしい機能
中身のあるページのリンクも置換したい
例えば公開個人projectと非公開個人projectで使っている同名のリンクを一度に置換する
script.jsscrapbox.PopupMenu.addButton({
title: text => getLink(text) ? 'update links' : '',
onClick: text => {
const link = getLink(text);
if (!link) return;
const newLink = window.prompt(`Replace "${link}" to`, link)?.replace?.(/[\[\]\n]/g, ' ') ?? '';
if (newLink === '') return;
updateLinks(link, newLink);
return;
}
})
function getLink(text) {
return text.match(/\[([^\[!"#%&'()\*\+,\-\.\/\{\|\}<>_~][^\[\]]*)\]/)?.[1];
}
async function updateLinks(from, to, {project} = {}) {
project = project ?? scrapbox.Project.name;
const res = await fetch(`/api/pages/${project}/replace/links`, {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
'X-CSRF-TOKEN': window._csrf,
},
body: JSON.stringify({from, to}),
});
return await res.json();
}