fcktools_gecko.js
上传用户:li2971742
上传日期:2021-11-18
资源大小:39096k
文件大小:6k
源码类别:

OA系统

开发平台:

C#

  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: fcktools_gecko.js
  14.  *  Utility functions. (Gecko version).
  15.  * 
  16.  * File Authors:
  17.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  18.  */
  19. // Constant for the Gecko Bogus Node.
  20. var GECKO_BOGUS = FCKBrowserInfo.IsGecko ? '<br _moz_editor_bogus_node="TRUE">' : '' ;
  21. FCKTools.CancelEvent = function( e )
  22. {
  23. if ( e )
  24. e.preventDefault() ;
  25. }
  26. FCKTools.DisableSelection = function( element )
  27. {
  28. if ( FCKBrowserInfo.IsGecko )
  29. element.style.MozUserSelect = 'none' ; // Gecko only.
  30. else
  31. element.style.userSelect = 'none' ; // CSS3 (not supported yet).
  32. }
  33. // Appends a CSS file to a document.
  34. FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
  35. {
  36. var e = documentElement.createElement( 'LINK' ) ;
  37. e.rel = 'stylesheet' ;
  38. e.type = 'text/css' ;
  39. e.href = cssFileUrl ;
  40. documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
  41. return e ;
  42. }
  43. // Removes all attributes and values from the element.
  44. FCKTools.ClearElementAttributes = function( element )
  45. {
  46. // Loop throw all attributes in the element
  47. for ( var i = 0 ; i < element.attributes.length ; i++ )
  48. {
  49. // Remove the element by name.
  50. element.removeAttribute( element.attributes[i].name, 0 ) ; // 0 : Case Insensitive
  51. }
  52. }
  53. // Returns an Array of strings with all defined in the elements inside another element.
  54. FCKTools.GetAllChildrenIds = function( parentElement )
  55. {
  56. // Create the array that will hold all Ids.
  57. var aIds = new Array() ;
  58. // Define a recursive function that search for the Ids.
  59. var fGetIds = function( parent )
  60. {
  61. for ( var i = 0 ; i < parent.childNodes.length ; i++ )
  62. {
  63. var sId = parent.childNodes[i].id ;
  64. // Check if the Id is defined for the element.
  65. if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
  66. // Recursive call.
  67. fGetIds( parent.childNodes[i] ) ;
  68. }
  69. }
  70. // Start the recursive calls.
  71. fGetIds( parentElement ) ;
  72. return aIds ;
  73. }
  74. FCKTools.RemoveOuterTags = function( e )
  75. {
  76. var oFragment = e.ownerDocument.createDocumentFragment() ;
  77. for ( var i = 0 ; i < e.childNodes.length ; i++ )
  78. oFragment.appendChild( e.childNodes[i] ) ;
  79. e.parentNode.replaceChild( oFragment, e ) ;
  80. }
  81. FCKTools.CreateXmlObject = function( object )
  82. {
  83. switch ( object )
  84. {
  85. case 'XmlHttp' :
  86. return new XMLHttpRequest() ;
  87. case 'DOMDocument' :
  88. return document.implementation.createDocument( '', '', null ) ;
  89. }
  90. return null ;
  91. }
  92. FCKTools.GetScrollPosition = function( relativeWindow )
  93. {
  94. return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ;
  95. }
  96. FCKTools.AddEventListener = function( sourceObject, eventName, listener )
  97. {
  98. sourceObject.addEventListener( eventName, listener, false ) ;
  99. }
  100. FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
  101. {
  102. sourceObject.removeEventListener( eventName, listener, false ) ;
  103. }
  104. // Listeners attached with this function cannot be detached.
  105. FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
  106. {
  107. sourceObject.addEventListener( 
  108. eventName, 
  109. function( e )
  110. {
  111. listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ;
  112. },
  113. false 
  114. ) ;
  115. }
  116. // Returns and object with the "Width" and "Height" properties.
  117. FCKTools.GetViewPaneSize = function( win )
  118. {
  119. return { Width : win.innerWidth, Height : win.innerHeight } ;
  120. }
  121. FCKTools.SaveStyles = function( element )
  122. {
  123. var oSavedStyles = new Object() ;
  124. if ( element.className.length > 0 )
  125. {
  126. oSavedStyles.Class = element.className ;
  127. element.className = '' ;
  128. }
  129. var sInlineStyle = element.getAttribute( 'style' ) ;
  130. if ( sInlineStyle && sInlineStyle.length > 0 )
  131. {
  132. oSavedStyles.Inline = sInlineStyle ;
  133. element.setAttribute( 'style', '', 0 ) ; // 0 : Case Insensitive
  134. }
  135. return oSavedStyles ;
  136. }
  137. FCKTools.RestoreStyles = function( element, savedStyles )
  138. {
  139. element.className = savedStyles.Class || '' ;
  140. if ( savedStyles.Inline )
  141. element.setAttribute( 'style', savedStyles.Inline, 0 ) ; // 0 : Case Insensitive
  142. else
  143. element.removeAttribute( 'style', 0 ) ;
  144. }
  145. FCKTools.RegisterDollarFunction = function( targetWindow )
  146. {
  147. targetWindow.$ = function( id ) 
  148. return this.document.getElementById( id ) ;
  149. } ;
  150. }
  151. FCKTools.AppendElement = function( target, elementName )
  152. {
  153. return target.appendChild( target.ownerDocument.createElement( elementName ) ) ;
  154. }
  155. // Get the coordinates of an element.
  156. // @el : The element to get the position.
  157. // @relativeWindow: The window to which we want the coordinates relative to.
  158. FCKTools.GetElementPosition = function( el, relativeWindow )
  159. {
  160. // Initializes the Coordinates object that will be returned by the function.
  161. var c = { X:0, Y:0 } ;
  162. var oWindow = relativeWindow || window ;
  163. var oOwnerWindow = FCKTools.GetElementWindow( el ) ;
  164. // Loop throw the offset chain.
  165. while ( el )
  166. {
  167. var sPosition = oOwnerWindow.getComputedStyle(el, '').position ;
  168. // Check for non "static" elements.
  169. // 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME.
  170. if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex ) 
  171. break ;
  172. c.X += el.offsetLeft - el.scrollLeft ;
  173. c.Y += el.offsetTop - el.scrollTop  ;
  174. if ( el.offsetParent )
  175. el = el.offsetParent ;
  176. else
  177. {
  178. if ( oOwnerWindow != oWindow )
  179. {
  180. if ( el = oOwnerWindow.frameElement )
  181. oOwnerWindow = FCKTools.GetElementWindow( el ) ;
  182. }
  183. else
  184. {
  185. c.X += el.scrollLeft ;
  186. c.Y += el.scrollTop  ;
  187. break ;
  188. }
  189. }
  190. }
  191. // Return the Coordinates object
  192. return c ;
  193. }