fck_1_gecko.js
上传用户:wlfwy2004
上传日期:2016-12-12
资源大小:33978k
文件大小:7k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * FCKeditor - The text editor for internet
  3.  * Copyright (C) 2003-2005 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.  * File Name: fck_1_gecko.js
  12.  *  This is the first part of the "FCK" object creation. This is the main
  13.  *  object that represents an editor instance.
  14.  *  (Gecko specific implementations)
  15.  * 
  16.  * File Authors:
  17.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  18.  */
  19. FCK.Description = "FCKeditor for Gecko Browsers" ;
  20. FCK.InitializeBehaviors = function()
  21. {
  22. // Enable table borders visibility.
  23. if ( FCKConfig.ShowBorders ) 
  24. {
  25. var oStyle = FCKTools.AppendStyleSheet( this.EditorDocument, FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css' ) ;
  26. oStyle.setAttribute( '_fcktemp', 'true' ) ;
  27. }
  28. // Disable Right-Click
  29. var oOnContextMenu = function( e )
  30. {
  31. e.preventDefault() ;
  32. FCK.ShowContextMenu( e.clientX, e.clientY ) ;
  33. }
  34. this.EditorDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
  35. // Handle pasting operations.
  36. var oOnKeyDown = function( e )
  37. {
  38. if ( e.ctrlKey && !e.shiftKey && !e.altKey )
  39. {
  40. // Char 86/118 = V/v
  41. if ( e.which == 86 || e.which == 118 )
  42. {
  43. if ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) )
  44. {
  45. e.preventDefault() ;
  46. e.stopPropagation() ;
  47. }
  48. }
  49. }
  50. }
  51. this.EditorDocument.addEventListener( 'keypress', oOnKeyDown, true ) ;
  52. this.ExecOnSelectionChange = function()
  53. {
  54. FCK.Events.FireEvent( "OnSelectionChange" ) ;
  55. }
  56. this.ExecOnSelectionChangeTimer = function()
  57. {
  58. if ( FCK.LastOnChangeTimer )
  59. window.clearTimeout( FCK.LastOnChangeTimer ) ;
  60. FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
  61. }
  62. this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
  63. // On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
  64. // slow. So, a timer has been implemented to solve performance issues when tipying to quickly.
  65. this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
  66. this._DblClickListener = function( e )
  67. {
  68. FCK.OnDoubleClick( e.target ) ;
  69. e.stopPropagation() ;
  70. }
  71. this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
  72. this._OnLoad = function()
  73. {
  74. if ( this._FCK_HTML )
  75. {
  76. this.document.body.innerHTML = this._FCK_HTML ;
  77. this._FCK_HTML = null ;
  78. }
  79. }
  80. this.EditorWindow.addEventListener( 'load', this._OnLoad, true ) ;
  81. // var oEditorWindow_OnUnload = function()
  82. // {
  83. // FCK.EditorWindow.location = 'fckblank.html' ;
  84. // }
  85. // this.EditorWindow.addEventListener( 'unload', oEditorWindow_OnUnload, true ) ;
  86. // var oEditorDocument_OnFocus = function()
  87. // {
  88. // FCK.MakeEditable() ;
  89. // }
  90. // this.EditorDocument.addEventListener( 'focus', oEditorDocument_OnFocus, true ) ;
  91. }
  92. FCK.MakeEditable = function()
  93. {
  94. if ( this.EditorWindow.document.designMode == 'on' )
  95. return ;
  96. this.EditorWindow.document.designMode = 'on' ;
  97. // Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
  98. this.EditorWindow.document.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ;
  99. }
  100. FCK.Focus = function()
  101. {
  102. try
  103. {
  104. // window.focus() ;
  105. FCK.EditorWindow.focus() ;
  106. }
  107. catch(e) {}
  108. }
  109. FCK.SetHTML = function( html, forceWYSIWYG )
  110. {
  111. if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  112. {
  113. // Gecko has a lot of bugs mainly when handling editing features.
  114. // To avoid an Aplication Exception (that closes the browser!) we
  115. // must first write the <HTML> contents with an empty body, and
  116. // then insert the body contents.
  117. // (Oh yes... it took me a lot of time to find out this workaround)
  118. if ( FCKConfig.FullPage && FCKRegexLib.BodyContents.test( html ) )
  119. {
  120. // Add the <BASE> tag to the input HTML.
  121. if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) )
  122. html = html.replace( FCKRegexLib.HeadCloser, FCK.TempBaseTag + '</head>' ) ;
  123. html = html.replace( FCKRegexLib.HeadCloser, '<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" /></head>' ) ;
  124. // Extract the BODY contents from the html.
  125. var oMatch = html.match( FCKRegexLib.BodyContents ) ;
  126. var sOpener = oMatch[1] ; // This is the HTML until the <body...> tag, inclusive.
  127. var sContents = oMatch[2] ; // This is the BODY tag contents.
  128. var sCloser = oMatch[3] ; // This is the HTML from the </body> tag, inclusive.
  129. var sHtml = sOpener + '&nbsp;' + sCloser ;
  130. if ( !this._Initialized )
  131. {
  132. FCK.EditorDocument.designMode = "on" ;
  133. // Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
  134. FCK.EditorDocument.execCommand( "useCSS", false, !FCKConfig.GeckoUseSPAN ) ;
  135. this._Initialized = true ;
  136. }
  137. this.EditorDocument.open() ;
  138. this.EditorDocument.write( sHtml ) ;
  139. this.EditorDocument.close() ;
  140. if ( this.EditorDocument.body )
  141. this.EditorDocument.body.innerHTML = sContents ;
  142. else
  143. this.EditorWindow._FCK_HTML = sContents ;
  144. this.InitializeBehaviors() ;
  145. }
  146. else
  147. {
  148. /* TODO: Wait stable and remove it.
  149. sHtml =
  150. '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' +
  151. '<html dir="' + FCKConfig.ContentLangDirection + '">' +
  152. '<head><title></title>' +
  153. '<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
  154. '<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
  155. sHtml += FCK.TempBaseTag ;
  156. sHtml += '</head><body>&nbsp;</body></html>' ;
  157. */
  158. if ( !this._Initialized )
  159. {
  160. this.EditorDocument.dir = FCKConfig.ContentLangDirection ;
  161. var sHtml =
  162. '<title></title>' +
  163. '<link href="' + FCKConfig.EditorAreaCSS + '" rel="stylesheet" type="text/css" />' +
  164. '<link href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
  165. sHtml += FCK.TempBaseTag ;
  166. this.EditorDocument.getElementsByTagName("HEAD")[0].innerHTML = sHtml ;
  167. this.InitializeBehaviors() ;
  168. this._Initialized = true ;
  169. }
  170. // On Gecko we must disable editing before setting the BODY innerHTML.
  171. // FCK.EditorDocument.designMode = 'off' ;
  172. if ( html.length == 0 )
  173. FCK.EditorDocument.body.innerHTML = '<br _moz_editor_bogus_node="TRUE">' ;
  174. else if ( FCKRegexLib.EmptyParagraph.test( html ) )
  175. FCK.EditorDocument.body.innerHTML = html.replace( FCKRegexLib.TagBody, '><br _moz_editor_bogus_node="TRUE"><' ) ;
  176. else
  177. FCK.EditorDocument.body.innerHTML = html ;
  178. // On Gecko we must set the desingMode on again after setting the BODY innerHTML.
  179. // FCK.EditorDocument.designMode = 'on' ;
  180. // Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
  181. FCK.EditorDocument.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ;
  182. }
  183. FCK.OnAfterSetHTML() ;
  184. }
  185. else
  186. document.getElementById('eSourceField').value = html ;
  187. }