obsidian-daily-notes-interface
Advanced tools
Comparing version 0.9.3 to 0.9.4
215
dist/main.js
@@ -10,2 +10,4 @@ 'use strict'; | ||
const DEFAULT_MONTHLY_NOTE_FORMAT = "YYYY-MM"; | ||
const DEFAULT_QUARTERLY_NOTE_FORMAT = "YYYY-[Q]Q"; | ||
const DEFAULT_YEARLY_NOTE_FORMAT = "YYYY"; | ||
@@ -53,4 +55,3 @@ function shouldUsePeriodicNotesSettings(periodicity) { | ||
const calendarSettings = pluginManager.getPlugin("calendar")?.options; | ||
const periodicNotesSettings = pluginManager.getPlugin("periodic-notes") | ||
?.settings?.weekly; | ||
const periodicNotesSettings = pluginManager.getPlugin("periodic-notes")?.settings?.weekly; | ||
if (shouldUsePeriodicNotesSettings("weekly")) { | ||
@@ -95,2 +96,44 @@ return { | ||
} | ||
/** | ||
* Read the user settings for the `periodic-notes` plugin | ||
* to keep behavior of creating a new note in-sync. | ||
*/ | ||
function getQuarterlyNoteSettings() { | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
const pluginManager = window.app.plugins; | ||
try { | ||
const settings = (shouldUsePeriodicNotesSettings("quarterly") && | ||
pluginManager.getPlugin("periodic-notes")?.settings?.quarterly) || | ||
{}; | ||
return { | ||
format: settings.format || DEFAULT_QUARTERLY_NOTE_FORMAT, | ||
folder: settings.folder?.trim() || "", | ||
template: settings.template?.trim() || "", | ||
}; | ||
} | ||
catch (err) { | ||
console.info("No custom quarterly note settings found!", err); | ||
} | ||
} | ||
/** | ||
* Read the user settings for the `periodic-notes` plugin | ||
* to keep behavior of creating a new note in-sync. | ||
*/ | ||
function getYearlyNoteSettings() { | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
const pluginManager = window.app.plugins; | ||
try { | ||
const settings = (shouldUsePeriodicNotesSettings("yearly") && | ||
pluginManager.getPlugin("periodic-notes")?.settings?.yearly) || | ||
{}; | ||
return { | ||
format: settings.format || DEFAULT_YEARLY_NOTE_FORMAT, | ||
folder: settings.folder?.trim() || "", | ||
template: settings.template?.trim() || "", | ||
}; | ||
} | ||
catch (err) { | ||
console.info("No custom yearly note settings found!", err); | ||
} | ||
} | ||
@@ -201,2 +244,4 @@ // Credit: @creationix/path.js | ||
month: getMonthlyNoteSettings, | ||
quarter: getQuarterlyNoteSettings, | ||
year: getYearlyNoteSettings, | ||
}; | ||
@@ -453,2 +498,142 @@ const format = getSettings[granularity]().format.split("/").pop(); | ||
class QuarterlyNotesFolderMissingError extends Error { | ||
} | ||
/** | ||
* This function mimics the behavior of the daily-notes plugin | ||
* so it will replace {{date}}, {{title}}, and {{time}} with the | ||
* formatted timestamp. | ||
* | ||
* Note: it has an added bonus that it's not 'today' specific. | ||
*/ | ||
async function createQuarterlyNote(date) { | ||
const { vault } = window.app; | ||
const { template, format, folder } = getQuarterlyNoteSettings(); | ||
const [templateContents, IFoldInfo] = await getTemplateInfo(template); | ||
const filename = date.format(format); | ||
const normalizedPath = await getNotePath(folder, filename); | ||
try { | ||
const createdFile = await vault.create(normalizedPath, templateContents | ||
.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { | ||
const now = window.moment(); | ||
const currentDate = date.clone().set({ | ||
hour: now.get("hour"), | ||
minute: now.get("minute"), | ||
second: now.get("second"), | ||
}); | ||
if (calc) { | ||
currentDate.add(parseInt(timeDelta, 10), unit); | ||
} | ||
if (momentFormat) { | ||
return currentDate.format(momentFormat.substring(1).trim()); | ||
} | ||
return currentDate.format(format); | ||
}) | ||
.replace(/{{\s*date\s*}}/gi, filename) | ||
.replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")) | ||
.replace(/{{\s*title\s*}}/gi, filename)); | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
window.app.foldManager.save(createdFile, IFoldInfo); | ||
return createdFile; | ||
} | ||
catch (err) { | ||
console.error(`Failed to create file: '${normalizedPath}'`, err); | ||
new obsidian.Notice("Unable to create new file."); | ||
} | ||
} | ||
function getQuarterlyNote(date, quarterly) { | ||
return quarterly[getDateUID(date, "quarter")] ?? null; | ||
} | ||
function getAllQuarterlyNotes() { | ||
const quarterly = {}; | ||
if (!appHasQuarterlyNotesPluginLoaded()) { | ||
return quarterly; | ||
} | ||
const { vault } = window.app; | ||
const { folder } = getQuarterlyNoteSettings(); | ||
const quarterlyFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); | ||
if (!quarterlyFolder) { | ||
throw new QuarterlyNotesFolderMissingError("Failed to find quarterly notes folder"); | ||
} | ||
obsidian.Vault.recurseChildren(quarterlyFolder, (note) => { | ||
if (note instanceof obsidian.TFile) { | ||
const date = getDateFromFile(note, "quarter"); | ||
if (date) { | ||
const dateString = getDateUID(date, "quarter"); | ||
quarterly[dateString] = note; | ||
} | ||
} | ||
}); | ||
return quarterly; | ||
} | ||
class YearlyNotesFolderMissingError extends Error { | ||
} | ||
/** | ||
* This function mimics the behavior of the daily-notes plugin | ||
* so it will replace {{date}}, {{title}}, and {{time}} with the | ||
* formatted timestamp. | ||
* | ||
* Note: it has an added bonus that it's not 'today' specific. | ||
*/ | ||
async function createYearlyNote(date) { | ||
const { vault } = window.app; | ||
const { template, format, folder } = getYearlyNoteSettings(); | ||
const [templateContents, IFoldInfo] = await getTemplateInfo(template); | ||
const filename = date.format(format); | ||
const normalizedPath = await getNotePath(folder, filename); | ||
try { | ||
const createdFile = await vault.create(normalizedPath, templateContents | ||
.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { | ||
const now = window.moment(); | ||
const currentDate = date.clone().set({ | ||
hour: now.get("hour"), | ||
minute: now.get("minute"), | ||
second: now.get("second"), | ||
}); | ||
if (calc) { | ||
currentDate.add(parseInt(timeDelta, 10), unit); | ||
} | ||
if (momentFormat) { | ||
return currentDate.format(momentFormat.substring(1).trim()); | ||
} | ||
return currentDate.format(format); | ||
}) | ||
.replace(/{{\s*date\s*}}/gi, filename) | ||
.replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")) | ||
.replace(/{{\s*title\s*}}/gi, filename)); | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
window.app.foldManager.save(createdFile, IFoldInfo); | ||
return createdFile; | ||
} | ||
catch (err) { | ||
console.error(`Failed to create file: '${normalizedPath}'`, err); | ||
new obsidian.Notice("Unable to create new file."); | ||
} | ||
} | ||
function getYearlyNote(date, yearlyNotes) { | ||
return yearlyNotes[getDateUID(date, "year")] ?? null; | ||
} | ||
function getAllYearlyNotes() { | ||
const yearlyNotes = {}; | ||
if (!appHasYearlyNotesPluginLoaded()) { | ||
return yearlyNotes; | ||
} | ||
const { vault } = window.app; | ||
const { folder } = getYearlyNoteSettings(); | ||
const yearlyNotesFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); | ||
if (!yearlyNotesFolder) { | ||
throw new YearlyNotesFolderMissingError("Failed to find yearly notes folder"); | ||
} | ||
obsidian.Vault.recurseChildren(yearlyNotesFolder, (note) => { | ||
if (note instanceof obsidian.TFile) { | ||
const date = getDateFromFile(note, "year"); | ||
if (date) { | ||
const dateString = getDateUID(date, "year"); | ||
yearlyNotes[dateString] = note; | ||
} | ||
} | ||
}); | ||
return yearlyNotes; | ||
} | ||
function appHasDailyNotesPluginLoaded() { | ||
@@ -485,2 +670,14 @@ const { app } = window; | ||
} | ||
function appHasQuarterlyNotesPluginLoaded() { | ||
const { app } = window; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
const periodicNotes = app.plugins.getPlugin("periodic-notes"); | ||
return periodicNotes && periodicNotes.settings?.quarterly?.enabled; | ||
} | ||
function appHasYearlyNotesPluginLoaded() { | ||
const { app } = window; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
const periodicNotes = app.plugins.getPlugin("periodic-notes"); | ||
return periodicNotes && periodicNotes.settings?.yearly?.enabled; | ||
} | ||
function getPeriodicNoteSettings(granularity) { | ||
@@ -491,2 +688,4 @@ const getSettings = { | ||
month: getMonthlyNoteSettings, | ||
quarter: getQuarterlyNoteSettings, | ||
year: getYearlyNoteSettings, | ||
}[granularity]; | ||
@@ -506,13 +705,21 @@ return getSettings(); | ||
exports.DEFAULT_MONTHLY_NOTE_FORMAT = DEFAULT_MONTHLY_NOTE_FORMAT; | ||
exports.DEFAULT_QUARTERLY_NOTE_FORMAT = DEFAULT_QUARTERLY_NOTE_FORMAT; | ||
exports.DEFAULT_WEEKLY_NOTE_FORMAT = DEFAULT_WEEKLY_NOTE_FORMAT; | ||
exports.DEFAULT_YEARLY_NOTE_FORMAT = DEFAULT_YEARLY_NOTE_FORMAT; | ||
exports.appHasDailyNotesPluginLoaded = appHasDailyNotesPluginLoaded; | ||
exports.appHasMonthlyNotesPluginLoaded = appHasMonthlyNotesPluginLoaded; | ||
exports.appHasQuarterlyNotesPluginLoaded = appHasQuarterlyNotesPluginLoaded; | ||
exports.appHasWeeklyNotesPluginLoaded = appHasWeeklyNotesPluginLoaded; | ||
exports.appHasYearlyNotesPluginLoaded = appHasYearlyNotesPluginLoaded; | ||
exports.createDailyNote = createDailyNote; | ||
exports.createMonthlyNote = createMonthlyNote; | ||
exports.createPeriodicNote = createPeriodicNote; | ||
exports.createQuarterlyNote = createQuarterlyNote; | ||
exports.createWeeklyNote = createWeeklyNote; | ||
exports.createYearlyNote = createYearlyNote; | ||
exports.getAllDailyNotes = getAllDailyNotes; | ||
exports.getAllMonthlyNotes = getAllMonthlyNotes; | ||
exports.getAllQuarterlyNotes = getAllQuarterlyNotes; | ||
exports.getAllWeeklyNotes = getAllWeeklyNotes; | ||
exports.getAllYearlyNotes = getAllYearlyNotes; | ||
exports.getDailyNote = getDailyNote; | ||
@@ -526,4 +733,8 @@ exports.getDailyNoteSettings = getDailyNoteSettings; | ||
exports.getPeriodicNoteSettings = getPeriodicNoteSettings; | ||
exports.getQuarterlyNote = getQuarterlyNote; | ||
exports.getQuarterlyNoteSettings = getQuarterlyNoteSettings; | ||
exports.getTemplateInfo = getTemplateInfo; | ||
exports.getWeeklyNote = getWeeklyNote; | ||
exports.getWeeklyNoteSettings = getWeeklyNoteSettings; | ||
exports.getYearlyNote = getYearlyNote; | ||
exports.getYearlyNoteSettings = getYearlyNoteSettings; |
{ | ||
"name": "obsidian-daily-notes-interface", | ||
"version": "0.9.3", | ||
"version": "0.9.4", | ||
"description": "Interface for creating daily notes in Obsidian", | ||
@@ -5,0 +5,0 @@ "author": "liamcain", |
37873
853