fcktoolbarbuttonui.js
上传用户:dbstep
上传日期:2022-08-06
资源大小:2803k
文件大小:6k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

ASP/ASPX

  1. /*
  2.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3.  * Copyright (C) 2003-2009 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.  * FCKToolbarButtonUI Class: interface representation of a toolbar button.
  22.  */
  23. var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
  24. {
  25. this.Name = name ;
  26. this.Label = label || name ;
  27. this.Tooltip = tooltip || this.Label ;
  28. this.Style = style || FCK_TOOLBARITEM_ONLYICON ;
  29. this.State = state || FCK_TRISTATE_OFF ;
  30. this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
  31. if ( FCK.IECleanup )
  32. FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
  33. }
  34. FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
  35. {
  36. var oImg = document.createElement( 'IMG' ) ;
  37. oImg.className = 'TB_Button_Padding' ;
  38. oImg.src = FCK_SPACER_PATH ;
  39. return oImg ;
  40. }
  41. FCKToolbarButtonUI.prototype.Create = function( parentElement )
  42. {
  43. var oDoc = FCKTools.GetElementDocument( parentElement ) ;
  44. // Create the Main Element.
  45. var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
  46. oMainElement.title = this.Tooltip ;
  47. // The following will prevent the button from catching the focus.
  48. if ( FCKBrowserInfo.IsGecko )
  49.  oMainElement.onmousedown = FCKTools.CancelEvent ;
  50. FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;
  51. FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;
  52. FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;
  53. this.ChangeState( this.State, true ) ;
  54. if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
  55. {
  56. // <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
  57. oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
  58. }
  59. else
  60. {
  61. // <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>
  62. // <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>
  63. var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
  64. oTable.cellPadding = 0 ;
  65. oTable.cellSpacing = 0 ;
  66. var oRow = oTable.insertRow(-1) ;
  67. // The Image cell (icon or padding).
  68. var oCell = oRow.insertCell(-1) ;
  69. if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
  70. oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
  71. else
  72. oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
  73. if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
  74. {
  75. // The Text cell.
  76. oCell = oRow.insertCell(-1) ;
  77. oCell.className = 'TB_Button_Text' ;
  78. oCell.noWrap = true ;
  79. oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
  80. }
  81. if ( this.ShowArrow )
  82. {
  83. if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
  84. {
  85. // A padding cell.
  86. oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
  87. }
  88. oCell = oRow.insertCell(-1) ;
  89. var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
  90. eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
  91. eImg.width = 5 ;
  92. eImg.height = 3 ;
  93. }
  94. // The last padding cell.
  95. oCell = oRow.insertCell(-1) ;
  96. oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
  97. }
  98. parentElement.appendChild( oMainElement ) ;
  99. }
  100. FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
  101. {
  102. if ( !force && this.State == newState )
  103. return ;
  104. var e = this.MainElement ;
  105. // In IE it can happen when the page is reloaded that MainElement is null, so exit here
  106. if ( !e )
  107. return ;
  108. switch ( parseInt( newState, 10 ) )
  109. {
  110. case FCK_TRISTATE_OFF :
  111. e.className = 'TB_Button_Off' ;
  112. break ;
  113. case FCK_TRISTATE_ON :
  114. e.className = 'TB_Button_On' ;
  115. break ;
  116. case FCK_TRISTATE_DISABLED :
  117. e.className = 'TB_Button_Disabled' ;
  118. break ;
  119. }
  120. this.State = newState ;
  121. }
  122. function FCKToolbarButtonUI_OnMouseOver( ev, button )
  123. {
  124. if ( button.State == FCK_TRISTATE_OFF )
  125. this.className = 'TB_Button_Off_Over' ;
  126. else if ( button.State == FCK_TRISTATE_ON )
  127. this.className = 'TB_Button_On_Over' ;
  128. }
  129. function FCKToolbarButtonUI_OnMouseOut( ev, button )
  130. {
  131. if ( button.State == FCK_TRISTATE_OFF )
  132. this.className = 'TB_Button_Off' ;
  133. else if ( button.State == FCK_TRISTATE_ON )
  134. this.className = 'TB_Button_On' ;
  135. }
  136. function FCKToolbarButtonUI_OnClick( ev, button )
  137. {
  138. if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )
  139. button.OnClick( button ) ;
  140. }
  141. function FCKToolbarButtonUI_Cleanup()
  142. {
  143. // This one should not cause memory leak, but just for safety, let's clean
  144. // it up.
  145. this.MainElement = null ;
  146. }
  147. /*
  148. Sample outputs:
  149. This is the base structure. The variation is the image that is marked as {Image}:
  150. <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
  151. <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>
  152. <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>
  153. These are samples of possible {Image} values:
  154. Strip - IE version:
  155. <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
  156. Strip : Firefox, Safari and Opera version
  157. <img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
  158. No-Strip : Browser independent:
  159. <img class="TB_Button_Image" src="smiley.gif">
  160. */