tritask-scrapbox-betaに並び替え機能を入れる
実装は後回しにする
並び替えが必要に感じられなかった
別の日にやるタスクを末尾に移動させる
inboxを先頭に移動させる
inboxは存在しない
標準で行の入れ替え操作が備わっている
別の日のタスクは、最終的に別の日付ページに転送する
実装が面倒そう
少なくともインデントブロックを識別するAPIを作って置く必要がある
/icons/hr.icon
仕様
選択範囲ではなく、ページすべてに適用する
実装
インデントのブロックを取得するコードが必要
流れ
並び替えの範囲を取得する
Alt+矢印キーでブロックごと移動させる
移動量の計算
間にあるトップレベルのインデントの数を使う
移動先
末尾にする
そうすればタスク以外の行が自動的に先頭に集まる
code:script.js_wip
import {selection} from '/api/code/takker/scrapbox-selection-2/script.js';
import {scrapboxDOM} from '/api/code/takker/scrapbox-dom-accessor/script.js';
import {goLine, goHead, enterEdit, upLines} from '/api/code/takker/scrapbox-edit-emulation/script.js';
import {line as l} from '/api/code/takker/scrapbox-line-info-2/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 sortLines() {
const sortedLineDOMs = scrapbox.Page.lines
.slice(startNo, 1 + endNo)
.map((line, i) => {return {lineDOM: scrapboxDOM.lines.childreni + startNo, text: line.text}}) .sort((a,b)=>new Intl.Collator().compare(a.text,b.text))
.map(({lineDOM}) => lineDOM);
// 一番上から順に入れ替え作業をする
let insertPosition = startNo;
for (const lineDOM of sortedLineDOMs) {
const presentPosition = l(lineDOM).index; // 現在の行の位置
if (presentPosition !== insertPosition) {
goLine({index: presentPosition});
await sleep(10);
upLines(presentPosition - insertPosition);
}
insertPosition++;
}
}
const sleep = milliseconds => new Promise(resolve => setTimeout(resolve, milliseconds));