JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
start implementing enter key
authorJason Woofenden <jason@jasonwoof.com>
Sat, 26 Mar 2016 17:52:36 +0000 (13:52 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Sat, 26 Mar 2016 17:52:36 +0000 (13:52 -0400)
editor.coffee
parser.coffee

index 3ccd200..4211c11 100644 (file)
@@ -946,6 +946,7 @@ class PeachHTML5Editor
                                        @kill_cursor()
                                return false
                        when KEY_ENTER
+                               @on_key_enter e
                                return false
                        when KEY_ESCAPE
                                @kill_cursor()
@@ -979,6 +980,43 @@ class PeachHTML5Editor
                                console.log "ERROR: couldn't find cursor position after insert"
                                @kill_cursor()
                return false
+       on_key_enter: (e) -> # enter key pressed
+               return unless @cursor_visible
+               cur_block = @cursor.n
+               loop
+                       if cur_block.type is 'tag'
+                               if is_display_block cur_block.el
+                                       break
+                       return unless cur_block.parent?
+                       cur_block = cur_block.parent
+               # find array to insert new element into
+               if cur_block.parent?.el?
+                       parent_el = cur_block.parent.el
+                       pc = cur_block.parent.children
+               else
+                       parent_el = @idoc.body
+                       pc = @tree
+               # find index of current block in its parent
+               for n, i in pc
+                       break if n is cur_block
+               i += 1 # we want to be after it
+               if i < pc.length
+                       before = pc[i].el
+               else
+                       before = null
+               # TODO if content after cursor
+               #       TODO new block is empty
+               new_text = new peach_parser.Node 'text', text: ' '
+               new_node = new peach_parser.Node 'tag', name: 'p', parent: cur_block.parent, attrs: {style: 'white-space: pre-wrap'}, children: [new_text]
+               new_text.parent = new_node
+               new_text.el = domify @idoc, text: ' '
+               new_node.el = domify @idoc, p: style: 'white-space: pre-wrap', children: [new_text.el]
+               pc.splice i, 0, new_node
+               parent_el.insertBefore new_node.el, before
+               new_cursor = new_cursor_position n: new_text, i: 0
+               throw 'bork bork' unless new_cursor?
+               @move_cursor new_cursor
+               # TODO move content past cursor into this new block
        clear_dom: -> # remove all the editable content (and cursor, overlays, etc)
                while @idoc.body.childNodes.length
                        @idoc.body.removeChild @idoc.body.childNodes[0]
index cdc3d1f..a1d41cd 100644 (file)
@@ -4733,6 +4733,7 @@ parse_html = (args_html, args = {}) ->
        return doc.children
 
 exports.parse = parse_html
+exports.Node = Node
 exports.debug_log_reset = debug_log_reset
 exports.debug_log_each = debug_log_each
 exports.TYPE_TAG = TYPE_TAG