Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947580
fckspecialcombo.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
10 KB
Subscribers
None
fckspecialcombo.js
View Options
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2007 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* FCKSpecialCombo Class: represents a special combo.
*/
var
FCKSpecialCombo
=
function
(
caption
,
fieldWidth
,
panelWidth
,
panelMaxHeight
,
parentWindow
)
{
// Default properties values.
this
.
FieldWidth
=
fieldWidth
||
100
;
this
.
PanelWidth
=
panelWidth
||
150
;
this
.
PanelMaxHeight
=
panelMaxHeight
||
150
;
this
.
Label
=
' '
;
this
.
Caption
=
caption
;
this
.
Tooltip
=
caption
;
this
.
Style
=
FCK_TOOLBARITEM_ICONTEXT
;
this
.
Enabled
=
true
;
this
.
Items
=
new
Object
()
;
this
.
_Panel
=
new
FCKPanel
(
parentWindow
||
window
,
true
)
;
this
.
_Panel
.
AppendStyleSheet
(
FCKConfig
.
SkinPath
+
'fck_editor.css'
)
;
this
.
_PanelBox
=
this
.
_Panel
.
MainNode
.
appendChild
(
this
.
_Panel
.
Document
.
createElement
(
'DIV'
)
)
;
this
.
_PanelBox
.
className
=
'SC_Panel'
;
this
.
_PanelBox
.
style
.
width
=
this
.
PanelWidth
+
'px'
;
this
.
_PanelBox
.
innerHTML
=
'<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>'
;
this
.
_ItemsHolderEl
=
this
.
_PanelBox
.
getElementsByTagName
(
'TD'
)[
0
]
;
if
(
FCK
.
IECleanup
)
FCK
.
IECleanup
.
AddItem
(
this
,
FCKSpecialCombo_Cleanup
)
;
// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
// this._Panel.Create() ;
// this._Panel.PanelDiv.className += ' SC_Panel' ;
// this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
}
function
FCKSpecialCombo_ItemOnMouseOver
()
{
this
.
className
+=
' SC_ItemOver'
;
}
function
FCKSpecialCombo_ItemOnMouseOut
()
{
this
.
className
=
this
.
originalClass
;
}
function
FCKSpecialCombo_ItemOnClick
()
{
this
.
className
=
this
.
originalClass
;
this
.
FCKSpecialCombo
.
_Panel
.
Hide
()
;
this
.
FCKSpecialCombo
.
SetLabel
(
this
.
FCKItemLabel
)
;
if
(
typeof
(
this
.
FCKSpecialCombo
.
OnSelect
)
==
'function'
)
this
.
FCKSpecialCombo
.
OnSelect
(
this
.
FCKItemID
,
this
)
;
}
FCKSpecialCombo
.
prototype
.
AddItem
=
function
(
id
,
html
,
label
,
bgColor
)
{
// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
var
oDiv
=
this
.
_ItemsHolderEl
.
appendChild
(
this
.
_Panel
.
Document
.
createElement
(
'DIV'
)
)
;
oDiv
.
className
=
oDiv
.
originalClass
=
'SC_Item'
;
oDiv
.
innerHTML
=
html
;
oDiv
.
FCKItemID
=
id
;
oDiv
.
FCKItemLabel
=
label
||
id
;
oDiv
.
FCKSpecialCombo
=
this
;
oDiv
.
Selected
=
false
;
// In IE, the width must be set so the borders are shown correctly when the content overflows.
if
(
FCKBrowserInfo
.
IsIE
)
oDiv
.
style
.
width
=
'100%'
;
if
(
bgColor
)
oDiv
.
style
.
backgroundColor
=
bgColor
;
oDiv
.
onmouseover
=
FCKSpecialCombo_ItemOnMouseOver
;
oDiv
.
onmouseout
=
FCKSpecialCombo_ItemOnMouseOut
;
oDiv
.
onclick
=
FCKSpecialCombo_ItemOnClick
;
this
.
Items
[
id
.
toString
().
toLowerCase
()
]
=
oDiv
;
return
oDiv
;
}
FCKSpecialCombo
.
prototype
.
SelectItem
=
function
(
itemId
)
{
itemId
=
itemId
?
itemId
.
toString
().
toLowerCase
()
:
''
;
var
oDiv
=
this
.
Items
[
itemId
]
;
if
(
oDiv
)
{
oDiv
.
className
=
oDiv
.
originalClass
=
'SC_ItemSelected'
;
oDiv
.
Selected
=
true
;
}
}
FCKSpecialCombo
.
prototype
.
SelectItemByLabel
=
function
(
itemLabel
,
setLabel
)
{
for
(
var
id
in
this
.
Items
)
{
var
oDiv
=
this
.
Items
[
id
]
;
if
(
oDiv
.
FCKItemLabel
==
itemLabel
)
{
oDiv
.
className
=
oDiv
.
originalClass
=
'SC_ItemSelected'
;
oDiv
.
Selected
=
true
;
if
(
setLabel
)
this
.
SetLabel
(
itemLabel
)
;
}
}
}
FCKSpecialCombo
.
prototype
.
DeselectAll
=
function
(
clearLabel
)
{
for
(
var
i
in
this
.
Items
)
{
this
.
Items
[
i
].
className
=
this
.
Items
[
i
].
originalClass
=
'SC_Item'
;
this
.
Items
[
i
].
Selected
=
false
;
}
if
(
clearLabel
)
this
.
SetLabel
(
''
)
;
}
FCKSpecialCombo
.
prototype
.
SetLabelById
=
function
(
id
)
{
id
=
id
?
id
.
toString
().
toLowerCase
()
:
''
;
var
oDiv
=
this
.
Items
[
id
]
;
this
.
SetLabel
(
oDiv
?
oDiv
.
FCKItemLabel
:
''
)
;
}
FCKSpecialCombo
.
prototype
.
SetLabel
=
function
(
text
)
{
this
.
Label
=
text
.
length
==
0
?
' '
:
text
;
if
(
this
.
_LabelEl
)
{
this
.
_LabelEl
.
innerHTML
=
this
.
Label
;
// It may happen that the label is some HTML, including tags. This
// would be a problem because when the user click on those tags, the
// combo will get the selection from the editing area. So we must
// disable any kind of selection here.
FCKTools
.
DisableSelection
(
this
.
_LabelEl
)
;
}
}
FCKSpecialCombo
.
prototype
.
SetEnabled
=
function
(
isEnabled
)
{
this
.
Enabled
=
isEnabled
;
this
.
_OuterTable
.
className
=
isEnabled
?
''
:
'SC_FieldDisabled'
;
}
FCKSpecialCombo
.
prototype
.
Create
=
function
(
targetElement
)
{
var
oDoc
=
FCKTools
.
GetElementDocument
(
targetElement
)
;
var
eOuterTable
=
this
.
_OuterTable
=
targetElement
.
appendChild
(
oDoc
.
createElement
(
'TABLE'
)
)
;
eOuterTable
.
cellPadding
=
0
;
eOuterTable
.
cellSpacing
=
0
;
eOuterTable
.
insertRow
(
-
1
)
;
var
sClass
;
var
bShowLabel
;
switch
(
this
.
Style
)
{
case
FCK_TOOLBARITEM_ONLYICON
:
sClass
=
'TB_ButtonType_Icon'
;
bShowLabel
=
false
;
break
;
case
FCK_TOOLBARITEM_ONLYTEXT
:
sClass
=
'TB_ButtonType_Text'
;
bShowLabel
=
false
;
break
;
case
FCK_TOOLBARITEM_ICONTEXT
:
bShowLabel
=
true
;
break
;
}
if
(
this
.
Caption
&&
this
.
Caption
.
length
>
0
&&
bShowLabel
)
{
var
oCaptionCell
=
eOuterTable
.
rows
[
0
].
insertCell
(
-
1
)
;
oCaptionCell
.
innerHTML
=
this
.
Caption
;
oCaptionCell
.
className
=
'SC_FieldCaption'
;
}
// Create the main DIV element.
var
oField
=
FCKTools
.
AppendElement
(
eOuterTable
.
rows
[
0
].
insertCell
(
-
1
),
'div'
)
;
if
(
bShowLabel
)
{
oField
.
className
=
'SC_Field'
;
oField
.
style
.
width
=
this
.
FieldWidth
+
'px'
;
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>'
;
this
.
_LabelEl
=
oField
.
getElementsByTagName
(
'label'
)[
0
]
;
// Memory Leak
this
.
_LabelEl
.
innerHTML
=
this
.
Label
;
}
else
{
oField
.
className
=
'TB_Button_Off'
;
//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>' ;
//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>' ;
// Gets the correct CSS class to use for the specified style (param).
oField
.
innerHTML
=
'<table title="'
+
this
.
Tooltip
+
'" class="'
+
sClass
+
'" cellspacing="0" cellpadding="0" border="0">'
+
'<tr>'
+
//'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +
'<td><img class="TB_Button_Padding" src="'
+
FCK_SPACER_PATH
+
'" /></td>'
+
'<td class="TB_Text">'
+
this
.
Caption
+
'</td>'
+
'<td><img class="TB_Button_Padding" src="'
+
FCK_SPACER_PATH
+
'" /></td>'
+
'<td class="TB_ButtonArrow"><img src="'
+
FCKConfig
.
SkinPath
+
'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'
+
'<td><img class="TB_Button_Padding" src="'
+
FCK_SPACER_PATH
+
'" /></td>'
+
'</tr>'
+
'</table>'
;
}
// Events Handlers
oField
.
SpecialCombo
=
this
;
oField
.
onmouseover
=
FCKSpecialCombo_OnMouseOver
;
oField
.
onmouseout
=
FCKSpecialCombo_OnMouseOut
;
oField
.
onclick
=
FCKSpecialCombo_OnClick
;
FCKTools
.
DisableSelection
(
this
.
_Panel
.
Document
.
body
)
;
}
function
FCKSpecialCombo_Cleanup
()
{
this
.
_LabelEl
=
null
;
this
.
_OuterTable
=
null
;
this
.
_ItemsHolderEl
=
null
;
this
.
_PanelBox
=
null
;
if
(
this
.
Items
)
{
for
(
var
key
in
this
.
Items
)
this
.
Items
[
key
]
=
null
;
}
}
function
FCKSpecialCombo_OnMouseOver
()
{
if
(
this
.
SpecialCombo
.
Enabled
)
{
switch
(
this
.
SpecialCombo
.
Style
)
{
case
FCK_TOOLBARITEM_ONLYICON
:
this
.
className
=
'TB_Button_On_Over'
;
break
;
case
FCK_TOOLBARITEM_ONLYTEXT
:
this
.
className
=
'TB_Button_On_Over'
;
break
;
case
FCK_TOOLBARITEM_ICONTEXT
:
this
.
className
=
'SC_Field SC_FieldOver'
;
break
;
}
}
}
function
FCKSpecialCombo_OnMouseOut
()
{
switch
(
this
.
SpecialCombo
.
Style
)
{
case
FCK_TOOLBARITEM_ONLYICON
:
this
.
className
=
'TB_Button_Off'
;
break
;
case
FCK_TOOLBARITEM_ONLYTEXT
:
this
.
className
=
'TB_Button_Off'
;
break
;
case
FCK_TOOLBARITEM_ICONTEXT
:
this
.
className
=
'SC_Field'
;
break
;
}
}
function
FCKSpecialCombo_OnClick
(
e
)
{
// For Mozilla we must stop the event propagation to avoid it hiding
// the panel because of a click outside of it.
// if ( e )
// {
// e.stopPropagation() ;
// FCKPanelEventHandlers.OnDocumentClick( e ) ;
// }
var
oSpecialCombo
=
this
.
SpecialCombo
;
if
(
oSpecialCombo
.
Enabled
)
{
var
oPanel
=
oSpecialCombo
.
_Panel
;
var
oPanelBox
=
oSpecialCombo
.
_PanelBox
;
var
oItemsHolder
=
oSpecialCombo
.
_ItemsHolderEl
;
var
iMaxHeight
=
oSpecialCombo
.
PanelMaxHeight
;
if
(
oSpecialCombo
.
OnBeforeClick
)
oSpecialCombo
.
OnBeforeClick
(
oSpecialCombo
)
;
// This is a tricky thing. We must call the "Load" function, otherwise
// it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
if
(
FCKBrowserInfo
.
IsIE
)
oPanel
.
Preload
(
0
,
this
.
offsetHeight
,
this
)
;
if
(
oItemsHolder
.
offsetHeight
>
iMaxHeight
)
// {
oPanelBox
.
style
.
height
=
iMaxHeight
+
'px'
;
// if ( FCKBrowserInfo.IsGecko )
// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
// }
else
oPanelBox
.
style
.
height
=
''
;
// oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ;
oPanel
.
Show
(
0
,
this
.
offsetHeight
,
this
)
;
}
// return false ;
}
/*
Sample Combo Field HTML output:
<div class="SC_Field" style="width: 80px;">
<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>
</div>
*/
File Metadata
Details
Attached
Mime Type
text/html
Expires
Sat, Apr 26, 12:28 (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26118
Default Alt Text
fckspecialcombo.js (10 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment