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
71 lines
1.4 KiB
PHP
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 );
|
|
}
|
|
}
|
|
}
|