source: extensions/FCKEditor/editor/fckdialog.html @ 4095

Last change on this file since 4095 was 3295, checked in by patdenice, 16 years ago

New extension added:
FCK Editor (2.0.a)

File size: 22.4 KB
RevLine 
[3295]1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<!--
3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
5 *
6 * == BEGIN LICENSE ==
7 *
8 * Licensed under the terms of any of the following licenses at your
9 * choice:
10 *
11 *  - GNU General Public License Version 2 or later (the "GPL")
12 *    http://www.gnu.org/licenses/gpl.html
13 *
14 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15 *    http://www.gnu.org/licenses/lgpl.html
16 *
17 *  - Mozilla Public License Version 1.1 or later (the "MPL")
18 *    http://www.mozilla.org/MPL/MPL-1.1.html
19 *
20 * == END LICENSE ==
21 *
22 * This page is used by all dialog box as the container.
23-->
24<html xmlns="http://www.w3.org/1999/xhtml">
25        <head>
26                <title></title>
27                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
28                <meta name="robots" content="noindex, nofollow" />
29                <script type="text/javascript">
30// <![CDATA[
31
32// Domain relaxation logic.
33(function()
34{
35        var d = document.domain ;
36
37        while ( true )
38        {
39                // Test if we can access a parent property.
40                try
41                {
42                        var parentDomain = ( Args().TopWindow || E ).document.domain ;
43
44                        if ( document.domain != parentDomain )
45                                document.domain = parentDomain ;
46
47                        break ;
48                }
49                catch( e ) {}
50
51                // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
52                d = d.replace( /.*?(?:\.|$)/, '' ) ;
53
54                if ( d.length == 0 )
55                        break ;         // It was not able to detect the domain.
56
57                document.domain = d ;
58        }
59})() ;
60
61var E = frameElement._DialogArguments.Editor ;
62
63// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
64// So let's use functions to access its members instead.
65function Args()
66{
67        return frameElement._DialogArguments ;
68}
69
70function ParentDialog( dialog )
71{
72        return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
73}
74
75var FCK                         = E.FCK ;
76var FCKTools            = E.FCKTools ;
77var FCKDomTools         = E.FCKDomTools ;
78var FCKDialog           = E.FCKDialog ;
79var FCKBrowserInfo      = E.FCKBrowserInfo ;
80var FCKConfig           = E.FCKConfig ;
81
82// Steal the focus so that the caret would no longer stay in the editor iframe.
83window.focus() ;
84
85// Sets the Skin CSS
86document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
87
88// Sets the language direction.
89var langDir = E.FCKLang.Dir ;
90
91// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
92if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
93        document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
94
95FCKTools.RegisterDollarFunction( window ) ;
96
97// Resize related functions.
98var Sizer = function()
99{
100        var bAutoSize = false ;
101
102        var retval = {
103                // Sets whether the dialog should auto-resize according to its content's height.
104                SetAutoSize : function( autoSize )
105                {
106                        bAutoSize = autoSize ;
107                        this.RefreshSize() ;
108                },
109
110                // Fit the dialog container's layout to the inner iframe's external size.
111                RefreshContainerSize : function()
112                {
113                        var frmMain = $( 'frmMain' ) ;
114
115                        if ( frmMain )
116                        {
117                                // Get the container size.
118                                var height = $( 'contents' ).offsetHeight ;
119
120                                // Subtract the size of other elements.
121                                height -= $( 'TitleArea' ).offsetHeight ;
122                                height -= $( 'TabsRow' ).offsetHeight ;
123                                height -= $( 'PopupButtons' ).offsetHeight ;
124
125                                frmMain.style.height = Math.max( height, 0 ) + 'px' ;
126                        }
127                },
128
129                // Resize and re-layout the dialog.
130                // Triggers the onresize event for the layout logic.
131                ResizeDialog : function( width, height )
132                {
133                        FCKDomTools.SetElementStyles( window.frameElement,
134                                        {
135                                                'width' : width + 'px',
136                                                'height' : height + 'px'
137                                        } ) ;
138
139                        // If the skin have defined a function for resize fixes, call it now.
140                        if ( typeof window.DoResizeFixes == 'function' )
141                                window.DoResizeFixes() ;
142                },
143
144                // if bAutoSize is true, automatically fit the dialog size and layout to
145                // accomodate the inner iframe's internal height.
146                // if bAutoSize is false, then only the layout logic for the dialog decorations
147                // is run to accomodate the inner iframe's external height.
148                RefreshSize : function()
149                {
150                        if ( bAutoSize )
151                        {
152                                var frmMain             = $( 'frmMain' ) ;
153                                var innerDoc    = frmMain.contentWindow.document ;
154                                var isStrict    = FCKTools.IsStrictMode( innerDoc ) ;
155
156                                // Get the size of the frame contents.
157                                var innerWidth  = isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
158                                var innerHeight = isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
159
160                                // Get the current frame size.
161                                var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
162
163                                var deltaWidth  = innerWidth - frameSize.Width ;
164                                var deltaHeight = innerHeight - frameSize.Height ;
165
166                                // If the contents fits the current size.
167                                if ( deltaWidth <= 0 && deltaHeight <= 0 )
168                                        return ;
169
170                                var dialogWidth         = frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
171                                var dialogHeight        = frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
172
173                                this.ResizeDialog( dialogWidth, dialogHeight ) ;
174                        }
175                        this.RefreshContainerSize() ;
176                }
177        }
178
179        /**
180         * Safari seems to have a bug with the time when RefreshSize() is executed - it
181         * thinks frmMain's innerHeight is 0 if we query the value too soon after the
182         * page is loaded in some circumstances. (#1316)
183         * TODO : Maybe this is not needed anymore after #35.
184         */
185        if ( FCKBrowserInfo.IsSafari )
186        {
187                var originalRefreshSize = retval.RefreshSize ;
188
189                retval.RefreshSize = function()
190                {
191                        FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
192                }
193        }
194
195        /**
196         * IE6 has a similar bug where it sometimes thinks $('contents') has an
197         * offsetHeight of 0 (#2114).
198         */
199        if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
200        {
201                var originalRefreshContainerSize = retval.RefreshContainerSize ;
202                retval.RefreshContainerSize = function()
203                {
204                        FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
205                }
206        }
207
208        window.onresize = function()
209        {
210                retval.RefreshContainerSize() ;
211        }
212
213        window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
214
215        return retval ;
216}() ;
217
218// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
219var Throbber = function()
220{
221        var timer ;
222
223        var updateThrobber = function()
224        {
225                var throbberParent = $( 'throbberBlock' ) ;
226                var throbberBlocks = throbberParent.childNodes ;
227                var lastClass = throbberParent.lastChild.className ;
228
229                // From the last to the second one, copy the class from the previous one.
230                for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
231                        throbberBlocks[i].className = throbberBlocks[i-1].className ;
232
233                // For the first one, copy the last class (rotation).
234                throbberBlocks[0].className = lastClass ;
235        }
236
237        return {
238                Show : function( waitMilliseconds )
239                {
240                        // Auto-setup the Show function to be called again after the
241                        // requested amount of time.
242                        if ( waitMilliseconds && waitMilliseconds > 0 )
243                        {
244                                timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
245                                return ;
246                        }
247
248                        var throbberParent = $( 'throbberBlock' ) ;
249
250                        if (throbberParent.childNodes.length == 0)
251                        {
252                                // Create the throbber blocks.
253                                var classIds = [ 1,2,3,4,5,4,3,2 ] ;
254                                while ( classIds.length > 0 )
255                                        throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
256                        }
257
258                        // Center the throbber.
259                        var frm = $( 'contents' ) ;
260                        var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
261                        var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
262                        var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
263                        throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
264                        throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
265
266                        // Show it.
267                        throbberParent.style.visibility = ''  ;
268
269                        // Hide tabs and buttons:
270                        $( 'Tabs' ).style.visibility = 'hidden' ;
271                        $( 'PopupButtons' ).style.visibility = 'hidden' ;
272
273                        // Setup the animation interval.
274                        timer = setInterval( updateThrobber, 100 ) ;
275                },
276
277                Hide : function()
278                {
279                        if ( timer )
280                        {
281                                clearInterval( timer ) ;
282                                timer = null ;
283                        }
284
285                        $( 'throbberBlock' ).style.visibility = 'hidden' ;
286
287                        // Show tabs and buttons:
288                        $( 'Tabs' ).style.visibility = '' ;
289                        $( 'PopupButtons' ).style.visibility = '' ;
290                }
291        } ;
292}() ;
293
294// Drag and drop handlers.
295var DragAndDrop = function()
296{
297        var registeredWindows = [] ;
298        var lastCoords ;
299        var currentPos ;
300
301        var cleanUpHandlers = function()
302        {
303                for ( var i = 0 ; i < registeredWindows.length ; i++ )
304                {
305                        FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
306                        FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
307                }
308        }
309
310        var dragMouseMoveHandler = function( evt )
311        {
312                if ( !lastCoords )
313                        return ;
314
315                if ( !evt )
316                        evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
317
318                // Updated the last coordinates.
319                var currentCoords =
320                {
321                        x : evt.screenX,
322                        y : evt.screenY
323                } ;
324
325                currentPos =
326                {
327                        x : currentPos.x + ( currentCoords.x - lastCoords.x ),
328                        y : currentPos.y + ( currentCoords.y - lastCoords.y )
329                } ;
330
331                lastCoords = currentCoords ;
332
333                frameElement.style.left = currentPos.x + 'px' ;
334                frameElement.style.top  = currentPos.y + 'px' ;
335
336                if ( evt.preventDefault )
337                        evt.preventDefault() ;
338                else
339                        evt.returnValue = false ;
340        }
341
342        var dragMouseUpHandler = function( evt )
343        {
344                if ( !lastCoords )
345                        return ;
346                if ( !evt )
347                        evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
348                cleanUpHandlers() ;
349                lastCoords = null ;
350        }
351
352        return {
353
354                MouseDownHandler : function( evt )
355                {
356                        var view = null ;
357                        if ( !evt )
358                        {
359                                view = FCKTools.GetElementDocument( this ).parentWindow ;
360                                evt = view.event ;
361                        }
362                        else
363                                view = evt.view ;
364
365                        var target = evt.srcElement || evt.target ;
366                        if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
367                                return ;
368
369                        lastCoords =
370                        {
371                                x : evt.screenX,
372                                y : evt.screenY
373                        } ;
374
375                        // Save the current IFRAME position.
376                        currentPos =
377                        {
378                                x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
379                                y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
380                        } ;
381
382                        for ( var i = 0 ; i < registeredWindows.length ; i++ )
383                        {
384                                FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
385                                FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
386                        }
387
388                        if ( evt.preventDefault )
389                                evt.preventDefault() ;
390                        else
391                                evt.returnValue = false ;
392                },
393
394                RegisterHandlers : function( w )
395                {
396                        registeredWindows.push( w ) ;
397                }
398        }
399}() ;
400
401// Selection related functions.
402//(Became simple shortcuts after the fix for #1990)
403var Selection =
404{
405        /**
406         * Ensures that the editing area contains an active selection. This is a
407         * requirement for IE, as it looses the selection when the focus moves to other
408         * frames.
409         */
410        EnsureSelection : function()
411        {
412                // Move the focus to the Cancel button so even if the dialog contains a
413                // contentEditable element the selection is properly restored in the editor #2496
414                window.focus() ;
415                $( 'btnCancel' ).focus() ;
416
417                FCK.Selection.Restore() ;
418        },
419
420        /**
421         * Get the FCKSelection object for the editor instance.
422         */
423        GetSelection : function()
424        {
425                return FCK.Selection ;
426        },
427
428        /**
429         * Get the selected element in the editing area (for object selections).
430         */
431        GetSelectedElement : function()
432        {
433                return FCK.Selection.GetSelectedElement() ;
434        }
435}
436
437// Tab related functions.
438var Tabs = function()
439{
440        // Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
441        // would build circular references with the element references inside and cause memory leaks in IE6.
442        var oTabs = new Object() ;
443
444        var setSelectedTab = function( tabCode )
445        {
446                for ( var sCode in oTabs )
447                {
448                        if ( sCode == tabCode )
449                                $( oTabs[sCode] ).className = 'PopupTabSelected' ;
450                        else
451                                $( oTabs[sCode] ).className = 'PopupTab' ;
452                }
453
454                if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
455                        window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
456        }
457
458        function TabDiv_OnClick()
459        {
460                setSelectedTab( this.TabCode ) ;
461        }
462
463        window.AddTab = function( tabCode, tabText, startHidden )
464        {
465                if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
466                        return ;
467
468                var eTabsRow = $( 'Tabs' ) ;
469
470                var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
471                oCell.noWrap = true ;
472
473                var oDiv = document.createElement( 'DIV' ) ;
474                oDiv.className = 'PopupTab' ;
475                oDiv.innerHTML = tabText ;
476                oDiv.TabCode = tabCode ;
477                oDiv.onclick = TabDiv_OnClick ;
478                oDiv.id = Math.random() ;
479
480                if ( startHidden )
481                        oDiv.style.display = 'none' ;
482
483                eTabsRow = $( 'TabsRow' ) ;
484
485                oCell.appendChild( oDiv ) ;
486
487                if ( eTabsRow.style.display == 'none' )
488                {
489                        var eTitleArea = $( 'TitleArea' ) ;
490                        eTitleArea.className = 'PopupTitle' ;
491
492                        oDiv.className = 'PopupTabSelected' ;
493                        eTabsRow.style.display = '' ;
494
495                        if ( window.onresize )
496                                window.onresize() ;
497                }
498
499                oTabs[ tabCode ] = oDiv.id ;
500
501                FCKTools.DisableSelection( oDiv ) ;
502        } ;
503
504        window.SetSelectedTab = setSelectedTab ;
505
506        window.SetTabVisibility = function( tabCode, isVisible )
507        {
508                var oTab = $( oTabs[ tabCode ] ) ;
509                oTab.style.display = isVisible ? '' : 'none' ;
510
511                if ( ! isVisible && oTab.className == 'PopupTabSelected' )
512                {
513                        for ( var sCode in oTabs )
514                        {
515                                if ( $( oTabs[sCode] ).style.display != 'none' )
516                                {
517                                        setSelectedTab( sCode ) ;
518                                        break ;
519                                }
520                        }
521                }
522        } ;
523}() ;
524
525// readystatechange handler for registering drag and drop handlers in cover
526// iframes, defined out here to avoid memory leak.
527// Do NOT put this function as a private function as it will induce memory leak
528// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
529// really nasty (sigh).
530var onReadyRegister = function()
531{
532        if ( this.readyState != 'complete' )
533                return ;
534        DragAndDrop.RegisterHandlers( this.contentWindow ) ;
535} ;
536
537// The business logic of the dialog, dealing with operational things like
538// dialog open/dialog close/enable/disable/etc.
539(function()
540{
541        var setOnKeyDown = function( targetDocument )
542        {
543                targetDocument.onkeydown = function ( e )
544                {
545                        e = e || event || this.parentWindow.event ;
546                        switch ( e.keyCode )
547                        {
548                                case 13 :               // ENTER
549                                        var oTarget = e.srcElement || e.target ;
550                                        if ( oTarget.tagName == 'TEXTAREA' )
551                                                return true ;
552                                        Ok() ;
553                                        return false ;
554
555                                case 27 :               // ESC
556                                        Cancel() ;
557                                        return false ;
558                        }
559                        return true ;
560                }
561        } ;
562
563        var contextMenuBlocker = function( e )
564        {
565                var sTagName = e.target.tagName ;
566                if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
567                        e.preventDefault() ;
568        } ;
569
570        var disableContextMenu = function( targetDocument )
571        {
572                if ( FCKBrowserInfo.IsIE )
573                        return ;
574
575                targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
576        } ;
577
578        // Program entry point.
579        window.Init = function()
580        {
581                $( 'contents' ).dir = langDir;
582
583                // Start the throbber timer.
584                Throbber.Show( 1000 ) ;
585
586                Sizer.RefreshContainerSize() ;
587                LoadInnerDialog() ;
588
589                FCKTools.DisableSelection( document.body ) ;
590
591                // Make the title area draggable.
592                var titleElement = $( 'header' ) ;
593                titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
594
595                // Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
596                DragAndDrop.RegisterHandlers( window ) ;
597                DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
598
599                // Disable the previous dialog if it exists.
600                if ( ParentDialog() )
601                {
602                        ParentDialog().contentWindow.SetEnabled( false ) ;
603                        if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
604                        {
605                                var currentParent = ParentDialog() ;
606                                while ( currentParent )
607                                {
608                                        var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
609                                        if ( blockerFrame.readyState == 'complete' )
610                                                DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
611                                        else
612                                                blockerFrame.onreadystatechange = onReadyRegister ;
613                                        currentParent = ParentDialog( currentParent ) ;
614                                }
615                        }
616                        else
617                        {
618                                var currentParent = ParentDialog() ;
619                                while ( currentParent )
620                                {
621                                        DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
622                                        currentParent = ParentDialog( currentParent ) ;
623                                }
624                        }
625                }
626
627                // If this is the only dialog on screen, enable the background cover.
628                if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
629                {
630                        var blockerFrame = FCKDialog.GetCover().firstChild ;
631                        if ( blockerFrame.readyState == 'complete' )
632                                DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
633                        else
634                                blockerFrame.onreadystatechange = onReadyRegister;
635                }
636
637                // Add Enter/Esc hotkeys and disable context menu for the dialog.
638                setOnKeyDown( document ) ;
639                disableContextMenu( document ) ;
640        } ;
641
642        window.LoadInnerDialog = function()
643        {
644                if ( window.onresize )
645                        window.onresize() ;
646
647                // First of all, translate the dialog box contents.
648                E.FCKLanguageManager.TranslatePage( document ) ;
649
650                // Create the IFRAME that holds the dialog contents.
651                $( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
652        } ;
653
654        window.InnerDialogLoaded = function()
655        {
656                // If the dialog has been closed before the iframe is loaded, do nothing.
657                if ( !frameElement.parentNode )
658                        return null ;
659
660                Throbber.Hide() ;
661
662                var frmMain = $('frmMain') ;
663                var innerWindow = frmMain.contentWindow ;
664                var innerDoc = innerWindow.document ;
665
666                // Show the loaded iframe.
667                frmMain.style.visibility = '' ;
668
669                // Set the language direction.
670                innerDoc.documentElement.dir = langDir ;
671
672                // Sets the Skin CSS.
673                innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
674
675                setOnKeyDown( innerDoc ) ;
676                disableContextMenu( innerDoc ) ;
677
678                Sizer.RefreshContainerSize();
679
680                DragAndDrop.RegisterHandlers( innerWindow ) ;
681
682                innerWindow.focus() ;
683
684                return E ;
685        } ;
686
687        window.SetOkButton = function( showIt )
688        {
689                $('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
690        } ;
691
692        window.Ok = function()
693        {
694                Selection.EnsureSelection() ;
695
696                var frmMain = window.frames["frmMain"] ;
697
698                if ( frmMain.Ok && frmMain.Ok() )
699                        CloseDialog() ;
700                else
701                        frmMain.focus() ;
702        } ;
703
704        window.Cancel = function( dontFireChange )
705        {
706                Selection.EnsureSelection() ;
707                return CloseDialog( dontFireChange ) ;
708        } ;
709
710        window.CloseDialog = function( dontFireChange )
711        {
712                Throbber.Hide() ;
713
714                // Points the src to a non-existent location to avoid loading errors later, in case the dialog
715                // haven't been completed loaded at this point.
716                if ( $( 'frmMain' ) )
717                        $( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
718
719                if ( !dontFireChange && !FCK.EditMode )
720                {
721                        // All dialog windows, by default, will fire the "OnSelectionChange"
722                        // event, no matter the Ok or Cancel button has been pressed.
723                        // It seems that OnSelectionChange may enter on a concurrency state
724                        // on some situations (#1965), so we should put the event firing in
725                        // the execution queue instead of executing it immediately.
726                        setTimeout( function()
727                                {
728                                        FCK.Events.FireEvent( 'OnSelectionChange' ) ;
729                                }, 0 ) ;
730                }
731
732                FCKDialog.OnDialogClose( window ) ;
733        } ;
734
735        window.SetEnabled = function( isEnabled )
736        {
737                var cover = $( 'cover' ) ;
738                cover.style.display = isEnabled ? 'none' : '' ;
739
740                if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
741                {
742                        if ( !isEnabled )
743                        {
744                                // Inser the blocker IFRAME before the cover.
745                                var blocker = document.createElement( 'iframe' ) ;
746                                blocker.src = FCKTools.GetVoidUrl() ;
747                                blocker.hideFocus = true ;
748                                blocker.frameBorder = 0 ;
749                                blocker.id = blocker.className = 'blocker' ;
750                                cover.appendChild( blocker ) ;
751                        }
752                        else
753                        {
754                                var blocker = $( 'blocker' ) ;
755                                if ( blocker && blocker.parentNode )
756                                        blocker.parentNode.removeChild( blocker ) ;
757                        }
758                }
759        } ;
760})() ;
761// ]]>
762                </script>
763        </head>
764        <body onload="Init();" class="PopupBody">
765                <div class="contents" id="contents">
766                        <div id="header">
767                                <div id="TitleArea" class="PopupTitle PopupTitleBorder">
768                                        <script type="text/javascript">
769// <![CDATA[
770document.write( Args().Title ) ;
771// ]]>
772                                        </script>
773                                        <div id="closeButton" onclick="Cancel();"></div>
774                                </div>
775                                <div id="TabsRow" class="PopupTabArea" style="display: none">
776                                        <table border="0" cellpadding="0" cellspacing="0" width="100%">
777                                                <tr id="Tabs">
778                                                        <td class="PopupTabEmptyArea">&nbsp;</td>
779                                                        <td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
780                                                </tr>
781                                        </table>
782                                </div>
783                        </div>
784                        <div id="innerContents"></div>
785                        <div id="PopupButtons" class="PopupButtons">
786                                <table border="0" cellpadding="0" cellspacing="0">
787                                        <tr>
788                                                <td width="100%">&nbsp;</td>
789                                                <td nowrap="nowrap">
790                                                        <input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
791                                                        &nbsp;
792                                                        <input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
793                                                </td>
794                                        </tr>
795                                </table>
796                        </div>
797                </div>
798                <div class="tl"></div>
799                <div class="tc"></div>
800                <div class="tr"></div>
801                <div class="ml"></div>
802                <div class="mr"></div>
803                <div class="bl"></div>
804                <div class="bc"></div>
805                <div class="br"></div>
806                <div class="cover" id="cover" style="display:none"></div>
807                <div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
808                <script type="text/javascript">
809// <![CDATA[
810                        // Set the class name for language direction.
811                        document.body.className += ' ' + langDir ;
812
813                        var cover = $( 'cover' ) ;
814                        cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
815                        FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
816// ]]>
817                </script>
818        </body>
819</html>
Note: See TracBrowser for help on using the repository browser.