custom-new-page
機能
新しいページをbackgrondで書き込む
別のprojectに書き込んだり、複数のページに書き込んだりもできる
別のページの末尾以外の箇所にも挿入できる
実装したいこと
CIの導入
JSDocを書く
2023-05-23 07:39:24
code:mod.ts
以下はgitに移行次第削除するか、別のページに写す
/icons/hr.icon
切り出し元のページに残すテキストと、切り出し後に開くページに流し込むテキストを設定できる
複数のページに切り出すこともできる
2021-01-21
12:06:28 ページを書き換える前にすべての解析を終わらせられるようにした
02:20:55 余計なインデントをcutする函数を公開した
code:script.js
import {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を返したら切り出しを中断する
code:script.js
function getLeavingText({texts, index, project, title}) {
const link = texts0.replace(/[\\]/g, '').trim(); return ${texts[0].replace(/^(\s*).*$/, '$1')}[${link}];
}
function getNewPagesData({texts, index, project, title}) {
const link = texts0.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,
}];
}
インデントを削る函数
code:script.js
export function cutIndent(texts) {
const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)0.length)); return texts.map(text => text.slice(minIndentNum));
}