wikimedia/mediawiki-core

View on GitHub
includes/widget/SpinnerWidget.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace MediaWiki\Widget;

use Exception;
use MediaWiki\Html\Html;

/**
 * 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 {

    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 );
        }
    }
}