Вход Регистрация
Файл: fckeditor/editor/_source/internals/fckdialog.js
Строк: 272
<?php

/*
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 * Copyright (C) 2003-2008 Frederico Caldeira Knabben
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * Dialog windows operations.
 */

var FCKDialog = ( function()
{
    var 
topDialog ;
    var 
baseZIndex ;
    var 
cover ;

    
// The document that holds the dialog.
    
var topWindow window.parent ;

    while ( 
topWindow.parent && topWindow.parent != topWindow )
    {
        try
        {
            if ( 
topWindow.parent.document.domain != document.domain )
                break ;
            if ( 
topWindow.parent.document.getElementsByTagName'frameset' ).length )
                break ;
        }
        catch ( 
)
        {
            break ;
        }
        
topWindow topWindow.parent ;
    }

    var 
topDocument topWindow.document ;

    var 
getZIndex = function()
    {
        if ( !
baseZIndex )
            
baseZIndex FCKConfig.FloatingPanelsZIndex 999 ;
        return ++
baseZIndex ;
    }

    
// TODO : This logic is not actually working when reducing the window, only
    // when enlarging it.
    
var resizeHandler = function()
    {
        if ( !
cover )
            return ;

        var 
relElement FCKTools.IsStrictModetopDocument ) ? topDocument.documentElement topDocument.body ;

        
FCKDomTools.SetElementStylescover,
            {
                
'width' Math.maxrelElement.scrollWidth,
                    
relElement.clientWidth,
                    
topDocument.scrollWidth || ) - 'px',
                
'height' Math.maxrelElement.scrollHeight,
                    
relElement.clientHeight,
                    
topDocument.scrollHeight || ) - 'px'
            
} ) ;
    }

    return {
        
/**
         * Opens a dialog window using the standard dialog template.
         */
        
OpenDialog : function( dialogNamedialogTitledialogPagewidthheightcustomValueparentWindowresizable )
        {
            if ( !
topDialog )
                
this.DisplayMainCover() ;

            
// Setup the dialog info to be passed to the dialog.
            
var dialogInfo =
            {
                
Title dialogTitle,
                
Page dialogPage,
                
Editor window,
                
CustomValue customValue,        // Optional
                
TopWindow topWindow
            
}

            
FCK.ToolbarSet.CurrentInstance.Selection.Save() ;

            
// Calculate the dialog position, centering it on the screen.
            
var viewSize FCKTools.GetViewPaneSizetopWindow ) ;
            var 
scrollPosition = { 'X' 0'Y' } ;
            var 
useAbsolutePosition FCKBrowserInfo.IsIE && ( !FCKBrowserInfo.IsIE7 || !FCKTools.IsStrictModetopWindow.document ) ) ;
            if ( 
useAbsolutePosition )
                
scrollPosition FCKTools.GetScrollPositiontopWindow ) ;
            var 
iTop  Math.maxscrollPosition.+ ( viewSize.Height height 20 ) / 2) ;
            var 
iLeft Math.maxscrollPosition.+ ( viewSize.Width width 20 )  / 2) ;

            
// Setup the IFRAME that will hold the dialog.
            
var dialog topDocument.createElement'iframe' ) ;
            
FCKTools.ResetStylesdialog ) ;
            
dialog.src FCKConfig.BasePath 'fckdialog.html' ;

            
// Dummy URL for testing whether the code in fckdialog.js alone leaks memory.
            // dialog.src = 'about:blank';

            
dialog.frameBorder ;
            
dialog.allowTransparency true ;
            
FCKDomTools.SetElementStylesdialog,
                    {
                        
'position'    : ( useAbsolutePosition ) ? 'absolute' 'fixed',
                        
'top'        iTop 'px',
                        
'left'        iLeft 'px',
                        
'width'        width 'px',
                        
'height'    height 'px',
                        
'zIndex'    getZIndex()
                    } ) ;

            
// Save the dialog info to be used by the dialog page once loaded.
            
