Ticket #3228: 3228_2.patch
File 3228_2.patch, 9.8 KB (added by , 16 years ago) |
---|
-
_source/plugins/domiterator/plugin.js
314 314 // above block can be removed or changed, so we can rely on it for the 315 315 // next interation. 316 316 if ( !this._.nextNode ) 317 { 317 318 this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null : 318 319 getNextSourceNode( block, lastNode, true ); 320 } 319 321 320 322 return block; 321 323 } -
_source/tests/core/dom/range.html
21 21 22 22 var doc = new CKEDITOR.dom.document( document ); 23 23 24 var getRange = function( startId, endId ) 25 { 26 var range = new CKEDITOR.dom.range( CKEDITOR.document ); 27 range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } ); 28 return range; 29 }; 30 24 31 return tests = { 25 32 test__constructor : function() 26 33 { … … 930 937 assert.isFalse( range.collapsed, 'range.collapsed' ); 931 938 }, 932 939 940 test_enlarge_list1 : function() 941 { 942 var range = getRange( 'S1', null ); 943 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); 944 945 assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' ); 946 assert.areSame( 0, range.startOffset, 'range.startOffset' ); 947 assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' ); 948 assert.areSame( 3, range.endOffset, 'range.endOffset' ); 949 assert.isFalse( range.collapsed, 'range.collapsed' ); 950 }, 951 952 test_enlarge_list2 : function() 953 { 954 var range = getRange( 'S2', 'E2' ); 955 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); 956 957 assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' ); 958 assert.areSame( 0, range.startOffset, 'range.startOffset' ); 959 assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' ); 960 assert.areSame( 4, range.endOffset, 'range.endOffset' ); 961 assert.isFalse( range.collapsed, 'range.collapsed' ); 962 }, 963 964 test_enlarge_list3 : function() 965 { 966 var range = getRange( 'S3', null ); 967 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); 968 969 assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' ); 970 assert.areSame( 2, range.startOffset, 'range.startOffset' ); 971 assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' ); 972 assert.areSame( 3, range.endOffset, 'range.endOffset' ); 973 assert.isFalse( range.collapsed, 'range.collapsed' ); 974 }, 975 976 test_enlarge_list4 : function() 977 { 978 var range = getRange( 'S4', null ); 979 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); 980 981 assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' ); 982 assert.areSame( 3, range.startOffset, 'range.startOffset' ); 983 assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' ); 984 assert.areSame( 5, range.endOffset, 'range.endOffset' ); 985 assert.isFalse( range.collapsed, 'range.collapsed' ); 986 }, 987 988 test_enlarge_list5 : function() 989 { 990 var range = getRange( 'S1', null ); 991 var bookmark = range.createBookmark(); 992 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); 993 994 assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' ); 995 assert.areSame( 0, range.startOffset, 'range.startOffset' ); 996 assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' ); 997 assert.areSame( 4, range.endOffset, 'range.endOffset' ); 998 assert.isFalse( range.collapsed, 'range.collapsed' ); 999 range.moveToBookmark( bookmark ); 1000 }, 1001 933 1002 test_deleteContents_W3C_1 : function() 934 1003 { 935 1004 // W3C DOM Range Specs - Section 2.6 - Example 1 … … 1823 1892 assert.isFalse( range.checkEndOfBlock() ); 1824 1893 }, 1825 1894 1895 test_checkEndOfBlock9 : function() 1896 { 1897 var range = getRange( 'S5', null ); 1898 assert.isFalse( range.checkEndOfBlock() ); 1899 }, 1900 1901 test_checkEndOfBlock10 : function() 1902 { 1903 var range = getRange( 'S6', null ); 1904 assert.isTrue( range.checkEndOfBlock() ); 1905 }, 1906 1907 test_checkEndOfBlock11 : function() 1908 { 1909 var range = getRange( 'S7', null ); 1910 assert.areSame( range.checkEndOfBlock(), !CKEDITOR.env.ie, 'range.checkBlock()' ); 1911 }, 1912 1913 test_checkEndOfBlock12 : function() 1914 { 1915 var range = getRange( 'S8', null ); 1916 assert.isFalse( range.checkEndOfBlock() ); 1917 }, 1918 1919 test_checkEndOfBlock13 : function() 1920 { 1921 var range = getRange( 'S9', null ); 1922 assert.isFalse( range.checkEndOfBlock() ); 1923 }, 1924 1826 1925 ///////////// 1827 1926 1828 1927 setUp : function() … … 1970 2069 <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p> 1971 2070 <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p> 1972 2071 <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p> 2072 <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p> 2073 <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p> 2074 <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p> 2075 <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p> 2076 <p>Test Check<span id="S5"></span><br />End</p> 2077 <p>Test Check<br />End<span id="S6"></span></p> 2078 <p>Test Check End<span id="S7"></span><br /></p> 2079 <p>Test Check End<span id="S8"></span><br /><br /></p> 2080 <p>Test Check<span id="S9"></span> End</p> 1973 2081 </div> 1974 2082 <script type="text/javascript"> 1975 2083 //<![CDATA[ -
_source/core/dom/walker.js
123 123 this.current = node; 124 124 125 125 if ( !this.evaluator || this.evaluator( node ) !== false ) 126 return node; 126 { 127 if ( !breakOnFalse ) 128 return node; 129 } 127 130 else if ( breakOnFalse && this.evaluator ) 128 131 return false; 129 132 -
_source/core/dom/range.js
263 263 // check(Start|End)OfBlock. 264 264 function getCheckStartEndBlockEvalFunction( isStart ) 265 265 { 266 var hadBr = false; 266 267 return function( node ) 267 268 { 268 var hadBr = false;269 270 269 if ( node.type == CKEDITOR.NODE_TEXT ) 271 270 { 272 271 // If there's any visible text, then we're not at the start. … … 279 278 // at the start. 280 279 if ( !inlineChildReqElements[ node.getName() ] ) 281 280 { 282 // If we're working at the end-of-block, forgive the first <br />. 283 if ( !isStart && node.getName() == 'br' && !hadBr ) 281 // If we're working at the end-of-block, forgive the first <br /> in non-IE 282 // browsers. 283 if ( !isStart && !CKEDITOR.env.ie && node.getName() == 'br' && !hadBr ) 284 284 hadBr = true; 285 285 else 286 286 return false; … … 1090 1090 // DFS backward to get the block/list item boundary at or before the start. 1091 1091 1092 1092 // Get the boundaries nodes. 1093 var startNode = this.getTouchedStartNode(), 1094 endNode = this.getTouchedEndNode(); 1093 var boundaryNodes = this.getBoundaryNodes(); 1094 var startNode = boundaryNodes.startNode, 1095 endNode = boundaryNodes.endNode; 1095 1096 1097 // Get the function used to check the enlarging limits. 1098 var guardFunction = ( unit == CKEDITOR.ENLARGE_BLOCK_CONTENTS ? 1099 CKEDITOR.dom.domWalker.blockBoundary() : 1100 CKEDITOR.dom.domWalker.listItemBoundary() ); 1101 1102 // Initialize other variables that may be used by the walker. 1103 var boundaryEvent = null, data = null; 1104 1105 // Create the DOM walker, which will traverse the DOM. 1106 var walker = new CKEDITOR.dom.domWalker( startNode ); 1107 1096 1108 if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.isBlockBoundary() ) 1097 1109 { 1098 1110 this.setStartAt( startNode, … … 1102 1114 } 1103 1115 else 1104 1116 { 1105 // Get the function used to check the enlaarging limits.1106 var guardFunction = ( unit == CKEDITOR.ENLARGE_BLOCK_CONTENTS ?1107 CKEDITOR.dom.domWalker.blockBoundary() :1108 CKEDITOR.dom.domWalker.listItemBoundary() );1109 1110 // Create the DOM walker, which will traverse the DOM.1111 var walker = new CKEDITOR.dom.domWalker( startNode );1112 1113 1117 // Go walk in reverse sense. 1114 var data = walker.reverse( guardFunction ); 1118 data = walker.reverse( guardFunction ); 1119 boundaryEvent = data.events.shift(); 1115 1120 1116 var boundaryEvent = data.events.shift();1117 1118 1121 this.setStartBefore( boundaryEvent.from ); 1119 1122 } 1120 1123 … … 1132 1135 data = walker.forward( guardFunction ); 1133 1136 boundaryEvent = data.events.shift(); 1134 1137 1135 this.setEndAfter( boundaryEvent.from ); 1138 // We must include the <br> at the end of range if there's one and we're 1139 // expanding list item contents. 1140 if ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS && 1141 boundaryEvent.to.type == CKEDITOR.NODE_ELEMENT && 1142 boundaryEvent.to.getName() == 'br' ) 1143 this.setEndAfter( boundaryEvent.to ); 1144 else 1145 this.setEndAfter( boundaryEvent.from ); 1136 1146 } 1137 1147 } 1138 1148 }, … … 1518 1528 if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT ) 1519 1529 return container ; 1520 1530 1521 return container.getChild [ this.endOffset - 1 ]|| container ;1531 return container.getChild( this.endOffset - 1 ) || container ; 1522 1532 } 1523 1533 }; 1524 1534 })();