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

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