Ticket #4878: 4878.patch

File 4878.patch, 9.6 KB (added by garry.yao, 5 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy