custom-new-page
機能
新しいページをbackgrondで書き込む
別のprojectに書き込んだり、複数のページに書き込んだりもできる
別のページの末尾以外の箇所にも挿入できる
実装したいこと
CIの導入
JSDocを書く
2023-05-23 07:39:24
mod.tsexport * from "https://raw.githubusercontent.com/takker99/custom-new-page/0.5.0/mod.ts";
以下はgitに移行次第削除するか、別のページに写す
切り出し元のページに残すテキストと、切り出し後に開くページに流し込むテキストを設定できる
複数のページに切り出すこともできる
2021-01-21
12:06:28 ページを書き換える前にすべての解析を終わらせられるようにした
02:20:55 余計なインデントをcutする函数を公開した
script.jsimport {cursor} from '/api/code/takker/scrapbox-cursor-position-4/script.js';
import {goLine, goHead} 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({leftText = getLeavingText,
newPages= getNewPagesData} = {}) {
const title = scrapbox.Page.title;
// 現在行番号を取得する
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);
// 元のページの文字を置換する
goLine(cline.id);
goHead();
press('End', {shiftKey: true});
for(let i = firstLineNo; i < lastLineNo; i++) {
press('ArrowDown', {shiftKey: true});
press('End', {shiftKey: true}); // Endをおして折返し行を確実に全て選択する
}
const text = leftText({texts, index: firstLineNo, project: scrapbox.Project.name, title: scrapbox.Page.title});
const pagesData = newPages({texts, index: firstLineNo, project: scrapbox.Project.name, title: scrapbox.Page.title})
if (text === undefined) return;
insertText({text});
// 個別のpageに切り出す
for (const {project, title: targetTitle, bodies} of pagesData) {
const _title = encodeURIComponent(targetTitle);
const body = encodeURIComponent(bodies.join('\n'));
window.open(`https://scrapbox.io/${project}/${targetTitle}?body=${body}`);
}
}
defaultのカスタム函数
undefined
を返したら切り出しを中断する
script.jsfunction getLeavingText({texts, index, project, title}) {
const link = texts[0].replace(/[\[\]]/g, '').trim();
return `${texts[0].replace(/^(\s*).*$/, '$1')}[${link}]`;
}
function getNewPagesData({texts, index, project, title}) {
const link = texts[0].replace(/[\[\]]/g, '');
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
)),
];
return [{
project,
title: link,
bodies,
}];
}
インデントを削る函数
script.jsexport function cutIndent(texts) {
const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)[0].length));
return texts.map(text => text.slice(minIndentNum));
}