Ticket #3842: 3842.patch

File 3842.patch, 6.6 KB (added by Garry Yao, 15 years ago)
  • _source/core/dom/text.js

     
    6868                },
    6969
    7070                /**
     71                 * Combine the specified text node with this node by merging their text content.
     72                 * @param {CKEDITOR.dom.text} The node to merge with.
     73                 */
     74                merge : function( node )
     75                {
     76                        this.$.nodeValue = this.getText() + node.getText();
     77                        node.remove();
     78                        return this;
     79                },
     80
     81                /**
    7182                 * Breaks this text node into two nodes at the specified offset,
    7283                 * keeping both in the tree as siblings. This node then only contains
    7384                 * all the content up to the offset point. A new text node, which is
  • _source/tests/core/dom/documentfragment.html

     
    119119                        frag.ltrim();
    120120                        var ct = new CKEDITOR.dom.element( 'div' );
    121121                        ct.append( frag );
    122                         assert.areSame( 'text\t\n', ct.getText() );
     122                        assert.areSame( 'text\n', ct.getText() );
    123123                },
    124124
    125125                test_ltrim_ie : function()
     
    154154                        var ct = new CKEDITOR.dom.element( 'div' );
    155155                        ct.append( frag );
    156156
    157                         assert.areSame( '\t\ntext', ct.getText() );
     157                        assert.areSame( '\ntext', ct.getText() );
    158158                },
    159159
    160160                /**
  • _source/tests/core/dom/range.html

     
    957957                        assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );
    958958                        assert.areSame( 0, range.startOffset, 'range.startOffset' );
    959959                        assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );
    960                         assert.areSame( 4, range.endOffset, 'range.endOffset' );
     960                        assert.areSame( 3, range.endOffset, 'range.endOffset' );
    961961                        assert.isFalse( range.collapsed, 'range.collapsed' );
    962962                },
    963963
     
    22432243        };
    22442244})() );
    22452245
    2246 //window.onload = tests.test_trim;
     2246//window.onload = tests.test_enlarge_list2;
    22472247        //]]>
    22482248        </script>
    22492249</head>
     
    23742374                <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>
    23752375                <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>
    23762376                <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>
    2377                 <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>
     2377                <p id="_EnlargeP7">Test <span id="S1"></span>List<br />Item Enlarge</p>
    23782378                <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>
    23792379                <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>
    23802380                <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>
  • _source/core/dom/range.js

     
    554554                        {
    555555                                var serializable = bookmark.serializable,
    556556                                        startNode       = serializable ? this.document.getById( bookmark.startNode ) : bookmark.startNode,
    557                                         endNode         = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode;
     557                                        startPrevious =  startNode.getPrevious(),
     558                                        startNext = startNode.getNext(),
     559                                        endNode         = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode,
     560                                        fixBrokenStart = startPrevious && startPrevious.type == CKEDITOR.NODE_TEXT
     561                                                                         && startNext && startNext.type == startPrevious.type;
    558562
    559                                 // Set the range start at the bookmark start node position.
    560                                 this.setStartBefore( startNode );
    561 
     563
     564                                // Repairing the broken text nodes around bookmarks.(#3842)
     565                                if ( fixBrokenStart )
     566                                {
     567                                        var offset = startPrevious.getLength();
     568                                        startPrevious.merge( startNext );
     569                                        this.setStart( startPrevious, offset );
     570                                }
     571                                else
     572                                {
     573                                        // Set the range start at the bookmark start node position.
     574                                        this.setStartBefore( startNode );
     575                                }
    562576                                // Remove it, because it may interfere in the setEndBefore call.
    563577                                startNode.remove();
    564578
     579                                var endPrevious = endNode && endNode.getPrevious(),
     580                                        endNext = endNode && endNode.getNext(),
     581                                        fixBrokenEnd = endPrevious && endPrevious.type == CKEDITOR.NODE_TEXT
     582                                                                          && endNext && endNext.type == endPrevious.type;
     583
    565584                                // Set the range end at the bookmark end node position, or simply
    566585                                // collapse it if it is not available.
    567                                 if ( endNode )
     586                                if ( fixBrokenEnd )
    568587                                {
     588                                        offset = endPrevious.getLength();
     589                                        endPrevious.merge( endNext );
     590                                        this.setEnd( endPrevious, offset );
     591                                }
     592                                else if( endNode )
     593                                {
    569594                                        this.setEndBefore( endNode );
    570                                         endNode.remove();
    571595                                }
    572596                                else
    573597                                        this.collapse( true );
     598                                endNode && endNode.remove();
    574599                        }
    575600                },
    576601
  • _source/tests/core/dom/text.html

     
    114114                        assert.areSame( 5, parent.getChildren().count(), 'Child nodes num doesn\'t match after split' );
    115115                },
    116116
     117                test_merge : function()
     118                {
     119                        var parent = CKEDITOR.document.getById( 'playground2' );
     120                        parent.setHtml( '' );
     121                        var text1 = CKEDITOR.document.createText( 'text1' ),
     122                                text2 = CKEDITOR.document.createText( 'text2' );
     123                        parent.append( text1 );
     124                        parent.append( text2 );
     125
     126                        var newtext = text1.merge( text2 );
     127                        assert.areSame( 'text1text2', newtext.getText(), 'Merge text nodes result incorrect.' );
     128                        assert.areSame( newtext.$, parent.getFirst().$ );
     129                        assert.isNull( text2.getParent() );
     130                },
     131
    117132                name : document.title
    118133        };
    119134})() );
  • CHANGES.html

     
    8080                <li><a href="http://dev.fckeditor.net/ticket/3730">#3730</a> : Indent is performing on the whole
    8181                        block instead of selected lines in enterMode = BR.</li>
    8282                <li><a href="http://dev.fckeditor.net/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li>
     83                <li><a href="http://dev.fckeditor.net/ticket/3844">#3844</a> : Fixed text nodes been broken into pieces
     84                        after 'CKEDITOR.dom.range::createBookmark'.</li>
    8385        </ul>
    8486        <h3>
    8587                CKEditor 3.0 RC</h3>
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy