LLWiki正在建設中,歡迎加入我們

「LLWiki:管理员技术手册」修訂間的差異

出自LLWiki
跳至導覽 跳至搜尋
(使用页面/文本对比查看器快速编辑)
(使用页面/文本对比查看器快速编辑)
標籤行動版網頁編輯 行動版編輯
第1行: 第1行:
{{内容缺失}}{{目录折叠}}
{{内容缺失}}
由于LLWiki使用的不是最新版本的MediaWiki系统以及MediaWiki的帮助页面可能未得到及时和正确的更新,进行这个页面的编辑时请不要简单地复制或翻译来自MediaWiki的内容,应该在条件允许的情况下先进行实际测试。
{{目录折叠}}
==全站CSS==
==全站CSS==
这里所说的全站CSS包含[[mediawiki:common.css|common.css]]、[[mediawiki:mobile.css|mobile.css]]和各[[:category:CSS小工具|CSS小工具]],有时由于功能的相似性也会涉及用户CSS([[special:mypage/common.css|common.css]]、[[special:mypage/vector.css|vector.css]]和[[special:mypage/minerva.css|minerva.css]])。LLWiki暂时没有建立针对不同用户组的专门CSS页面。
===优先加载的CSS===
===优先加载的CSS===
一些CSS的加载会先于首次渲染,包括[[mediawiki:common.css|common.css]]和各[[:category:纯CSS小工具|纯CSS小工具]],这些CSS页面适合处理静态HTML元素就需要的样式。注意[[:category:纯CSS小工具|纯CSS小工具]]即使在定义时规定了<code>targets=mobile</code>也一定会在桌面版加载,因此手机版的专用CSS需要添加<code lang="css">.skin-minerva</code>选择器。

