mediawiki-skins-Citizen/includes/Components/CitizenComponentLink.php

81 lines
1.8 KiB
PHP
Raw Normal View History

<?php
declare( strict_types=1 );
namespace MediaWiki\Skins\Citizen\Components;
/**
* TODO: Update to new classes when we move to MW 1.43
* - MediaWiki\Html\Html
* - MediaWiki\Linker\Linker
*/
use Html;
use Linker;
use MessageLocalizer;
/**
* CitizenComponentLink component
*/
class CitizenComponentLink implements CitizenComponent {
/** @var MessageLocalizer */
private $localizer;
/** @var string */
private $icon;
/** @var string */
private $href;
/** @var string */
private $text;
/** @var string */
private $accessKeyHint;
/**
* @param string $href
* @param string $text
* @param null|string $icon
* @param null|MessageLocalizer $localizer for generation of tooltip and access keys
* @param null|string $accessKeyHint will be used to derive HTML attributes such as title, accesskey
* and aria-label ("$accessKeyHint-label")
*/
public function __construct( string $href, string $text, $icon = null, $localizer = null, $accessKeyHint = null ) {
$this->href = $href;
$this->text = $text;
$this->icon = $icon;
$this->localizer = $localizer;
$this->accessKeyHint = $accessKeyHint;
}
/**
* @inheritDoc
*/
public function getTemplateData(): array {
$localizer = $this->localizer;
$accessKeyHint = $this->accessKeyHint;
$additionalAttributes = [];
if ( $localizer ) {
$msg = $localizer->msg( $accessKeyHint . '-label' );
if ( $msg->exists() ) {
$additionalAttributes[ 'aria-label' ] = $msg->text();
}
}
return [
'href' => $this->href,
'icon' => $this->icon,
'text' => $this->text,
'array-attributes' => [
[
'key' => 'href',
'value' => $this->href
]
],
'html-attributes' => $localizer && $accessKeyHint ? Html::expandAttributes(
Linker::tooltipAndAccesskeyAttribs(
$accessKeyHint,
[],
[],
$localizer
) + $additionalAttributes
) : '',
];
}
}