editor: fix splitting text when its parent contains comments
[fnpeditor.git] / src / editor / plugins / core / core.js
index ba6229f..450f147 100644 (file)
@@ -18,14 +18,27 @@ plugin.documentExtension.textNode.transformations = {
     breakContent: {
         impl: function(args) {
             var node = this,
+                parentDescribingNodes = [],
                 newNodes, emptyText;
             newNodes = node.split({offset: args.offset});
+            newNodes.second.contents()
+                .filter(function(child) {
+                    return child.object.describesParent;
+                })
+                .forEach(function(child) {
+                    //child.detach();
+                    parentDescribingNodes.push(child);
+                    child.detach();
+                });
             [newNodes.first, newNodes.second].some(function(newNode) {
                 if(!(newNode.contents().length)) {
                     emptyText = newNode.append({text: ''});
                     return true; // break
                 }
             });
+            parentDescribingNodes.forEach(function(node) {
+                newNodes.first.append(node);
+            });
             return _.extend(newNodes, {emptyText: emptyText});
         },
         getChangeRoot: function() {
@@ -220,7 +233,8 @@ var createWrapTextAction = function(createParams) {
                             return newFragment;
                         }, {
                             metadata: {
-                                description: createParams.unwrapDescription
+                                description: createParams.unwrapDescription,
+                                fragment: params.fragment
                             },
                             success: callback
                         });
@@ -256,7 +270,8 @@ var createWrapTextAction = function(createParams) {
                             }
                         }, {
                             metadata: {
-                                description: createParams.wrapDescription
+                                description: createParams.wrapDescription,
+                                fragment: params.fragment
                             },
                             success: callback
                         });
@@ -298,7 +313,8 @@ var createLinkFromSelection = function(callback, params) {
             return doc.createFragment(doc.CaretFragment, {node: span.contents()[0], offset:0});
         }, {
             metadata: {
-                description: action.getState().description
+                description: action.getState().description,
+                fragment: params.fragment
             },
             success: callback
         });
@@ -326,7 +342,8 @@ var editLink = function(callback, params) {
             return params.fragment;
         }, {
             metadata: {
-                description: action.getState().description
+                description: action.getState().description,
+                fragment: params.fragment
             },
             success: callback
         });