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

数据库编程

开发平台:

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