Ticket #6103: 6103_3.patch

File 6103_3.patch, 9.1 KB (added by Garry Yao, 9 years ago)
  • _source/plugins/stylescombo/plugin.js

     
    107107                                                var elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );
    108108
    109109                                                if ( style.type == CKEDITOR.STYLE_INLINE && style.checkActive( elementPath ) )
    110                                                         style.remove( editor.document );
     110                                                        style.remove( editor );
    111111                                                else if ( style.type == CKEDITOR.STYLE_OBJECT && style.checkActive( elementPath ) )
    112                                                         style.remove( editor.document );
     112                                                        style.remove( editor );
    113113                                                else
    114                                                         style.apply( editor.document );
     114                                                        style.apply( editor );
    115115
    116116                                                editor.fire( 'saveSnapshot' );
    117117                                        },
  • _source/plugins/format/plugin.js

     
    5454                                        editor.focus();
    5555                                        editor.fire( 'saveSnapshot' );
    5656
    57                                         styles[ value ].apply( editor.document );
     57                                        styles[ value ].apply( editor );
    5858
    5959                                        // Save the undo snapshot after all changes are affected. (#4899)
    6060                                        setTimeout( function()
  • _source/plugins/styles/plugin.js

     
    102102                        :
    103103                                CKEDITOR.STYLE_INLINE;
    104104
     105                // Inline styles must leave read-only elements retained. (#6103)
     106                if ( this.type == CKEDITOR.STYLE_INLINE )
     107                {
     108                        styleDefinition.parentRule = CKEDITOR.tools.override( styleDefinition.parentRule,
     109                        function( org )
     110                        {
     111                                return function( element ) { return org && org( element ) || !element.isReadOnly(); }
     112                        });
     113                }
     114               
    105115                this._ =
    106116                {
    107117                        definition : styleDefinition
     
    110120
    111121        CKEDITOR.style.prototype =
    112122        {
    113                 apply : function( document )
     123                apply : function( editor )
    114124                {
    115                         applyStyle.call( this, document, false );
     125                        applyStyle.call( this, editor, false );
    116126                },
    117127
    118                 remove : function( document )
     128                remove : function( editor )
    119129                {
    120                         applyStyle.call( this, document, true );
     130                        applyStyle.call( this, editor, true );
    121131                },
    122132
    123133                applyToRange : function( range )
     
    464474
    465475                                                }
    466476                                        }
    467                                         else
    468                                                 applyStyle = true;
     477
    469478                                }
    470479                                else
    471480                                        applyStyle = true;
     
    13501359                return true;
    13511360        }
    13521361
    1353         function applyStyle( document, remove )
     1362        function applyStyle( editor, remove )
    13541363        {
    1355                 var selection = document.getSelection(),
     1364                var selection = editor.getSelection(),
    13561365                        // Bookmark the range so we can re-select it after processing.
    13571366                        bookmarks = selection.createBookmarks( 1 ),
    1358                         ranges = selection.getRanges( 1 ),
     1367                        ranges = selection.getRanges( editor.config.disableReadonlyStyling ?
     1368                                                                                  CKEDITOR.EXCLUDE_READONLY_ELEMENTS :
     1369                                                                                  CKEDITOR.EXCLUDE_READONLY_BLOCKS ),
    13591370                        func = remove ? this.removeFromRange : this.applyToRange,
    13601371                        range;
    13611372
     
    13871398        if ( doc )
    13881399        {
    13891400                if ( this.state == CKEDITOR.TRISTATE_OFF )
    1390                         this.style.apply( doc );
     1401                        this.style.apply( editor );
    13911402                else if ( this.state == CKEDITOR.TRISTATE_ON )
    1392                         this.style.remove( doc );
     1403                        this.style.remove( editor );
    13931404        }
    13941405
    13951406        return !!doc;
     
    14771488 *  { name : 'Strong Emphasis', element : 'strong' },
    14781489 * { name : 'Emphasis', element : 'em' }, ... ];
    14791490 */
     1491
     1492 /**
     1493 * Disables styling of read only inline elements.
     1494 * @type Boolean
     1495 * @default false
     1496 * @example
     1497 * config.disableReadonlyStyling = true;
     1498 */
     1499CKEDITOR.config.disableReadonlyStyling = false;
  • _source/plugins/link/dialogs/link.js

     
    13131313                                // Apply style.
    13141314                                var style = new CKEDITOR.style( { element : 'a', attributes : attributes } );
    13151315                                style.type = CKEDITOR.STYLE_INLINE;             // need to override... dunno why.
    1316                                 style.apply( editor.document );
     1316                                style.apply( editor );
    13171317
    13181318                                // Id. Apply only to the first link.
    13191319                                if ( data.adv && data.adv.advId )
  • _source/plugins/selection/plugin.js

     
    546546                 * Retrieve the {@link CKEDITOR.dom.range} instances that represent the current selection.
    547547                 * Note: Some browsers returns multiple ranges even on a sequent selection, e.g. Firefox returns
    548548                 * one range for each table cell when one or more table row is selected.
    549                  * @return {Array}
     549                 * @param {Number} [readOnlyMode] Determinate the way how elements with "contenteditable" attribute set to false participant in selection ranges, if specified it values from
     550                 * either {@link CKEDITOR.EXCLUDE_READONLY_ELEMENTS} or {@link CKEDITOR.EXCLUDE_READONLY_BLOCKS}.
     551                 * @return {Array|CKEDITOR.dom.rangeList}
    550552                 * @example
    551553                 * var ranges = selection.getRanges();
    552554                 * alert(ranges.length);
     555                 * // Mutable ranges excluding block-level read-only elements, but including read-only inline-elements.
     556                 * var mutableRanges = selection.getRanges( CKEDITOR.EXCLUDE_READONLY_BLOCKS );
     557                 * // Mutable ranges excluding all read-only elements.
     558                 * var mutableRanges = selection.getRanges( CKEDITOR.EXCLUDE_READONLY_ELEMENTS );
    553559                 */
    554560                getRanges : (function()
    555561                {
     
    737743                                        return ranges;
    738744                                };
    739745
    740                         return function( onlyEditables )
     746                        return function( readOnlyMode )
    741747                        {
    742748                                var cache = this._.cache;
    743                                 if ( cache.ranges && !onlyEditables )
     749                                if ( cache.ranges && !readOnlyMode )
    744750                                        return cache.ranges;
    745751                                else if ( !cache.ranges )
    746752                                        cache.ranges = new CKEDITOR.dom.rangeList( func.call( this ) );
    747753
    748754                                // Split range into multiple by read-only nodes.
    749                                 if ( onlyEditables )
     755                                if ( readOnlyMode )
    750756                                {
    751757                                        var ranges = cache.ranges;
    752758                                        for ( var i = 0; i < ranges.length; i++ )
     
    792798                                                                walkerRange.setEndAfter( endContainer );
    793799                                                }
    794800
    795                                                 // Looking for non-editable element inside the range.
     801                                                // Looking for non-editable blocks inside the range.
    796802                                                var walker = new CKEDITOR.dom.walker( walkerRange );
    797803                                                walker.evaluator = function( node )
    798804                                                {
    799805                                                        if ( node.type == CKEDITOR.NODE_ELEMENT
    800                                                                 && node.getAttribute( 'contenteditable' ) == 'false' )
     806                                                                && node.getAttribute( 'contenteditable' ) == 'false'
     807                                                                && ( readOnlyMode != CKEDITOR.EXCLUDE_READONLY_BLOCKS
     808                                                                        || node.isBlockBoundary()
     809                                                                        || node.getAttribute( 'cke_nostyle' ) ) )
    801810                                                        {
    802811                                                                var newRange = range.clone();
    803812                                                                range.setEndBefore( node );
     
    13731382                                selection.addRange( nativeRange );
    13741383                        };
    13751384} )();
     1385
     1386/**
     1387 * Constant presents read-only selection modes,
     1388 * @see CKEDITOR.dom.selection::getRanges
     1389 */
     1390CKEDITOR.EXCLUDE_READONLY_ELEMENTS = 1;
     1391
     1392/**
     1393 * Constant presents read-only selection modes
     1394 * @see CKEDITOR.dom.selection::getRanges
     1395 */
     1396CKEDITOR.EXCLUDE_READONLY_BLOCKS = 2;
  • _source/plugins/font/plugin.js

     
    6868                                        var style = styles[ value ];
    6969
    7070                                        if ( this.getValue() == value )
    71                                                 style.remove( editor.document );
     71                                                style.remove( editor );
    7272                                        else
    73                                                 style.apply( editor.document );
     73                                                style.apply( editor );
    7474
    7575                                        editor.fire( 'saveSnapshot' );
    7676                                },
  • _source/plugins/colorbutton/plugin.js

     
    9393                                        editor.fire( 'saveSnapshot' );
    9494
    9595                                        // Clean up any conflicting style within the range.
    96                                         new CKEDITOR.style( config['colorButton_' + type + 'Style'], { color : 'inherit' } ).remove( editor.document );
     96                                        new CKEDITOR.style( config['colorButton_' + type + 'Style'], { color : 'inherit' } ).remove( editor );
    9797
    9898                                        if ( color )
    9999                                        {
     
    101101
    102102                                                colorStyle.childRule = type == 'back' ?
    103103                                                        // It's better to apply background color as the innermost style. (#3599)
    104                                                         function(){ return false; } :
     104                                                        function( element ){ return element.isReadOnly(); } :
    105105                                                        // Fore color style must be applied inside links instead of around it.
    106                                                         function( element ){ return element.getName() != 'a'; };
     106                                                        function( element ){ return element.isReadOnly() || element.getName() != 'a'; };
    107107
    108                                                 new CKEDITOR.style( colorStyle, { color : color } ).apply( editor.document );
     108                                                new CKEDITOR.style( colorStyle, { color : color } ).apply( editor );
    109109                                        }
    110110
    111111                                        editor.fire( 'saveSnapshot' );
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy