Ticket #3228: 3228_2.patch

File 3228_2.patch, 9.8 KB (added by Martin Kou, 11 years ago)
  • _source/plugins/domiterator/plugin.js

     
    314314                        // above block can be removed or changed, so we can rely on it for the
    315315                        // next interation.
    316316                        if ( !this._.nextNode )
     317                        {
    317318                                this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null :
    318319                                        getNextSourceNode( block, lastNode, true );
     320                        }
    319321
    320322                        return block;
    321323                }
  • _source/tests/core/dom/range.html

     
    2121
    2222        var doc = new CKEDITOR.dom.document( document );
    2323
     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
    2431        return tests = {
    2532                test__constructor : function()
    2633                {
     
    930937                        assert.isFalse( range.collapsed, 'range.collapsed' );
    931938                },
    932939
     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
    9331002                test_deleteContents_W3C_1 : function()
    9341003                {
    9351004                        // W3C DOM Range Specs - Section 2.6 - Example 1
     
    18231892                        assert.isFalse( range.checkEndOfBlock() );
    18241893                },
    18251894
     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
    18261925                /////////////
    18271926
    18281927                setUp : function()
     
    19702069                <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>
    19712070                <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>
    19722071                <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>
    19732081        </div>
    19742082        <script type="text/javascript">
    19752083        //<![CDATA[
  • _source/core/dom/walker.js

     
    123123                        this.current = node;
    124124
    125125                        if ( !this.evaluator || this.evaluator( node ) !== false )
    126                                 return node;
     126                        {
     127                                if ( !breakOnFalse )
     128                                        return node;
     129                        }
    127130                        else if ( breakOnFalse && this.evaluator )
    128131                                return false;
    129132
  • _source/core/dom/range.js

     
    263263        // check(Start|End)OfBlock.
    264264        function getCheckStartEndBlockEvalFunction( isStart )
    265265        {
     266                var hadBr = false;
    266267                return function( node )
    267268                {
    268                         var hadBr = false;
    269 
    270269                        if ( node.type == CKEDITOR.NODE_TEXT )
    271270                        {
    272271                                // If there's any visible text, then we're not at the start.
     
    279278                                // at the start.
    280279                                if ( !inlineChildReqElements[ node.getName() ] )
    281280                                {
    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 )
    284284                                                hadBr = true;
    285285                                        else
    286286                                                return false;
     
    10901090                                        // DFS backward to get the block/list item boundary at or before the start.
    10911091
    10921092                                        // 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;
    10951096
     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
    10961108                                        if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.isBlockBoundary() )
    10971109                                        {
    10981110                                                this.setStartAt( startNode,
     
    11021114                                        }
    11031115                                        else
    11041116                                        {
    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 
    11131117                                                // Go walk in reverse sense.
    1114                                                 var data = walker.reverse( guardFunction );
     1118                                                data = walker.reverse( guardFunction );
     1119                                                boundaryEvent = data.events.shift();
    11151120
    1116                                                 var boundaryEvent = data.events.shift();
    1117 
    11181121                                                this.setStartBefore( boundaryEvent.from );
    11191122                                        }
    11201123
     
    11321135                                                data = walker.forward( guardFunction );
    11331136                                                boundaryEvent = data.events.shift();
    11341137
    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 );
    11361146                                        }
    11371147                        }
    11381148                },
     
    15181528                        if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT )
    15191529                                return container ;
    15201530
    1521                         return container.getChild[ this.endOffset - 1 ] || container ;
     1531                        return container.getChild( this.endOffset - 1 ) || container ;
    15221532                }
    15231533        };
    15241534})();
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy