wiki.techinc.nl/includes/widget/SpinnerWidget.php
Bartosz Dziewoński ccd423225f Add "implements Stringable" to every class with "function __toString()"
In PHP 8, but not in PHP 7.4, every class with a __toString() function
implicitly implements the Stringable interface. Therefore, the
behavior of checks like "instanceof Stringable" differs between these
PHP versions when such classes are involved. Make every such class
implement the interface so that the behavior will be consistent.

The PHP 7.4 fallback for the Stringable interface is provided by
symfony/polyfill-php80.

Change-Id: I3f0330c2555c7d3bf99b654ed3c0b0303e257ea1
2024-06-13 00:23:39 +00:00

71 lines
1.4 KiB
PHP

<?php
namespace MediaWiki\Widget;
use Exception;
use MediaWiki\Html\Html;
use Stringable;
/**
* PHP version of jquery.spinner.
*
* If used with jquery.spinner.styles, can be used to show a
* spinner before JavaScript has loaded.
*
* @copyright 2011-2020 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class SpinnerWidget implements Stringable {
private $attributes;
private $content;
/**
* @param array $config Configuration options
*/
public function __construct( array $config = [] ) {
$size = $config['size'] ?? 'small';
$type = $config['type'] ?? 'inline';
$this->attributes = [];
if ( isset( $config['id'] ) ) {
$this->attributes['id'] = $config['id'];
}
// Initialization
$this->attributes['class'] = [
'mw-spinner',
$size === 'small' ? 'mw-spinner-small' : 'mw-spinner-large',
$type === 'inline' ? 'mw-spinner-inline' : 'mw-spinner-block',
];
$this->content =
'<div class="mw-spinner-container">' .
str_repeat( '<div></div>', 12 ) .
'</div>';
}
/**
* Render element into HTML.
* @return string HTML serialization
*/
public function toString() {
return Html::rawElement( 'div', $this->attributes, $this->content );
}
/**
* Magic method implementation.
*
* Copied from OOUI\Tag
*
* @return string
*/
public function __toString() {
try {
return $this->toString();
} catch ( Exception $ex ) {
trigger_error( (string)$ex, E_USER_ERROR );
}
}
}