fcktoolbarbuttonui.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: fcktoolbarbuttonui.js
  14.  *  FCKToolbarButtonUI Class: interface representation of a toolbar button.
  15.  * 
  16.  * File Authors:
  17.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  18.  */
  19. var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
  20. {
  21. this.Name = name ;
  22. this.Label = label || name ;
  23. this.Tooltip = tooltip || this.Label ;
  24. this.Style = style || FCK_TOOLBARITEM_ONLYICON ;
  25. this.State = state || FCK_TRISTATE_OFF ;
  26. this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
  27. if ( FCK.IECleanup )
  28. FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
  29. }
  30. FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
  31. {
  32. var oImg = document.createElement( 'IMG' ) ;
  33. oImg.className = 'TB_Button_Padding' ;
  34. oImg.src = FCK_SPACER_PATH ;
  35. return oImg ;
  36. }
  37. FCKToolbarButtonUI.prototype.Create = function( parentElement )
  38. {
  39. var oMainElement = this.MainElement ;
  40. if ( oMainElement )
  41. {
  42. FCKToolbarButtonUI_Cleanup.call(this) ;
  43. if ( oMainElement.parentNode )
  44. oMainElement.parentNode.removeChild( oMainElement ) ;
  45. oMainElement = this.MainElement = null ;
  46. }
  47. var oDoc = FCKTools.GetElementDocument( parentElement ) ;
  48. // Create the Main Element.
  49. oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
  50. oMainElement._FCKButton = this ; // IE Memory Leak (Circular reference).
  51. oMainElement.title = this.Tooltip ;
  52. // The following will prevent the button from catching the focus.
  53. if ( FCKBrowserInfo.IsGecko )
  54.  oMainElement.onmousedown = FCKTools.CancelEvent ;
  55. this.ChangeState( this.State, true ) ;
  56. if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
  57. {
  58. // <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
  59. oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
  60. }
  61. else
  62. {
  63. // <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
  64. // <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
  65. var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
  66. oTable.cellPadding = 0 ;
  67. oTable.cellSpacing = 0 ;
  68. var oRow = oTable.insertRow(-1) ;
  69. // The Image cell (icon or padding).
  70. var oCell = oRow.insertCell(-1) ;
  71. if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
  72. oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
  73. else
  74. oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
  75. if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
  76. {
  77. // The Text cell.
  78. oCell = oRow.insertCell(-1) ;
  79. oCell.className = 'TB_Button_Text' ;
  80. oCell.noWrap = true ;
  81. oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
  82. }
  83. if ( this.ShowArrow )
  84. {
  85. if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
  86. {
  87. // A padding cell.
  88. oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
  89. }
  90. oCell = oRow.insertCell(-1) ;
  91. var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
  92. eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
  93. eImg.width = 5 ;
  94. eImg.height = 3 ;
  95. }
  96. // The last padding cell.
  97. oCell = oRow.insertCell(-1) ;
  98. oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
  99. }
  100. parentElement.appendChild( oMainElement ) ;
  101. }
  102. FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
  103. {
  104. if ( !force && this.State == newState )
  105. return ;
  106. var e = this.MainElement ;
  107. switch ( parseInt( newState ) )
  108. {
  109. case FCK_TRISTATE_OFF :
  110. e.className = 'TB_Button_Off' ;
  111. e.onmouseover = FCKToolbarButton_OnMouseOverOff ;
  112. e.onmouseout = FCKToolbarButton_OnMouseOutOff ;
  113. e.onclick = FCKToolbarButton_OnClick ;
  114. break ;
  115. case FCK_TRISTATE_ON :
  116. e.className = 'TB_Button_On' ;
  117. e.onmouseover = FCKToolbarButton_OnMouseOverOn ;
  118. e.onmouseout = FCKToolbarButton_OnMouseOutOn ;
  119. e.onclick = FCKToolbarButton_OnClick ;
  120. break ;
  121. case FCK_TRISTATE_DISABLED :
  122. e.className = 'TB_Button_Disabled' ;
  123. e.onmouseover = null ;
  124. e.onmouseout = null ;
  125. e.onclick = null ;
  126. bEnableEvents = false ;
  127. break ;
  128. }
  129. this.State = newState ;
  130. }
  131. function FCKToolbarButtonUI_Cleanup()
  132. {
  133. if ( this.MainElement )
  134. {
  135. this.MainElement._FCKButton = null ;
  136. this.MainElement = null ;
  137. }
  138. }
  139. // Event Handlers.
  140. function FCKToolbarButton_OnMouseOverOn()
  141. {
  142. this.className = 'TB_Button_On_Over' ;
  143. }
  144. function FCKToolbarButton_OnMouseOutOn()
  145. {
  146. this.className = 'TB_Button_On' ;
  147. }
  148. function FCKToolbarButton_OnMouseOverOff()
  149. {
  150. this.className = 'TB_Button_Off_Over' ;
  151. }
  152. function FCKToolbarButton_OnMouseOutOff()
  153. {
  154. this.className = 'TB_Button_Off' ;
  155. }
  156. function FCKToolbarButton_OnClick( e )
  157. {
  158. if ( this._FCKButton.OnClick )
  159. this._FCKButton.OnClick( this._FCKButton ) ;
  160. }
  161. /* 
  162. Sample outputs:
  163. This is the base structure. The variation is the image that is marked as {Image}:
  164. <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
  165. <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
  166. <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
  167. These are samples of possible {Image} values:
  168. Strip - IE version:
  169. <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
  170. Strip : Firefox, Safari and Opera version
  171. <img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
  172. No-Strip : Browser independent:
  173. <img class="TB_Button_Image" src="smiley.gif">
  174. */