From 6aa66e7990b029e99e9f64b8deaf33ebf5656c3f Mon Sep 17 00:00:00 2001 From: Moy Date: Wed, 27 Nov 2024 17:41:17 +0800 Subject: [PATCH 01/12] remove duplicated date settings --- src/main.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main.js b/src/main.js index 1d19a9e..6df66cc 100644 --- a/src/main.js +++ b/src/main.js @@ -580,17 +580,6 @@ class RichFootSettingTab extends PluginSettingTab { this.plugin.updateRichFoot(); })); - new Setting(containerEl) - .setName('Show Dates') - .setDesc('Show creation and modification dates in the footer') - .addToggle(toggle => toggle - .setValue(this.plugin.settings.showDates) - .onChange(async (value) => { - this.plugin.settings.showDates = value; - await this.plugin.saveSettings(); - this.plugin.updateRichFoot(); - })); - // Add Date Settings containerEl.createEl('h3', { text: 'Date Settings' }); From 2ca6b9237e5814d1b97e59424b03c16784d4dfeb Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 10:46:17 -0800 Subject: [PATCH 02/12] v1.7.1 --- example-vault.zip | Bin 3343848 -> 3344850 bytes .../.obsidian/core-plugins.json | 2 +- .../.obsidian/plugins/rich-foot/data.json | 2 +- .../.obsidian/plugins/rich-foot/main.js | 2 +- .../.obsidian/plugins/rich-foot/manifest.json | 2 +- .../.obsidian/plugins/rich-foot/styles.css | 9 +++- .../.obsidian/workspace.json | 43 ++++++++++++++++-- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/example-vault.zip b/example-vault.zip index c3769c75518562ff8e1a17f3d5e6821d5e15b4f0..ed278789ed23bfc2727cabf112fef0795ed8d2f5 100644 GIT binary patch delta 14465 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 delta 13662 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 div { - flex: 0; + flex: 0 auto; } .markdown-preview-sizer > .rich-foot { diff --git a/example-vault/rich-foot-example/.obsidian/workspace.json b/example-vault/rich-foot-example/.obsidian/workspace.json index e9304e9..bedef4c 100644 --- a/example-vault/rich-foot-example/.obsidian/workspace.json +++ b/example-vault/rich-foot-example/.obsidian/workspace.json @@ -178,6 +178,36 @@ { "id": "4674f52fab9186d3", "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "c27c8283769f4466", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "c4f94b5118e3d0e8", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "459a2d3da0268437", + "type": "leaf", "state": { "type": "Saved Queries View", "state": {}, @@ -186,7 +216,7 @@ } } ], - "currentTab": 8 + "currentTab": 11 } ], "direction": "horizontal", @@ -201,17 +231,20 @@ "cmdr:Reload app without saving": false, "switcher:Open quick switcher": false, "templates:Insert template": true, - "command-palette:Open command palette": false + "command-palette:Open command palette": false, + "canvas:Create new canvas": false } }, "active": "e2b1b7584f7a474c", "lastOpenFiles": [ - "releases/v1.7.0 - 📆 Dates Your Way.md", + "backlink test.md", + "note with table.md", "🦶 Rich Foot.md", - "pixel-banner-images/calendar-feet.png", + "Untitled.canvas", "exclude/no rich-feet here.md", "exclude/me too/no rich-feet here either.md", - "backlink test.md", + "releases/v1.7.0 - 📆 Dates Your Way.md", + "pixel-banner-images/calendar-feet.png", "images/rich-feet-3.jpg", "images/rich-feet-2.jpg", "images/rich-feet.jpg", From e35c695cb988164ea2d73a1cb62ecb30e9cf7202 Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 10:46:31 -0800 Subject: [PATCH 03/12] v1.7.1 --- CHANGELOG.md | 3 +++ UPDATE.md | 4 ++++ manifest.json | 2 +- styles.css | 9 ++++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61fc363..ddb7ef2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to Rich Foot will be documented in this file. +## [1.7.1] - 2024-11-27 +### 🐛 Fixed +- Note embeds in canvas now have the correct height ## [1.7.0] - 2024-11-26 ### ✨ Added diff --git a/UPDATE.md b/UPDATE.md index 6e30f41..7dc41ff 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,5 +1,9 @@ ## 📆 Dates Your Way +### v1.7.1 +#### 🐛 Fixed +- Note embeds in canvas now have the correct height + ### v1.7.0 #### ✨ Added - `Custom Created/Modified Date Property` fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately. diff --git a/manifest.json b/manifest.json index 75890a4..cb8403c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "rich-foot", "name": "Rich Foot", - "version": "1.7.0", + "version": "1.7.1", "minAppVersion": "1.5.0", "description": "Adds backlink tags and created/modified dates to the footer of your notes.", "author": "Justin Parker (eQui\\\\ Labs)", diff --git a/styles.css b/styles.css index 5513eaf..0462a84 100644 --- a/styles.css +++ b/styles.css @@ -156,12 +156,19 @@ body.theme-light .rich-foot--backlinks ul li a { padding-bottom: 0 !important; } +/* fix note embed height scroll in canvas */ +.canvas-node-content.markdown-embed div.cm-sizer, +.canvas-node-content.markdown-embed div.markdown-preview-sizer { + min-height: unset !important; +} + + .cm-sizer .rich-foot--backlinks { margin-top: 0; } .markdown-preview-sizer > div { - flex: 0; + flex: 0 auto; } .markdown-preview-sizer > .rich-foot { From 6c29da9a799b7e92e4a8f2dc0cf95c2c875b094c Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 10:50:39 -0800 Subject: [PATCH 04/12] update example vault --- example-vault.zip | Bin 3344850 -> 3344866 bytes .../.obsidian/plugins/rich-foot/main.js | 7 +------ 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/example-vault.zip b/example-vault.zip index ed278789ed23bfc2727cabf112fef0795ed8d2f5..e7674aeb3cc987d69e0441987c6875cdf6486829 100644 GIT binary patch delta 9321 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 z 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 delta 9281 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 diff --git a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js index 127fa30..dd831e5 100644 --- a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js +++ b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js @@ -107,7 +107,7 @@ var ReleaseNotesModal = class extends import_obsidian.Modal { }; // virtual-module:virtual:release-notes -var releaseNotes = '

