[ Index ] |
|
Code source de GeekLog 1.4.1 |
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: fckspecialcombo.js 14 * FCKSpecialCombo Class: represents a special combo. 15 * 16 * File Authors: 17 * Frederico Caldeira Knabben (fredck@fckeditor.net) 18 */ 19 20 var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow ) 21 { 22 // Default properties values. 23 this.FieldWidth = fieldWidth || 100 ; 24 this.PanelWidth = panelWidth || 150 ; 25 this.PanelMaxHeight = panelMaxHeight || 150 ; 26 this.Label = ' ' ; 27 this.Caption = caption ; 28 this.Tooltip = caption ; 29 this.Style = FCK_TOOLBARITEM_ICONTEXT ; 30 31 this.Enabled = true ; 32 33 this.Items = new Object() ; 34 35 this._Panel = new FCKPanel( parentWindow || window, true ) ; 36 this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; 37 this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; 38 this._PanelBox.className = 'SC_Panel' ; 39 this._PanelBox.style.width = this.PanelWidth + 'px' ; 40 41 this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ; 42 43 this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ; 44 45 if ( FCK.IECleanup ) 46 FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ; 47 48 // this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ; 49 // this._Panel.Create() ; 50 // this._Panel.PanelDiv.className += ' SC_Panel' ; 51 // this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ; 52 // this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ; 53 } 54 55 function FCKSpecialCombo_ItemOnMouseOver() 56 { 57 this.className += ' SC_ItemOver' ; 58 } 59 60 function FCKSpecialCombo_ItemOnMouseOut() 61 { 62 this.className = this.originalClass ; 63 } 64 65 function FCKSpecialCombo_ItemOnClick() 66 { 67 this.className = this.originalClass ; 68 69 this.FCKSpecialCombo._Panel.Hide() ; 70 71 this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ; 72 73 if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' ) 74 this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ; 75 } 76 77 FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) 78 { 79 // <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div> 80 var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; 81 oDiv.className = oDiv.originalClass = 'SC_Item' ; 82 oDiv.innerHTML = html ; 83 oDiv.FCKItemID = id ; 84 oDiv.FCKItemLabel = label || id ; 85 oDiv.FCKSpecialCombo = this ; 86 oDiv.Selected = false ; 87 88 // In IE, the width must be set so the borders are shown correctly when the content overflows. 89 if ( FCKBrowserInfo.IsIE ) 90 oDiv.style.width = '100%' ; 91 92 if ( bgColor ) 93 oDiv.style.backgroundColor = bgColor ; 94 95 oDiv.onmouseover = FCKSpecialCombo_ItemOnMouseOver ; 96 oDiv.onmouseout = FCKSpecialCombo_ItemOnMouseOut ; 97 oDiv.onclick = FCKSpecialCombo_ItemOnClick ; 98 99 this.Items[ id.toString().toLowerCase() ] = oDiv ; 100 101 return oDiv ; 102 } 103 104 FCKSpecialCombo.prototype.SelectItem = function( itemId ) 105 { 106 itemId = itemId ? itemId.toString().toLowerCase() : '' ; 107 108 var oDiv = this.Items[ itemId ] ; 109 if ( oDiv ) 110 { 111 oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; 112 oDiv.Selected = true ; 113 } 114 } 115 116 FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel ) 117 { 118 for ( var id in this.Items ) 119 { 120 var oDiv = this.Items[id] ; 121 122 if ( oDiv.FCKItemLabel == itemLabel ) 123 { 124 oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; 125 oDiv.Selected = true ; 126 127 if ( setLabel ) 128 this.SetLabel( itemLabel ) ; 129 } 130 } 131 } 132 133 FCKSpecialCombo.prototype.DeselectAll = function( clearLabel ) 134 { 135 for ( var i in this.Items ) 136 { 137 this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ; 138 this.Items[i].Selected = false ; 139 } 140 141 if ( clearLabel ) 142 this.SetLabel( '' ) ; 143 } 144 145 FCKSpecialCombo.prototype.SetLabelById = function( id ) 146 { 147 id = id ? id.toString().toLowerCase() : '' ; 148 149 var oDiv = this.Items[ id ] ; 150 this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ; 151 } 152 153 FCKSpecialCombo.prototype.SetLabel = function( text ) 154 { 155 this.Label = text.length == 0 ? ' ' : text ; 156 157 if ( this._LabelEl ) 158 this._LabelEl.innerHTML = this.Label ; 159 } 160 161 FCKSpecialCombo.prototype.SetEnabled = function( isEnabled ) 162 { 163 this.Enabled = isEnabled ; 164 165 this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ; 166 } 167 168 FCKSpecialCombo.prototype.Create = function( targetElement ) 169 { 170 var oDoc = FCKTools.GetElementDocument( targetElement ) ; 171 var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ; 172 eOuterTable.cellPadding = 0 ; 173 eOuterTable.cellSpacing = 0 ; 174 175 eOuterTable.insertRow(-1) ; 176 177 var sClass ; 178 var bShowLabel ; 179 180 switch ( this.Style ) 181 { 182 case FCK_TOOLBARITEM_ONLYICON : 183 sClass = 'TB_ButtonType_Icon' ; 184 bShowLabel = false; 185 break ; 186 case FCK_TOOLBARITEM_ONLYTEXT : 187 sClass = 'TB_ButtonType_Text' ; 188 bShowLabel = false; 189 break ; 190 case FCK_TOOLBARITEM_ICONTEXT : 191 bShowLabel = true; 192 break ; 193 } 194 195 if ( this.Caption && this.Caption.length > 0 && bShowLabel ) 196 { 197 var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ; 198 oCaptionCell.innerHTML = this.Caption ; 199 oCaptionCell.className = 'SC_FieldCaption' ; 200 } 201 202 // Create the main DIV element. 203 var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ; 204 if ( bShowLabel ) 205 { 206 oField.className = 'SC_Field' ; 207 oField.style.width = this.FieldWidth + 'px' ; 208 oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label> </label></td><td class="SC_FieldButton"> </td></tr></tbody></table>' ; 209 210 this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak 211 this._LabelEl.innerHTML = this.Label ; 212 } 213 else 214 { 215 oField.className = 'TB_Button_Off' ; 216 //oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ; 217 //oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ; 218 219 // Gets the correct CSS class to use for the specified style (param). 220 oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' + 221 '<tr>' + 222 //'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' + 223 '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + 224 '<td class="TB_Text">' + this.Caption + '</td>' + 225 '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + 226 '<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' + 227 '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + 228 '</tr>' + 229 '</table>' ; 230 } 231 232 233 // Events Handlers 234 235 oField.SpecialCombo = this ; 236 237 oField.onmouseover = FCKSpecialCombo_OnMouseOver ; 238 oField.onmouseout = FCKSpecialCombo_OnMouseOut ; 239 oField.onclick = FCKSpecialCombo_OnClick ; 240 241 FCKTools.DisableSelection( this._Panel.Document.body ) ; 242 } 243 244 function FCKSpecialCombo_Cleanup() 245 { 246 this._LabelEl = null ; 247 this._OuterTable = null ; 248 this._ItemsHolderEl = null ; 249 this._PanelBox = null ; 250 251 if ( this.Items ) 252 { 253 for ( var key in this.Items ) 254 this.Items[key] = null ; 255 } 256 } 257 258 function FCKSpecialCombo_OnMouseOver() 259 { 260 if ( this.SpecialCombo.Enabled ) 261 { 262 switch ( this.SpecialCombo.Style ) 263 { 264 case FCK_TOOLBARITEM_ONLYICON : 265 this.className = 'TB_Button_On_Over'; 266 break ; 267 case FCK_TOOLBARITEM_ONLYTEXT : 268 this.className = 'TB_Button_On_Over'; 269 break ; 270 case FCK_TOOLBARITEM_ICONTEXT : 271 this.className = 'SC_Field SC_FieldOver' ; 272 break ; 273 } 274 } 275 } 276 277 function FCKSpecialCombo_OnMouseOut() 278 { 279 switch ( this.SpecialCombo.Style ) 280 { 281 case FCK_TOOLBARITEM_ONLYICON : 282 this.className = 'TB_Button_Off'; 283 break ; 284 case FCK_TOOLBARITEM_ONLYTEXT : 285 this.className = 'TB_Button_Off'; 286 break ; 287 case FCK_TOOLBARITEM_ICONTEXT : 288 this.className='SC_Field' ; 289 break ; 290 } 291 } 292 293 function FCKSpecialCombo_OnClick( e ) 294 { 295 // For Mozilla we must stop the event propagation to avoid it hiding 296 // the panel because of a click outside of it. 297 // if ( e ) 298 // { 299 // e.stopPropagation() ; 300 // FCKPanelEventHandlers.OnDocumentClick( e ) ; 301 // } 302 303 var oSpecialCombo = this.SpecialCombo ; 304 305 if ( oSpecialCombo.Enabled ) 306 { 307 var oPanel = oSpecialCombo._Panel ; 308 var oPanelBox = oSpecialCombo._PanelBox ; 309 var oItemsHolder = oSpecialCombo._ItemsHolderEl ; 310 var iMaxHeight = oSpecialCombo.PanelMaxHeight ; 311 312 if ( oSpecialCombo.OnBeforeClick ) 313 oSpecialCombo.OnBeforeClick( oSpecialCombo ) ; 314 315 // This is a tricky thing. We must call the "Load" function, otherwise 316 // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only). 317 if ( FCKBrowserInfo.IsIE ) 318 oPanel.Preload( 0, this.offsetHeight, this ) ; 319 320 if ( oItemsHolder.offsetHeight > iMaxHeight ) 321 // { 322 oPanelBox.style.height = iMaxHeight + 'px' ; 323 324 // if ( FCKBrowserInfo.IsGecko ) 325 // oPanelBox.style.overflow = '-moz-scrollbars-vertical' ; 326 // } 327 else 328 oPanelBox.style.height = '' ; 329 330 // oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ; 331 332 oPanel.Show( 0, this.offsetHeight, this ) ; 333 } 334 335 // return false ; 336 } 337 338 /* 339 Sample Combo Field HTML output: 340 341 <div class="SC_Field" style="width: 80px;"> 342 <table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;"> 343 <tbody> 344 <tr> 345 <td class="SC_FieldLabel"><label> </label></td> 346 <td class="SC_FieldButton"> </td> 347 </tr> 348 </tbody> 349 </table> 350 </div> 351 */
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 12:27:40 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |