Вход Регистрация
Файл: fckeditor/editor/_source/internals/fcktoolbarset.js
Строк: 440
<?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 ==
 *
 * Defines the FCKToolbarSet object that is used to load and draw the
 * toolbar.
 */

function FCKToolbarSet_CreateoverhideLocation )
{
    var 
oToolbarSet ;

    var 
sLocation overhideLocation || FCKConfig.ToolbarLocation ;
    switch ( 
sLocation )
    {
        case 
'In' :
            
document.getElementById'xToolbarRow' ).style.display '' ;
            
oToolbarSet = new FCKToolbarSetdocument ) ;
            break ;
        case 
'None' :
            
oToolbarSet = new FCKToolbarSetdocument ) ;
            break ;

//        case 'OutTop' :
            // Not supported.

        
default :
            
FCK.Events.AttachEvent'OnBlur'FCK_OnBlur ) ;
            
FCK.Events.AttachEvent'OnFocus'FCK_OnFocus ) ;

            var 
eToolbarTarget ;

            
// Out:[TargetWindow]([TargetId])
            
var oOutMatch sLocation.match( /^Out:(.+)((w+))$/ ) ;
            if ( 
oOutMatch )
            {
                if ( 
FCKBrowserInfo.IsAIR )
                    
FCKAdobeAIR.ToolbarSet_GetOutElementwindowoOutMatch ) ;
                else
                    
eToolbarTarget = eval( 'parent.' oOutMatch[1] ).document.getElementByIdoOutMatch[2] ) ;
            }
            else
            {
                
// Out:[TargetId]
                
oOutMatch sLocation.match( /^Out:(w+)$/ ) ;
                if ( 
oOutMatch )
                    
eToolbarTarget parent.document.getElementByIdoOutMatch[1] ) ;
            }

            if ( !
eToolbarTarget )
            {
                
alert'Invalid value for "ToolbarLocation"' ) ;
                return 
arguments.callee'In' );
            }

            
// If it is a shared toolbar, it may be already available in the target element.
            
oToolbarSet eToolbarTarget.__FCKToolbarSet ;
            if ( 
oToolbarSet )
                break ;

            
// Create the IFRAME that will hold the toolbar inside the target element.
            
var eToolbarIFrame FCKTools.GetElementDocumenteToolbarTarget ).createElement'iframe' ) ;
            
eToolbarIFrame.src 'javascript:void(0)' ;
            
eToolbarIFrame.frameBorder ;
            
eToolbarIFrame.width '100%' ;
            
eToolbarIFrame.height '10' ;
            
eToolbarTarget.appendChildeToolbarIFrame ) ;
            
eToolbarIFrame.unselectable 'on' ;

            
// Write the basic HTML for the toolbar (copy from the editor main page).
            
var eTargetDocument eToolbarIFrame.contentWindow.document ;

            
// Workaround for Safari 12256. Ticket #63
            
var sBase '' ;
            if ( 
FCKBrowserInfo.IsSafari )
                
sBase '<base href="' window.document.location '">' ;

            
// Initialize the IFRAME document body.
            
eTargetDocument.open() ;
            
eTargetDocument.write'<html><head>' sBase '<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; '
                    
'window.onresize = window.onload = '
                    
'function(){'        // poll scrollHeight until it no longer changes for 1 sec.
                    
'var timer = null;'
                    
'var lastHeight = -1;'
                    
'var lastChange = 0;'
                    
'var poller = function(){'
                    
'var currentHeight = document.body.scrollHeight || 0;'
                    
'var currentTime = (new Date()).getTime();'
                    
'if (currentHeight != lastHeight){'
                    
'lastChange = currentTime;'
                    
'adjust();'
                    
'lastHeight = document.body.scrollHeight;'
                    
'}'
                    
'if (lastChange < currentTime - 1000) clearInterval(timer);'
                    
'};'
                    
'timer = setInterval(poller, 100);'
                    
'}'
                    
'</script></head><body style="overflow: hidden">' document.getElementById'xToolbarSpace' ).innerHTML '</body></html>' ) ;
            
eTargetDocument.close() ;

            if( 
FCKBrowserInfo.IsAIR )
                
FCKAdobeAIR.ToolbarSet_InitOutFrameeTargetDocument ) ;

            
FCKTools.AddEventListenereTargetDocument'contextmenu'FCKTools.CancelEvent ) ;

            
// Load external resources (must be done here, otherwise Firefox will not
            // have the document DOM ready to be used right away.
            
