Avoid duplicate accesskey hints on OOUI widgets

Values returned by `Linker::tooltipAndAccesskeyAttribs()` and
`Linker::titleAttrib( ..., 'withaccess' )` include an accesskey
hint in the title text. This is unnecessary when used for OOjs UI
widgets, since after the changes from T168408 they display an
accesskey hint automatically.

Also fixed some other accesskey bugs in HTMLForm which probably
no one ever ran into.

Bug: T168408
Change-Id: I63285b5bce3341875a6d82eba059623bf105ca62
This commit is contained in:
Bartosz Dziewoński 2017-06-22 21:30:03 +02:00 committed by Jforrester
parent 58c66f541a
commit 8c1a1a62a1
7 changed files with 45 additions and 16 deletions

View file

@ -3076,7 +3076,7 @@ class EditPage {
'tabindex' => 1,
'size' => 60,
'spellcheck' => 'true',
] + Linker::tooltipAndAccesskeyAttribs( 'summary' );
];
}
/**
@ -3097,6 +3097,7 @@ class EditPage {
$inputAttrs = null, $spanLabelAttrs = null
) {
$inputAttrs = $this->getSummaryInputAttributes( $inputAttrs );
$inputAttrs += Linker::tooltipAndAccesskeyAttribs( 'summary' );
$spanLabelAttrs = ( is_array( $spanLabelAttrs ) ? $spanLabelAttrs : [] ) + [
'class' => $this->missingSummary ? 'mw-summarymissed' : 'mw-summary',
@ -3132,6 +3133,10 @@ class EditPage {
$inputAttrs = OOUI\Element::configFromHtmlAttributes(
$this->getSummaryInputAttributes( $inputAttrs )
);
$inputAttrs += [
'title' => Linker::titleAttrib( 'summary' ),
'accessKey' => Linker::accesskey( 'summary' ),
];
// For compatibility with old scripts and extensions, we want the legacy 'id' on the `<input>`
$inputAttrs['inputId'] = $inputAttrs['id'];
@ -4277,7 +4282,7 @@ HTML
$accesskey = null;
if ( isset( $options['tooltip'] ) ) {
$accesskey = $this->context->msg( "accesskey-{$options['tooltip']}" )->text();
$title = Linker::titleAttrib( $options['tooltip'], 'withaccess' );
$title = Linker::titleAttrib( $options['tooltip'] );
}
if ( isset( $options['title-message'] ) ) {
$title = $this->context->msg( $options['title-message'] )->text();
@ -4355,8 +4360,7 @@ HTML
$attribs = [
'name' => 'wpSave',
'tabindex' => ++$tabindex,
] + Linker::tooltipAndAccesskeyAttribs( 'save' );
];
if ( $this->oouiEnabled ) {
$saveConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
$buttons['save'] = new OOUI\ButtonInputWidget( [
@ -4368,11 +4372,13 @@ HTML
'label' => $buttonLabel,
'infusable' => true,
'type' => 'submit',
'title' => Linker::titleAttrib( 'save' ),
'accessKey' => Linker::accesskey( 'save' ),
] + $saveConfig );
} else {
$buttons['save'] = Html::submitButton(
$buttonLabel,
$attribs + [ 'id' => 'wpSave' ],
$attribs + Linker::tooltipAndAccesskeyAttribs( 'save' ) + [ 'id' => 'wpSave' ],
[ 'mw-ui-progressive' ]
);
}
@ -4380,7 +4386,7 @@ HTML
$attribs = [
'name' => 'wpPreview',
'tabindex' => ++$tabindex,
] + Linker::tooltipAndAccesskeyAttribs( 'preview' );
];
if ( $this->oouiEnabled ) {
$previewConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
$buttons['preview'] = new OOUI\ButtonInputWidget( [
@ -4390,18 +4396,20 @@ HTML
'useInputTag' => true,
'label' => $this->context->msg( 'showpreview' )->text(),
'infusable' => true,
'type' => 'submit'
'type' => 'submit',
'title' => Linker::titleAttrib( 'preview' ),
'accessKey' => Linker::accesskey( 'preview' ),
] + $previewConfig );
} else {
$buttons['preview'] = Html::submitButton(
$this->context->msg( 'showpreview' )->text(),
$attribs + [ 'id' => 'wpPreview' ]
$attribs + Linker::tooltipAndAccesskeyAttribs( 'preview' ) + [ 'id' => 'wpPreview' ]
);
}
$attribs = [
'name' => 'wpDiff',
'tabindex' => ++$tabindex,
] + Linker::tooltipAndAccesskeyAttribs( 'diff' );
];
if ( $this->oouiEnabled ) {
$diffConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
$buttons['diff'] = new OOUI\ButtonInputWidget( [
@ -4412,11 +4420,13 @@ HTML
'label' => $this->context->msg( 'showdiff' )->text(),
'infusable' => true,
'type' => 'submit',
'title' => Linker::titleAttrib( 'diff' ),
'accessKey' => Linker::accesskey( 'diff' ),
] + $diffConfig );
} else {
$buttons['diff'] = Html::submitButton(
$this->context->msg( 'showdiff' )->text(),
$attribs + [ 'id' => 'wpDiff' ]
$attribs + Linker::tooltipAndAccesskeyAttribs( 'diff' ) + [ 'id' => 'wpDiff' ]
);
}

View file

@ -976,7 +976,7 @@ abstract class HTMLFormField {
}
/**
* Returns the attributes required for the tooltip and accesskey.
* Returns the attributes required for the tooltip and accesskey, for Html::element() etc.
*
* @return array Attributes
*/
@ -988,6 +988,22 @@ abstract class HTMLFormField {
return Linker::tooltipAndAccesskeyAttribs( $this->mParams['tooltip'] );
}
/**
* Returns the attributes required for the tooltip and accesskey, for OOUI widgets' config.
*
* @return array Attributes
*/
public function getTooltipAndAccessKeyOOUI() {
if ( empty( $this->mParams['tooltip'] ) ) {
return [];
}
return [
'title' => Linker::titleAttrib( $this->mParams['tooltip'] ),
'accessKey' => Linker::accesskey( $this->mParams['tooltip'] ),
];
}
/**
* Returns the given attributes from the parameters
*

View file

@ -66,7 +66,10 @@ class OOUIHTMLForm extends HTMLForm {
}
if ( isset( $this->mSubmitTooltip ) ) {
$attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
$attribs += [
'title' => Linker::titleAttrib( $this->mSubmitTooltip ),
'accessKey' => Linker::accesskey( $this->mSubmitTooltip ),
];
}
$attribs['classes'] = [ 'mw-htmlform-submit' ];

View file

@ -52,7 +52,7 @@ class HTMLCheckField extends HTMLFormField {
$value = !$value;
}
$attr = $this->getTooltipAndAccessKey();
$attr = $this->getTooltipAndAccessKeyOOUI();
$attr['id'] = $this->mID;
$attr['name'] = $this->mName;

View file

@ -142,7 +142,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
public function getInputOOUI( $value ) {
$this->mParent->getOutput()->addModules( 'oojs-ui-widgets' );
$attr = $this->getTooltipAndAccessKey();
$attr = [];
$attr['id'] = $this->mID;
$attr['name'] = "{$this->mName}[]";

View file

@ -71,7 +71,7 @@ class HTMLTextAreaField extends HTMLFormField {
throw new Exception( "OOUIHTMLForm does not support the 'cols' parameter for textareas" );
}
$attribs = $this->getTooltipAndAccessKey();
$attribs = $this->getTooltipAndAccessKeyOOUI();
if ( $this->mClass !== '' ) {
$attribs['classes'] = [ $this->mClass ];

View file

@ -140,7 +140,7 @@ class HTMLTextField extends HTMLFormField {
$value = '';
}
$attribs = $this->getTooltipAndAccessKey();
$attribs = $this->getTooltipAndAccessKeyOOUI();
if ( $this->mClass !== '' ) {
$attribs['classes'] = [ $this->mClass ];