added timestamp format setting

This commit is contained in:
Ell 2022-09-28 13:18:37 +02:00
parent f694dfcc57
commit 10251de71c
7 changed files with 46 additions and 15 deletions

View file

@ -15,7 +15,6 @@ The tracker's information is stored in the code block as JSON data. The names, s
# 🛣️ Roadmap # 🛣️ Roadmap
Super Simple Time Tracker is still in its early stages! There are a lot of plans for it, including: Super Simple Time Tracker is still in its early stages! There are a lot of plans for it, including:
- A setting to allow users to decide what format timestamps should be displayed in
- A setting to link segments to corresponding daily notes automatically - A setting to link segments to corresponding daily notes automatically
- A neat interface to edit previous segments' names and time stamps - A neat interface to edit previous segments' names and time stamps
- The ability to copy the table in various formats, including as text, markdown, and csv - The ability to copy the table in various formats, including as text, markdown, and csv

View file

@ -15,7 +15,7 @@ export default class SimpleTimeTrackerPlugin extends Plugin {
this.registerMarkdownCodeBlockProcessor("simple-time-tracker", (s, e, i) => { this.registerMarkdownCodeBlockProcessor("simple-time-tracker", (s, e, i) => {
let tracker = loadTracker(s); let tracker = loadTracker(s);
e.empty(); e.empty();
displayTracker(tracker, e, () => i.getSectionInfo(e)); displayTracker(tracker, e, () => i.getSectionInfo(e), this.settings);
}); });
this.addCommand({ this.addCommand({

View file

@ -1,5 +1,6 @@
import { App, PluginSettingTab } from "obsidian"; import { App, PluginSettingTab, Setting } from "obsidian";
import SimpleTimeTrackerPlugin from "./main"; import SimpleTimeTrackerPlugin from "./main";
import { defaultSettings } from "./settings";
export class SimpleTimeTrackerSettingsTab extends PluginSettingTab { export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {
@ -14,7 +15,20 @@ export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {
this.containerEl.empty(); this.containerEl.empty();
this.containerEl.createEl("h2", { text: "Super Simple Time Tracker Settings" }); this.containerEl.createEl("h2", { text: "Super Simple Time Tracker Settings" });
this.containerEl.createEl("p", { text: "Settings coming soon!" }); new Setting(this.containerEl)
.setName("Timestamp Display Format")
.setDesc(createFragment(f => {
f.createSpan({ text: "The way that timestamps in time tracker tables should be displayed. Uses " });
f.createEl("a", { text: "moment.js", href: "https://momentjs.com/docs/#/parsing/string-format/" });
f.createSpan({ text: " syntax. Clear to reset to default." });
}))
.addText(t => {
t.setValue(String(this.plugin.settings.timestampFormat));
t.onChange(async v => {
this.plugin.settings.timestampFormat = v.length ? v : defaultSettings.timestampFormat;
await this.plugin.saveSettings();
});
});
this.containerEl.createEl("hr"); this.containerEl.createEl("hr");
this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" });

View file

@ -1,7 +1,9 @@
export const defaultSettings: SimpleTimeTrackerSettings = { export const defaultSettings: SimpleTimeTrackerSettings = {
timestampFormat: "YY-MM-DD hh:mm:ss"
}; };
export interface SimpleTimeTrackerSettings { export interface SimpleTimeTrackerSettings {
timestampFormat: string;
} }

View file

@ -1,4 +1,5 @@
import { moment, App, MarkdownSectionInformation, ButtonComponent, TextComponent } from "obsidian"; import { moment, App, MarkdownSectionInformation, ButtonComponent, TextComponent } from "obsidian";
import { SimpleTimeTrackerSettings } from "./settings";
export class Tracker { export class Tracker {
entries: Entry[]; entries: Entry[];
@ -52,7 +53,7 @@ export function loadTracker(json: string): Tracker {
return { entries: [] }; return { entries: [] };
} }
export function displayTracker(tracker: Tracker, element: HTMLElement, getSectionInfo: () => MarkdownSectionInformation): void { export function displayTracker(tracker: Tracker, element: HTMLElement, getSectionInfo: () => MarkdownSectionInformation, settings: SimpleTimeTrackerSettings): void {
// add start/stop controls // add start/stop controls
let running = isRunning(tracker); let running = isRunning(tracker);
let btn = new ButtonComponent(element) let btn = new ButtonComponent(element)
@ -92,9 +93,9 @@ export function displayTracker(tracker: Tracker, element: HTMLElement, getSectio
for (let entry of tracker.entries) { for (let entry of tracker.entries) {
let row = table.createEl("tr"); let row = table.createEl("tr");
row.createEl("td", { text: entry.name }); row.createEl("td", { text: entry.name });
row.createEl("td", { text: moment.unix(entry.startTime).format("YY-MM-DD hh:mm:ss") }); row.createEl("td", { text: moment.unix(entry.startTime).format(settings.timestampFormat) });
if (entry.endTime) { if (entry.endTime) {
row.createEl("td", { text: moment.unix(entry.endTime).format("YY-MM-DD hh:mm:ss") }); row.createEl("td", { text: moment.unix(entry.endTime).format(settings.timestampFormat) });
let duration = moment.unix(entry.endTime).diff(moment.unix(entry.startTime)); let duration = moment.unix(entry.endTime).diff(moment.unix(entry.startTime));
row.createEl("td", { text: getCountdownDisplay(moment.duration(duration)) }); row.createEl("td", { text: getCountdownDisplay(moment.duration(duration)) });
} }

View file

@ -0,0 +1,3 @@
{
"timestampFormat": "YY-MM-DD hh:mm:ss"
}

File diff suppressed because one or more lines are too long