選択範囲無しでページを切り出すUserScript
実装
script.jsimport {cursor} from '/api/code/takker/scrapbox-cursor-position-4/script.js';
import {goLine, goHeadWithoutBlank} from '/api/code/takker/scrapbox-edit-emulation/script.js';
import {press} from '/api/code/takker/scrapbox-keyboard-emulation-2/script.js';
import {insertText} from '/api/code/takker/scrapbox-insert-text/script.js';
export async function isolate({project}) {
// 現在行番号を取得する
const cline = cursor().line;
const firstLineNo = cline.index;
const lastLineNo = firstLineNo + cline.indentBlockLength;
// テキストを取得する
const texts = scrapbox.Page.lines.slice(firstLineNo, lastLineNo + 1)
.map(line => line.text);
const title = texts[0].replace(/[\[\]\n]/g, '').trim();
// 余計なインデントを削る
const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)[0].length));
const bodies = [`from [${scrapbox.Page.title}]`,
...texts.map(text => text.slice(
minIndentNum > 1 ? minIndentNum - 1 : minIndentNum
)),
];
// リンクにする
// リンクを入れる行はインデントをそのままにする
goLine(cline.id);
goHeadWithoutBlank();
press('End', {shiftKey: true});
for(let i = firstLineNo; i < lastLineNo; i++) {
press('ArrowDown', {shiftKey: true});
press('End', {shiftKey: true}); // Endをおして折返し行を確実に全て選択する
}
insertText({text: `[${title}]`});
// 個別のpageに切り出す
const body = encodeURIComponent(bodies.join('\n'));
window.open(`https://scrapbox.io/${project}/${title}?body=${body}`);
}