append-page
UserScript
/villagepump/2021/05/01#e4408cyosider
PageMenu
UserScript
?? New Pageyosider
takker
project
PopupMenuyosider
yosider
Mobile使PageMenu
PageMenuyosider
()takker

import
projects
useSendingMark : true to [/project/title]
public project使false
useReferenceMark : true from [/project/title]
private project使false
import { initAppendPage } from '/api/code/programming-notes/append-page/script.js'
initAppendPage({
projects: [
'programming-notes',
'villagepump',
],
useSendingMark: true, // add "to <dst>" to the end of src page
useReferenceMark: false, // add "from <src>" to the end of dst page
});

code
export function initAppendPage({ projects, ...rest }) {
const title = 'Append page to ...';
scrapbox.PageMenu.addMenu({
title: title,
image: 'https://gyazo.com/d68f429b8e8a1dd68504506262bcd05c/raw',
onClick: () => {
const menu = scrapbox.PageMenu(title);
menu.removeAllItems();
projects.map(async project => menu.addItem({
title: project,
image: (await (await fetch(`/api/projects/${project}`)).json()).image,
onClick: () => append({ project, ...rest }),
}));
}
})
}
async function append({ project, useSendingMark, useReferenceMark }) {
const pageTitle = scrapbox.Page.title;
const pageTitleEnc = encodeURIComponent(scrapbox.Page.title);
let lines = scrapbox.Page.lines;
// sending mark, reference mark
const refMark = `from [/${scrapbox.Project.name}/${pageTitle}]`;
const sendMark = `to [/${project}/${pageTitle}]`;
const _lines = lines.filter(line => ![refMark, sendMark].includes(line.text));
const hasMark = lines.length - _lines.length > 0;
let body = _lines.slice(1).map(line => line.text).join('\n').trim() + '\n';
// reference mark
if (useReferenceMark) body += `\n${refMark}\n`;
window.open(`https://scrapbox.io/${project}/${pageTitleEnc}?body=${encodeURIComponent(body)}`);
// sending mark
if (useSendingMark && !hasMark) {
window.open(`https://scrapbox.io/${scrapbox.Project.name}/${pageTitleEnc}?body=${encodeURIComponent(`${sendMark}\n`)}`, "_self");
}
}