X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FNoAuth%2FRichText%2FFCKeditor%2Feditor%2F_source%2Fcommandclasses%2Ffckfitwindow.js;fp=rt%2Fshare%2Fhtml%2FNoAuth%2FRichText%2FFCKeditor%2Feditor%2F_source%2Fcommandclasses%2Ffckfitwindow.js;h=c1b8f9a5b4e89349c3959802b8ab5c2b0ee1597b;hb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd;hp=0000000000000000000000000000000000000000;hpb=2dfda73eeb3eae2d4f894099754794ef07d060dd;p=freeside.git diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js new file mode 100644 index 000000000..c1b8f9a5b --- /dev/null +++ b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js @@ -0,0 +1,213 @@ +/* + * 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' ; +}