dialog._DialogArguments dialogInfo ;

            
// Append the IFRAME to the target document.
            
topDocument.body.appendChilddialog ) ;

            
// Keep record of the dialog's parent/child relationships.
            
dialog._ParentDialog topDialog ;
            
topDialog dialog ;
        },

        
/**
         * (For internal use)
         * Called when the top dialog is closed.
         */
        
OnDialogClose : function( dialogWindow )
        {
            var 
dialog dialogWindow.frameElement ;
            
FCKDomTools.RemoveNodedialog ) ;

            if ( 
dialog._ParentDialog )        // Nested Dialog.
            
{
                
topDialog dialog._ParentDialog ;
                
dialog._ParentDialog.contentWindow.SetEnabledtrue ) ;
            }
            else                            
// First Dialog.
            
{
                
// Set the Focus in the browser, so the "OnBlur" event is not
                // fired. In IE, there is no need to do that because the dialog
                // already moved the selection to the editing area before
                // closing (EnsureSelection). Also, the Focus() call here
                // causes memory leak on IE7 (weird).
                
if ( !FCKBrowserInfo.IsIE )
                    
FCK.Focus() ;

                
this.HideMainCover() ;
                
// Bug #1918: Assigning topDialog = null directly causes IE6 to crash.
                
setTimeout( function(){ topDialog null ; }, ) ;

                
// Release the previously saved selection.
                
FCK.ToolbarSet.CurrentInstance.Selection.Release() ;
            }
        },

        
DisplayMainCover : function()
        {
            
// Setup the DIV that will be used to cover.
            
cover topDocument.createElement'div' ) ;
            
FCKTools.ResetStylescover ) ;
            
FCKDomTools.SetElementStylescover,
                {
                    
'position' 'absolute',
                    
'zIndex' getZIndex(),
                    
'top' '0px',
                    
'left' '0px',
                    
'backgroundColor' FCKConfig.BackgroundBlockerColor
                
} ) ;
            
FCKDomTools.SetOpacitycoverFCKConfig.BackgroundBlockerOpacity ) ;

            
// For IE6-, we need to fill the cover with a transparent IFRAME,
            // to properly block <select> fields.
            
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
            {
                var 
iframe topDocument.createElement'iframe' ) ;
                
FCKTools.ResetStylesiframe ) ;
                
iframe.hideFocus true ;
                
iframe.frameBorder ;
                
iframe.src FCKTools.GetVoidUrl() ;
                
FCKDomTools.SetElementStylesiframe,
                    {
                        
'width' '100%',
                        
'height' '100%',
                        
'position' 'absolute',
                        
'left' '0px',
                        
'top' '0px',
                        
'filter' 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
                    
} ) ;
                
cover.appendChildiframe ) ;
            }

            
// We need to manually adjust the cover size on resize.
            
FCKTools.AddEventListenertopWindow'resize'resizeHandler ) ;
            
resizeHandler() ;

            
topDocument.body.appendChildcover ) ;

            
FCKFocusManager.Lock() ;

            
// Prevent the user from refocusing the disabled
            // editing window by pressing Tab. (Bug #2065)
            
var el FCK.ToolbarSet.CurrentInstance.GetInstanceObject'frameElement' ) ;
            
el._fck_originalTabIndex el.tabIndex ;
            
el.tabIndex = -;
        },

        
HideMainCover : function()
        {
            
FCKDomTools.RemoveNodecover ) ;
            
FCKFocusManager.Unlock() ;

            
// Revert the tab index hack. (Bug #2065)
            
var el FCK.ToolbarSet.CurrentInstance.GetInstanceObject'frameElement' ) ;
            
el.tabIndex el._fck_originalTabIndex ;
            
FCKDomTools.ClearElementJSPropertyel'_fck_originalTabIndex' ) ;
        },

        
GetCover : function()
        {
            return 
cover ;
        }
    } ;
} )() ;
?>
Онлайн: 0
Реклама