由于[[mediawiki:common.css|common.css]]本身就会优先加载,桌面版专用的全站CSS写入该页面即可,与手机版通用的CSS写入[[mediawiki:gadget-site-styles.css|gadget-site-styles.css]]。某个小工具专用的CSS如果需要用于静态HTML元素,请将CSS部分单独定义为<code>type=styles</code>的纯CSS小工具,然后以<code>peers=<纯CSS小工具名称></code>的语法添加到对应的JS小工具上。参见[[#小工具定义]]。
===滞后加载的CSS===
===滞后加载的CSS===
一些CSS的加载需要依赖JS,加载时机可能晚于首次渲染,包括[[mediawiki:mobile.css|mobile.css]]和除[[:category:纯CSS小工具|纯CSS小工具]]以外的[[:category:CSS小工具|CSS小工具]],这些CSS页面适合处理依赖JS动态加载的HTML元素。

由于[[mediawiki:mobile.css|mobile.css]]加载滞后,静态HTML元素需要的手机版样式请添加<code lang="css">.skin-minerva</code>选择器后写入[[mediawiki:gadget-site-styles.css|gadget-site-styles.css]]。
===CSS小工具分类===
===CSS小工具分类===
定义为<code>type=styles</code>的小工具应添加[[:category:纯CSS小工具|纯CSS小工具]]分类,其他CSS小工具应添加[[:category:CSS小工具|CSS小工具]]分类。其他分类与JS小工具一致,参见[[#小工具分类]]。
==Widget(小部件)==
==Widget(小部件)==
===小部件页面格式===
===小部件页面格式===
第9行: 第19行:
===小部件JS的特殊之处===
===小部件JS的特殊之处===
==Gadget(小工具)和全站JS==
==Gadget(小工具)和全站JS==
这里所涉及的JS页面包含[[mediawiki:common.js|common.js]]、[[mediawiki:mobile.js|mobile.js]]和各[[:category:JavaScript小工具|JS小工具]],有时由于功能的相似性也会涉及用户JS([[special:mypage/common.js|common.js]]、[[special:mypage/vector.js|vector.js]]和[[special:mypage/minerva.js|minerva.js]])。LLWiki暂时没有建立针对不同用户组的专门JS页面。
===ResourceLoader和JS模块===
===ResourceLoader和JS模块===
===不作为模块的JS脚本===
===不作为模块的JS脚本===
第193行: 第204行:


==参考资料==
==参考资料==
<references />
[[Category:LLWiki指引]]
[[Category:LLWiki指引]]

於 2020年12月28日 (一) 23:21 的修訂

內容缺失.png 此頁面內容嚴重缺失,急需您幫忙補充!(點此編輯)
可參考同類條目添加所需內容,並從官方等可靠渠道搜集資料編寫,亦建議附上資料來源。

由於LLWiki使用的不是最新版本的MediaWiki系統以及MediaWiki的幫助頁面可能未得到及時和正確的更新,進行這個頁面的編輯時請不要簡單地複製或翻譯來自MediaWiki的內容,應該在條件允許的情況下先進行實際測試。

全站CSS

這裡所說的全站CSS包含common.cssmobile.css和各CSS小工具,有時由於功能的相似性也會涉及用戶CSS(common.cssvector.cssminerva.css)。LLWiki暫時沒有建立針對不同用戶組的專門CSS頁面。

優先加載的CSS

一些CSS的加載會先於首次渲染,包括common.css和各純CSS小工具,這些CSS頁面適合處理靜態HTML元素就需要的樣式。注意純CSS小工具即使在定義時規定了targets=mobile也一定會在桌面版加載,因此手機版的專用CSS需要添加.skin-minerva選擇器。

由於common.css本身就會優先加載,桌面版專用的全站CSS寫入該頁面即可,與手機版通用的CSS寫入gadget-site-styles.css。某個小工具專用的CSS如果需要用於靜態HTML元素,請將CSS部分單獨定義為type=styles的純CSS小工具,然後以peers=<纯CSS小工具名称>的語法添加到對應的JS小工具上。參見#小工具定義

滯後加載的CSS

一些CSS的加載需要依賴JS,加載時機可能晚於首次渲染,包括mobile.css和除純CSS小工具以外的CSS小工具,這些CSS頁面適合處理依賴JS動態加載的HTML元素。

由於mobile.css加載滯後,靜態HTML元素需要的手機版樣式請添加.skin-minerva選擇器後寫入gadget-site-styles.css

CSS小工具分類

定義為type=styles的小工具應添加純CSS小工具分類,其他CSS小工具應添加CSS小工具分類。其他分類與JS小工具一致,參見#小工具分類

Widget(小部件)

小部件頁面格式

小部件分類

小部件JS的特殊之處

Gadget(小工具)和全站JS

這裡所涉及的JS頁面包含common.jsmobile.js和各JS小工具,有時由於功能的相似性也會涉及用戶JS(common.jsvector.jsminerva.js)。LLWiki暫時沒有建立針對不同用戶組的專門JS頁面。

ResourceLoader和JS模塊

不作為模塊的JS腳本

小工具定義

小工具簡介

小工具分類

MediaWiki核心模塊介紹

本章節介紹LLWiki使用或曾經使用的MediaWiki核心模塊,更完整的列表參見MediaWikiJSDuck

mediawiki

mediawiki是任何頁面都會預加載的兩個環境模塊之一,包含不少功能[1]。這裡只介紹LLWiki常使用的一些屬性和方法。

mw.config
這個屬性提供了大量重要的站點、頁面和用戶信息[2],一般常用mw.config.get()方法獲取對應的變量值。下表整理了LLWiki常用的一些變量:
變量名 說明 手機版可用性
skin 皮膚 桌面版為「vector」,手機版為「minerva」,這也是區分桌面版和手機版的主要依據
wgFormattedNamespaces 儲存了所有名字空間本地化譯名的數組,不過目前除了「模塊」都是英文 可用
wgNamespaceIds 儲存了所有可接受的中英文名字空間名稱對應的編號,注意英文名稱中的空格都顯示為下劃線 可用
wgScript /mediawiki/index.php,在LLWiki也可簡化為/zh,主要用於不同MediaWiki站點間的代碼通用,非必需 可用
wgAction index.php的action參數[3] 相比於桌面版,手機版由於添加了Special:歷史而少了「history」這個可能值
wgArticleId 內容頁面編號,不存在時值為0,可以用於判斷是否是內容頁面且頁面是否已建立 需要注意查看歷史差異時值為0
wgCanonicalSpecialPageName 標準化的特殊頁面名,也可被wgPageName取代,主要用於不同MediaWiki站點間的代碼通用,非必需 可用,而且多了「History」和"MobileDiff"等可能的取值[4]
wgCategories 當前閱讀的歷史版本所屬的分類,不含名字空間,下劃線顯示為空格,且總是包含隱藏分類。繁簡規則一般遵從實際分類頁面,但似乎偶有例外 除非已執行MobileCategories小工具,否則不可用。另外桌面版的空值為[],手機版的空值為null,注意可能的bug
wgCurRevisionId 頁面最新的版本編號,不存在時值為0 歷史差異頁面不可用
wgIsArticle 是否是內容頁面(包含由某個頁面的Wikitext源代碼解析生成的HTML,可能是歷史頁面和差異下方的歷史頁面) 由於差異頁面不可同時顯示歷史頁面,此時不可用
wgIsRedirect 最新版本是否是重定向頁面 歷史差異頁面不可用
wgIsProbablyEditable 是否可能可以編輯 歷史差異頁面不可用
wgNamespaceNumber 名字空間編號 歷史差異頁面會顯示為-1
wgPageContentModel 頁面內容模型,特殊頁面為「wikitext」 由於歷史差異是特殊頁面,會錯誤地顯示為「wikitext」
wgPageName 頁面名稱,空格顯示為下劃線 歷史差異頁面不可用
wgRedirectFrom 跳轉自重定向時為對應的重定向頁,空格顯示為下劃線 可用
wgRelevantPageName 關聯的頁面名稱,空格顯示為下劃線 可以用於歷史差異頁面,此時效果與桌面版一致
wgRelevantArticleId 關聯的內容頁面編號,不存在時值為0 可以用於歷史差異頁面,此時效果與桌面版一致
wgRelevantUserName 關聯的用戶名 貢獻頁面不可用
wgRelevantPageIsProbablyEditable 關聯的頁面是否可能可以編輯 可以用於歷史差異頁面,此時效果與桌面版一致
wgRestrictionEdit 編輯保護,不存在的頁面(含受保護的標題)或特殊頁面為null,存在的內容頁面受全保護時為["sysop"],受半保護時為["autoconfirmed"],未保護為[];不包含名字空間保護和級聯保護 歷史差異頁面不可用,另外未保護的內容頁面為["*"]
wgRestrictionMove 移動保護,不存在的頁面或特殊頁面為null,存在的內容頁面受全保護時為["sysop"],受半保護時為["autoconfirmed"],未保護為[];不包含名字空間保護和級聯保護 歷史差異頁面不可用
wgRevisionId 當前顯示的頁面版本的編號,不存在時值為0。注意和index.php的oldid參數可能不同 由於差異頁面不可同時顯示歷史頁面,此時不可用
wgTitle 不含名字空間的頁面名稱 歷史差異頁面不可用
wgUserEditCount 當前用戶的編輯次數 可用
wgUserGroups 當前用戶所屬的用戶組,未登入時為["*"] 可用
wgUserLanguage 當前用戶使用的界面語言 可用
wgUserName 當前用戶的用戶名 可用
wgUserRegistration 當前用戶的註冊時間,顯示為毫秒數;可以使用mw.user.getRegistration()方法替代,該方法會生成Date對象 可用
wgUserVariant 當前用戶閱讀頁面時的內容語言,在不可更改內容語言的頁面總是為該用戶的默認內容語言 可用
wgDiffOldId 差異頁面位於左側的版本的編號 不可用
wgDiffNewId 差異頁面位於右側的版本的編號 不可用
mw.hook()
mw.loader
mw.notify()
調用這個方法可以在桌面版的右上角、手機版的上方顯示一個泡泡通知。LLWiki一般使用這個方法取代window.alert()或OO.ui.alert()。
方法mw.notify(message, options)接受兩個參數。第一個必需參數message指定通知內容,可以是字符串、HTML元素對象或元素對象數組、jQuery對象或mw.message對象;第二個可選參數options則指定自定義選項,是一個JS對象。
options中可自定義的選項有:
  • autoHide:布爾值,決定通知是否會自行消失。默認為true
  • autoHideSeconds:如果啟用了autoHide(如默認情形),則指定通知自行消失的時間。默認為'short'(5秒),可以指定為'long'(30秒)。
  • tag:字符串,指定通知的標籤,類似於HTML的ID。如果發送多個擁有同一個tag的通知,會導致之前的通知被後來的在原位覆蓋。
  • title:標題。如果指定,則會於內容上方加粗顯示。
  • type:字符串,指定通知的種類。除默認效果外其他可選類型為'success''warn''error'
mw.now()
這個方法理論上和Date.now()差不多,但實際測試表明和Date.now()的取值不同,因此請勿混合使用。非必需,基本可以完全被Date.now()替換。

jquery

mediawiki.api

mediawiki.util

mediawiki.Uri

mediawiki.storage

mediawiki.cookie

user.options

jquery.makeCollapsible

jquery.tablesorter

jquery.textSelection

jquery.client

jquery.color

jquery.ui

jquery.tipsy

jquery.chosen

oojs-ui-core

oojs-ui-windows

mediawiki.widgets

LLWiki添加的全局變量和方法

window.wgULS()和window.wgUCS()[5]
mw.gadgets
mw.request
mw.widget
mw.windowManager
mw.standardQuery()[5]
mw.apiFailure()[5]
mw.safeEdit()[5]
mw.resizeLyrics()[6]

ESLint

CodeEditor使用ESLint標註可能存在的語法問題。LLWiki並未在後台預先規定太多規則,目前比較常用的僅是在"use strict";的基礎上添加/*global mw, $, OO, wgULS*/或類似語句註明全局變量。特別要注意ESLint並不會對大多數JS模塊不允許使用的ES6語法(async/await語法是已知的唯一例外)作出警告(詳見#ResourceLoader和JS模塊),因此請勿過度依賴這一功能來進行除錯。

注意事項

手機版

手機版解析器

圖片懶加載

手機版CSS

手機版LLWiki使用Minerva Neue皮膚,與桌面版的Vector皮膚相比,不僅界面有很大差異,眾多基礎HTML元素也都添加了不同的CSS樣式。為了適配窄屏設備,Minerva皮膚還添加了大量基於@media的規則,一般以設備寬度720px為分界使用不同的樣式。以下着重介紹<table><img>這兩種需要CSS修正的重災區。

手機版CSS很多時候依賴外層容器的content類來生效,與此同時#mw-content-text .mw-parser-output的外層結構也同樣有效,設計各種基於API的快速編輯工具(如Wikiplus等)的預覽界面時需要考慮。

表格

對於<table>元素及其子節點,手機版已知會自動添加以下樣式:

table, caption, tbody, tfoot, thead, tr, th, td {
	font-size: 100%;
}
table {
	border-collapse: collapse;
}
.content table {
	margin: 1em 0;
	overflow: auto;
	overflow-y: hidden;
	overflow-x: auto;
}
@media only screen and (max-width: 720px) {
	.content table {
		display: block;
		width: 100% !important;
	}
}

這裡重點說明一下第二和第四條規則造成的影響。第二條規則使得表格的外層邊框、行邊框和單元格邊框合併,可能造成一系列關於邊框的CSS規則出現不符合預期的表現,尤其是<table>cellspacing屬性會無法生效。因此一般建議避免使用cellspacing這一HTML屬性,改為使用CSS中的border-spacing。另外,在需要border-spacingborder-radius等樣式時,請同時指定border-collapse: separate;以使手機版生效。

第四條規則的本意是在窄屏上<table>元素不會將頁面撐得過寬,但這同時會造成外層的<table>和內層的<tbody>分離。特別是如果外層<table>規定了邊框或背景色時,很容易看出樣式的錯誤。為此一般需要主動指定display: table;以修復這一問題,LLWiki有很多預定義的表格CSS類也都添加了這一規則[7]。但這樣修改的話又會重新面臨過寬的表格將整個頁面撐大的問題。LLWiki現定義了table-wrapper[7],用於套在寬表格外:<div class="table-wrapper">,這個外層容器會在窄屏上通過overflow-x: auto;限制裡面的表格寬度。

圖片

皮膚界面

其他

手機版JS

手機版JS模塊

繁簡轉換

Wikitext繁簡轉換

轉換表

Template:NoteTA

基本手工轉換語法

系統消息

CSS繁簡轉換

JS繁簡轉換

濫用過濾器

測試賬戶

如果管理員需要一個沒有自確權限的測試賬戶用於濫用過濾器測試、小工具測試等,可以臨時啟用6號濫用過濾器來移除某個測試賬戶的自確權限。這個濫用過濾器的使用語法非常簡單,請根據樣例修改為對應的用戶名即可,這裡不再贅述。

參考資料