editor: selection fix - handle Zero Width Space in an empty text element
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 1 Aug 2014 08:57:41 +0000 (10:57 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Thu, 14 Aug 2014 14:01:45 +0000 (16:01 +0200)
src/editor/modules/documentCanvas/canvas/selection.js

index fbae482..4de392b 100644 (file)
@@ -121,21 +121,25 @@ return {
         /* globals window */
         var nativeSelection =  window.getSelection(),
             params = {},
-            element;
+            element, anchorElement, focusElement;
+            
         if(nativeSelection.focusNode) {
             if(nativeSelection.isCollapsed && isText(nativeSelection.focusNode)) {
+                element = canvas.getDocumentElement(nativeSelection.focusNode);
                 params = {
                     type: 'caret',
-                    element: canvas.getDocumentElement(nativeSelection.focusNode),
-                    offset: nativeSelection.focusOffset
+                    element: element,
+                    offset: element.isEmpty() ? 0 : nativeSelection.focusOffset
                 };
             } else if(isText(nativeSelection.focusNode) && isText(nativeSelection.anchorNode)) {
+                anchorElement = canvas.getDocumentElement(nativeSelection.anchorNode);
+                focusElement = canvas.getDocumentElement(nativeSelection.focusNode);
                 params = {
                     type: 'textSelection',
-                    anchorElement: canvas.getDocumentElement(nativeSelection.anchorNode),
-                    anchorOffset: nativeSelection.anchorOffset,
-                    focusElement: canvas.getDocumentElement(nativeSelection.focusNode),
-                    focusOffset: nativeSelection.focusOffset
+                    anchorElement: anchorElement,
+                    anchorOffset: anchorElement.isEmpty() ? 0 : nativeSelection.anchorOffset,
+                    focusElement: focusElement,
+                    focusOffset: focusElement.isEmpty() ? 0 : nativeSelection.focusOffset
                 };
             }
         } else if((element = canvas.getCurrentNodeElement())) {