fckdialog.html
812 lines
| 22.2 KiB
| text/html
|
HtmlLexer
|
r0 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
<!-- | ||||
* FCKeditor - The text editor for Internet - http://www.fckeditor.net | ||||
* Copyright (C) 2003-2008 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 == | ||||
* | ||||
* This page is used by all dialog box as the container. | ||||
--> | ||||
<html xmlns="http://www.w3.org/1999/xhtml"> | ||||
<head> | ||||
<title></title> | ||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||||
<meta name="robots" content="noindex, nofollow" /> | ||||
<script type="text/javascript"> | ||||
// <![CDATA[ | ||||
// Domain relaxation logic. | ||||
(function() | ||||
{ | ||||
var d = document.domain ; | ||||
while ( true ) | ||||
{ | ||||
// Test if we can access a parent property. | ||||
try | ||||
{ | ||||
var parentDomain = ( Args().TopWindow || E ).document.domain ; | ||||
if ( document.domain != parentDomain ) | ||||
document.domain = parentDomain ; | ||||
break ; | ||||
} | ||||
catch( e ) {} | ||||
// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ... | ||||
d = d.replace( /.*?(?:\.|$)/, '' ) ; | ||||
if ( d.length == 0 ) | ||||
break ; // It was not able to detect the domain. | ||||
document.domain = d ; | ||||
} | ||||
})() ; | ||||
var E = frameElement._DialogArguments.Editor ; | ||||
// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE. | ||||
// So let's use functions to access its members instead. | ||||
function Args() | ||||
{ | ||||
return frameElement._DialogArguments ; | ||||
} | ||||
function ParentDialog( dialog ) | ||||
{ | ||||
return dialog ? dialog._ParentDialog : frameElement._ParentDialog ; | ||||
} | ||||
var FCK = E.FCK ; | ||||
var FCKTools = E.FCKTools ; | ||||
var FCKDomTools = E.FCKDomTools ; | ||||
var FCKDialog = E.FCKDialog ; | ||||
var FCKBrowserInfo = E.FCKBrowserInfo ; | ||||
var FCKConfig = E.FCKConfig ; | ||||
// Steal the focus so that the caret would no longer stay in the editor iframe. | ||||
window.focus() ; | ||||
// Sets the Skin CSS | ||||
document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ; | ||||
// Sets the language direction. | ||||
var langDir = document.documentElement.dir = E.FCKLang.Dir ; | ||||
// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser. | ||||
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 ) | ||||
document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ; | ||||
FCKTools.RegisterDollarFunction( window ) ; | ||||
// Resize related functions. | ||||
var Sizer = function() | ||||
{ | ||||
var bAutoSize = false ; | ||||
var retval = { | ||||
// Sets whether the dialog should auto-resize according to its content's height. | ||||
SetAutoSize : function( autoSize ) | ||||
{ | ||||
bAutoSize = autoSize ; | ||||
this.RefreshSize() ; | ||||
}, | ||||
// Fit the dialog container's layout to the inner iframe's external size. | ||||
RefreshContainerSize : function() | ||||
{ | ||||
var frmMain = $( 'frmMain' ) ; | ||||
if ( frmMain ) | ||||
{ | ||||
// Get the container size. | ||||
var height = $( 'contents' ).offsetHeight ; | ||||
// Subtract the size of other elements. | ||||
height -= $( 'TitleArea' ).offsetHeight ; | ||||
height -= $( 'TabsRow' ).offsetHeight ; | ||||
height -= $( 'PopupButtons' ).offsetHeight ; | ||||
frmMain.style.height = Math.max( height, 0 ) + 'px' ; | ||||
} | ||||
}, | ||||
// Resize and re-layout the dialog. | ||||
// Triggers the onresize event for the layout logic. | ||||
ResizeDialog : function( width, height ) | ||||
{ | ||||
FCKDomTools.SetElementStyles( window.frameElement, | ||||
{ | ||||
'width' : width + 'px', | ||||
'height' : height + 'px' | ||||
} ) ; | ||||
// If the skin have defined a function for resize fixes, call it now. | ||||
if ( typeof window.DoResizeFixes == 'function' ) | ||||
window.DoResizeFixes() ; | ||||
}, | ||||
// if bAutoSize is true, automatically fit the dialog size and layout to | ||||
// accomodate the inner iframe's internal height. | ||||
// if bAutoSize is false, then only the layout logic for the dialog decorations | ||||
// is run to accomodate the inner iframe's external height. | ||||
RefreshSize : function() | ||||
{ | ||||
if ( bAutoSize ) | ||||
{ | ||||
var frmMain = $( 'frmMain' ) ; | ||||
var innerDoc = frmMain.contentWindow.document ; | ||||
var isStrict = FCKTools.IsStrictMode( innerDoc ) ; | ||||
// Get the size of the frame contents. | ||||
var innerWidth = isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ; | ||||
var innerHeight = isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ; | ||||
// Get the current frame size. | ||||
var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ; | ||||
var deltaWidth = innerWidth - frameSize.Width ; | ||||
var deltaHeight = innerHeight - frameSize.Height ; | ||||
// If the contents fits the current size. | ||||
if ( deltaWidth <= 0 && deltaHeight <= 0 ) | ||||
return ; | ||||
var dialogWidth = frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ; | ||||
var dialogHeight = frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ; | ||||
this.ResizeDialog( dialogWidth, dialogHeight ) ; | ||||
} | ||||
this.RefreshContainerSize() ; | ||||
} | ||||
} | ||||
/** | ||||
* Safari seems to have a bug with the time when RefreshSize() is executed - it | ||||
* thinks frmMain's innerHeight is 0 if we query the value too soon after the | ||||
* page is loaded in some circumstances. (#1316) | ||||
* TODO : Maybe this is not needed anymore after #35. | ||||
*/ | ||||
if ( FCKBrowserInfo.IsSafari ) | ||||
{ | ||||
var originalRefreshSize = retval.RefreshSize ; | ||||
retval.RefreshSize = function() | ||||
{ | ||||
FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ; | ||||
} | ||||
} | ||||
/** | ||||
* IE6 has a similar bug where it sometimes thinks $('contents') has an | ||||
* offsetHeight of 0 (#2114). | ||||
*/ | ||||
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 ) | ||||
{ | ||||
var originalRefreshContainerSize = retval.RefreshContainerSize ; | ||||
retval.RefreshContainerSize = function() | ||||
{ | ||||
FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ; | ||||
} | ||||
} | ||||
window.onresize = function() | ||||
{ | ||||
retval.RefreshContainerSize() ; | ||||
} | ||||
window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ; | ||||
return retval ; | ||||
}() ; | ||||
// Manages the throbber image that appears if the inner part of dialog is taking too long to load. | ||||
var Throbber = function() | ||||
{ | ||||
var timer ; | ||||
var updateThrobber = function() | ||||
{ | ||||
var throbberParent = $( 'throbberBlock' ) ; | ||||
var throbberBlocks = throbberParent.childNodes ; | ||||
var lastClass = throbberParent.lastChild.className ; | ||||
// From the last to the second one, copy the class from the previous one. | ||||
for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- ) | ||||
throbberBlocks[i].className = throbberBlocks[i-1].className ; | ||||
// For the first one, copy the last class (rotation). | ||||
throbberBlocks[0].className = lastClass ; | ||||
} | ||||
return { | ||||
Show : function( waitMilliseconds ) | ||||
{ | ||||
// Auto-setup the Show function to be called again after the | ||||
// requested amount of time. | ||||
if ( waitMilliseconds && waitMilliseconds > 0 ) | ||||
{ | ||||
timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ; | ||||
return ; | ||||
} | ||||
var throbberParent = $( 'throbberBlock' ) ; | ||||
if (throbberParent.childNodes.length == 0) | ||||
{ | ||||
// Create the throbber blocks. | ||||
var classIds = [ 1,2,3,4,5,4,3,2 ] ; | ||||
while ( classIds.length > 0 ) | ||||
throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ; | ||||
} | ||||
// Center the throbber. | ||||
var frm = $( 'contents' ) ; | ||||
var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ; | ||||
var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ; | ||||
var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ; | ||||
throbberParent.style.left = parseInt( x, 10 ) + 'px' ; | ||||
throbberParent.style.top = parseInt( y, 10 ) + 'px' ; | ||||
// Show it. | ||||
throbberParent.style.visibility = '' ; | ||||
// Hide tabs and buttons: | ||||
$( 'Tabs' ).style.visibility = 'hidden' ; | ||||
$( 'PopupButtons' ).style.visibility = 'hidden' ; | ||||
// Setup the animation interval. | ||||
timer = setInterval( updateThrobber, 100 ) ; | ||||
}, | ||||
Hide : function() | ||||
{ | ||||
if ( timer ) | ||||
{ | ||||
clearInterval( timer ) ; | ||||
timer = null ; | ||||
} | ||||
$( 'throbberBlock' ).style.visibility = 'hidden' ; | ||||
// Show tabs and buttons: | ||||
$( 'Tabs' ).style.visibility = '' ; | ||||
$( 'PopupButtons' ).style.visibility = '' ; | ||||
} | ||||
} ; | ||||
}() ; | ||||
// Drag and drop handlers. | ||||
var DragAndDrop = function() | ||||
{ | ||||
var registeredWindows = [] ; | ||||
var lastCoords ; | ||||
var currentPos ; | ||||
var cleanUpHandlers = function() | ||||
{ | ||||
for ( var i = 0 ; i < registeredWindows.length ; i++ ) | ||||
{ | ||||
FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ; | ||||
FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ; | ||||
} | ||||
} | ||||
var dragMouseMoveHandler = function( evt ) | ||||
{ | ||||
if ( !lastCoords ) | ||||
return ; | ||||
if ( !evt ) | ||||
evt = FCKTools.GetElementDocument( this ).parentWindow.event ; | ||||
// Updated the last coordinates. | ||||
var currentCoords = | ||||
{ | ||||
x : evt.screenX, | ||||
y : evt.screenY | ||||
} ; | ||||
currentPos = | ||||
{ | ||||
x : currentPos.x + ( currentCoords.x - lastCoords.x ), | ||||
y : currentPos.y + ( currentCoords.y - lastCoords.y ) | ||||
} ; | ||||
lastCoords = currentCoords ; | ||||
frameElement.style.left = currentPos.x + 'px' ; | ||||
frameElement.style.top = currentPos.y + 'px' ; | ||||
if ( evt.preventDefault ) | ||||
evt.preventDefault() ; | ||||
else | ||||
evt.returnValue = false ; | ||||
} | ||||
var dragMouseUpHandler = function( evt ) | ||||
{ | ||||
if ( !lastCoords ) | ||||
return ; | ||||
if ( !evt ) | ||||
evt = FCKTools.GetElementDocument( this ).parentWindow.event ; | ||||
cleanUpHandlers() ; | ||||
lastCoords = null ; | ||||
} | ||||
return { | ||||
MouseDownHandler : function( evt ) | ||||
{ | ||||
var view = null ; | ||||
if ( !evt ) | ||||
{ | ||||
view = FCKTools.GetElementDocument( this ).parentWindow ; | ||||
evt = view.event ; | ||||
} | ||||
else | ||||
view = evt.view ; | ||||
var target = evt.srcElement || evt.target ; | ||||
if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' ) | ||||
return ; | ||||
lastCoords = | ||||
{ | ||||
x : evt.screenX, | ||||
y : evt.screenY | ||||
} ; | ||||
// Save the current IFRAME position. | ||||
currentPos = | ||||
{ | ||||
x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ), | ||||
y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 ) | ||||
} ; | ||||
for ( var i = 0 ; i < registeredWindows.length ; i++ ) | ||||
{ | ||||
FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ; | ||||
FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ; | ||||
} | ||||
if ( evt.preventDefault ) | ||||
evt.preventDefault() ; | ||||
else | ||||
evt.returnValue = false ; | ||||
}, | ||||
RegisterHandlers : function( w ) | ||||
{ | ||||
registeredWindows.push( w ) ; | ||||
} | ||||
} | ||||
}() ; | ||||
// Selection related functions. | ||||
//(Became simple shortcuts after the fix for #1990) | ||||
var Selection = | ||||
{ | ||||
/** | ||||
* Ensures that the editing area contains an active selection. This is a | ||||
* requirement for IE, as it looses the selection when the focus moves to other | ||||
* frames. | ||||
*/ | ||||
EnsureSelection : function() | ||||
{ | ||||
FCK.Selection.Restore() ; | ||||
}, | ||||
/** | ||||
* Get the FCKSelection object for the editor instance. | ||||
*/ | ||||
GetSelection : function() | ||||
{ | ||||
return FCK.Selection ; | ||||
}, | ||||
/** | ||||
* Get the selected element in the editing area (for object selections). | ||||
*/ | ||||
GetSelectedElement : function() | ||||
{ | ||||
return FCK.Selection.GetSelectedElement() ; | ||||
} | ||||
} | ||||
// Tab related functions. | ||||
var Tabs = function() | ||||
{ | ||||
// Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick | ||||
// would build circular references with the element references inside and cause memory leaks in IE6. | ||||
var oTabs = new Object() ; | ||||
var setSelectedTab = function( tabCode ) | ||||
{ | ||||
for ( var sCode in oTabs ) | ||||
{ | ||||
if ( sCode == tabCode ) | ||||
$( oTabs[sCode] ).className = 'PopupTabSelected' ; | ||||
else | ||||
$( oTabs[sCode] ).className = 'PopupTab' ; | ||||
} | ||||
if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' ) | ||||
window.frames["frmMain"].OnDialogTabChange( tabCode ) ; | ||||
} | ||||
function TabDiv_OnClick() | ||||
{ | ||||
setSelectedTab( this.TabCode ) ; | ||||
} | ||||
window.AddTab = function( tabCode, tabText, startHidden ) | ||||
{ | ||||
if ( typeof( oTabs[ tabCode ] ) != 'undefined' ) | ||||
return ; | ||||
var eTabsRow = $( 'Tabs' ) ; | ||||
var oCell = eTabsRow.insertCell( eTabsRow.cells.length - 1 ) ; | ||||
oCell.noWrap = true ; | ||||
var oDiv = document.createElement( 'DIV' ) ; | ||||
oDiv.className = 'PopupTab' ; | ||||
oDiv.innerHTML = tabText ; | ||||
oDiv.TabCode = tabCode ; | ||||
oDiv.onclick = TabDiv_OnClick ; | ||||
oDiv.id = Math.random() ; | ||||
if ( startHidden ) | ||||
oDiv.style.display = 'none' ; | ||||
eTabsRow = $( 'TabsRow' ) ; | ||||
oCell.appendChild( oDiv ) ; | ||||
if ( eTabsRow.style.display == 'none' ) | ||||
{ | ||||
var eTitleArea = $( 'TitleArea' ) ; | ||||
eTitleArea.className = 'PopupTitle' ; | ||||
oDiv.className = 'PopupTabSelected' ; | ||||
eTabsRow.style.display = '' ; | ||||
if ( window.onresize ) | ||||
window.onresize() ; | ||||
} | ||||
oTabs[ tabCode ] = oDiv.id ; | ||||
FCKTools.DisableSelection( oDiv ) ; | ||||
} ; | ||||
window.SetSelectedTab = setSelectedTab ; | ||||
window.SetTabVisibility = function( tabCode, isVisible ) | ||||
{ | ||||
var oTab = $( oTabs[ tabCode ] ) ; | ||||
oTab.style.display = isVisible ? '' : 'none' ; | ||||
if ( ! isVisible && oTab.className == 'PopupTabSelected' ) | ||||
{ | ||||
for ( var sCode in oTabs ) | ||||
{ | ||||
if ( $( oTabs[sCode] ).style.display != 'none' ) | ||||
{ | ||||
setSelectedTab( sCode ) ; | ||||
break ; | ||||
} | ||||
} | ||||
} | ||||
} ; | ||||
}() ; | ||||
// readystatechange handler for registering drag and drop handlers in cover | ||||
// iframes, defined out here to avoid memory leak. | ||||
// Do NOT put this function as a private function as it will induce memory leak | ||||
// in IE and it's not detectable with Drip or sIEve and undetectable leaks are | ||||
// really nasty (sigh). | ||||
var onReadyRegister = function() | ||||
{ | ||||
if ( this.readyState != 'complete' ) | ||||
return ; | ||||
DragAndDrop.RegisterHandlers( this.contentWindow ) ; | ||||
} ; | ||||
// The business logic of the dialog, dealing with operational things like | ||||
// dialog open/dialog close/enable/disable/etc. | ||||
(function() | ||||
{ | ||||
var setOnKeyDown = function( targetDocument ) | ||||
{ | ||||
targetDocument.onkeydown = function ( e ) | ||||
{ | ||||
e = e || event || this.parentWindow.event ; | ||||
switch ( e.keyCode ) | ||||
{ | ||||
case 13 : // ENTER | ||||
var oTarget = e.srcElement || e.target ; | ||||
if ( oTarget.tagName == 'TEXTAREA' ) | ||||
return true ; | ||||
Ok() ; | ||||
return false ; | ||||
case 27 : // ESC | ||||
Cancel() ; | ||||
return false ; | ||||
} | ||||
return true ; | ||||
} | ||||
} ; | ||||
var contextMenuBlocker = function( e ) | ||||
{ | ||||
var sTagName = e.target.tagName ; | ||||
if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) ) | ||||
e.preventDefault() ; | ||||
} ; | ||||
var disableContextMenu = function( targetDocument ) | ||||
{ | ||||
if ( FCKBrowserInfo.IsIE ) | ||||
return ; | ||||
targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ; | ||||
} ; | ||||
// Program entry point. | ||||
window.Init = function() | ||||
{ | ||||
// Start the throbber timer. | ||||
Throbber.Show( 1000 ) ; | ||||
Sizer.RefreshContainerSize() ; | ||||
LoadInnerDialog() ; | ||||
FCKTools.DisableSelection( document.body ) ; | ||||
// Make the title area draggable. | ||||
var titleElement = $( 'header' ) ; | ||||
titleElement.onmousedown = DragAndDrop.MouseDownHandler ; | ||||
// Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic. | ||||
DragAndDrop.RegisterHandlers( window ) ; | ||||
DragAndDrop.RegisterHandlers( Args().TopWindow ) ; | ||||
// Disable the previous dialog if it exists. | ||||
if ( ParentDialog() ) | ||||
{ | ||||
ParentDialog().contentWindow.SetEnabled( false ) ; | ||||
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 ) | ||||
{ | ||||
var currentParent = ParentDialog() ; | ||||
while ( currentParent ) | ||||
{ | ||||
var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ; | ||||
if ( blockerFrame.readyState == 'complete' ) | ||||
DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ; | ||||
else | ||||
blockerFrame.onreadystatechange = onReadyRegister ; | ||||
currentParent = ParentDialog( currentParent ) ; | ||||
} | ||||
} | ||||
else | ||||
{ | ||||
var currentParent = ParentDialog() ; | ||||
while ( currentParent ) | ||||
{ | ||||
DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ; | ||||
currentParent = ParentDialog( currentParent ) ; | ||||
} | ||||
} | ||||
} | ||||
// If this is the only dialog on screen, enable the background cover. | ||||
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 ) | ||||
{ | ||||
var blockerFrame = FCKDialog.GetCover().firstChild ; | ||||
if ( blockerFrame.readyState == 'complete' ) | ||||
DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ; | ||||
else | ||||
blockerFrame.onreadystatechange = onReadyRegister; | ||||
} | ||||
// Add Enter/Esc hotkeys and disable context menu for the dialog. | ||||
setOnKeyDown( document ) ; | ||||
disableContextMenu( document ) ; | ||||
} ; | ||||
window.LoadInnerDialog = function() | ||||
{ | ||||
if ( window.onresize ) | ||||
window.onresize() ; | ||||
// First of all, translate the dialog box contents. | ||||
E.FCKLanguageManager.TranslatePage( document ) ; | ||||
// Create the IFRAME that holds the dialog contents. | ||||
$( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ; | ||||
} ; | ||||
window.InnerDialogLoaded = function() | ||||
{ | ||||
// If the dialog has been closed before the iframe is loaded, do nothing. | ||||
if ( !frameElement.parentNode ) | ||||
return null ; | ||||
Throbber.Hide() ; | ||||
var frmMain = $('frmMain') ; | ||||
var innerWindow = frmMain.contentWindow ; | ||||
var innerDoc = innerWindow.document ; | ||||
// Show the loaded iframe. | ||||
frmMain.style.visibility = '' ; | ||||
// Set the language direction. | ||||
innerDoc.documentElement.dir = langDir ; | ||||
// Sets the Skin CSS. | ||||
innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ; | ||||
setOnKeyDown( innerDoc ) ; | ||||
disableContextMenu( innerDoc ) ; | ||||
Sizer.RefreshContainerSize(); | ||||
DragAndDrop.RegisterHandlers( innerWindow ) ; | ||||
innerWindow.focus() ; | ||||
return E ; | ||||
} ; | ||||
window.SetOkButton = function( showIt ) | ||||
{ | ||||
$('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ; | ||||
} ; | ||||
window.Ok = function() | ||||
{ | ||||
Selection.EnsureSelection() ; | ||||
var frmMain = window.frames["frmMain"] ; | ||||
if ( frmMain.Ok && frmMain.Ok() ) | ||||
CloseDialog() ; | ||||
else | ||||
frmMain.focus() ; | ||||
} ; | ||||
window.Cancel = function( dontFireChange ) | ||||
{ | ||||
Selection.EnsureSelection() ; | ||||
return CloseDialog( dontFireChange ) ; | ||||
} ; | ||||
window.CloseDialog = function( dontFireChange ) | ||||
{ | ||||
Throbber.Hide() ; | ||||
// Points the src to a non-existent location to avoid loading errors later, in case the dialog | ||||
// haven't been completed loaded at this point. | ||||
if ( $( 'frmMain' ) ) | ||||
$( 'frmMain' ).src = FCKTools.GetVoidUrl() ; | ||||
if ( !dontFireChange && !FCK.EditMode ) | ||||
{ | ||||
// All dialog windows, by default, will fire the "OnSelectionChange" | ||||
// event, no matter the Ok or Cancel button has been pressed. | ||||
// It seems that OnSelectionChange may enter on a concurrency state | ||||
// on some situations (#1965), so we should put the event firing in | ||||
// the execution queue instead of executing it immediately. | ||||
setTimeout( function() | ||||
{ | ||||
FCK.Events.FireEvent( 'OnSelectionChange' ) ; | ||||
}, 0 ) ; | ||||
} | ||||
FCKDialog.OnDialogClose( window ) ; | ||||
} ; | ||||
window.SetEnabled = function( isEnabled ) | ||||
{ | ||||
var cover = $( 'cover' ) ; | ||||
cover.style.display = isEnabled ? 'none' : '' ; | ||||
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 ) | ||||
{ | ||||
if ( !isEnabled ) | ||||
{ | ||||
// Inser the blocker IFRAME before the cover. | ||||
var blocker = document.createElement( 'iframe' ) ; | ||||
blocker.src = FCKTools.GetVoidUrl() ; | ||||
blocker.hideFocus = true ; | ||||
blocker.frameBorder = 0 ; | ||||
blocker.id = blocker.className = 'blocker' ; | ||||
cover.appendChild( blocker ) ; | ||||
} | ||||
else | ||||
{ | ||||
var blocker = $( 'blocker' ) ; | ||||
if ( blocker && blocker.parentNode ) | ||||
blocker.parentNode.removeChild( blocker ) ; | ||||
} | ||||
} | ||||
} ; | ||||
})() ; | ||||
// ]]> | ||||
</script> | ||||
</head> | ||||
<body onload="Init();" class="PopupBody"> | ||||
<div class="contents" id="contents"> | ||||
<div id="header"> | ||||
<div id="TitleArea" class="PopupTitle PopupTitleBorder"> | ||||
<script type="text/javascript"> | ||||
// <![CDATA[ | ||||
document.write( Args().Title ) ; | ||||
// ]]> | ||||
</script> | ||||
<div id="closeButton" onclick="Cancel();"></div> | ||||
</div> | ||||
<div id="TabsRow" class="PopupTabArea" style="display: none"> | ||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"> | ||||
<tr id="Tabs"> | ||||
<td class="PopupTabEmptyArea"> </td> | ||||
<td class="PopupTabEmptyArea" width="100%"> </td> | ||||
</tr> | ||||
</table> | ||||
</div> | ||||
</div> | ||||
<div id="innerContents"></div> | ||||
<div id="PopupButtons" class="PopupButtons"> | ||||
<table border="0" cellpadding="0" cellspacing="0"> | ||||
<tr> | ||||
<td width="100%"> </td> | ||||
<td nowrap="nowrap"> | ||||
<input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" /> | ||||
| ||||
<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" /> | ||||
</td> | ||||
</tr> | ||||
</table> | ||||
</div> | ||||
</div> | ||||
<div class="tl"></div> | ||||
<div class="tc"></div> | ||||
<div class="tr"></div> | ||||
<div class="ml"></div> | ||||
<div class="mr"></div> | ||||
<div class="bl"></div> | ||||
<div class="bc"></div> | ||||
<div class="br"></div> | ||||
<div class="cover" id="cover" style="display:none"></div> | ||||
<div id="throbberBlock" style="position: absolute; visibility: hidden"></div> | ||||
<script type="text/javascript"> | ||||
// <![CDATA[ | ||||
// Set the class name for language direction. | ||||
document.body.className += ' ' + langDir ; | ||||
var cover = $( 'cover' ) ; | ||||
cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ; | ||||
FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ; | ||||
// ]]> | ||||
</script> | ||||
</body> | ||||
</html> | ||||