Ticket #7430: 7430_4.patch

File 7430_4.patch, 5.4 KB (added by fredck, 3 years ago)
  • _source/core/command.js

     
    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 );
    5356        };
    5457
     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 );
     64        };
     65
    5566        CKEDITOR.tools.extend( this, commandDefinition,
    5667                // Defaults
    5768                /** @lends CKEDITOR.command.prototype */
  • _source/plugins/image/plugin.js

     
    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                }
     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                                                                align == value ? img.removeStyle( 'float' ) : img.setStyle( 'float', value )
     86
     87                                                                evt.cancel();
     88                                                        }
     89                                                });
     90                                }
     91
     92                                command.on( 'refresh', function( evt )
     93                                        {
     94                                                var img = getSelectedImage( editor ), align;
     95                                                if ( img )
     96                                                {
     97                                                        align = getImageAlignment( img );
     98
     99                                                        this.setState(
     100                                                                ( align == value ) ? CKEDITOR.TRISTATE_ON :
     101                                                                ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF :
     102                                                                CKEDITOR.TRISTATE_DISABLED );
     103
     104                                                        evt.cancel();
     105                                                }
     106                                        });
     107                        }
     108                }
    62109        }
    63 } );
     110});
    64111
     112function getSelectedImage( editor, element )
     113{
     114        if ( !element )
     115        {
     116                var sel = editor.getSelection();
     117                element = ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && sel.getSelectedElement();
     118        }
     119
     120        if ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )
     121                return element;
     122}
     123
     124function getImageAlignment( element )
     125{
     126        var align = element.getStyle( 'float' );
     127
     128        if ( align == 'inherit' || align == 'none' )
     129                align = 0;
     130
     131        if ( !align )
     132                align = element.getAttribute( 'align' );
     133
     134        return align;
     135}
     136
     137})();
     138
    65139/**
    66140 * Whether to remove links when emptying the link URL field in the image dialog.
    67141 * @type Boolean
  • _source/plugins/justify/plugin.js

     
    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                        if ( !firstBlock || firstBlock.getName() == 'body' )
     190                                return CKEDITOR.TRISTATE_OFF;
     191
     192                        this.setState( getAlignment( firstBlock, this.editor.config.useComputedState ) == this.value ?
     193                                CKEDITOR.TRISTATE_ON :
     194                                CKEDITOR.TRISTATE_OFF );
    195195                }
    196196        };
    197197
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy