Subversion Repositories Applications.papyrus

Rev

Rev 1371 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1075 ddelon 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
 
22
var FCKFitWindow = function()
23
{
24
	this.Name = 'FitWindow' ;
25
}
26
 
27
FCKFitWindow.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
 
148
FCKFitWindow.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
 
156
function 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
}