mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-12-01 09:16:34 +00:00
6905b85d67
The Group shouldn't depend upon concrete MenuEntry definition. Different Menus can present different MenuElements. Code should allow easy extensions, not limit only to single MenuEntry definition. Changes: - introduced IMenuEntry interface - MenuEntry implements IMenuEntry - removed isJSOnly from logic as it's related only to one menu element (Watchstar) and Group shouldn't be aware of some special handling for some elements. The IMenuEntry shouldn't define this method - getName, getComponents, getCSSClasses should have defined return types Bug: 1221792 Change-Id: I0646df734e869c26bfa8c3a772200e8258a8acce
88 lines
2.1 KiB
PHP
88 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
namespace MediaWiki\Minerva\Menu;
|
|
|
|
/**
|
|
* Model for a menu entry.
|
|
*/
|
|
class MenuEntry implements IMenuEntry {
|
|
private $name;
|
|
private $isJSOnly;
|
|
private $components;
|
|
|
|
/**
|
|
* @param string $name
|
|
* @param bool $isJSOnly Whether the entry works without JS
|
|
*/
|
|
public function __construct( $name, $isJSOnly ) {
|
|
$this->name = $name;
|
|
$this->isJSOnly = $isJSOnly;
|
|
$this->components = [];
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getName() {
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* Return the CSS classes applied to the Menu element
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getCSSClasses(): array {
|
|
$classes = [];
|
|
if ( $this->isJSOnly ) {
|
|
$classes[] = 'jsonly';
|
|
}
|
|
return $classes;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getComponents(): array {
|
|
return $this->components;
|
|
}
|
|
|
|
/**
|
|
* Add a link to the entry.
|
|
*
|
|
* An entry can have zero or more links.
|
|
*
|
|
* @param string $label
|
|
* @param string $url
|
|
* @param string $className Any additional CSS classes that should added to the output,
|
|
* separated by spaces
|
|
* @param array $attrs Additional data that can be associated with the component
|
|
*
|
|
* @return MenuEntry
|
|
*/
|
|
public function addComponent( $label, $url, $className = '', $attrs = [] ) {
|
|
$this->components[] = [
|
|
'text' => $label,
|
|
'href' => $url,
|
|
'class' => $className,
|
|
] + $attrs;
|
|
|
|
return $this;
|
|
}
|
|
}
|