if prev_xyh.x < orig_xyh.x or prev_xyh.y < orig_xyh.y
return [n, prev_i]
return [n, i - 1]
- found_prev = n?
+ found_prev = null
found = null
traverse_tree tree, (node) ->
if node.type is 'text'
+ unless n?
+ found = node
+ return true
if node is n
- if found_prev?
- found = found_prev
+ found = found_prev # null if n is the first text node
return true
found_prev = node
return false
break
return false
when KEY_UP
+ if @cursor?
+ new_cursor = @cursor
+ old_loc = cursor_to_xyh new_cursor[0], new_cursor[1]
+ new_loc = x: old_loc.x, y: old_loc.y
+ while new_loc.y >= old_loc.y
+ new_cursor = find_prev_cursor_position @tree, new_cursor[0], new_cursor[1]
+ return false unless new_cursor?
+ new_loc = cursor_to_xyh new_cursor[0], new_cursor[1]
+ if new_cursor?
+ # now we're above
+ if new_loc.x > old_loc.x
+ console.log 'fixme'
+ # TODO move left until we go up or meet/pass old_loc.x
+ # then set new_cursor to the closest
+ @move_cursor new_cursor
+ else
+ # move cursor to first position in document
+ new_cursor = find_prev_cursor_position @tree
+ if new_cursor?
+ @move_cursor new_cursor
+ break
return false
when KEY_RIGHT
if @cursor?
if new_cursor?
@move_cursor new_cursor
else
- for c in @tree
- new_cursor = find_prev_cursor_position @tree, c, -1
- if new_cursor?
- @move_cursor new_cursor
- break
+ # move cursor to first position in document
+ new_cursor = find_prev_cursor_position @tree
+ if new_cursor?
+ @move_cursor new_cursor
+ break
return false
when KEY_DOWN
return false