Changeset 1056


Ignore:
Timestamp:
11/01/07 08:40:34 (8 years ago)
Author:
martinkou
Message:

Added blocker logic for the editor and the editor's parent document in dialog mode.

Location:
FCKeditor/branches/features/floating_dialog/editor
Files:
2 added
4 edited

Legend:

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

    r1050 r1056  
    3131        Toolbar                 : null,
    3232        HasFocus                : false,
    33         DataProcessor   : new FCKDataProcessor(),
    34         Window          : window,
     33        DataProcessor           : new FCKDataProcessor(),
     34        Window                  : window,
    3535
    3636        AttachToOnSelectionChange : function( functionPointer )
     
    734734
    735735                return true ;
     736        },
     737
     738        SetDialogMode: function( yes )
     739        {
     740                var doc = this.Window.parent.document ;
     741                var editorFrame = this.Window.frameElement ;
     742                var editorParentElement = editorFrame.parentNode ;
     743                if ( !this.BackgroundBlocker )
     744                {
     745                        this.BackgroundBlocker = doc.createElement( 'iframe' ) ;
     746                        this.EditorBlocker = doc.createElement( 'iframe' ) ;
     747                        this.BackgroundBlocker.src = FCKConfig.SkinPath + 'fck_background_blocker.html' ;
     748                        this.EditorBlocker.src = FCKConfig.SkinPath + 'fck_editor_blocker.html' ;
     749
     750                        this.BackgroundBlocker.frameBorder = 0 ;
     751                        this.EditorBlocker.frameBorder = 0 ;
     752                        FCKDomTools.SetElementStyles( this.BackgroundBlocker,
     753                                {
     754                                        'left' : '0px',
     755                                        'top' : '0px',
     756                                        'position' : 'absolute',
     757                                        'zIndex' : 0
     758                                } ) ;
     759                        FCKDomTools.SetElementStyles( this.EditorBlocker,
     760                                {
     761                                        'position' : 'absolute',
     762                                        'zIndex' : 200
     763                                } ) ;
     764                        FCKDomTools.SetOpacity( this.BackgroundBlocker, 0.5 ) ;
     765                        FCKDomTools.SetOpacity( this.EditorBlocker, 0.5 ) ;
     766                        editorParentElement.style.overflow = 'visible' ;
     767                        FCKDomTools.SetElementStyles( editorFrame,
     768                                {
     769                                        'zIndex' : 100,
     770                                        'width' : editorFrame.offsetWidth + 'px',
     771                                        'height' : editorFrame.offsetHeight + 'px',
     772                                        'position' : 'absolute'
     773                                } ) ;
     774                        FCKDomTools.SetElementStyles( editorParentElement,
     775                                {
     776                                        'width' : editorFrame.offsetWidth + 'px',
     777                                        'height' : editorFrame.offsetHeight + 'px'
     778                                } ) ;
     779                        editorParentElement.appendChild( this.BackgroundBlocker ) ;
     780                        editorParentElement.appendChild( this.EditorBlocker ) ;
     781                }
     782
     783                if ( yes )
     784                {
     785                        var parentDivPosition = FCKTools.GetDocumentPosition( this.Window.parent, editorParentElement ) ;
     786                        FCKDomTools.SetElementStyles( this.EditorBlocker,
     787                                {
     788                                        'width' : editorFrame.offsetWidth + 'px',
     789                                        'height' : editorFrame.offsetHeight + 'px',
     790                                        'left' : parentDivPosition.x + 'px',
     791                                        'top' : parentDivPosition.y + 'px',
     792                                        'display' : ''
     793                                } ) ;
     794                        FCKDomTools.SetElementStyles( this.BackgroundBlocker,
     795                                {
     796                                        'width' : Math.max( doc.documentElement.scrollWidth, doc.documentElement.clientWidth ) + 'px',
     797                                        'height' : Math.max( doc.documentElement.scrollHeight, doc.documentElement.clientHeight ) + 'px',
     798                                        'left' : '0px',
     799                                        'top' : '0px',
     800                                        'display' : ''
     801                                } ) ;
     802                        this.EditorBlocker.focus() ;
     803                }
     804                else
     805                {
     806                        // the top : -10000px statement is needed to circumvent an IE focus bug, don't delete.
     807                        FCKDomTools.SetElementStyles( this.EditorBlocker,
     808                                {
     809                                        'display' : 'none',
     810                                        'top' : '-10000px'
     811                                } ) ;
     812                        FCKDomTools.SetElementStyles( this.BackgroundBlocker,
     813                                {
     814                                        'display' : 'none',
     815                                        'top' : '-10000px'
     816                                } ) ;
     817                }
    736818        }
    737819} ;
     
    865947                return ;
    866948
     949        // Popup a debug window if debug mode is set to true.
    867950        if ( FCKConfig.Debug )
    868951                FCKDebug._GetWindow() ;
     952
     953        // Apply floating dialog blocker styles to the parent document if not already applied.
     954        if ( ! window.parent.FCK_BLOCKER_STYLES_APPLIED )
     955        {
     956                window.parent.FCK_BLOCKER_STYLES_APPLIED = true ;
     957        }
    869958
    870959        FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js

    r1054 r1056  
    6666        var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
    6767        this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ;
    68 }
    69 
    70 FCKDialog._LoadPNG = function( element, url )
    71 {
    72         if ( FCKBrowserInfo.IsIE )
    73                 element.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + url + '",sizingMethod="scale")' ;
    74         else
    75         {
    76                 element.style.backgroundImage = 'url(' + url + ')' ;
    77                 element.style.backgroundRepeat = 'repeat' ;
    78         }
    79 }
    80 
    81 FCKDialog._SetOpacity = function( element, opacity )
    82 {
    83         if ( FCKBrowserInfo.IsIE )
    84                 element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + parseInt( opacity * 100 ) + ')' ;
    85         else
    86                 element.style.opacity = opacity ;
    8768}
    8869
     
    143124        oWindow.focus() ;
    144125        this.Window = oWindow ;
     126        FCK.SetDialogMode( true ) ;
    145127}
    146128
     
    218200                else
    219201                        d.style.height = ( container.offsetHeight - 40 ) + 'px' ;
    220                 this._LoadPNG( d, FCKConfig.SkinPath + 'images/' + partUrl[i] ) ;
     202                FCKDomTools.LoadPNG( d, FCKConfig.SkinPath + 'images/' + partUrl[i] ) ;
    221203                var x = [ 0, 20, container.offsetWidth - 20 ] ;
    222204                var y = [ 0, 20, container.offsetHeight - 20 ] ;
     
    230212        }
    231213
    232         this._SetOpacity( shadowBlock, 0.65 ) ;
     214        FCKDomTools.SetOpacity( shadowBlock, 0.65 ) ;
    233215        container.appendChild( shadowBlock ) ;
    234216}
     
    241223        container.parentNode.removeChild( container ) ;
    242224        this.BaseZIndex -= 100 ;
    243 }
     225        FCK.SetDialogMode( false ) ;
     226}
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdomtools.js

    r1048 r1056  
    895895                for ( var styleName in styleDict )
    896896                        style[ styleName ] = styleDict[ styleName ] ;
     897        },
     898
     899        LoadPNG : function( element, url )
     900        {
     901                if ( FCKBrowserInfo.IsIE )
     902                        element.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + url + '",sizingMethod="scale")' ;
     903                else
     904                {
     905                        element.style.backgroundImage = 'url(' + url + ')' ;
     906                        element.style.backgroundRepeat = 'repeat' ;
     907                }
     908        },
     909
     910        SetOpacity : function( element, opacity )
     911        {
     912                if ( FCKBrowserInfo.IsIE )
     913                        element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + parseInt( opacity * 100 ) + ')' ;
     914                else
     915                        element.style.opacity = opacity ;
    897916        }
    898917} ;
  • FCKeditor/branches/features/floating_dialog/editor/_source/internals/fcktools.js

    r1017 r1056  
    424424        var y = 0 ;
    425425        var curNode = node ;
    426         while ( curNode && curNode != w.document.body )
     426        while ( curNode && curNode != w.document.documentElement )
    427427        {
    428428                x += curNode.offsetLeft - curNode.scrollLeft ;
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy