Ticket #3492: 3492_3.patch

File 3492_3.patch, 7.4 KB (added by Tobiasz Cudnik, 12 years ago)
  • _source/skins/v2/dialog.css

     
    1 /*
     1/*
    22Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
    33For licensing, see LICENSE.html or http://ckeditor.com/license
    44*/
     
    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

     
    1 /*
     1/*
    22Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
    33For licensing, see LICENSE.html or http://ckeditor.com/license
    44*/
     
    1010                columns = config.smiley_columns,
    1111                i;
    1212
     13        /**
     14         * Simulate "this" of a dialog for non-dialog events.
     15         * @type {CKEDITOR.dialog}
     16         */
     17        var dialog;
     18        /**
     19         * Pre-declare reference to last smile.
     20         * @type {CKEDITOR.dom.element}
     21         */
     22        var lastSmile;
     23        var onClick = function( evt )
     24{
     25                var target = evt.data.getTarget(),
     26                        targetName = target.getName();
     27
     28                if ( targetName == 'td' )
     29                        target = target.getChild( [ 0, 0 ] );
     30                else if ( targetName == 'a' )
     31                        target = target.getChild( 0 );
     32                else if ( targetName != 'img' )
     33                        return;
     34
     35                var src = target.getAttribute( 'cke_src' ),
     36                        title = target.getAttribute( 'title' );
     37
     38                var img = editor.document.createElement( 'img',
     39                        {
     40                                attributes :
     41                                {
     42                                        src : src,
     43                                        _cke_saved_src : src,
     44                                        title : title,
     45                                        alt : title
     46                                }
     47                        });
     48
     49                editor.insertElement( img );
     50
     51                dialog.hide();
     52        }
     53
     54        var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )
     55        {
     56                ev = new CKEDITOR.dom.event( ev );
     57                element = new CKEDITOR.dom.element( element );
     58                var relative, nodeToMove;
     59
     60                var keystroke = ev.getKeystroke();
     61                switch ( keystroke )
     62                {
     63                        // RIGHT-ARROW
     64                        case 39 :
     65                                // relative is TD
     66                                if ( ( relative = element.getParent().getNext() ) )
     67                                {
     68                                        nodeToMove = relative.getChild( 0 );
     69                                        nodeToMove.focus();
     70                                }
     71                                ev.preventDefault();
     72                                break;
     73                        // LEFT-ARROW
     74                        case 37 :
     75                                // relative is TD
     76                                if ( ( relative = element.getParent().getPrevious() ) )
     77                                {
     78                                        nodeToMove = relative.getChild( 0 );
     79                                        nodeToMove.focus();
     80                                }
     81                                ev.preventDefault();
     82                                break;
     83                        // UP-ARROW
     84                        case 38 :
     85                                // relative is TR
     86                                if ( ( relative = element.getParent().getParent().getPrevious() ) )
     87                                {
     88                                        nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
     89                                        nodeToMove.focus();
     90                                }
     91                                ev.preventDefault();
     92                                break;
     93                        // DOWN-ARROW
     94                        case 40 :
     95                                // relative is TR
     96                                if ( ( relative = element.getParent().getParent().getNext() ) )
     97                                {
     98                                        nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
     99                                        if ( nodeToMove )
     100                                                nodeToMove.focus();
     101                                }
     102                                ev.preventDefault();
     103                                break;
     104                        // ENTER
     105                        // SPACE
     106                        case 13 :
     107                        case 32 :
     108                                onClick( { data: ev } );
     109                                ev.preventDefault();
     110                                break;
     111                        // TAB
     112                        case 9 :
     113                                // relative is TD
     114                                if ( ( relative = element.getParent().getNext() ) )
     115                                {
     116                                        nodeToMove = relative.getChild( 0 );
     117                                        nodeToMove.focus();
     118                                        ev.preventDefault(true);
     119                                }
     120                                // relative is TR
     121                                else if ( ( relative = element.getParent().getParent().getNext() ) )
     122                                {
     123                                        nodeToMove = relative.getChild( [0, 0] );
     124                                        if ( nodeToMove )
     125                                                nodeToMove.focus();
     126                                        ev.preventDefault(true);
     127                                }
     128                                lastSmile = element;
     129                                break;
     130                        // SHIFT + TAB
     131                        case CKEDITOR.SHIFT + 9 :
     132                                // relative is TD
     133                                if ( ( relative = element.getParent().getPrevious() ) )
     134                                {
     135                                        nodeToMove = relative.getChild( 0 );
     136                                        nodeToMove.focus();
     137                                        ev.preventDefault(true);
     138                                }
     139                                // relative is TR
     140                                else if ( ( relative = element.getParent().getParent().getPrevious() ) )
     141                                {
     142                                        nodeToMove = relative.getLast().getChild( 0 );
     143                                        nodeToMove.focus();
     144                                        ev.preventDefault(true);
     145                                }
     146                                break;
     147                        default :
     148                                // Do not stop not handled events.
     149                                return;
     150                }
     151        });
     152
    13153        // Build the HTML for the smiley images table.
    14154        var html =
    15155        [
     
    25165
    26166                html.push(
    27167                        '<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                                 '>' +
     168                                '<a class="cke_smile" tabindex="-1"  onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
     169                                        '<img class="hand" title="', config.smiley_descriptions[i], '"' +
     170                                                ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
     171                                                ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
     172                                                // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.
     173                                                ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),
     174                                        '>' +
     175                                '</a>',
    34176                        '</td>' );
    35177
    36178                if ( i % columns == columns - 1 )
     
    50192        {
    51193                type : 'html',
    52194                html : html.join( '' ),
    53                 onClick : function( evt )
     195                onShow : function( event )
    54196                {
    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',
     197                        // Momorize dialog reference inside scope of this file.
     198                        dialog = event.sender;
     199                        var firstSmile = dialog.parts.contents.getChild( [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] );
     200                        firstSmile.focus();
     201                        dialog._.hasFocus = true;
     202                        var onKeydown = CKEDITOR.tools.addFunction(
     203                                function( e )
    67204                                {
    68                                         attributes :
     205                                        e = new CKEDITOR.dom.event( e );
     206                                        var keystroke = e.getKeystroke();
     207                                        switch ( keystroke )
    69208                                        {
    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();
     209                                                // SHIFT + TAB
     210                                                case CKEDITOR.SHIFT + 9 :
     211                                                        if ( !lastSmile )
     212                                                        {
     213                                                                lastSmile = dialog.parts.contents.getChild( [0, 0, 0, 0, 0, 0, 0] )
     214                                                                        // Find last row and last column then smile anchor.
     215                                                                        .getLast().getLast().getChild( 0 );
     216                                                        }
     217                                                        lastSmile.focus();
     218                                                        e.preventDefault(true);
     219                                                        break;
     220                                        }
     221                                }
     222                        );
     223                        dialog.parts.footer.setAttribute('onkeydown',
     224                                "CKEDITOR.tools.callFunction( " + onKeydown +", event );"
     225                        );
    80226                },
     227                onClick : onClick,
    81228                style : 'width: 100%; height: 100%; border-collapse: separate;'
    82229        };
    83230
© 2003 – 2021 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy