source: trunk/admin/inc/FCKeditor/editor/_source/commandclasses/fckfitwindow.js@ 2

Last change on this file since 2 was 2, checked in by root, 15 years ago

importo il progetto

File size: 5.3 KB
Line 
1/*
2 * FCKeditor - The text editor for internet
3 * Copyright (C) 2003-2006 Frederico Caldeira Knabben
4 *
5 * Licensed under the terms of the GNU Lesser General Public License:
6 * http://www.opensource.org/licenses/lgpl-license.php
7 *
8 * For further information visit:
9 * http://www.fckeditor.net/
10 *
11 * "Support Open Source software. What about a donation today?"
12 *
13 * File Name: fckfitwindow.js
14 * Stretch the editor to full window size and back.
15 *
16 * File Authors:
17 * Paul Moers (mail@saulmade.nl)
18 * Thanks to Christian Fecteau (webmaster@christianfecteau.com)
19 * Frederico Caldeira Knabben (fredck@fckeditor.net)
20 */
21
22var FCKFitWindow = function()
23{
24 this.Name = 'FitWindow' ;
25}
26
27FCKFitWindow.prototype.Execute = function()
28{
29 var eEditorFrame = window.frameElement ;
30 var eEditorFrameStyle = eEditorFrame.style ;
31
32 var eMainWindow = parent ;
33 var eDocEl = eMainWindow.document.documentElement ;
34 var eBody = eMainWindow.document.body ;
35 var eBodyStyle = eBody.style ;
36
37 // No original style properties known? Go fullscreen.
38 if ( !this.IsMaximized )
39 {
40 // Registering an event handler when the window gets resized.
41 if( FCKBrowserInfo.IsIE )
42 eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
43 else
44 eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
45
46 // Save the scrollbars position.
47 this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
48
49 // Save and reset the styles for the entire node tree. They could interfere in the result.
50 var eParent = eEditorFrame ;
51 while( eParent = eParent.parentNode )
52 {
53 if ( eParent.nodeType == 1 )
54 eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
55 }
56
57 // Hide IE scrollbars (in strict mode).
58 if ( FCKBrowserInfo.IsIE )
59 {
60 this.documentElementOverflow = eDocEl.style.overflow ;
61 eDocEl.style.overflow = 'hidden' ;
62 eBodyStyle.overflow = 'hidden' ;
63 }
64 else
65 {
66 // Hide the scroolbars in Firefox.
67 eBodyStyle.overflow = 'hidden' ;
68 eBodyStyle.width = '0px' ;
69 eBodyStyle.height = '0px' ;
70 }
71
72 // Save the IFRAME styles.
73 this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
74
75 // Resize.
76 var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
77
78 eEditorFrameStyle.position = "absolute";
79 eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1;
80 eEditorFrameStyle.left = "0px";
81 eEditorFrameStyle.top = "0px";
82 eEditorFrameStyle.width = oViewPaneSize.Width + "px";
83 eEditorFrameStyle.height = oViewPaneSize.Height + "px";
84
85 // Giving the frame some (huge) borders on his right and bottom
86 // side to hide the background that would otherwise show when the
87 // editor is in fullsize mode and the window is increased in size
88 // not for IE, because IE immediately adapts the editor on resize,
89 // without showing any of the background oddly in firefox, the
90 // editor seems not to fill the whole frame, so just setting the
91 // background of it to white to cover the page laying behind it anyway.
92 if ( !FCKBrowserInfo.IsIE )
93 {
94 eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
95 eEditorFrameStyle.backgroundColor = "white";
96 }
97
98 // Scroll to top left.
99 eMainWindow.scrollTo(0, 0);
100
101 this.IsMaximized = true ;
102 }
103 else // Resize to original size.
104 {
105 // Remove the event handler of window resizing.
106 if( FCKBrowserInfo.IsIE )
107 eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
108 else
109 eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
110
111 // Restore the CSS position for the entire node tree.
112 var eParent = eEditorFrame ;
113 while( eParent = eParent.parentNode )
114 {
115 if ( eParent._fckSavedStyles )
116 {
117 FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
118 eParent._fckSavedStyles = null ;
119 }
120 }
121
122 // Restore IE scrollbars
123 if ( FCKBrowserInfo.IsIE )
124 eDocEl.style.overflow = this.documentElementOverflow ;
125
126 // Restore original size
127 FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
128
129 // Restore the window scroll position.
130 eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
131
132 this.IsMaximized = false ;
133 }
134
135 FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
136
137 // It seams that Firefox restarts the editing area when making this changes.
138 // On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
139 //configuration, like DisableFFTableHandles and DisableObjectResizing get
140 //lost, so we must reset it. Also, the cursor position and selection are
141 //also lost, even if you comment the following line (MakeEditable).
142 // if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem.
143 FCK.EditingArea.MakeEditable() ;
144
145 FCK.Focus() ;
146}
147
148FCKFitWindow.prototype.GetState = function()
149{
150 if ( FCKConfig.ToolbarLocation != 'In' )
151 return FCK_TRISTATE_DISABLED ;
152 else
153 return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
154}
155
156function FCKFitWindow_Resize()
157{
158 var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
159
160 var eEditorFrameStyle = window.frameElement.style ;
161
162 eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ;
163 eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ;
164}
Note: See TracBrowser for help on using the repository browser.