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
PHP

<?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',
];
}
}