Rev 1075 | Blame | Last modification | View Log | RSS feed
/** FCKeditor - The text editor for internet* Copyright (C) 2003-2006 Frederico Caldeira Knabben** Licensed under the terms of the GNU Lesser General Public License:* http://www.opensource.org/licenses/lgpl-license.php** For further information visit:* http://www.fckeditor.net/** "Support Open Source software. What about a donation today?"** File Name: fcktoolbarbuttonui.js* FCKToolbarButtonUI Class: interface representation of a toolbar button.** File Authors:* Frederico Caldeira Knabben (fredck@fckeditor.net)*/var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state ){this.Name = name ;this.Label = label || name ;this.Tooltip = tooltip || this.Label ;this.Style = style || FCK_TOOLBARITEM_ONLYICON ;this.State = state || FCK_TRISTATE_OFF ;this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;if ( FCK.IECleanup )FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;}FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document ){var oImg = document.createElement( 'IMG' ) ;oImg.className = 'TB_Button_Padding' ;oImg.src = FCK_SPACER_PATH ;return oImg ;}FCKToolbarButtonUI.prototype.Create = function( parentElement ){var oMainElement = this.MainElement ;if ( oMainElement ){FCKToolbarButtonUI_Cleanup.call(this) ;if ( oMainElement.parentNode )oMainElement.parentNode.removeChild( oMainElement ) ;oMainElement = this.MainElement = null ;}var oDoc = FCKTools.GetElementDocument( parentElement ) ;// Create the Main Element.oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;oMainElement._FCKButton = this ; // IE Memory Leak (Circular reference).oMainElement.title = this.Tooltip ;// The following will prevent the button from catching the focus.if ( FCKBrowserInfo.IsGecko )oMainElement.onmousedown = FCKTools.CancelEvent ;this.ChangeState( this.State, true ) ;if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow ){// <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;}else{// <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>// <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>var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;oTable.cellPadding = 0 ;oTable.cellSpacing = 0 ;var oRow = oTable.insertRow(-1) ;// The Image cell (icon or padding).var oCell = oRow.insertCell(-1) ;if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;elseoCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT ){// The Text cell.oCell = oRow.insertCell(-1) ;oCell.className = 'TB_Button_Text' ;oCell.noWrap = true ;oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;}if ( this.ShowArrow ){if ( this.Style != FCK_TOOLBARITEM_ONLYICON ){// A padding cell.oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;}oCell = oRow.insertCell(-1) ;var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;eImg.width = 5 ;eImg.height = 3 ;}// The last padding cell.oCell = oRow.insertCell(-1) ;oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;}parentElement.appendChild( oMainElement ) ;}FCKToolbarButtonUI.prototype.ChangeState = function( newState, force ){if ( !force && this.State == newState )return ;var e = this.MainElement ;switch ( parseInt( newState ) ){case FCK_TRISTATE_OFF :e.className = 'TB_Button_Off' ;e.onmouseover = FCKToolbarButton_OnMouseOverOff ;e.onmouseout = FCKToolbarButton_OnMouseOutOff ;e.onclick = FCKToolbarButton_OnClick ;break ;case FCK_TRISTATE_ON :e.className = 'TB_Button_On' ;e.onmouseover = FCKToolbarButton_OnMouseOverOn ;e.onmouseout = FCKToolbarButton_OnMouseOutOn ;e.onclick = FCKToolbarButton_OnClick ;break ;case FCK_TRISTATE_DISABLED :e.className = 'TB_Button_Disabled' ;e.onmouseover = null ;e.onmouseout = null ;e.onclick = null ;bEnableEvents = false ;break ;}this.State = newState ;}function FCKToolbarButtonUI_Cleanup(){if ( this.MainElement ){this.MainElement._FCKButton = null ;this.MainElement = null ;}}// Event Handlers.function FCKToolbarButton_OnMouseOverOn(){this.className = 'TB_Button_On_Over' ;}function FCKToolbarButton_OnMouseOutOn(){this.className = 'TB_Button_On' ;}function FCKToolbarButton_OnMouseOverOff(){this.className = 'TB_Button_Off_Over' ;}function FCKToolbarButton_OnMouseOutOff(){this.className = 'TB_Button_Off' ;}function FCKToolbarButton_OnClick( e ){if ( this._FCKButton.OnClick )this._FCKButton.OnClick( this._FCKButton ) ;}/*Sample outputs:This is the base structure. The variation is the image that is marked as {Image}:<td><div class="TB_Button_On" title="Smiley">{Image}</div></td><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><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>These are samples of possible {Image} values:Strip - IE version:<div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>Strip : Firefox, Safari and Opera version<img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">No-Strip : Browser independent:<img class="TB_Button_Image" src="smiley.gif">*/