event.preventDefault();
},
- moveCursor: function (offset: number): boolean {
- var initial_cursor = document.activeElement;
- if (!initial_cursor) return false;
- var cursor: Element | null = initial_cursor;
+ visibleTaskAtOffset(task: Element, offset: number): Element {
+ var cursor: Element | null = task;
var valid_cursor = cursor;
const increment = offset / Math.abs(offset);
while (true) {
}
if (Math.abs(offset) < 0.5) break;
}
- if (valid_cursor !== initial_cursor && valid_cursor instanceof HTMLElement) {
- valid_cursor.focus();
+ return valid_cursor;
+ },
+
+ moveCursor: function (offset: number): boolean {
+ const active = document.activeElement;
+ if (!active) return false;
+ const dest = this.visibleTaskAtOffset(active, offset);
+ if (dest !== active && dest instanceof HTMLElement) {
+ dest.focus();
return true;
}
return false;