generated at
custom-new-page
ページの切り出しを自分好みにカスタマイズしたUserScript

機能
新しいページをbackgrondで書き込む
別のprojectに書き込んだり、複数のページに書き込んだりもできる
別のページの末尾以外の箇所にも挿入できる

実装したいこと
CIの導入
JSDocを書く

2023-05-23 07:39:24


mod.ts
export * from "https://raw.githubusercontent.com/takker99/custom-new-page/0.5.0/mod.ts";

以下はgitに移行次第削除するか、別のページに写す

hr
Next version: custom-new-page-2
切り出し元のページに残すテキストと、切り出し後に開くページに流し込むテキストを設定できる
複数のページに切り出すこともできる
2021-01-21
12:06:28 ページを書き換える前にすべての解析を終わらせられるようにした
02:20:55 余計なインデントをcutする函数を公開した

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 を返したら切り出しを中断する
script.js
function 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.js
export function cutIndent(texts) { const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)[0].length)); return texts.map(text => text.slice(minIndentNum)); }

#2023-05-23 07:38:45
#2021-03-15 07:31:33
#2021-01-21 00:46:46
#2021-01-20 23:32:17