2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
\r
3 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
\r
5 * == BEGIN LICENSE ==
\r
7 * Licensed under the terms of any of the following licenses at your
\r
10 * - GNU General Public License Version 2 or later (the "GPL")
\r
11 * http://www.gnu.org/licenses/gpl.html
\r
13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
\r
14 * http://www.gnu.org/licenses/lgpl.html
\r
16 * - Mozilla Public License Version 1.1 or later (the "MPL")
\r
17 * http://www.mozilla.org/MPL/MPL-1.1.html
\r
21 * Utility functions. (IE version).
\r
24 FCKTools.CancelEvent = function( e )
\r
29 // Appends one or more CSS files to a document.
\r
30 FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
\r
32 return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
\r
35 // Appends a CSS style string to a document.
\r
36 FCKTools.AppendStyleString = function( documentElement, cssStyles )
\r
41 var s = documentElement.createStyleSheet( "" ) ;
\r
42 s.cssText = cssStyles ;
\r
46 // Removes all attributes and values from the element.
\r
47 FCKTools.ClearElementAttributes = function( element )
\r
49 element.clearAttributes() ;
\r
52 FCKTools.GetAllChildrenIds = function( parentElement )
\r
54 var aIds = new Array() ;
\r
55 for ( var i = 0 ; i < parentElement.all.length ; i++ )
\r
57 var sId = parentElement.all[i].id ;
\r
58 if ( sId && sId.length > 0 )
\r
59 aIds[ aIds.length ] = sId ;
\r
64 FCKTools.RemoveOuterTags = function( e )
\r
66 e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
\r
67 e.parentNode.removeChild( e ) ;
\r
70 FCKTools.CreateXmlObject = function( object )
\r
77 // Try the native XMLHttpRequest introduced with IE7.
\r
78 if ( document.location.protocol != 'file:' )
\r
79 try { return new XMLHttpRequest() ; } catch (e) {}
\r
81 aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
\r
84 case 'DOMDocument' :
\r
85 aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
\r
89 for ( var i = 0 ; i < 2 ; i++ )
\r
91 try { return new ActiveXObject( aObjs[i] ) ; }
\r
96 if ( FCKLang.NoActiveX )
\r
98 alert( FCKLang.NoActiveX ) ;
\r
99 FCKLang.NoActiveX = null ;
\r
104 FCKTools.DisableSelection = function( element )
\r
106 element.unselectable = 'on' ;
\r
109 // The extra () is to avoid a warning with strict error checking. This is ok.
\r
110 while ( (e = element.all[ i++ ]) )
\r
112 switch ( e.tagName )
\r
118 /* Ignore the above tags */
\r
121 e.unselectable = 'on' ;
\r
126 FCKTools.GetScrollPosition = function( relativeWindow )
\r
128 var oDoc = relativeWindow.document ;
\r
130 // Try with the doc element.
\r
131 var oPos = { X : oDoc.documentElement.scrollLeft, Y : oDoc.documentElement.scrollTop } ;
\r
133 if ( oPos.X > 0 || oPos.Y > 0 )
\r
136 // If no scroll, try with the body.
\r
137 return { X : oDoc.body.scrollLeft, Y : oDoc.body.scrollTop } ;
\r
140 FCKTools.AddEventListener = function( sourceObject, eventName, listener )
\r
142 sourceObject.attachEvent( 'on' + eventName, listener ) ;
\r
145 FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
\r
147 sourceObject.detachEvent( 'on' + eventName, listener ) ;
\r
150 // Listeners attached with this function cannot be detached.
\r
151 FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
\r
153 // Ok... this is a closures party, but is the only way to make it clean of memory leaks.
\r
154 var o = new Object() ;
\r
155 o.Source = sourceObject ;
\r
156 o.Params = paramsArray || [] ; // Memory leak if we have DOM objects here.
\r
157 o.Listener = function( ev )
\r
159 return listener.apply( o.Source, [ ev ].concat( o.Params ) ) ;
\r
162 if ( FCK.IECleanup )
\r
163 FCK.IECleanup.AddItem( null, function() { o.Source = null ; o.Params = null ; } ) ;
\r
165 sourceObject.attachEvent( 'on' + eventName, o.Listener ) ;
\r
167 sourceObject = null ; // Memory leak cleaner (because of the above closure).
\r
168 paramsArray = null ; // Memory leak cleaner (because of the above closure).
\r
171 // Returns and object with the "Width" and "Height" properties.
\r
172 FCKTools.GetViewPaneSize = function( win )
\r
176 var oDoc = win.document.documentElement ;
\r
177 if ( oDoc && oDoc.clientWidth ) // IE6 Strict Mode
\r
178 oSizeSource = oDoc ;
\r
180 oSizeSource = win.document.body ; // Other IEs
\r
183 return { Width : oSizeSource.clientWidth, Height : oSizeSource.clientHeight } ;
\r
185 return { Width : 0, Height : 0 } ;
\r
188 FCKTools.SaveStyles = function( element )
\r
190 var data = FCKTools.ProtectFormStyles( element ) ;
\r
192 var oSavedStyles = new Object() ;
\r
194 if ( element.className.length > 0 )
\r
196 oSavedStyles.Class = element.className ;
\r
197 element.className = '' ;
\r
200 var sInlineStyle = element.style.cssText ;
\r
202 if ( sInlineStyle.length > 0 )
\r
204 oSavedStyles.Inline = sInlineStyle ;
\r
205 element.style.cssText = '' ;
\r
208 FCKTools.RestoreFormStyles( element, data ) ;
\r
209 return oSavedStyles ;
\r
212 FCKTools.RestoreStyles = function( element, savedStyles )
\r
214 var data = FCKTools.ProtectFormStyles( element ) ;
\r
215 element.className = savedStyles.Class || '' ;
\r
216 element.style.cssText = savedStyles.Inline || '' ;
\r
217 FCKTools.RestoreFormStyles( element, data ) ;
\r
220 FCKTools.RegisterDollarFunction = function( targetWindow )
\r
222 targetWindow.$ = targetWindow.document.getElementById ;
\r
225 FCKTools.AppendElement = function( target, elementName )
\r
227 return target.appendChild( this.GetElementDocument( target ).createElement( elementName ) ) ;
\r
230 // This function may be used by Regex replacements.
\r
231 FCKTools.ToLowerCase = function( strValue )
\r
233 return strValue.toLowerCase() ;
\r