I created the journals
object that links a tag to a nested folder for all my journals. There are multiple issues this solves:
- Journaling across multiple clients in different folders
- Clicking on a link to a new journal entry that doesn't exist (see breadcrumb nested folder)
- Client tagging
In the previous/next links, my link format is:
<< [[<% tag %>-<% tp.date.now("YYYY-MM-DD", -1) %>]] | [[<% tag %>-<% tp.date.now("YYYY-MM-DD", 1) %>]] >>
There are 3 possibilities you might trigger:
- Clicking the Next link and it doesn't exist, which creates a new
Untitled
note in the root folder - Right clicking on a Journal folder and creating a New Note
- Automatic daily note in a folder (really a variant of #2 above)
The critical solution here is to determine if you need to move
the note or rename
it. Choosing the wrong one results in duplicate notes.
To solve for #1, a new note at the root folder must be moved:
const dir = tp.file.folder(true);
const isAtRoot = dir === '/';
...
if (title.startsWith(`${tag}-${year}`) && isAtRoot) {
...
To solve for #2, the new Untitled
note in the correct folder must be renamed:
if (dir.startsWith(folder) && title === 'Untitled')
...
Additionally, this allowed me to customize the template for each journal. For instance, you can see where I do:
<%* if (tag === 'personal') { %>
Weight: #weight
<%* } %>
to customize the template for my personal journal. This can also be done for each client as well if needed.
Here's the template:
---
aliases: ["<% tp.date.now("MMMM Do, YYYY", 0) %>","<% tp.date.now("MMMM D, YYYY", 0) %>","<% tp.date.now("MMM D, YYYY", 0) %>","<% tp.date.now("MMM. D, YYYY", 0) %>","<% tp.date.now("M/D/YYYY", 0) %>","<% tp.date.now("M-D-YYYY", 0) %>","<% tp.date.now("YYYY-MM-DD", 0) %>","<% tp.date.now("M.D.YYYY", 0) %>"]
created: ["<% tp.file.creation_date("YYYY.MM.DD h:mm A") %>"]
---
<%*
const testJournal = t => t.toLowerCase().indexOf("journal") > -1;
const journals = {
personal: "05-Journal",
client1: "02-🏦 Work/Client1/Journal",
client2: "02-🏦 Work/Client2/Journal"
};
const title = tp.file.title;
const dir = tp.file.folder(true);
const isAtRoot = dir === '/';
let isJournal = testJournal(title)
const year = tp.date.now("YYYY");
const month = tp.date.now("YYYY-MM");
const day = tp.date.now("YYYY-MM-DD");
console.log(`title=${title}, dir=${dir}, isJournal=${isJournal}`);
for ([tag, folder] of Object.entries(journals)) {
const journalname = `${tag}-${day}`;
const fullname = `${folder}/${year}/${month}/${journalname}`;
// Here we clicked on the next link and the new note is at the root folder
// Need to move it into the right folder
if (title.startsWith(`${tag}-${year}`) && isAtRoot) {
console.log(`Looks like title starts with ${tag}, so I need to move it into ${fullname}`);
await tp.file.move(fullname);
isJournal = testJournal(fullname);
break;
// Here we either right-clicked and did a new note in the correct folder or a daily note triggered.
// Need to rename and not move
} else if (dir.startsWith(folder) && title === 'Untitled') {
console.log(`Looks like this is a new file in ${dir}, rename to ${journalname}`);
isJournal = testJournal(folder);
await tp.file.rename(journalname);
break;
}
}
%>
<%* if (isJournal) { %>
#<% tag %>
## Journal:
- <%* tp.file.cursor() %>
<%* } %>
<%* if (tag === 'personal') { %>
Weight: #weight
<%* } %>
<< [[<% tag %>-<% tp.date.now("YYYY-MM-DD", -1) %>]] | [[<% tag %>-<% tp.date.now("YYYY-MM-DD", 1) %>]] >>