\u{1F4C6} Dates Your Way

\n

v1.7.1

\n

\u{1F41B} Fixed

\n
    \n
  • Note embeds in canvas now have the correct height
  • \n
\n

v1.7.0

\n

\u2728 Added

\n
    \n
  • Custom Created/Modified Date Property fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately.
  • \n
\n

screenshot

\n'; +var releaseNotes = '

\u{1F4C6} Dates Your Way

\n

v1.7.1

\n

\u{1F41B} Fixed

\n
    \n
  • Note embeds in canvas now have the correct height
  • \n
  • Duplicate "show dates" option in settings
  • \n
\n

v1.7.0

\n

\u2728 Added

\n
    \n
  • Custom Created/Modified Date Property fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately.
  • \n
\n

screenshot

\n'; // src/main.js var DEFAULT_SETTINGS = { @@ -500,11 +500,6 @@ var RichFootSettingTab = class extends import_obsidian2.PluginSettingTab { await this.plugin.saveSettings(); this.plugin.updateRichFoot(); })); - new import_obsidian2.Setting(containerEl).setName("Show Dates").setDesc("Show creation and modification dates in the footer").addToggle((toggle) => toggle.setValue(this.plugin.settings.showDates).onChange(async (value) => { - this.plugin.settings.showDates = value; - await this.plugin.saveSettings(); - this.plugin.updateRichFoot(); - })); containerEl.createEl("h3", { text: "Date Settings" }); new import_obsidian2.Setting(containerEl).setName("Show Dates").setDesc("Show creation and modification dates in the footer").addToggle((toggle) => toggle.setValue(this.plugin.settings.showDates).onChange(async (value) => { this.plugin.settings.showDates = value; From 454946e19b142b2e4514593b7205bd97ba564b0b Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 10:50:48 -0800 Subject: [PATCH 05/12] update docs --- CHANGELOG.md | 1 + UPDATE.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddb7ef2..2e2e48c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to Rich Foot will be documented in this file. ## [1.7.1] - 2024-11-27 ### 🐛 Fixed - Note embeds in canvas now have the correct height +- Duplicate "show dates" option in settings ## [1.7.0] - 2024-11-26 ### ✨ Added diff --git a/UPDATE.md b/UPDATE.md index 7dc41ff..5807283 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -3,6 +3,7 @@ ### v1.7.1 #### 🐛 Fixed - Note embeds in canvas now have the correct height +- Duplicate "show dates" option in settings ### v1.7.0 #### ✨ Added From c665630adb976accf85ee740d0c543bd8d79aa3c Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 11:34:11 -0800 Subject: [PATCH 06/12] update custom date display --- src/main.js | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/main.js b/src/main.js index 8aa0d82..500fdce 100644 --- a/src/main.js +++ b/src/main.js @@ -139,6 +139,22 @@ class RichFootPlugin extends Plugin { this.addSettingTab(new RichFootSettingTab(this.app, this)); + // Register for frontmatter changes + this.registerEvent( + this.app.metadataCache.on('changed', (file) => { + const cache = this.app.metadataCache.getFileCache(file); + if (cache?.frontmatter) { + const customCreatedProp = this.settings.customCreatedDateProp; + const customModifiedProp = this.settings.customModifiedDateProp; + + if ((customCreatedProp && customCreatedProp in cache.frontmatter) || + (customModifiedProp && customModifiedProp in cache.frontmatter)) { + this.updateRichFoot(); + } + } + }) + ); + // Wait for the layout to be ready before registering events this.app.workspace.onLayoutReady(() => { this.registerEvent( @@ -307,7 +323,9 @@ class RichFootPlugin extends Plugin { const richFoot = createDiv({ cls: 'rich-foot' }); const richFootDashedLine = richFoot.createDiv({ cls: 'rich-foot--dashed-line' }); - // Backlinks + // --------------- + // -- Backlinks -- + // --------------- if (this.settings.showBacklinks) { const backlinksData = this.app.metadataCache.getBacklinksForFile(file); @@ -335,7 +353,9 @@ class RichFootPlugin extends Plugin { } } - // Outlinks + // -------------- + // -- Outlinks -- + // -------------- if (this.settings.showOutlinks) { const outlinks = this.getOutlinks(file); @@ -360,16 +380,23 @@ class RichFootPlugin extends Plugin { } } - // Dates + // ----------- + // -- Dates -- + // ----------- if (this.settings.showDates) { const datesWrapper = richFoot.createDiv({ cls: 'rich-foot--dates-wrapper' }); const cache = this.app.metadataCache.getFileCache(file); const frontmatter = cache?.frontmatter; - // Modified date + // -- Modified date -- let modifiedDate; if (this.settings.customModifiedDateProp && frontmatter && frontmatter[this.settings.customModifiedDateProp]) { modifiedDate = frontmatter[this.settings.customModifiedDateProp]; + if (!isNaN(Date.parse(modifiedDate))) { + const [year, month, day] = modifiedDate.split('-').map(Number); + const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + modifiedDate = `${months[month - 1]} ${day}, ${year}`; + } } else { modifiedDate = new Date(file.stat.mtime); modifiedDate = `${modifiedDate.toLocaleString('default', { month: 'long' })} ${modifiedDate.getDate()}, ${modifiedDate.getFullYear()}`; @@ -379,10 +406,15 @@ class RichFootPlugin extends Plugin { text: `${modifiedDate}` }); - // Created date + // -- Created date -- let createdDate; if (this.settings.customCreatedDateProp && frontmatter && frontmatter[this.settings.customCreatedDateProp]) { createdDate = frontmatter[this.settings.customCreatedDateProp]; + if (!isNaN(Date.parse(createdDate))) { + const [year, month, day] = createdDate.split('-').map(Number); + const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + createdDate = `${months[month - 1]} ${day}, ${year}`; + } } else { createdDate = new Date(file.stat.ctime); createdDate = `${createdDate.toLocaleString('default', { month: 'long' })} ${createdDate.getDate()}, ${createdDate.getFullYear()}`; From 56dd1e4f5eac3ce085c5b446460350924c3ec28e Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 11:34:22 -0800 Subject: [PATCH 07/12] update docs --- CHANGELOG.md | 3 +++ UPDATE.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e2e48c..d6d7463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ All notable changes to Rich Foot will be documented in this file. - Note embeds in canvas now have the correct height - Duplicate "show dates" option in settings +### ✨ Added +- If using custom created/modified date properties, the date now displays in the format of "Month Day, Year" if in proper date format, otherwise it displays the raw frontmatter filed string value. + ## [1.7.0] - 2024-11-26 ### ✨ Added - `Custom Created/Modified Date Property` fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately. diff --git a/UPDATE.md b/UPDATE.md index 5807283..e3f71bb 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -5,6 +5,9 @@ - Note embeds in canvas now have the correct height - Duplicate "show dates" option in settings +#### ✨ Added +- If using custom created/modified date properties, the date now displays in the format of "Month Day, Year" if in proper date format, otherwise it displays the raw frontmatter filed string value. + ### v1.7.0 #### ✨ Added - `Custom Created/Modified Date Property` fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately. From 730a946335d8bf0b2a81f9731cb7ec0ec11b1aae Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Wed, 27 Nov 2024 11:34:52 -0800 Subject: [PATCH 08/12] update example vault --- example-vault.zip | Bin 3344866 -> 3345217 bytes .../.obsidian/plugins/rich-foot/main.js | 24 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/example-vault.zip b/example-vault.zip index e7674aeb3cc987d69e0441987c6875cdf6486829..020f00ab8b6689cf90e4209831e9f613f18572a6 100644 GIT binary patch delta 9869 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 { + const cache = this.app.metadataCache.getFileCache(file); + if (cache == null ? void 0 : cache.frontmatter) { + const customCreatedProp = this.settings.customCreatedDateProp; + const customModifiedProp = this.settings.customModifiedDateProp; + if (customCreatedProp && customCreatedProp in cache.frontmatter || customModifiedProp && customModifiedProp in cache.frontmatter) { + this.updateRichFoot(); + } + } + }) + ); this.app.workspace.onLayoutReady(() => { this.registerEvent( this.app.workspace.on("layout-change", this.updateRichFoot) @@ -342,6 +354,11 @@ var RichFootPlugin = class extends import_obsidian2.Plugin { let modifiedDate; if (this.settings.customModifiedDateProp && frontmatter && frontmatter[this.settings.customModifiedDateProp]) { modifiedDate = frontmatter[this.settings.customModifiedDateProp]; + if (!isNaN(Date.parse(modifiedDate))) { + const [year, month, day] = modifiedDate.split("-").map(Number); + const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + modifiedDate = `${months[month - 1]} ${day}, ${year}`; + } } else { modifiedDate = new Date(file.stat.mtime); modifiedDate = `${modifiedDate.toLocaleString("default", { month: "long" })} ${modifiedDate.getDate()}, ${modifiedDate.getFullYear()}`; @@ -353,6 +370,11 @@ var RichFootPlugin = class extends import_obsidian2.Plugin { let createdDate; if (this.settings.customCreatedDateProp && frontmatter && frontmatter[this.settings.customCreatedDateProp]) { createdDate = frontmatter[this.settings.customCreatedDateProp]; + if (!isNaN(Date.parse(createdDate))) { + const [year, month, day] = createdDate.split("-").map(Number); + const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + createdDate = `${months[month - 1]} ${day}, ${year}`; + } } else { createdDate = new Date(file.stat.ctime); createdDate = `${createdDate.toLocaleString("default", { month: "long" })} ${createdDate.getDate()}, ${createdDate.getFullYear()}`; From bf8dc6e30279b4d5cce47c4f79e51052ecbc93d0 Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Fri, 29 Nov 2024 06:41:29 -0800 Subject: [PATCH 09/12] fix date formatting if timestamp included --- CHANGELOG.md | 4 ++++ UPDATE.md | 4 ++++ src/main.js | 8 ++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6d7463..5dd4bc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to Rich Foot will be documented in this file. +## [1.7.2] - 2024-11-29 +### 🐛 Fixed +- Date not formatted correctly if timestamp was included in the Custom Created/Modified Date Property + ## [1.7.1] - 2024-11-27 ### 🐛 Fixed - Note embeds in canvas now have the correct height diff --git a/UPDATE.md b/UPDATE.md index e3f71bb..e61b2a8 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,5 +1,9 @@ ## 📆 Dates Your Way +### v1.7.2 +#### 🐛 Fixed +- Date not formatted correctly if timestamp was included in the Custom Created/Modified Date Property + ### v1.7.1 #### 🐛 Fixed - Note embeds in canvas now have the correct height diff --git a/src/main.js b/src/main.js index 500fdce..aa7c9a2 100644 --- a/src/main.js +++ b/src/main.js @@ -393,7 +393,9 @@ class RichFootPlugin extends Plugin { if (this.settings.customModifiedDateProp && frontmatter && frontmatter[this.settings.customModifiedDateProp]) { modifiedDate = frontmatter[this.settings.customModifiedDateProp]; if (!isNaN(Date.parse(modifiedDate))) { - const [year, month, day] = modifiedDate.split('-').map(Number); + // Split on 'T' to handle timestamps, then split the date part + const datePart = modifiedDate.split('T')[0]; + const [year, month, day] = datePart.split('-').map(Number); const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; modifiedDate = `${months[month - 1]} ${day}, ${year}`; } @@ -411,7 +413,9 @@ class RichFootPlugin extends Plugin { if (this.settings.customCreatedDateProp && frontmatter && frontmatter[this.settings.customCreatedDateProp]) { createdDate = frontmatter[this.settings.customCreatedDateProp]; if (!isNaN(Date.parse(createdDate))) { - const [year, month, day] = createdDate.split('-').map(Number); + // Split on 'T' to handle timestamps, then split the date part + const datePart = createdDate.split('T')[0]; + const [year, month, day] = datePart.split('-').map(Number); const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; createdDate = `${months[month - 1]} ${day}, ${year}`; } From a8462423b04b8636789f1d45459181e48dede8d5 Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Fri, 29 Nov 2024 07:09:31 -0800 Subject: [PATCH 10/12] non-standate date formats --- src/main.js | 80 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/src/main.js b/src/main.js index aa7c9a2..192c182 100644 --- a/src/main.js +++ b/src/main.js @@ -392,12 +392,46 @@ class RichFootPlugin extends Plugin { let modifiedDate; if (this.settings.customModifiedDateProp && frontmatter && frontmatter[this.settings.customModifiedDateProp]) { modifiedDate = frontmatter[this.settings.customModifiedDateProp]; - if (!isNaN(Date.parse(modifiedDate))) { + let isValidDate = false; + let tempDate = modifiedDate; + + // Try original string + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + // Try replacing periods with hyphens (only first two occurrences) + if (!isValidDate) { + let count = 0; + tempDate = modifiedDate.replace(/\./g, (match) => { + count++; + return count <= 2 ? '-' : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + // Try replacing forward slashes with hyphens (only first two occurrences) + if (!isValidDate) { + let count = 0; + tempDate = modifiedDate.replace(/\//g, (match) => { + count++; + return count <= 2 ? '-' : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + + if (isValidDate) { // Split on 'T' to handle timestamps, then split the date part - const datePart = modifiedDate.split('T')[0]; - const [year, month, day] = datePart.split('-').map(Number); + const datePart = tempDate.split('T')[0]; + // Handle different separators + const parts = datePart.split(/[-./]/); + const [year, month, day] = parts.map(Number); const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; modifiedDate = `${months[month - 1]} ${day}, ${year}`; + } else { + modifiedDate = modifiedDate; } } else { modifiedDate = new Date(file.stat.mtime); @@ -412,12 +446,46 @@ class RichFootPlugin extends Plugin { let createdDate; if (this.settings.customCreatedDateProp && frontmatter && frontmatter[this.settings.customCreatedDateProp]) { createdDate = frontmatter[this.settings.customCreatedDateProp]; - if (!isNaN(Date.parse(createdDate))) { + let isValidDate = false; + let tempDate = createdDate; + + // Try original string + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + // Try replacing periods with hyphens (only first two occurrences) + if (!isValidDate) { + let count = 0; + tempDate = createdDate.replace(/\./g, (match) => { + count++; + return count <= 2 ? '-' : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + // Try replacing forward slashes with hyphens (only first two occurrences) + if (!isValidDate) { + let count = 0; + tempDate = createdDate.replace(/\//g, (match) => { + count++; + return count <= 2 ? '-' : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + + if (isValidDate) { // Split on 'T' to handle timestamps, then split the date part - const datePart = createdDate.split('T')[0]; - const [year, month, day] = datePart.split('-').map(Number); + const datePart = tempDate.split('T')[0]; + // Handle different separators + const parts = datePart.split(/[-./]/); + const [year, month, day] = parts.map(Number); const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; createdDate = `${months[month - 1]} ${day}, ${year}`; + } else { + createdDate = createdDate; } } else { createdDate = new Date(file.stat.ctime); From 7bb009a468650b7bc0f2321ac8a344311de143c5 Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Fri, 29 Nov 2024 07:52:23 -0800 Subject: [PATCH 11/12] v1.7.2 --- example-vault.zip | Bin 3345217 -> 3346192 bytes .../.obsidian/plugins/rich-foot/data.json | 1 + .../.obsidian/plugins/rich-foot/main.js | 143 +++++++++++++-- .../.obsidian/plugins/rich-foot/manifest.json | 2 +- .../.obsidian/workspace.json | 170 +++++++++++++++++- ....7.0 - \360\237\223\206 Dates Your Way.md" | 4 +- manifest.json | 2 +- src/main.js | 115 ++++++++++-- 8 files changed, 402 insertions(+), 35 deletions(-) diff --git a/example-vault.zip b/example-vault.zip index 020f00ab8b6689cf90e4209831e9f613f18572a6..0c6b2b5ad6cdad501368fe09d4b456611ca1dae4 100644 GIT binary patch delta 13113 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≪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 C>;l#R diff --git a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/data.json b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/data.json index e68d9fe..d785919 100644 --- a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/data.json +++ b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/data.json @@ -16,6 +16,7 @@ "linkBorderColor": "rgba(255, 255, 255, 0.204)", "customCreatedDateProp": "created", "customModifiedDateProp": "modified", + "dateDisplayFormat": "mmmm dd, yyyy", "showBacklinks": true, "showOutlinks": true, "showDates": true, diff --git a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js index 97d8e8e..c3bf4be 100644 --- a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js +++ b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/main.js @@ -107,7 +107,7 @@ var ReleaseNotesModal = class extends import_obsidian.Modal { }; // virtual-module:virtual:release-notes -var releaseNotes = '

