Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947908
fckpanel.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
fckpanel.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 ==
*
* Component that creates floating panels. It is used by many
* other components, like the toolbar items, context menu, etc...
*/
var
FCKPanel
=
function
(
parentWindow
)
{
this
.
IsRTL
=
(
FCKLang
.
Dir
==
'rtl'
)
;
this
.
IsContextMenu
=
false
;
this
.
_LockCounter
=
0
;
this
.
_Window
=
parentWindow
||
window
;
var
oDocument
;
if
(
FCKBrowserInfo
.
IsIE
)
{
// Create the Popup that will hold the panel.
this
.
_Popup
=
this
.
_Window
.
createPopup
()
;
oDocument
=
this
.
Document
=
this
.
_Popup
.
document
;
FCK
.
IECleanup
.
AddItem
(
this
,
FCKPanel_Cleanup
)
;
}
else
{
var
oIFrame
=
this
.
_IFrame
=
this
.
_Window
.
document
.
createElement
(
'iframe'
)
;
oIFrame
.
src
=
'javascript:void(0)'
;
oIFrame
.
allowTransparency
=
true
;
oIFrame
.
frameBorder
=
'0'
;
oIFrame
.
scrolling
=
'no'
;
oIFrame
.
style
.
position
=
'absolute'
;
oIFrame
.
style
.
zIndex
=
FCKConfig
.
FloatingPanelsZIndex
;
oIFrame
.
width
=
oIFrame
.
height
=
0
;
if
(
this
.
_Window
==
window
.
parent
&&
window
.
frameElement
)
window
.
frameElement
.
parentNode
.
insertBefore
(
oIFrame
,
window
.
frameElement
)
;
else
this
.
_Window
.
document
.
body
.
appendChild
(
oIFrame
)
;
var
oIFrameWindow
=
oIFrame
.
contentWindow
;
oDocument
=
this
.
Document
=
oIFrameWindow
.
document
;
// Initialize the IFRAME document body.
oDocument
.
open
()
;
oDocument
.
write
(
'<html><head></head><body style="margin:0px;padding:0px;"><\/body><\/html>'
)
;
oDocument
.
close
()
;
FCKTools
.
AddEventListenerEx
(
oIFrameWindow
,
'focus'
,
FCKPanel_Window_OnFocus
,
this
)
;
FCKTools
.
AddEventListenerEx
(
oIFrameWindow
,
'blur'
,
FCKPanel_Window_OnBlur
,
this
)
;
}
oDocument
.
dir
=
FCKLang
.
Dir
;
oDocument
.
oncontextmenu
=
FCKTools
.
CancelEvent
;
// Create the main DIV that is used as the panel base.
this
.
MainNode
=
oDocument
.
body
.
appendChild
(
oDocument
.
createElement
(
'DIV'
)
)
;
// The "float" property must be set so Firefox calculates the size correcly.
this
.
MainNode
.
style
.
cssFloat
=
this
.
IsRTL
?
'right'
:
'left'
;
}
FCKPanel
.
prototype
.
AppendStyleSheet
=
function
(
styleSheet
)
{
FCKTools
.
AppendStyleSheet
(
this
.
Document
,
styleSheet
)
;
}
FCKPanel
.
prototype
.
Preload
=
function
(
x
,
y
,
relElement
)
{
// The offsetWidth and offsetHeight properties are not available if the
// element is not visible. So we must "show" the popup with no size to
// be able to use that values in the second call (IE only).
if
(
this
.
_Popup
)
this
.
_Popup
.
show
(
x
,
y
,
0
,
0
,
relElement
)
;
}
FCKPanel
.
prototype
.
Show
=
function
(
x
,
y
,
relElement
,
width
,
height
)
{
var
iMainWidth
;
if
(
this
.
_Popup
)
{
// The offsetWidth and offsetHeight properties are not available if the
// element is not visible. So we must "show" the popup with no size to
// be able to use that values in the second call.
this
.
_Popup
.
show
(
x
,
y
,
0
,
0
,
relElement
)
;
// The following lines must be place after the above "show", otherwise it
// doesn't has the desired effect.
this
.
MainNode
.
style
.
width
=
width
?
width
+
'px'
:
''
;
this
.
MainNode
.
style
.
height
=
height
?
height
+
'px'
:
''
;
iMainWidth
=
this
.
MainNode
.
offsetWidth
;
if
(
this
.
IsRTL
)
{
if
(
this
.
IsContextMenu
)
x
=
x
-
iMainWidth
+
1
;
else
if
(
relElement
)
x
=
(
x
*
-
1
)
+
relElement
.
offsetWidth
-
iMainWidth
;
}
// Second call: Show the Popup at the specified location, with the correct size.
this
.
_Popup
.
show
(
x
,
y
,
iMainWidth
,
this
.
MainNode
.
offsetHeight
,
relElement
)
;
if
(
this
.
OnHide
)
{
if
(
this
.
_Timer
)
CheckPopupOnHide
.
call
(
this
,
true
)
;
this
.
_Timer
=
FCKTools
.
SetInterval
(
CheckPopupOnHide
,
100
,
this
)
;
}
}
else
{
// Do not fire OnBlur while the panel is opened.
if
(
typeof
(
FCKFocusManager
)
!=
'undefined'
)
FCKFocusManager
.
Lock
()
;
if
(
this
.
ParentPanel
)
this
.
ParentPanel
.
Lock
()
;
this
.
MainNode
.
style
.
width
=
width
?
width
+
'px'
:
''
;
this
.
MainNode
.
style
.
height
=
height
?
height
+
'px'
:
''
;
iMainWidth
=
this
.
MainNode
.
offsetWidth
;
if
(
!
width
)
this
.
_IFrame
.
width
=
1
;
if
(
!
height
)
this
.
_IFrame
.
height
=
1
;
// This is weird... but with Firefox, we must get the offsetWidth before
// setting the _IFrame size (which returns "0"), and then after that,
// to return the correct width. Remove the first step and it will not
// work when the editor is in RTL.
iMainWidth
=
this
.
MainNode
.
offsetWidth
;
var
oPos
=
FCKTools
.
GetElementPosition
(
relElement
.
nodeType
==
9
?
(
FCKTools
.
IsStrictMode
(
relElement
)
?
relElement
.
documentElement
:
relElement
.
body
)
:
relElement
,
this
.
_Window
)
;
if
(
this
.
IsRTL
&&
!
this
.
IsContextMenu
)
x
=
(
x
*
-
1
)
;
x
+=
oPos
.
X
;
y
+=
oPos
.
Y
;
if
(
this
.
IsRTL
)
{
if
(
this
.
IsContextMenu
)
x
=
x
-
iMainWidth
+
1
;
else
if
(
relElement
)
x
=
x
+
relElement
.
offsetWidth
-
iMainWidth
;
}
else
{
var
oViewPaneSize
=
FCKTools
.
GetViewPaneSize
(
this
.
_Window
)
;
var
oScrollPosition
=
FCKTools
.
GetScrollPosition
(
this
.
_Window
)
;
var
iViewPaneHeight
=
oViewPaneSize
.
Height
+
oScrollPosition
.
Y
;
var
iViewPaneWidth
=
oViewPaneSize
.
Width
+
oScrollPosition
.
X
;
if
(
(
x
+
iMainWidth
)
>
iViewPaneWidth
)
x
-=
x
+
iMainWidth
-
iViewPaneWidth
;
if
(
(
y
+
this
.
MainNode
.
offsetHeight
)
>
iViewPaneHeight
)
y
-=
y
+
this
.
MainNode
.
offsetHeight
-
iViewPaneHeight
;
}
if
(
x
<
0
)
x
=
0
;
// Set the context menu DIV in the specified location.
this
.
_IFrame
.
style
.
left
=
x
+
'px'
;
this
.
_IFrame
.
style
.
top
=
y
+
'px'
;
var
iWidth
=
iMainWidth
;
var
iHeight
=
this
.
MainNode
.
offsetHeight
;
this
.
_IFrame
.
width
=
iWidth
;
this
.
_IFrame
.
height
=
iHeight
;
// Move the focus to the IFRAME so we catch the "onblur".
this
.
_IFrame
.
contentWindow
.
focus
()
;
}
this
.
_IsOpened
=
true
;
FCKTools
.
RunFunction
(
this
.
OnShow
,
this
)
;
}
FCKPanel
.
prototype
.
Hide
=
function
(
ignoreOnHide
)
{
if
(
this
.
_Popup
)
this
.
_Popup
.
hide
()
;
else
{
if
(
!
this
.
_IsOpened
)
return
;
// Enable the editor to fire the "OnBlur".
if
(
typeof
(
FCKFocusManager
)
!=
'undefined'
)
FCKFocusManager
.
Unlock
()
;
// It is better to set the sizes to 0, otherwise Firefox would have
// rendering problems.
this
.
_IFrame
.
width
=
this
.
_IFrame
.
height
=
0
;
this
.
_IsOpened
=
false
;
if
(
this
.
ParentPanel
)
this
.
ParentPanel
.
Unlock
()
;
if
(
!
ignoreOnHide
)
FCKTools
.
RunFunction
(
this
.
OnHide
,
this
)
;
}
}
FCKPanel
.
prototype
.
CheckIsOpened
=
function
()
{
if
(
this
.
_Popup
)
return
this
.
_Popup
.
isOpen
;
else
return
this
.
_IsOpened
;
}
FCKPanel
.
prototype
.
CreateChildPanel
=
function
()
{
var
oWindow
=
this
.
_Popup
?
FCKTools
.
GetDocumentWindow
(
this
.
Document
)
:
this
.
_Window
;
var
oChildPanel
=
new
FCKPanel
(
oWindow
,
true
)
;
oChildPanel
.
ParentPanel
=
this
;
return
oChildPanel
;
}
FCKPanel
.
prototype
.
Lock
=
function
()
{
this
.
_LockCounter
++
;
}
FCKPanel
.
prototype
.
Unlock
=
function
()
{
if
(
--
this
.
_LockCounter
==
0
&&
!
this
.
HasFocus
)
this
.
Hide
()
;
}
/* Events */
function
FCKPanel_Window_OnFocus
(
e
,
panel
)
{
panel
.
HasFocus
=
true
;
}
function
FCKPanel_Window_OnBlur
(
e
,
panel
)
{
panel
.
HasFocus
=
false
;
if
(
panel
.
_LockCounter
==
0
)
FCKTools
.
RunFunction
(
panel
.
Hide
,
panel
)
;
}
function
CheckPopupOnHide
(
forceHide
)
{
if
(
forceHide
||
!
this
.
_Popup
.
isOpen
)
{
window
.
clearInterval
(
this
.
_Timer
)
;
this
.
_Timer
=
null
;
FCKTools
.
RunFunction
(
this
.
OnHide
,
this
)
;
}
}
function
FCKPanel_Cleanup
()
{
this
.
_Popup
=
null
;
this
.
_Window
=
null
;
this
.
Document
=
null
;
this
.
MainNode
=
null
;
}
File Metadata
Details
Attached
Mime Type
text/html
Expires
Sat, Apr 26, 13:56 (21 h, 18 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23439
Default Alt Text
fckpanel.js (8 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment