editor: delete/insert at the edges of a span
[fnpeditor.git] / src / editor / modules / documentCanvas / canvas / keyboard.js
index b39a900..f8aca73 100644 (file)
@@ -421,9 +421,11 @@ var keyEventHandlers = [
             s.canvas.wlxmlDocument.transaction(function() {
                 if(element.wlxmlNode.getIndex() === 0) {
                     goto = element.wlxmlNode.parent().moveUp();
-                    if(goto) {
-                        s.canvas.setCurrentElement(goto.node, {caretTo: goto.offset});
-                    }
+                } else {
+                    goto = element.wlxmlNode.moveUp();
+                }
+                if(goto) {
+                   s.canvas.setCurrentElement(goto.node, {caretTo: goto.offset});
                 }
             }, {
                 metadata: {
@@ -504,6 +506,34 @@ var keyEventHandlers = [
             });
 
         }
+    },
+    {
+        applies: function(e, s) {
+            return s.type === 'caret' && e.key === KEYS.ENTER && !s.element.parent().isRootElement();
+        },
+        run: function(e, s) {
+            var result, goto, gotoOptions;
+            void(e);
+            e.preventDefault();
+            s.canvas.wlxmlDocument.transaction(function() {
+                result = s.element.wlxmlNode.breakContent({offset: s.offset});
+            }, {
+                metadata: {
+                    description: gettext('Splitting text'),
+                    fragment: s.toDocumentFragment()
+                }
+            });
+
+            if(result.emptyText) {
+                goto = result.emptyText;
+                gotoOptions = {};
+            } else {
+                goto = result.second;
+                gotoOptions = {caretTo: 'start'};
+            }
+
+            s.canvas.setCurrentElement(utils.getElementForNode(goto), gotoOptions);
+        }
     }
 ];