JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1.1
[ckeditor.git] / _source / plugins / selection / plugin.js
index a78bb36..85981fa 100644 (file)
@@ -459,17 +459,21 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                testRange = range.duplicate();\r
 \r
                                                                testRange.moveToElementText( child );\r
-                                                               testRange.collapse();\r
 \r
-                                                               var comparison = testRange.compareEndPoints( 'StartToStart', range );\r
+                                                               var comparisonStart = testRange.compareEndPoints( 'StartToStart', range ),\r
+                                                                       comparisonEnd = testRange.compareEndPoints( 'EndToStart', range );\r
+\r
+                                                               testRange.collapse();\r
 \r
-                                                               if ( comparison > 0 )\r
+                                                               if ( comparisonStart > 0 )\r
                                                                        break;\r
-                                                               else if ( comparison === 0 )\r
-                                                                       return {\r
-                                                                               container : parent,\r
-                                                                               offset : i\r
-                                                                       };\r
+                                                               // When selection stay at the side of certain self-closing elements, e.g. BR,\r
+                                                               // our comparison will never shows an equality. (#4824)\r
+                                                               else if ( !comparisonStart\r
+                                                                       || comparisonEnd == 1 && comparisonStart == -1 )\r
+                                                                       return { container : parent, offset : i };\r
+                                                               else if ( !comparisonEnd )\r
+                                                                       return { container : parent, offset : i + 1 };\r
 \r
                                                                testRange = null;\r
                                                        }\r
@@ -488,8 +492,17 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                // breaking character counting logic below. (#3949)\r
                                                var distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;\r
 \r
-                                               while ( distance > 0 )\r
-                                                       distance -= siblings[ --i ].nodeValue.length;\r
+                                               try\r
+                                               {\r
+                                                       while ( distance > 0 )\r
+                                                               distance -= siblings[ --i ].nodeValue.length;\r
+                                               }\r
+                                               // Measurement in IE could be somtimes wrong because of <select> element. (#4611)\r
+                                               catch( e )\r
+                                               {\r
+                                                       distance = 0;\r
+                                               }\r
+\r
 \r
                                                if ( distance === 0 )\r
                                                {\r
@@ -628,7 +641,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                        // Decrease the range content to exclude particial\r
                                                        // selected node on the start which doesn't have\r
                                                        // visual impact. ( #3231 )\r
-                                                       while( true )\r
+                                                       while ( true )\r
                                                        {\r
                                                                var startContainer = range.startContainer,\r
                                                                        startOffset = range.startOffset;\r