Changeset 4957


Ignore:
Timestamp:
01/20/10 10:46:23 (4 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy