Ticket #4878: 4878.patch

File 4878.patch, 9.6 KB (added by garry.yao, 6 years ago)
  • _source/lang/en.js

     
    414414                accessNever     : 'Never',
    415415                align           : 'Align',
    416416                alignLeft       : 'Left',
    417                 alignAbsBottom: 'Abs Bottom',
    418                 alignAbsMiddle: 'Abs Middle',
    419                 alignBaseline   : 'Baseline',
    420                 alignBottom     : 'Bottom',
    421                 alignMiddle     : 'Middle',
    422417                alignRight      : 'Right',
    423                 alignTextTop    : 'Text Top',
    424                 alignTop        : 'Top',
    425418                quality         : 'Quality',
    426419                qualityBest              : 'Best',
    427420                qualityHigh              : 'High',
  • _source/plugins/flash/dialogs/flash.js

     
    3030                pluginspage : [ { type : ATTRTYPE_EMBED, name : 'pluginspage' } ],
    3131                src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' } ],
    3232                name : [ { type : ATTRTYPE_EMBED, name : 'name' } ],
    33                 align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],
     33//              align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],
    3434                title : [ { type : ATTRTYPE_OBJECT, name : 'title' }, { type : ATTRTYPE_EMBED, name : 'title' } ],
    3535                'class' : [ { type : ATTRTYPE_OBJECT, name : 'class' }, { type : ATTRTYPE_EMBED, name : 'class'} ],
    3636                width : [ { type : ATTRTYPE_OBJECT, name : 'width' }, { type : ATTRTYPE_EMBED, name : 'width' } ],
     
    168168                }
    169169        }
    170170
     171        // There's only one committing process allowed each time to avoid cycling.
     172        var internalCommit;
     173
     174        // Synchronous field values to other impacted fields when necessary,
     175        // e.g. alignment change should alter inline-style text as well.
     176        function commitInternally( targetFields )
     177        {
     178                if( internalCommit )
     179                        return;
     180
     181                var dialog = this.getDialog(),
     182                        object = dialog.objectNode,
     183                        embeded = dialog.embedNode;
     184
     185                if( object || embeded )
     186                {
     187                        internalCommit = 1;
     188                        // Commit this field and broadcast to target fields.
     189                        this.commit( object, embeded );
     190
     191                        targetFields = [].concat( targetFields );
     192                        var length = targetFields.length,
     193                                field;
     194                        for ( var i = 0; i < length; i++ )
     195                        {
     196                                field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
     197                                field && field.setup( object, embeded );
     198                        }
     199                        internalCommit = 0;
     200                }
     201        }
     202
     203
    171204        CKEDITOR.dialog.add( 'flash', function( editor )
    172205        {
    173206                var makeObjectTag = !editor.config.flashEmbedTagOnly,
     
    182215                        title : editor.lang.flash.title,
    183216                        minWidth : 420,
    184217                        minHeight : 310,
     218                        onLoad : function()
     219                        {
     220                                // Custom commit dialog logic, where we're intended to give inline style
     221                                // field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute
     222                                // by other fields.
     223                                this.commitContent = function()
     224                                {
     225                                        var args = arguments;
     226                                        var inlineStyleField = this.getContentElement( 'advanced', 'style' );
     227                                        inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args );
     228
     229                                        this.foreach( function( widget )
     230                                        {
     231                                                if ( widget.commit &&  widget.id != 'style' )
     232                                                        widget.commit.apply( widget, args );
     233                                        });
     234                                }
     235                        },
    185236                        onShow : function()
    186237                        {
    187                                 // Clear previously saved elements.
    188                                 this.fakeImage = this.objectNode = this.embedNode = null;
    189238                                previewPreloader = new CKEDITOR.dom.element( 'embeded', editor.document );
    190239
     240
     241                                var objectNode, embedNode, paramMap = {},
     242                                        fakeImage = this.getSelectedElement();
     243
    191244                                // Try to detect any embed or object tag that has Flash parameters.
    192                                 var fakeImage = this.getSelectedElement();
     245                                // If there's no selected object or embed, create one. Otherwise, reuse the
     246                                // selected object and embed nodes.
    193247                                if ( fakeImage && fakeImage.getAttribute( '_cke_real_element_type' ) && fakeImage.getAttribute( '_cke_real_element_type' ) == 'flash' )
    194248                                {
    195249                                        this.fakeImage = fakeImage;
    196250
    197                                         var realElement = editor.restoreRealElement( fakeImage ),
    198                                                 objectNode = null, embedNode = null, paramMap = {};
     251                                        var realElement = editor.restoreRealElement( fakeImage );
    199252                                        if ( realElement.getName() == 'cke:object' )
    200253                                        {
    201254                                                objectNode = realElement;
     
    214267                                        else if ( realElement.getName() == 'cke:embed' )
    215268                                                embedNode = realElement;
    216269
    217                                         this.objectNode = objectNode;
    218                                         this.embedNode = embedNode;
    219 
    220                                         this.setupContent( objectNode, embedNode, paramMap, fakeImage );
    221270                                }
    222                         },
    223                         onOk : function()
    224                         {
    225                                 // If there's no selected object or embed, create one. Otherwise, reuse the
    226                                 // selected object and embed nodes.
    227                                 var objectNode = null,
    228                                         embedNode = null,
    229                                         paramMap = null;
    230                                 if ( !this.fakeImage )
    231                                 {
     271                                else
     272                                {
    232273                                        if ( makeObjectTag )
    233274                                        {
    234275                                                objectNode = CKEDITOR.dom.element.createFromHtml( '<cke:object></cke:object>', editor.document );
     
    242283                                        {
    243284                                                embedNode = CKEDITOR.dom.element.createFromHtml( '<cke:embed></cke:embed>', editor.document );
    244285                                                embedNode.setAttributes(
    245                                                         {
    246                                                                 type : 'application/x-shockwave-flash',
    247                                                                 pluginspage : 'http://www.macromedia.com/go/getflashplayer'
    248                                                         } );
     286                                                {
     287                                                        type : 'application/x-shockwave-flash',
     288                                                        pluginspage : 'http://www.macromedia.com/go/getflashplayer'
     289                                                } );
    249290                                                if ( objectNode )
    250291                                                        embedNode.appendTo( objectNode );
    251292                                        }
    252293                                }
    253                                 else
    254                                 {
    255                                         objectNode = this.objectNode;
    256                                         embedNode = this.embedNode;
    257                                 }
     294
     295                                this.objectNode = objectNode;
     296                                this.embedNode = embedNode;
     297                               
     298                                this.setupContent( this.objectNode, this.embedNode, paramMap, fakeImage );
     299                        },
     300                        onOk : function()
     301                        {
     302                                var objectNode = this.objectNode,
     303                                        embedNode = this.embedNode,
     304                                        paramMap = null;
    258305
    259306                                // Produce the paramMap if there's an object tag.
    260307                                if ( objectNode )
     
    280327                                else
    281328                                        editor.insertElement( newFakeImage );
    282329                        },
    283 
    284330                        onHide : function()
    285331                        {
     332                                // Clear previously saved elements.
     333                                this.fakeImage = this.objectNode = this.embedNode = null;
     334
    286335                                if ( this.preview )
    287336                                        this.preview.setHtml('');
    288337                        },
     
    561610                                                                        style : 'width : 100%;',
    562611                                                                        items :
    563612                                                                        [
    564                                                                                 [ editor.lang.common.notSet , ''],
    565                                                                                 [ editor.lang.image.alignLeft , 'left'],
    566                                                                                 [ editor.lang.image.alignAbsBottom , 'absBottom'],
    567                                                                                 [ editor.lang.image.alignAbsMiddle , 'absMiddle'],
    568                                                                                 [ editor.lang.image.alignBaseline , 'baseline'],
    569                                                                                 [ editor.lang.image.alignBottom , 'bottom'],
    570                                                                                 [ editor.lang.image.alignMiddle , 'middle'],
    571                                                                                 [ editor.lang.image.alignRight , 'right'],
    572                                                                                 [ editor.lang.image.alignTextTop , 'textTop'],
    573                                                                                 [ editor.lang.image.alignTop , 'top']
     613                                                                                [ editor.lang.common.notSet , '' ],
     614                                                                                [ editor.lang.flash.alignLeft , 'left' ],
     615                                                                                [ editor.lang.flash.alignRight , 'right' ]
    574616                                                                        ],
    575                                                                         setup : loadValue,
    576                                                                         commit : commitValue
    577                                                                 },
    578                                                                 {
     617                                                                        onChange : function()
     618                                                                        {
     619                                                                                commitInternally.call( this, 'advanced:style' );
     620                                                                        },
     621                                                                        setup : function( objectElement, embedElement )
     622                                                                        {
     623                                                                                var element = objectElement || embedElement;
     624                                                                               
     625                                                                                if ( element )
     626                                                                                {
     627                                                                                        var value = element.getStyle( 'float' );
     628                                                                                        switch ( value )
     629                                                                                        {
     630                                                                                                // Ignore those unrelated values.
     631                                                                                                case 'inherit':
     632                                                                                                case 'none':
     633                                                                                                        value = '';
     634                                                                                        }
     635                                                                                        !value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() );
     636                                                                                        this.setValue( value );
     637                                                                                }
     638                                                                        },
     639                                                                        commit : function( objectElement, embedElement )
     640                                                                        {
     641                                                                                var element = objectElement || embedElement;
     642                                                                                if ( element )
     643                                                                                {
     644                                                                                        var value = this.getValue();
     645                                                                                        value ? element.setStyle( 'float', value )
     646                                                                                                        : element.removeStyle( 'float' );
     647
     648                                                                                        if ( !internalCommit )
     649                                                                                        {
     650                                                                                                value = ( element.getAttribute( 'align' ) || '' ).toLowerCase();
     651                                                                                                switch ( value )
     652                                                                                                {
     653                                                                                                        // we should remove it only if it matches "left" or "right",
     654                                                                                                        // otherwise leave it intact.
     655                                                                                                        case 'left':
     656                                                                                                        case 'right':
     657                                                                                                                element.removeAttribute( 'align' );
     658                                                                                                }
     659                                                                                        }
     660                                                                                }
     661                                                                        }
     662                                                                },
     663                                                                {
    579664                                                                        type : 'html',
    580665                                                                        html : '<div></div>'
    581666                                                                }
     
    677762                                                        type : 'text',
    678763                                                        id : 'style',
    679764                                                        label : editor.lang.common.cssStyle,
    680                                                         setup : loadValue,
    681                                                         commit : commitValue
    682                                                 }
     765                                                        onChange : function ()
     766                                                        {
     767                                                                commitInternally.call( this,
     768                                                                        [ 'properties:align' ] );
     769                                                        },
     770                                                        setup : function( objectElement, embedElement )
     771                                                        {
     772                                                                var element = objectElement || embedElement;
     773                                                                if ( element )
     774                                                                {
     775                                                                        var genStyle = element.getAttribute( 'style' )
     776                                                                                        || element.$.style.cssText;
     777
     778                                                                        this.setValue( genStyle );
     779                                                                }
     780                                                        },
     781                                                        commit : function( objectElement, embedElement )
     782                                                        {
     783                                                                var element = objectElement || embedElement;
     784                                                                element && element.setAttribute( 'style', this.getValue() );
     785                                                        }
     786                                                }
    683787                                        ]
    684788                                }
    685789                        ]
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy