Ticket #3224: 3224.patch
File 3224.patch, 9.6 KB (added by , 15 years ago) |
---|
-
_source/lang/en.js
31 31 * Screenreader titles. Please note that screenreaders are not always capable 32 32 * of reading non-English words. So be careful while translating it. 33 33 */ 34 editorTitle : 'Rich text editor, %1', 34 screenreader : 35 { 36 editorTitle : 'Rich text editor, %1', 37 dialogOpened : '%1 dialog opened. Press Insert+Escape to refresh screen contents.', 38 dialogClosed : '%1 dialog closed. Press Insert+Escape to refresh screen contents.' 39 }, 35 40 36 41 // Toolbar buttons without dialogs. 37 42 source : 'Source', -
_source/plugins/wysiwygarea/plugin.js
96 96 97 97 init : function( editor ) 98 98 { 99 var screenreader = editor.lang.screenreader; 100 99 101 editor.on( 'editingBlockReady', function() 100 102 { 101 103 var mainElement, … … 154 156 mainElement.setAttributes( 155 157 { 156 158 role : 'region', 157 title : editor.lang.editorTitle.replace( '%1', editor.name ) + '. Type in text.'159 title : screenreader.editorTitle.replace( '%1', editor.name ) + '. Type in text.' 158 160 } ); 159 161 iframe.setAttributes( 160 162 { … … 171 173 'top' : '-1000000px', 172 174 left : '-1000000px' 173 175 } ); 174 label.append( CKEDITOR.document.createText( editor.lang.editorTitle.replace( '%1', editor.name ) ) );176 label.append( CKEDITOR.document.createText( screenreader.editorTitle.replace( '%1', editor.name ) ) ); 175 177 label.insertBefore( iframe ); 176 178 } 177 179 }; -
_source/plugins/dialog/plugin.js
648 648 */ 649 649 hide : function() 650 650 { 651 this.fire( 'hide', {} ); 651 var hide = CKEDITOR.tools.bind( function() 652 { 653 this.fire( 'hide', {} ); 652 654 653 // Remove the dialog's element from the root document.654 var element = this._.element;655 if ( !element.getParent() )656 return;657 element.remove();655 // Remove the dialog's element from the root document. 656 var element = this._.element; 657 if ( !element.getParent() ) 658 return; 659 element.remove(); 658 660 659 // Unregister all access keys associated with this dialog.660 unregisterAccessKey( this );661 // Unregister all access keys associated with this dialog. 662 unregisterAccessKey( this ); 661 663 662 // Maintain dialog ordering and remove cover if needed. 663 if ( !this._.parentDialog ) 664 removeCover(); 665 else 666 { 667 var parentElement = this._.parentDialog.getElement().getFirst(); 668 parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); 669 } 670 CKEDITOR.dialog._.currentTop = this._.parentDialog; 664 // Maintain dialog ordering and remove cover if needed. 665 if ( !this._.parentDialog ) 666 removeCover(); 667 else 668 { 669 var parentElement = this._.parentDialog.getElement().getFirst(); 670 parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + 671 Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); 672 } 673 CKEDITOR.dialog._.currentTop = this._.parentDialog; 671 674 672 // Deduct or clear the z-index.673 if ( !this._.parentDialog )674 {675 CKEDITOR.dialog._.currentZIndex = null;675 // Deduct or clear the z-index. 676 if ( !this._.parentDialog ) 677 { 678 CKEDITOR.dialog._.currentZIndex = null; 676 679 677 // Remove access key handlers.678 CKEDITOR.document.removeListener( 'keydown', accessKeyDownHandler );679 CKEDITOR.document.removeListener( 'keyup', accessKeyUpHandler );680 // Remove access key handlers. 681 CKEDITOR.document.removeListener( 'keydown', accessKeyDownHandler ); 682 CKEDITOR.document.removeListener( 'keyup', accessKeyUpHandler ); 680 683 681 // Restore focus and (if not already restored) selection in the editing area.682 this.restoreSelection();683 this._.editor.focus();684 }685 else686 CKEDITOR.dialog._.currentZIndex -= 10;684 // Restore focus and (if not already restored) selection in the editing area. 685 this.restoreSelection(); 686 this._.editor.focus(); 687 } 688 else 689 CKEDITOR.dialog._.currentZIndex -= 10; 687 690 688 691 689 // Reset the initial values of the dialog. 690 this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } ); 692 // Reset the initial values of the dialog. 693 this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } ); 694 }, this ); 695 696 // If the screenreader plugin is loaded, then read a label before closing. 697 // Otherwise - just open the dialog right away. 698 if ( this._.editor.announce ) 699 this._.editor.announce( 'dialogClosed', hide, this.definition.title ); 700 else 701 hide(); 691 702 }, 692 703 693 704 /** … … 2606 2617 var dialog = storedDialogs[ dialogName ] || 2607 2618 ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); 2608 2619 2609 dialog.show(); 2620 // If the screenreader plugin is loaded, then read a label before opening. 2621 // Otherwise - just open the dialog right away. 2622 if ( this.announce ) 2623 { 2624 this.announce( 'dialogOpened', function() 2625 { 2626 dialog.show(); 2627 }, dialog.definition.title ); 2628 } 2629 else 2630 dialog.show(); 2610 2631 2611 2632 return dialog; 2612 2633 } -
_source/plugins/screenreader/plugin.js
1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 (function() 7 { 8 var screenreaderLabels = [ 'dialogOpened', 'dialogClosed' ]; 9 CKEDITOR.plugins.add( 'screenreader', 10 { 11 init : function( editor ) 12 { 13 var lang = editor.lang.screenreader; 14 editor._.screenreaderLabels = {}; 15 16 // Insert hidden links in the editor container for screenreader. 17 var cssPosition = CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed'; 18 for ( var i = 0 ; i < screenreaderLabels.length ; i++ ) 19 { 20 var link = editor._.screenreaderLabels[ screenreaderLabels[ i ] ] = 21 CKEDITOR.dom.element.createFromHtml( 22 [ 23 '<a style="position:', cssPosition, 24 ';width:1px;height:1px;left:-1000000px;right:-1000000px', 25 ';outline:none;background:transparent;overflow:hidden"', 26 ' hideFocus="true"', 27 ' href="javascript:void(0)">', 28 CKEDITOR.tools.htmlEncode( lang[ screenreaderLabels[ i ] ] ), 29 '</a>' 30 ].join( '' ), CKEDITOR.document ); 31 link.appendTo( CKEDITOR.document.getBody() ); 32 } 33 } 34 } ); 35 36 CKEDITOR.editor.prototype.announce = function( entryId, callback ) 37 { 38 var link = this._.screenreaderLabels[ entryId ]; 39 40 if ( !link ) 41 return; 42 43 // Prevent scrolling by moving the 1-pixel link to the top left of view pane. 44 if ( link.$.style.position == 'fixed' ) 45 link.setStyles( { left : '0px', top : '0px' } ); 46 else 47 { 48 var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); 49 link.setStyles( { left : scrollPosition.x + 'px', top : scrollPosition.y + 'px' } ); 50 } 51 52 // If there're more than 2 arguments, the 3rd, 4th, ... are used to substitue 53 // %1, %2, etc. 54 if ( arguments.length > 2 ) 55 { 56 var argList = []; 57 for ( var i = 2 ; i < arguments.length ; i++ ) 58 argList.push( arguments[ i ] ); 59 60 var str = this.lang.screenreader[ entryId ]; 61 str = str.replace( /%\d+/g, function( str ) 62 { 63 var index = parseInt( str.substr( 1 ), 10 ) - 1; 64 return argList[ index ]; 65 } ); 66 67 link.setHtml( CKEDITOR.tools.htmlEncode( str ) ); 68 } 69 70 // Put focus at the link so that JAWS will read it. 71 link.focus(); 72 73 // Execute the callback function after we're sure the text has been sent to 74 // JAWS. 75 setTimeout( function() 76 { 77 link.setStyles( { left : '-1000000px', top : '-1000000px' } ); 78 callback(); 79 }, 300 ); 80 }; 81 })(); -
_source/core/config.js
150 150 * config.plugins = 'basicstyles,button,htmldataprocessor,toolbar,wysiwygarea'; 151 151 */ 152 152 153 plugins : 'basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,s pecialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',153 plugins : 'basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,screenreader,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc', 154 154 155 155 /** 156 156 * The editor tabindex value.