Ticket #7430: 7430_5.patch

File 7430_5.patch, 5.6 KB (added by garry.yao, 3 years ago)
  • _source/plugins/image/plugin.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    77 * @file Image plugin
    88 */
    99
     10(function()
     11{
     12
    1013CKEDITOR.plugins.add( 'image',
    1114{
    1215        init : function( editor )
     
    5356                {
    5457                        editor.contextMenu.addListener( function( element, selection )
    5558                                {
    56                                         if ( !element || !element.is( 'img' ) || element.data( 'cke-realelement' ) || element.isReadOnly() )
    57                                                 return null;
    58 
    59                                         return { image : CKEDITOR.TRISTATE_OFF };
     59                                        if ( getSelectedImage( editor, element ) )
     60                                                return { image : CKEDITOR.TRISTATE_OFF };
    6061                                });
    6162                }
    62         }
    63 } );
     63        },
     64        afterInit : function( editor )
     65        {
     66                // Customize the behavior of the alignment commands. (#7430)
     67                setupAlignCommand( 'left' );
     68                setupAlignCommand( 'right' );
     69                setupAlignCommand( 'center' );
     70                setupAlignCommand( 'block' );
     71
     72                function setupAlignCommand( value )
     73                {
     74                        var command = editor.getCommand( 'justify' + value );
     75                        if ( command )
     76                        {
     77                                if ( value == 'left' || value == 'right' )
     78                                {
     79                                        command.on( 'exec', function( evt )
     80                                                {
     81                                                        var img = getSelectedImage( editor ), align;
     82                                                        if ( img )
     83                                                        {
     84                                                                align = getImageAlignment( img );
     85                                                                if ( align == value )
     86                                                                {
     87                                                                        img.removeStyle( 'float' );
     88
     89                                                                        // Remove "align" attribute when necessary.
     90                                                                        if ( value == getImageAlignment( img ) )
     91                                                                                img.removeAttribute( 'align' );
     92                                                                }
     93                                                                else
     94                                                                        img.setStyle( 'float', value )
     95
     96                                                                evt.cancel();
     97                                                        }
     98                                                });
     99                                }
     100
     101                                command.on( 'refresh', function( evt )
     102                                        {
     103                                                var img = getSelectedImage( editor ), align;
     104                                                if ( img )
     105                                                {
     106                                                        align = getImageAlignment( img );
     107
     108                                                        this.setState(
     109                                                                ( align == value ) ? CKEDITOR.TRISTATE_ON :
     110                                                                ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF :
     111                                                                CKEDITOR.TRISTATE_DISABLED );
     112
     113                                                        evt.cancel();
     114                                                }
     115                                        });
     116                        }
     117                }
     118        }
     119});
     120
     121function getSelectedImage( editor, element )
     122{
     123        if ( !element )
     124        {
     125                var sel = editor.getSelection();
     126                element = ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && sel.getSelectedElement();
     127        }
     128
     129        if ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )
     130                return element;
     131}
     132
     133function getImageAlignment( element )
     134{
     135        var align = element.getStyle( 'float' );
     136
     137        if ( align == 'inherit' || align == 'none' )
     138                align = 0;
     139
     140        if ( !align )
     141                align = element.getAttribute( 'align' );
     142
     143        return align;
     144}
     145
     146})();
    64147
    65148/**
    66149 * Whether to remove links when emptying the link URL field in the image dialog.
  • _source/plugins/justify/plugin.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    99
    1010(function()
    1111{
    12         function getState( editor, path )
    13         {
    14                 var firstBlock = path.block || path.blockLimit;
    15 
    16                 if ( !firstBlock || firstBlock.getName() == 'body' )
    17                         return CKEDITOR.TRISTATE_OFF;
    18 
    19                 return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ?
    20                         CKEDITOR.TRISTATE_ON :
    21                         CKEDITOR.TRISTATE_OFF;
    22         }
    23 
    2412        function getAlignment( element, useComputedState )
    2513        {
    2614                useComputedState = useComputedState === undefined || useComputedState;
     
    4028                        align = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || '';
    4129                }
    4230
    43                 align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) );
     31                // Sometimes computed values doesn't tell.
     32                align && ( align = align.replace( /(?:-(?:moz|webkit)-)?(?:start|auto)/i, '' ) );
    4433
    4534                !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' );
    4635
     
    5241                if ( evt.editor.readOnly )
    5342                        return;
    5443
    55                 var command = evt.editor.getCommand( this.name );
    56                 command.state = getState.call( this, evt.editor, evt.data.path );
    57                 command.fire( 'state' );
     44                evt.editor.getCommand( this.name ).refresh( evt.data.path );
    5845        }
    5946
    6047        function justifyCommand( editor, name, value )
    6148        {
     49                this.editor = editor;
    6250                this.name = name;
    6351                this.value = value;
    6452
     
    192180                        editor.focus();
    193181                        editor.forceNextSelectionCheck();
    194182                        selection.selectBookmarks( bookmarks );
     183                },
     184
     185                refresh : function( path )
     186                {
     187                        var firstBlock = path.block || path.blockLimit;
     188
     189                        this.setState( firstBlock.getName() != 'body' &&
     190                                getAlignment( firstBlock, this.editor.config.useComputedState ) == this.value ?
     191                                CKEDITOR.TRISTATE_ON :
     192                                CKEDITOR.TRISTATE_OFF );
    195193                }
    196194        };
    197195
  • _source/core/command.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    4949                if ( this.editorFocus )     // Give editor focus if necessary (#4355).
    5050                        editor.focus();
    5151
     52                if ( this.fire( 'exec' ) === true )
     53                        return true;
     54
    5255                return ( commandDefinition.exec.call( this, editor, data ) !== false );
     56        };
     57
     58        this.refresh = function()
     59        {
     60                if ( this.fire( 'refresh' ) === true )
     61                        return true;
     62
     63                return ( commandDefinition.refresh && commandDefinition.refresh.apply( this, arguments ) !== false );
    5364        };
    5465
    5566        CKEDITOR.tools.extend( this, commandDefinition,
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy