1.1.0: fix Live Preview crash, add Reading View inline support, birthday labels
- Fix RangeSetBuilder ordering crash: inline and fenced-block decorations
are now merged and sorted before being added, instead of two unsorted
passes (crashed whenever a fenced block preceded inline code in a note).
- Add explicit @codemirror/state and @codemirror/view devDependencies
(previously only transitive via @codemirror/language).
- Add Reading View support for inline `date-calc:` spans via
registerMarkdownPostProcessor (previously Live Preview only), mirroring
the approach used by Dataview's inline queries.
- Fix verbose=false being silently truthy (non-empty string) in inline
key=value config, which meant it never actually disabled verbose output.
- Fix diff type auto-inference: from/to was dead code (countdown's check
always matched first); reordered so from+to or start+end infer diff.
- Implement documented but missing birthday label support: cfg.label,
falling back to frontmatter name ("Jane's age:"), then "Age:".
- Split main.ts (777 lines) into src/ modules per AGENTS.md conventions.
- Fix duplicated command-palette prefixes, move inline JS styles to
styles.css, fix package.json author, drop orphaned showArrow setting.
Verified: unit tests against the real bundled logic (mocked obsidian
module), a reproduction of the RangeSetBuilder crash against the real
@codemirror/state package, and live end-to-end testing in Obsidian via
CDP/Playwright (Tchernobyl vault).
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import { App, PluginSettingTab, Setting } from "obsidian";
|
||||
import type DateCalcPlugin from "../main";
|
||||
|
||||
export class DateCalcSettingTab extends PluginSettingTab {
|
||||
constructor(app: App, private plugin: DateCalcPlugin) {
|
||||
super(app, plugin);
|
||||
}
|
||||
|
||||
display(): void {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
|
||||
containerEl.createEl("h2", { text: "Date Calc" });
|
||||
|
||||
// Documentation link
|
||||
const docsDiv = containerEl.createDiv({
|
||||
cls: "setting-item-description date-calc-settings-docs",
|
||||
});
|
||||
docsDiv.createEl("a", {
|
||||
text: "📖 View Full Documentation",
|
||||
href: "https://github.com/thelegend09/date-calculator",
|
||||
});
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName("Debug logging")
|
||||
.setDesc("Logs decoration activity to the console.")
|
||||
.addToggle((t) =>
|
||||
t.setValue(this.plugin.settings.debug).onChange(async (v) => {
|
||||
this.plugin.settings.debug = v;
|
||||
await this.plugin.saveData(this.plugin.settings);
|
||||
})
|
||||
);
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName("Hide result while cursor inside")
|
||||
.setDesc("Prevents the widget from showing while you edit inline/fenced code.")
|
||||
.addToggle((t) =>
|
||||
t.setValue(this.plugin.settings.hideResultWhileCursorInside).onChange(async (v) => {
|
||||
this.plugin.settings.hideResultWhileCursorInside = v;
|
||||
await this.plugin.saveData(this.plugin.settings);
|
||||
})
|
||||
);
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName("Verbose output")
|
||||
.setDesc(
|
||||
"When enabled, show longer/wordier messages. Can be overridden per-calculation with verbose=true/false."
|
||||
)
|
||||
.addToggle((t) =>
|
||||
t.setValue(this.plugin.settings.verbose).onChange(async (v) => {
|
||||
this.plugin.settings.verbose = v;
|
||||
await this.plugin.saveData(this.plugin.settings);
|
||||
})
|
||||
);
|
||||
|
||||
// Usage examples section
|
||||
containerEl.createEl("h3", { text: "Usage Examples" });
|
||||
|
||||
const examplesDiv = containerEl.createDiv({ cls: "date-calc-examples" });
|
||||
|
||||
// Inline examples
|
||||
examplesDiv.createEl("h4", { text: "Inline Code (single backticks)" });
|
||||
const inlineList = examplesDiv.createEl("ul");
|
||||
inlineList.createEl("li").setText("`date-calc: birthday=2003-02-15`");
|
||||
inlineList.createEl("li").setText("`date-calc: countdown to=2026-12-31 label=\"New Year\"`");
|
||||
inlineList.createEl("li").setText("`date-calc: since=2024-01-01`");
|
||||
inlineList.createEl("li").setText("`date-calc: diff from=2024-01-01 to=2024-12-31`");
|
||||
inlineList.createEl("li").setText("`date-calc: birthday=1992-08-16 verbose=true`");
|
||||
|
||||
// Block examples
|
||||
examplesDiv.createEl("h4", { text: "Fenced Blocks (triple backticks)" });
|
||||
|
||||
examplesDiv
|
||||
.createEl("pre", { cls: "date-calc-example-block" })
|
||||
.setText("```date-calc\ntype: birthday\nbirthday: 1992-08-16\n```");
|
||||
|
||||
examplesDiv
|
||||
.createEl("pre", { cls: "date-calc-example-block" })
|
||||
.setText(
|
||||
"```date-calc\ntype: countdown\nto: 2026-12-31 23:59\nlabel: New Year\nverbose: true\n```"
|
||||
);
|
||||
|
||||
examplesDiv
|
||||
.createEl("pre", { cls: "date-calc-example-block" })
|
||||
.setText("```date-calc\ntype: diff\nfrom: 2024-01-01\nto: 2024-12-31\n```");
|
||||
|
||||
// Tips section
|
||||
examplesDiv.createEl("h4", { text: "Tips" });
|
||||
const tipsList = examplesDiv.createEl("ul");
|
||||
tipsList.createEl("li").setText("Use YYYY-MM-DD format for dates");
|
||||
tipsList.createEl("li").setText("Add time with YYYY-MM-DD HH:mm for precise countdowns");
|
||||
tipsList.createEl("li").setText("Supported types: birthday, countdown, since, diff");
|
||||
tipsList.createEl("li").setText("Add verbose=true/false to override global setting");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user