Changeset 4939


Ignore:
Timestamp:
01/18/10 12:22:45 (5 years ago)
Author:
garry.yao
Message:

Better perception of the editing iframe on IE6/IE7/FF2.

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

Legend:

Unmodified
Added
Removed
  • CKEditor/branches/features/aria/_source/plugins/accessibility/plugin.js

    r4935 r4939  
    1414        // List of in-use ARIA roles and states.  
    1515        var roles = [ 'role' ], 
     16                 // List of roles that role type should not be announced. 
     17                 silentRoles = { 'region' : 1 }, 
    1618                 states = [ 'label', 'labelledby', 'describedby', 'multiline' ], 
    1719                 length = Math.max( roles.length, states.length ); 
    18  
    1920 
    2021        function lookupARIASupport( role, tagName ) 
    2122        { 
    2223                return { 
    23                         // Only Firefox3 support the "dialog" role. 
    2424                        'dialog' :       env.gecko && CKEDITOR.env.version >= 10900, 
    25                         // IE doesn't support editing iframe as region. 
    26                         'region' : env.gecko || ( env.ie && tagName != 'iframe' ) 
     25                        'region' : env.gecko && CKEDITOR.env.version >= 10900 
    2726                }[ role ]; 
    2827        } 
     
    3130         *  Bring degradeable substitution to standard ARIA widgets.   
    3231         * @param element 
    33          * @param isOffline 
    3432         */ 
    35         function degradeARIA( element, isOffline ) 
     33        function degradeARIA( element, editor ) 
    3634        { 
    3735                // Save the interested ARIA attributes first. 
     
    4745                         labelText = element.getAttribute( 'aria-label' ) || ( attrValue = element.getAttribute( 'aria-labelledby' ) ) && doc.getById( attrValue ).getText() || '', 
    4846                         descriptionText = ( attrValue = element.getAttribute( 'aria-describedby' ) ) && doc.getById( attrValue ).getText() || '', 
    49                          legend = [ labelText, role, descriptionText ].join( ' ' ); 
     47                         allInOne = [ labelText, role in silentRoles ? '' : role, descriptionText ].join( ' ' ); 
    5048 
    5149                // Remove all ARIA attributes on the widget that could 
     
    5755                } 
    5856 
    59                 // Translate by wrapping with a form field legend that contains all ARIA 
    60                 // attributes which leads to be announced by ATs. 
    61                 var fieldset = CKEDITOR.dom.element.createFromHtml( 
    62                                 '<fieldset class="cke_voicelabel_invisible">' + 
    63                                         '<legend class="cke_voicelabel_invisible">' + 
    64                                                 CKEDITOR.tools.htmlEncode( legend ) + 
    65                                         '</legend>' + 
    66                                 '</fieldset>', doc ); 
     57                // Translate 'dialog' role by wrapping all containing form fields with a legend that composed of all ARIA 
     58                // attributes of the dialog which leads to be announced by ATs. 
     59                if( role == 'dialog' ) 
     60                { 
     61                        var fieldset = CKEDITOR.dom.element.createFromHtml( 
     62                                        '<fieldset class="cke_voicelabel_invisible">' + 
     63                                                '<legend class="cke_voicelabel_invisible">' + 
     64                                                        CKEDITOR.tools.htmlEncode( allInOne ) + 
     65                                                '</legend>' + 
     66                                        '</fieldset>', doc ); 
    6767 
    68                 if( !isOffline ) 
    69                 { 
    7068                        var parent; 
    7169                        while( ( parent = element.getParent() ) && !parent.getDtd()[ fieldset.getName() ] ) 
    7270                                element = parent; 
    7371                        fieldset.insertBefore( element ); 
     72                        fieldset.append( element ); 
     73                        return fieldset; 
    7474                } 
    75  
    76                 fieldset.append( element ); 
    77                 return fieldset; 
     75                // The only reliable substitution of aria-label on an iframe 
     76                // is to use the content window title of that frame. 
     77                else if ( element.is( 'iframe' ) ) 
     78                { 
     79                        // We can only occupy the title when editor is not in full-page mode. 
     80                        !editor.config.fullPage && 
     81                                ( element.$.contentWindow.document.title = allInOne ); 
     82                } 
    7883        } 
    7984 
     
    8489                        editor.on( 'ariaWidget', function( evt ) 
    8590                        { 
    86                                 var data = evt.data, 
    87                                         widget = data.element, 
    88                                          widgetIsOffline = !data.replace; 
    89                                 data.element = degradeARIA( widget, widgetIsOffline ); 
     91                                degradeARIA( evt.data, editor ); 
    9092                        } ); 
    9193                } 
  • CKEditor/branches/features/aria/_source/plugins/dialog/plugin.js

    r4926 r4939  
    152152                CKEDITOR.tools.setTimeout( function() 
    153153                { 
    154                         editor.fire( 'ariaWidget', { element : this.parts.contents, replace : true } ); 
     154                        editor.fire( 'ariaWidget', this.parts.contents ); 
    155155                }, 0, this ); 
    156156                 
  • CKEditor/branches/features/aria/_source/plugins/wysiwygarea/plugin.js

    r4932 r4939  
    275275                                                                '})())"' : '' ) + 
    276276                                                        ' tabIndex="-1"' + 
     277                                                        ' title=" wysiwgy mode"' + 
    277278                                                        ' allowTransparency="true"' + 
    278279                                                        ' role="region"' + 
     
    297298                                                } ); 
    298299 
    299                                                 mainElement.append( editor.fire( 'ariaWidget', { element : iframe } ).element ); 
     300                                                mainElement.append( iframe ); 
    300301                                        }; 
    301302 
     
    312313                                                if ( frameLoaded ) 
    313314                                                        return; 
    314  
    315315                                                frameLoaded = 1; 
     316 
     317                                                editor.fire( 'ariaWidget', iframe ); 
    316318 
    317319                                                var domDocument = domWindow.document, 
     
    612614                                                                                config.docType + 
    613615                                                                                '<html dir="' + config.contentsLangDirection + '">' + 
     616                                                                                '<title>' + frameLabel + '</title>' + 
    614617                                                                                '<head>' + 
    615618                                                                                        baseTag + 
    616619                                                                                        headExtra + 
    617                                                                                 '</head>' + 
     620                                                                                '</head>' +      
    618621                                                                                '<body' + ( config.bodyId ? ' id="' + config.bodyId + '"' : '' ) + 
    619622                                                                                                  ( config.bodyClass ? ' class="' + config.bodyClass + '"' : '' ) + 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy