generated at
append-page
現在のページの内容を、他のプロジェクトの同名ページに追記するUserScript
送り先のプロジェクトをPageMenuから選べる
他のプロジェクトにページを送るUserScriptと同様に、送り元・送り先ページへのリンクを追記するかどうか選べるようにしている
New Page (Scrapbox)版もほしいtakker
?? New Pageってページの切り出しのことですか?yosider
それですtakker
選択範囲を外部projectに切り出したい
なるほど、、ただPopupMenuだと送り先は固定にするしか無さそうyosider
なるほど…yosider
Mobileでも使えるようにするにはPageMenu一択だけど
PageMenuで選択範囲を取得できるんですかね?yosider
選択範囲から座標計算と当たり判定やって文字列を取得するんだぞ(狂気)takker
わお…さすがですw

import
projects に送り先のプロジェクトリストを指定
useSendingMark : trueにすると送り元ページ末尾に to [/送り先project/title] がつく
public projectから使うときはfalseにしたほうがいいかも
useReferenceMark : trueにすると送り先ページ末尾に from [/送り元project/title] がつく
private projectから使うときはfalseにしたほうがいいかも?
script-for-import.js
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
script.js
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"); } }