Page MenuHomeWickedGov Phorge

Popup.php
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

Popup.php

<?php
namespace MediaWiki\Extension\Math\Rest;
use MediaWiki\Extension\Math\MathWikibaseConnector;
use MediaWiki\Extension\Math\MathWikibaseInfo;
use MediaWiki\Html\Html;
use MediaWiki\Languages\LanguageFactory;
use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\Rest\Response;
use MediaWiki\Rest\SimpleHandler;
use MediaWiki\Title\Title;
use MediaWiki\Title\TitleFactory;
use Wikimedia\ParamValidator\ParamValidator;
class Popup extends SimpleHandler {
/** @var MathWikibaseConnector */
private $wikibase;
/** @var LanguageFactory */
private $languageFactory;
/** @var LanguageNameUtils */
private $languageNameUtils;
/** @var Title|null */
private $specialPageTitle;
/**
* @param MathWikibaseConnector $wikibase
* @param LanguageFactory $languageFactory
* @param LanguageNameUtils $languageNameUtils
* @param TitleFactory $titleFactory
*/
public function __construct(
MathWikibaseConnector $wikibase,
LanguageFactory $languageFactory,
LanguageNameUtils $languageNameUtils,
TitleFactory $titleFactory
) {
$this->wikibase = $wikibase;
$this->languageFactory = $languageFactory;
$this->languageNameUtils = $languageNameUtils;
$this->specialPageTitle = $titleFactory->newFromText( 'Special:MathWikibase' );
}
public function run( int $qid ): Response {
$uselang = $this->getRequest()->getHeaderLine( 'Accept-Language' );
if ( $uselang === '' ) {
$uselang = 'en';
}
$rf = $this->getResponseFactory();
if ( $this->languageNameUtils->isValidCode( $uselang ) ) {
$langObj = $this->languageFactory->getLanguage( $uselang );
} else {
return $rf->createHttpError( 400, [ 'message' => 'Invalid language code.' ] );
}
try {
$info = $this->wikibase->fetchWikibaseFromId( "Q{$qid}", $uselang );
} catch ( \InvalidArgumentException $exception ) {
return $rf->createHttpError( 400, [ 'message' => $exception->getMessage() ] );
}
$html = $this->buildHTMLRepresentation( $info );
$response = [
'title' => $info->getLabel(),
'contentmodel' => 'html',
'pagelanguagedir' => $langObj->getDir(),
'pagelanguage' => $langObj->getCode(),
'pagelanguagehtmlcode' => $langObj->getHtmlCode(),
'extract' => $html
];
if ( $this->specialPageTitle ) {
$response = array_merge( $response, [
'canonicalurl' => $this->specialPageTitle->getLocalURL( [ 'qid' => "Q{$qid}" ] ),
'fullurl' => $this->specialPageTitle->getFullURL( [ 'qid' => "Q{$qid}" ] )
] );
}
return $rf->createJson( $response );
}
/**
* Generates an HTML string from the given data.
* @param MathWikibaseInfo $info an info object generated by fetchWikibaseFromId
* @return string an HTML representation of the given info object
*/
private function buildHTMLRepresentation( MathWikibaseInfo $info ): string {
$output =
Html::openElement( "div",
[ "style" =>
"width: 100%; display: flex; flex-direction: column;
align-items: flex-start; flex-wrap: wrap;" ] );
$output .= Html::element( "span", [
"style" => "font-weight: bold; text-transform: capitalize;"
], $info->getLabel() );
$output .= Html::element( "span", [ "style" => "font-size: small" ], " (" . $info->getDescription() . ")" );
if ( $info->hasParts() ) {
$output .= Html::rawElement( "div",
[ "style" => "width: 100%; display: flex; justify-content: left; padding-top: 5px;" ],
$info->generateSmallTableOfParts() );
}
$output .= Html::closeElement( "div" );
return $output;
}
public function getParamSettings(): array {
return [
'qid' => [
self::PARAM_SOURCE => 'path',
ParamValidator::PARAM_TYPE => 'integer',
ParamValidator::PARAM_REQUIRED => true
]
];
}
}

File Metadata

Mime Type
text/x-php
Expires
Fri, Jul 3, 20:02 (1 d, 8 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
70/79/a4d87210df7154b66787ff4b0772
Default Alt Text
Popup.php (3 KB)

Event Timeline