\u{1F4C6} Dates Your Way

\n

v1.7.1

\n

\u{1F41B} Fixed

\n
    \n
  • Note embeds in canvas now have the correct height
  • \n
  • Duplicate "show dates" option in settings
  • \n
\n

\u2728 Added

\n
    \n
  • If using custom created/modified date properties, the date now displays in the format of "Month Day, Year" if in proper date format, otherwise it displays the raw frontmatter filed string value.
  • \n
\n

v1.7.0

\n

\u2728 Added

\n
    \n
  • Custom Created/Modified Date Property fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately.
  • \n
\n

screenshot

\n'; +var releaseNotes = '

\u{1F4C6} Dates Your Way

\n

v1.7.2

\n

\u{1F41B} Fixed

\n
    \n
  • Date not formatted correctly if timestamp was included in the Custom Created/Modified Date Property
  • \n
\n

v1.7.1

\n

\u{1F41B} Fixed

\n
    \n
  • Note embeds in canvas now have the correct height
  • \n
  • Duplicate "show dates" option in settings
  • \n
\n

\u2728 Added

\n
    \n
  • If using custom created/modified date properties, the date now displays in the format of "Month Day, Year" if in proper date format, otherwise it displays the raw frontmatter filed string value.
  • \n
\n

v1.7.0

