You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
PHTML
76 lines
2.4 KiB
PHTML
3 years ago
|
<?php
|
||
|
namespace Isekai;
|
||
|
|
||
|
use MWNamespace;
|
||
|
use MediaWiki\MediaWikiServices;
|
||
|
use Title;
|
||
|
|
||
|
class BackgroundWidget {
|
||
|
public static function onParserSetup(&$parser){
|
||
|
$parser->setHook('background', self::class . '::onCreateBackgroundWidget');
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static function onCreateBackgroundWidget($text, array $args, \Parser $parser, \PPFrame $frame){
|
||
|
/** @var \ParserOutput */
|
||
|
$output = $parser->getOutput();
|
||
|
|
||
|
$output->addModules('ext.isekai.backgroundWidget');
|
||
|
|
||
|
$allowKeys = ['src', 'xcenter', 'ycenter'];
|
||
|
|
||
|
$args = array_filter($args, function($key) use($allowKeys){
|
||
|
return in_array($key, $allowKeys);
|
||
|
}, ARRAY_FILTER_USE_KEY);
|
||
|
|
||
|
foreach($args as $key => $one){
|
||
|
$args[$key] = $parser->recursiveTagParse($one, $frame);
|
||
|
|
||
|
if($key == 'xcenter' || $key == 'ycenter'){
|
||
|
$args[$key] = intval($args[$key]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(isset($args['src'])){
|
||
|
if(preg_match('/<img.*[^>]src="(?<file>.*?)"/' , $args['src'], $matches)
|
||
|
&& isset($matches['file'])){
|
||
|
$args['src'] = $matches['file'];
|
||
|
}
|
||
|
$output->addJsConfigVars('isekaiBackgroundWidgetData', $args);
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
public static function addModules(\OutputPage $output){
|
||
|
if(in_array('ext.isekai.backgroundWidget', $output->getModules())){
|
||
|
//$output->addBodyClasses('has-bgimg');
|
||
|
|
||
|
switch(strtolower($output->getSkin()->getSkinName())){
|
||
|
case 'timeless':
|
||
|
$output->addModules('ext.isekai.backgroundWidget-timeless');
|
||
|
break;
|
||
|
case 'minerva':
|
||
|
$output->addModules('ext.isekai.backgroundWidget-minerva');
|
||
|
break;
|
||
|
case 'vector':
|
||
|
$output->addModules('ext.isekai.backgroundWidget-vector');
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function onGetPreferences(\User $user, array &$preferences){
|
||
|
$preferences['isekai-bgimg-visible-desktop'] = [
|
||
|
'type' => 'toggle',
|
||
|
'label-message' => 'isekai-perfs-bgimg-visible-desktop',
|
||
|
'section' => 'rendering/isekai-bgimg',
|
||
|
];
|
||
|
|
||
|
$preferences['isekai-bgimg-visible-mobile'] = [
|
||
|
'type' => 'toggle',
|
||
|
'label-message' => 'isekai-perfs-bgimg-visible-mobile',
|
||
|
'section' => 'rendering/isekai-bgimg',
|
||
|
];
|
||
|
}
|
||
|
}
|