From 518c86f884b8ac8bf2f8f47640bb064852afe958 Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Sat, 26 Mar 2016 13:52:36 -0400 Subject: [PATCH] start implementing enter key --- editor.coffee | 38 ++++++++++++++++++++++++++++++++++++++ parser.coffee | 1 + 2 files changed, 39 insertions(+) diff --git a/editor.coffee b/editor.coffee index 3ccd200..4211c11 100644 --- a/editor.coffee +++ b/editor.coffee @@ -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] diff --git a/parser.coffee b/parser.coffee index cdc3d1f..a1d41cd 100644 --- a/parser.coffee +++ b/parser.coffee @@ -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 -- 1.7.10.4