\n

\u2728 Added

\n
    \n
  • Custom Created/Modified Date Property fields to allow users to specify their own frontmatter properties for dates, useful when file system dates are affected by sync processes and you track them separately.
  • \n
\n

screenshot

\n'; // src/main.js var DEFAULT_SETTINGS = { @@ -125,7 +125,8 @@ var DEFAULT_SETTINGS = { linkBackgroundColor: "var(--tag-background)", linkBorderColor: "rgba(255, 255, 255, 0.204)", customCreatedDateProp: "", - customModifiedDateProp: "" + customModifiedDateProp: "", + dateDisplayFormat: "mmmm dd, yyyy" }; function rgbToHex(color) { if (color.startsWith("hsl")) { @@ -156,6 +157,42 @@ function blendRgbaWithBackground(rgba, backgroundRgb) { const b = Math.round(fb * alpha + bb * (1 - alpha)); return `rgb(${r}, ${g}, ${b})`; } +function formatDate(date, format) { + const d = new Date(date); + const year = d.getFullYear(); + const month = d.getMonth(); + const day = d.getDate(); + const weekday = d.getDay(); + const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + const monthsShort = months.map((m) => m.slice(0, 3)); + const weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + const weekdaysShort = weekdays.map((w) => w.slice(0, 3)); + const pad = (num) => num.toString().padStart(2, "0"); + const tokens = { + "dddd": weekdays[weekday], + "ddd": weekdaysShort[weekday], + "dd": pad(day), + "d": day.toString(), + "mmmm": months[month], + "mmm": monthsShort[month], + "mm": pad(month + 1), + "m": (month + 1).toString(), + "yyyy": year.toString(), + "yy": year.toString().slice(-2) + }; + const sortedTokens = Object.keys(tokens).sort((a, b) => b.length - a.length); + let result = format; + const replacements = /* @__PURE__ */ new Map(); + sortedTokens.forEach((token, index) => { + const placeholder = `__${index}__`; + replacements.set(placeholder, tokens[token]); + result = result.replace(new RegExp(token, "g"), placeholder); + }); + replacements.forEach((value, placeholder) => { + result = result.replace(new RegExp(placeholder, "g"), value); + }); + return result; +} var RichFootPlugin = class extends import_obsidian2.Plugin { async onload() { await this.loadSettings(); @@ -354,14 +391,42 @@ var RichFootPlugin = class extends import_obsidian2.Plugin { let modifiedDate; if (this.settings.customModifiedDateProp && frontmatter && frontmatter[this.settings.customModifiedDateProp]) { modifiedDate = frontmatter[this.settings.customModifiedDateProp]; - if (!isNaN(Date.parse(modifiedDate))) { - const [year, month, day] = modifiedDate.split("-").map(Number); - const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - modifiedDate = `${months[month - 1]} ${day}, ${year}`; + let isValidDate = false; + let tempDate = modifiedDate; + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + if (!isValidDate) { + let count = 0; + tempDate = modifiedDate.replace(/\./g, (match) => { + count++; + return count <= 2 ? "-" : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + if (!isValidDate) { + let count = 0; + tempDate = modifiedDate.replace(/\//g, (match) => { + count++; + return count <= 2 ? "-" : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + if (isValidDate) { + const datePart = tempDate.split("T")[0]; + const dateStr = tempDate.includes("T") ? tempDate : `${datePart}T00:00:00`; + const dateObj = new Date(dateStr); + modifiedDate = formatDate(dateObj, this.settings.dateDisplayFormat); + } else { + modifiedDate = modifiedDate; } } else { modifiedDate = new Date(file.stat.mtime); - modifiedDate = `${modifiedDate.toLocaleString("default", { month: "long" })} ${modifiedDate.getDate()}, ${modifiedDate.getFullYear()}`; + modifiedDate = formatDate(modifiedDate, this.settings.dateDisplayFormat); } datesWrapper.createDiv({ cls: "rich-foot--modified-date", @@ -370,14 +435,42 @@ var RichFootPlugin = class extends import_obsidian2.Plugin { let createdDate; if (this.settings.customCreatedDateProp && frontmatter && frontmatter[this.settings.customCreatedDateProp]) { createdDate = frontmatter[this.settings.customCreatedDateProp]; - if (!isNaN(Date.parse(createdDate))) { - const [year, month, day] = createdDate.split("-").map(Number); - const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - createdDate = `${months[month - 1]} ${day}, ${year}`; + let isValidDate = false; + let tempDate = createdDate; + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + if (!isValidDate) { + let count = 0; + tempDate = createdDate.replace(/\./g, (match) => { + count++; + return count <= 2 ? "-" : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + if (!isValidDate) { + let count = 0; + tempDate = createdDate.replace(/\//g, (match) => { + count++; + return count <= 2 ? "-" : match; + }); + if (!isNaN(Date.parse(tempDate))) { + isValidDate = true; + } + } + if (isValidDate) { + const datePart = tempDate.split("T")[0]; + const dateStr = tempDate.includes("T") ? tempDate : `${datePart}T00:00:00`; + const dateObj = new Date(dateStr); + createdDate = formatDate(dateObj, this.settings.dateDisplayFormat); + } else { + createdDate = createdDate; } } else { createdDate = new Date(file.stat.ctime); - createdDate = `${createdDate.toLocaleString("default", { month: "long" })} ${createdDate.getDate()}, ${createdDate.getFullYear()}`; + createdDate = formatDate(createdDate, this.settings.dateDisplayFormat); } datesWrapper.createDiv({ cls: "rich-foot--created-date", @@ -528,6 +621,32 @@ var RichFootSettingTab = class extends import_obsidian2.PluginSettingTab { await this.plugin.saveSettings(); this.plugin.updateRichFoot(); })); + new import_obsidian2.Setting(containerEl).setName("Date Display Format").setDesc("Choose how dates should be displayed in the footer").addDropdown((dropdown) => { + const today = /* @__PURE__ */ new Date(); + const formats = [ + "mm/dd/yyyy", + "dd/mm/yyyy", + "yyyy-mm-dd", + "mmm dd, yyyy", + "dd mmm yyyy", + "mmmm dd, yyyy", + "ddd, mmm dd, yyyy", + "dddd, mmmm dd, yyyy", + "mm/dd/yy", + "dd/mm/yy", + "yy-mm-dd", + "m/d/yy" + ]; + formats.forEach((format) => { + const example = formatDate(today, format); + dropdown.addOption(format, `${format} (example: ${example})`); + }); + dropdown.setValue(this.plugin.settings.dateDisplayFormat).onChange(async (value) => { + this.plugin.settings.dateDisplayFormat = value; + await this.plugin.saveSettings(); + this.plugin.updateRichFoot(); + }); + }); new import_obsidian2.Setting(containerEl).setName("Custom Created Date Property").setDesc("Specify a frontmatter property to use for creation date (leave empty to use file creation date)").addText((text) => { text.setValue(this.plugin.settings.customCreatedDateProp).onChange(async (value) => { this.plugin.settings.customCreatedDateProp = value; diff --git a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/manifest.json b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/manifest.json index cb8403c..f2b541b 100644 --- a/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/manifest.json +++ b/example-vault/rich-foot-example/.obsidian/plugins/rich-foot/manifest.json @@ -1,7 +1,7 @@ { "id": "rich-foot", "name": "Rich Foot", - "version": "1.7.1", + "version": "1.7.2", "minAppVersion": "1.5.0", "description": "Adds backlink tags and created/modified dates to the footer of your notes.", "author": "Justin Parker (eQui\\\\ Labs)", diff --git a/example-vault/rich-foot-example/.obsidian/workspace.json b/example-vault/rich-foot-example/.obsidian/workspace.json index bedef4c..5986c69 100644 --- a/example-vault/rich-foot-example/.obsidian/workspace.json +++ b/example-vault/rich-foot-example/.obsidian/workspace.json @@ -13,13 +13,13 @@ "state": { "type": "markdown", "state": { - "file": "🦶 Rich Foot.md", + "file": "releases/v1.7.0 - 📆 Dates Your Way.md", "mode": "preview", "backlinks": false, "source": false }, "icon": "lucide-file", - "title": "🦶 Rich Foot" + "title": "v1.7.0 - 📆 Dates Your Way" } } ] @@ -208,6 +208,166 @@ { "id": "459a2d3da0268437", "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "dbaf43fb57cc4699", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "facf9bbf4043ed4c", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "d1a82455e37d17f2", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "c0acc529bba3c2a2", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "b7f24a3bc892f7ce", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "9c84df65d40032a2", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "ae96266198a50c4c", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "fb7d7d767937b219", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "bcb7b70e87d22128", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "864edfa85a3c930c", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "1618e93fe6d7ef12", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "79156bd6731a2904", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "8aaf706b35cce35a", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "55c54da986a31382", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "138dd6cbe7f3aecb", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + }, + { + "id": "2c847f2d16aaf127", + "type": "leaf", "state": { "type": "Saved Queries View", "state": {}, @@ -216,7 +376,7 @@ } } ], - "currentTab": 11 + "currentTab": 27 } ], "direction": "horizontal", @@ -237,13 +397,13 @@ }, "active": "e2b1b7584f7a474c", "lastOpenFiles": [ + "🦶 Rich Foot.md", + "releases/v1.7.0 - 📆 Dates Your Way.md", "backlink test.md", "note with table.md", - "🦶 Rich Foot.md", "Untitled.canvas", "exclude/no rich-feet here.md", "exclude/me too/no rich-feet here either.md", - "releases/v1.7.0 - 📆 Dates Your Way.md", "pixel-banner-images/calendar-feet.png", "images/rich-feet-3.jpg", "images/rich-feet-2.jpg", diff --git "a/example-vault/rich-foot-example/releases/v1.7.0 - \360\237\223\206 Dates Your Way.md" "b/example-vault/rich-foot-example/releases/v1.7.0 - \360\237\223\206 Dates Your Way.md" index 2217e5a..c5b305e 100644 --- "a/example-vault/rich-foot-example/releases/v1.7.0 - \360\237\223\206 Dates Your Way.md" +++ "b/example-vault/rich-foot-example/releases/v1.7.0 - \360\237\223\206 Dates Your Way.md" @@ -3,8 +3,8 @@ banner: "[[calendar-feet.png]]" banner-height: "500" banner-y: "30" content-start: "250" -created: Super Cool Day (who knows when ❔) -modified: Cold day in Nov (2024-11-26) +created: 2024/11/30T23:59:00 +modified: 2024-11-29 --- # 🦶 Rich Foot ⋅ v1.7.0 - 📆 Dates Your Way { .release-title } diff --git a/manifest.json b/manifest.json index cb8403c..f2b541b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "rich-foot", "name": "Rich Foot", - "version": "1.7.1", + "version": "1.7.2", "minAppVersion": "1.5.0", "description": "Adds backlink tags and created/modified dates to the footer of your notes.", "author": "Justin Parker (eQui\\\\ Labs)", diff --git a/src/main.js b/src/main.js index 192c182..831cc12 100644 --- a/src/main.js +++ b/src/main.js @@ -18,6 +18,7 @@ const DEFAULT_SETTINGS = { linkBorderColor: 'rgba(255, 255, 255, 0.204)', customCreatedDateProp: '', customModifiedDateProp: '', + dateDisplayFormat: 'mmmm dd, yyyy', }; class RichFootSettings { @@ -40,6 +41,7 @@ class RichFootSettings { this.linkBorderColor = DEFAULT_SETTINGS.linkBorderColor; this.customCreatedDateProp = DEFAULT_SETTINGS.customCreatedDateProp; this.customModifiedDateProp = DEFAULT_SETTINGS.customModifiedDateProp; + this.dateDisplayFormat = DEFAULT_SETTINGS.dateDisplayFormat; } } @@ -120,6 +122,57 @@ function blendRgbaWithBackground(rgba, backgroundRgb) { return `rgb(${r}, ${g}, ${b})`; } +// Add this helper function to format dates +function formatDate(date, format) { + const d = new Date(date); + const year = d.getFullYear(); + const month = d.getMonth(); + const day = d.getDate(); + const weekday = d.getDay(); + + const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + const monthsShort = months.map(m => m.slice(0, 3)); + const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + const weekdaysShort = weekdays.map(w => w.slice(0, 3)); + + // Helper to pad numbers + const pad = (num) => num.toString().padStart(2, '0'); + + // Create a map of tokens to their values + const tokens = { + 'dddd': weekdays[weekday], + 'ddd': weekdaysShort[weekday], + 'dd': pad(day), + 'd': day.toString(), + 'mmmm': months[month], + 'mmm': monthsShort[month], + 'mm': pad(month + 1), + 'm': (month + 1).toString(), + 'yyyy': year.toString(), + 'yy': year.toString().slice(-2) + }; + + // Sort tokens by length (longest first) to avoid partial matches + const sortedTokens = Object.keys(tokens).sort((a, b) => b.length - a.length); + + // Replace each token with a unique placeholder + let result = format; + const replacements = new Map(); + + sortedTokens.forEach((token, index) => { + const placeholder = `__${index}__`; + replacements.set(placeholder, tokens[token]); + result = result.replace(new RegExp(token, 'g'), placeholder); + }); + + // Replace placeholders with final values + replacements.forEach((value, placeholder) => { + result = result.replace(new RegExp(placeholder, 'g'), value); + }); + + return result; +} + class RichFootPlugin extends Plugin { async onload() { await this.loadSettings(); @@ -423,19 +476,19 @@ class RichFootPlugin extends Plugin { } if (isValidDate) { - // Split on 'T' to handle timestamps, then split the date part + // Split on 'T' to handle timestamps const datePart = tempDate.split('T')[0]; - // Handle different separators - const parts = datePart.split(/[-./]/); - const [year, month, day] = parts.map(Number); - const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - modifiedDate = `${months[month - 1]} ${day}, ${year}`; + // If there's no time component, parse in local timezone by appending T00:00:00 + const dateStr = tempDate.includes('T') ? tempDate : `${datePart}T00:00:00`; + // Create a Date object from the parts + const dateObj = new Date(dateStr); + modifiedDate = formatDate(dateObj, this.settings.dateDisplayFormat); } else { modifiedDate = modifiedDate; } } else { modifiedDate = new Date(file.stat.mtime); - modifiedDate = `${modifiedDate.toLocaleString('default', { month: 'long' })} ${modifiedDate.getDate()}, ${modifiedDate.getFullYear()}`; + modifiedDate = formatDate(modifiedDate, this.settings.dateDisplayFormat); } datesWrapper.createDiv({ cls: 'rich-foot--modified-date', @@ -477,19 +530,19 @@ class RichFootPlugin extends Plugin { } if (isValidDate) { - // Split on 'T' to handle timestamps, then split the date part + // Split on 'T' to handle timestamps const datePart = tempDate.split('T')[0]; - // Handle different separators - const parts = datePart.split(/[-./]/); - const [year, month, day] = parts.map(Number); - const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - createdDate = `${months[month - 1]} ${day}, ${year}`; + // If there's no time component, parse in local timezone by appending T00:00:00 + const dateStr = tempDate.includes('T') ? tempDate : `${datePart}T00:00:00`; + // Create a Date object from the parts + const dateObj = new Date(dateStr); + createdDate = formatDate(dateObj, this.settings.dateDisplayFormat); } else { createdDate = createdDate; } } else { createdDate = new Date(file.stat.ctime); - createdDate = `${createdDate.toLocaleString('default', { month: 'long' })} ${createdDate.getDate()}, ${createdDate.getFullYear()}`; + createdDate = formatDate(createdDate, this.settings.dateDisplayFormat); } datesWrapper.createDiv({ cls: 'rich-foot--created-date', @@ -700,6 +753,40 @@ class RichFootSettingTab extends PluginSettingTab { this.plugin.updateRichFoot(); })); + new Setting(containerEl) + .setName('Date Display Format') + .setDesc('Choose how dates should be displayed in the footer') + .addDropdown(dropdown => { + const today = new Date(); + const formats = [ + 'mm/dd/yyyy', + 'dd/mm/yyyy', + 'yyyy-mm-dd', + 'mmm dd, yyyy', + 'dd mmm yyyy', + 'mmmm dd, yyyy', + 'ddd, mmm dd, yyyy', + 'dddd, mmmm dd, yyyy', + 'mm/dd/yy', + 'dd/mm/yy', + 'yy-mm-dd', + 'm/d/yy' + ]; + + formats.forEach(format => { + const example = formatDate(today, format); + dropdown.addOption(format, `${format} (example: ${example})`); + }); + + dropdown + .setValue(this.plugin.settings.dateDisplayFormat) + .onChange(async (value) => { + this.plugin.settings.dateDisplayFormat = value; + await this.plugin.saveSettings(); + this.plugin.updateRichFoot(); + }); + }); + new Setting(containerEl) .setName('Custom Created Date Property') .setDesc('Specify a frontmatter property to use for creation date (leave empty to use file creation date)') From bdcafa8422c6638d7daf268c5130c750fbc1016e Mon Sep 17 00:00:00 2001 From: Justin Parker Date: Fri, 29 Nov 2024 07:54:31 -0800 Subject: [PATCH 12/12] v1.7.2 --- CHANGELOG.md | 3 +++ UPDATE.md | 3 +++ example-vault.zip | Bin 3346192 -> 3346211 bytes .../.obsidian/plugins/rich-foot/main.js | 2 +- 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dd4bc7..fe16130 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ All notable changes to Rich Foot will be documented in this file. ## [1.7.2] - 2024-11-29 +### ✨ Added +- `Date Display Format` option to allow users to specify their own date format + ### 🐛 Fixed - Date not formatted correctly if timestamp was included in the Custom Created/Modified Date Property diff --git a/UPDATE.md b/UPDATE.md index e61b2a8..bc153bb 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,6 +1,9 @@ ## 📆 Dates Your Way ### v1.7.2 +#### ✨ Added +- `Date Display Format` option to allow users to specify their own date format + #### 🐛 Fixed - Date not formatted correctly if timestamp was included in the Custom Created/Modified Date Property diff --git a/example-vault.zip b/example-vault.zip index 0c6b2b5ad6cdad501368fe09d4b456611ca1dae4..d5e3f16cf4a450b160d33e0d148c377f14d96134 100644 GIT binary patch delta 9904 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%0Al3O8NSjSclZr*55`{^TS-3 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 H*vkD6+-gYj delta 9834 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%0A_! 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 gCd3Z(VgEmwKNdt4