Ticket #6099: 6099_7.patch

File 6099_7.patch, 2.6 KB (added by Tobiasz Cudnik, 14 years ago)
  • _source/plugins/bidi/plugin.js

     
    66(function()
    77{
    88        var guardElements = { table:1, ul:1, ol:1, blockquote:1, div:1 },
    9                 directSelectionGuardElements = {};
     9                directSelectionGuardElements = {},
     10                stateGuardElements = {};
    1011        CKEDITOR.tools.extend( directSelectionGuardElements, guardElements, { tr:1, p:1, div:1, li:1 } );
     12        CKEDITOR.tools.extend( stateGuardElements, directSelectionGuardElements, { td:1 } );
    1113
    12         function onSelectionChange( evt )
     14        function onSelectionChange( e )
    1315        {
     16                setToolbarStates( e );
     17                handleMixedDirContent( e );
     18        }
     19
     20        function setToolbarStates( evt )
     21        {
    1422                var editor = evt.editor,
    1523                        path = evt.data.path;
    1624                var useComputedState = editor.config.useComputedState,
     
    1826
    1927                useComputedState = useComputedState === undefined || useComputedState;
    2028
    21                 if ( useComputedState )
     29                // We can use computedState provided by the browser or traverse parents manually.
     30                if ( !useComputedState )
    2231                {
    23                         var selection = editor.getSelection(),
    24                                 ranges = selection.getRanges();
     32                        selectedElement = path.lastElement;
    2533
    26                         selectedElement = ranges && ranges[ 0 ].getEnclosedNode();
    27 
    28                         // If this is not our element of interest, apply to fully selected elements from guardElements.
    29                         if ( !selectedElement || selectedElement
    30                                         && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements )
    31                                 )
    32                                 selectedElement = getFullySelected( selection, guardElements );
    33                 }
     34                        while ( !( selectedElement.getName() in stateGuardElements || selectedElement.is( 'body' ) ) )
     35                        {
     36                                var parent = selectedElement.getParent();
     37                                if ( !parent )
     38                                        break;
     39                               
     40                                selectedElement = parent;
     41                        }
     42                }
    3443
    3544                selectedElement = selectedElement || path.block || path.blockLimit;
    3645
     
    4352
    4453                editor.getCommand( 'bidirtl' ).setState( selectionDir == 'rtl' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
    4554                editor.getCommand( 'bidiltr' ).setState( selectionDir == 'ltr' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
     55        }
    4656
    47                 var chromeRoot = editor.container.getChild( 1 );
    48 
    49                 if ( selectionDir != editor.lang.dir )
     57        function handleMixedDirContent( evt )
     58        {
     59                var editor = evt.editor,
     60                        chromeRoot = editor.container.getChild( 1 ),
     61                        node = evt.data.path.elements[ 0 ];
     62               
     63                if ( node && editor.lang.dir != evt.data.path.elements[ 0 ].getComputedStyle( 'direction' ) )
    5064                        chromeRoot.addClass( 'cke_mixed_dir_content' );
    5165                else
    5266                        chromeRoot.removeClass( 'cke_mixed_dir_content' );
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy