Changeset 1398 for FCKeditor/trunk


Ignore:
Timestamp:
01/24/08 04:47:11 (8 years ago)
Author:
martinkou
Message:

Fixed #35 : Merged floating_dialog branch to trunk.

Location:
FCKeditor/trunk
Files:
2 deleted
45 edited
25 copied

Legend:

Unmodified
Added
Removed
  • FCKeditor/trunk/_test/manual/testslist.html

    r364 r1398  
    5252                                                <option value="behaviors/showtableborders.html" selected="selected">Behaviors : Show table borders</option>
    5353                                                <option value="fckbrowserinfo/test1.html">fckbrowserinfo: test1</option>
     54                                                <option value="fckdialog/test1.html">fckdialog: Memory leak test</option>
     55                                                <option value="fckdialog/test2.html">fckdialog: Dialog/Flash z-placement test</option>
    5456                                                <option value="fckdomrange/test1.html">fckdomrange: test1</option>
    5557                                                <option value="fckdomtools/insertafternode.html">fckdomtools: insertafternode</option>
  • FCKeditor/trunk/editor/_source/classes/fckstyle.js

    r1378 r1398  
    9595         * Apply the style to a FCKDomRange.
    9696         */
    97         ApplyToRange : function( range, selectIt )
     97        ApplyToRange : function( range, selectIt, updateRange )
    9898        {
    9999                // ApplyToRange is not valid for FCK_STYLE_OBJECT types.
     
    112112                }
    113113
    114                 this.ApplyToRange( range, selectIt ) ;
     114                this.ApplyToRange( range, selectIt, updateRange ) ;
    115115        },
    116116
     
    142142         * effect.
    143143         */
    144         RemoveFromRange : function( range, selectIt )
     144        RemoveFromRange : function( range, selectIt, updateRange )
    145145        {
    146146                var bookmark ;
     
    277277                                range.SelectBookmark( bookmark ) ;
    278278
    279                         return ;
     279                        if ( updateRange )
     280                                range.MoveToBookmark( bookmark ) ;
    280281                }
    281282
     
    402403                if ( selectIt )
    403404                        range.SelectBookmark( bookmark ) ;
     405
     406                if ( updateRange )
     407                        range.MoveToBookmark( bookmark ) ;
    404408        },
    405409
     
    750754         *      - Properly handle block containers like <div> and <blockquote>.
    751755         */
    752         _ApplyBlockStyle : function( range, selectIt )
     756        _ApplyBlockStyle : function( range, selectIt, updateRange )
    753757        {
    754758                // Bookmark the range so we can re-select it after processing.
     
    769773                        // Move everything from the current node to the new one.
    770774                        FCKDomTools.MoveChildren( block, newBlock ) ;
     775
     776                        // If we're in a non-IE browser, and the newBlock is <pre>, and the old block is not <pre>,
     777                        // then we need to clear linebreaks and compress ANSI whitespaces so that we don't get disrupted
     778                        // output in <pre> mode. (Bug #1355)
     779                        if ( !FCKBrowserInfo.IsIE && newBlock.nodeName.IEquals( 'pre' ) && !block.nodeName.IEquals( 'pre' ) )
     780                        {
     781                                // If the newBlock's first child is a text node, left-trim it since any ANSI whitespace
     782                                // after a non-pre block is meaningless.
     783                                if ( newBlock.firstChild && newBlock.firstChild.nodeType == 3 )
     784                                        newBlock.firstChild.nodeValue = newBlock.firstChild.nodeValue.LTrim() ;
     785
     786                                // Ditto for the last child.
     787                                if ( newBlock.lastChild && newBlock.lastChild.nodeType == 3 )
     788                                        newBlock.lastChild.nodeValue = newBlock.lastChild.nodeValue.RTrim() ;
     789
     790                                // DFS walk the newBlock to compress ANSI whitespaces and delete excessive linebreaks.
     791                                var currentNode = newBlock ;
     792                                while ( currentNode )
     793                                {
     794                                        currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, 3, newBlock.parentNode ) ;
     795                                        if ( currentNode )
     796                                        {
     797                                                // If the text node ends with a line break, and its next sibling is a <BR>,
     798                                                // then right-trim the text node.
     799                                                if ( currentNode.nodeValue.charAt( currentNode.nodeValue.length - 1 ) == '\n'
     800                                                                && currentNode.nextSibling
     801                                                                && currentNode.nextSibling.nodeName.IEquals( 'br' ) )
     802                                                        currentNode.nodeValue = currentNode.nodeValue.RTrim() ;
     803                                                // If the text node begins with a line break, and its next sibling is a <BR>,
     804                                                // then left-trim the text node.
     805                                                if ( currentNode.nodeValue.charAt( 0 ) == '\n'
     806                                                                && currentNode.previousSibling
     807                                                                && currentNode.previousSibling.nodeName.IEquals( 'br' ) )
     808                                                        currentNode.nodeValue = currentNode.nodeValue.LTrim() ;
     809                                                // Compress any ANSI whitespaces left.
     810                                                currentNode.nodeValue = currentNode.nodeValue.replace( /[\r\n\t ]+/g, ' ' ) ;
     811                                        }
     812                                }
     813                        }
    771814
    772815                        // Delete the current node.
     
    777820                if ( selectIt )
    778821                        range.SelectBookmark( bookmark ) ;
     822
     823                if ( updateRange )
     824                        range.MoveToBookmark( range ) ;
    779825        },
    780826
     
    789835         *        <span style="color: #ff0000;"><span style="background-color: #ffffff">XYZ</span></span>
    790836         */
    791         _ApplyInlineStyle : function( range, selectIt )
     837        _ApplyInlineStyle : function( range, selectIt, updateRange )
    792838        {
    793839                var doc = range.Window.document ;
     
    9701016                if ( selectIt )
    9711017                        range.SelectBookmark( bookmark ) ;
     1018
     1019                if ( updateRange )
     1020                        range.MoveToBookmark( bookmark ) ;
    9721021        },
    9731022
  • FCKeditor/trunk/editor/_source/commandclasses/fck_othercommands.js

    r1343 r1398  
    2424
    2525// ### General Dialog Box Commands.
    26 var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam )
     26var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam, customValue )
    2727{
    2828        this.Name       = name ;
     
    3131        this.Width      = width ;
    3232        this.Height     = height ;
     33        this.CustomValue = customValue ;
    3334
    3435        this.GetStateFunction   = getStateFunction ;
     
    4041FCKDialogCommand.prototype.Execute = function()
    4142{
    42         FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height, null, null, this.Resizable ) ;
     43        FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height, this.CustomValue, null, this.Resizable ) ;
    4344}
    4445
  • FCKeditor/trunk/editor/_source/commandclasses/fcktextcolorcommand.js

    r1343 r1398  
    109109        this.className = 'ColorDeselected' ;
    110110        command._Panel.Hide() ;
    111         FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, FCKTools.Hitch(command, 'SetColor') ) ;
     111        FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320,
     112                        FCKTools.Bind( command, command.SetColor ) ) ;
    112113}
    113114
  • FCKeditor/trunk/editor/_source/internals/fck.js

    r1388 r1398  
    957957                return ;
    958958
    959         if ( FCKConfig.Debug )
    960                 FCKDebug._GetWindow() ;
    961 
    962959        FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
    963960}
  • FCKeditor/trunk/editor/_source/internals/fckbrowserinfo.js

    r1191 r1398  
    2828        IsIE            : /*@cc_on!@*/false,
    2929        IsIE7           : /*@cc_on!@*/false && ( parseFloat( s.match( /msie ([\d|\.]+)/ )[1] ) >= 7 ),
     30        IsIE6           : /*@cc_on!@*/false && ( parseFloat( s.match( /msie ([\d|\.]+)/ )[1] ) >= 6 ),
    3031        IsGecko         : s.Contains('gecko/'),
    3132        IsSafari        : s.Contains(' applewebkit/'),          // Read "IsWebKit"
  • FCKeditor/trunk/editor/_source/internals/fckcommands.js

    r1343 r1398  
    4848                case 'RemoveFormat'     : oCommand = new FCKRemoveFormatCommand() ; break ;
    4949
    50                 case 'DocProps'         : oCommand = new FCKDialogCommand( 'DocProps'   , FCKLang.DocProps                              , 'dialog/fck_docprops.html'    , 400, 390, FCKCommands.GetFullPageState ) ; break ;
     50                case 'DocProps'         : oCommand = new FCKDialogCommand( 'DocProps'   , FCKLang.DocProps                              , 'dialog/fck_docprops.html'    , 400, 380, FCKCommands.GetFullPageState ) ; break ;
    5151                case 'Templates'        : oCommand = new FCKDialogCommand( 'Templates'  , FCKLang.DlgTemplatesTitle             , 'dialog/fck_template.html'    , 380, 450 ) ; break ;
    52                 case 'Link'                     : oCommand = new FCKDialogCommand( 'Link'               , FCKLang.DlgLnkWindowTitle             , 'dialog/fck_link.html'                , 400, 330 ) ; break ;
     52                case 'Link'                     : oCommand = new FCKDialogCommand( 'Link'               , FCKLang.DlgLnkWindowTitle             , 'dialog/fck_link.html'                , 400, 300 ) ; break ;
    5353                case 'Unlink'           : oCommand = new FCKUnlinkCommand() ; break ;
    54                 case 'Anchor'           : oCommand = new FCKDialogCommand( 'Anchor'             , FCKLang.DlgAnchorTitle                , 'dialog/fck_anchor.html'              , 370, 170 ) ; break ;
     54                case 'Anchor'           : oCommand = new FCKDialogCommand( 'Anchor'             , FCKLang.DlgAnchorTitle                , 'dialog/fck_anchor.html'              , 370, 160 ) ; break ;
    5555                case 'AnchorDelete'     : oCommand = new FCKAnchorDeleteCommand() ; break ;
    56                 case 'BulletedList'     : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp             , 'dialog/fck_listprop.html?UL' , 370, 170 ) ; break ;
    57                 case 'NumberedList'     : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp             , 'dialog/fck_listprop.html?OL' , 370, 170 ) ; break ;
    58                 case 'About'            : oCommand = new FCKDialogCommand( 'About'              , FCKLang.About                                 , 'dialog/fck_about.html'               , 400, 330, function(){ return FCK_TRISTATE_OFF ; } ) ; break ;
     56                case 'BulletedList'     : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp             , 'dialog/fck_listprop.html?UL' , 370, 160 ) ; break ;
     57                case 'NumberedList'     : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp             , 'dialog/fck_listprop.html?OL' , 370, 160 ) ; break ;
     58                case 'About'            : oCommand = new FCKDialogCommand( 'About'              , FCKLang.About                                 , 'dialog/fck_about.html'               , 400, 310, function(){ return FCK_TRISTATE_OFF ; } ) ; break ;
     59                case 'Find'                     : oCommand = new FCKDialogCommand( 'Find'               , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html'             , 340, 230, null, null, 'Find' ) ; break ;
     60                case 'Replace'          : oCommand = new FCKDialogCommand( 'Replace'    , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html'             , 340, 230, null, null, 'Replace' ) ; break ;
    5961
    60                 case 'Find'                     : oCommand = new FCKDialogCommand( 'Find'               , FCKLang.DlgFindAndReplaceTitle                        , 'dialog/fck_replace.html'             , 340, 250 ) ; break ;
    61                 case 'Replace'          : oCommand = new FCKDialogCommand( 'Replace'    , FCKLang.DlgFindAndReplaceTitle                , 'dialog/fck_replace.html'             , 340, 250 ) ; break ;
    62 
    63                 case 'Image'            : oCommand = new FCKDialogCommand( 'Image'              , FCKLang.DlgImgTitle                   , 'dialog/fck_image.html'               , 450, 400 ) ; break ;
    64                 case 'Flash'            : oCommand = new FCKDialogCommand( 'Flash'              , FCKLang.DlgFlashTitle                 , 'dialog/fck_flash.html'               , 450, 400 ) ; break ;
    65                 case 'SpecialChar'      : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle   , 'dialog/fck_specialchar.html' , 400, 320 ) ; break ;
     62                case 'Image'            : oCommand = new FCKDialogCommand( 'Image'              , FCKLang.DlgImgTitle                   , 'dialog/fck_image.html'               , 450, 390 ) ; break ;
     63                case 'Flash'            : oCommand = new FCKDialogCommand( 'Flash'              , FCKLang.DlgFlashTitle                 , 'dialog/fck_flash.html'               , 450, 390 ) ; break ;
     64                case 'SpecialChar'      : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle   , 'dialog/fck_specialchar.html' , 400, 290 ) ; break ;
    6665                case 'Smiley'           : oCommand = new FCKDialogCommand( 'Smiley'             , FCKLang.DlgSmileyTitle                , 'dialog/fck_smiley.html'              , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
    6766                case 'Table'            : oCommand = new FCKDialogCommand( 'Table'              , FCKLang.DlgTableTitle                 , 'dialog/fck_table.html'               , 480, 250 ) ; break ;
    6867                case 'TableProp'        : oCommand = new FCKDialogCommand( 'Table'              , FCKLang.DlgTableTitle                 , 'dialog/fck_table.html?Parent', 480, 250 ) ; break ;
    69                 case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'      , FCKLang.DlgCellTitle                  , 'dialog/fck_tablecell.html'   , 550, 250 ) ; break ;
     68                case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'      , FCKLang.DlgCellTitle                  , 'dialog/fck_tablecell.html'   , 550, 240 ) ; break ;
    7069
    7170                case 'Style'            : oCommand = new FCKStyleCommand() ; break ;
     
    113112                case 'TableDelete'                              : oCommand = new FCKTableCommand('TableDelete') ; break ;
    114113
    115                 case 'Form'                     : oCommand = new FCKDialogCommand( 'Form'               , FCKLang.Form                  , 'dialog/fck_form.html'                , 380, 230 ) ; break ;
    116                 case 'Checkbox'         : oCommand = new FCKDialogCommand( 'Checkbox'   , FCKLang.Checkbox              , 'dialog/fck_checkbox.html'    , 380, 230 ) ; break ;
    117                 case 'Radio'            : oCommand = new FCKDialogCommand( 'Radio'              , FCKLang.RadioButton   , 'dialog/fck_radiobutton.html' , 380, 230 ) ; break ;
    118                 case 'TextField'        : oCommand = new FCKDialogCommand( 'TextField'  , FCKLang.TextField             , 'dialog/fck_textfield.html'   , 380, 230 ) ; break ;
    119                 case 'Textarea'         : oCommand = new FCKDialogCommand( 'Textarea'   , FCKLang.Textarea              , 'dialog/fck_textarea.html'    , 380, 230 ) ; break ;
    120                 case 'HiddenField'      : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField   , 'dialog/fck_hiddenfield.html' , 380, 230 ) ; break ;
    121                 case 'Button'           : oCommand = new FCKDialogCommand( 'Button'             , FCKLang.Button                , 'dialog/fck_button.html'              , 380, 230 ) ; break ;
    122                 case 'Select'           : oCommand = new FCKDialogCommand( 'Select'             , FCKLang.SelectionField, 'dialog/fck_select.html'              , 400, 380 ) ; break ;
    123                 case 'ImageButton'      : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton   , 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ;
     114                case 'Form'                     : oCommand = new FCKDialogCommand( 'Form'               , FCKLang.Form                  , 'dialog/fck_form.html'                , 380, 210 ) ; break ;
     115                case 'Checkbox'         : oCommand = new FCKDialogCommand( 'Checkbox'   , FCKLang.Checkbox              , 'dialog/fck_checkbox.html'    , 380, 200 ) ; break ;
     116                case 'Radio'            : oCommand = new FCKDialogCommand( 'Radio'              , FCKLang.RadioButton   , 'dialog/fck_radiobutton.html' , 380, 200 ) ; break ;
     117                case 'TextField'        : oCommand = new FCKDialogCommand( 'TextField'  , FCKLang.TextField             , 'dialog/fck_textfield.html'   , 380, 210 ) ; break ;
     118                case 'Textarea'         : oCommand = new FCKDialogCommand( 'Textarea'   , FCKLang.Textarea              , 'dialog/fck_textarea.html'    , 380, 210 ) ; break ;
     119                case 'HiddenField'      : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField   , 'dialog/fck_hiddenfield.html' , 380, 190 ) ; break ;
     120                case 'Button'           : oCommand = new FCKDialogCommand( 'Button'             , FCKLang.Button                , 'dialog/fck_button.html'              , 380, 210 ) ; break ;
     121                case 'Select'           : oCommand = new FCKDialogCommand( 'Select'             , FCKLang.SelectionField, 'dialog/fck_select.html'              , 400, 340 ) ; break ;
     122                case 'ImageButton'      : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton   , 'dialog/fck_image.html?ImageButton', 450, 390 ) ; break ;
    124123
    125124                case 'SpellCheck'       : oCommand = new FCKSpellCheckCommand() ; break ;
  • FCKeditor/trunk/editor/_source/internals/fckdialog.js

    r132 r1398  
    2222 */
    2323
    24 var FCKDialog = new Object() ;
    25 
    26 // This method opens a dialog window using the standard dialog template.
    27 FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
     24var FCKDialog = ( function()
    2825{
    29         // Setup the dialog info.
    30         var oDialogInfo = new Object() ;
    31         oDialogInfo.Title = dialogTitle ;
    32         oDialogInfo.Page = dialogPage ;
    33         oDialogInfo.Editor = window ;
    34         oDialogInfo.CustomValue = customValue ;         // Optional
    35 
    36         var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
    37         this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ;
    38 }
     26        var topDialog ;
     27        var baseZIndex ;
     28        var cover ;
     29       
     30        // The document that holds the dialog.
     31        var topWindow = window.parent ;
     32
     33        while ( topWindow.parent && topWindow.parent != topWindow )
     34        {
     35                try
     36                {
     37                        if ( topWindow.parent.document.domain != document.domain )
     38                                break ;
     39                        if ( topWindow.parent.document.getElementsByTagName( 'frameset' ).length > 0 )
     40                                break ;
     41                }
     42                catch ( e )
     43                {
     44                        break ;
     45                }
     46                topWindow = topWindow.parent ;
     47        }
     48
     49        var topDocument = topWindow.document ;
     50
     51        var getZIndex = function()
     52        {
     53                if ( !baseZIndex )
     54                        baseZIndex = FCKConfig.FloatingPanelsZIndex + 999 ;
     55                return ++baseZIndex ;
     56        }
     57
     58        // TODO : This logic is not actually working when reducing the window, only
     59        // when enlarging it.
     60        var resizeHandler = function()
     61        {
     62                if ( !cover )
     63                        return ;
     64               
     65                var documentElement = topDocument.documentElement ;
     66                       
     67                FCKDomTools.SetElementStyles( cover,
     68                        {
     69                                'width' : Math.max( documentElement.scrollWidth,
     70                                        documentElement.clientWidth,
     71                                        topDocument.scrollWidth || 0 ) - 1 + 'px',
     72                                'height' : Math.max( documentElement.scrollHeight,
     73                                        documentElement.clientHeight,
     74                                        topDocument.scrollHeight || 0 ) - 1 + 'px'
     75                        } ) ;
     76        }
     77
     78        return {
     79                SelectionData : null,
     80
     81                /**
     82                 * Opens a dialog window using the standard dialog template.
     83                 */
     84                OpenDialog : function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
     85                {
     86                        if ( !topDialog )
     87                                this.DisplayMainCover() ;
     88
     89                        // Setup the dialog info to be passed to the dialog.
     90                        var dialogInfo =
     91                        {
     92                                Title : dialogTitle,
     93                                Page : dialogPage,
     94                                Editor : window,
     95                                CustomValue : customValue,              // Optional
     96                                SelectionData : null,
     97                                TopWindow : topWindow
     98                        }
     99
     100                        var currentInstance = FCK.ToolbarSet.CurrentInstance ;
     101
     102                        // IE doens't support multiple selections, even if in different
     103                        // IFRAMEs, like the dialog, so the current selection must be saved to
     104                        // be restored in the dialog code.
     105                        if ( FCKBrowserInfo.IsIE && !topDialog )
     106                        {
     107                                var editorDocument = currentInstance.EditorDocument ;
     108                                var selection = editorDocument.selection ;
     109                                var range ;
     110
     111                                if ( selection )
     112                                {
     113                                        range = selection.createRange() ;
     114
     115                                        // Ensure that the range comes from the editor document.
     116                                        if ( range )
     117                                        {
     118                                                if ( range.parentElement && FCKTools.GetElementDocument( range.parentElement() ) != editorDocument )
     119                                                        range = null ;
     120                                                else if ( range.item && FCKTools.GetElementDocument( range.item(0) )!= editorDocument )
     121                                                        range = null ;
     122                                        }
     123                                }
     124
     125                                this.SelectionData = range ;
     126                        }
     127
     128                        // Calculate the dialog position, centering it on the screen.
     129                        var viewSize = FCKTools.GetViewPaneSize( topWindow ) ;
     130                        var scrollPosition = FCKTools.GetScrollPosition( topWindow ) ;
     131                        var iTop  = Math.max( scrollPosition.Y + ( viewSize.Height - height - 20 ) / 2, 0 ) ;
     132                        var iLeft = Math.max( scrollPosition.X + ( viewSize.Width - width - 20 )  / 2, 0 ) ;
     133
     134                        // Setup the IFRAME that will hold the dialog.
     135                        var dialog = topDocument.createElement( 'iframe' ) ;
     136                        dialog.src = FCKConfig.BasePath + 'fckdialog.html' ;
     137
     138                        // Dummy URL for testing whether the code in fckdialog.js alone leaks memory.
     139                        // dialog.src = 'about:blank';
     140
     141                        dialog.frameBorder = 0 ;
     142                        dialog.allowTransparency = true ;
     143                        FCKDomTools.SetElementStyles( dialog,
     144                                        {
     145                                                'position'      : 'absolute',
     146                                                'top'           : iTop + 'px',
     147                                                'left'          : iLeft + 'px',
     148                                                'width'         : width + 'px',
     149                                                'height'        : height + 'px',
     150                                                'zIndex'        : getZIndex()
     151                                        } ) ;
     152
     153                        // Save the dialog info to be used by the dialog page once loaded.
     154                        dialog._DialogArguments = dialogInfo ;
     155
     156                        // Append the IFRAME to the target document.
     157                        topDocument.body.appendChild( dialog ) ;
     158
     159                        // Keep record of the dialog's parent/child relationships.
     160                        dialog._ParentDialog = topDialog ;
     161                        topDialog = dialog ;
     162                },
     163
     164                /**
     165                 * (For internal use)
     166                 * Called when the top dialog is closed.
     167                 */
     168                OnDialogClose : function( dialogWindow )
     169                {
     170                        var dialog = dialogWindow.frameElement ;
     171                        FCKDomTools.RemoveNode( dialog ) ;
     172
     173                        if ( dialog._ParentDialog )             // Nested Dialog.
     174                        {
     175                                topDialog = dialog._ParentDialog ;
     176                                dialog._ParentDialog.contentWindow.SetEnabled( true ) ;
     177                        }
     178                        else                                                    // First Dialog.
     179                        {
     180                                // Set the Focus in the browser, so the "OnBlur" event is not
     181                                // fired. In IE, there is no need to d othat because the dialog
     182                                // already moved the selection to the editing area before
     183                                // closing (EnsureSelection). Also, the Focus() call here
     184                                // causes memory leak on IE7 (weird).
     185                                if ( !FCKBrowserInfo.IsIE )
     186                                        FCK.Focus() ;
     187
     188                                this.HideMainCover() ;
     189                                topDialog = null ;
     190                                this.SelectionData = null ;
     191                        }
     192                },
     193
     194                DisplayMainCover : function()
     195                {
     196                        // Setup the DIV that will be used to cover.
     197                        cover = topDocument.createElement( 'div' ) ;
     198                        FCKDomTools.SetElementStyles( cover,
     199                                {
     200                                        'position' : 'absolute',
     201                                        'zIndex' : getZIndex(),
     202                                        'top' : '0px',
     203                                        'left' : '0px',
     204                                        'backgroundColor' : FCKConfig.BackgroundBlockerColor
     205                                } ) ;
     206                        FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
     207                       
     208                        // For IE6-, we need to fill the cover with a transparent IFRAME,
     209                        // to properly block <select> fields.
     210                        if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
     211                        {
     212                                var iframe = topDocument.createElement( 'iframe' ) ;
     213                                iframe.hideFocus = true ;
     214                                iframe.frameBorder = 0 ;
     215                                iframe.src = FCKTools.GetVoidUrl() ;
     216                                FCKDomTools.SetElementStyles( iframe,
     217                                        {
     218                                                'width' : '100%',
     219                                                'height' : '100%',
     220                                                'position' : 'absolute',
     221                                                'left' : '0px',
     222                                                'top' : '0px',
     223                                                'filter' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
     224                                        } ) ;
     225                                cover.appendChild( iframe ) ;
     226                        }
     227
     228                        // We need to manually adjust the cover size on resize.
     229                        FCKTools.AddEventListener( topWindow, 'resize', resizeHandler ) ;
     230                        resizeHandler() ;
     231
     232                        topDocument.body.appendChild( cover ) ;
     233
     234                        FCKFocusManager.Lock() ;
     235                },
     236               
     237                HideMainCover : function()
     238                {
     239                        FCKDomTools.RemoveNode( cover ) ;
     240                        FCKFocusManager.Unlock() ;
     241                },
     242               
     243                GetCover : function()
     244                {
     245                        return cover ;
     246                }
     247        } ;
     248} )() ;
  • FCKeditor/trunk/editor/_source/internals/fckdomtools.js

    r1384 r1398  
    925925        },
    926926
     927        SetOpacity : function( element, opacity )
     928        {
     929                if ( FCKBrowserInfo.IsIE )
     930                {
     931                        opacity = Math.round( opacity * 100 ) ;
     932                        element.style.filter = ( opacity > 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ) ;
     933                }
     934                else
     935                        element.style.opacity = opacity ;
     936        },
     937
    927938        GetCurrentElementStyle : function( element, propertyName )
    928939        {
     
    936947        {
    937948                var currentElement = element ;
     949
    938950                while ( currentElement != FCKTools.GetElementDocument( currentElement ).documentElement )
    939951                {
    940952                        if ( this.GetCurrentElementStyle( currentElement, 'position' ) != 'static' )
    941953                                return currentElement ;
    942                         currentElement = currentElement.parentNode ;
    943                 }
     954
     955                        if ( currentElement == FCKTools.GetElementDocument( currentElement ).documentElement
     956                                        && currentWindow != w )
     957                                currentElement = currentWindow.frameElement ;
     958                        else
     959                                currentElement = currentElement.parentNode ;
     960                }
     961
    944962                return null ;
    945963        },
  • FCKeditor/trunk/editor/_source/internals/fcktools.js

    r1384 r1398  
    367367{
    368368        // There is no compatMode in Safari, but it seams that it always behave as
    369         // CSS1Compat, so let's assume it as the default.
    370         return ( 'CSS1Compat' == ( document.compatMode || 'CSS1Compat' ) ) ;
     369        // CSS1Compat, so let's assume it as the default for that browser.
     370        return ( 'CSS1Compat' == ( document.compatMode || ( FCKBrowserInfo.IsSafari ? 'CSS1Compat' : null ) ) ) ;
    371371}
    372372
     
    452452                                prevNode = null ;
    453453                                if ( curNode )
    454                                         curWindow = FCKTools.GetElementWindow( curNode ) ;
     454                                        curWindow = curNode.contentWindow.parent ;
    455455                        }
    456456                        else
     
    612612
    613613/**
    614  * Utility function to wrap a call to an object's method,
    615  * so it can be passed for example to an event handler,
    616  * and then it will be executed with 'this' being the object.
    617  */
    618 FCKTools.Hitch = function( obj, methodName )
    619 {
    620   return function() { obj[methodName].apply(obj, arguments); } ;
    621 }
     614 * Binding the "this" reference to an object for a function.
     615 */
     616FCKTools.Bind = function( subject, func )
     617{
     618  return function(){ return func.apply( subject, arguments ) ; } ;
     619}
     620
     621/**
     622 * Retrieve the correct "empty iframe" URL for the current browser, which
     623 * causes the minimum fuzz (e.g. security warnings in HTTPS, DNS error in
     624 * IE5.5, etc.) for that browser, making the iframe ready to DOM use whithout
     625 * having to loading an external file.
     626 */
     627FCKTools.GetVoidUrl = function()
     628{
     629        if ( FCK_IS_CUSTOM_DOMAIN )
     630                return "javascript: void( function(){" +
     631                        "document.open();" +
     632                        "document.write('<html><head><title></title></head><body></body></html>');" +
     633                        "document.domain = '" + FCK_RUNTIME_DOMAIN + "';" +
     634                        "document.close();" +
     635                        "}() ) ;";
     636
     637        if ( FCKBrowserInfo.IsIE )
     638        {
     639                if ( FCKBrowserInfo.IsIE7 || !FCKBrowserInfo.IsIE6 )
     640                        return "" ;                                     // IE7+ / IE5.5
     641                else
     642                        return "javascript: '';" ;      // IE6+
     643        }
     644
     645        return "javascript: void(0);" ;         // All other browsers.
     646}
  • FCKeditor/trunk/editor/_source/internals/fcktools_gecko.js

    r1192 r1398  
    3131{
    3232        if ( FCKBrowserInfo.IsGecko )
    33                 element.style.MozUserSelect     = 'none' ;      // Gecko only.
     33                element.style.MozUserSelect             = 'none' ;      // Gecko only.
     34        else if ( FCKBrowserInfo.IsSafari )
     35                element.style.KhtmlUserSelect   = 'none' ;      // WebKit only.
    3436        else
    35                 element.style.userSelect        = 'none' ;      // CSS3 (not supported yet).
     37                element.style.userSelect                = 'none' ;      // CSS3 (not supported yet).
    3638}
    3739
     
    224226        targetWindow.$ = function( id )
    225227        {
    226                 return this.document.getElementById( id ) ;
     228                return targetWindow.document.getElementById( id ) ;
    227229        } ;
    228230}
  • FCKeditor/trunk/editor/dialog/common/fck_dialog_common.js

    r1192 r1398  
    9191}
    9292
    93 var KeyIdentifierMap =
    94 {
    95         End             : 35,
    96         Home    : 36,
    97         Left    : 37,
    98         Right   : 39,
    99         'U+00007F' : 46         // Delete
    100 }
     93function SelectField( elementId )
     94{
     95        var element = GetE( elementId ) ;
     96        element.focus() ;
     97        element.select() ;
     98}
    10199
    102100// Functions used by text fields to accept numbers only.
    103 function IsDigit( e )
    104 {
    105         if ( !e )
    106                 e = event ;
    107 
    108         var iCode = ( e.keyCode || e.charCode ) ;
    109        
    110         if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
    111                         iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
    112 
    113         return (
    114                         ( iCode >= 48 && iCode <= 57 )          // Numbers
    115                         || (iCode >= 35 && iCode <= 40)         // Arrows, Home, End
    116                         || iCode == 8                                           // Backspace
    117                         || iCode == 46                                          // Delete
    118                         || iCode == 9                                           // Tab
    119         ) ;
    120 }
     101var IsDigit = ( function()
     102        {
     103                var KeyIdentifierMap =
     104                {
     105                        End                     : 35,
     106                        Home            : 36,
     107                        Left            : 37,
     108                        Right           : 39,
     109                        'U+00007F'      : 46            // Delete
     110                } ;
     111
     112                return function ( e )
     113                        {
     114                                if ( !e )
     115                                        e = event ;
     116
     117                                var iCode = ( e.keyCode || e.charCode ) ;
     118                               
     119                                if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
     120                                                iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
     121
     122                                return (
     123                                                ( iCode >= 48 && iCode <= 57 )          // Numbers
     124                                                || (iCode >= 35 && iCode <= 40)         // Arrows, Home, End
     125                                                || iCode == 8                                           // Backspace
     126                                                || iCode == 46                                          // Delete
     127                                                || iCode == 9                                           // Tab
     128                                ) ;
     129                        }
     130        } )() ;
    121131
    122132String.prototype.Trim = function()
  • FCKeditor/trunk/editor/dialog/fck_anchor.html

    r1108 r1398  
    3030                <script type="text/javascript">
    3131
    32 var oEditor     = window.parent.InnerDialogLoaded() ;
    33 var FCK         = oEditor.FCK ;
    34 var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
    35 var FCKTools = oEditor.FCKTools ;
    36 var FCKRegexLib = oEditor.FCKRegexLib ;
    37 
    38 // Gets the document DOM
    39 var oDOM = oEditor.FCK.EditorDocument ;
    40 
    41 var oFakeImage = FCK.Selection.GetSelectedElement() ;
     32var dialog                      = window.parent ;
     33var oEditor                     = dialog.InnerDialogLoaded() ;
     34
     35var FCK                         = oEditor.FCK ;
     36var FCKBrowserInfo      = oEditor.FCKBrowserInfo ;
     37var FCKTools            = oEditor.FCKTools ;
     38var FCKRegexLib         = oEditor.FCKRegexLib ;
     39
     40var oDOM                        = FCK.EditorDocument ;
     41
     42var oFakeImage = dialog.Selection.GetSelectedElement() ;
     43
    4244var oAnchor ;
    4345
     
    7072        window.parent.SetOkButton( true ) ;
    7173        window.parent.SetAutoSize( true ) ;
     74
     75        SelectField( 'txtName' ) ;
    7276}
    7377
  • FCKeditor/trunk/editor/dialog/fck_button.html

    r1108 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor     = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     38var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3839
    3940window.onload = function()
     
    5354                oActiveEl = null ;
    5455
    55         window.parent.SetOkButton( true ) ;
    56         window.parent.SetAutoSize( true ) ;
     56        dialog.SetOkButton( true ) ;
     57        dialog.SetAutoSize( true ) ;
     58        SelectField( 'txtName' ) ;
    5759}
    5860
  • FCKeditor/trunk/editor/dialog/fck_checkbox.html

    r1108 r1398  
    3030                <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor     = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     38var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3839
    3940window.onload = function()
     
    5152                oActiveEl = null ;
    5253
    53         window.parent.SetOkButton( true ) ;
    54         window.parent.SetAutoSize( true ) ;
     54        dialog.SetOkButton( true ) ;
     55        dialog.SetAutoSize( true ) ;
     56        SelectField( 'txtName' ) ;
    5557}
    5658
  • FCKeditor/trunk/editor/dialog/fck_colorselector.html

    r1192 r1398  
    137137function Ok()
    138138{
    139         if ( typeof(window.parent.args.CustomValue) == 'function' )
    140                 window.parent.args.CustomValue( document.getElementById('selcolor').value ) ;
     139        if ( typeof(window.parent.Args().CustomValue) == 'function' )
     140                window.parent.Args().CustomValue( document.getElementById('selcolor').value ) ;
    141141
    142142        return true ;
  • FCKeditor/trunk/editor/dialog/fck_docprops.html

    r644 r1398  
    375375        switch ( wich )
    376376        {
    377                 case 'Back'                     : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectBackColor, window ) ; return ;
    378                 case 'ColorText'        : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorText, window ) ; return ;
    379                 case 'ColorLink'        : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorLink, window ) ; return ;
    380                 case 'ColorVisited'     : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorVisited, window ) ; return ;
    381                 case 'ColorActive'      : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorActive, window ) ; return ;
     377                case 'Back'                     : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectBackColor, window ) ; return ;
     378                case 'ColorText'        : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorText, window ) ; return ;
     379                case 'ColorLink'        : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorLink, window ) ; return ;
     380                case 'ColorVisited'     : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorVisited, window ) ; return ;
     381                case 'ColorActive'      : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorActive, window ) ; return ;
    382382        }
    383383}
  • FCKeditor/trunk/editor/dialog/fck_flash/fck_flash.js

    r1253 r1398  
    2222 */
    2323
    24 var oEditor             = window.parent.InnerDialogLoaded() ;
     24var dialog              = window.parent ;
     25var oEditor             = dialog.InnerDialogLoaded() ;
    2526var FCK                 = oEditor.FCK ;
    2627var FCKLang             = oEditor.FCKLang ;
     
    3031
    3132// Set the dialog tabs.
    32 window.parent.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
     33dialog.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
    3334
    3435if ( FCKConfig.FlashUpload )
    35         window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
     36        dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
    3637
    3738if ( !FCKConfig.FlashDlgHideAdvanced )
    38         window.parent.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
     39        dialog.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
    3940
    4041// Function called when a dialog tag is selected.
     
    4748
    4849// Get the selected flash embed (if available).
    49 var oFakeImage = FCK.Selection.GetSelectedElement() ;
     50var oFakeImage = dialog.Selection.GetSelectedElement() ;
    5051var oEmbed ;
    5152
     
    7374                GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
    7475
    75         window.parent.SetAutoSize( true ) ;
     76        dialog.SetAutoSize( true ) ;
    7677
    7778        // Activate the "OK" button.
    78         window.parent.SetOkButton( true ) ;
     79        dialog.SetOkButton( true ) ;
     80
     81        SelectField( 'txtUrl' ) ;
    7982}
    8083
     
    115118        if ( GetE('txtUrl').value.length == 0 )
    116119        {
    117                 window.parent.SetSelectedTab( 'Info' ) ;
     120                dialog.SetSelectedTab( 'Info' ) ;
    118121                GetE('txtUrl').focus() ;
    119122
     
    228231        UpdatePreview() ;
    229232
    230         window.parent.SetSelectedTab( 'Info' ) ;
     233        dialog.SetSelectedTab( 'Info' ) ;
    231234}
    232235
  • FCKeditor/trunk/editor/dialog/fck_form.html

    r1108 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'FORM' ) ;
     38var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( 'FORM' ) ;
    3839
    3940window.onload = function()
     
    5152                oActiveEl = null ;
    5253
    53         window.parent.SetOkButton( true ) ;
    54         window.parent.SetAutoSize( true ) ;
     54        dialog.SetOkButton( true ) ;
     55        dialog.SetAutoSize( true ) ;
     56        SelectField( 'txtName' ) ;
    5557}
    5658
  • FCKeditor/trunk/editor/dialog/fck_hiddenfield.html

    r1108 r1398  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
     1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    22<!--
    33 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
     
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
     34
    3335var FCK = oEditor.FCK ;
    3436
     
    3739
    3840// Get the selected flash embed (if available).
    39 var oFakeImage = FCK.Selection.GetSelectedElement() ;
     41var oFakeImage = dialog.Selection.GetSelectedElement() ;
    4042var oActiveEl ;
    4143
     
    5961        }
    6062
    61         window.parent.SetOkButton( true ) ;
    62         window.parent.SetAutoSize( true ) ;
     63        dialog.SetOkButton( true ) ;
     64        dialog.SetAutoSize( true ) ;
     65        SelectField( 'txtName' ) ;
    6366}
    6467
  • FCKeditor/trunk/editor/dialog/fck_image/fck_image.js

    r1253 r1398  
    2222 */
    2323
    24 var oEditor             = window.parent.InnerDialogLoaded() ;
     24var dialog              = window.parent ;
     25var oEditor             = dialog.InnerDialogLoaded() ;
    2526var FCK                 = oEditor.FCK ;
    2627var FCKLang             = oEditor.FCKLang ;
     
    3334
    3435// Set the dialog tabs.
    35 window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
     36dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
    3637
    3738if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
    38         window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
     39        dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
    3940
    4041if ( FCKConfig.ImageUpload )
    41         window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
     42        dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
    4243
    4344if ( !FCKConfig.ImageDlgHideAdvanced )
    44         window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
     45        dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
    4546
    4647// Function called when a dialog tag is selected.
     
    5455
    5556// Get the selected image (if available).
    56 var oImage = FCK.Selection.GetSelectedElement() ;
     57var oImage = dialog.Selection.GetSelectedElement() ;
    5758
    5859if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
     
    6061
    6162// Get the active link.
    62 var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
     63var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
    6364
    6465var oImageOriginal ;
     
    112113                GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
    113114
    114         window.parent.SetAutoSize( true ) ;
     115        dialog.SetAutoSize( true ) ;
    115116
    116117        // Activate the "OK" button.
    117         window.parent.SetOkButton( true ) ;
     118        dialog.SetOkButton( true ) ;
     119
     120        SelectField( 'txtUrl' ) ;
    118121}
    119122
     
    198201        if ( GetE('txtUrl').value.length == 0 )
    199202        {
    200                 window.parent.SetSelectedTab( 'Info' ) ;
     203                dialog.SetSelectedTab( 'Info' ) ;
    201204                GetE('txtUrl').focus() ;
    202205
     
    247250                else                    // Creating a new link.
    248251                {
     252                        dialog.Selection.EnsureSelection() ;
     253
    249254                        if ( !bHasImage )
    250255                                oEditor.FCKSelection.SelectNode( oImage ) ;
     
    434439        }
    435440
    436         window.parent.SetSelectedTab( 'Info' ) ;
     441        dialog.SetSelectedTab( 'Info' ) ;
    437442}
    438443
  • FCKeditor/trunk/editor/dialog/fck_link/fck_link.js

    r1253 r1398  
    2222 */
    2323
    24 var oEditor             = window.parent.InnerDialogLoaded() ;
     24var dialog      = window.parent ;
     25var oEditor = dialog.InnerDialogLoaded() ;
     26
    2527var FCK                 = oEditor.FCK ;
    2628var FCKLang             = oEditor.FCKLang ;
     
    3234
    3335// Set the dialog tabs.
    34 window.parent.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
     36dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
    3537
    3638if ( !FCKConfig.LinkDlgHideTarget )
    37         window.parent.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
     39        dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
    3840
    3941if ( FCKConfig.LinkUpload )
    40         window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
     42        dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
    4143
    4244if ( !FCKConfig.LinkDlgHideAdvanced )
    43         window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
     45        dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
    4446
    4547// Function called when a dialog tag is selected.
     
    5153        ShowE('divAttribs'      , ( tabCode == 'Advanced' ) ) ;
    5254
    53         window.parent.SetAutoSize( true ) ;
     55        dialog.SetAutoSize( true ) ;
    5456}
    5557
     
    125127
    126128// oLink: The actual selected link in the editor.
    127 var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
     129var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
    128130if ( oLink )
    129131        FCK.Selection.SelectNode( oLink ) ;
     
    157159
    158160        // Activate the "OK" button.
    159         window.parent.SetOkButton( true ) ;
     161        dialog.SetOkButton( true ) ;
     162        SelectField( 'txtUrl' ) ;
    160163}
    161164
     
    339342
    340343        if ( !FCKConfig.LinkDlgHideTarget )
    341                 window.parent.SetTabVisibility( 'Target'        , (linkType == 'url') ) ;
     344                dialog.SetTabVisibility( 'Target'       , (linkType == 'url') ) ;
    342345
    343346        if ( FCKConfig.LinkUpload )
    344                 window.parent.SetTabVisibility( 'Upload'        , (linkType == 'url') ) ;
     347                dialog.SetTabVisibility( 'Upload'       , (linkType == 'url') ) ;
    345348
    346349        if ( !FCKConfig.LinkDlgHideAdvanced )
    347                 window.parent.SetTabVisibility( 'Advanced'      , (linkType != 'anchor' || bHasAnchors) ) ;
     350                dialog.SetTabVisibility( 'Advanced'     , (linkType != 'anchor' || bHasAnchors) ) ;
    348351
    349352        if ( linkType == 'email' )
    350                 window.parent.SetAutoSize( true ) ;
     353                dialog.SetAutoSize( true ) ;
    351354}
    352355
     
    372375
    373376        if ( targetType == 'popup' )
    374                 window.parent.SetAutoSize( true ) ;
     377                dialog.SetAutoSize( true ) ;
    375378}
    376379
     
    621624
    622625        // Select the (first) link.
     626        dialog.Selection.EnsureSelection() ;
    623627        oEditor.FCKSelection.SelectNode( aLinks[0] );
    624628
     
    635639        document.getElementById('txtUrl').value = url ;
    636640        OnUrlChange() ;
    637         window.parent.SetSelectedTab( 'Info' ) ;
     641        dialog.SetSelectedTab( 'Info' ) ;
    638642}
    639643
  • FCKeditor/trunk/editor/dialog/fck_listprop.html

    r1108 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
     
    3637var sListType = ( location.search == '?OL' ? 'OL' : 'UL' ) ;
    3738
    38 var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( sListType ) ;
     39var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( sListType ) ;
    3940var oActiveSel ;
    4041
     
    6465        }
    6566
    66         window.parent.SetOkButton( true ) ;
    67         window.parent.SetAutoSize( true ) ;
     67        dialog.SetOkButton( true ) ;
     68        dialog.SetAutoSize( true ) ;
     69
     70        SelectField( 'txtStartPosition' ) ;
    6871}
    6972
  • FCKeditor/trunk/editor/dialog/fck_paste.html

    r1192 r1398  
    139139                var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    140140                var oDoc = oEditor.FCK.EditorDocument ;
     141                dialog.Selection.EnsureSelection() ;
    141142                range.MoveToSelection() ;
    142143                range.DeleteContents() ;
  • FCKeditor/trunk/editor/dialog/fck_radiobutton.html

    r1108 r1398  
    3030                <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     38var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3839
    3940window.onload = function()
     
    5152                oActiveEl = null ;
    5253
    53         window.parent.SetOkButton( true ) ;
    54         window.parent.SetAutoSize( true ) ;
     54        dialog.SetOkButton( true ) ;
     55        dialog.SetAutoSize( true ) ;
     56        SelectField( 'txtName' ) ;
    5557}
    5658
  • FCKeditor/trunk/editor/dialog/fck_replace.html

    r1124 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
     34var dialogArguments = dialog.Args() ;
     35
    3336var FCKLang = oEditor.FCKLang ;
    3437
    35 window.parent.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
    36 window.parent.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
     38dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
     39dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
    3740var idMap = {} ;
    3841
     
    4649
    4750        if ( tabCode == 'Replace' )
    48                 window.parent.SetAutoSize( true ) ;
     51                dialog.SetAutoSize( true ) ;
     52}
     53
     54// Place a range at the start of document.
     55// This will be the starting point of our search.
     56var GlobalRange = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
     57GlobalRange.SetStart( oEditor.FCK.EditorDocument.body, 1 ) ;
     58GlobalRange.SetEnd( oEditor.FCK.EditorDocument.body, 1 ) ;
     59GlobalRange.Collapse( true ) ;
     60
     61var HighlightRange = null ;
     62function Highlight()
     63{
     64        if ( HighlightRange )
     65                ClearHighlight() ;
     66        var cloneRange = GlobalRange.Clone() ;
     67        oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' ).ApplyToRange( cloneRange, false, true ) ;
     68        HighlightRange = cloneRange ;
     69        GlobalRange = HighlightRange.Clone() ;
     70}
     71
     72function ClearHighlight()
     73{
     74        if ( HighlightRange )
     75        {
     76                oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' ).RemoveFromRange( HighlightRange, false, true ) ;
     77                HighlightRange = null ;
     78        }
    4979}
    5080
     
    5484        oEditor.FCKLanguageManager.TranslatePage( document ) ;
    5585
    56         // Place the cursor at the start of document.
    57         // This will be the starting point of our search.
    58         var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    59         range.SetStart( oEditor.FCK.EditorDocument.body, 1 ) ;
    60         range.SetEnd( oEditor.FCK.EditorDocument.body, 1 ) ;
    61         range.Collapse( true ) ;
    62         range.Select() ;
    63 
    6486        // Show the appropriate tab at startup.
    65         if ( window.parent.name.search( 'Replace' ) == -1 )
    66         {
    67                 window.parent.SetSelectedTab( 'Find' ) ;
    68                 window.parent.SetAutoSize( true ) ;
     87        if ( dialogArguments.CustomValue == 'Find' )
     88        {
     89                dialog.SetSelectedTab( 'Find' ) ;
     90                dialog.SetAutoSize( true ) ;
    6991        }
    7092        else
    71                 window.parent.SetSelectedTab( 'Replace' ) ;
    72 
     93                dialog.SetSelectedTab( 'Replace' ) ;
     94
     95        SelectField( 'txtFind' + dialogArguments.CustomValue ) ;
    7396}
    7497
     
    79102                        document.getElementById('btnFind').disabled =
    80103                                ( document.getElementById(idMap["FindText"]).value.length == 0 ) ;
    81 }
    82 
    83 function GetSelection()
    84 {
    85         var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    86         range.MoveToSelection() ;
    87         return range.CreateBookmark2() ;
    88104}
    89105
     
    262278        // Start from the end of the current selection.
    263279        var matcher = new KmpMatch( GetSearchString(), ! GetCheckCase() ) ;
    264         var cursor = GetSelection().End ;
     280        var cursor = GlobalRange.CreateBookmark2().End ;
    265281        var matchState = KMP_NOMATCH ;
    266282        var matchBookmark = null ;
     
    342358        }
    343359
    344         // If we've found a match, select the match.
     360        // If we've found a match, highlight the match.
    345361        if ( matchState == KMP_MATCHED )
    346362        {
    347                 var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    348                 range.MoveToBookmark2( matchBookmark ) ;
    349                 range.Select() ;
    350                 var focus = range._Range.endContainer ;
     363                GlobalRange.MoveToBookmark2( matchBookmark ) ;
     364                Highlight() ;
     365                var focus = GlobalRange._Range.endContainer ;
    351366                while ( focus && focus.nodeType != 1 )
    352367                        focus = focus.parentNode ;
     
    368383function Find()
    369384{
    370         var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    371         range.MoveToSelection() ;
    372         range.Collapse( false ) ;
    373         range.Select() ;
    374 
    375385        if ( ! _Find() )
     386        {
     387                ClearHighlight() ;
    376388                alert( FCKLang.DlgFindNotFoundMsg ) ;
     389        }
    377390}
    378391
    379392function Replace()
    380393{
    381         var selection = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    382         selection.MoveToSelection() ;
    383 
    384         if ( selection.CheckIsCollapsed() )
     394        if ( GlobalRange.CheckIsCollapsed() )
    385395        {
    386396                if (! _Find() )
     397                {
     398                        ClearHighlight() ;
    387399                        alert( FCKLang.DlgFindNotFoundMsg ) ;
     400                }
    388401        }
    389402        else
    390403        {
    391404                oEditor.FCKUndo.SaveUndoStep() ;
    392                 selection.DeleteContents() ;
    393                 selection.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
    394                 selection.Collapse( false ) ;
    395                 selection.Select() ;
     405                GlobalRange.DeleteContents() ;
     406                GlobalRange.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
     407                GlobalRange.Collapse( false ) ;
    396408        }
    397409}
     
    400412{
    401413        oEditor.FCKUndo.SaveUndoStep() ;
    402         var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
    403 
    404414        var replaceCount = 0 ;
    405415
    406416        while ( _Find() )
    407417        {
    408                 range.MoveToSelection() ;
    409                 range.DeleteContents() ;
    410                 range.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
    411                 range.Collapse( false ) ;
    412                 range.Select() ;
     418                dialog.Selection.EnsureSelection() ;
     419                GlobalRange.DeleteContents() ;
     420                GlobalRange.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
     421                GlobalRange.Collapse( false ) ;
    413422                replaceCount++ ;
    414423        }
    415424        if ( replaceCount == 0 )
     425        {
     426                ClearHighlight() ;
    416427                alert( FCKLang.DlgFindNotFoundMsg ) ;
    417         window.parent.Cancel() ;
    418 }
     428        }
     429        dialog.Cancel() ;
     430}
     431
     432window.onunload = function(){ ClearHighlight() ; }
    419433        </script>
    420434</head>
  • FCKeditor/trunk/editor/dialog/fck_select.html

    r1108 r1398  
    3131                <script type="text/javascript">
    3232
    33 var oEditor = window.parent.InnerDialogLoaded() ;
     33var dialog      = window.parent ;
     34var oEditor = dialog.InnerDialogLoaded() ;
    3435
    3536// Gets the document DOM
    3637var oDOM = oEditor.FCK.EditorDocument ;
    3738
    38 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     39var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3940
    4041var oListText ;
     
    6970                oActiveEl = null ;
    7071
    71         window.parent.SetOkButton( true ) ;
    72         window.parent.SetAutoSize( true ) ;
     72        dialog.SetOkButton( true ) ;
     73        dialog.SetAutoSize( true ) ;
     74        SelectField( 'txtName' ) ;
    7375}
    7476
  • FCKeditor/trunk/editor/dialog/fck_smiley.html

    r1192 r1398  
    3737        <script type="text/javascript">
    3838
    39 var oEditor = window.parent.InnerDialogLoaded() ;
     39var dialog      = window.parent ;
     40var oEditor = dialog.InnerDialogLoaded() ;
    4041
    4142window.onload = function ()
     
    4445        oEditor.FCKLanguageManager.TranslatePage(document) ;
    4546
    46         window.parent.SetAutoSize( true ) ;
     47        dialog.SetAutoSize( true ) ;
    4748}
    4849
    4950function InsertSmiley( url )
    5051{
     52        dialog.Selection.EnsureSelection() ;
     53
    5154        oEditor.FCKUndo.SaveUndoStep() ;
     55
    5256        var oImg = oEditor.FCK.InsertElement( 'img' ) ;
    5357        oImg.src = url ;
     
    5963        document.body.innerHTML = '' ;
    6064
    61         window.parent.Cancel() ;
     65        dialog.Cancel() ;
    6266}
    6367
  • FCKeditor/trunk/editor/dialog/fck_specialchar.html

    r1283 r1398  
    4444{
    4545        oEditor.FCKUndo.SaveUndoStep() ;
     46        parent.Selection.EnsureSelection() ;
    4647        oEditor.FCK.InsertHtml( charValue || "" ) ;
    4748        window.parent.Cancel() ;
  • FCKeditor/trunk/editor/dialog/fck_table.html

    r933 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
     34var dialogArguments = dialog.Args() ;
    3335
    3436// Gets the document DOM
     
    3739// Gets the table if there is one selected.
    3840var table ;
    39 var e = oEditor.FCKSelection.GetSelectedElement() ;
     41var e = dialog.Selection.GetSelectedElement() ;
    4042
    4143if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) )
     
    8991                document.getElementById('txtRows').disabled    = true ;
    9092                document.getElementById('txtColumns').disabled = true ;
    91         }
    92 
    93         window.parent.SetOkButton( true ) ;
    94         window.parent.SetAutoSize( true ) ;
     93                SelectField( 'txtWidth' ) ;
     94        }
     95        else
     96                SelectField( 'txtRows' ) ;
     97
     98        dialog.SetOkButton( true ) ;
     99        dialog.SetAutoSize( true ) ;
    95100}
    96101
  • FCKeditor/trunk/editor/dialog/fck_tablecell.html

    r453 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
     
    3637
    3738// Array of selected Cells
     39dialog.Selection.EnsureSelection() ;
    3840var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
    3941
     
    4547        SetStartupValue() ;
    4648
    47         window.parent.SetOkButton( true ) ;
    48         window.parent.SetAutoSize( true ) ;
     49        dialog.SetOkButton( true ) ;
     50        dialog.SetAutoSize( true ) ;
     51        SelectField( 'txtWidth' ) ;
    4952}
    5053
     
    119122function SelectColor( wich )
    120123{
    121         oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
     124        oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
    122125}
    123126
  • FCKeditor/trunk/editor/dialog/fck_textarea.html

    r1108 r1398  
    3030                <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     38var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3839
    3940window.onload = function()
     
    5152                oActiveEl = null ;
    5253
    53         window.parent.SetOkButton( true ) ;
    54         window.parent.SetAutoSize( true ) ;
     54        dialog.SetOkButton( true ) ;
     55        dialog.SetAutoSize( true ) ;
     56        SelectField( 'txtName' ) ;
    5557}
    5658
  • FCKeditor/trunk/editor/dialog/fck_textfield.html

    r1108 r1398  
    3030        <script type="text/javascript">
    3131
    32 var oEditor = window.parent.InnerDialogLoaded() ;
     32var dialog      = window.parent ;
     33var oEditor = dialog.InnerDialogLoaded() ;
    3334
    3435// Gets the document DOM
    3536var oDOM = oEditor.FCK.EditorDocument ;
    3637
    37 var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
     38var oActiveEl = dialog.Selection.GetSelectedElement() ;
    3839
    3940window.onload = function()
     
    5556                oActiveEl = null ;
    5657
    57         window.parent.SetOkButton( true ) ;
    58         window.parent.SetAutoSize( true ) ;
     58        dialog.SetOkButton( true ) ;
     59        dialog.SetAutoSize( true ) ;
     60        SelectField( 'txtName' ) ;
    5961}
    6062
  • FCKeditor/trunk/editor/dtd/fck_xhtml10strict.js

    r1211 r1398  
    1 /*
     1/*
    22 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
    33 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  • FCKeditor/trunk/editor/dtd/fck_xhtml10transitional.js

    r1211 r1398  
    1 /*
     1/*
    22 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
    33 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  • FCKeditor/trunk/editor/fckdialog.html

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

    r1300 r1398  
    182182LoadScript( '_source/internals/fcktoolbarset.js' ) ;
    183183LoadScript( '_source/internals/fckdialog.js' ) ;
    184 LoadScript( '_source/internals/fckdialog_' + sSuffix + '.js' ) ;
    185184LoadScript( '_source/classes/fckmenuitem.js' ) ;
    186185LoadScript( '_source/classes/fckmenublock.js' ) ;
     
    238237
    239238FCKConfig_PreProcess() ;
     239
     240// Popup the debug window if debug mode is set to true. It guarantees that the
     241// first debug message will not be lost.
     242if ( FCKConfig.Debug )
     243        FCKDebug._GetWindow() ;
    240244
    241245// Load the active skin CSS.
  • FCKeditor/trunk/editor/filemanager/connectors/aspx/connector.aspx

    r1203 r1398  
    1 <%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" %>
     1<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" %>
    22<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
    33<%--
  • FCKeditor/trunk/editor/filemanager/connectors/aspx/upload.aspx

    r1203 r1398  
    1 <%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Uploader" AutoEventWireup="false" %>
     1<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Uploader" AutoEventWireup="false" %>
    22<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
    33<%--
  • FCKeditor/trunk/editor/plugins/placeholder/fckplugin.js

    r308 r1398  
    2323
    2424// Register the related command.
    25 FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 170 ) ) ;
     25FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 160 ) ) ;
    2626
    2727// Create the "Plaholder" toolbar button.
  • FCKeditor/trunk/editor/skins/default/fck_dialog.css

    r447 r1398  
    1 /*
     1/*
    22 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
    33 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
     
    2222 */
    2323
     24html, body
     25{
     26        background-color: transparent;
     27        margin: 0px;
     28        padding: 0px;
     29}
     30
    2431body
    2532{
    26         margin: 0px;
    2733        padding: 10px;
    2834}
     
    3945}
    4046
    41 .PopupBody
    42 {
    43         margin: 0px;
     47.DialogBody
     48{
     49        height: 100%;
     50        width: 100%;
     51        overflow: hidden;
     52        background-color: transparent;
    4453        padding: 0px;
    4554}
    4655
    47 .PopupTitle
     56#header
     57{
     58        cursor: move;
     59}
     60
     61.DialogTitle
    4862{
    4963        font-weight: bold;
     
    5468}
    5569
    56 .PopupButtons
    57 {
     70.DialogButtons
     71{
     72        position: absolute;
     73        bottom: 0px;
    5874        border-top: #d5d59d 1px solid;
    5975        background-color: #e3e3c7;
     
    8399}
    84100
    85 .PopupTitleBorder
     101.DialogTitleBorder
    86102{
    87103        border-bottom: #d5d59d 1px solid;
    88104}
    89105
    90 .PopupTabArea
     106.DialogTabArea
    91107{
    92108        color: #737357;
     
    94110}
    95111
    96 .PopupTabEmptyArea
    97 {
    98         padding-left: 10px ;
     112.DialogTabEmptyArea
     113{
     114        padding-left: 10px;
    99115        border-bottom: #d5d59d 1px solid;
    100116}
    101117
    102 .PopupTab, .PopupTabSelected
     118.DialogTab, .DialogTabSelected
    103119{
    104120        border-right: #d5d59d 1px solid;
     
    109125}
    110126
    111 .PopupTab
     127.DialogTab
    112128{
    113129        margin-top: 1px;
     
    117133}
    118134
    119 .PopupTabSelected
    120 {
    121         font-weight:bold;
     135.DialogTabSelected
     136{
     137        font-weight: bold;
    122138        cursor: default;
    123139        padding-top: 4px;
     
    126142}
    127143
    128 .PopupSelectionBox
     144.DialogSelectionBox
    129145{
    130146        border: #ff9933 1px solid !important;
     
    134150}
    135151
    136 #tdBrowse 
     152#tdBrowse
    137153{
    138154        vertical-align: bottom;
    139155}
     156
     157/**
     158 * Dialog frame related styles.
     159 */
     160
     161.contents
     162{
     163        position: absolute;
     164        top: 2px;
     165        left: 16px;
     166        right: 16px;
     167        bottom: 20px;
     168        background-color: #f1f1e3;
     169        overflow: hidden;
     170        z-index: 1;
     171}
     172
     173.tl, .tr, .tc, .bl, .br, .bc
     174{
     175        position: absolute;
     176        background-image: url(images/sprites.png);
     177        background-repeat: no-repeat;
     178}
     179
     180* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
     181{
     182        background-image: url(images/sprites.gif);
     183}
     184
     185.ml, .mr
     186{
     187        position: absolute;
     188        background-image: url(images/dialog.sides.png);
     189        background-repeat: repeat-y;
     190}
     191
     192* html .ml, * html .mr
     193{
     194        background-image: url(images/dialog.sides.gif);
     195}
     196
     197.rtl .ml, .rtl .mr
     198{
     199        position: absolute;
     200        background-image: url(images/dialog.sides.rtl.png);
     201        background-repeat: repeat-y;
     202}
     203
     204* html .rtl .ml, * html .rtl .mr
     205{
     206        background-image: url(images/dialog.sides.gif);
     207}
     208
     209.tl
     210{
     211        top: 0px;
     212        left: 0px;
     213        width: 16px;
     214        height: 16px;
     215        background-position: -16px -16px;
     216}
     217
     218.rtl .tl
     219{
     220        background-position: -16px -397px;
     221}
     222
     223.tr
     224{
     225        top: 0px;
     226        right: 0px;
     227        width: 16px;
     228        height: 16px;
     229        background-position: -16px -76px;
     230}
     231
     232.rtl .tr
     233{
     234        background-position: -16px -457px;
     235}
     236
     237.tc
     238{
     239        top: 0px;
     240        right: 16px;
     241        left: 16px;
     242        height: 16px;
     243        background-position: 0px -136px;
     244        background-repeat: repeat-x;
     245}
     246
     247.ml
     248{
     249        top: 16px;
     250        left: 0px;
     251        width: 16px;
     252        bottom: 51px;
     253        background-position: 0px 0px;
     254}
     255
     256.mr
     257{
     258        top: 16px;
     259        right: 0px;
     260        width: 16px;
     261        bottom: 51px;
     262        background-position: -16px 0px;
     263}
     264
     265.bl
     266{
     267        bottom: 0px;
     268        left: 0px;
     269        width: 30px;
     270        height: 51px;
     271        background-position: -16px -196px;
     272}
     273
     274.rtl .bl
     275{
     276        background-position: -16px -517px;
     277}
     278
     279.br
     280{
     281        bottom: 0px;
     282        right: 0px;
     283        width: 30px;
     284        height: 51px;
     285        background-position: -16px -263px;
     286}
     287
     288.rtl .br
     289{
     290        background-position: -16px -584px;
     291}
     292
     293.bc
     294{
     295        bottom: 0px;
     296        right: 30px;
     297        left: 30px;
     298        height: 51px;
     299        background-position: 0px -330px;
     300        background-repeat: repeat-x;
     301}
     302
     303/* For IE6. Do not change it. */
     304* html .blocker
     305{
     306        position: absolute;
     307        width: 100%;
     308        height: 100%;
     309        z-index: 12;
     310        filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
     311}
     312
     313/* The layer used to cover the dialog when opening a child dialog. */
     314.cover
     315{
     316        position: absolute;
     317        top: 0px;
     318        left: 14px;
     319        right: 14px;
     320        bottom: 18px;
     321        z-index: 11;
     322}
     323
     324#closeButton
     325{
     326        position: absolute;
     327        right: 0px;
     328        top: 0px;
     329        margin-top: 5px;
     330        margin-right: 10px;
     331        width: 20px;
     332        height: 20px;
     333        cursor: pointer;
     334        background-image: url(images/sprites.png);
     335        background-repeat: no-repeat;
     336        background-position: -16px -651px;
     337}
     338
     339* html #closeButton
     340{
     341        cursor: hand;
     342        background-image: url(images/sprites.gif);
     343}
     344
     345.rtl #closeButton
     346{
     347        right: auto;
     348        left: 0px;
     349        margin-left: 10px;
     350}
     351
     352#closeButton:hover
     353{
     354        background-position: -16px -687px;
     355}
     356
     357#throbberBlock
     358{
     359        z-index: 10;
     360}
     361
     362#throbberBlock div
     363{
     364        float: left;
     365        width: 8px;
     366        height: 9px;
     367        margin-left: 2px;
     368        margin-right: 2px;
     369        font-size: 1px; /* IE6 */
     370}
     371
     372/*
     373        Color Gradient Generator:
     374        http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4
     375*/
     376
     377.throbber_1
     378{
     379        background-color: #737357;
     380}
     381
     382.throbber_2
     383{
     384        background-color: #8f8f73;
     385}
     386
     387.throbber_3
     388{
     389        background-color: #abab8f;
     390}
     391
     392.throbber_4
     393{
     394        background-color: #c7c7ab;
     395}
     396
     397.throbber_5
     398{
     399        background-color: #e3e3c7;
     400}
  • FCKeditor/trunk/editor/skins/office2003/fck_dialog.css

    r447 r1398  
    1 /*
     1/*
    22 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
    33 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
     
    2222 */
    2323
     24html, body
     25{
     26        background-color: transparent;
     27        margin: 0px;
     28        padding: 0px;
     29}
     30
    2431body
    2532{
    26         margin: 0px;
    2733        padding: 10px;
    28         background-color: #f7f8fd;
    2934}
    3035
     
    4045}
    4146
    42 .PopupBody
    43 {
    44         margin: 0px;
     47.DialogBody
     48{
     49        height: 100%;
     50        width: 100%;
     51        overflow: hidden;
     52        background-color: transparent;
    4553        padding: 0px;
    4654}
    4755
    48 .PopupTitle
     56#header
     57{
     58        cursor: move;
     59}
     60
     61.DialogTitle
    4962{
    5063        font-weight: bold;
     
    5568}
    5669
    57 .PopupButtons
    58 {
     70.DialogButtons
     71{
     72        position: absolute;
     73        bottom: 0px;
    5974        border-top: #466ca6 1px solid;
    6075        background-color: #8cb2fd;
     
    8499}
    85100
    86 .PopupTitleBorder
     101.DialogTitleBorder
    87102{
    88103        border-bottom: #d5d59d 1px solid;
    89104}
    90105
    91 .PopupTabArea
     106.DialogTabArea
    92107{
    93108        color: #0e3460;
     
    95110}
    96111
    97 .PopupTabEmptyArea
     112.DialogTabEmptyArea
    98113{
    99114        padding-left: 10px ;
     
    101116}
    102117
    103 .PopupTab, .PopupTabSelected
     118.DialogTab, .DialogTabSelected
    104119{
    105120        border-right: #466ca6 1px solid;
     
    110125}
    111126
    112 .PopupTab
     127.DialogTab
    113128{
    114129        margin-top: 1px;
     
    118133}
    119134
    120 .PopupTabSelected
    121 {
    122         font-weight:bold;
     135.DialogTabSelected
     136{
     137        font-weight: bold;
    123138        cursor: default;
    124139        padding-top: 4px;
     
    127142}
    128143
    129 .PopupSelectionBox
     144.DialogSelectionBox
    130145{
    131146        border: #1e90ff 1px solid !important;
     
    139154        vertical-align: bottom;
    140155}
     156
     157/**
     158 * Dialog frame related styles.
     159 */
     160
     161.contents
     162{
     163        position: absolute;
     164        top: 2px;
     165        left: 16px;
     166        right: 16px;
     167        bottom: 20px;
     168        background-color: #f7f8fD;
     169        overflow: hidden;
     170        z-index: 1;
     171}
     172
     173.tl, .tr, .tc, .bl, .br, .bc
     174{
     175        position: absolute;
     176        background-image: url(images/sprites.png);
     177        background-repeat: no-repeat;
     178}
     179
     180* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
     181{
     182        background-image: url(images/sprites.gif);
     183}
     184
     185.ml, .mr
     186{
     187        position: absolute;
     188        background-image: url(images/dialog.sides.png);
     189        background-repeat: repeat-y;
     190}
     191
     192* html .ml, * html .mr
     193{
     194        background-image: url(images/dialog.sides.gif);
     195}
     196
     197.rtl .ml, .rtl .mr
     198{
     199        position: absolute;
     200        background-image: url(images/dialog.sides.rtl.png);
     201        background-repeat: repeat-y;
     202}
     203
     204* html .rtl .ml, * html .rtl .mr
     205{
     206        background-image: url(images/dialog.sides.gif);
     207}
     208
     209.tl
     210{
     211        top: 0px;
     212        left: 0px;
     213        width: 16px;
     214        height: 16px;
     215        background-position: -16px -16px;
     216}
     217
     218.rtl .tl
     219{
     220        background-position: -16px -397px;
     221}
     222
     223.tr
     224{
     225        top: 0px;
     226        right: 0px;
     227        width: 16px;
     228        height: 16px;
     229        background-position: -16px -76px;
     230}
     231
     232.rtl .tr
     233{
     234        background-position: -16px -457px;
     235}
     236
     237.tc
     238{
     239        top: 0px;
     240        right: 16px;
     241        left: 16px;
     242        height: 16px;
     243        background-position: 0px -136px;
     244        background-repeat: repeat-x;
     245}
     246
     247.ml
     248{
     249        top: 16px;
     250        left: 0px;
     251        width: 16px;
     252        bottom: 51px;
     253        background-position: 0px 0px;
     254}
     255
     256.mr
     257{
     258        top: 16px;
     259        right: 0px;
     260        width: 16px;
     261        bottom: 51px;
     262        background-position: -16px 0px;
     263}
     264
     265.bl
     266{
     267        bottom: 0px;
     268        left: 0px;
     269        width: 30px;
     270        height: 51px;
     271        background-position: -16px -196px;
     272}
     273
     274.rtl .bl
     275{
     276        background-position: -16px -517px;
     277}
     278
     279.br
     280{
     281        bottom: 0px;
     282        right: 0px;
     283        width: 30px;
     284        height: 51px;
     285        background-position: -16px -263px;
     286}
     287
     288.rtl .br
     289{
     290        background-position: -16px -584px;
     291}
     292
     293.bc
     294{
     295        bottom: 0px;
     296        right: 30px;
     297        left: 30px;
     298        height: 51px;
     299        background-position: 0px -330px;
     300        background-repeat: repeat-x;
     301}
     302
     303/* For IE6. Do not change it. */
     304* html .blocker
     305{
     306        position: absolute;
     307        width: 100%;
     308        height: 100%;
     309        z-index: 12;
     310        filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
     311}
     312
     313/* The layer used to cover the dialog when opening a child dialog. */
     314.cover
     315{
     316        position: absolute;
     317        top: 0px;
     318        left: 14px;
     319        right: 14px;
     320        bottom: 18px;
     321        z-index: 11;
     322}
     323
     324#closeButton
     325{
     326        position: absolute;
     327        right: 0px;
     328        top: 0px;
     329        margin-top: 5px;
     330        margin-right: 10px;
     331        width: 20px;
     332        height: 20px;
     333        cursor: pointer;
     334        background-image: url(images/sprites.png);
     335        background-repeat: no-repeat;
     336        background-position: -16px -651px;
     337}
     338
     339* html #closeButton
     340{
     341        cursor: hand;
     342        background-image: url(images/sprites.gif);
     343}
     344
     345.rtl #closeButton
     346{
     347        right: auto;
     348        left: 0px;
     349        margin-left: 10px;
     350}
     351
     352#closeButton:hover
     353{
     354        background-position: -16px -687px;
     355}
     356
     357#throbberBlock
     358{
     359        z-index: 10;
     360}
     361
     362#throbberBlock div
     363{
     364        float: left;
     365        width: 8px;
     366        height: 9px;
     367        margin-left: 2px;
     368        margin-right: 2px;
     369        font-size: 1px; /* IE6 */
     370}
     371
     372/*
     373        Color Gradient Generator:
     374        http://www.herethere.net/~samson/php/color_gradient/?cbegin=0E3460&cend=8cb2fd&steps=4
     375*/
     376
     377.throbber_1
     378{
     379        background-color: #0E3460;
     380}
     381
     382.throbber_2
     383{
     384        background-color: #2D5387;
     385}
     386
     387.throbber_3
     388{
     389        background-color: #4D73AE;
     390}
     391
     392.throbber_4
     393{
     394        background-color: #6C92D5;
     395}
     396
     397.throbber_5
     398{
     399        background-color: #8CB2FD;
     400}
  • FCKeditor/trunk/editor/skins/silver/fck_dialog.css

    r447 r1398  
    1 /*
     1/*
    22 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
    33 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
     
    2222 */
    2323
     24html, body
     25{
     26        background-color: transparent;
     27        margin: 0px;
     28        padding: 0px;
     29}
     30
    2431body
    2532{
    26         margin: 0px;
    2733        padding: 10px;
    28         background-color: #f7f7f7;
    2934}
    3035
     
    4045}
    4146
    42 .PopupBody
    43 {
    44         margin: 0px;
     47.DialogBody
     48{
     49        height: 100%;
     50        width: 100%;
     51        overflow: hidden;
     52        background-color: transparent;
    4553        padding: 0px;
    4654}
    4755
    48 .PopupTitle
    49 {
    50         padding-right: 10px;
    51         padding-left: 10px;
     56#header
     57{
     58        cursor: move;
     59}
     60
     61.DialogTitle
     62{
    5263        font-weight: bold;
    5364        font-size: 14pt;
    54         padding-bottom: 3px;
    5565        color: #504845;
    56         padding-top: 3px;
    5766        background-color: #dedede;
    58 }
    59 
    60 .PopupButtons
    61 {
     67        padding: 3px 10px 3px 10px;
     68}
     69
     70.DialogButtons
     71{
     72        position: absolute;
     73        bottom: 0px;
    6274        border-top: #cec6b5 1px solid;
    6375        background-color: #DEDEDE;
     
    8799}
    88100
    89 .PopupTitleBorder
     101.DialogTitleBorder
    90102{
    91103        border-bottom: #cec6b5 1px solid;
    92104}
    93105
    94 .PopupTabArea
     106.DialogTabArea
    95107{
    96108        color: #504845;
     
    98110}
    99111
    100 .PopupTabEmptyArea
     112.DialogTabEmptyArea
    101113{
    102114        padding-left: 10px ;
     
    104116}
    105117
    106 .PopupTab, .PopupTabSelected
     118.DialogTab, .DialogTabSelected
    107119{
    108120        border-right: #cec6b5 1px solid;
     
    113125}
    114126
    115 .PopupTab
     127.DialogTab
    116128{
    117129        margin-top: 1px;
     
    121133}
    122134
    123 .PopupTabSelected
     135.DialogTabSelected
    124136{
    125137        font-weight:bold;
     
    130142}
    131143
    132 .PopupSelectionBox
     144.DialogSelectionBox
    133145{
    134146        border: #a9a9a9 1px solid !important;
     
    142154        vertical-align: bottom;
    143155}
     156
     157/**
     158 * Dialog frame related styles.
     159 */
     160
     161.contents
     162{
     163        position: absolute;
     164        top: 2px;
     165        left: 16px;
     166        right: 16px;
     167        bottom: 20px;
     168        background-color: #f7f7f7;
     169        overflow: hidden;
     170        z-index: 1;
     171}
     172
     173.tl, .tr, .tc, .bl, .br, .bc
     174{
     175        position: absolute;
     176        background-image: url(images/sprites.png);
     177        background-repeat: no-repeat;
     178}
     179
     180* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
     181{
     182        background-image: url(images/sprites.gif);
     183}
     184
     185.ml, .mr
     186{
     187        position: absolute;
     188        background-image: url(images/dialog.sides.png);
     189        background-repeat: repeat-y;
     190}
     191
     192* html .ml, * html .mr
     193{
     194        background-image: url(images/dialog.sides.gif);
     195}
     196
     197.rtl .ml, .rtl .mr
     198{
     199        position: absolute;
     200        background-image: url(images/dialog.sides.rtl.png);
     201        background-repeat: repeat-y;
     202}
     203
     204* html .rtl .ml, * html .rtl .mr
     205{
     206        background-image: url(images/dialog.sides.gif);
     207}
     208
     209.tl
     210{
     211        top: 0px;
     212        left: 0px;
     213        width: 16px;
     214        height: 16px;
     215        background-position: -16px -16px;
     216}
     217
     218.rtl .tl
     219{
     220        background-position: -16px -397px;
     221}
     222
     223.tr
     224{
     225        top: 0px;
     226        right: 0px;
     227        width: 16px;
     228        height: 16px;
     229        background-position: -16px -76px;
     230}
     231
     232.rtl .tr
     233{
     234        background-position: -16px -457px;
     235}
     236
     237.tc
     238{
     239        top: 0px;
     240        right: 16px;
     241        left: 16px;
     242        height: 16px;
     243        background-position: 0px -136px;
     244        background-repeat: repeat-x;
     245}
     246
     247.ml
     248{
     249        top: 16px;
     250        left: 0px;
     251        width: 16px;
     252        bottom: 51px;
     253        background-position: 0px 0px;
     254}
     255
     256.mr
     257{
     258        top: 16px;
     259        right: 0px;
     260        width: 16px;
     261        bottom: 51px;
     262        background-position: -16px 0px;
     263}
     264
     265.bl
     266{
     267        bottom: 0px;
     268        left: 0px;
     269        width: 30px;
     270        height: 51px;
     271        background-position: -16px -196px;
     272}
     273
     274.rtl .bl
     275{
     276        background-position: -16px -517px;
     277}
     278
     279.br
     280{
     281        bottom: 0px;
     282        right: 0px;
     283        width: 30px;
     284        height: 51px;
     285        background-position: -16px -263px;
     286}
     287
     288.rtl .br
     289{
     290        background-position: -16px -584px;
     291}
     292
     293.bc
     294{
     295        bottom: 0px;
     296        right: 30px;
     297        left: 30px;
     298        height: 51px;
     299        background-position: 0px -330px;
     300        background-repeat: repeat-x;
     301}
     302
     303/* For IE6. Do not change it. */
     304* html .blocker
     305{
     306        position: absolute;
     307        width: 100%;
     308        height: 100%;
     309        z-index: 12;
     310        filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
     311}
     312
     313/* The layer used to cover the dialog when opening a child dialog. */
     314.cover
     315{
     316        position: absolute;
     317        top: 0px;
     318        left: 14px;
     319        right: 14px;
     320        bottom: 18px;
     321        z-index: 11;
     322}
     323
     324#closeButton
     325{
     326        position: absolute;
     327        right: 0px;
     328        top: 0px;
     329        margin-top: 5px;
     330        margin-right: 10px;
     331        width: 20px;
     332        height: 20px;
     333        cursor: pointer;
     334        background-image: url(images/sprites.png);
     335        background-repeat: no-repeat;
     336        background-position: -16px -651px;
     337}
     338
     339* html #closeButton
     340{
     341        cursor: hand;
     342        background-image: url(images/sprites.gif);
     343}
     344
     345.rtl #closeButton
     346{
     347        right: auto;
     348        left: 0px;
     349        margin-left: 10px;
     350}
     351
     352#closeButton:hover
     353{
     354        background-position: -16px -687px;
     355}
     356
     357#throbberBlock
     358{
     359        z-index: 10;
     360}
     361
     362#throbberBlock div
     363{
     364        float: left;
     365        width: 8px;
     366        height: 9px;
     367        margin-left: 2px;
     368        margin-right: 2px;
     369        font-size: 1px; /* IE6 */
     370}
     371
     372/*
     373        Color Gradient Generator:
     374        http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
     375*/
     376
     377.throbber_1
     378{
     379        background-color: #504845;
     380}
     381
     382.throbber_2
     383{
     384        background-color: #736D6B;
     385}
     386
     387.throbber_3
     388{
     389        background-color: #979391;
     390}
     391
     392.throbber_4
     393{
     394        background-color: #BAB8B7;
     395}
     396
     397.throbber_5
     398{
     399        background-color: #DEDEDE;
     400}
  • FCKeditor/trunk/fckconfig.js

    r1170 r1398  
    240240        },
    241241       
    242         'BackColor'             : { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } }
     242        'BackColor'             : { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } },
     243
     244        'SelectionHighlight' : { Element : 'span', Styles : { 'background-color' : 'navy', 'color' : 'white' } }
    243245};
    244246
     
    303305FCKConfig.SmileyColumns = 8 ;
    304306FCKConfig.SmileyWindowWidth             = 320 ;
    305 FCKConfig.SmileyWindowHeight    = 240 ;
    306 
     307FCKConfig.SmileyWindowHeight    = 210 ;
     308
     309FCKConfig.BackgroundBlockerColor = '#ffffff' ;
     310FCKConfig.BackgroundBlockerOpacity = 0.50 ;
  • FCKeditor/trunk/fckpackager.xml

    r851 r1398  
    152152                <File path="editor/_source/internals/fcktoolbarset.js" />
    153153                <File path="editor/_source/internals/fckdialog.js" />
    154                 <File path="editor/_source/internals/fckdialog_ie.js" />
    155154
    156155                <File path="editor/_source/classes/fckmenuitem.js" />
     
    248247                <File path="editor/_source/internals/fcktoolbarset.js" />
    249248                <File path="editor/_source/internals/fckdialog.js" />
    250                 <File path="editor/_source/internals/fckdialog_gecko.js" />
    251249
    252250                <File path="editor/_source/classes/fckmenuitem.js" />
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy