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

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: fcktoolbarset.js
  14.  *  Defines the FCKToolbarSet object that is used to load and draw the 
  15.  *  toolbar.
  16.  * 
  17.  * File Authors:
  18.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  19.  */
  20. function FCKToolbarSet_Create( overhideLocation )
  21. {
  22. var oToolbarSet ;
  23. var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;
  24. switch ( sLocation )
  25. {
  26. case 'In' :
  27. document.getElementById( 'xToolbarRow' ).style.display = '' ;
  28. oToolbarSet = new FCKToolbarSet( document ) ;
  29. break ;
  30. // case 'OutTop' :
  31. // Not supported.
  32. default :
  33. FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;
  34. FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;
  35. var eToolbarTarget ;
  36. // Out:[TargetWindow]([TargetId])
  37. var oOutMatch = sLocation.match( /^Out:(.+)((w+))$/ ) ;
  38. if ( oOutMatch )
  39. {
  40. eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;
  41. }
  42. else
  43. {
  44. // Out:[TargetId]
  45. oOutMatch = sLocation.match( /^Out:(w+)$/ ) ;
  46. if ( oOutMatch )
  47. eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;
  48. }
  49. if ( !eToolbarTarget )
  50. {
  51. alert( 'Invalid value for "ToolbarLocation"' ) ;
  52. return this._Init( 'In' ) ;
  53. }
  54. // If it is a shared toolbar, it may be already available in the target element.
  55. if ( oToolbarSet = eToolbarTarget.__FCKToolbarSet )
  56. break ;
  57. // Create the IFRAME that will hold the toolbar inside the target element.
  58. var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;
  59. eToolbarIFrame.frameBorder = 0 ;
  60. eToolbarIFrame.width = '100%' ;
  61. eToolbarIFrame.height = '10' ;
  62. eToolbarTarget.appendChild( eToolbarIFrame ) ;
  63. eToolbarIFrame.unselectable = 'on' ;
  64. // Write the basic HTML for the toolbar (copy from the editor main page).
  65. var eTargetDocument = eToolbarIFrame.contentWindow.document ;
  66. eTargetDocument.open() ;
  67. eTargetDocument.write( '<html><head><script type="text/javascript"> window.onload = window.onresize = function() { window.frameElement.height = document.body.scrollHeight ; } </script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;
  68. eTargetDocument.close() ;
  69. eTargetDocument.oncontextmenu = FCKTools.CancelEvent ;
  70. // Load external resources (must be done here, otherwise Firefox will not
  71. // have the document DOM ready to be used right away.
  72. FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinPath + 'fck_editor.css' ) ;
  73. oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
  74. oToolbarSet._IFrame = eToolbarIFrame ;
  75. if ( FCK.IECleanup )
  76. FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
  77. }
  78. oToolbarSet.CurrentInstance = FCK ;
  79. FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
  80. return oToolbarSet ;
  81. }
  82. function FCK_OnBlur( editorInstance )
  83. {
  84. var eToolbarSet = editorInstance.ToolbarSet ;
  85. if ( eToolbarSet.CurrentInstance == editorInstance )
  86. eToolbarSet.Disable() ;
  87. }
  88. function FCK_OnFocus( editorInstance )
  89. {
  90. var oToolbarset = editorInstance.ToolbarSet ;
  91. var oInstance = editorInstance || FCK ;
  92. // Unregister the toolbar window from the current instance.
  93. oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
  94. // Set the new current instance.
  95. oToolbarset.CurrentInstance = oInstance ;
  96. // Register the toolbar window in the current instance.
  97. oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
  98. oToolbarset.Enable() ;
  99. }
  100. function FCKToolbarSet_Cleanup()
  101. {
  102. this._TargetElement = null ;
  103. this._IFrame = null ;
  104. }
  105. function FCKToolbarSet_Target_Cleanup()
  106. {
  107. this.__FCKToolbarSet = null ;
  108. }
  109. var FCKToolbarSet = function( targetDocument )
  110. {
  111. this._Document = targetDocument ; 
  112. // Get the element that will hold the elements structure.
  113. this._TargetElement = targetDocument.getElementById( 'xToolbar' ) ;
  114. // Setup the expand and collapse handlers.
  115. var eExpandHandle = targetDocument.getElementById( 'xExpandHandle' ) ;
  116. var eCollapseHandle = targetDocument.getElementById( 'xCollapseHandle' ) ;
  117. eExpandHandle.title = FCKLang.ToolbarExpand ;
  118. eExpandHandle.onclick = FCKToolbarSet_Expand_OnClick ;
  119. eCollapseHandle.title = FCKLang.ToolbarCollapse ;
  120. eCollapseHandle.onclick = FCKToolbarSet_Collapse_OnClick ;
  121. // Set the toolbar state at startup.
  122. if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
  123. this.Expand() ;
  124. else
  125. this.Collapse() ;
  126. // Enable/disable the collapse handler
  127. eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
  128. if ( FCKConfig.ToolbarCanCollapse )
  129. eCollapseHandle.style.display = '' ;
  130. else
  131. targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
  132. // Set the default properties.
  133. this.Toolbars = new Array() ;
  134. this.IsLoaded = false ;
  135. if ( FCK.IECleanup )
  136. FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
  137. }
  138. function FCKToolbarSet_Expand_OnClick()
  139. {
  140. FCK.ToolbarSet.Expand() ;
  141. }
  142. function FCKToolbarSet_Collapse_OnClick()
  143. {
  144. FCK.ToolbarSet.Collapse() ;
  145. }
  146. FCKToolbarSet.prototype.Expand = function()
  147. {
  148. this._ChangeVisibility( false ) ;
  149. }
  150. FCKToolbarSet.prototype.Collapse = function()
  151. {
  152. this._ChangeVisibility( true ) ;
  153. }
  154. FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
  155. {
  156. this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
  157. this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
  158. if ( FCKBrowserInfo.IsGecko )
  159. {
  160. // I had to use "setTimeout" because Gecko was not responding in a right
  161. // way when calling window.onresize() directly.
  162. FCKTools.RunFunction( window.onresize ) ;
  163. }
  164. }
  165. FCKToolbarSet.prototype.Load = function( toolbarSetName )
  166. {
  167. this.Name = toolbarSetName ;
  168. this.Items = new Array() ;
  169. // Reset the array of toolbat items that are active only on WYSIWYG mode.
  170. this.ItemsWysiwygOnly = new Array() ;
  171. // Reset the array of toolbar items that are sensitive to the cursor position.
  172. this.ItemsContextSensitive = new Array() ;
  173. // Cleanup the target element.
  174. this._TargetElement.innerHTML = '' ;
  175. var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
  176. if ( !ToolbarSet )
  177. {
  178. alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
  179. return ;
  180. }
  181. this.Toolbars = new Array() ;
  182. for ( var x = 0 ; x < ToolbarSet.length ; x++ ) 
  183. {
  184. var oToolbarItems = ToolbarSet[x] ;
  185. var oToolbar ;
  186. if ( typeof( oToolbarItems ) == 'string' )
  187. {
  188. if ( oToolbarItems == '/' )
  189. oToolbar = new FCKToolbarBreak() ;
  190. }
  191. else
  192. {
  193. oToolbar = new FCKToolbar() ;
  194. for ( var j = 0 ; j < oToolbarItems.length ; j++ ) 
  195. {
  196. var sItem = oToolbarItems[j] ;
  197. if ( sItem == '-')
  198. oToolbar.AddSeparator() ;
  199. else
  200. {
  201. var oItem = FCKToolbarItems.GetItem( sItem ) ;
  202. if ( oItem )
  203. {
  204. oToolbar.AddItem( oItem ) ;
  205. this.Items.push( oItem ) ;
  206. if ( !oItem.SourceView )
  207. this.ItemsWysiwygOnly.push( oItem ) ;
  208. if ( oItem.ContextSensitive )
  209. this.ItemsContextSensitive.push( oItem ) ;
  210. }
  211. }
  212. }
  213. // oToolbar.AddTerminator() ;
  214. }
  215. oToolbar.Create( this._TargetElement ) ;
  216. this.Toolbars[ this.Toolbars.length ] = oToolbar ;
  217. }
  218. FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
  219. if ( FCK.Status != FCK_STATUS_COMPLETE )
  220. FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
  221. else
  222. this.RefreshModeState() ;
  223. this.IsLoaded = true ;
  224. this.IsEnabled = true ;
  225. FCKTools.RunFunction( this.OnLoad ) ;
  226. }
  227. FCKToolbarSet.prototype.Enable = function()
  228. {
  229. if ( this.IsEnabled )
  230. return ;
  231. this.IsEnabled = true ;
  232. var aItems = this.Items ;
  233. for ( var i = 0 ; i < aItems.length ; i++ )
  234. aItems[i].RefreshState() ;
  235. }
  236. FCKToolbarSet.prototype.Disable = function()
  237. {
  238. if ( !this.IsEnabled )
  239. return ;
  240. this.IsEnabled = false ;
  241. var aItems = this.Items ;
  242. for ( var i = 0 ; i < aItems.length ; i++ )
  243. aItems[i].Disable() ;
  244. }
  245. FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
  246. {
  247. if ( FCK.Status != FCK_STATUS_COMPLETE )
  248. return ;
  249. var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
  250. var aItems = oToolbarSet.ItemsWysiwygOnly ;
  251. if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  252. {
  253. // Enable all buttons that are available on WYSIWYG mode only.
  254. for ( var i = 0 ; i < aItems.length ; i++ )
  255. aItems[i].Enable() ;
  256. // Refresh the buttons state.
  257. oToolbarSet.RefreshItemsState( editorInstance ) ;
  258. }
  259. else
  260. {
  261. // Refresh the buttons state.
  262. oToolbarSet.RefreshItemsState( editorInstance ) ;
  263. // Disable all buttons that are available on WYSIWYG mode only.
  264. for ( var i = 0 ; i < aItems.length ; i++ )
  265. aItems[i].Disable() ;
  266. }
  267. }
  268. FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
  269. {
  270. var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
  271. for ( var i = 0 ; i < aItems.length ; i++ )
  272. aItems[i].RefreshState() ;
  273. }