Ticket #6432: 6432.patch

File 6432.patch, 2.2 KB (added by Martin, 13 years ago)
  • core/dom/range.js

     
    3636        {
    3737                range.optimizeBookmark();
    3838
     39                var listNodeNames = { ol : 1, ul : 1 };
     40
     41                var topStartListParent;
     42                var topEndListParent;
     43                var startListFilteredParents = new Array();
     44                var endListFilteredParents = new Array();
     45
     46                //check if range.startContainer is list item
     47                if( range.startContainer.getAscendant('li',true) )
     48                {
     49                        var startListParents = range.startContainer.getParents();
     50                        for ( var i = 0 ; i < startListParents.length ; i++ )
     51                        {
     52                                if ( startListParents[i].getName && listNodeNames[ startListParents[i].getName() ] )
     53                                {
     54                                        if( !topStartListParent )
     55                                                topStartListParent = startListParents[i];
     56
     57                                        startListFilteredParents.push( startListParents[i] );
     58                                }
     59                        }                       
     60                        range.setStartBefore( topStartListParent );
     61                }
     62
     63                //check if range.endContainer is list item
     64                if( range.endContainer.getAscendant('li',true) )
     65                {
     66                        var endListParents = range.endContainer.getParents();
     67                        for ( var i = 0 ; i < endListParents.length ; i++ )
     68                        {
     69                                if ( endListParents[i].getName && listNodeNames[ endListParents[i].getName() ] )
     70                                {
     71                                        if( !topEndListParent )
     72                                                topEndListParent = endListParents[i];
     73
     74                                        endListFilteredParents.push( endListParents[i] );
     75                                }
     76                        }
     77                        range.setEndAfter( topEndListParent );
     78                }
     79
     80                if( topStartListParent && topEndListParent )
     81                {
     82                        var commonParent;
     83                        for ( var i = 0 ; i < startListFilteredParents.length ; i++ ) //looking for common parent
     84                        {
     85                                for ( var j = 0 ; j < endListFilteredParents.length ; j++ )
     86                                {
     87                                        if(startListFilteredParents[i].equals(endListFilteredParents[j]))
     88                                                commonParent = startListFilteredParents[i];
     89                                }
     90                        }
     91
     92                        if( commonParent ) //start range and end range contains in some common list
     93                        {
     94                                range.setStartBefore(commonParent);
     95                                range.setEndAfter(commonParent);
     96                        }
     97                        else
     98                        {
     99                                range.setStartBefore( topStartListParent );
     100                                range.setEndAfter( topEndListParent );
     101                        }
     102                }
     103
    39104                var startNode   = range.startContainer;
    40105                var endNode             = range.endContainer;
    41106
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy