Ticket #3575: 3575_6.patch

File 3575_6.patch, 9.7 KB (added by Tobiasz Cudnik, 11 years ago)
  • _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 onChoice = function( evt )
     14        {
     15                var target = evt.data.getTarget(),
     16                        value;
     17
     18                if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )
     19                {
     20                        target.removeClass( "cke_light_background" );
     21                        editor.insertHtml( value );
     22                        dialog.hide();
     23                }
     24        };
     25
     26        var focusedNode;
     27
     28        var onFocus = function( evt, target )
     29        {
     30                var value;
     31                target = target || evt.data.getTarget();
     32
     33                if ( target.getName() == 'span' )
     34                        target = target.getParent();
     35
     36                if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )
     37                {
     38                        // Trigger blur manually if there is focused node.
     39                        if ( focusedNode )
     40                                onBlur( null, focusedNode );
     41
     42                        var htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement();
     43
     44                        dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value );
     45                        htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) );
     46                        target.getParent().addClass( "cke_light_background" );
     47
     48                        // Memorize focused node.
     49                        focusedNode = target;
     50                }
     51        };
     52       
     53        var onBlur = function( evt, target )
     54        {
     55                target = target || evt.data.getTarget();
     56
     57                if ( target.getName() == 'span' )
     58                        target = target.getParent();
     59               
     60                if ( target.getName() == 'a' )
     61                {
     62                        dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( ' ' );
     63                        dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( ' ' );
     64                        target.getParent().removeClass( "cke_light_background" );
     65
     66                        focusedNode = undefined;
     67                }
     68        };
     69
     70        var onKeydown = CKEDITOR.tools.addFunction( function( ev )
     71        {
     72                ev = new CKEDITOR.dom.event( ev );
     73
     74                // Get an Anchor element.
     75                var element = ev.getTarget();
     76                var relative, nodeToMove;
     77                var keystroke = ev.getKeystroke();
     78               
     79                switch ( keystroke )
     80                {
     81                        // RIGHT-ARROW
     82                        case 39 :
     83                                // relative is TD
     84                                if ( ( relative = element.getParent().getNext() ) )
     85                                {
     86                                        nodeToMove = relative.getChild( 0 );
     87                                        if ( nodeToMove.type == 1 )
     88                                        {
     89                                                nodeToMove.focus();
     90                                                onBlur( null, element );
     91                                                onFocus( null, nodeToMove );
     92                                        }
     93                                }
     94                                ev.preventDefault();
     95                                break;
     96                        // LEFT-ARROW
     97                        case 37 :
     98                                // relative is TD
     99                                if ( ( relative = element.getParent().getPrevious() ) )
     100                                {
     101                                        nodeToMove = relative.getChild( 0 );
     102                                        nodeToMove.focus();
     103                                        onBlur( null, element );
     104                                        onFocus( null, nodeToMove );
     105                                }
     106                                ev.preventDefault();
     107                                break;
     108                        // UP-ARROW
     109                        case 38 :
     110                                // relative is TR
     111                                if ( ( relative = element.getParent().getParent().getPrevious() ) )
     112                                {
     113                                        nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
     114                                        nodeToMove.focus();
     115                                        onBlur( null, element );
     116                                        onFocus( null, nodeToMove );
     117                                }
     118                                ev.preventDefault();
     119                                break;
     120                        // DOWN-ARROW
     121                        case 40 :
     122                                // relative is TR
     123                                if ( ( relative = element.getParent().getParent().getNext() ) )
     124                                {
     125                                        nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] );
     126                                        if ( nodeToMove && nodeToMove.type == 1 )
     127                                        {
     128                                                nodeToMove.focus();
     129                                                onBlur( null, element );
     130                                                onFocus( null, nodeToMove );
     131                                        }
     132                                }
     133                                ev.preventDefault();
     134                                break;
     135                        // ENTER
     136                        // SPACE
     137                        case 13 :
     138                        case 32 :
     139                                onChoice( { data: ev } );
     140                                ev.preventDefault();
     141                                break;
     142                        // TAB
     143                        case 9 :
     144                                // relative is TD
     145                                if ( ( relative = element.getParent().getNext() ) )
     146                                {
     147                                        nodeToMove = relative.getChild( 0 );
     148                                        if ( nodeToMove.type == 1 )
     149                                        {
     150                                                nodeToMove.focus();
     151                                                onBlur( null, element );
     152                                                onFocus( null, nodeToMove );
     153                                                ev.preventDefault( true );
     154                                        }
     155                                        else
     156                                                onBlur( null, element );
     157                                }
     158                                // relative is TR
     159                                else if ( ( relative = element.getParent().getParent().getNext() ) )
     160                                {
     161                                        nodeToMove = relative.getChild( [ 0, 0 ] );
     162                                        if ( nodeToMove && nodeToMove.type == 1 )
     163                                        {
     164                                                nodeToMove.focus();
     165                                                onBlur( null, element );
     166                                                onFocus( null, nodeToMove );
     167                                                ev.preventDefault( true );
     168                                        }
     169                                        else
     170                                                onBlur( null, element );
     171                                }
     172                                break;
     173                        // SHIFT + TAB
     174                        case CKEDITOR.SHIFT + 9 :
     175                                // relative is TD
     176                                if ( ( relative = element.getParent().getPrevious() ) )
     177                                {
     178                                        nodeToMove = relative.getChild( 0 );
     179                                        nodeToMove.focus();
     180                                        onBlur( null, element );
     181                                        onFocus( null, nodeToMove );
     182                                        ev.preventDefault( true );
     183                                }
     184                                // relative is TR
     185                                else if ( ( relative = element.getParent().getParent().getPrevious() ) )
     186                                {
     187                                        nodeToMove = relative.getLast().getChild( 0 );
     188                                        nodeToMove.focus();
     189                                        onBlur( null, element );
     190                                        onFocus( null, nodeToMove );
     191                                        ev.preventDefault( true );
     192                                }
     193                                else
     194                                        onBlur( null, element );
     195                                break;
     196                        default :
     197                                // Do not stop not handled events.
     198                                return;
     199                }
     200        });
     201
    8202        return {
    9203                title : editor.lang.specialChar.title,
    10204                minWidth : 430,
     
    59253                                        if ( chars[ i ] )
    60254                                        {
    61255                                                html.push(
    62                                                         '<td width="1%"' +
    63                                                         ' title="', chars[i].replace( /&/g, '&amp;' ), '"' +
    64                                                         ' value="', chars[i].replace( /&/g, "&amp;" ), '"' +
    65                                                         ' class="cke_dark_background cke_hand">');
    66                                                 html.push( chars[i] );
     256                                                        '<td class="cke_dark_background">' +
     257                                                        '<a href="#" style="display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', chars[i].replace( /&/g, '&amp;' ), '"' +
     258                                                        ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )"' +
     259                                                        ' tabindex="-1">' +
     260                                                        '<span style="margin: 0 auto;">' +
     261                                                        chars[i] +
     262                                                        '</span></a>');
    67263                                        }
    68264                                        else
    69265                                                html.push( '<td class="cke_dark_background">&nbsp;' );
     
    95291                                                                type : 'html',
    96292                                                                id : 'charContainer',
    97293                                                                html : '',
    98                                                                 onMouseover : function( evt )
     294                                                                onMouseover : onFocus,
     295                                                                onMouseout : onBlur,
     296                                                                onClick : onChoice,
     297                                                                focus : function()
    99298                                                                {
    100                                                                         var target = evt.data.getTarget(),
    101                                                                                 value;
    102                                                                         if ( target.getName() == 'td' && ( value = target.getAttribute( 'value' ) ) )
     299                                                                        var firstChar = this.getElement().getChild( [0, 0, 0, 0, 0] );
     300                                                                        setTimeout(function()
    103301                                                                        {
    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                                                                         }
     302                                                                                firstChar.focus();
     303                                                                                onFocus( null, firstChar );
     304                                                                        });
    111305                                                                },
    112                                                                 onMouseout : function( evt )
     306                                                                // Needed only for webkit.
     307                                                                onShow : function()
    113308                                                                {
    114                                                                         var target = evt.data.getTarget();
    115                                                                         if ( target.getName() == 'td' )
     309                                                                        var firstChar = this.getElement().getChild( [0, 0, 0, 0, 0] );
     310                                                                        setTimeout(function()
    116311                                                                        {
    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                                                                         }
     312                                                                                firstChar.focus();
     313                                                                                onFocus( null, firstChar );
     314                                                                        });
    122315                                                                },
    123                                                                 onClick : function( evt )
     316                                                                onLoad : function( event )
    124317                                                                {
    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                                                                 }
     318                                                                        dialog = event.sender;
     319                                                                }
    135320                                                        },
    136321                                                        {
    137322                                                                type : 'hbox',
  • _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        {
     
    159159
    160160                html.push(
    161161                        '<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +
    162                                 '<a class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
     162                                '<a href="#" class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
    163163                                        '<img class="hand" title="', config.smiley_descriptions[i], '"' +
    164164                                                ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"',
    165165                                                ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy