import rt 3.8.7
[freeside.git] / rt / share / html / NoAuth / RichText / FCKeditor / editor / _source / classes / fcktoolbarbuttonui.js
1 /*\r
2  * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
3  * Copyright (C) 2003-2009 Frederico Caldeira Knabben\r
4  *\r
5  * == BEGIN LICENSE ==\r
6  *\r
7  * Licensed under the terms of any of the following licenses at your\r
8  * choice:\r
9  *\r
10  *  - GNU General Public License Version 2 or later (the "GPL")\r
11  *    http://www.gnu.org/licenses/gpl.html\r
12  *\r
13  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
14  *    http://www.gnu.org/licenses/lgpl.html\r
15  *\r
16  *  - Mozilla Public License Version 1.1 or later (the "MPL")\r
17  *    http://www.mozilla.org/MPL/MPL-1.1.html\r
18  *\r
19  * == END LICENSE ==\r
20  *\r
21  * FCKToolbarButtonUI Class: interface representation of a toolbar button.\r
22  */\r
23 \r
24 var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )\r
25 {\r
26         this.Name               = name ;\r
27         this.Label              = label || name ;\r
28         this.Tooltip    = tooltip || this.Label ;\r
29         this.Style              = style || FCK_TOOLBARITEM_ONLYICON ;\r
30         this.State              = state || FCK_TRISTATE_OFF ;\r
31 \r
32         this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;\r
33 \r
34         if ( FCK.IECleanup )\r
35                 FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;\r
36 }\r
37 \r
38 \r
39 FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )\r
40 {\r
41         var oImg = document.createElement( 'IMG' ) ;\r
42         oImg.className = 'TB_Button_Padding' ;\r
43         oImg.src = FCK_SPACER_PATH ;\r
44         return oImg ;\r
45 }\r
46 \r
47 FCKToolbarButtonUI.prototype.Create = function( parentElement )\r
48 {\r
49         var oDoc = FCKTools.GetElementDocument( parentElement ) ;\r
50 \r
51         // Create the Main Element.\r
52         var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;\r
53         oMainElement.title = this.Tooltip ;\r
54 \r
55         // The following will prevent the button from catching the focus.\r
56         if ( FCKBrowserInfo.IsGecko )\r
57                  oMainElement.onmousedown       = FCKTools.CancelEvent ;\r
58 \r
59         FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;\r
60         FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;\r
61         FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;\r
62 \r
63         this.ChangeState( this.State, true ) ;\r
64 \r
65         if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )\r
66         {\r
67                 // <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>\r
68 \r
69                 oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;\r
70         }\r
71         else\r
72         {\r
73                 // <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>\r
74                 // <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>\r
75 \r
76                 var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;\r
77                 oTable.cellPadding = 0 ;\r
78                 oTable.cellSpacing = 0 ;\r
79 \r
80                 var oRow = oTable.insertRow(-1) ;\r
81 \r
82                 // The Image cell (icon or padding).\r
83                 var oCell = oRow.insertCell(-1) ;\r
84 \r
85                 if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )\r
86                         oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;\r
87                 else\r
88                         oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;\r
89 \r
90                 if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )\r
91                 {\r
92                         // The Text cell.\r
93                         oCell = oRow.insertCell(-1) ;\r
94                         oCell.className = 'TB_Button_Text' ;\r
95                         oCell.noWrap = true ;\r
96                         oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;\r
97                 }\r
98 \r
99                 if ( this.ShowArrow )\r
100                 {\r
101                         if ( this.Style != FCK_TOOLBARITEM_ONLYICON )\r
102                         {\r
103                                 // A padding cell.\r
104                                 oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;\r
105                         }\r
106 \r
107                         oCell = oRow.insertCell(-1) ;\r
108                         var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;\r
109                         eImg.src        = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;\r
110                         eImg.width      = 5 ;\r
111                         eImg.height     = 3 ;\r
112                 }\r
113 \r
114                 // The last padding cell.\r
115                 oCell = oRow.insertCell(-1) ;\r
116                 oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;\r
117         }\r
118 \r
119         parentElement.appendChild( oMainElement ) ;\r
120 }\r
121 \r
122 FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )\r
123 {\r
124         if ( !force && this.State == newState )\r
125                 return ;\r
126 \r
127         var e = this.MainElement ;\r
128 \r
129         // In IE it can happen when the page is reloaded that MainElement is null, so exit here\r
130         if ( !e )\r
131                 return ;\r
132 \r
133         switch ( parseInt( newState, 10 ) )\r
134         {\r
135                 case FCK_TRISTATE_OFF :\r
136                         e.className             = 'TB_Button_Off' ;\r
137                         break ;\r
138 \r
139                 case FCK_TRISTATE_ON :\r
140                         e.className             = 'TB_Button_On' ;\r
141                         break ;\r
142 \r
143                 case FCK_TRISTATE_DISABLED :\r
144                         e.className             = 'TB_Button_Disabled' ;\r
145                         break ;\r
146         }\r
147 \r
148         this.State = newState ;\r
149 }\r
150 \r
151 function FCKToolbarButtonUI_OnMouseOver( ev, button )\r
152 {\r
153         if ( button.State == FCK_TRISTATE_OFF )\r
154                 this.className = 'TB_Button_Off_Over' ;\r
155         else if ( button.State == FCK_TRISTATE_ON )\r
156                 this.className = 'TB_Button_On_Over' ;\r
157 }\r
158 \r
159 function FCKToolbarButtonUI_OnMouseOut( ev, button )\r
160 {\r
161         if ( button.State == FCK_TRISTATE_OFF )\r
162                 this.className = 'TB_Button_Off' ;\r
163         else if ( button.State == FCK_TRISTATE_ON )\r
164                 this.className = 'TB_Button_On' ;\r
165 }\r
166 \r
167 function FCKToolbarButtonUI_OnClick( ev, button )\r
168 {\r
169         if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )\r
170                 button.OnClick( button ) ;\r
171 }\r
172 \r
173 function FCKToolbarButtonUI_Cleanup()\r
174 {\r
175         // This one should not cause memory leak, but just for safety, let's clean\r
176         // it up.\r
177         this.MainElement = null ;\r
178 }\r
179 \r
180 /*\r
181         Sample outputs:\r
182 \r
183         This is the base structure. The variation is the image that is marked as {Image}:\r
184                 <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>\r
185                 <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>\r
186                 <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>\r
187 \r
188         These are samples of possible {Image} values:\r
189 \r
190                 Strip - IE version:\r
191                         <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>\r
192 \r
193                 Strip : Firefox, Safari and Opera version\r
194                         <img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">\r
195 \r
196                 No-Strip : Browser independent:\r
197                         <img class="TB_Button_Image" src="smiley.gif">\r
198 */\r