Ticket #3783: 3783_2.patch
File 3783_2.patch, 11.5 KB (added by , 16 years ago) |
---|
-
_source/plugins/list/plugin.js
499 499 var mergeSibling, listCommand = this; 500 500 ( mergeSibling = function( rtl ){ 501 501 502 var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ].call( listNode, true ); 502 var sibling = listNode[ rtl ? 503 'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.whitespaces( true ) ); 503 504 if ( sibling && sibling.getName && 504 505 sibling.getName() == listCommand.type ) 505 506 { -
_source/plugins/wysiwygarea/plugin.js
166 166 var children = fixedBlock.getChildren(), 167 167 count = children.count(), 168 168 firstChild, 169 previousElement = fixedBlock.getPrevious( true ), 170 nextElement = fixedBlock.getNext( true ), 169 whitespaceGuard = CKEDITOR.dom.walker.whitespaces( true ), 170 previousElement = fixedBlock.getPrevious( whitespaceGuard ), 171 nextElement = fixedBlock.getNext( whitespaceGuard ), 171 172 enterBlock; 172 173 if ( previousElement && previousElement.getName 173 174 && !( previousElement.getName() in nonExitableElementNames ) ) … … 188 189 189 190 // Inserting the padding-br before body if it's preceded by an 190 191 // unexitable block. 191 var lastNode = body.getLast( true);192 var lastNode = body.getLast( CKEDITOR.dom.walker.whitespaces( true ) ); 192 193 if ( lastNode && lastNode.getName && ( lastNode.getName() in nonExitableElementNames ) ) 193 194 { 194 195 var paddingBlock = editor.document.createElement( -
_source/tests/core/dom/node.html
114 114 assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) ); 115 115 }, 116 116 117 // Test get previous non-spaces node. 118 test_getPrevious : function() 119 { 120 var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) ); 121 var span1 = new CKEDITOR.dom.element( 'span' ); 122 element.append( span1 ); 123 element.append( new CKEDITOR.dom.text( ' ' ) ); 124 var span2 = new CKEDITOR.dom.element( 'span' ); 125 element.append( span2 ); 126 var previous = span2.getPrevious( CKEDITOR.dom.walker.whitespaces( true ) ); 127 assert.areSame( span1.$, previous.$ ); 128 }, 129 130 // Test get next non-spaces node. 131 test_getNext : function() 132 { 133 var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) ); 134 var span1 = new CKEDITOR.dom.element( 'span' ); 135 element.append( span1 ); 136 element.append( new CKEDITOR.dom.text( ' ' ) ); 137 var span2 = new CKEDITOR.dom.element( 'span' ); 138 element.append( span2 ); 139 var next = span1.getNext( CKEDITOR.dom.walker.whitespaces( true ) ); 140 assert.areSame( span1.$, next.$ ); 141 }, 142 117 143 name : document.title 118 144 }; 119 145 })() ); … … 135 161 <p><b>Sample</b> <i>Text</i></p> 136 162 </div> 137 163 <span>Another</span> 164 <p id="append"></p> 138 165 </body> 139 166 </html> -
_source/core/dom/element.js
632 632 * Gets the first child node of this element. 633 633 * @returns {CKEDITOR.dom.node} The first child node or null if not 634 634 * available. 635 * @param {Function} evaluator Filtering the result node. 635 636 * @example 636 637 * var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b></div>' ); 637 638 * var first = <b>element.getFirst()</b>; 638 639 * alert( first.getName() ); // "b" 639 640 */ 640 getFirst : function( )641 getFirst : function( evaluator ) 641 642 { 642 var $ = this.$.firstChild; 643 return $ ? new CKEDITOR.dom.node( $ ) : null; 643 var first = this.$.firstChild, retval; 644 while ( first && ( retval = new CKEDITOR.dom.node(first) ) && evaluator && !evaluator(retval) ) 645 { 646 retval = null; 647 first = first.nextSibling; 648 } 649 return retval; 644 650 }, 645 651 646 652 /** 647 * @param ignoreEmpty Skip empty text nodes.653 * @param {Function} evaluator Filtering the result node. 648 654 */ 649 getLast : function( ignoreEmpty)655 getLast : function( evaluator ) 650 656 { 651 var $ = this.$.lastChild; 652 if ( ignoreEmpty && $ && ( $.nodeType == CKEDITOR.NODE_TEXT ) 653 && !CKEDITOR.tools.trim( $.nodeValue ) ) 654 return new CKEDITOR.dom.node( $ ).getPrevious( true ); 655 else 656 return $ ? new CKEDITOR.dom.node( $ ) : null; 657 var last = this.$.lastChild, retval; 658 while ( last && ( retval = new CKEDITOR.dom.node( last ) ) && evaluator && !evaluator( retval ) ) 659 { 660 retval = null; 661 last = last.previousSibling; 662 } 663 return retval; 657 664 }, 658 665 659 666 getStyle : function( name ) -
_source/core/dom/node.js
350 350 return node; 351 351 }, 352 352 353 getPrevious : function( ignoreSpaces)353 getPrevious : function( evaluator ) 354 354 { 355 var previous = this.$.previousSibling; 356 while ( ignoreSpaces && previous && ( previous.nodeType == CKEDITOR.NODE_TEXT ) 357 && !CKEDITOR.tools.trim( previous.nodeValue ) ) 355 var previous = this.$, retval; 356 do 357 { 358 retval = null; 358 359 previous = previous.previousSibling; 359 360 return previous ? new CKEDITOR.dom.node( previous ) : null; 360 } 361 while ( previous && ( retval = new CKEDITOR.dom.node( previous ) ) && evaluator && !evaluator( retval ) ) 362 return retval; 361 363 }, 362 364 363 365 /** 364 366 * Gets the node that follows this element in its parent's child list. 365 * @param {Boolean} ignoreSpaces Whether should ignore empty text nodes. 366 * @returns {CKEDITOR.dom.node} The next node or null if not 367 * available. 367 * @param {Function} evaluator Filtering the result node. 368 * @returns {CKEDITOR.dom.node} The next node or null if not available. 368 369 * @example 369 370 * var element = CKEDITOR.dom.element.createFromHtml( '<div><b>Example</b> <i>next</i></div>' ); 370 371 * var first = <b>element.getFirst().getNext()</b>; 371 372 * alert( first.getName() ); // "i" 372 373 */ 373 getNext : function( ignoreSpaces)374 getNext : function( evaluator ) 374 375 { 375 var next = this.$.nextSibling; 376 while ( ignoreSpaces && next && ( next.nodeType == CKEDITOR.NODE_TEXT ) 377 && !CKEDITOR.tools.trim( next.nodeValue ) ) 376 var next = this.$, retval; 377 do 378 { 379 retval = null; 378 380 next = next.nextSibling; 379 380 return next ? new CKEDITOR.dom.node( next ) : null; 381 } 382 while ( next && ( retval = new CKEDITOR.dom.node( next ) ) && evaluator && !evaluator( retval ) ) 383 return retval; 381 384 }, 382 385 383 386 /** -
_source/tests/core/dom/element.html
159 159 assert.isNull( first ); 160 160 }, 161 161 162 /** 163 * Test get the first non-space node. 164 */ 165 test_getFirst4 : function() 166 { 167 var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) ); 168 element.append( new CKEDITOR.dom.text( ' ' ) ); 169 var span = new CKEDITOR.dom.element( 'span' ); 170 element.append( span ); 171 var first = element.getFirst( CKEDITOR.dom.walker.whitespaces( true ) ); 172 assert.areSame( span.$, first.$ ); 173 }, 162 174 test_setAttribute1 : function() 163 175 { 164 176 var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) ); -
_source/plugins/domiterator/plugin.js
311 311 312 312 if ( removeLastBr ) 313 313 { 314 // Ignore bookmark nodes.(#3783) 315 var bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true ); 316 314 317 var lastChild = block.getLast(); 315 318 if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.getName() == 'br' ) 316 319 { 317 320 // Take care not to remove the block expanding <br> in non-IE browsers. 318 if ( CKEDITOR.env.ie || lastChild.getPrevious() || lastChild.getNext() ) 321 if ( CKEDITOR.env.ie 322 || lastChild.getPrevious( bookmarkGuard ) 323 || lastChild.getNext( bookmarkGuard ) ) 319 324 lastChild.remove(); 320 325 } 321 326 } -
_source/plugins/indent/plugin.js
42 42 return setState.call( this, editor, CKEDITOR.TRISTATE_OFF ); 43 43 else 44 44 { 45 while ( listItem && ( listItem = listItem.getPrevious( ) ) )45 while ( listItem && ( listItem = listItem.getPrevious( CKEDITOR.dom.walker.whitespaces( true ) ) ) ) 46 46 { 47 47 if ( listItem.getName && listItem.getName() == 'li' ) 48 48 return setState.call( this, editor, CKEDITOR.TRISTATE_OFF ); -
_source/core/dom/walker.js
379 379 380 380 return function( node ) 381 381 { 382 var retval, parent;382 var isBookmark, parent; 383 383 // Is bookmark inner text node? 384 retval= ( node && !node.getName && ( parent = node.getParent() )384 isBookmark = ( node && !node.getName && ( parent = node.getParent() ) 385 385 && isBookmarkNode( parent ) ); 386 386 // Is bookmark node? 387 retval = contentOnly ? retval : retval|| isBookmarkNode( node );388 return isReject ? !retval : !!retval;387 isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node ); 388 return isReject ^ isBookmark; 389 389 }; 390 390 }; 391 391 392 /** 393 * Whether the node contains only white-spaces characters. 394 * @param isReject 395 */ 396 CKEDITOR.dom.walker.whitespaces = function( isReject ) 397 { 398 return function( node ) 399 { 400 var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT ) 401 && !CKEDITOR.tools.trim( node.getText() ) 402 return isReject ^ isWhitespace; 403 }; 404 } 405 392 406 })(); -
CHANGES.html
146 146 <li><a href="http://dev.fckeditor.net/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li> 147 147 <li><a href="http://dev.fckeditor.net/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li> 148 148 <li><a href="http://dev.fckeditor.net/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li> 149 <li><a href="http://dev.fckeditor.net/ticket/3976">#3976</a> : Removed the 150 deprecated domwalker.js file.</li>149 <li><a href="http://dev.fckeditor.net/ticket/3976">#3976</a> : Removed the deprecated domwalker.js file.</li> 150 <li><a href="http://dev.fckeditor.net/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li> 151 151 </ul> 152 152 <h3> 153 153 CKEditor 3.0 RC</h3>