Changeset 2207


Ignore:
Timestamp:
07/11/2008 12:57:03 PM (6 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