~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/web/static/htdocs/applets/FCKeditor/editor/fckdialog.html

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
ImportĀ upstreamĀ versionĀ 1.7.0

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>