置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

萌娘百科:魔改

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索

一些需要魔改的地方:

  1. MW自带的Sanitizer/StylePropertySanitizer.php需要允许transform属性中使用perspective(...)Template:Hovers/hover.cssTemplate:原神/style.css会用到。完成
  2. ContributionScores插件的ContributionScores.php的第79行的$parser->mStripState改成$parser->getStripState()。出错原因是MW的parser的mStripState变成私有变量了,要用getter获取。
  3. 高版本MW中,部分HTML源代码的<div>标签改为<nav>,这导致了一部分萌百的全站CSS和小工具失效:
    • 短连接小工具出现样式错误,原因在于Vector皮肤左侧的工具栏应用了此更改,子项目标题也从<h3></h3>改为了<label><span></span></label>。调整方法见Special:差异/217678/217682
    • Vector皮肤右上角用户菜单背景颜色失效、且用户名左侧会出现一个“”图标,调整方法见Special:差异/200996/217766
    • 清除缓存按钮小工具无法使用,原因是右上角用户菜单的HTML源代码中多嵌套了一级<div>,调整方法见Special:差异/150175/217742
  4. 1.38下小工具新增actions参数,可以判断当前页面的操作决定是否加载小工具。目前已经给5个小工具实装了actions参数,MediaWiki:Gadget-edit.js由于对编辑摘要快速插入增加了新功能,action相关if判断已经去除。
  5. Widget如果同时依赖jQuery和mw的库,可以搬运至Gadget用(大力出奇迹)
    • 把script标签内的代码转移至MediaWiki:Gadget-xxx.js。但是Gadget只支持ES5,你可以在Widget里看见Promise异步和const、let,所以代码需要经过以下处理:
      • 把代码中的所有async转换为then之类的函数,当然你也可以转换为setTimeout。
      • 把代码中的$.ready删掉,MW对于mw空间内的js默认加载mediawiki.base和jQuery。此外,所有await mw.loader.using(...)也要删掉。括号中的内容是它的依赖,记住有哪些。
      • 把代码放进这个转换网站,左边勾选babel(6)和es2015,然后点transform。请使用这个转换网站,配置选es5。
      • 把转换后的代码复制粘贴到MediaWiki:Gadget-xxx.js并保存。
    • 修改MediaWiki:Gadgets-definition。添加新的小工具。默认开启并隐藏。此外,之前的依赖要填进ResourceLoader。如果js代码包含$,说明jQuery也是一个依赖。
    • Special:小工具中查看并创建对应的系统信息(“添加说明”)。
    • style标签无需迁移。如果想,也可以放进css。
  6. 无法关闭评论区。这是因为Flowthread和高版本MW不适配。见这个issue
  7. 从mediawiki1.32开始,ResourceLoader.php中Widget常用的RLQ接口新增了一个方法,来调用需要在代码执行前加载的js库:
public static function makeInlineCodeWithModule( $modules, $script ) {
	// Adds an array to lazy-created RLQ
	return '(RLQ=window.RLQ||[]).push(['
		. self::encodeJsonForScript( $modules ) . ','
		. 'function(){' . trim( $script ) . '}'
		. ']);';
}

对应的Widget代码可以是:

window.RLQ = window.RLQ || [];
window.RLQ.push([module||["module1","module2",……"moduleN"],function(){
	……
}]);

从1.34+开始,jQuery因为加载顺序原因需要这种方法进行调用,使用mw.loader.using调用的不少模块也需要写入此处。