source: trunk/admin/inc/FCKeditor/editor/_source/internals/fck_1_ie.js@ 2

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

importo il progetto

File size: 7.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: fck_1_ie.js
14 * This is the first part of the "FCK" object creation. This is the main
15 * object that represents an editor instance.
16 * (IE specific implementations)
17 *
18 * File Authors:
19 * Frederico Caldeira Knabben (fredck@fckeditor.net)
20 */
21
22FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
23
24FCK._GetBehaviorsStyle = function()
25{
26 if ( !FCK._BehaviorsStyle )
27 {
28 var sBasePath = FCKConfig.FullBasePath ;
29 var sTableBehavior = '' ;
30 var sStyle ;
31
32 // The behaviors should be pointed using the FullBasePath to avoid security
33 // errors when using a differente BaseHref.
34 sStyle =
35 '<style type="text/css" _fcktemp="true">' +
36 'INPUT { behavior: url(' + sBasePath + 'css/behaviors/hiddenfield.htc) ; }' ;
37
38 if ( FCKConfig.ShowBorders )
39 sTableBehavior = 'url(' + sBasePath + 'css/behaviors/showtableborders.htc)' ;
40
41 // Disable resize handlers.
42 sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak' ;
43
44 if ( FCKConfig.DisableObjectResizing )
45 {
46 sStyle += ',IMG' ;
47 sTableBehavior += ' url(' + sBasePath + 'css/behaviors/disablehandles.htc)' ;
48 }
49
50 sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
51
52 if ( sTableBehavior.length > 0 )
53 sStyle += 'TABLE { behavior: ' + sTableBehavior + ' ; }' ;
54
55 sStyle += '</style>' ;
56 FCK._BehaviorsStyle = sStyle ;
57 }
58
59 return FCK._BehaviorsStyle ;
60}
61
62function Doc_OnMouseUp()
63{
64 if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
65 {
66 FCK.Focus() ;
67 FCK.EditorWindow.event.cancelBubble = true ;
68 FCK.EditorWindow.event.returnValue = false ;
69 }
70}
71
72function Doc_OnPaste()
73{
74 if ( FCK.Status == FCK_STATUS_COMPLETE )
75 FCK.Events.FireEvent( "OnPaste" ) ;
76
77 return false ;
78}
79
80/*
81function Doc_OnContextMenu()
82{
83 var e = FCK.EditorWindow.event ;
84
85 FCK.ShowContextMenu( e.screenX, e.screenY ) ;
86 return false ;
87}
88*/
89
90function Doc_OnKeyDown()
91{
92 var e = FCK.EditorWindow.event ;
93
94
95 switch ( e.keyCode )
96 {
97 case 13 : // ENTER
98 if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) )
99 {
100 Doc_OnKeyDownUndo() ;
101
102 // We must ignore it if we are inside a List.
103 if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) )
104 return true ;
105
106 // Insert the <BR> (The &nbsp; must be also inserted to make it work)
107 FCK.InsertHtml( '<br>&nbsp;' ) ;
108
109 // Remove the &nbsp;
110 var oRange = FCK.EditorDocument.selection.createRange() ;
111 oRange.moveStart( 'character', -1 ) ;
112 oRange.select() ;
113 FCK.EditorDocument.selection.clear() ;
114
115 return false ;
116 }
117 break ;
118
119 case 8 : // BACKSPACE
120 // We must delete a control selection by code and cancels the
121 // keystroke, otherwise IE will execute the browser's "back" button.
122 if ( FCKSelection.GetType() == 'Control' )
123 {
124 FCKSelection.Delete() ;
125 return false ;
126 }
127 break ;
128
129 case 9 : // TAB
130 if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) )
131 {
132 Doc_OnKeyDownUndo() ;
133
134 FCK.InsertHtml( window.FCKTabHTML ) ;
135 return false ;
136 }
137 break ;
138 case 90 : // Z
139 if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
140 {
141 FCKUndo.Undo() ;
142 return false ;
143 }
144 break ;
145 case 89 : // Y
146 if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
147 {
148 FCKUndo.Redo() ;
149 return false ;
150 }
151 break ;
152 }
153
154 if ( !( e.keyCode >=16 && e.keyCode <= 18 ) )
155 Doc_OnKeyDownUndo() ;
156 return true ;
157}
158
159function Doc_OnKeyDownUndo()
160{
161 if ( !FCKUndo.Typing )
162 {
163 FCKUndo.SaveUndoStep() ;
164 FCKUndo.Typing = true ;
165 FCK.Events.FireEvent( "OnSelectionChange" ) ;
166 }
167
168 FCKUndo.TypesCount++ ;
169
170 if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
171 {
172 FCKUndo.TypesCount = 0 ;
173 FCKUndo.SaveUndoStep() ;
174 }
175}
176
177function Doc_OnDblClick()
178{
179 FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
180 FCK.EditorWindow.event.cancelBubble = true ;
181}
182
183function Doc_OnSelectionChange()
184{
185 FCK.Events.FireEvent( "OnSelectionChange" ) ;
186}
187
188FCK.InitializeBehaviors = function( dontReturn )
189{
190 // Set the focus to the editable area when clicking in the document area.
191 // TODO: The cursor must be positioned at the end.
192 this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
193
194 // Intercept pasting operations
195 this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
196
197 // Reset the context menu.
198 FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
199
200 // Build the "TAB" key replacement (if necessary).
201 if ( FCKConfig.TabSpaces > 0 )
202 {
203 window.FCKTabHTML = '' ;
204 for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ )
205 window.FCKTabHTML += "&nbsp;" ;
206 }
207 this.EditorDocument.attachEvent("onkeydown", Doc_OnKeyDown ) ;
208
209 this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
210
211 // Catch cursor movements
212 this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
213
214 //Enable editing
215// this.EditorDocument.body.contentEditable = true ;
216}
217
218FCK.InsertHtml = function( html )
219{
220 html = FCKConfig.ProtectedSource.Protect( html ) ;
221 html = FCK.ProtectUrls( html ) ;
222
223 FCK.Focus() ;
224
225 FCKUndo.SaveUndoStep() ;
226
227 // Gets the actual selection.
228 var oSel = FCK.EditorDocument.selection ;
229
230 // Deletes the actual selection contents.
231 if ( oSel.type.toLowerCase() == 'control' )
232 oSel.clear() ;
233
234 // Insert the HTML.
235 oSel.createRange().pasteHTML( html ) ;
236
237 FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
238}
239
240FCK.SetInnerHtml = function( html ) // IE Only
241{
242 var oDoc = FCK.EditorDocument ;
243 // Using the following trick, any comment in the begining of the HTML will
244 // be preserved.
245 oDoc.body.innerHTML = '<div id="__fakeFCKRemove__">&nbsp;</div>' + html ;
246 oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
247}
248
249var FCK_PreloadImages_Count = 0 ;
250var FCK_PreloadImages_Images = new Array() ;
251
252function FCK_PreloadImages()
253{
254 // Get the images to preload.
255 var aImages = FCKConfig.PreloadImages || [] ;
256
257 if ( typeof( aImages ) == 'string' )
258 aImages = aImages.split( ';' ) ;
259
260 // Add the skin icons strip.
261 aImages.push( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
262
263 FCK_PreloadImages_Count = aImages.length ;
264
265 var aImageElements = new Array() ;
266
267 for ( var i = 0 ; i < aImages.length ; i++ )
268 {
269 var eImg = document.createElement( 'img' ) ;
270 eImg.onload = eImg.onerror = FCK_PreloadImages_OnImage ;
271 eImg.src = aImages[i] ;
272
273 FCK_PreloadImages_Images[i] = eImg ;
274 }
275}
276
277function FCK_PreloadImages_OnImage()
278{
279 if ( (--FCK_PreloadImages_Count) == 0 )
280 FCKTools.RunFunction( LoadToolbarSetup ) ;
281}
282
283// Disable the context menu in the editor (outside the editing area).
284function Document_OnContextMenu()
285{
286 return ( event.srcElement._FCKShowContextMenu == true ) ;
287}
288document.oncontextmenu = Document_OnContextMenu ;
289
290function FCK_Cleanup()
291{
292 this.EditorWindow = null ;
293 this.EditorDocument = null ;
294}
Note: See TracBrowser for help on using the repository browser.