append-page
現在のページの内容を、他のプロジェクトの同名ページに追記するUserScript
送り先のプロジェクトをPageMenuから選べる
?? New Pageってページの切り出しのことですか?yosider.icon それですtakker.icon
選択範囲を外部projectに切り出したい
なるほど、、ただPopupMenuだと送り先は固定にするしか無さそうyosider.icon なるほど…yosider.icon
Mobileでも使えるようにするにはPageMenu一択だけど
PageMenuで選択範囲を取得できるんですかね?yosider.icon 選択範囲から座標計算と当たり判定やって文字列を取得するんだぞ(狂気)takker.icon
わお…さすがですw
import
https://gyazo.com/b8952977491b1ea0cd035ac335473bd1
projectsに送り先のプロジェクトリストを指定
useSendingMark: trueにすると送り元ページ末尾にto [/送り先project/title]がつく
useReferenceMark: trueにすると送り先ページ末尾にfrom [/送り元project/title]がつく
code: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
code:script.js
export function initAppendPage({ projects, ...rest }) {
const title = 'Append page to ...';
scrapbox.PageMenu.addMenu({
title: title,
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 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");
}
}