Ticket #3492: 3492_2.patch

File 3492_2.patch, 6.2 KB (added by Tobiasz Cudnik, 12 years ago)

Tested in FF3, IE8 strict, IE8 quirks.

  • _source/skins/v2/dialog.css

     
    591591{
    592592        color: #a0a0a0;
    593593}
     594
     595.cke_skin_v2 a.cke_smile img
     596{
     597        /* IE6 does not support transparent borders */
     598        border: 2px solid #eaead1;
     599}
     600
     601.cke_skin_v2 a.cke_smile:focus img,
     602.cke_skin_v2 a.cke_smile:active img,
     603.cke_skin_v2 a.cke_smile:hover img
     604{
     605        border-color: #C7C78F;
     606}
     607 No newline at end of file
  • _source/plugins/smiley/dialogs/smiley.js

     
    1010                columns = config.smiley_columns,
    1111                i;
    1212
     13        // Simulate "this" of a dialog for non-dialog events.
     14        var dialog;
     15        var onClick = function( evt )
     16        {
     17                var target = evt.data.getTarget(),
     18                        targetName = target.getName();
     19
     20                if ( targetName == 'td' )
     21                        target = target.getChild( [ 0, 0 ] );
     22                else if ( targetName == 'a' )
     23                        target = target.getChild( 0 );
     24                else if ( targetName != 'img' )
     25                        return;
     26
     27                var src = target.getAttribute( 'cke_src' ),
     28                        title = target.getAttribute( 'title' );
     29
     30                var img = editor.document.createElement( 'img',
     31                        {
     32                                attributes :
     33                                {
     34                                        src : src,
     35                                        _cke_saved_src : src,
     36                                        title : title,
     37                                        alt : title
     38                                }
     39                        });
     40
     41                editor.insertElement( img );
     42
     43                dialog.hide();
     44        }
     45
     46        var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )
     47        {
     48                ev = new CKEDITOR.dom.event( ev );
     49                element = new CKEDITOR.dom.element( element );
     50                var relative, nodeToMove;
     51
     52                var keystroke = ev.getKeystroke();
     53                switch ( keystroke )
     54                {
     55                        // RIGHT-ARROW
     56                        case 39 :
     57                                // relative is TD
     58                                if ( ( relative = element.getParent().getNext() ) )
     59                                {
     60                                        nodeToMove = relative.getChild( 0 );
     61                                        nodeToMove.focus();
     62                                }
     63                                ev.preventDefault();
     64                                break;
     65                        // LEFT-ARROW
     66                        case 37 :
     67                                // relative is TD
     68                                if ( ( relative = element.getParent().getPrevious() ) )
     69                                {
     70                                        nodeToMove = relative.getChild( 0 );
     71                                        nodeToMove.focus();
     72                                }
     73                                ev.preventDefault();
     74                                break;
     75                        // UP-ARROW
     76                        case 38 :
     77                                // relative is TR
     78                                if ( ( relative = element.getParent().getParent().getPrevious() ) )
     79                                {
     80                                        nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
     81                                        nodeToMove.focus();
     82                                }
     83                                ev.preventDefault();
     84                                break;
     85                        // DOWN-ARROW
     86                        case 40 :
     87                                // relative is TR
     88                                if ( ( relative = element.getParent().getParent().getNext() ) )
     89                                {
     90                                        nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
     91                                        if ( nodeToMove )
     92                                                nodeToMove.focus();
     93                                }
     94                                ev.preventDefault();
     95                                break;
     96                        // ENTER
     97                        // SPACE
     98                        case 13 :
     99                        case 32 :
     100                                onClick( { data: ev } );
     101                                ev.preventDefault();
     102                                break;
     103                        // TAB
     104                        case 9 :
     105                                // relative is TD
     106                                if ( ( relative = element.getParent().getNext() ) )
     107                                {
     108                                        nodeToMove = relative.getChild( 0 );
     109                                        nodeToMove.focus();
     110                                        ev.preventDefault(true);
     111                                }
     112                                // relative is TR
     113                                else if ( ( relative = element.getParent().getParent().getNext() ) )
     114                                {
     115                                        nodeToMove = relative.getChild( [0, 0] );
     116                                        if ( nodeToMove )
     117                                                nodeToMove.focus();
     118                                        ev.preventDefault(true);
     119                                }
     120                                break;
     121                        // SHIFT + TAB
     122                        case CKEDITOR.SHIFT + 9 :
     123                                // relative is TD
     124                                if ( ( relative = element.getParent().getPrevious() ) )
     125                                {
     126                                        nodeToMove = relative.getChild( 0 );
     127                                        nodeToMove.focus();
     128                                        ev.preventDefault(true);
     129                                }
     130                                // relative is TR
     131                                else if ( ( relative = element.getParent().getParent().getPrevious() ) )
     132                                {
     133                                        nodeToMove = relative.getLast().getChild( 0 );
     134                                        nodeToMove.focus();
     135                                        ev.preventDefault(true);
     136                                }
     137                                break;
     138                        default :
     139                                // Do not stop not handled events.
     140                                return;
     141                }
     142        });
     143
    13144        // Build the HTML for the smiley images table.
    14145        var html =
    15146        [
     
    25156
    26157                html.push(
    27158                        '<td class="dark_background hand centered" style="vertical-align: middle;">' +
    28                                 '<img border="0" class="hand" title="', config.smiley_descriptions[i], '"' +
    29                                         ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
    30                                         ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
    31                                         // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.
    32                                         ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),
    33                                 '>' +
     159                                '<a class="cke_smile" tabindex="-1"  onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
     160                                        '<img class="hand" title="', config.smiley_descriptions[i], '"' +
     161                                                ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
     162                                                ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
     163                                                // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.
     164                                                ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),
     165                                        '>' +
     166                                '</a>',
    34167                        '</td>' );
    35168
    36169                if ( i % columns == columns - 1 )
     
    50183        {
    51184                type : 'html',
    52185                html : html.join( '' ),
    53                 onClick : function( evt )
     186                onShow : function( event )
    54187                {
    55                         var target = evt.data.getTarget(),
    56                                 targetName = target.getName();
    57 
    58                         if ( targetName == 'td' )
    59                                 target = target.getChild(0);
    60                         else if ( targetName != 'img' )
    61                                 return;
    62 
    63                         var src = target.getAttribute( 'cke_src' ),
    64                                 title = target.getAttribute( 'title' );
    65 
    66                         var img = editor.document.createElement( 'img',
    67                                 {
    68                                         attributes :
    69                                         {
    70                                                 src : src,
    71                                                 _cke_saved_src : src,
    72                                                 title : title,
    73                                                 alt : title
    74                                         }
    75                                 });
    76 
    77                         editor.insertElement( img );
    78 
    79                         this.getDialog().hide();
     188                        // Momorize dialog reference inside scope of this file.
     189                        dialog = event.sender;
     190                        var firstSmile = event.sender.parts.contents.getChild( [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] );
     191                        firstSmile.focus();
     192                        event.sender._.hasFocus = true;
    80193                },
     194                onClick : onClick,
    81195                style : 'width: 100%; height: 100%; border-collapse: separate;'
    82196        };
    83197
© 2003 – 2021 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy