LLWiki正在建设中,欢迎加入我们!
“LLWiki:管理员技术手册”的版本间差异
(使用页面/文本对比查看器快速编辑) |
小 (→全站CSS) 标签:移动版网页编辑 移动版编辑 |
||
第5行: | 第5行: | ||
这里所说的全站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包含[[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 |
一些CSS会以<code lang="html"><link rel="stylesheet"></code>的形式在首次渲染前完成加载,包括[[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小工具上。参见[[#小工具定义]]。 |
由于[[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小工具上。参见[[#小工具定义]]。 |
||
第15行: | 第15行: | ||
===CSS小工具分类=== |
===CSS小工具分类=== |
||
定义为<code>type=styles</code>的小工具应添加[[:category:纯CSS小工具|纯CSS小工具]]分类,其他CSS小工具应添加[[:category:CSS小工具|CSS小工具]]分类。其他分类与JS小工具一致,参见[[#小工具分类]]。 |
定义为<code>type=styles</code>的小工具应添加[[:category:纯CSS小工具|纯CSS小工具]]分类,其他CSS小工具应添加[[:category:CSS小工具|CSS小工具]]分类。其他分类与JS小工具一致,参见[[#小工具分类]]。 |
||
==Widget(小部件)== |
==Widget(小部件)== |
||
===小部件页面格式=== |
===小部件页面格式=== |
2020年12月30日 (三) 03:09的版本
此页面内容严重缺失,急需您帮忙补充!(点此编辑) 可参考同类条目添加所需内容,并从官方等可靠渠道搜集资料编写,亦建议附上资料来源。
|
由于LLWiki使用的不是最新版本的MediaWiki系统以及MediaWiki的帮助页面可能未得到及时和正确的更新,编辑这个页面时请不要简单地复制或翻译来自MediaWiki的内容,应该在条件允许的情况下先实际测试。
全站CSS
这里所说的全站CSS包含common.css、mobile.css和各CSS小工具,有时由于功能的相似性也会涉及用户CSS(common.css、vector.css和minerva.css)。LLWiki暂时没有建立针对不同用户组的专门CSS页面。
优先加载的CSS
一些CSS会以<link rel="stylesheet">
的形式在首次渲染前完成加载,包括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.js、mobile.js和各JS小工具,有时由于功能的相似性也会涉及用户JS(common.js、vector.js和minerva.js)。LLWiki暂时没有建立针对不同用户组的专门JS页面。
ResourceLoader和JS模块
不作为模块的JS脚本
小工具定义
小工具简介
小工具分类
MediaWiki核心模块介绍
本章节介绍LLWiki使用或曾经使用的MediaWiki核心模块,更完整的列表参见MediaWiki和JSDuck。
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
jquery是任何页面都会预加载的两个环境模块之一,尤其在DOM操作和Ajax请求方面功能强大,非常推荐在JS编程之前预先熟悉API文档。考虑到mw.loader已经集成了不少的常用Ajax方法,这里主要推荐熟练掌握DOM相关的内容,包括事件、DOM操作、选择器和遍历。特别需要提醒的是滥用htmlString有造成XSS的风险,因此请尽量使用如$('<p>', {html: $('<a>', {text: '文字', href: 'https://llwiki.org'})})
或$('<p>').append( $('<a>').text('文字').attr('href', 'https://llwiki.org') )
等语法进行规避。
另外jQuery也提供了一些工具方法,可以用于缓解ResourceLoader的JS模块不允许使用ES6语法的问题,或是方便键值对相关的语句的书写,或是方便连锁。比如用$.extend()
方法代替...
算符、用$.each(obj, (key, val) => {})
方法代替for (const key in obj) {}
等。
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-spacing
或border-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号滥用过滤器来移除某个测试账户的自确权限。这个滥用过滤器的使用语法非常简单,请根据样例修改为对应的用户名即可,这里不再赘述。