%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/php/widgets/ |
| Current File : //www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php |
<?php
namespace OOUI;
/**
* Generic widget for buttons.
*/
class ButtonWidget extends Widget {
use ButtonElement;
use IconElement;
use IndicatorElement;
use LabelElement;
use TitledElement;
use FlaggedElement;
use TabIndexedElement;
use AccessKeyedElement;
/* Static Properties */
public static $tagName = 'span';
/* Properties */
/**
* Whether button is active.
*
* @var boolean
*/
protected $active = false;
/**
* Hyperlink to visit when clicked.
*
* @var string
*/
protected $href = null;
/**
* Target to open hyperlink in.
*
* @var string
*/
protected $target = null;
/**
* Search engine traversal hint.
*
* True if search engines should avoid following this hyperlink.
*
* @var boolean
*/
protected $noFollow = true;
/**
* @param array $config Configuration options
* @param bool $config['active'] Whether button should be shown as active (default: false)
* @param string $config['href'] Hyperlink to visit when clicked
* @param string $config['target'] Target to open hyperlink in
* @param bool $config['noFollow'] Search engine traversal hint (default: true)
* @param-taint $config escapes_html
*/
public function __construct( array $config = [] ) {
// Parent constructor
parent::__construct( $config );
// Traits
$this->initializeButtonElement( $config );
$this->initializeIconElement( $config );
$this->initializeIndicatorElement( $config );
$this->initializeLabelElement( $config );
$this->initializeTitledElement(
array_merge( $config, [ 'titled' => $this->button ] ) );
$this->initializeFlaggedElement( $config );
$this->initializeTabIndexedElement(
array_merge( $config, [ 'tabIndexed' => $this->button ] ) );
$this->initializeAccessKeyedElement(
array_merge( $config, [ 'accessKeyed' => $this->button ] ) );
// Initialization
$this->button->appendContent( $this->icon, $this->label, $this->indicator );
$this
->addClasses( [ 'oo-ui-buttonWidget' ] )
->appendContent( $this->button );
$this->setActive( $config['active'] ?? false );
$this->setHref( $config['href'] ?? null );
$this->setTarget( $config['target'] ?? null );
$this->setNoFollow( $config['noFollow'] ?? true );
}
/**
* Get hyperlink location.
*
* @return string Hyperlink location
*/
public function getHref() {
return $this->href;
}
/**
* Get hyperlink target.
*
* @return string Hyperlink target
*/
public function getTarget() {
return $this->target;
}
/**
* Get search engine traversal hint.
*
* @return bool Whether search engines should avoid traversing this hyperlink
*/
public function getNoFollow() {
return $this->noFollow;
}
/**
* Set hyperlink location.
*
* @param string|null $href Hyperlink location, null to remove
* @return $this
*/
public function setHref( $href ) {
$this->href = is_string( $href ) ? $href : null;
$this->updateHref();
return $this;
}
/**
* Update the href attribute, in case of changes to href or disabled
* state.
*
* @return $this
*/
public function updateHref() {
if ( $this->href !== null && !$this->isDisabled() ) {
$this->button->setAttributes( [ 'href' => $this->href ] );
} else {
$this->button->removeAttributes( [ 'href' ] );
}
return $this;
}
/**
* Set hyperlink target.
*
* @param string|null $target Hyperlink target, null to remove
* @return $this
*/
public function setTarget( $target ) {
$this->target = is_string( $target ) ? $target : null;
if ( $this->target !== null ) {
$this->button->setAttributes( [ 'target' => $target ] );
} else {
$this->button->removeAttributes( [ 'target' ] );
}
return $this;
}
/**
* Set search engine traversal hint.
*
* @param bool $noFollow True if search engines should avoid traversing this hyperlink
* @return $this
*/
public function setNoFollow( $noFollow ) {
$this->noFollow = is_bool( $noFollow ) ? $noFollow : true;
if ( $this->noFollow ) {
$this->button->setAttributes( [ 'rel' => 'nofollow' ] );
} else {
$this->button->removeAttributes( [ 'rel' ] );
}
return $this;
}
/**
* Toggle active state.
*
* A button should be marked as active when clicking it would only refresh the page.
*
* @param bool|null $active Make button active
* @return $this
*/
public function setActive( $active = null ) {
$this->active = !!$active;
$this->toggleClasses( [ 'oo-ui-buttonElement-active' ], $this->active );
return $this;
}
/**
* Check if button is active.
*
* @return bool Button is active
*/
public function isActive() {
return $this->active;
}
public function getConfig( &$config ) {
if ( $this->active !== false ) {
$config['active'] = $this->active;
}
if ( $this->href !== null ) {
$config['href'] = $this->href;
}
if ( $this->target !== null ) {
$config['target'] = $this->target;
}
if ( $this->noFollow !== true ) {
$config['noFollow'] = $this->noFollow;
}
return parent::getConfig( $config );
}
}