takker-scheduler-3/logger
2021-05-03 18:51:51 殆ど使っていなかったが、ついにUserScriptから外した
代わりにtakker-scheduler-3/syncを使う
/icons/hr.icon
log page (takker-scheduler-3)を手動で作成するmodule
記録の詳細ページは作成しない
takker-scheduler-3で変えたいところ#604f4dec1280f000005cbba4
2021-03-22
19:06:37 log page (takker-scheduler-3)に移したら、 loggedをtask line (takker-scheduler-3)につけるようにした
ページ全体に対して実行できるようにした
2021-03-18
08:29:32 完了したタスクのみ記録するように変更した
08:19:55 コードを分割した
code:script.js
import {goLine} from '../scrapbox-motion-emulation/script.js';
import {insertText} from '../scrapbox-insert-text-2/script.js';
import {selection} from '../scrapbox-selection-2/script.js';
import {cursor} from '../scrapbox-cursor-position-5/script.js';
import {parse, set, toString} from '../takker-scheduler-3%2Ftask/script.js';
import {lightFormat} from '../date-fns.min.js/script.js';
export async function openLogPages(project) {
// 検索する範囲
const {startNo, endNo} = selection.exist ?
(() => {
const {start,end} = selection.range;
//console.log({start,end});
return {startNo: start.lineNo, endNo: end.lineNo};
})() :
// 選択範囲がなかったらページ全体を対象とする
{startNo: 0, endNo: scrapbox.Page.lines.length - 1};
const logs = ...Array(endNo - startNo + 1).keys()
.flatMap(i => {
const data = makeLogData(i + startNo, project);
return data ? data : [];
});
// 移動したtask lineに印をつける
for(const {lineNo} of logs) {
await goLine(lineNo);
await insertText(' logged');
}
//まとめて開く
for (const {title, body} of logs) {
window.open(https://scrapbox.io/${project}/${encodeURIComponent(title)}?body=${encodeURIComponent(body)});
}
}
function makeLogData(lineNo, project) {
const taskLine = parse(lineNo);
if (!taskLine) return; // タスクでなければ何もしない
if (taskLine.title.endsWith(' logged')) return;
const rawTitle = commonTaskName(taskLine.title).trim();
const title = Log | ${rawTitle};
const permalink = [${scrapbox.Page.title}#${scrapbox.Page.lines[lineNo].id}];
const {record} = taskLine;
if (!record?.start || !record?.end) return;
const body = [
${taskLine.title !== rawTitle ? taskLine.title : permalink},
lightFormat(record.start, 'yyyy-MM-dd HH:mm:ss'),
lightFormat(record.end, 'yyyy-MM-dd HH:mm:ss'),
].join('\t');
return {lineNo, title, body};
}
日付とリンクを外してlog page (takker-scheduler-3)のタイトルを取得する
code:script.js
function commonTaskName(title) {
return title.trim()
.replace(/\(.+?)\s\d{4}-\d{2}-\d{2}\/, '$1')
.replace(/\[\d{4}-\d{2}-\d{2}\s(^\]+)\]/, '$1')
.replace(/[\\\n]/g, '');
}
#2021-05-03 18:55:18
#2021-03-22 16:12:40
#2021-03-18 08:21:06
#2021-03-15 00:11:47