- destroyTask: function (createTimestamp: string) {
- const task = this.getTask(createTimestamp);
- if (task) {
- task.parentElement!.removeChild(task);
+ edit: function (createTimestamp: string, newDescription: string): Element | null {
+ const target = this.getTask(createTimestamp);
+ if (!target) return null;
+ if (target.hasAttribute("data-description")) {
+ // Oh no: An edit has arrived from a replica while a local edit is in progress.
+ const input = target.children[0] as HTMLInputElement;
+ if (
+ input.value === target.getAttribute("data-description") &&
+ input.selectionStart === 0 &&
+ input.selectionEnd === input.value.length
+ ) {
+ // No local changes have actually been made yet. Change the contents of the edit box!
+ input.value = newDescription;
+ input.select();
+ } else {
+ // No great options.
+ // Prefer not to interrupt the local user's edit.
+ // The remote edit is mostly lost; this mostly becomes last-write-wins.
+ target.setAttribute("data-description", newDescription);
+ }
+ } else {
+ target.textContent = newDescription;