FCKTools.AppendStyleSheeteTargetDocumentFCKConfig.SkinEditorCSS ) ;

            
oToolbarSet eToolbarTarget.__FCKToolbarSet = new FCKToolbarSeteTargetDocument ) ;
            
oToolbarSet._IFrame eToolbarIFrame ;

            if ( 
FCK.IECleanup )
                
FCK.IECleanup.AddItemeToolbarTargetFCKToolbarSet_Target_Cleanup ) ;
    }

    
oToolbarSet.CurrentInstance FCK ;
    if ( !
oToolbarSet.ToolbarItems )
        
oToolbarSet.ToolbarItems FCKToolbarItems ;

    
FCK.AttachToOnSelectionChangeoToolbarSet.RefreshItemsState ) ;

    return 
oToolbarSet ;
}

function 
FCK_OnBlureditorInstance )
{
    var 
eToolbarSet editorInstance.ToolbarSet ;

    if ( 
eToolbarSet.CurrentInstance == editorInstance )
        
eToolbarSet.Disable() ;
}

function 
FCK_OnFocuseditorInstance )
{
    var 
oToolbarset editorInstance.ToolbarSet ;
    var 
oInstance editorInstance || FCK ;

    
// Unregister the toolbar window from the current instance.
    
oToolbarset.CurrentInstance.FocusManager.RemoveWindowoToolbarset._IFrame.contentWindow ) ;

    
// Set the new current instance.
    
oToolbarset.CurrentInstance oInstance ;

    
// Register the toolbar window in the current instance.
    
oInstance.FocusManager.AddWindowoToolbarset._IFrame.contentWindowtrue ) ;

    
oToolbarset.Enable() ;
}

function 
FCKToolbarSet_Cleanup()
{
    
this._TargetElement null ;
    
this._IFrame null ;
}

function 
FCKToolbarSet_Target_Cleanup()
{
    
this.__FCKToolbarSet null ;
}

var 
FCKToolbarSet = function( targetDocument )
{
    
this._Document targetDocument ;

    
// Get the element that will hold the elements structure.
    
this._TargetElement    targetDocument.getElementById'xToolbar' ) ;

    
// Setup the expand and collapse handlers.
    
var eExpandHandle    targetDocument.getElementById'xExpandHandle' ) ;
    var 
eCollapseHandle    targetDocument.getElementById'xCollapseHandle' ) ;

    
eExpandHandle.title        FCKLang.ToolbarExpand ;
    
FCKTools.AddEventListenereExpandHandle'click'FCKToolbarSet_Expand_OnClick ) ;

    
eCollapseHandle.title    FCKLang.ToolbarCollapse ;
    
FCKTools.AddEventListenereCollapseHandle'click'FCKToolbarSet_Collapse_OnClick ) ;

    
// Set the toolbar state at startup.
    
if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
        
this.Expand() ;
    else
        
this.Collapse() ;

    
// Enable/disable the collapse handler
    
eCollapseHandle.style.display FCKConfig.ToolbarCanCollapse '' 'none' ;

    if ( 
FCKConfig.ToolbarCanCollapse )
        
eCollapseHandle.style.display '' ;
    else
        
targetDocument.getElementById'xTBLeftBorder' ).style.display '' ;

    
// Set the default properties.
    
this.Toolbars = new Array() ;
    
this.IsLoaded false ;

    if ( 
FCK.IECleanup )
        
FCK.IECleanup.AddItemthisFCKToolbarSet_Cleanup ) ;
}

function 
FCKToolbarSet_Expand_OnClick()
{
    
FCK.ToolbarSet.Expand() ;
}

function 
FCKToolbarSet_Collapse_OnClick()
{
    
FCK.ToolbarSet.Collapse() ;
}

FCKToolbarSet.prototype.Expand = function()
{
    
this._ChangeVisibilityfalse ) ;
}

FCKToolbarSet.prototype.Collapse = function()
{
    
this._ChangeVisibilitytrue ) ;
}

FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
{
    
this._Document.getElementById'xCollapsed' ).style.display collapse '' 'none' ;
    
this._Document.getElementById'xExpanded' ).style.display collapse 'none' '' ;

    if ( 
FCKBrowserInfo.IsGecko )
    {
        
// I had to use "setTimeout" because Gecko was not responding in a right
        // way when calling window.onresize() directly.
        
FCKTools.RunFunctionwindow.onresize ) ;
    }
}

