## 事象 [[Minerva]]に、[[Obsidian]]のノートのPropertiesに[作成日と更新日を追加するスクリプト](#関連メモ・リンク)があり、たいへんにありがたい。基本的にうまく動いているが、下記が期待通りではないので調整したい。 - カーソルが1行目にあるとき、1行目が空行となり、Propertiesが2行目から挿入される - Propertiesの下に空行なく本文がはじまる(1行空行を入れてほしい) - Propertiesが新規に挿入された場合、メッセージが表示されない ## 関連メモ・リンク 作成日と更新日はフロントマターに記載: - [💿MIN-0019 作成日と最終更新日はフロントマターに記録する - Minerva](https://minerva.mamansoft.net/%F0%9F%92%BFADR/%F0%9F%92%BFMIN-0019+%E4%BD%9C%E6%88%90%E6%97%A5%E3%81%A8%E6%9C%80%E7%B5%82%E6%9B%B4%E6%96%B0%E6%97%A5%E3%81%AF%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%83%9E%E3%82%BF%E3%83%BC%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%99%E3%82%8B) [[Obsidian Publish]]で、プロパティを表示させる方法: - [📗Obsidian Publishのサイトにプロパティ\(メタデータ\)を表示したい - Minerva](https://minerva.mamansoft.net/%F0%9F%93%97Obsidian%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94/%F0%9F%93%97Obsidian+Publish%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3(%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF)%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%9F%E3%81%84) Templaterプラグインを利用し、自動更新(追加)する方法: - [📗カレントファイルのフロントマターを今日の日付で更新したい - Minerva](https://minerva.mamansoft.net/%F0%9F%93%97Obsidian%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94/%F0%9F%93%97%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%83%9E%E3%82%BF%E3%83%BC%E3%82%92%E4%BB%8A%E6%97%A5%E3%81%AE%E6%97%A5%E4%BB%98%E3%81%A7%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%84) - [ノートに作成日と更新日を任意の位置に配置する方法 · Issue #13 · tadashi-aikawa/obsidian-questions · GitHub](https://github.com/tadashi-aikawa/obsidian-questions/issues/13) ## 対応ログ Templaterのスクリプトを下記に変更。 ```javascript <%* // Front matterのキー const KEY = 'updated' // 値の日時フォーマット const date = tp.date.now("YYYY-MM-DD") const UPDATED = `${KEY}: ${date}` const editor = app.workspace.activeLeaf.view.editor const updatedFrontMatter = tp.frontmatter.updated if (updatedFrontMatter) { const index = await tp.user.replace_line_at_word_starts(KEY + ": ", UPDATED) if (index !== undefined) { new Notice("最終更新日を更新しました") } else { new Notice("最終更新日を更新しようとしましたが失敗しました") } return } const frontMatterBody = ` created: ${date} updated: ${date} `.trim() const hasFrontMatter = Object.keys(tp.frontmatter).length > 0 if (hasFrontMatter) { await tp.user.insert_new_line_at_word_found("---", frontMatterBody) return } const noteBody = `--- ${frontMatterBody} --- ` // await tp.user.insert_new_line_at_first(noteBody) try { await tp.user.insert_new_line_at_first(noteBody); new Notice("Propertiesに作成日と更新日を追加しました"); } catch (error) { console.error("エラーが発生しました: ", error); new Notice("Propertiesの追加に失敗しました"); } -%> ``` ## 変更箇所と解決する問題 ```javascript -%> ``` - カーソルが1行目にあるとき、1行目が空行となり、Propertiesが2行目から挿入される に対し、Templaterが前後に改行を入れないように変更し、解消。 ```javascript const noteBody = `--- ${frontMatterBody} --- ` ``` - Propertiesの下に空行なく本文がはじまる(1行空行を入れてほしい) に対し、新規プロパティを追加する際、1行空行を入れ、解消。 ```javascript try { await tp.user.insert_new_line_at_first(noteBody); new Notice("Propertiesに作成日と更新日を追加しました"); } catch (error) { console.error("エラーが発生しました: ", error); new Notice("Propertiesの追加に失敗しました"); } ``` - Propertiesが新規に挿入された場合、メッセージが表示されない プロパティ追加に成功した場合、通知を出すことにして、解消。 ## 余談 ユーザスクリプト`tp.user.insert_new_line_at_word_found`などについて、ファイル名はそれぞれ - `insert_new_line_at_word_found.js` - `insert_new_line_at_first.js` - `replace_line_at_word_starts.js` が正解。`tp.user.insert_new_line_at_first.js`としていてハマったのでここに記す。