fcktools_gecko.js
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:7k
源码类别:

数据库编程

开发平台:

Visual C++

  1. /*
  2.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3.  * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  4.  *
  5.  * == BEGIN LICENSE ==
  6.  *
  7.  * Licensed under the terms of any of the following licenses at your
  8.  * choice:
  9.  *
  10.  *  - GNU General Public License Version 2 or later (the "GPL")
  11.  *    http://www.gnu.org/licenses/gpl.html
  12.  *
  13.  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  14.  *    http://www.gnu.org/licenses/lgpl.html
  15.  *
  16.  *  - Mozilla Public License Version 1.1 or later (the "MPL")
  17.  *    http://www.mozilla.org/MPL/MPL-1.1.html
  18.  *
  19.  * == END LICENSE ==
  20.  *
  21.  * Utility functions. (Gecko version).
  22.  */
  23. FCKTools.CancelEvent = function( e )
  24. {
  25. if ( e )
  26. e.preventDefault() ;
  27. }
  28. FCKTools.DisableSelection = function( element )
  29. {
  30. if ( FCKBrowserInfo.IsGecko )
  31. element.style.MozUserSelect = 'none' ; // Gecko only.
  32. else
  33. element.style.userSelect = 'none' ; // CSS3 (not supported yet).
  34. }
  35. // Appends a CSS file to a document.
  36. FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
  37. {
  38. var e = documentElement.createElement( 'LINK' ) ;
  39. e.rel = 'stylesheet' ;
  40. e.type = 'text/css' ;
  41. e.href = cssFileUrl ;
  42. documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
  43. return e ;
  44. }
  45. // Appends a CSS style string to a document.
  46. FCKTools._AppendStyleString = function( documentElement, cssStyles )
  47. {
  48. var e = documentElement.createElement( "STYLE" ) ;
  49. e.appendChild( documentElement.createTextNode( cssStyles ) ) ;
  50. documentElement.getElementsByTagName( "HEAD" )[0].appendChild( e ) ;
  51. return e ;
  52. }
  53. // Removes all attributes and values from the element.
  54. FCKTools.ClearElementAttributes = function( element )
  55. {
  56. // Loop throw all attributes in the element
  57. for ( var i = 0 ; i < element.attributes.length ; i++ )
  58. {
  59. // Remove the element by name.
  60. element.removeAttribute( element.attributes[i].name, 0 ) ; // 0 : Case Insensitive
  61. }
  62. }
  63. // Returns an Array of strings with all defined in the elements inside another element.
  64. FCKTools.GetAllChildrenIds = function( parentElement )
  65. {
  66. // Create the array that will hold all Ids.
  67. var aIds = new Array() ;
  68. // Define a recursive function that search for the Ids.
  69. var fGetIds = function( parent )
  70. {
  71. for ( var i = 0 ; i < parent.childNodes.length ; i++ )
  72. {
  73. var sId = parent.childNodes[i].id ;
  74. // Check if the Id is defined for the element.
  75. if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
  76. // Recursive call.
  77. fGetIds( parent.childNodes[i] ) ;
  78. }
  79. }
  80. // Start the recursive calls.
  81. fGetIds( parentElement ) ;
  82. return aIds ;
  83. }
  84. // Replaces a tag with its contents. For example "<span>My <b>tag</b></span>"
  85. // will be replaced with "My <b>tag</b>".
  86. FCKTools.RemoveOuterTags = function( e )
  87. {
  88. var oFragment = e.ownerDocument.createDocumentFragment() ;
  89. for ( var i = 0 ; i < e.childNodes.length ; i++ )
  90. oFragment.appendChild( e.childNodes[i].cloneNode(true) ) ;
  91. e.parentNode.replaceChild( oFragment, e ) ;
  92. }
  93. FCKTools.CreateXmlObject = function( object )
  94. {
  95. switch ( object )
  96. {
  97. case 'XmlHttp' :
  98. return new XMLHttpRequest() ;
  99. case 'DOMDocument' :
  100. return document.implementation.createDocument( '', '', null ) ;
  101. }
  102. return null ;
  103. }
  104. FCKTools.GetScrollPosition = function( relativeWindow )
  105. {
  106. return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ;
  107. }
  108. FCKTools.AddEventListener = function( sourceObject, eventName, listener )
  109. {
  110. sourceObject.addEventListener( eventName, listener, false ) ;
  111. }
  112. FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
  113. {
  114. sourceObject.removeEventListener( eventName, listener, false ) ;
  115. }
  116. // Listeners attached with this function cannot be detached.
  117. FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
  118. {
  119. sourceObject.addEventListener(
  120. eventName,
  121. function( e )
  122. {
  123. listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ;
  124. },
  125. false
  126. ) ;
  127. }
  128. // Returns and object with the "Width" and "Height" properties.
  129. FCKTools.GetViewPaneSize = function( win )
  130. {
  131. return { Width : win.innerWidth, Height : win.innerHeight } ;
  132. }
  133. FCKTools.SaveStyles = function( element )
  134. {
  135. var data = FCKTools.ProtectFormStyles( element ) ;
  136. var oSavedStyles = new Object() ;
  137. if ( element.className.length > 0 )
  138. {
  139. oSavedStyles.Class = element.className ;
  140. element.className = '' ;
  141. }
  142. var sInlineStyle = element.getAttribute( 'style' ) ;
  143. if ( sInlineStyle && sInlineStyle.length > 0 )
  144. {
  145. oSavedStyles.Inline = sInlineStyle ;
  146. element.setAttribute( 'style', '', 0 ) ; // 0 : Case Insensitive
  147. }
  148. FCKTools.RestoreFormStyles( element, data ) ;
  149. return oSavedStyles ;
  150. }
  151. FCKTools.RestoreStyles = function( element, savedStyles )
  152. {
  153. var data = FCKTools.ProtectFormStyles( element ) ;
  154. element.className = savedStyles.Class || '' ;
  155. if ( savedStyles.Inline )
  156. element.setAttribute( 'style', savedStyles.Inline, 0 ) ; // 0 : Case Insensitive
  157. else
  158. element.removeAttribute( 'style', 0 ) ;
  159. FCKTools.RestoreFormStyles( element, data ) ;
  160. }
  161. FCKTools.RegisterDollarFunction = function( targetWindow )
  162. {
  163. targetWindow.$ = function( id )
  164. {
  165. return this.document.getElementById( id ) ;
  166. } ;
  167. }
  168. FCKTools.AppendElement = function( target, elementName )
  169. {
  170. return target.appendChild( target.ownerDocument.createElement( elementName ) ) ;
  171. }
  172. // Get the coordinates of an element.
  173. // @el : The element to get the position.
  174. // @relativeWindow: The window to which we want the coordinates relative to.
  175. FCKTools.GetElementPosition = function( el, relativeWindow )
  176. {
  177. // Initializes the Coordinates object that will be returned by the function.
  178. var c = { X:0, Y:0 } ;
  179. var oWindow = relativeWindow || window ;
  180. var oOwnerWindow = FCKTools.GetElementWindow( el ) ;
  181. var previousElement = null ;
  182. // Loop throw the offset chain.
  183. while ( el )
  184. {
  185. var sPosition = oOwnerWindow.getComputedStyle(el, '').position ;
  186. // Check for non "static" elements.
  187. // 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME.
  188. if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex )
  189. break ;
  190. /*
  191. FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + "  " 
  192. + "scroll=" + el.scrollLeft + "," + el.scrollTop ) ;
  193. */
  194. c.X += el.offsetLeft - el.scrollLeft ;
  195. c.Y += el.offsetTop - el.scrollTop  ;
  196. // Backtrack due to offsetParent's calculation by the browser ignores scrollLeft and scrollTop.
  197. // Backtracking is not needed for Opera
  198. if ( ! FCKBrowserInfo.IsOpera )
  199. {
  200. var scrollElement = previousElement ;
  201. while ( scrollElement && scrollElement != el )
  202. {
  203. c.X -= scrollElement.scrollLeft ;
  204. c.Y -= scrollElement.scrollTop ;
  205. scrollElement = scrollElement.parentNode ;
  206. }
  207. }
  208. previousElement = el ;
  209. if ( el.offsetParent )
  210. el = el.offsetParent ;
  211. else
  212. {
  213. if ( oOwnerWindow != oWindow )
  214. {
  215. el = oOwnerWindow.frameElement ;
  216. previousElement = null ;
  217. if ( el )
  218. oOwnerWindow = FCKTools.GetElementWindow( el ) ;
  219. }
  220. else
  221. {
  222. c.X += el.scrollLeft ;
  223. c.Y += el.scrollTop  ;
  224. break ;
  225. }
  226. }
  227. }
  228. // Return the Coordinates object
  229. return c ;
  230. }