Ticket #6082: 6082_4.patch

File 6082_4.patch, 7.0 KB (added by Frederico Caldeira Knabben, 9 years ago)
  • _source/core/config.js

     
    330330        baseFloatZIndex : 10000
    331331};
    332332
     333/**
     334 * Indicates that some of the editor features, like alignement and text
     335 * direction, should used the "computed value" of the feature to indicate it's
     336 * on/off state, instead of using the "real value".
     337 *
     338 * If enabled, in a left to right written document, the "Left Justify"
     339 * alignment button will show as active, even if the aligment style is not
     340 * explicitly applied to the current paragraph in the editor.
     341 * @name CKEDITOR.config.useComputedState
     342 * @type Boolean
     343 * @default true
     344 * @example
     345 * config.useComputedState = false;
     346 */
     347
    333348// PACKAGER_RENAME( CKEDITOR.config )
  • _source/plugins/bidi/plugin.js

     
    1717
    1818        function getState( editor, path, dir )
    1919        {
    20                 var selection = editor.getSelection(),
    21                         ranges = selection.getRanges();
     20                var useComputedState = editor.config.useComputedState,
     21                        selectedElement;
    2222
    23                 var selectedElement = ranges && ranges[ 0 ].getEnclosedNode();
     23                useComputedState = useComputedState === undefined || useComputedState;
    2424
    25                 // If this is not our element of interest, apply to fully selected elements from guardElements.
    26                 if ( !selectedElement || selectedElement
    27                                 && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements )
    28                         )
    29                         selectedElement = getFullySelected( selection, guardElements );
     25                if ( useComputedState )
     26                {
     27                        var selection = editor.getSelection(),
     28                                ranges = selection.getRanges();
    3029
     30                        selectedElement = ranges && ranges[ 0 ].getEnclosedNode();
     31
     32                        // If this is not our element of interest, apply to fully selected elements from guardElements.
     33                        if ( !selectedElement || selectedElement
     34                                        && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements )
     35                                )
     36                                selectedElement = getFullySelected( selection, guardElements );
     37                }
     38
    3139                selectedElement = selectedElement || path.block || path.blockLimit;
    3240
    3341                if ( !selectedElement || selectedElement.getName() == 'body' )
    3442                        return CKEDITOR.TRISTATE_OFF;
    3543
    36                 return ( selectedElement.getComputedStyle( 'direction' ) == dir ) ?
     44                selectedElement = useComputedState ?
     45                        selectedElement.getComputedStyle( 'direction' ) :
     46                        selectedElement.getStyle( 'direction' ) || selectedElement.getAttribute( 'dir' );
     47
     48                return ( selectedElement == dir ) ?
    3749                        CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
    3850        }
    3951
    4052        function switchDir( element, dir, editor )
    4153        {
    42                 var dirBefore = element.getComputedStyle( 'direction' );
     54                var dirBefore = element.getComputedStyle( 'direction' ),
     55                        currentDir = element.getStyle( 'direction' ) || element.getAttribute( 'dir' ) || '';
    4356
    44                 if ( element.hasAttribute( 'dir' ) && element.getAttribute( 'dir' ).toLowerCase() == dir )
     57                element.removeStyle( 'direction' );
     58
     59                if ( currentDir.toLowerCase() == dir )
    4560                        element.removeAttribute( 'dir' );
    4661                else
    4762                        element.setAttribute( 'dir', dir );
  • _source/plugins/justify/plugin.js

     
    99
    1010(function()
    1111{
    12         var alignRemoveRegex = /(-moz-|-webkit-|start|auto)/i;
    13 
    1412        function getState( editor, path )
    1513        {
    1614                var firstBlock = path.block || path.blockLimit;
     
    1816                if ( !firstBlock || firstBlock.getName() == 'body' )
    1917                        return CKEDITOR.TRISTATE_OFF;
    2018
    21                 var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' );
    22                 if ( ( !currentAlign && isDefaultAlign( this, firstBlock ) ) || currentAlign == this.value )
    23                         return CKEDITOR.TRISTATE_ON;
    24                 return CKEDITOR.TRISTATE_OFF;
     19                return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ?
     20                        CKEDITOR.TRISTATE_ON :
     21                        CKEDITOR.TRISTATE_OFF;
    2522        }
    2623
     24        function getAlignment( element, useComputedState )
     25        {
     26                useComputedState = useComputedState === undefined || useComputedState;
     27
     28                var align = useComputedState ?
     29                        element.getComputedStyle( 'text-align' ) :
     30                        element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || '';
     31
     32                align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) );
     33
     34                !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' );
     35
     36                return align;
     37        }
     38
    2739        function onSelectionChange( evt )
    2840        {
    2941                var command = evt.editor.getCommand( this.name );
     
    3143                command.fire( 'state' );
    3244        }
    3345
    34         function isDefaultAlign( command, element )
    35         {
    36                 var direction = element.getComputedStyle( 'direction' ),
    37                         val = command.value;
    38                 return ( direction == 'rtl' && val == 'right' ) || ( direction == 'ltr' && val == 'left' );
    39 
    40         }
    41 
    4246        function justifyCommand( editor, name, value )
    4347        {
    4448                this.name = name;
     
    7983                        var bookmarks = selection.createBookmarks(),
    8084                                ranges = selection.getRanges( true );
    8185
    82 
    8386                        var cssClassName = this.cssClassName,
    8487                                iterator,
    8588                                block;
     89
     90                        var useComputedState = editor.config.useComputedState;
     91                        useComputedState = useComputedState === undefined || useComputedState;
     92
    8693                        for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
    8794                        {
    8895                                iterator = ranges[ i ].createIterator();
     
    9198                                while ( ( block = iterator.getNextParagraph() ) )
    9299                                {
    93100                                        block.removeAttribute( 'align' );
     101                                        block.removeStyle( 'text-align' );
    94102
    95                                         var isDefault = isDefaultAlign( this, block );
     103                                        // Remove any of the alignment classes from the className.
     104                                        var className = cssClassName && ( block.$.className =
     105                                                CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) );
    96106
     107                                        var apply =
     108                                                ( this.state == CKEDITOR.TRISTATE_OFF ) &&
     109                                                ( !useComputedState || ( getAlignment( block, true ) != this.value ) );
     110
    97111                                        if ( cssClassName )
    98112                                        {
    99                                                 // Remove any of the alignment classes from the className.
    100                                                 var className = block.$.className =
    101                                                         CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );
    102 
    103113                                                // Append the desired class name.
    104                                                 if ( this.state == CKEDITOR.TRISTATE_OFF && !isDefault )
     114                                                if ( apply )
    105115                                                        block.addClass( cssClassName );
    106116                                                else if ( !className )
    107117                                                        block.removeAttribute( 'class' );
    108118                                        }
    109                                         else
    110                                         {
    111                                                 if ( this.state == CKEDITOR.TRISTATE_OFF && !isDefault )
    112                                                         block.setStyle( 'text-align', this.value );
    113                                                 else
    114                                                         block.removeStyle( 'text-align' );
    115                                         }
     119                                        else if ( apply )
     120                                                block.setStyle( 'text-align', this.value );
    116121                                }
    117122
    118123                        }
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy