置顶公告:【置顶】关于临时开启评论区所有功能的公告(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調用的不少模塊也需要寫入此處。