diff --git a/src/tracker.ts b/src/tracker.ts
index 8a49c76..a2065a6 100644
--- a/src/tracker.ts
+++ b/src/tracker.ts
@@ -1,4 +1,4 @@
-import {moment, App, MarkdownSectionInformation, ButtonComponent, TextComponent, TFile} from "obsidian";
+import {moment, App, MarkdownSectionInformation, ButtonComponent, TextComponent, TFile, MarkdownRenderer} from "obsidian";
import {SimpleTimeTrackerSettings} from "./settings";
export interface Tracker {
@@ -370,62 +370,27 @@ class EditableTimestampField extends EditableField {
}
}
-class EditableTagField extends EditableField {
- constructor(row: HTMLTableRowElement, indent: number, value: string) {
- super(row, indent, value);
-
- const tagValue = this.getTag(value);
- this.label.innerHTML = tagValue;
- }
-
- beginEdit(value: string): void {
- super.beginEdit(value ? this.setTag(value) : "");
- }
-
- endEdit(): string {
- const value = this.box.getValue();
- let displayValue = value;
- if (value) {
- displayValue = this.getTag(value);
- }
- this.label.innerHTML = displayValue;
- this.box.inputEl.hide();
- this.label.hidden = false;
- return value;
- }
-
- getTag(value: string): string {
- const regex = /#(\S+)(?=\s|$)/;
- const match = value.match(regex);
- if (match) {
- const tagName = match[0];
- const tagHtml = `${tagName}`;
- return value.replace(regex, tagHtml);
- }
- return value;
- }
-
- setTag(value: string): string {
- const anchorRegex = /([^<]+)<\/a>/;
- const match = value.match(anchorRegex);
- if (match) {
- const tagName = match[2];
- return value.replace(anchorRegex, tagName);
- }
- return value;
- }
-}
-
-function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableElement, newSegmentNameBox: TextComponent, trackerRunning: boolean, file: string, getSectionInfo: () => MarkdownSectionInformation, settings: SimpleTimeTrackerSettings, indent: number): void {
+function addEditableTableRow(
+ tracker: Tracker,
+ entry: Entry,
+ table: HTMLTableElement,
+ newSegmentNameBox: TextComponent,
+ trackerRunning: boolean,
+ file: string,
+ getSectionInfo: () => MarkdownSectionInformation,
+ settings: SimpleTimeTrackerSettings,
+ indent: number
+): void {
let entryRunning = getRunningEntry(tracker.entries) == entry;
let row = table.createEl("tr");
- //let nameField = new EditableField(row, indent, entry.name);
- let nameField = new EditableTagField(row, indent, entry.name);
- let startField = new EditableTimestampField(row, (entry.startTime), settings);
- let endField = new EditableTimestampField(row, (entry.endTime), settings);
+ let nameField = new EditableField(row, indent, entry.name);
+ let startField = new EditableTimestampField(row, entry.startTime, settings);
+ let endField = new EditableTimestampField(row, entry.endTime, settings);
- row.createEl("td", {text: entry.endTime || entry.subEntries ? formatDuration(getDuration(entry), settings) : ""});
+ row.createEl("td", { text: entry.endTime || entry.subEntries ? formatDuration(getDuration(entry), settings) : "" });
+
+ renderSegments(row, file);
let entryButtons = row.createEl("td");
entryButtons.addClass("simple-time-tracker-table-buttons");
@@ -452,6 +417,8 @@ function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableEle
entry.endTime = endField.getTimestamp();
await saveTracker(tracker, this.app, file, getSectionInfo());
editButton.setIcon("lucide-pencil");
+
+ renderSegments(row, file);
} else {
nameField.beginEdit(entry.name);
// only allow editing start and end times if we don't have sub entries
@@ -473,7 +440,24 @@ function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableEle
});
if (entry.subEntries) {
- for (let sub of orderedEntries(entry.subEntries, settings))
- addEditableTableRow(tracker, sub, table, newSegmentNameBox, trackerRunning, file, getSectionInfo, settings, indent + 1);
+ for (let sub of orderedEntries(entry.subEntries, settings)) addEditableTableRow(tracker, sub, table, newSegmentNameBox, trackerRunning, file, getSectionInfo, settings, indent + 1);
+ }
+}
+
+/**
+ * Render Segment as Markdown
+ * @param row - Html row in table
+ * @param path - Path to file with time tracker
+ */
+function renderSegments(row: any, path: string) {
+ // Get coluumn with Segment
+ const segment = row.querySelector("td:first-child span");
+ if (segment) {
+ const htmlData = segment.innerHTML;
+ // Render Markdown
+ // Result `_rendered_html_
`
+ MarkdownRenderer.renderMarkdown(htmlData, segment as HTMLElement, path, this);
+ // Replace current segment by rendered version
+ segment.innerHTML = segment.querySelector("p").innerHTML;
}
}
diff --git a/test-vault/test-markdown.md b/test-vault/test-markdown.md
new file mode 100644
index 0000000..ca37478
--- /dev/null
+++ b/test-vault/test-markdown.md
@@ -0,0 +1,4 @@
+Tested for #tag, *italic*, [link](test2), etc:
+```simple-time-tracker
+{"entries":[{"name":"`Segment 1`","startTime":"2022-09-27T19:51:18.000Z","endTime":"2022-09-27T19:51:24.000Z"},{"name":"Segment 2","startTime":"2022-09-27T19:51:25.000Z","endTime":"2022-09-27T19:51:26.000Z"},{"name":"#tag Seqment 3 *add* #tag1 text","startTime":null,"endTime":null,"subEntries":[{"name":"Part 1 #tagp1","startTime":"2024-03-17T11:16:00.382Z","endTime":"2024-03-17T11:16:15.966Z","subEntries":null},{"name":"Part 3","startTime":"2024-03-17T11:17:08.000Z","endTime":"2024-03-17T11:17:24.000Z","subEntries":null}]},{"name":"#tag3 Segment 4","startTime":null,"endTime":null,"subEntries":[{"name":"Part 1 #tag4","startTime":"2024-03-17T12:22:04.000Z","endTime":"2024-03-17T12:22:16.000Z","subEntries":null},{"name":"#tag5 Part 2 *italic*","startTime":"2024-03-17T12:22:20.000Z","endTime":"2024-03-17T12:22:24.000Z","subEntries":null}]},{"name":"*italic* Segment 5 #tag6 [test2](test2)","startTime":"2024-03-17T12:40:37.000Z","endTime":"2024-03-17T12:40:45.000Z","subEntries":null}]}
+```