Ticket #3575: 3575.patch

File 3575.patch, 7.9 KB (added by Tobiasz Cudnik, 11 years ago)

Tested on FF3, IE6, IE7, IE8.

  • _source/plugins/smiley/dialogs/smiley.js

     
    1 /*
     1/*
    22Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
    33For licensing, see LICENSE.html or http://ckeditor.com/license
    44*/
     
    4444                editor.insertElement( img );
    4545
    4646                dialog.hide();
    47         }
     47        };
    4848
    4949        var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )
    5050        {
  • _source/plugins/specialchar/dialogs/specialchar.js

     
    55
    66CKEDITOR.dialog.add( 'specialchar', function( editor )
    77{
     8        /**
     9         * Simulate "this" of a dialog for non-dialog events.
     10         * @type {CKEDITOR.dialog}
     11         */
     12        var dialog;
     13        var onClick = function( evt )
     14        {
     15                var target = evt.data.getTarget(),
     16                        value;
     17
     18                if ( target.getName() == 'td' && ( value = target.getAttribute( 'value' )) )
     19                {
     20                        target.removeClass( "cke_light_background" );
     21                        editor.insertHtml( value );
     22                        dialog.hide();
     23                }
     24        };
     25
     26        var onMouseover = function( evt, target )
     27        {
     28                var value;
     29                target = target || evt.data.getTarget();
     30
     31                if ( target.getName() == 'td' && ( value = target.getAttribute( 'value' ) ) )
     32                {
     33                        var htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement();
     34
     35                        dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value );
     36                        htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) );
     37                        target.addClass( "cke_light_background" );
     38                }
     39        };
     40       
     41        var onMouseout = function( evt, target )
     42        {
     43                target = target || evt.data.getTarget();
     44               
     45                if ( target.getName() == 'td' )
     46                {
     47                        dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( ' ' );
     48                        dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( ' ' );
     49                        target.removeClass( "cke_light_background" );
     50                }
     51        };
     52
     53        var onKeydown = CKEDITOR.tools.addFunction( function( ev )
     54        {
     55                ev = new CKEDITOR.dom.event( ev );
     56               
     57                var element = ev.getTarget();
     58                var relative, nodeToMove;
     59                var keystroke = ev.getKeystroke();
     60               
     61                switch ( keystroke )
     62                {
     63                        // RIGHT-ARROW
     64                        case 39 :
     65                                // relative is TD
     66                                if ( ( relative = element.getNext() ) )
     67                                {
     68                                        relative.focus();
     69                                        onMouseout( null, element );
     70                                        onMouseover( null, relative );
     71                                }
     72                                ev.preventDefault();
     73                                break;
     74                        // LEFT-ARROW
     75                        case 37 :
     76                                // relative is TD
     77                                if ( ( relative = element.getPrevious() ) )
     78                                {
     79                                        relative.focus();
     80                                        onMouseout( null, element );
     81                                        onMouseover( null, relative );
     82                                }
     83                                ev.preventDefault();
     84                                break;
     85                        // UP-ARROW
     86                        case 38 :
     87                                // relative is TR
     88                                if ( ( relative = element.getParent().getPrevious() ) )
     89                                {
     90                                        nodeToMove = relative.getChild( element.getIndex() );
     91                                        nodeToMove.focus();
     92                                        onMouseout( null, element );
     93                                        onMouseover( null, nodeToMove );
     94                                }
     95                                ev.preventDefault();
     96                                break;
     97                        // DOWN-ARROW
     98                        case 40 :
     99                                // relative is TR
     100                                if ( ( relative = element.getParent().getNext() ) )
     101                                {
     102                                        nodeToMove = relative.getChild( element.getIndex() );
     103                                        if ( nodeToMove )
     104                                        {
     105                                                nodeToMove.focus();
     106                                                onMouseout( null, element );
     107                                                onMouseover( null, nodeToMove );
     108                                        }
     109                                }
     110                                ev.preventDefault();
     111                                break;
     112                        // ENTER
     113                        // SPACE
     114                        case 13 :
     115                        case 32 :
     116                                onClick( { data: ev } );
     117                                ev.preventDefault();
     118                                break;
     119                        // TAB
     120                        case 9 :
     121                                // relative is TD
     122                                if ( ( relative = element.getNext() ) )
     123                                {
     124                                        relative.focus();
     125                                        ev.preventDefault(true);
     126                                        onMouseout( null, element );
     127                                        onMouseover( null, relative );
     128                                }
     129                                // relative is TR
     130                                else if ( ( relative = element.getParent().getNext() ) )
     131                                {
     132                                        nodeToMove = relative.getChild( 0 );
     133                                        if ( nodeToMove )
     134                                        {
     135                                                nodeToMove.focus();
     136                                                onMouseout( null, element );
     137                                                onMouseover( null, nodeToMove );
     138                                        }
     139                                        ev.preventDefault(true);
     140                                }
     141                                break;
     142                        // SHIFT + TAB
     143                        case CKEDITOR.SHIFT + 9 :
     144                                // relative is TD
     145                                if ( ( relative = element.getPrevious() ) )
     146                                {
     147                                        relative.focus();
     148                                        onMouseout( null, element );
     149                                        onMouseover( null, relative );
     150                                        ev.preventDefault(true);
     151                                }
     152                                // relative is TR
     153                                else if ( ( relative = element.getParent().getPrevious() ) )
     154                                {
     155                                        nodeToMove = relative.getLast();
     156                                        nodeToMove.focus();
     157                                        onMouseout( null, element );
     158                                        onMouseover( null, nodeToMove );
     159                                        ev.preventDefault(true);
     160                                }
     161                                break;
     162                        default :
     163                                // Do not stop not handled events.
     164                                return;
     165                }
     166        });
     167
    8168        return {
    9169                title : editor.lang.specialChar.title,
    10170                minWidth : 430,
     
    47207                        var columns = this.definition.charColumns,
    48208                                chars = this.definition.chars;
    49209
    50                         var html = [ '<table style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">' ];
     210                        var html = [ '<table onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">' ];
    51211
    52212                        var i = 0 ;
    53213                        while ( i < chars.length )
     
    62222                                                        '<td width="1%"' +
    63223                                                        ' title="', chars[i].replace( /&/g, '&amp;' ), '"' +
    64224                                                        ' value="', chars[i].replace( /&/g, "&amp;" ), '"' +
    65                                                         ' class="cke_dark_background cke_hand">');
     225                                                        ' class="cke_dark_background cke_hand"' +
     226                                                        ' tabindex="-1">');
    66227                                                html.push( chars[i] );
    67228                                        }
    68229                                        else
     
    95256                                                                type : 'html',
    96257                                                                id : 'charContainer',
    97258                                                                html : '',
    98                                                                 onMouseover : function( evt )
     259                                                                onMouseover : onMouseover,
     260                                                                onMouseout : onMouseout,
     261                                                                onClick : onClick,
     262                                                                focus : function()
    99263                                                                {
    100                                                                         var target = evt.data.getTarget(),
    101                                                                                 value;
    102                                                                         if ( target.getName() == 'td' && ( value = target.getAttribute( 'value' ) ) )
    103                                                                         {
    104                                                                                 var dialog = this.getDialog(),
    105                                                                                         htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement();
    106 
    107                                                                                 dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value );
    108                                                                                 htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) );
    109                                                                                 target.addClass( "cke_light_background" );
    110                                                                         }
     264                                                                        var firstChar = this.getElement().getChild( [0, 0, 0, 0] );
     265                                                                        firstChar.focus();
    111266                                                                },
    112                                                                 onMouseout : function( evt )
     267                                                                onLoad : function( event )
    113268                                                                {
    114                                                                         var target = evt.data.getTarget();
    115                                                                         if ( target.getName() == 'td' )
    116                                                                         {
    117                                                                                 var dialog = this.getDialog();
    118                                                                                 dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( '&nbsp;' );
    119                                                                                 dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( '&nbsp;' );
    120                                                                                 target.removeClass( "cke_light_background" );
    121                                                                         }
    122                                                                 },
    123                                                                 onClick : function( evt )
    124                                                                 {
    125                                                                         var target = evt.data.getTarget(),
    126                                                                                 value;
    127                                                                         if ( target.getName() == 'td' && ( value = target.$.getAttribute( 'value' )) )
    128                                                                         {
    129                                                                                 var dialog = this.getDialog();
    130                                                                                 target.removeClass( "cke_light_background" );
    131                                                                                 dialog.getParentEditor().insertHtml( value );
    132                                                                                 dialog.hide();
    133                                                                         }
    134                                                                 }
    135                                                         },
    136                                                         {
     269                                                                        dialog = event.sender;
     270                                                                }
     271                                                        },
     272                                                        {
    137273                                                                type : 'hbox',
    138274                                                                align : 'top',
    139275                                                                widths : [ '100%' ],
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy