},
replay: function () {
+ document.getElementById("tasks")!.style.display = "none";
while (true) {
const entry = window.localStorage.getItem(`${prefix}${next_log_index}`);
if (entry === null) {
this.apply(entry);
next_log_index++;
}
+ document.getElementById("tasks")!.style.display = "";
},
};
}
this.firstVisibleTask()?.focus();
}
input.value = "";
- if (currentTagView) {
- ui.addTag(task.getAttribute("data-created")!, currentTagView);
- }
if (event.getModifierState("Control")) {
this.makeBottomPriority(task);
}
return target as HTMLElement;
},
- firstVisibleTask: function () {
- for (const task of document.getElementsByClassName("task")) {
+ firstVisibleTask: function (root: Element | null = null) {
+ if (root === null) root = document.body;
+ for (const task of root.getElementsByClassName("task")) {
const state = task.getAttribute("data-state");
if (
task instanceof HTMLElement &&
task instanceof HTMLElement && task.focus();
},
- moveCursor: function (offset: number): boolean {
+ moveCursorLeft: function () {
+ const active = this.currentTask();
+ if (!active) return false;
+ if (active.parentElement!.classList.contains("task")) {
+ active.parentElement!.focus();
+ }
+ },
+
+ moveCursorRight: function () {
+ const active = this.currentTask();
+ if (!active) return false;
+ (this.firstVisibleTask(active) as HTMLElement | null)?.focus();
+ },
+
+ moveCursorVertically: function (offset: number): boolean {
const active = this.currentTask();
if (!active) return false;
const dest = this.visibleTaskAtOffset(active, offset);
if (newState === oldState) return;
const createTimestamp = task.getAttribute("data-created")!;
if (currentViewState !== "all" || newState == "deleted") {
- this.moveCursor(1) || this.moveCursor(-1);
+ this.moveCursorVertically(1) || this.moveCursorVertically(-1);
}
return ui.setState(createTimestamp, newState, oldState);
},
if (event.key == "e") return window.scrollBy(0, (inputCount ?? 1) * scrollIncrement);
if (event.key == "y") return window.scrollBy(0, (inputCount ?? 1) * -scrollIncrement);
} else {
- if (event.key == "j") return browserUI.moveCursor(inputCount ?? 1);
- if (event.key == "k") return browserUI.moveCursor(-(inputCount ?? 1));
+ if (event.key == "h") return browserUI.moveCursorLeft();
+ if (event.key == "l") return browserUI.moveCursorRight();
+ if (event.key == "j") return browserUI.moveCursorVertically(inputCount ?? 1);
+ if (event.key == "k") return browserUI.moveCursorVertically(-(inputCount ?? 1));
if (event.key == "J") return browserUI.moveTask(inputCount ?? 1);
if (event.key == "K") return browserUI.moveTask(-(inputCount ?? 1));
if (event.key == "G") return browserUI.jumpCursor(inputCount ?? MAX_SAFE_INTEGER);