Ticket #7430: 7430_4.patch

File 7430_4.patch, 5.4 KB (added by fredck, 2 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy