task.setAttribute("tabindex", "0");
task.setAttribute("data-created", timestamp);
document.getElementById("tasks")!.appendChild(task);
- task.focus();
return task;
},
return parseFloat(task.getAttribute("data-created")!);
},
+ getState: function (task: Element): string {
+ return task.getAttribute("data-state") ?? "todo";
+ },
+
getTask: function (createTimestamp: string) {
for (const task of document.getElementsByClassName("task")) {
if (task.getAttribute("data-created") === createTimestamp) {
for (const task of document.getElementsByClassName("task")) {
if (task !== target && this.getPriority(task) > priority) {
task.parentElement!.insertBefore(target, task);
- target instanceof HTMLElement && target.focus();
return target;
}
}
document.getElementById("tasks")!.appendChild(target);
- target instanceof HTMLElement && target.focus();
return target;
},
setState: function (stateTimestamp: string, createTimestamp: string, state: string) {
const task = this.getTask(createTimestamp);
if (task) {
- task.setAttribute(`data-${state}`, stateTimestamp);
+ task.setAttribute("data-state", state);
if (task instanceof HTMLElement) {
- task.style.display = "none"; // Until view filtering
+ task.style.display = state == "todo" ? "block" : "none"; // Until view filtering
}
}
},
undoLog.push(`Priority ${createTimestamp} ${oldPriority}`);
return log.recordAndApply(`${Date.now()} Priority ${createTimestamp} ${newPriority}`);
},
- setState: function (createTimestamp: string, state: string) {
- return log.recordAndApply(`${Date.now()} State ${createTimestamp} ${state}`);
+ setState: function (createTimestamp: string, newState: string, oldState: string) {
+ undoLog.push(`State ${createTimestamp} ${oldState}`);
+ return log.recordAndApply(`${Date.now()} State ${createTimestamp} ${newState}`);
},
undo: function () {
if (undoLog.length > 0) {
const input = <HTMLInputElement>document.getElementById("taskName");
if (input.value) {
const task = UI.addTask(input.value);
+ if (task && task instanceof HTMLElement) task.focus();
input.value = "";
if (event.getModifierState("Control")) {
this.setPriority(task, null, document.getElementsByClassName("task")[0]);
const newPriorityRounded = Math.round(newPriority);
const okToRound = aPriority < newPriorityRounded && newPriorityRounded < bPriority;
UI.setPriority(task.getAttribute("data-created")!, okToRound ? newPriorityRounded : newPriority, Model.getPriority(task));
+ task instanceof HTMLElement && task.focus();
},
- setState: function (state: string) {
- const createTimestamp = document.activeElement?.getAttribute("data-created");
+ setState: function (newState: string) {
+ const task = document.activeElement;
+ if (!task) return;
+ const oldState = Model.getState(task);
+ if (newState === oldState) return;
+ const createTimestamp = task.getAttribute("data-created")!;
this.moveCursor(1) || this.moveCursor(-1);
- return UI.setState(createTimestamp!, state);
+ return UI.setState(createTimestamp, newState, oldState);
},
undo: function () {
if (event.key == "w") return BrowserUI.setState("waiting");
if (event.key == "d") return BrowserUI.setState("done");
if (event.key == "c") return BrowserUI.setState("cancelled");
+ if (event.key == "t") return BrowserUI.setState("todo");
if (event.key == "X") return BrowserUI.setState("deleted");
if (event.key == "u") return BrowserUI.undo();
}