editor: WrapTextAction plays nice and returns a new document fragment
[fnpeditor.git] / src / editor / plugins / core / core.js
index 4c2f4c0..a780227 100644 (file)
@@ -172,13 +172,21 @@ var createWrapTextAction = function(createParams) {
                 description: createParams.description,
                 execute: function(callback, params) {
                     params.fragment.document.transaction(function() {
-                        var parent = params.fragment.startNode.parent();
-                        return parent.wrapText({
+                        var parent = params.fragment.startNode.parent(),
+                            doc = params.fragment.document,
+                            wrapper, lastTextNode;
+                        
+                        wrapper = parent.wrapText({
                             _with: {tagName: 'span', attrs: {'class': createParams.klass}},
                             offsetStart: params.fragment.startOffset,
                             offsetEnd: params.fragment.endOffset,
                             textNodeIdx: [params.fragment.startNode.getIndex(), params.fragment.endNode.getIndex()]
                         });
+                            
+                        lastTextNode = wrapper.getLastTextNode();
+                        if(lastTextNode) {
+                            return doc.createFragment(doc.CaretFragment, {node: lastTextNode, offset: lastTextNode.getText().length});
+                        }
                     }, {
                         metadata: {
                             description: createParams.description
@@ -206,15 +214,16 @@ var createLinkFromSelection = function(callback, params) {
     
     dialog.on('execute', function(event) {
         doc.transaction(function() {
-            var span =  params.fragment.startNode.parent().wrapText({
+            var span =  action.params.fragment.startNode.parent().wrapText({
                 _with: {tagName: 'span', attrs: {'class': 'link'}},
                 offsetStart: params.fragment.startOffset,
                 offsetEnd: params.fragment.endOffset,
                 textNodeIdx: [params.fragment.startNode.getIndex(), params.fragment.endNode.getIndex()]
-            });
+            }),
+                doc = params.fragment.document;
             span.setAttr('href', event.formData.href);
             event.success();
-            return span;
+            return doc.createFragment(doc.CaretFragment, {node: span.contents()[0], offset:0});
         }, {
             metadata: {
                 description: action.getState().description
@@ -242,6 +251,7 @@ var editLink = function(callback, params) {
         doc.transaction(function() {
             link.setAttr('href', event.formData.href);
             event.success();
+            return params.fragment;
         }, {
             metadata: {
                 description: action.getState().description