mirror of
https://github.com/Ellpeck/ObsidianSimpleTimeTracker.git
synced 2024-12-18 19:39:22 +01:00
Add minimal implementation for shortcuts in the tracker fields
This commit is contained in:
parent
7033f28555
commit
c478ce6123
1 changed files with 72 additions and 24 deletions
|
@ -382,31 +382,65 @@ function addEditableTableRow(tracker: Tracker, entry: Entry, table: HTMLTableEle
|
|||
.setTooltip("Edit")
|
||||
.setIcon("lucide-pencil")
|
||||
.onClick(async () => {
|
||||
if (nameField.editing()) {
|
||||
entry.name = nameField.endEdit();
|
||||
expandButton.buttonEl.style.display = null;
|
||||
startField.endEdit();
|
||||
entry.startTime = startField.getTimestamp();
|
||||
if (!entryRunning) {
|
||||
endField.endEdit();
|
||||
entry.endTime = endField.getTimestamp();
|
||||
}
|
||||
await saveTracker(tracker, getFile(), getSectionInfo());
|
||||
editButton.setIcon("lucide-pencil");
|
||||
|
||||
renderNameAsMarkdown(nameField.label, getFile, component);
|
||||
} else {
|
||||
nameField.beginEdit(entry.name);
|
||||
expandButton.buttonEl.style.display = "none";
|
||||
// only allow editing start and end times if we don't have sub entries
|
||||
if (!entry.subEntries) {
|
||||
startField.beginEdit(entry.startTime);
|
||||
if (!entryRunning)
|
||||
endField.beginEdit(entry.endTime);
|
||||
}
|
||||
editButton.setIcon("lucide-check");
|
||||
}
|
||||
await handleEdit();
|
||||
});
|
||||
|
||||
// Add double-click to edit functionality
|
||||
nameField.label.addEventListener('dblclick', async () => {
|
||||
if (!nameField.editing()) {
|
||||
await handleEdit();
|
||||
}
|
||||
});
|
||||
|
||||
async function handleEdit() {
|
||||
if (nameField.editing()) {
|
||||
await saveChanges();
|
||||
} else {
|
||||
startEditing();
|
||||
}
|
||||
}
|
||||
|
||||
async function saveChanges() {
|
||||
entry.name = nameField.endEdit();
|
||||
expandButton.buttonEl.style.display = null;
|
||||
startField.endEdit();
|
||||
entry.startTime = startField.getTimestamp();
|
||||
if (!entryRunning) {
|
||||
endField.endEdit();
|
||||
entry.endTime = endField.getTimestamp();
|
||||
}
|
||||
await saveTracker(tracker, getFile(), getSectionInfo());
|
||||
editButton.setIcon("lucide-pencil");
|
||||
renderNameAsMarkdown(nameField.label, getFile, component);
|
||||
}
|
||||
|
||||
function startEditing() {
|
||||
nameField.beginEdit(entry.name);
|
||||
expandButton.buttonEl.style.display = "none";
|
||||
// only allow editing start and end times if we don't have sub entries
|
||||
if (!entry.subEntries) {
|
||||
startField.beginEdit(entry.startTime);
|
||||
if (!entryRunning)
|
||||
endField.beginEdit(entry.endTime);
|
||||
}
|
||||
editButton.setIcon("lucide-check");
|
||||
|
||||
// Set up save/cancel handlers for keyboard shortcuts
|
||||
nameField.onSave = startField.onSave = endField.onSave = async () => {
|
||||
await saveChanges();
|
||||
};
|
||||
|
||||
nameField.onCancel = startField.onCancel = endField.onCancel = () => {
|
||||
nameField.endEdit();
|
||||
startField.endEdit();
|
||||
if (!entryRunning) {
|
||||
endField.endEdit();
|
||||
}
|
||||
expandButton.buttonEl.style.display = null;
|
||||
editButton.setIcon("lucide-pencil");
|
||||
};
|
||||
}
|
||||
|
||||
new ButtonComponent(entryButtons)
|
||||
.setClass("clickable-icon")
|
||||
.setTooltip("Remove")
|
||||
|
@ -449,6 +483,8 @@ class EditableField {
|
|||
cell: HTMLTableCellElement;
|
||||
label: HTMLSpanElement;
|
||||
box: TextComponent;
|
||||
onSave?: () => void;
|
||||
onCancel?: () => void;
|
||||
|
||||
constructor(row: HTMLTableRowElement, indent: number, value: string) {
|
||||
this.cell = row.createEl("td");
|
||||
|
@ -457,6 +493,18 @@ class EditableField {
|
|||
this.box = new TextComponent(this.cell).setValue(value);
|
||||
this.box.inputEl.addClass("simple-time-tracker-input");
|
||||
this.box.inputEl.hide();
|
||||
this.box.inputEl.addEventListener('keydown', (e: KeyboardEvent) => {
|
||||
// Save with Ctrl/Cmd + Enter
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
this.onSave?.();
|
||||
}
|
||||
// Cancel with Escape
|
||||
if (e.key === 'Escape') {
|
||||
e.preventDefault();
|
||||
this.onCancel?.();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
editing(): boolean {
|
||||
|
|
Loading…
Reference in a new issue