Ticket #2862: 2862_14.patch

File 2862_14.patch, 14.2 KB (added by Martin Kou, 15 years ago)
  • _source/lang/en.js

     
    574574                title : 'About CKEditor',
    575575                moreInfo : 'For licensing information please visit our web site:',
    576576                copy : 'Copyright © $1. All rights reserved.'
    577         }
     577        },
     578
     579        maximize : 'Maximize'
    578580};
  • _source/plugins/sourcearea/plugin.js

     
    2929                                                                holderElement.setStyle( 'position', 'relative' );
    3030
    3131                                                        // Create the source area <textarea>.
    32                                                         textarea = new CKEDITOR.dom.element( 'textarea' );
     32                                                        editor.textarea = textarea = new CKEDITOR.dom.element( 'textarea' );
    3333                                                        textarea.setAttributes(
    3434                                                                {
    3535                                                                        dir : 'ltr',
     
    127127
    128128                                                unload : function( holderElement )
    129129                                                {
    130                                                         textarea = null;
     130                                                        editor.textarea = textarea = null;
    131131
    132132                                                        if ( onResize )
    133133                                                                editor.removeListener( 'resize', onResize );
  • _source/plugins/maximize/plugin.js

     
     1/*
     2Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
     3For licensing, see LICENSE.html or http://ckeditor.com/license
     4*/
     5
     6(function()
     7{
     8        function protectFormStyles( formElement )
     9        {
     10                if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )
     11                        return [];
     12
     13                var hijackRecord = [];
     14                var hijackNames = [ 'style', 'className' ];
     15                for ( var i = 0 ; i < hijackNames.length ; i++ )
     16                {
     17                        var name = hijackNames[i];
     18                        var $node = formElement.$.elements.namedItem( name );
     19                        if ( $node )
     20                        {
     21                                var hijackNode = new CKEDITOR.dom.element( $node );
     22                                hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] );
     23                                hijackNode.remove();
     24                        }
     25                }
     26
     27                return hijackRecord;
     28        }
     29
     30        function restoreFormStyles( formElement, hijackRecord )
     31        {
     32                if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )
     33                        return;
     34
     35                if ( hijackRecord.length > 0 )
     36                {
     37                        for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- )
     38                        {
     39                                var node = hijackRecord[i][0];
     40                                var sibling = hijackRecord[i][1];
     41                                if ( sibling )
     42                                        node.insertBefore( sibling );
     43                                else
     44                                        node.appendTo( formElement );
     45                        }
     46                }
     47        }
     48
     49        function saveStyles( element, isInsideEditor )
     50        {
     51                var data = protectFormStyles( element );
     52                var retval = {};
     53
     54                var $element = element.$;
     55
     56                if ( !isInsideEditor )
     57                {
     58                        retval[ 'class' ] = $element.className || '';
     59                        $element.className = '';
     60                }
     61
     62                retval.inline = $element.style.cssText || '';
     63                if ( !isInsideEditor )          // Reset any external styles that might interfere. (#2474)
     64                        $element.style.cssText = 'position: static; overflow: visible';
     65
     66                restoreFormStyles( data );
     67                return retval;
     68        }
     69
     70        function restoreStyles( element, savedStyles )
     71        {
     72                var data = protectFormStyles( element );
     73                var $element = element.$;
     74                if ( 'class' in savedStyles )
     75                        $element.className = savedStyles[ 'class' ];
     76                if ( 'inline' in savedStyles )
     77                        $element.style.cssText = savedStyles.inline;
     78                restoreFormStyles( data );
     79        }
     80
     81        function getResizeHandler( mainWindow, editor )
     82        {
     83                return function()
     84                {
     85                        var viewPaneSize = mainWindow.getViewPaneSize();
     86                        editor.resize( viewPaneSize.width, viewPaneSize.height );
     87                };
     88        }
     89
     90        CKEDITOR.plugins.add( 'maximize',
     91        {
     92                init : function( editor )
     93                {
     94                        var lang = editor.lang;
     95                        var mainDocument = CKEDITOR.document;
     96                        var mainWindow = mainDocument.getWindow();
     97
     98                        // Saved selection and scroll position for the editing area.
     99                        var savedSelection;
     100                        var savedScroll;
     101
     102                        // Saved scroll position for the outer window.
     103                        var outerScroll;
     104
     105                        // Saved resize handler function.
     106                        var resizeHandler = getResizeHandler( mainWindow, editor );
     107
     108                        // Retain state after mode switches.
     109                        var savedState = CKEDITOR.TRISTATE_OFF;
     110
     111                        editor.addCommand( 'maximize',
     112                                {
     113                                        modes : { wysiwyg : 1, source : 1 },
     114
     115                                        exec : function()
     116                                        {
     117                                                var container = editor.container.getChild( [ 0, 0 ] );
     118                                                var contents = editor.getThemeSpace( 'contents' );
     119
     120                                                // Save current selection and scroll position in editing area.
     121                                                if ( editor.mode == 'wysiwyg' )
     122                                                {
     123                                                        savedSelection = editor.getSelection().getRanges();
     124                                                        savedScroll = editor.window.getScrollPosition();
     125                                                }
     126                                                else
     127                                                {
     128                                                        var $textarea = editor.textarea.$;
     129                                                        savedSelection = !CKEDITOR.env.ie && [ $textarea.selectionStart, $textarea.selectionEnd ];
     130                                                        savedScroll = [ $textarea.scrollLeft, $textarea.scrollTop ];
     131                                                }
     132                                               
     133                                                if ( this.state == CKEDITOR.TRISTATE_OFF )              // Go fullscreen if the state is off.
     134                                                {
     135                                                        // Add event handler for resizing.
     136                                                        mainWindow.on( 'resize', resizeHandler );
     137                                                       
     138                                                        // Save the scroll bar position.
     139                                                        outerScroll = mainWindow.getScrollPosition();
     140
     141                                                        // Save and reset the styles for the entire node tree.
     142                                                        var currentNode = editor.container;
     143                                                        while ( ( currentNode = currentNode.getParent() ) )
     144                                                        {
     145                                                                currentNode.setCustomData( 'maximize_saved_styles', saveStyles( currentNode ) );
     146                                                                currentNode.setStyle( 'z-index', editor.config.baseFloatZIndex - 1 );
     147                                                        }
     148                                                        contents.setCustomData( 'maximize_saved_styles', saveStyles( contents, true ) );
     149                                                        container.setCustomData( 'maximize_saved_styles', saveStyles( container, true ) );
     150
     151                                                        // Hide scroll bars.
     152                                                        if ( CKEDITOR.env.ie )
     153                                                        {
     154                                                                mainDocument.$.documentElement.style.overflow =
     155                                                                        mainDocument.getBody().$.style.overflow = 'hidden';
     156                                                        }
     157                                                        else
     158                                                        {
     159                                                                mainDocument.getBody().setStyles(
     160                                                                        {
     161                                                                                overflow : 'hidden',
     162                                                                                width : '0px',
     163                                                                                height : '0px'
     164                                                                        } );
     165                                                        }
     166
     167                                                        // Scroll to the top left.
     168                                                        mainWindow.$.scrollTo( 0, 0 );
     169
     170                                                        // Resize and move to top left.
     171                                                        var viewPaneSize = mainWindow.getViewPaneSize();
     172                                                        container.setStyle( 'position', 'absolute' );
     173                                                        container.$.offsetLeft;                 // SAFARI BUG: See #2066.
     174                                                        container.setStyles(
     175                                                                {
     176                                                                        'z-index' : editor.config.baseFloatZIndex - 1,
     177                                                                        left : '0px',
     178                                                                        top : '0px'
     179                                                                } );
     180                                                        editor.resize( viewPaneSize.width, viewPaneSize.height );
     181
     182                                                        // Still not top left? Fix it. (Bug #174)
     183                                                        var offset = container.getDocumentPosition();
     184                                                        container.setStyles(
     185                                                                {
     186                                                                        left : ( -1 * offset.x ) + 'px',
     187                                                                        top : ( -1 * offset.y ) + 'px'
     188                                                                } );
     189                                                }
     190                                                else if ( this.state == CKEDITOR.TRISTATE_ON )  // Restore from fullscreen if the state is on.
     191                                                {
     192                                                        // Remove event handler for resizing.
     193                                                        mainWindow.removeListener( 'resize', resizeHandler );
     194
     195                                                        // Restore CSS styles for the entire node tree.
     196                                                        var editorElements = [ contents, container ];
     197                                                        for ( var i = 0 ; i < editorElements.length ; i++ )
     198                                                        {
     199                                                                restoreStyles( editorElements[i], editorElements[i].getCustomData( 'maximize_saved_styles' ) );
     200                                                                editorElements[i].removeCustomData( 'maximize_saved_styles' );
     201                                                        }
     202                                                        var currentNode = editor.container;
     203                                                        while ( ( currentNode = currentNode.getParent() ) )
     204                                                        {
     205                                                                restoreStyles( currentNode, currentNode.getCustomData( 'maximize_saved_styles' ) );
     206                                                                currentNode.removeCustomData( 'maximize_saved_styles' );
     207                                                        }
     208
     209                                                        // Restore the window scroll position.
     210                                                        mainWindow.$.scrollTo( outerScroll.x, outerScroll.y );
     211
     212                                                        // Emit a resize event, because this time the size is modified in
     213                                                        // restoreStyles.
     214                                                        editor.fire( 'resize' );
     215                                                }
     216
     217                                                this.toggleState();
     218
     219                                                // Restore selection and scroll position in editing area.
     220                                                if ( editor.mode == 'wysiwyg' )
     221                                                {
     222                                                        editor.getSelection().selectRanges( savedSelection );
     223                                                        editor.window.$.scrollTo( savedScroll.x, savedScroll.y );
     224                                                }
     225                                                else
     226                                                {
     227                                                        if ( savedSelection )
     228                                                        {
     229                                                                $textarea.selectionStart = savedSelection[0];
     230                                                                $textarea.selectionEnd = savedSelection[1];
     231                                                        }
     232                                                        $textarea.scrollLeft = savedScroll[0];
     233                                                        $textarea.scrollTop = savedScroll[1];
     234                                                }
     235
     236                                                savedSelection = savedScroll = null;
     237                                                savedState = this.state;
     238                                        }
     239                                } );
     240
     241                        editor.ui.addButton( 'Maximize',
     242                                {
     243                                        label : lang.maximize,
     244                                        command : 'maximize'
     245                                } );
     246
     247                        editor.on( 'mode', function()
     248                                {
     249                                        editor.getCommand( 'maximize' ).setState( savedState );
     250                                } );
     251                }
     252        } );
     253})();
  • _source/plugins/toolbar/plugin.js

     
    4646                }
    4747        };
    4848
    49         var collapserFn = CKEDITOR.tools.addFunction(
    50                 function( collapser )
    51                 {
    52                         var toolbox = collapser.getPrevious();
    53 
    54                         if ( toolbox.isVisible() )
    55                         {
    56                                 toolbox.hide();
    57                                 collapser.addClass( 'cke_toolbox_collapser_min' );
    58                         }
    59                         else
    60                         {
    61                                 toolbox.show();
    62                                 collapser.removeClass( 'cke_toolbox_collapser_min' );
    63                         }
    64                 });
    65 
    6649        CKEDITOR.plugins.add( 'toolbar',
    6750        {
    6851                init : function( editor )
    6952                {
     53                        var collapserFn = CKEDITOR.tools.addFunction(
     54                                function( collapser )
     55                                {
     56                                        var toolbox = collapser.getPrevious();
     57                                        var contents = editor.getThemeSpace( 'contents' );
     58                                        var toolboxContainer = toolbox.getParent();
     59                                        var contentHeight = parseInt( contents.$.style.height, 10 );
     60                                        var previousHeight = toolboxContainer.$.offsetHeight;
     61
     62                                        if ( toolbox.isVisible() )
     63                                        {
     64                                                toolbox.hide();
     65                                                collapser.addClass( 'cke_toolbox_collapser_min' );
     66                                        }
     67                                        else
     68                                        {
     69                                                toolbox.show();
     70                                                collapser.removeClass( 'cke_toolbox_collapser_min' );
     71                                        }
     72
     73                                        var dy = toolboxContainer.$.offsetHeight - previousHeight;
     74                                        contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );
     75                                } );
     76
    7077                        var itemKeystroke = function( item, keystroke )
    7178                        {
    7279                                switch ( keystroke )
     
    276283        '/',
    277284        ['Styles','Format','Font','FontSize'],
    278285        ['TextColor','BGColor'],
    279         ['ShowBlocks','-','About']
     286        ['Maximize', 'ShowBlocks','-','About']
    280287];
    281288
    282289/**
  • _source/themes/default/theme.js

     
    163163                ( this._[ spacePrefix ] = CKEDITOR.document.getById( spacePrefix + '_' + this.name ) );
    164164        return space;
    165165};
     166
     167CKEDITOR.editor.prototype.resize = function( width, height, isContentHeight )
     168{
     169        var numberRegex = /^\d+$/;
     170        if ( numberRegex.test( width ) )
     171                width += 'px';
     172
     173        var contents = CKEDITOR.document.getById( 'cke_contents_' + this.name );
     174        var outer = contents.getAscendant( 'table' );
     175
     176        // Resize the width first.
     177        outer.setStyle( 'width', width );
     178
     179        // Get the height delta between the outer table and the content area.
     180        // If we're setting the content area's height, then we don't need the delta.
     181        var delta = isContentHeight ? 0 : ( outer.$.offsetHeight || 0 ) - ( contents.$.clientHeight || 0 );
     182       
     183        // Resize the height.
     184        contents.setStyle( 'height', ( height - delta ) + 'px' );
     185
     186        // Emit a resize event.
     187        this.fire( 'resize' );
     188};
  • _source/skins/office2003/icons.css

     
    301301{
    302302        background-position: 0 -736px;
    303303}
     304
     305.cke_skin_office2003 .cke_button_maximize .cke_icon
     306{
     307        background-position: 0 -1040px;
     308}
  • _source/skins/v2/icons.css

     
    301301{
    302302        background-position: 0 -736px;
    303303}
     304
     305.cke_skin_v2 .cke_button_maximize .cke_icon
     306{
     307        background-position: 0 -1040px;
     308}
  • _source/skins/v2/mainui.css

     
    1111        display: inline-table;
    1212}
    1313
     14.cke_skin_v2 .cke_browser_opera .cke_editor
     15{
     16        display: table;
     17}
     18
    1419.cke_skin_v2 .cke_top, .cke_skin_v2 .cke_bottom
    1520{
    1621        background-color: #efefde;
  • _source/core/config.js

     
    150150         * config.plugins = 'basicstyles,button,htmldataprocessor,toolbar,wysiwygarea';
    151151         */
    152152
    153         plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
     153        plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
    154154
    155155        /**
    156156         * The editor tabindex value.
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy