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

数据库编程

开发平台:

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.  * Renders a list of menu items.
  22.  */
  23. var FCKMenuBlock = function()
  24. {
  25. this._Items = new Array() ;
  26. }
  27. FCKMenuBlock.prototype.Count = function()
  28. {
  29. return this._Items.length ;
  30. }
  31. FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
  32. {
  33. var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ;
  34. oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
  35. oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
  36. this._Items.push( oItem ) ;
  37. return oItem ;
  38. }
  39. FCKMenuBlock.prototype.AddSeparator = function()
  40. {
  41. this._Items.push( new FCKMenuSeparator() ) ;
  42. }
  43. FCKMenuBlock.prototype.RemoveAllItems = function()
  44. {
  45. this._Items = new Array() ;
  46. var eItemsTable = this._ItemsTable ;
  47. if ( eItemsTable )
  48. {
  49. while ( eItemsTable.rows.length > 0 )
  50. eItemsTable.deleteRow( 0 ) ;
  51. }
  52. }
  53. FCKMenuBlock.prototype.Create = function( parentElement )
  54. {
  55. if ( !this._ItemsTable )
  56. {
  57. if ( FCK.IECleanup )
  58. FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
  59. this._Window = FCKTools.GetElementWindow( parentElement ) ;
  60. var oDoc = FCKTools.GetElementDocument( parentElement ) ;
  61. var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
  62. eTable.cellPadding = 0 ;
  63. eTable.cellSpacing = 0 ;
  64. FCKTools.DisableSelection( eTable ) ;
  65. var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
  66. oMainElement.className = 'MN_Menu' ;
  67. var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
  68. eItemsTable.cellPadding = 0 ;
  69. eItemsTable.cellSpacing = 0 ;
  70. }
  71. for ( var i = 0 ; i < this._Items.length ; i++ )
  72. this._Items[i].Create( this._ItemsTable ) ;
  73. }
  74. /* Events */
  75. function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
  76. {
  77. FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
  78. }
  79. function FCKMenuBlock_Item_OnActivate( menuBlock )
  80. {
  81. var oActiveItem = menuBlock._ActiveItem ;
  82. if ( oActiveItem && oActiveItem != this )
  83. {
  84. // Set the focus to this menu block window (to fire OnBlur on opened panels).
  85. if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
  86. {
  87. menuBlock._Window.focus() ;
  88. // Due to the event model provided by Opera, we need to set
  89. // HasFocus here as the above focus() call will not fire the focus
  90. // event in the panel immediately (#1200).
  91. menuBlock.Panel.HasFocus = true ;
  92. }
  93. oActiveItem.Deactivate() ;
  94. }
  95. menuBlock._ActiveItem = this ;
  96. }
  97. function FCKMenuBlock_Cleanup()
  98. {
  99. this._Window = null ;
  100. this._ItemsTable = null ;
  101. }
  102. // ################# //
  103. var FCKMenuSeparator = function()
  104. {}
  105. FCKMenuSeparator.prototype.Create = function( parentTable )
  106. {
  107. var oDoc = FCKTools.GetElementDocument( parentTable ) ;
  108. var r = parentTable.insertRow(-1) ;
  109. var eCell = r.insertCell(-1) ;
  110. eCell.className = 'MN_Separator MN_Icon' ;
  111. eCell = r.insertCell(-1) ;
  112. eCell.className = 'MN_Separator' ;
  113. eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
  114. eCell = r.insertCell(-1) ;
  115. eCell.className = 'MN_Separator' ;
  116. eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
  117. }