Ticket #4973: 4973_4.patch

File 4973_4.patch, 10.1 KB (added by Garry Yao, 10 years ago)
  • core/resourcemanager.js

     
    127127                var external = this.externals[ name ];
    128128                return CKEDITOR.getUrl(
    129129                                this.getPath( name ) +
    130                                 ( ( external && external.file ) || ( this.fileName + '.js' ) ) );
     130                                ( ( external && external.file != null ) ? external.file : this.fileName + '.js' ) );
    131131        },
    132132
    133133        /**
     
    136136         * @param {String} names The resource names, separated by commas.
    137137         * @param {String} path The path of the folder containing the resource.
    138138         * @param {String} [fileName] The resource file name. If not provided, the
    139          *              default name is used.
     139         *              default name is used; If provided with a empty string, will implicitly indicates that {@param path}
     140         *              is already the full path.
    140141         * @example
    141142         * // Loads a plugin from '/myplugin/samples/plugin.js'.
    142143         * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/' );
    143144         * @example
    144145         * // Loads a plugin from '/myplugin/samples/my_plugin.js'.
    145146         * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/', 'my_plugin.js' );
     147         * @example
     148         * // Loads a plugin from '/myplugin/samples/my_plugin.js'.
     149         * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/my_plugin.js', '' );
    146150         */
    147151        addExternal : function( names, path, fileName )
    148152        {
  • plugins/div/dialogs/div.js

     
    259259                        return groups;
    260260                }
    261261
     262                // Synchronous field values to other impacted fields is required, e.g. div styles
     263                // change should also alter inline-style text.
     264                function commitInternally( targetFields )
     265                {
     266                        var dialog = this.getDialog(),
     267                                 element = dialog._element && dialog._element.clone()
     268                                                 || new CKEDITOR.dom.element( 'div', editor.document );
     269
     270                        // Commit this field and broadcast to target fields.
     271                        this.commit( element, true );
     272
     273                        targetFields = [].concat( targetFields );
     274                        var length = targetFields.length, field;
     275                        for ( var i = 0; i < length; i++ )
     276                        {
     277                                field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
     278                                field && field.setup && field.setup( element, true );
     279                        }
     280                }
     281
     282
     283                // Registered 'CKEDITOR.style' instances.
     284                var styles = {} ;
    262285                /**
    263286                 * Hold a collection of created block container elements.
    264287                 */
     
    289312                                                                style :'width: 100%;',
    290313                                                                label :editor.lang.div.styleSelectLabel,
    291314                                                                'default' : '',
    292                                                                 items : [],
     315                                                                // Options are loaded dynamically.
     316                                                                items :
     317                                                                [
     318                                                                        [ editor.lang.common.notSet , '' ]
     319                                                                ],
     320                                                                onChange : function()
     321                                                                {
     322                                                                        commitInternally.call( this, [ 'info:class', 'advanced:dir', 'advanced:style' ] );
     323                                                                },
    293324                                                                setup : function( element )
    294325                                                                {
    295                                                                         this.setValue( element.$.style.cssText || '' );
     326                                                                        for ( var name in styles )
     327                                                                                styles[ name ].checkElementRemovable( element, true ) && this.setValue( name );
    296328                                                                },
    297329                                                                commit: function( element )
    298330                                                                {
    299                                                                         if ( this.getValue() )
    300                                                                                 element.$.style.cssText = this.getValue();
    301                                                                         else
    302                                                                                 element.removeAttribute( 'style' );
     331                                                                        var styleName;
     332                                                                        if ( styleName = this.getValue() )
     333                                                                                styles[ styleName ].applyToObject( element )
    303334                                                                }
    304335                                                        },
    305336                                                        {
     
    351382                                                                                        id :'style',
    352383                                                                                        style :'width: 100%;',
    353384                                                                                        label :editor.lang.common.cssStyle,
    354                                                                                         'default' : ''
     385                                                                                        'default' : '',
     386                                                                                        commit : function( element )
     387                                                                                        {
     388                                                                                                // Merge with 'elementStyle', which is of higher priority.
     389                                                                                                var value = this.getValue(),
     390                                                                                                                merged = [ value, element.getAttribute( 'style' ) ].join( ';' );
     391                                                                                                value && element.setAttribute( 'style', merged );
     392                                                                                        }
    355393                                                                                }
    356394                                                                ]
    357395                                                        },
     
    376414                                                                'default' : '',
    377415                                                                items :
    378416                                                                [
     417                                                                        [ editor.lang.common.notSet , '' ],
    379418                                                                        [
    380419                                                                                editor.lang.common.langDirLtr,
    381420                                                                                'ltr'
     
    394433                        onLoad : function()
    395434                        {
    396435                                setupFields.call(this);
     436
     437                                // Preparing for the 'elementStyle' field.
     438                                var dialog = this,
     439                                         stylesField = this.getContentElement( 'info', 'elementStyle' ),
     440                                         // Reuse the 'stylescombo' plugin's styles definition.
     441                                         customStylesConfig =  editor.config.stylesCombo_stylesSet,
     442                                         stylesSetName = customStylesConfig && customStylesConfig.split( ':' )[ 0 ];
     443                               
     444                                if( stylesSetName )
     445                                {
     446                                        CKEDITOR.stylesSet.load( stylesSetName,
     447                                                function( stylesSet )
     448                                                {
     449                                                        var stylesDefinitions = stylesSet[ stylesSetName ],
     450                                                                styleName;
     451
     452                                                        if ( stylesDefinitions )
     453                                                        {
     454                                                                // Digg only those styles that apply to 'div'.
     455                                                                for ( var i = 0 ; i < stylesDefinitions.length ; i++ )
     456                                                                {
     457                                                                        var styleDefinition = stylesDefinitions[ i ];
     458                                                                        if( styleDefinition.element && styleDefinition.element == 'div' )
     459                                                                        {
     460                                                                                styleName = styleDefinition.name;
     461                                                                                styles[ styleName ] = new CKEDITOR.style( styleDefinition );
     462
     463                                                                                // Populate the styles field options with style name.
     464                                                                                stylesField.items.push( [ styleName, styleName ] );
     465                                                                                stylesField.add( styleName, styleName );
     466                                                                        }
     467                                                                }
     468                                                        }
     469
     470
     471                                                        // We should disable the content element
     472                                                        // it if no options are available at all.
     473                                                        stylesField[ stylesField.items.length > 1 ? 'enable' : 'disable' ]();
     474
     475                                                        // Now setup the field value manually.
     476                                                        setTimeout( function() { stylesField.setup( dialog._element ); }, 0 );
     477                                                } );
     478                                }
    397479                        },
    398480                        onShow : function()
    399481                        {
     
    416498                                        containers = createDiv( editor, true );
    417499
    418500                                // Update elements attributes
    419                                 for( var i = 0 ; i < containers.length ; i++ )
     501                                var size = containers.length;
     502                                for ( var i = 0; i < size; i++ )
     503                                {
    420504                                        this.commitContent( containers[ i ] );
     505
     506                                        // Remove empty 'style' attribute.
     507                                        !containers[ i ].getAttribute( 'style' ) && containers[ i ].removeAttribute( 'style' );
     508                                }
     509
    421510                                this.hide();
     511                        },
     512                        onHide : function()
     513                        {
     514                                delete this._element;
    422515                        }
    423516                };
    424517        }
  • plugins/div/plugin.js

     
    1212{
    1313        CKEDITOR.plugins.add( 'div',
    1414        {
    15                 requires : [ 'editingblock', 'domiterator' ],
     15                requires : [ 'editingblock', 'domiterator', 'styles' ],
    1616
    1717                init : function( editor )
    1818                {
  • plugins/styles/plugin.js

     
    12461246
    12471247        return !!doc;
    12481248};
     1249
     1250CKEDITOR.stylesSet = new CKEDITOR.resourceManager( '', 'stylesSet' );
  • plugins/stylescombo/plugin.js

     
    55
    66(function()
    77{
     8        var stylesManager;
     9
    810        CKEDITOR.plugins.add( 'stylescombo',
    911        {
    1012                requires : [ 'richcombo', 'styles' ],
     
    1618                                pluginPath = this.path,
    1719                                styles;
    1820
     21                        if ( !stylesManager )
     22                        {
     23                                stylesManager = CKEDITOR.stylesSet;
     24
     25                                // Backward compatibilities (#5025).
     26                                CKEDITOR.addStylesSet = CKEDITOR.tools.bind( stylesManager.add, stylesManager );
     27                                CKEDITOR.loadStylesSet = function( name, url, callback )
     28                                        {
     29                                                stylesManager.addExternal( name, url, '' );
     30                                                CKEDITOR.stylesSet.load( name, callback );
     31                                        };
     32                        }
     33                       
     34                        var comboStylesSet = config.stylesCombo_stylesSet.split( ':' ),
     35                                styleSetName = comboStylesSet[ 0 ],
     36                                externalPath = comboStylesSet[ 1 ];
     37
     38                        stylesManager.addExternal( styleSetName,
     39                                        externalPath ?
     40                                                comboStylesSet.slice( 1 ).join( ':' ) :
     41                                                pluginPath + 'styles/' + styleSetName + '.js', '' );
     42
    1943                        editor.ui.addRichCombo( 'Styles',
    2044                                {
    2145                                        label : lang.label,
     
    3256
    3357                                        init : function()
    3458                                        {
    35                                                 var combo = this,
    36                                                         stylesSet = config.stylesCombo_stylesSet.split( ':' );
     59                                                var combo = this;
    3760
    38                                                 var stylesSetPath = stylesSet[ 1 ] ?
    39                                                                 stylesSet.slice( 1 ).join( ':' ) :              // #4481
    40                                                                 CKEDITOR.getUrl( pluginPath + 'styles/' + stylesSet[ 0 ] + '.js' ) ;
    41 
    42                                                 stylesSet = stylesSet[ 0 ];
    43 
    44                                                 CKEDITOR.loadStylesSet( stylesSet, stylesSetPath, function( stylesDefinitions )
     61                                                CKEDITOR.stylesSet.load( styleSetName, function( stylesSet )
    4562                                                        {
    46                                                                 var style,
     63                                                                var stylesDefinitions = stylesSet[ styleSetName ],
     64                                                                        style,
    4765                                                                        styleName,
    4866                                                                        stylesList = [];
    4967
     
    207225                }
    208226        });
    209227
    210         var stylesSets = {};
    211 
    212         CKEDITOR.addStylesSet = function( name, styles )
    213         {
    214                 stylesSets[ name ] = styles;
    215         };
    216 
    217         CKEDITOR.loadStylesSet = function( name, url, callback )
    218         {
    219                 var stylesSet = stylesSets[ name ];
    220 
    221                 if ( stylesSet )
    222                 {
    223                         callback( stylesSet );
    224                         return ;
    225                 }
    226 
    227                 CKEDITOR.scriptLoader.load( url, function()
    228                         {
    229                                 callback( stylesSets[ name ] );
    230                         });
    231         };
    232 
    233228        function buildPreview( styleDefinition )
    234229        {
    235230                var html = [];
  • plugins/stylescombo/styles/default.js

     
    1 /*
     1/*
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
    33For licensing, see LICENSE.html or http://ckeditor.com/license
    44*/
    55
    6 CKEDITOR.addStylesSet( 'default',
     6CKEDITOR.stylesSet.add( 'default',
    77[
    88        /* Block Styles */
    99
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy