fckfitwindow.js
上传用户:dbstep
上传日期:2022-08-06
资源大小:2803k
文件大小:7k
源码类别:
WEB源码(ASP,PHP,...)
开发平台:
ASP/ASPX
- /*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2009 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 ==
- *
- * Stretch the editor to full window size and back.
- */
- var FCKFitWindow = function()
- {
- this.Name = 'FitWindow' ;
- }
- FCKFitWindow.prototype.Execute = function()
- {
- var eEditorFrame = window.frameElement ;
- var eEditorFrameStyle = eEditorFrame.style ;
- var eMainWindow = parent ;
- var eDocEl = eMainWindow.document.documentElement ;
- var eBody = eMainWindow.document.body ;
- var eBodyStyle = eBody.style ;
- var eParent ;
- // Save the current selection and scroll position.
- var oRange, oEditorScrollPos ;
- if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
- {
- oRange = new FCKDomRange( FCK.EditorWindow ) ;
- oRange.MoveToSelection() ;
- oEditorScrollPos = FCKTools.GetScrollPosition( FCK.EditorWindow ) ;
- }
- else
- {
- var eTextarea = FCK.EditingArea.Textarea ;
- oRange = !FCKBrowserInfo.IsIE && [ eTextarea.selectionStart, eTextarea.selectionEnd ] ;
- oEditorScrollPos = [ eTextarea.scrollLeft, eTextarea.scrollTop ] ;
- }
- // No original style properties known? Go fullscreen.
- if ( !this.IsMaximized )
- {
- // Registering an event handler when the window gets resized.
- if( FCKBrowserInfo.IsIE )
- eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
- else
- eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
- // Save the scrollbars position.
- this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
- // Save and reset the styles for the entire node tree. They could interfere in the result.
- eParent = eEditorFrame ;
- // The extra () is to avoid a warning with strict error checking. This is ok.
- while( (eParent = eParent.parentNode) )
- {
- if ( eParent.nodeType == 1 )
- {
- eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
- eParent.style.zIndex = FCKConfig.FloatingPanelsZIndex - 1 ;
- }
- }
- // Hide IE scrollbars (in strict mode).
- if ( FCKBrowserInfo.IsIE )
- {
- this.documentElementOverflow = eDocEl.style.overflow ;
- eDocEl.style.overflow = 'hidden' ;
- eBodyStyle.overflow = 'hidden' ;
- }
- else
- {
- // Hide the scroolbars in Firefox.
- eBodyStyle.overflow = 'hidden' ;
- eBodyStyle.width = '0px' ;
- eBodyStyle.height = '0px' ;
- }
- // Save the IFRAME styles.
- this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
- // Resize.
- var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
- eEditorFrameStyle.position = "absolute";
- eEditorFrame.offsetLeft ; // Kludge for Safari 3.1 browser bug, do not remove. See #2066.
- eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1;
- eEditorFrameStyle.left = "0px";
- eEditorFrameStyle.top = "0px";
- eEditorFrameStyle.width = oViewPaneSize.Width + "px";
- eEditorFrameStyle.height = oViewPaneSize.Height + "px";
- // Giving the frame some (huge) borders on his right and bottom
- // side to hide the background that would otherwise show when the
- // editor is in fullsize mode and the window is increased in size
- // not for IE, because IE immediately adapts the editor on resize,
- // without showing any of the background oddly in firefox, the
- // editor seems not to fill the whole frame, so just setting the
- // background of it to white to cover the page laying behind it anyway.
- if ( !FCKBrowserInfo.IsIE )
- {
- eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
- eEditorFrameStyle.backgroundColor = "white";
- }
- // Scroll to top left.
- eMainWindow.scrollTo(0, 0);
- // Is the editor still not on the top left? Let's find out and fix that as well. (Bug #174)
- var editorPos = FCKTools.GetWindowPosition( eMainWindow, eEditorFrame ) ;
- if ( editorPos.x != 0 )
- eEditorFrameStyle.left = ( -1 * editorPos.x ) + "px" ;
- if ( editorPos.y != 0 )
- eEditorFrameStyle.top = ( -1 * editorPos.y ) + "px" ;
- this.IsMaximized = true ;
- }
- else // Resize to original size.
- {
- // Remove the event handler of window resizing.
- if( FCKBrowserInfo.IsIE )
- eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
- else
- eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
- // Restore the CSS position for the entire node tree.
- eParent = eEditorFrame ;
- // The extra () is to avoid a warning with strict error checking. This is ok.
- while( (eParent = eParent.parentNode) )
- {
- if ( eParent._fckSavedStyles )
- {
- FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
- eParent._fckSavedStyles = null ;
- }
- }
- // Restore IE scrollbars
- if ( FCKBrowserInfo.IsIE )
- eDocEl.style.overflow = this.documentElementOverflow ;
- // Restore original size
- FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
- // Restore the window scroll position.
- eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
- this.IsMaximized = false ;
- }
- FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
- // It seams that Firefox restarts the editing area when making this changes.
- // On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
- //configuration, like DisableFFTableHandles and DisableObjectResizing get
- //lost, so we must reset it. Also, the cursor position and selection are
- //also lost, even if you comment the following line (MakeEditable).
- // if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem.
- if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
- FCK.EditingArea.MakeEditable() ;
- FCK.Focus() ;
- // Restore the selection and scroll position of inside the document.
- if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
- {
- oRange.Select() ;
- FCK.EditorWindow.scrollTo( oEditorScrollPos.X, oEditorScrollPos.Y ) ;
- }
- else
- {
- if ( !FCKBrowserInfo.IsIE )
- {
- eTextarea.selectionStart = oRange[0] ;
- eTextarea.selectionEnd = oRange[1] ;
- }
- eTextarea.scrollLeft = oEditorScrollPos[0] ;
- eTextarea.scrollTop = oEditorScrollPos[1] ;
- }
- }
- FCKFitWindow.prototype.GetState = function()
- {
- if ( FCKConfig.ToolbarLocation != 'In' )
- return FCK_TRISTATE_DISABLED ;
- else
- return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
- }
- function FCKFitWindow_Resize()
- {
- var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
- var eEditorFrameStyle = window.frameElement.style ;
- eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ;
- eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ;
- }