Changeset 4957


Ignore:
Timestamp:
01/20/10 10:46:23 (6 years ago)
Author:
garry.yao
Message:

Better accessibility on 'Paste' dialog.

Location:
CKEditor/branches/features/aria/_source
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/branches/features/aria/_source/lang/en.js

    r4956 r4957  
    502502                copyError       : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',
    503503                pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',
    504                 securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'
     504                securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',
     505                pasteArea : 'paste area'
    505506        },
    506507
  • CKEditor/branches/features/aria/_source/plugins/clipboard/dialogs/paste.js

    r4858 r4957  
    66CKEDITOR.dialog.add( 'paste', function( editor )
    77{
     8        var lang = editor.lang.clipboard;
    89        var isCustomDomain = CKEDITOR.env.isCustomDomain();
    910
     11        function onPasteFrameLoad( win )
     12        {
     13                var doc =  new CKEDITOR.dom.document( win.document ),
     14                        $ = doc.$;
     15
     16                doc.getById( "cke_actscrpt" ).remove();
     17
     18                CKEDITOR.env.ie ?
     19                        $.body.contentEditable = "true" :
     20                        $.designMode = "on";
     21
     22                CKEDITOR.env.ie && doc.getWindow().on( 'blur', function()
     23                {
     24                         $.body.contentEditable = "false";
     25                } );
     26
     27                doc.on( "keydown", function( e )
     28                {
     29                        var domEvent = e.data,
     30                                key = domEvent.getKeystroke(),
     31                                processed;
     32
     33                        switch( key )
     34                        {
     35                                case 27 :
     36                                        this.hide();
     37                                        processed = 1;
     38                                        break;
     39
     40                                case 9 :
     41                                case CKEDITOR.SHIFT + 9 :
     42                                        this.changeFocus( true );
     43                                        processed = 1;
     44                        }
     45
     46                        processed && domEvent.preventDefault();
     47                }, this );
     48               
     49                editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) );
     50        }
     51
    1052        return {
    11                 title : editor.lang.clipboard.title,
     53                title : lang.title,
    1254
    1355                minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,
    1456                minHeight : CKEDITOR.env.quirks ? 250 : 245,
    15                 htmlToLoad : '<!doctype html><script type="text/javascript">'
    16                                 + 'window.onload = function()'
    17                                 + '{'
    18                                         + 'if ( ' + CKEDITOR.env.ie + ' ) '
    19                                                 + 'document.body.contentEditable = "true";'
    20                                         + 'else '
    21                                                 + 'document.designMode = "on";'
    22                                         + 'var iframe = new window.parent.CKEDITOR.dom.element( frameElement );'
    23                                         + 'var dialog = iframe.getCustomData( "dialog" );'
    24                       + ''
    25                                         + 'iframe.getFrameDocument().on( "keydown", function( e )\
    26                                                 {\
    27                                                         if ( e.data.getKeystroke() == 27 )\
    28                                                                 dialog.hide();\
    29                                                 });'
    30                                 + '};'
    31                                 + '</script><style>body { margin: 3px; height: 95%; } </style><body></body>',
    32 
    3357                onShow : function()
    3458                {
    35                         if ( CKEDITOR.env.ie )
    36                                 this.getParentEditor().document.getBody().$.contentEditable = 'false';
    37 
    3859                        // FIREFOX BUG: Force the browser to render the dialog to make the to-be-
    3960                        // inserted iframe editable. (#3366)
    4061                        this.parts.dialog.$.offsetHeight;
    4162
    42                         var container = this.getContentElement( 'general', 'editing_area' ).getElement(),
    43                                 iframe = CKEDITOR.dom.element.createFromHtml( '<iframe src="javascript:void(0)" frameborder="0" allowtransparency="1"></iframe>' );
     63                        var htmlToLoad = '<!doctype html><html><head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
     64                                                         '<script id="cke_actscrpt" type="text/javascript">' +
     65                                                         'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' +
     66                                                         '</script></body></html>';
     67                       
     68                        var iframe = CKEDITOR.dom.element.createFromHtml(
     69                                                '<iframe' +
     70                                                ' frameborder="0" ' +
     71                                                ' allowTransparency="true"' +
     72                                                // Support for custom document.domain in IE.
     73                                                ( isCustomDomain ?
     74                                                        ' src="javascript:void((function(){' +
     75                                                                'document.open();' +
     76                                                                'document.domain=\'' + document.domain + '\';' +
     77                                                                'document.close();' +
     78                                                        '})())"' : '' ) +
     79                                                ' role="region"' +
     80                                                ' aria-label="' + lang.pasteArea + '"' +
     81                                                ' aria-describedby="' + this.getContentElement( 'general', 'pasteMsg' ).domId + '"' +
     82                                                ' aria-multiple="true"' +
     83                                                '></iframe>' );
    4484
    45                         var lang = this.getParentEditor().lang;
     85                        iframe.on( 'load', function( e )
     86                        {
     87                                e.removeListener();
     88                                var doc = iframe.getFrameDocument().$;
     89                                // Custom domain handling is needed after each document.open().
     90                                doc.open();
     91                                if ( isCustomDomain )
     92                                        doc.domain = document.domain;
     93                                doc.write( htmlToLoad );
     94                                doc.close();
     95                        }, this );
    4696
    4797                        iframe.setStyles(
     
    54104                        iframe.setCustomData( 'dialog', this );
    55105
    56                         var accTitle = lang.editorTitle.replace( '%1', lang.clipboard.title );
     106                        var field = this.getContentElement( 'general', 'editing_area' ),
     107                                container = field.getElement();
     108                        container.setHtml( '' );
     109                        container.append( iframe );
    57110
     111                        field.getInputElement = function(){ return iframe };
     112
     113                        // Force container to scale in IE.
    58114                        if ( CKEDITOR.env.ie )
    59                                 container.setHtml( '<legend style="position:absolute;top:-1000000px;left:-1000000px;">'
    60                                                 + CKEDITOR.tools.htmlEncode( accTitle )
    61                                                 + '</legend>' );
    62                         else
    63115                        {
    64                                 container.setHtml( '' );
    65                                 container.setAttributes(
    66                                         {
    67                                                 role : 'region',
    68                                                 title : accTitle
    69                                         } );
    70                                 iframe.setAttributes(
    71                                         {
    72                                                 role : 'region',
    73                                                 title : ' '
    74                                         } );
    75                         }
    76                         container.append( iframe );
    77                         if ( CKEDITOR.env.ie )
     116                                container.setStyle( 'display', 'block' );
    78117                                container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );
    79 
    80                         if ( isCustomDomain )
    81                         {
    82                                 CKEDITOR._cke_htmlToLoad = this.definition.htmlToLoad;
    83                                 iframe.setAttribute( 'src',
    84                                         'javascript:void( (function(){' +
    85                                                    'document.open();' +
    86                                                    'document.domain="' + document.domain + '";' +
    87                                                    'document.write( window.parent.CKEDITOR._cke_htmlToLoad );' +
    88                                                    'delete window.parent.CKEDITOR._cke_htmlToLoad;' +
    89                                                    'document.close();' +
    90                                         '})() )' );
    91                         }
    92                         else
    93                         {
    94                                 var doc = iframe.$.contentWindow.document;
    95                                 doc.open();
    96                                 doc.write( this.definition.htmlToLoad );
    97                                 doc.close();
    98118                        }
    99119                },
     
    132152                                                type : 'html',
    133153                                                id : 'securityMsg',
    134                                                 html : '<div style="white-space:normal;width:340px;">' + editor.lang.clipboard.securityMsg + '</div>'
     154                                                html : '<div style="white-space:normal;width:340px;">' + lang.securityMsg + '</div>'
    135155                                        },
    136156                                        {
    137157                                                type : 'html',
    138158                                                id : 'pasteMsg',
    139                                                 html : '<div style="white-space:normal;width:340px;">'+editor.lang.clipboard.pasteMsg +'</div>'
     159                                                html : '<div style="white-space:normal;width:340px;">'+lang.pasteMsg +'</div>'
    140160                                        },
    141161                                        {
     
    143163                                                id : 'editing_area',
    144164                                                style : 'width: 100%; height: 100%;',
    145                                                 html : '<fieldset></fieldset>',
     165                                                html : '',
    146166                                                focus : function()
    147167                                                {
    148                                                         var div = this.getElement();
    149                                                         var iframe = div.getElementsByTag( 'iframe' );
    150                                                         if ( iframe.count() < 1 )
    151                                                                 return;
    152                                                         iframe = iframe.getItem( 0 );
     168                                                        var win = this.getInputElement().$.contentWindow,
     169                                                                 body = win && win.document.body;
    153170
    154171                                                        // #3291 : JAWS needs the 500ms delay to detect that the editor iframe
     
    157174                                                        setTimeout( function()
    158175                                                        {
    159                                                                 iframe.$.contentWindow.focus();
     176                                                                // Reactivate design mode for IE to make the cursor blinking.
     177                                                                CKEDITOR.env.ie && body && ( body.contentEditable = "true" );
     178                                                                win.focus();
    160179                                                        }, 500 );
    161180                                                }
  • CKEditor/branches/features/aria/_source/plugins/dialog/plugin.js

    r4955 r4957  
    286286                                focusList[ currentIndex ].select();
    287287                }
     288               
     289                this.changeFocus = changeFocus;
    288290
    289291                var processed;
     
    836838                        page.setAttribute( 'role', 'tabpanel' );
    837839
    838                         var env = CKEDITOR.env; 
     840                        var env = CKEDITOR.env;
    839841                        var tabId = contents.id + '_' + CKEDITOR.tools.getNextNumber(),
    840842                                 tab = CKEDITOR.dom.element.createFromHtml( [
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy