- moveTask: function (offset: number) {
- const active = document.activeElement;
- if (!active) return;
- const dest = this.visibleTaskAtOffset(active, offset);
- if (dest === active) return; // Already extremal
- var onePastDest: Element | null = this.visibleTaskAtOffset(dest, offset / Math.abs(offset));
- if (onePastDest == dest) onePastDest = null; // Will become extremal
- if (offset > 0) {
- this.setPriority(active, dest, onePastDest);
- } else {
- this.setPriority(active, onePastDest, dest);
- }
- },
+ // Change task's priority to be between other tasks a and b.
+ setPriority: function (task: Element, a: Element | null, b: Element | null) {
+ const aPriority = a === null ? 0 : Model.getPriority(a);
+ const bPriority = b === null ? clock.now() : Model.getPriority(b);
+ console.assert(aPriority < bPriority, aPriority, "<", bPriority);
+ const span = bPriority - aPriority;
+ const newPriority = aPriority + 0.1 * span + 0.8 * span * Math.random();
+ console.assert(aPriority < newPriority && newPriority < bPriority, aPriority, "<", newPriority, "<", bPriority);
+ 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();
+ },