Skip to content

Commit 3d9e616

Browse files
committed
Use fixed format for editable timestamps
1 parent 0612a4b commit 3d9e616

File tree

4 files changed

+123
-37
lines changed

4 files changed

+123
-37
lines changed

src/settings.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
export const defaultSettings: SimpleTimeTrackerSettings = {
22
timestampFormat: "YY-MM-DD HH:mm:ss",
3+
editableTimestampFormat: "YYYY-MM-DD HH:mm:ss",
34
csvDelimiter: ",",
45
fineGrainedDurations: true
56
};
67

78
export interface SimpleTimeTrackerSettings {
89

910
timestampFormat: string;
11+
editableTimestampFormat: string;
1012
csvDelimiter: string;
1113
fineGrainedDurations: boolean;
1214

src/tracker.ts

+41-13
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,12 @@ function formatTimestamp(timestamp: number, settings: SimpleTimeTrackerSettings)
202202
return moment.unix(timestamp).format(settings.timestampFormat);
203203
}
204204

205-
function unFormatTimestamp(formatted: string, settings: SimpleTimeTrackerSettings): number {
206-
return moment(formatted, settings.timestampFormat).unix();
205+
function formatEditableTimestamp(timestamp: number, settings: SimpleTimeTrackerSettings) {
206+
return moment.unix(timestamp).format(settings.editableTimestampFormat);
207+
}
208+
209+
function unformatEditableTimestamp(formatted: string, settings: SimpleTimeTrackerSettings): number {
210+
return moment(formatted, settings.editableTimestampFormat).unix();
207211
}
208212

209213
function formatDuration(totalTime: number, settings: SimpleTimeTrackerSettings): string {
@@ -294,24 +298,46 @@ class EditableField {
294298
this.box.inputEl.show();
295299
}
296300
endEdit(): string {
297-
let value = this.box.getValue()
301+
const value = this.box.getValue();
298302
this.label.setText(value);
299303
this.box.inputEl.hide();
300304
this.label.hidden = false;
301305
return value;
302306
}
303307
}
304308

309+
class EditableTimestampField extends EditableField {
310+
settings: SimpleTimeTrackerSettings;
311+
constructor(row: HTMLTableRowElement, indent: number, value: string, settings: SimpleTimeTrackerSettings) {
312+
const timestamp = Number(value);
313+
value = timestamp > 0 ? formatTimestamp(timestamp, settings) : "";
314+
super(row, indent, value);
315+
this.settings = settings;
316+
}
317+
beginEdit(value: string) {
318+
value = formatEditableTimestamp(Number(value), this.settings);
319+
super.beginEdit(value);
320+
}
321+
endEdit(): string {
322+
const value = this.box.getValue();
323+
const timestamp = unformatEditableTimestamp(value, this.settings);
324+
const displayValue = formatTimestamp(timestamp, this.settings);
325+
this.label.setText(displayValue);
326+
this.box.inputEl.hide();
327+
this.label.hidden = false;
328+
return value;
329+
}
330+
getTimestamp(): number {
331+
return unformatEditableTimestamp(this.box.getValue(), this.settings);
332+
}
333+
}
334+
305335
function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableElement, newSegmentNameBox: TextComponent, running: boolean, file: string, getSectionInfo: () => MarkdownSectionInformation, settings: SimpleTimeTrackerSettings, indent: number) {
306336
let row = table.createEl("tr");
307337

308338
let nameField = new EditableField(row, indent, entry.name);
309-
310-
let startValue = entry.startTime ? formatTimestamp(entry.startTime, settings) : "";
311-
let startField = new EditableField(row, indent, startValue);
312-
313-
let endValue = entry.endTime ? formatTimestamp(entry.endTime, settings) : "";
314-
let endField = new EditableField(row, indent, endValue);
339+
let startField = new EditableTimestampField(row, indent, String(entry.startTime), settings);
340+
let endField = new EditableTimestampField(row, indent, String(entry.endTime), settings);
315341

316342
row.createEl("td", { text: entry.endTime || entry.subEntries ? formatDuration(getDuration(entry), settings) : "" });
317343

@@ -333,14 +359,16 @@ function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableEle
333359
.onClick(async () => {
334360
if (nameField.editing()) {
335361
entry.name = nameField.endEdit();
336-
entry.startTime = unFormatTimestamp(startField.endEdit(), settings);
337-
entry.endTime = unFormatTimestamp(endField.endEdit(), settings);
362+
startField.endEdit();
363+
entry.startTime = startField.getTimestamp();
364+
endField.endEdit();
365+
entry.endTime = endField.getTimestamp();
338366
await saveTracker(tracker, this.app, file, getSectionInfo());
339367
editButton.setIcon("lucide-pencil");
340368
} else {
341369
nameField.beginEdit(entry.name);
342-
startField.beginEdit(formatTimestamp(entry.startTime, settings));
343-
endField.beginEdit(formatTimestamp(entry.endTime, settings));
370+
startField.beginEdit(String(entry.startTime));
371+
endField.beginEdit(String(entry.endTime));
344372
editButton.setIcon("lucide-check");
345373
}
346374
});

test-vault/.obsidian/plugins/simple-time-tracker/main

+40-12
Large diffs are not rendered by default.

test-vault/.obsidian/plugins/simple-time-tracker/main.js

+40-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)