#Templater
## 経緯
[[Obsidian]]の[[デイリーノート]]に以下を記録したい。
- その日に作成したNoteの一覧とリンク
- その日に修正したNoteの一覧とリンク
## 方法
[[Templater]]プラグインを使って自動出力する。以下のコードをTemplateに登録する。
```javascript
<%*
const thisDay = this.app.workspace.getActiveFile().basename;
const start = moment(thisDay).valueOf();
const end = moment(start).endOf('day').valueOf();
const isCreated = (file, start, end) => file.stat
&& file.stat.ctime >= start
&& file.stat.ctime <= end;
const isModified = (file, start, end) => file.stat
&& file.stat.mtime >= start
&& file.stat.mtime <= end;
const isUpdated = (file, start, end) =>
isModified(file, start, end) && !isCreated(file, start, end);
const isPublicNote = (file) => !file.path.startsWith("_") && file.extension === "md";
const groupBy = (values, toKey) =>
values.reduce(
(prev, cur, _1, _2, k = toKey(cur)) => (
(prev[k] || (prev[k] = [])).push(cur), prev
),
{}
);
const files = Object.values(this.app.vault.fileMap);
tR += "\n\n----\n\n"
tR += "## Created"
const created = groupBy(
files.filter(x => isCreated(x, start, end) && isPublicNote(x)),
x => x.parent?.name,
);
Object.entries(created).map(([dir, files]) => {
tR += `\n\n### ${dir}\n\n`
tR += files.map(x => `- [[${x.basename}]]`).join("\n");
})
tR += "\n\n----\n\n"
tR += "\n## Updated"
const updated = groupBy(
files.filter(x => isUpdated(x, start, end) && isPublicNote(x)),
x => x.parent?.name,
);
Object.entries(updated).map(([dir, files]) => {
tR += `\n\n### ${dir}\n\n`
tR += files.map(x => `- [[${x.basename}]]`).join("\n");
})
%>
```
あとは名前をつけて実行する。私の場合は`Daily Note Retrospective`にした。
## 出力イメージ
カーソル位置に以下のプレビュー相当が出力される。見出し3はファイルが存在するディレクトリ名。rootの場合は何も空行として扱われる。
![[2021-05-30_23h46_06.png]]