Changeset 1231

Show
Ignore:
Timestamp:
2007-12-20 08:37:42 (10 months ago)
Author:
martinkou
Message:

Improved the floating dialog logic to use the topmost possible window as the base window instead of the first editor instance's parent window.

Location:
FCKeditor/branches/features/floating_dialog/editor
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/features/floating_dialog/editor/fckdialog.html

    r1230 r1231  
    5454                try 
    5555                { 
    56                         var parentDomain = window.parent ? window.parent.document.domain : editor.document.domain ; 
     56                        var parentDomain = args.TopWindow ? args.TopWindow.document.domain : editor.document.domain ; 
    5757 
    5858                        if ( document.domain != parentDomain ) 
     
    104104        // Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic. 
    105105        DnD.RegisterHandlers( window ) ; 
    106         DnD.RegisterHandlers( window.parent ) ; 
     106        DnD.RegisterHandlers( args.TopWindow ) ; 
    107107 
    108108        // Disable the previous dialog if it exists. 
     
    520520                var retval = { 'x': evt.clientX, 'y': evt.clientY }; 
    521521 
    522                 if ( view != window.parent ) 
    523                 { 
    524                         var offset = FCKTools.GetDocumentPosition( window.parent, doc.documentElement ) ; 
     522                if ( view != args.TopWindow ) 
     523                { 
     524                        var offset = FCKTools.GetDocumentPosition( args.TopWindow, doc.documentElement ) ; 
    525525                        retval.x += offset.x ; 
    526526                        retval.y += offset.y ; 
     
    535535                        return ; 
    536536 
    537                 // Debouncing logic for Opera and IE7, for preventing the dialog from vibrating during mouse drags. 
    538                 if ( FCKBrowserInfo.IsOpera || FCKBrowserInfo.IsIE7 ) 
     537                // Debouncing logic for Opera, for preventing the dialog from vibrating during mouse drags. 
     538                if ( FCKBrowserInfo.IsOpera ) 
    539539                { 
    540540                        if ( window.LastMoveTimestamp > (new Date()).getTime() - 20 ) 
     
    552552                lastCoords = currentCoords; 
    553553 
    554                 var x = parseInt( FCKDomTools.GetCurrentElementStyle( window.parent, frameElement, 'left' ) ) + dx ; 
    555                 var y = parseInt( FCKDomTools.GetCurrentElementStyle( window.parent, frameElement, 'top' ) ) + dy ; 
     554                var x = parseInt( FCKDomTools.GetCurrentElementStyle( args.TopWindow, frameElement, 'left' ) ) + dx ; 
     555                var y = parseInt( FCKDomTools.GetCurrentElementStyle( args.TopWindow, frameElement, 'top' ) ) + dy ; 
    556556                FCKDomTools.SetElementStyles( frameElement, 
    557557                                { 
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js

    r1230 r1231  
    3030        // The document that holds the dialog. 
    3131        var topWindow = window.parent ; 
     32 
     33        while ( topWindow.parent && topWindow.parent != topWindow ) 
     34        { 
     35                try 
     36                { 
     37                        if ( topWindow.parent.document.domain != document.domain ) 
     38                                break ; 
     39                        if ( topWindow.parent.document.getElementsByTagName( 'frameset' ).length > 0 ) 
     40                                break ; 
     41                } 
     42                catch ( e ) 
     43                { 
     44                        break ; 
     45                } 
     46                topWindow = topWindow.parent ; 
     47        } 
     48 
    3249        var topDocument = topWindow.document ; 
    3350 
     
    7794                                Editor : window, 
    7895                                CustomValue : customValue,              // Optional 
    79                                 SelectionData : null 
     96                                SelectionData : null, 
     97                                TopWindow : topWindow 
    8098                        } 
    8199 
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fcktools.js

    r1229 r1231  
    452452                                prevNode = null ; 
    453453                                if ( curNode ) 
    454                                         curWindow = FCKTools.GetElementWindow( curNode ) ; 
     454                                        curWindow = curNode.contentWindow.parent ; 
    455455                        } 
    456456                        else