JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.3
[ckeditor.git] / _source / core / dom / range.js
index 0146f6a..8f10980 100644 (file)
@@ -3,6 +3,9 @@ Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
+/**\r
+ * @class\r
+ */\r
 CKEDITOR.dom.range = function( document )\r
 {\r
        this.startContainer     = null;\r
@@ -305,7 +308,7 @@ CKEDITOR.dom.range = function( document )
                return node.type != CKEDITOR.NODE_TEXT\r
                            && node.getName() in CKEDITOR.dtd.$removeEmpty\r
                            || !CKEDITOR.tools.trim( node.getText() )\r
-                           || node.getParent().hasAttribute( '_fck_bookmark' );\r
+                           || node.getParent().hasAttribute( '_cke_bookmark' );\r
        }\r
 \r
        var whitespaceEval = new CKEDITOR.dom.walker.whitespaces(),\r
@@ -348,7 +351,10 @@ CKEDITOR.dom.range = function( document )
                        this.collapsed = true;\r
                },\r
 \r
-               // The selection may be lost when cloning (due to the splitText() call).\r
+               /**\r
+                *  The content nodes of the range are cloned and added to a document fragment, which is returned.\r
+                *  <strong> Note: </strong> Text selection may lost after invoking this method. (caused by text node splitting).\r
+                */\r
                cloneContents : function()\r
                {\r
                        var docFrag = new CKEDITOR.dom.documentFragment( this.document );\r
@@ -359,6 +365,9 @@ CKEDITOR.dom.range = function( document )
                        return docFrag;\r
                },\r
 \r
+               /**\r
+                * Deletes the content nodes of the range permanently from the DOM tree.\r
+                */\r
                deleteContents : function()\r
                {\r
                        if ( this.collapsed )\r
@@ -367,6 +376,10 @@ CKEDITOR.dom.range = function( document )
                        execContentsAction( this, 0 );\r
                },\r
 \r
+               /**\r
+                *  The content nodes of the range are cloned and added to a document fragment,\r
+                * meanwhile they're removed permanently from the DOM tree.\r
+                */\r
                extractContents : function()\r
                {\r
                        var docFrag = new CKEDITOR.dom.documentFragment( this.document );\r
@@ -400,7 +413,7 @@ CKEDITOR.dom.range = function( document )
                        var collapsed = this.collapsed;\r
 \r
                        startNode = this.document.createElement( 'span' );\r
-                       startNode.setAttribute( '_fck_bookmark', 1 );\r
+                       startNode.setAttribute( '_cke_bookmark', 1 );\r
                        startNode.setStyle( 'display', 'none' );\r
 \r
                        // For IE, it must have something inside, otherwise it may be\r
@@ -710,10 +723,10 @@ CKEDITOR.dom.range = function( document )
                                endNode = this.endContainer;\r
 \r
                        if ( startNode.is && startNode.is( 'span' )\r
-                               && startNode.hasAttribute( '_fck_bookmark' ) )\r
+                               && startNode.hasAttribute( '_cke_bookmark' ) )\r
                                this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START );\r
                        if ( endNode && endNode.is && endNode.is( 'span' )\r
-                               && endNode.hasAttribute( '_fck_bookmark' ) )\r
+                               && endNode.hasAttribute( '_cke_bookmark' ) )\r
                                this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END );\r
                },\r
 \r
@@ -919,7 +932,7 @@ CKEDITOR.dom.range = function( document )
                                                                // If this is a visible element.\r
                                                                // We need to check for the bookmark attribute because IE insists on\r
                                                                // rendering the display:none nodes we use for bookmarks. (#3363)\r
-                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )\r
+                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )\r
                                                                {\r
                                                                        // We'll accept it only if we need\r
                                                                        // whitespace, and this is an inline\r
@@ -1078,7 +1091,7 @@ CKEDITOR.dom.range = function( document )
                                                                // If this is a visible element.\r
                                                                // We need to check for the bookmark attribute because IE insists on\r
                                                                // rendering the display:none nodes we use for bookmarks. (#3363)\r
-                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )\r
+                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_cke_bookmark' ) )\r
                                                                {\r
                                                                        // We'll accept it only if we need\r
                                                                        // whitespace, and this is an inline\r
@@ -1300,7 +1313,8 @@ CKEDITOR.dom.range = function( document )
                                        }\r
                                }\r
 \r
-                               var walker = new CKEDITOR.dom.walker( walkerRange );\r
+                               var walker = new CKEDITOR.dom.walker( walkerRange ),\r
+                                       isBookmark = CKEDITOR.dom.walker.bookmark();\r
 \r
                                walker.evaluator = function( node )\r
                                {\r
@@ -1311,6 +1325,9 @@ CKEDITOR.dom.range = function( document )
                                var currentElement;\r
                                walker.guard = function( node, movingOut )\r
                                {\r
+                                       if ( isBookmark( node ) )\r
+                                               return true;\r
+\r
                                        // Stop when we're shrink in element mode while encountering a text node.\r
                                        if ( mode == CKEDITOR.SHRINK_ELEMENT && node.type == CKEDITOR.NODE_TEXT )\r
                                                return false;\r
@@ -1398,7 +1415,7 @@ CKEDITOR.dom.range = function( document )
                        // Fixing invalid range start inside dtd empty elements.\r
                        if( startNode.type == CKEDITOR.NODE_ELEMENT\r
                                && CKEDITOR.dtd.$empty[ startNode.getName() ] )\r
-                               startNode = startNode.getParent(), startOffset = startNode.getIndex();\r
+                               startOffset = startNode.getIndex(), startNode = startNode.getParent();\r
 \r
                        this.startContainer     = startNode;\r
                        this.startOffset        = startOffset;\r
@@ -1429,7 +1446,7 @@ CKEDITOR.dom.range = function( document )
                        // Fixing invalid range end inside dtd empty elements.\r
                        if( endNode.type == CKEDITOR.NODE_ELEMENT\r
                                && CKEDITOR.dtd.$empty[ endNode.getName() ] )\r
-                               endNode = endNode.getParent(), endOffset = endNode.getIndex() + 1;\r
+                               endOffset = endNode.getIndex() + 1, endNode = endNode.getParent();\r
 \r
                        this.endContainer       = endNode;\r
                        this.endOffset          = endOffset;\r
@@ -1864,17 +1881,13 @@ CKEDITOR.ENLARGE_ELEMENT = 1;
 CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2;\r
 CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3;\r
 \r
-/**\r
- * Check boundary types.\r
- * @see CKEDITOR.dom.range.prototype.checkBoundaryOfElement\r
- */\r
+// Check boundary types.\r
+// @see CKEDITOR.dom.range.prototype.checkBoundaryOfElement\r
 CKEDITOR.START = 1;\r
 CKEDITOR.END = 2;\r
 CKEDITOR.STARTEND = 3;\r
 \r
-/**\r
- * Shrink range types.\r
- * @see CKEDITOR.dom.range.prototype.shrink\r
- */\r
+// Shrink range types.\r
+// @see CKEDITOR.dom.range.prototype.shrink\r
 CKEDITOR.SHRINK_ELEMENT = 1;\r
 CKEDITOR.SHRINK_TEXT = 2;\r