X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fbutton%2Fplugin.js;h=c0c8208b5c2a1c80cc7e2a46faec4a7eefd4c56c;hb=614511639979907ceb0da3614122a4d8eb963ad4;hp=b1dca98038cc122135b09fe8143728c08842032f;hpb=941b0a9ba4e673e292510d80a5a86806994b8ea6;p=ckeditor.git
diff --git a/_source/plugins/button/plugin.js b/_source/plugins/button/plugin.js
index b1dca98..c0c8208 100644
--- a/_source/plugins/button/plugin.js
+++ b/_source/plugins/button/plugin.js
@@ -69,9 +69,13 @@ CKEDITOR.ui.button.prototype =
*/
render : function( editor, output )
{
- var env = CKEDITOR.env;
+ var env = CKEDITOR.env,
+ id = this._.id = CKEDITOR.tools.getNextId(),
+ classes = '',
+ command = this.command, // Get the command name.
+ clickFn,
+ index;
- var id = this._.id = 'cke_' + CKEDITOR.tools.getNextNumber();
this._.editor = editor;
var instance =
@@ -90,20 +94,26 @@ CKEDITOR.ui.button.prototype =
}
};
- var clickFn = CKEDITOR.tools.addFunction( instance.execute, instance );
+ instance.clickFn = clickFn = CKEDITOR.tools.addFunction( instance.execute, instance );
- var index = CKEDITOR.ui.button._.instances.push( instance ) - 1;
-
- var classes = '';
-
- // Get the command name.
- var command = this.command;
+ instance.index = index = CKEDITOR.ui.button._.instances.push( instance ) - 1;
+ // Indicate a mode sensitive button.
if ( this.modes )
{
+ var modeStates = {};
+ editor.on( 'beforeModeUnload', function()
+ {
+ modeStates[ editor.mode ] = this._.state;
+ }, this );
+
editor.on( 'mode', function()
{
- this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
+ var mode = editor.mode;
+ // Restore saved button state.
+ this.setState( this.modes[ mode ] ?
+ modeStates[ mode ] != undefined ? modeStates[ mode ] :
+ CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
}, this);
}
else if ( command )
@@ -134,10 +144,14 @@ CKEDITOR.ui.button.prototype =
output.push(
'',
'= 10900 && !env.hc ? '' : '" href="javascript:void(\''+ ( this.title || '' ).replace( "'", '' )+ '\')"',
' title="', this.title, '"' +
' tabindex="-1"' +
- ' hidefocus="true"' );
+ ' hidefocus="true"' +
+ ' role="button"' +
+ ' aria-labelledby="' + id + '_label"' +
+ ( this.hasArrow ? ' aria-haspopup="true"' : '' ) );
// Some browsers don't cancel key events in the keydown but in the
// keypress.
@@ -169,13 +183,16 @@ CKEDITOR.ui.button.prototype =
}
output.push(
- '>' +
- '', this.label, '' );
+ '> ' +
+ '', this.label, '' );
if ( this.hasArrow )
{
output.push(
- '' );
+ ''
+ // BLACK DOWN-POINTING TRIANGLE
+ + ( CKEDITOR.env.hc ? '▼' : ' ' )
+ + '' );
}
output.push(
@@ -191,25 +208,27 @@ CKEDITOR.ui.button.prototype =
setState : function( state )
{
if ( this._.state == state )
- return;
+ return false;
+
+ this._.state = state;
var element = CKEDITOR.document.getById( this._.id );
if ( element )
{
element.setState( state );
+ state == CKEDITOR.TRISTATE_DISABLED ?
+ element.setAttribute( 'aria-disabled', true ) :
+ element.removeAttribute( 'aria-disabled' );
- var htmlTitle = this.title,
- unavailable = this._.editor.lang.common.unavailable,
- labelElement = element.getChild( 1 );
+ state == CKEDITOR.TRISTATE_ON ?
+ element.setAttribute( 'aria-pressed', true ) :
+ element.removeAttribute( 'aria-pressed' );
- if ( state == CKEDITOR.TRISTATE_DISABLED )
- htmlTitle = unavailable.replace( '%1', this.title );
-
- labelElement.setHtml( htmlTitle );
+ return true;
}
-
- this._.state = state;
+ else
+ return false;
}
};
@@ -262,3 +281,8 @@ CKEDITOR.ui.prototype.addButton = function( name, definition )
{
this.add( name, CKEDITOR.UI_BUTTON, definition );
};
+
+CKEDITOR.on( 'reset', function()
+ {
+ CKEDITOR.ui.button._.instances = [];
+ });