Changeset 2207


Ignore:
Timestamp:
07/11/2008 12:57:03 PM (7 years ago)
Author:
martinkou
Message:

Applied Fred's EndNode fix to fckdomrange.js.
Fixed the issue in the DIV container detection logic in which sometimes fewer container nodes are detected than are selected.
The style selection box is no longer grayed out in the DIV container dialog when multiple DIV containers are selected.

Location:
FCKeditor/branches/features/div_container/editor
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/features/div_container/editor/_source/classes/fckdomrange.js

    r2206 r2207  
    4343                        // For text nodes, the node itself is the StartNode.
    4444                        var eStart      = innerRange.startContainer ;
    45                         var eEnd        = innerRange.endContainer ;
    4645
    4746                        var oElementPath = new FCKElementPath( eStart ) ;
     
    5150                        this.StartBlockLimit    = oElementPath.BlockLimit ;
    5251
    53                         if ( eStart != eEnd )
    54                                 oElementPath = new FCKElementPath( eEnd ) ;
    55 
    56                         // The innerRange.endContainer[ innerRange.endOffset ] is not
    57                         // usually part of the range, but the marker for the range end. So,
    58                         // let's get the previous available node as the real end.
    59                         var eEndNode = eEnd ;
    60                         if ( innerRange.endOffset == 0 )
     52                        if ( innerRange.collapsed )
    6153                        {
    62                                 while ( eEndNode && !eEndNode.previousSibling )
    63                                         eEndNode = eEndNode.parentNode ;
    64 
    65                                 if ( eEndNode )
    66                                         eEndNode = eEndNode.previousSibling ;
     54                                this.EndNode            = this.StartNode ;
     55                                this.EndContainer       = this.StartContainer ;
     56                                this.EndBlock           = this.StartBlock ;
     57                                this.EndBlockLimit      = this.StartBlockLimit ;
    6758                        }
    68                         else if ( eEndNode.nodeType == 1 )
     59                        else
    6960                        {
    70                                 if ( innerRange.endContainer != innerRange.startContainer || innerRange.endOffset != innerRange.startOffset )
     61                                var eEnd        = innerRange.endContainer ;
     62
     63                                if ( eStart != eEnd )
     64                                        oElementPath = new FCKElementPath( eEnd ) ;
     65
     66                                // The innerRange.endContainer[ innerRange.endOffset ] is not
     67                                // usually part of the range, but the marker for the range end. So,
     68                                // let's get the previous available node as the real end.
     69                                var eEndNode = eEnd ;
     70                                if ( innerRange.endOffset == 0 )
     71                                {
     72                                        while ( eEndNode && !eEndNode.previousSibling )
     73                                                eEndNode = eEndNode.parentNode ;
     74
     75                                        if ( eEndNode )
     76                                                eEndNode = eEndNode.previousSibling ;
     77                                }
     78                                else if ( eEndNode.nodeType == 1 )
    7179                                        eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
    72                                 else
    73                                         eEndNode = eEndNode.childNodes[ innerRange.endOffset ] ;
     80
     81                                this.EndNode                    = eEndNode ;
     82                                this.EndContainer               = eEnd ;
     83                                this.EndBlock                   = oElementPath.Block ;
     84                                this.EndBlockLimit              = oElementPath.BlockLimit ;
    7485                        }
    75 
    76                         this.EndNode                    = eEndNode ;
    77                         this.EndContainer               = eEnd ;
    78                         this.EndBlock                   = oElementPath.Block ;
    79                         this.EndBlockLimit              = oElementPath.BlockLimit ;
    8086                }
    8187
  • FCKeditor/branches/features/div_container/editor/_source/internals/fckdomtools.js

    r2206 r2207  
    10291029                range.MoveToSelection() ;
    10301030
    1031                 var startNode = range.StartNode ;
    1032                 var endNode = range.EndNode ;
     1031                var startNode = range.GetTouchedStartNode() ;
     1032                var endNode = range.GetTouchedEndNode() ;
    10331033                var currentNode = startNode ;
    10341034
     
    10371037                        while ( endNode.nodeType == 1 && endNode.lastChild )
    10381038                                endNode = endNode.lastChild ;
    1039                         endNode = FCKDomTools.GetNextSourceElement( endNode ) ;
    1040                 }
    1041 
    1042                 while ( currentNode && currentNode != endNode && currentNode != endNode.parentNode )
     1039                        endNode = FCKDomTools.GetNextSourceNode( endNode ) ;
     1040                }
     1041
     1042                while ( currentNode && currentNode != endNode )
    10431043                {
    10441044                        var path = new FCKElementPath( currentNode ) ;
     
    10471047                                currentBlocks.push( blockLimit ) ;
    10481048
    1049                         currentNode = FCKDomTools.GetNextSourceElement( currentNode ) ;
     1049                        currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
    10501050                }
    10511051
  • FCKeditor/branches/features/div_container/editor/dialog/fck_div.html

    r2206 r2207  
    111111        // Popuplate the style menu
    112112        var styles = FCKStyles.GetStyles() ;
    113         var match = null ;
    114113        var selectableStyles = {} ;
     114        for ( var i in styles )
     115        {
     116                if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
     117                        selectableStyles[i] = styles[i] ;
     118        }
    115119        if ( CurrentContainers.length <= 1 )
    116120        {
    117121                var target = CurrentContainers[0] ;
    118                 for ( var i in styles )
    119                 {
    120                         if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
    121                         {
    122                                 if ( target && styles[i].CheckElementRemovable( target, true ) )
    123                                         match = i ;
    124                                 selectableStyles[i] = styles[i] ;
    125                         }
     122                var match = null ;
     123                for ( var i in selectableStyles )
     124                {
     125                        if ( target && styles[i].CheckElementRemovable( target, true ) )
     126                                match = i ;
    126127                }
    127128                if ( !match )
     
    145146        else
    146147        {
    147                 GetE( 'txtId' ).disabled = GetE( 'selStyle' ).disabled = true  ;
     148                GetE( 'txtId' ).disabled = true ;
     149                AddStyleOption( "" ) ;
     150                for ( var i in selectableStyles )
     151                        AddStyleOption( i ) ;
    148152        }
    149153}
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy