import rt 3.8.7
[freeside.git] / rt / share / html / NoAuth / RichText / FCKeditor / editor / _source / classes / fckspecialcombo.js
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js
new file mode 100644 (file)
index 0000000..b31a8f6
--- /dev/null
@@ -0,0 +1,376 @@
+/*\r
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben\r
+ *\r
+ * == BEGIN LICENSE ==\r
+ *\r
+ * Licensed under the terms of any of the following licenses at your\r
+ * choice:\r
+ *\r
+ *  - GNU General Public License Version 2 or later (the "GPL")\r
+ *    http://www.gnu.org/licenses/gpl.html\r
+ *\r
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
+ *    http://www.gnu.org/licenses/lgpl.html\r
+ *\r
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")\r
+ *    http://www.mozilla.org/MPL/MPL-1.1.html\r
+ *\r
+ * == END LICENSE ==\r
+ *\r
+ * FCKSpecialCombo Class: represents a special combo.\r
+ */\r
+\r
+var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )\r
+{\r
+       // Default properties values.\r
+       this.FieldWidth         = fieldWidth || 100 ;\r
+       this.PanelWidth         = panelWidth || 150 ;\r
+       this.PanelMaxHeight     = panelMaxHeight || 150 ;\r
+       this.Label                      = ' ' ;\r
+       this.Caption            = caption ;\r
+       this.Tooltip            = caption ;\r
+       this.Style                      = FCK_TOOLBARITEM_ICONTEXT ;\r
+\r
+       this.Enabled = true ;\r
+\r
+       this.Items = new Object() ;\r
+\r
+       this._Panel = new FCKPanel( parentWindow || window ) ;\r
+       this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;\r
+       this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;\r
+       this._PanelBox.className = 'SC_Panel' ;\r
+       this._PanelBox.style.width = this.PanelWidth + 'px' ;\r
+\r
+       this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;\r
+\r
+       this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ;\r
+\r
+       if ( FCK.IECleanup )\r
+               FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ;\r
+\r
+//     this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;\r
+//     this._Panel.Create() ;\r
+//     this._Panel.PanelDiv.className += ' SC_Panel' ;\r
+//     this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;\r
+//     this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;\r
+}\r
+\r
+function FCKSpecialCombo_ItemOnMouseOver()\r
+{\r
+       this.className += ' SC_ItemOver' ;\r
+}\r
+\r
+function FCKSpecialCombo_ItemOnMouseOut()\r
+{\r
+       this.className = this.originalClass ;\r
+}\r
+\r
+function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId )\r
+{\r
+       this.className = this.originalClass ;\r
+\r
+       specialCombo._Panel.Hide() ;\r
+\r
+       specialCombo.SetLabel( this.FCKItemLabel ) ;\r
+\r
+       if ( typeof( specialCombo.OnSelect ) == 'function' )\r
+               specialCombo.OnSelect( itemId, this ) ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.ClearItems = function ()\r
+{\r
+       if ( this.Items )\r
+               this.Items = {} ;\r
+\r
+       var itemsholder = this._ItemsHolderEl ;\r
+       while ( itemsholder.firstChild )\r
+               itemsholder.removeChild( itemsholder.firstChild ) ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor )\r
+{\r
+       // <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>\r
+       var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;\r
+       oDiv.className = oDiv.originalClass = 'SC_Item' ;\r
+       oDiv.innerHTML = html ;\r
+       oDiv.FCKItemLabel = label || id ;\r
+       oDiv.Selected = false ;\r
+\r
+       // In IE, the width must be set so the borders are shown correctly when the content overflows.\r
+       if ( FCKBrowserInfo.IsIE )\r
+               oDiv.style.width = '100%' ;\r
+\r
+       if ( bgColor )\r
+               oDiv.style.backgroundColor = bgColor ;\r
+\r
+       FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ;\r
+       FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ;\r
+       FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ;\r
+\r
+       this.Items[ id.toString().toLowerCase() ] = oDiv ;\r
+\r
+       return oDiv ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.SelectItem = function( item )\r
+{\r
+       if ( typeof item == 'string' )\r
+               item = this.Items[ item.toString().toLowerCase() ] ;\r
+\r
+       if ( item )\r
+       {\r
+               item.className = item.originalClass = 'SC_ItemSelected' ;\r
+               item.Selected = true ;\r
+       }\r
+}\r
+\r
+FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel )\r
+{\r
+       for ( var id in this.Items )\r
+       {\r
+               var oDiv = this.Items[id] ;\r
+\r
+               if ( oDiv.FCKItemLabel == itemLabel )\r
+               {\r
+                       oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;\r
+                       oDiv.Selected = true ;\r
+\r
+                       if ( setLabel )\r
+                               this.SetLabel( itemLabel ) ;\r
+               }\r
+       }\r
+}\r
+\r
+FCKSpecialCombo.prototype.DeselectAll = function( clearLabel )\r
+{\r
+       for ( var i in this.Items )\r
+       {\r
+               if ( !this.Items[i] ) continue;\r
+               this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;\r
+               this.Items[i].Selected = false ;\r
+       }\r
+\r
+       if ( clearLabel )\r
+               this.SetLabel( '' ) ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.SetLabelById = function( id )\r
+{\r
+       id = id ? id.toString().toLowerCase() : '' ;\r
+\r
+       var oDiv = this.Items[ id ] ;\r
+       this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.SetLabel = function( text )\r
+{\r
+       text = ( !text || text.length == 0 ) ? '&nbsp;' : text ;\r
+\r
+       if ( text == this.Label )\r
+               return ;\r
+\r
+       this.Label = text ;\r
+\r
+       var labelEl = this._LabelEl ;\r
+       if ( labelEl )\r
+       {\r
+               labelEl.innerHTML = text ;\r
+\r
+               // It may happen that the label is some HTML, including tags. This\r
+               // would be a problem because when the user click on those tags, the\r
+               // combo will get the selection from the editing area. So we must\r
+               // disable any kind of selection here.\r
+               FCKTools.DisableSelection( labelEl ) ;\r
+       }\r
+}\r
+\r
+FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )\r
+{\r
+       this.Enabled = isEnabled ;\r
+\r
+       // In IE it can happen when the page is reloaded that _OuterTable is null, so check its existence\r
+       if ( this._OuterTable )\r
+               this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;\r
+}\r
+\r
+FCKSpecialCombo.prototype.Create = function( targetElement )\r
+{\r
+       var oDoc = FCKTools.GetElementDocument( targetElement ) ;\r
+       var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;\r
+       eOuterTable.cellPadding = 0 ;\r
+       eOuterTable.cellSpacing = 0 ;\r
+\r
+       eOuterTable.insertRow(-1) ;\r
+\r
+       var sClass ;\r
+       var bShowLabel ;\r
+\r
+       switch ( this.Style )\r
+       {\r
+               case FCK_TOOLBARITEM_ONLYICON :\r
+                       sClass = 'TB_ButtonType_Icon' ;\r
+                       bShowLabel = false;\r
+                       break ;\r
+               case FCK_TOOLBARITEM_ONLYTEXT :\r
+                       sClass = 'TB_ButtonType_Text' ;\r
+                       bShowLabel = false;\r
+                       break ;\r
+               case FCK_TOOLBARITEM_ICONTEXT :\r
+                       bShowLabel = true;\r
+                       break ;\r
+       }\r
+\r
+       if ( this.Caption && this.Caption.length > 0 && bShowLabel )\r
+       {\r
+               var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ;\r
+               oCaptionCell.innerHTML = this.Caption ;\r
+               oCaptionCell.className = 'SC_FieldCaption' ;\r
+       }\r
+\r
+       // Create the main DIV element.\r
+       var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ;\r
+       if ( bShowLabel )\r
+       {\r
+               oField.className = 'SC_Field' ;\r
+               oField.style.width = this.FieldWidth + 'px' ;\r
+               oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>' ;\r
+\r
+               this._LabelEl = oField.getElementsByTagName('label')[0] ;               // Memory Leak\r
+               this._LabelEl.innerHTML = this.Label ;\r
+       }\r
+       else\r
+       {\r
+               oField.className = 'TB_Button_Off' ;\r
+               //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;">&nbsp;</td></tr></tbody></table>' ;\r
+               //oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;\r
+\r
+               // Gets the correct CSS class to use for the specified style (param).\r
+               oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' +\r
+                               '<tr>' +\r
+                                       //'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +\r
+                                       '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +\r
+                                       '<td class="TB_Text">' + this.Caption + '</td>' +\r
+                                       '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +\r
+                                       '<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +\r
+                                       '<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +\r
+                               '</tr>' +\r
+                       '</table>' ;\r
+       }\r
+\r
+\r
+       // Events Handlers\r
+\r
+       FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;\r
+       FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;\r
+       FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;\r
+\r
+       FCKTools.DisableSelection( this._Panel.Document.body ) ;\r
+}\r
+\r
+function FCKSpecialCombo_Cleanup()\r
+{\r
+       this._LabelEl = null ;\r
+       this._OuterTable = null ;\r
+       this._ItemsHolderEl = null ;\r
+       this._PanelBox = null ;\r
+\r
+       if ( this.Items )\r
+       {\r
+               for ( var key in this.Items )\r
+                       this.Items[key] = null ;\r
+       }\r
+}\r
+\r
+function FCKSpecialCombo_OnMouseOver( ev, specialCombo )\r
+{\r
+       if ( specialCombo.Enabled )\r
+       {\r
+               switch ( specialCombo.Style )\r
+               {\r
+                       case FCK_TOOLBARITEM_ONLYICON :\r
+                               this.className = 'TB_Button_On_Over';\r
+                               break ;\r
+                       case FCK_TOOLBARITEM_ONLYTEXT :\r
+                               this.className = 'TB_Button_On_Over';\r
+                               break ;\r
+                       case FCK_TOOLBARITEM_ICONTEXT :\r
+                               this.className = 'SC_Field SC_FieldOver' ;\r
+                               break ;\r
+               }\r
+       }\r
+}\r
+\r
+function FCKSpecialCombo_OnMouseOut( ev, specialCombo )\r
+{\r
+       switch ( specialCombo.Style )\r
+       {\r
+               case FCK_TOOLBARITEM_ONLYICON :\r
+                       this.className = 'TB_Button_Off';\r
+                       break ;\r
+               case FCK_TOOLBARITEM_ONLYTEXT :\r
+                       this.className = 'TB_Button_Off';\r
+                       break ;\r
+               case FCK_TOOLBARITEM_ICONTEXT :\r
+                       this.className='SC_Field' ;\r
+                       break ;\r
+       }\r
+}\r
+\r
+function FCKSpecialCombo_OnClick( e, specialCombo )\r
+{\r
+       // For Mozilla we must stop the event propagation to avoid it hiding\r
+       // the panel because of a click outside of it.\r
+//     if ( e )\r
+//     {\r
+//             e.stopPropagation() ;\r
+//             FCKPanelEventHandlers.OnDocumentClick( e ) ;\r
+//     }\r
+\r
+       if ( specialCombo.Enabled )\r
+       {\r
+               var oPanel                      = specialCombo._Panel ;\r
+               var oPanelBox           = specialCombo._PanelBox ;\r
+               var oItemsHolder        = specialCombo._ItemsHolderEl ;\r
+               var iMaxHeight          = specialCombo.PanelMaxHeight ;\r
+\r
+               if ( specialCombo.OnBeforeClick )\r
+                       specialCombo.OnBeforeClick( specialCombo ) ;\r
+\r
+               // This is a tricky thing. We must call the "Load" function, otherwise\r
+               // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).\r
+               if ( FCKBrowserInfo.IsIE )\r
+                       oPanel.Preload( 0, this.offsetHeight, this ) ;\r
+\r
+               if ( oItemsHolder.offsetHeight > iMaxHeight )\r
+//             {\r
+                       oPanelBox.style.height = iMaxHeight + 'px' ;\r
+\r
+//                     if ( FCKBrowserInfo.IsGecko )\r
+//                             oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;\r
+//             }\r
+               else\r
+                       oPanelBox.style.height = '' ;\r
+\r
+//             oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;\r
+\r
+               oPanel.Show( 0, this.offsetHeight, this ) ;\r
+       }\r
+\r
+//     return false ;\r
+}\r
+\r
+/*\r
+Sample Combo Field HTML output:\r
+\r
+<div class="SC_Field" style="width: 80px;">\r
+       <table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">\r
+               <tbody>\r
+                       <tr>\r
+                               <td class="SC_FieldLabel"><label>&nbsp;</label></td>\r
+                               <td class="SC_FieldButton">&nbsp;</td>\r
+                       </tr>\r
+               </tbody>\r
+       </table>\r
+</div>\r
+*/\r