+ task.setAttribute("data-created", timestamp);
+ document.getElementById("tasks")!.appendChild(task);
+ task.focus();
+ },
+
+ destroyTask: function (createTimestamp: string) {
+ const task = this.getTask(createTimestamp);
+ if (task) {
+ task.parentElement!.removeChild(task);
+ }
+ },
+
+ getPriority: function (task: Element): number {
+ if (task.hasAttribute("data-priority")) {
+ return parseFloat(task.getAttribute("data-priority")!);
+ }
+ return parseFloat(task.getAttribute("data-created")!);
+ },
+
+ getTask: function (createTimestamp: string) {
+ for (const task of document.getElementsByClassName("task")) {
+ if (task.getAttribute("data-created") === createTimestamp) {
+ return task;
+ }
+ }
+ },
+
+ setPriority: function (createTimestamp: string, priority: number) {
+ const target = this.getTask(createTimestamp);
+ if (!target) return;
+ target.setAttribute("data-priority", `${priority}`);
+ 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;
+ }
+ }
+ document.getElementById("tasks")!.appendChild(target);
+ target instanceof HTMLElement && target.focus();
+ },
+
+ setState: function (stateTimestamp: string, createTimestamp: string, state: string) {
+ const task = this.getTask(createTimestamp);
+ if (task) {
+ task.setAttribute(`data-${state}`, stateTimestamp);
+ if (task instanceof HTMLElement) {
+ task.style.display = "none"; // Until view filtering
+ }
+ }