JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
start on cursor-up key
[peach-html5-editor.git] / editor.coffee
index a9d0a3c..411072a 100644 (file)
@@ -388,13 +388,15 @@ find_prev_cursor_position = (tree, n, i) ->
                                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
@@ -739,6 +741,27 @@ class PeachHTML5Editor
                                                        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?
@@ -746,11 +769,11 @@ class PeachHTML5Editor
                                        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