editor: plugins/core - restore selection after editing/deleting link via a link tool box
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 13 May 2014 10:39:29 +0000 (12:39 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 13 May 2014 10:39:29 +0000 (12:39 +0200)
src/editor/plugins/core/links/linkElement.js

index 503e958..8d280c7 100644 (file)
@@ -40,6 +40,7 @@ _.extend(linkElement, {
     changeLink: function(e) {
         var el = this,
             doc = this.wlxmlNode.document,
     changeLink: function(e) {
         var el = this,
             doc = this.wlxmlNode.document,
+            offset = el.canvas.getSelection().toDocumentFragment().offset,
             dialog = Dialog.create({
             title: gettext('Edit link'),
             executeButtonText: gettext('Apply'),
             dialog = Dialog.create({
             title: gettext('Edit link'),
             executeButtonText: gettext('Apply'),
@@ -63,6 +64,9 @@ _.extend(linkElement, {
                 metadata: {
                     description: gettext('Edit link'),
                     fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0})
                 metadata: {
                     description: gettext('Edit link'),
                     fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0})
+                },
+                success: function() {
+                    el.canvas.select(doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:offset}));
                 }
             });
         });
                 }
             });
         });
@@ -74,11 +78,23 @@ _.extend(linkElement, {
             doc = this.wlxmlNode.document;
 
         el.wlxmlNode.document.transaction(function() {
             doc = this.wlxmlNode.document;
 
         el.wlxmlNode.document.transaction(function() {
-            el.wlxmlNode.unwrapContent();
+            var f = el.canvas.getSelection().toDocumentFragment(),
+                prefLen = 0,
+                ret;
+
+            if(el.wlxmlNode.isPrecededByTextNode()) {
+                prefLen = el.wlxmlNode.prev().getText().length;
+            }
+
+            ret = el.wlxmlNode.unwrapContent();
+            return doc.createFragment(doc.CaretFragment, {node: ret.element1, offset: prefLen + f.offset});
         }, {
             metadata: {
                 description: gettext('Remove link'),
                 fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0})
         }, {
             metadata: {
                 description: gettext('Remove link'),
                 fragment: doc.createFragment(doc.CaretFragment, {node: el.wlxmlNode.contents()[0], offset:0})
+            },
+            success: function(ret) {
+                el.canvas.select(ret);
             }
         });
     },
             }
         });
     },