FCKToolbarSet.prototype.Load = function( toolbarSetName )
{
    
this.Name toolbarSetName ;

    
this.Items = new Array() ;

    
// Reset the array of toolbar items that are active only on WYSIWYG mode.
    
this.ItemsWysiwygOnly = new Array() ;

    
// Reset the array of toolbar items that are sensitive to the cursor position.
    
this.ItemsContextSensitive = new Array() ;

    
// Cleanup the target element.
    
this._TargetElement.innerHTML '' ;

    var 
ToolbarSet FCKConfig.ToolbarSets[toolbarSetName] ;

    if ( !
ToolbarSet )
    {
        
alertFCKLang.UnknownToolbarSet.replace( /%1/gtoolbarSetName ) ) ;
        return ;
    }

    
this.Toolbars = new Array() ;

    for ( var 
ToolbarSet.length x++ )
    {
        var 
oToolbarItems ToolbarSet[x] ;

        
// If the configuration for the toolbar is missing some element or has any extra comma
        // this item won't be valid, so skip it and keep on processing.
        
if ( !oToolbarItems )
            continue ;

        var 
oToolbar ;

        if ( 
typeofoToolbarItems ) == 'string' )
        {
            if ( 
oToolbarItems == '/' )
                
oToolbar = new FCKToolbarBreak() ;
        }
        else
        {
            
oToolbar = new FCKToolbar() ;

            for ( var 
oToolbarItems.length j++ )
            {
                var 
sItem oToolbarItems[j] ;

                if ( 
sItem == '-')
                    
oToolbar.AddSeparator() ;
                else
                {
                    var 
oItem FCKToolbarItems.GetItemsItem ) ;
                    if ( 
oItem )
                    {
                        
oToolbar.AddItemoItem ) ;

                        
this.Items.pushoItem ) ;

                        if ( !
oItem.SourceView )
                            
this.ItemsWysiwygOnly.pushoItem ) ;

                        if ( 
oItem.ContextSensitive )
                            
this.ItemsContextSensitive.pushoItem ) ;
                    }
                }
            }

            
// oToolbar.AddTerminator() ;
        
}

        
oToolbar.Createthis._TargetElement ) ;

        
this.Toolbarsthis.Toolbars.length ] = oToolbar ;
    }

    
FCKTools.DisableSelectionthis._Document.getElementById'xCollapseHandle' ).parentNode ) ;

    if ( 
FCK.Status != FCK_STATUS_COMPLETE )
        
FCK.Events.AttachEvent'OnStatusChange'this.RefreshModeState ) ;
    else
        
this.RefreshModeState() ;

    
this.IsLoaded true ;
    
this.IsEnabled true ;

    
FCKTools.RunFunctionthis.OnLoad ) ;
}

FCKToolbarSet.prototype.Enable = function()
{
    if ( 
this.IsEnabled )
        return ;

    
this.IsEnabled true ;

    var 
aItems this.Items ;
    for ( var 
aItems.length i++ )
        
aItems[i].RefreshState() ;
}

FCKToolbarSet.prototype.Disable = function()
{
    if ( !
this.IsEnabled )
        return ;

    
this.IsEnabled false ;

    var 
aItems this.Items ;
    for ( var 
aItems.length i++ )
        
aItems[i].Disable() ;
}

FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
{
    if ( 
FCK.Status != FCK_STATUS_COMPLETE )
        return ;

    var 
oToolbarSet editorInstance editorInstance.ToolbarSet this ;
    var 
aItems oToolbarSet.ItemsWysiwygOnly ;

    if ( 
FCK.EditMode == FCK_EDITMODE_WYSIWYG )
    {
        
// Enable all buttons that are available on WYSIWYG mode only.
        
for ( var aItems.length i++ )
            
aItems[i].Enable() ;

        
// Refresh the buttons state.
        
oToolbarSet.RefreshItemsStateeditorInstance ) ;
    }
    else
    {
        
// Refresh the buttons state.
        
oToolbarSet.RefreshItemsStateeditorInstance ) ;

        
// Disable all buttons that are available on WYSIWYG mode only.
        
for ( var aItems.length j++ )
            
aItems[j].Disable() ;
    }
}

FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
{

    var 
aItems = ( editorInstance editorInstance.ToolbarSet this ).ItemsContextSensitive ;

    for ( var 
aItems.length i++ )
        
aItems[i].RefreshState() ;
}
?>
Онлайн: 3
Реклама