Ticket #7430: 7430.patch

File 7430.patch, 4.2 KB (added by Garry Yao, 13 years ago)
  • _source/plugins/justify/plugin.js

     
    1111{
    1212        function getState( editor, path )
    1313        {
     14                var sel = editor.getSelection();
     15               
     16                // Per element/object alignment application.
     17                if ( sel.getType() == CKEDITOR.SELECTION_ELEMENT )
     18                {
     19                        var selected = sel.getSelectedElement(),
     20                                tag = selected.getName();
     21
     22                        var fake,
     23                                isFake = selected.data( 'cke-real-element-type' );
     24
     25                        // Is selected a fake object?
     26                        if ( isFake )
     27                        {
     28                                fake = selected;
     29                                selected = editor.restoreRealElement( selected );
     30                                tag = selected.getName();
     31                        }
     32
     33                        var stater = stateFuncs[ usefloat[ tag ] ? 'float' : useAlign[ tag ] ? 'align' : '' ];
     34                        if ( stater )
     35                                return stater.call( this, selected );
     36                }
     37
    1438                var firstBlock = path.block || path.blockLimit;
    1539
    1640                if ( !firstBlock || firstBlock.getName() == 'body' )
     
    135159                }
    136160        }
    137161
     162        // Map abstract alignments to actual styles,
     163        // e.g. left alignment will apply on image element as style="float: left",
     164        // while when it get applied on table element, align="left" is used instead.
     165        // Note: Thus certain alignment like center/justify might not be available
     166        // on the target element so will be disabled.
     167        var usefloat = { 'img' : 1 },
     168                useAlign = { 'table' : 1, 'cke:object' : 1 },
     169                applyFuncs =
     170                {
     171                        'float': function( element )
     172                        {
     173                                this.state == CKEDITOR.TRISTATE_OFF ?
     174                                        element.setStyle( 'float', this.value )
     175                                        : element.removeStyle( 'float' );
     176                        },
     177                        'align' : function( element )
     178                        {
     179                                this.state == CKEDITOR.TRISTATE_OFF ?
     180                                        element.setAttribute( 'align', this.value )
     181                                        : element.removeAttribute( 'align' );
     182                        }
     183                },
     184                stateFuncs =
     185                {
     186                        'float': function( element )
     187                        {
     188                                if ( /left|right/.test( this.value ) )
     189                                        return element.getStyle( 'float' ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
     190
     191                                return CKEDITOR.TRISTATE_DISABLED;
     192                        },
     193                        'align' : function( element )
     194                        {
     195                                if ( /left|right|center/.test( this.value )
     196                                                && ( this.value != 'center' || element.getName() in CKEDITOR.dtd.$block ) )             // Value 'center' is not available for inline elements.
     197                                        return element.getAttribute( 'align' ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
     198
     199                                return CKEDITOR.TRISTATE_DISABLED;
     200                        }
     201                };
     202
    138203        justifyCommand.prototype = {
    139204                exec : function( editor )
    140205                {
     
    144209                        if ( !selection )
    145210                                return;
    146211
     212                        // Per element/object alignment application.
     213                        if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT )
     214                        {
     215                                var selected = selection.getSelectedElement(),
     216                                        tag = selected.getName();
     217
     218                                var fake,
     219                                        isFake = selected.data( 'cke-real-element-type' );
     220
     221                                // Is selected a fake object?
     222                                if ( isFake )
     223                                {
     224                                        fake = selected;
     225                                        selected = editor.restoreRealElement( selected );
     226                                        tag = selected.getName();
     227                                }
     228
     229                                var applier = applyFuncs[ usefloat[ tag ] ? 'float' : useAlign[ tag ] ? 'align' : '' ];
     230                                applier && applier.call( this, selected );
     231
     232                                // Emulate alignment on fake object.
     233                                if ( isFake )
     234                                {
     235                                        editor.updateFakeElement( fake, selected );
     236                                        applyFuncs[ 'align' ].call( this, fake );
     237                                }
     238
     239                                return;
     240                        }
     241
    147242                        var bookmarks = selection.createBookmarks(),
    148243                                ranges = selection.getRanges( true );
    149244
  • _source/plugins/fakeobjects/plugin.js

     
    8585        return this.document.createElement( 'img', { attributes : attributes } );
    8686};
    8787
     88CKEDITOR.editor.prototype.updateFakeElement = function( fakeElement, realElement )
     89{
     90        fakeElement.data( 'cke-realelement', encodeURIComponent( realElement.getOuterHtml() ) );
     91};
     92
    8893CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable )
    8994{
    9095        var lang = this.lang.fakeobjects,
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy