Changeset 1057


Ignore:
Timestamp:
11/01/07 10:23:27 (7 years ago)
Author:
martinkou
Message:

Fixed cover block positioning logic to accomodate the possbility that FCKeditor or some of its parents are not static positioned.
Cover block should be added and deleted only when the number of visible dialogs goes from 0 to 1 and from 1 to 0 respectively.

Location:
FCKeditor/branches/features/floating_dialog/editor/_source/internals
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fck.js

    r1056 r1057  
    784784                { 
    785785                        var parentDivPosition = FCKTools.GetDocumentPosition( this.Window.parent, editorParentElement ) ; 
     786                        var positionedAncestor = FCKDomTools.GetPositionedAncestor( this.Window.parent, editorParentElement.parentNode ) ; 
     787                        var positionedAncestorPosition = positionedAncestor ?  
     788                                FCKTools.GetDocumentPosition( this.Window.parent, positionedAncestor ) :  
     789                                {'x' : 0, 'y' : 0} ; 
    786790                        FCKDomTools.SetElementStyles( this.EditorBlocker, 
    787791                                { 
    788792                                        'width' : editorFrame.offsetWidth + 'px', 
    789793                                        'height' : editorFrame.offsetHeight + 'px', 
    790                                         'left' : parentDivPosition.x + 'px', 
    791                                         'top' : parentDivPosition.y + 'px', 
     794                                        'left' : ( parentDivPosition.x - positionedAncestorPosition.x ) + 'px', 
     795                                        'top' : ( parentDivPosition.y - positionedAncestorPosition.y ) + 'px', 
    792796                                        'display' : '' 
    793797                                } ) ; 
     
    796800                                        'width' : Math.max( doc.documentElement.scrollWidth, doc.documentElement.clientWidth ) + 'px', 
    797801                                        'height' : Math.max( doc.documentElement.scrollHeight, doc.documentElement.clientHeight ) + 'px', 
    798                                         'left' : '0px', 
    799                                         'top' : '0px', 
     802                                        'left' : ( -1 * positionedAncestorPosition.x ) + 'px', 
     803                                        'top' : ( -1 * positionedAncestorPosition.y ) + 'px', 
    800804                                        'display' : '' 
    801805                                } ) ; 
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js

    r1056 r1057  
    2525{ 
    2626        BaseZIndex : 10000, 
    27         LastSelectionData : null 
     27        LastSelectionData : null, 
     28        DialogStack : [] 
    2829} ; 
    2930 
     
    8485        // 1. The dialog iframe 
    8586        // 2. The dialog shadow 
     87        // 3. The dialog blocker (visible only when the dialog is disabled) 
    8688        var container = ownerDocument.createElement( 'div' ) ; 
    8789        container.dialogId = dialogId ; 
     
    124126        oWindow.focus() ; 
    125127        this.Window = oWindow ; 
    126         FCK.SetDialogMode( true ) ; 
     128 
     129        // Keep record of the current dialog in the dialog stack, and enable dialog mode 
     130        // if this is the first dialog in the dialog stack. 
     131        if ( this.DialogStack.length == 0 ) 
     132                FCK.SetDialogMode( true ) ; 
     133        this.DialogStack.push( container ) ; 
    127134} 
    128135 
     
    186193                'dialog.shadow.bottom.right.png' 
    187194        ]; 
     195        var x = [ 0, 20, container.offsetWidth - 20 ] ; 
     196        var y = [ 0, 20, container.offsetHeight - 20 ] ; 
    188197        for ( var i = 0 ; i < 9 ; i++ ) 
    189198        { 
     
    201210                        d.style.height = ( container.offsetHeight - 40 ) + 'px' ; 
    202211                FCKDomTools.LoadPNG( d, FCKConfig.SkinPath + 'images/' + partUrl[i] ) ; 
    203                 var x = [ 0, 20, container.offsetWidth - 20 ] ; 
    204                 var y = [ 0, 20, container.offsetHeight - 20 ] ; 
    205212                FCKDomTools.SetElementStyles( d, 
    206213                        { 
     
    223230        container.parentNode.removeChild( container ) ; 
    224231        this.BaseZIndex -= 100 ; 
    225         FCK.SetDialogMode( false ) ; 
    226 } 
     232 
     233        // Pop the dialog from the dialog stack, and disable dialog mode if the stack is empty. 
     234        this.DialogStack.pop() ; 
     235        if ( this.DialogStack.length == 0) 
     236                FCK.SetDialogMode( false ) ; 
     237} 
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdomtools.js

    r1056 r1057  
    914914                else 
    915915                        element.style.opacity = opacity ; 
     916        }, 
     917 
     918        GetCurrentElementStyle : function( w, element, attrName ) 
     919        { 
     920                if ( FCKBrowserInfo.IsIE ) 
     921                        return element.currentStyle[attrName] ; 
     922                else 
     923                        return w.getComputedStyle( element, '' )[attrName] ; 
     924        }, 
     925 
     926        GetPositionedAncestor : function( w, element ) 
     927        { 
     928                var currentElement = element ; 
     929                while ( currentElement != currentElement.ownerDocument.documentElement ) 
     930                { 
     931                        if ( this.GetCurrentElementStyle( w, currentElement, 'position' ) != 'static' ) 
     932                                return currentElement ; 
     933                        currentElement = currentElement.parentNode ; 
     934                } 
     935                return null ; 
    916936        } 
    917937} ; 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy