Ticket #6432: 6432.patch

File 6432.patch, 2.2 KB (added by mani, 3 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy