generated at
tritask-scrapbox-betaに並び替え機能を入れる
実装は後回しにする
並び替えが必要に感じられなかった
本家Tritaskでは必要だった
別の日にやるタスクを末尾に移動させる
inboxを先頭に移動させる
tritask-scrapbox-betaでは必要ない
inboxは存在しない
標準で行の入れ替え操作が備わっている
別の日のタスクは、最終的に別の日付ページに転送する
実装が面倒そう
少なくともインデントブロックを識別するAPIを作って置く必要がある
tritask-scrapboxには実装した
hr
tritask-scrapbox-betaの機能拡張その1
ページ内の全てのtritask task blockを並べ替える

仕様
選択範囲ではなく、ページすべてに適用する
tritask task block以外の行は、並び順を維持したまま先頭に集めておく

実装
インデントのブロックを取得するコードが必要
scrapbox-line-info-2に追加したいな
流れ
tritask task lineを取得する
並び替えの範囲を取得する
Alt +矢印キーでブロックごと移動させる
移動量の計算
間にあるトップレベルのインデントの数を使う
移動先
末尾にする
そうすればタスク以外の行が自動的に先頭に集まる

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.children[i + 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));

#2021-01-05 20:34:37
#2021-01-02 07:13:55