+ editContent: function (createTimestamp: string, newContent: string): Element | null {
+ const target = this.getTask(createTimestamp);
+ if (!target) return null;
+ if (target.hasAttribute("data-content")) {
+ // Oh no: An edit has arrived from a replica while a local edit is in progress.
+ const input = target.getElementsByTagName("textarea")[0]!;
+ if (
+ input.value === target.getAttribute("data-content") &&
+ input.selectionStart === input.value.length &&
+ input.selectionEnd === input.value.length
+ ) {
+ // No local changes have actually been made yet. Change the contents of the edit box!
+ input.value = newContent;
+ } 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-content", newContent);
+ }
+ } else {
+ var content = target.getElementsByClassName("content")[0];
+ if (!content) {
+ content = document.createElement("div");
+ content.classList.add("content");
+ target.appendChild(content);
+ }
+ content.textContent = newContent;
+ }
+ return target;
+ },
+