~ubuntu-it-wiki/wiki-ubuntu-it/wiki-repo

« back to all changes in this revision

Viewing changes to applets/FCKeditor/editor/fckdialog.html

  • Committer: Leo Iannacone
  • Date: 2011-06-02 15:05:37 UTC
  • Revision ID: l3on@ubuntu.com-20110602150537-ycrnf58qf67uf593
Added applets for gui editor

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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-2010 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
 
 
61
var 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.
 
65
function Args()
 
66
{
 
67
        return frameElement._DialogArguments ;
 
68
}
 
69
 
 
70
function ParentDialog( dialog )
 
71
{
 
72
        return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
 
73
}
 
74
 
 
75
var FCK                         = E.FCK ;
 
76
var FCKTools            = E.FCKTools ;
 
77
var FCKDomTools         = E.FCKDomTools ;
 
78
var FCKDialog           = E.FCKDialog ;
 
79
var FCKBrowserInfo      = E.FCKBrowserInfo ;
 
80
var FCKConfig           = E.FCKConfig ;
 
81
 
 
82
// Steal the focus so that the caret would no longer stay in the editor iframe.
 
83
window.focus() ;
 
84
 
 
85
// Sets the Skin CSS
 
86
document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
 
87
 
 
88
// Sets the language direction.
 
89
var langDir = E.FCKLang.Dir ;
 
90
 
 
91
// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
 
92
if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
 
93
        document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
 
94
 
 
95
FCKTools.RegisterDollarFunction( window ) ;
 
96
 
 
97
// Resize related functions.
 
98
var 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.
 
219
var 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.
 
295
var 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)
 
403
var 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.
 
438
var 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).
 
530
var 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[
 
770
document.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>