打开主菜单
首页
随机
最近更改
特殊页面
沙盒
互助客栈
方针与指引
帮助
页面信息
链入页面
相关更改
设置
关于LLWiki
免责声明
LLWiki
搜索
用户菜单
18.116.87.60
讨论
监视列表
贡献
登录
LLWiki正在建设中,欢迎
加入我们
!
查看“LLWiki:管理员技术手册”的源代码
←
LLWiki:管理员技术手册
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑
LLWiki
命名空间内的页面。
该页面已被保护以防止编辑和其他操作。您可以点击右侧按钮在讨论页提出编辑请求,让管理人员或其他有经验的用户代为编辑:
提出编辑请求
您可以查看和复制此页面的源代码。
{{内容缺失}} 由于LLWiki使用的不是最新版本的MediaWiki系统以及MediaWiki的帮助页面可能未得到及时和正确的更新,编辑这个页面时请不要简单地复制或翻译来自MediaWiki的内容,应该在条件允许的情况下先实际测试。 {{目录折叠}} ==全站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会以<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小工具上。参见[[#小工具定义]]。 ===滞后加载的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小工具分类=== 定义为<code>type=styles</code>的小工具应添加[[:category:纯CSS小工具|纯CSS小工具]]分类,其他CSS小工具应添加[[:category:CSS小工具|CSS小工具]]分类。其他分类与JS小工具一致,参见[[#小工具分类]]。 ==Widget(小部件)== ===小部件页面格式=== ===小部件分类=== ===小部件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模块=== ===不作为模块的JS脚本=== ===小工具定义=== ===小工具简介=== ===小工具分类=== ===MediaWiki核心模块介绍=== 本章节介绍LLWiki使用或曾经使用的MediaWiki核心模块,更完整的列表参见[[mw:ResourceLoader/Core_modules/zh|MediaWiki]]和[https://doc.wikimedia.org/mediawiki-core/master/js/ JSDuck]。 ====mediawiki==== mediawiki是任何页面都会预加载的两个环境模块之一,包含不少功能<ref name="core-modules">[[mw:ResourceLoader/Core_modules/zh|MW:ResourceLoader/核心模块]]</ref>。这里只介绍LLWiki常使用的一些属性和方法。 ;mw.config :这个属性提供了大量重要的站点、页面和用户信息<ref>[[mw:Manual:Interface/JavaScript/zh#mw.config|完整列表]]</ref>,一般常用mw.config.get()方法获取对应的变量值。下表整理了LLWiki常用的一些变量: {| class="wikitable" ! 变量名 !! 说明 !! 手机版可用性 |- | skin || 皮肤 || 桌面版为“vector”,手机版为“minerva”,这也是区分桌面版和手机版的主要依据 |- | wgFormattedNamespaces || 储存了所有名字空间本地化译名的数组,不过目前除了“模块”都是英文 || 可用 |- | wgNamespaceIds || 储存了所有可接受的中英文名字空间名称对应的编号,注意英文名称中的空格都显示为下划线 || 可用 |- | wgScript || <code>/mediawiki/index.php</code>,在LLWiki也可简化为<code>/zh</code>,主要用于不同MediaWiki站点间的代码通用,非必需且不推荐使用 || 可用 |- | wgAction || index.php的action参数<ref>[[mw:Manual:Parameters_to_index.php/zh|完整参数列表]]</ref> || 相比于桌面版,手机版由于添加了[[Special:历史]]而少了“history”这个可能值 |- | wgArticleId || 内容页面编号,不存在时值为0,可以用于判断是否是内容页面且页面是否已建立 || 需要注意查看[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]时值为0 |- | wgCanonicalSpecialPageName || 标准化的特殊页面名,也可被wgPageName取代,主要用于不同MediaWiki站点间的代码通用,非必需 || 可用,而且多了“History”和"MobileDiff"等可能的取值<ref>[[mw:Extension:MobileFrontend/zh|移动前端的扩展说明]]</ref> |- | wgCategories || 当前阅读的历史版本所属的分类,不含名字空间,下划线显示为空格,且总是包含隐藏分类。繁简规则一般遵从实际分类页面,但似乎偶有例外 || 除非已执行[[mediawiki:gadget-MobileCategories.js|MobileCategories小工具]],否则不可用。另外桌面版的空值为<code>[]</code>,手机版的空值为<code lang="js">null</code>,注意可能的bug |- | wgCurRevisionId || 页面最新的版本编号,不存在时值为0 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgIsArticle || 是否是内容页面(包含由某个页面的Wikitext源代码解析生成的HTML,可能是历史页面和差异下方的历史页面) || 由于[[special:移动版差异|{{int:diff}}]]页面不可同时显示历史页面,此时不可用 |- | wgIsRedirect || 最新版本是否是重定向页面 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgIsProbablyEditable || 是否可能可以编辑 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgNamespaceNumber || 名字空间编号 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面会显示为-1 |- | wgPageContentModel || 页面内容模型,特殊页面为“wikitext” || 由于[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]是特殊页面,会错误地显示为“wikitext” |- | wgPageName || 页面名称,空格显示为下划线 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgRedirectFrom || 跳转自重定向时为对应的重定向页,空格显示为下划线 || 可用 |- | '''wgRelevantPageName''' || 关联的页面名称,空格显示为下划线 || 可以用于[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面,此时效果与桌面版一致 |- | '''wgRelevantArticleId''' || 关联的内容页面编号,不存在时值为0 || 可以用于[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面,此时效果与桌面版一致 |- | wgRelevantUserName || 关联的用户名 || [[special:用户贡献|{{int:contributions}}]]页面不可用 |- | '''wgRelevantPageIsProbablyEditable''' || 关联的页面是否可能可以编辑 || 可以用于[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面,此时效果与桌面版一致 |- | wgRestrictionEdit || 编辑保护,不存在的页面(含受保护的标题)或特殊页面为<code lang="js">null</code>,存在的内容页面受全保护时为<code lang="js">["sysop"]</code>,受半保护时为<code lang="js">["autoconfirmed"]</code>,未保护为<code>[]</code>;不包含名字空间保护和级联保护 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用,另外未保护的内容页面为<code lang="js">["*"]</code> |- | wgRestrictionMove || 移动保护,不存在的页面或特殊页面为<code lang="js">null</code>,存在的内容页面受全保护时为<code lang="js">["sysop"]</code>,受半保护时为<code lang="js">["autoconfirmed"]</code>,未保护为<code>[]</code>;不包含名字空间保护和级联保护 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgRevisionId || 当前显示的页面版本的编号,不存在时值为0。注意和index.php的oldid参数可能不同 || 由于[[special:移动版差异|{{int:diff}}]]页面不可同时显示历史页面,此时不可用 |- | wgTitle || 不含名字空间的页面名称,下划线显示为空格 || 在[[special:历史|历史]]和[[special:移动版差异|{{int:diff}}]]页面不可用 |- | wgUserEditCount || 当前用户的编辑次数 || 可用 |- | wgUserGroups || 当前用户所属的用户组,未登入时为<code lang="js">["*"]</code> || 可用 |- | wgUserLanguage || 当前用户使用的界面语言 || 可用 |- | wgUserName || 当前用户的用户名,下划线显示为空格 || 可用 |- | wgUserRegistration || 当前用户的注册时间,显示为毫秒数;可以使用mw.user.getRegistration()方法替代,该方法会生成Date对象 || 可用 |- | wgUserVariant || 当前用户阅读页面时的内容语言,在不可更改内容语言的页面总是为该用户的默认内容语言 || 可用 |- | wgDiffOldId || 差异页面位于左侧的版本的编号 || 不可用 |- | wgDiffNewId || 差异页面位于右侧的版本的编号 || 不可用 |} ;mw.hook() :这个方法是LLWiki建立异步JS框架的重要一环。常用以下两个方法: :*<code>mw.hook(hook).fire(data)</code>: 用于唤起一个Hook事件,其中data为传递给事件处理程序的可选参数。 :*<code>mw.hook(hook).add(handler)</code>: 用于处理一个Hook事件,handler为该事件处理函数,参数传递自<code>mw.hook().fire()</code>方法。 :这个方法应与jQuery的event delegation和各Promise对象结合使用,以在恰当的时机执行恰当的函数。以下列举LLWiki常用的Hook事件。 {| class="wikitable" ! Hook名称 !! 说明 |- ! colspan=2 | MediaWiki预定义的Hook |- | postEdit || 一次非空编辑提交成功,一般发生在自动重载页面后,可以搭配<code lang="js">mw.config.get( 'wgPostEdit' )</code>。需要注意各类编辑小工具提交编辑后的页面重载均未适配这个事件 |- | structuredChangeFilters.ui.initialized || [[special:recentchanges|{{int:recentchanges}}]]、[[special:recentchangeslinked|{{int:recentchangeslinked}}]]和[[special:watchlist|{{int:watchlist}}]]页面的过滤器加载完成,一般至多发生一次 |- | wikipage.categories || 页面下方的<code lang="css">div#catlinks</code>加载完成。特殊页面或没有添加任何分类时也能触发,因为此时<code lang="css">#catlinks</code>仍然存在只是隐藏起来 |- | wikipage.collapsibleContent || 某个或某组<code>mw-collapsible</code>类的元素添加折叠JS完成 |- | wikipage.content || 最常用的Hook,表示页面内容(一般即<code lang="css">div#mw-content-text</code>)加载完成,几乎无处不在,与<code>$.ready</code>最大的区别在于这个事件可能多次触发 |- | wikipage.diff || 差异(一般即<code lang="css">table.diff</code>)加载完成 |- | wikipage.editform || 编辑区加载完成,需要注意此时[[mw:extension:wikiEditor/zh|WikiEditor]]的工具栏可能尚未加载完成 |- | codeEditor.configure || 切换至[[mw:extension:codeEditor/zh|CodeEditor]] |- ! colspan=2 | LLWiki定义的Hook |- | code.prettify || 代码高亮完成 |- | codemirror.config || CodeMirror扩展的设置下载完成 |- | hotcat.ready || HotCat小工具加载完成 |- | local.comments || 签名时间替换为本地时区 |- | mobile.menu || 手机版的左侧主菜单加载完成 |- | to.bottom || 添加滚动至底部的按钮 |- | transclusion.preview || 用于预览潜入页面的编辑区加载完成 |- | wikiplus.dialog || 打开Wikiplus小工具的对话框 |} ;mw.loader :mw.loader包含了很多用于ResourceLoader的方法。 :*mw.loader.addStyleTag(),用于在<code lang="css">header</code>的末尾插入一个<code lang="html"><style></code>。由于返回的是一个HTML元素,后续操作不如mw.util.addCSS()返回的StyleSheet对象方便,但在不需要后续操作的场合可以不用加载mediawiki.util模块。由于mediawiki.util在LLWiki的广泛使用,这个方法几乎没有任何优点。 :*mw.loader.getScript(),用于加载外部JS脚本,相比mw.loader.load()方法优点在于会返回一个Promise对象。 :*mw.loader.getState(),用于获取模块的当前状态,不可用的模块返回<code lang="js">null</code>,可用但未加载的模块返回<code lang="js">'registered'</code>,可用且正在加载的模块可能返回<code lang="js">'loaded'</code>或<code lang="js">'loading'</code>,已加载完成的模块返回<code lang="js">'ready'</code>。注意加载完成的模块未必已经执行完。 :*mw.loader.load(),用于加载模块、其他JS或其他CSS,加载模块时参数为模块名或一个模块名构成的数组,加载JS或CSS时填写url,加载CSS还需要额外填写第二参数<code lang="js">'text/css'</code>。缺点在于不会返回一个Promise对象。 :*mw.loader.using(),用于加载模块,相比mw.loader.load()方法优点在于会返回一个Promise对象,任一模块加载失败即返回rejected。 ;mw.notify() :调用这个方法可以在桌面版的右上角、手机版的上方显示一个[[mw:Bubble_notifications/zh|泡泡通知]]。LLWiki一般使用这个方法取代window.alert()或OO.ui.alert()。 :方法<code>mw.notify(message, options)</code>接受两个参数。第一个必需参数<code>message</code>指定通知内容,可以是字符串、HTML元素对象或元素对象数组、jQuery对象或mw.message对象;第二个可选参数<code>options</code>则指定自定义选项,是一个JS对象。 :<code>options</code>中可自定义的选项有: :*<code>autoHide</code>:布尔值,决定通知是否会自行消失。默认为<code lang="js">true</code>。 :*<code>autoHideSeconds</code>:如果启用了<code>autoHide</code>(如默认情形),则指定通知自行消失的时间。默认为<code lang="js">'short'</code>(5秒),可以指定为<code lang="js">'long'</code>(30秒)。 :*<code>tag</code>:字符串,指定通知的标签,类似于HTML的ID。如果发送多个拥有同一个tag的通知,会导致之前的通知被后来的在原位覆盖。 :*<code>title</code>:标题。如果指定,则会于内容上方加粗显示。 :*<code>type</code>:字符串,指定通知的种类。除默认效果外其他可选类型为<code lang="js">'success'</code>、<code lang="js">'warn'</code>和<code lang="js">'error'</code>。 ;mw.now() :这个方法理论上和Date.now()差不多,但实际测试表明和Date.now()的取值不同,因此请勿混合使用。非必需,基本可以完全被Date.now()替换。 ====jquery==== jquery是任何页面都会预加载的两个环境模块之一,尤其在DOM操作和Ajax请求方面功能强大,非常推荐在JS编程之前预先熟悉[https://api.jquery.com/ API文档]。考虑到mw.loader已经集成了不少的常用Ajax方法,这里主要推荐熟练掌握DOM相关的内容,包括[https://api.jquery.com/category/events/ 事件]、[https://api.jquery.com/category/manipulation/ DOM操作]、[https://api.jquery.com/category/selectors/ 选择器]和[https://api.jquery.com/category/traversing/ 遍历]。特别需要提醒的是滥用htmlString有造成XSS的风险,因此请尽量使用如<code lang="js"><nowiki>$('<p>', {html: $('<a>', {text: '文字', href: 'https://llwiki.org'})})</nowiki></code>或<code lang="js"><nowiki>$('<p>').append( $('<a>').text('文字').attr('href', 'https://llwiki.org') )</nowiki></code>等语法进行规避。 因未被mw.loader包含而可能用到的Ajax方法主要为<code>$.getJSON()</code>,需要注意在MW的默认设置下调用jQuery的Ajax方法必须手动设置<code lang="js">{cache: true}</code>。 另外jQuery也提供了一些[https://api.jquery.com/category/utilities/ 工具方法],可以用于缓解ResourceLoader的JS模块不允许使用ES6语法的问题,或是方便键值对相关的语句的书写,或是方便连锁。比如用<code>$.extend()</code>方法代替<code>...</code>算符、用<code>$.each(obj, (key, val) => {})</code>方法代替<code lang="js">for (const key in obj) {}</code>等。 应用jQuery时可能出现的一些常见错误列举如下: *混淆<code>.attr()</code>方法和<code>.prop()</code>方法。 *混淆jQuery对象的<code>.data()</code>方法和HTML元素的<code>.dataset</code>属性。 *使用<code>.toggle()</code>、<code>.fadeToggle()</code>等方法时不慎破坏较复杂的CSS布局。 *错误使用<code>.remove()</code>、<code>.clone()</code>等方法造成丢失数据和事件处理程序。 *混淆<code>event.target</code>、<code>event.currentTarget</code>、<code>event.delegateTarget</code>和<code lang="js">this</code>关键字。 *混淆<code>$.when()</code>方法和<code lang="js">Promise.all()</code>方法的参数格式和回调函数。 ====mediawiki.api==== 这个模块提供了一系列方法用于简化API请求。使用这一模块时,需要首先建立一个mw.Api对象,常用语法为<code lang="js">const api = new mw.Api();</code>。以下列举这个mw.Api对象常用的方法,没有出现在以下列表中的方法可能不仅是不推荐使用,而是因为未适配中文的繁简转换而不应在LLWiki使用。 *api.get(),这是最基础的两个方法之一,用于提交类型为GET的Ajax请求,参数基本与api.php的参数一致,区别在于返回的格式已经限定为JSON对象,即可省略参数<code lang="js">{action: 'query', format: "json"}</code>。API请求的参数列表详见[[mw:API:Main_page/zh|API文档]],这里特别推荐一下generator参数<ref>[[mw:API:Query/zh|API文档(action = query)]]</ref>的强大功能和<code lang="js">{formatversion: 2}</code>这个参数。 *api.post(),这是最基础的两个方法之一,用于提交类型为POST的Ajax请求,用法与api.get()方法高度相似。一般情形下,<code lang="js">{action: 'query'}</code>的请求应该使用api.get()方法以充分利用浏览器缓存等优点;但如果请求的数据量过大,可能不得不使用api.post()方法代替。 *api.postWithToken(),提交改动时一般使用这个快捷方法而非传统的api.post(),但在很多情形下都可以替换为下述更为方便的方法,只有用于<code lang="js">{action: 'patrol'}</code>时难以替代。 *api.postWithEditToken(),相当于<code lang="js">api.postWithToken('csrf', params)</code>,主要用于提交编辑。大部分情况下不推荐使用api.edit()方法替代,因为api.edit()在大多数应用场合会造成重复而不必要的<code lang="js">{action: 'query', prop: 'revisions'}</code>请求。为了避免编辑冲突,在LLWiki请尽可能使用[[#LLWiki添加的全局变量和方法|mw.safeEdit()]]方法。另外在建立新页面(<code lang="js">{createonly: 1}</code>或直接应用api.create()方法)时,请务必先检查对应的繁简中文标题是否已经存在。 *api.newSection(),这个方法相比api.postWithEditToken()可以进一步简化添加新章节的代码。 *api.rollback(),相当于<code lang="js">api.postWithToken('rollback', params)</code>,用于回退。 *api.watch(),相当于<code lang="js">api.postWithToken('watch', params)</code>,用于监视。 *api.unwatch(),相当于<code lang="js">api.postWithToken('watch', params)</code>,用于取消监视。 *api.upload(),相当于api.postWithEditToken()的<code lang="js">{action: 'upload'}</code>。注意这个方法只能上传本地文件,需要通过url上传的请使用api.postWithEditToken()方法。 *api.parse(),用于解析HTML的快捷方法,常用于生成预览。如果要获得现存页面的HTML,还需要加载mediawiki.Title,此时建议可以直接使用标准的api.get()方法代替。 ====mediawiki.util==== mediawiki.util提供了很多非常方便的方法,可以用于满足形形色色的需要。 *mw.util.addCSS(),相比mw.loader.addStyleTag()方法,因为返回值是一个StyleSheet对象而更便于后续动态操作。 *mw.util.addPortletLink(),实际上并不如直接使用jQuery自由度更大,但这个方法可能会出现在一些从其他维基导入的小工具里,不推荐使用。 *mw.util.debounce(),这个方法用于降低一个函数被调用的频率,常见的比如scroll事件。 *mw.util.escapeRegExp(),mw.util还有其他的转义方法<ref>[https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.util mw.util文档]</ref>,但应用较少,不再赘述。 *mw.util.getParamValue(),提取php参数,能够满足可能存在的各种奇怪情形,不建议使用自己写的正则匹配替代。 *mw.util.getUrl(),获取页面对应的相对网址,一般来说使用<code lang="js">mw.config.get('wgScript') + '/' + pageName</code>即可。但如果页面名称中含需要转义的字符(如<code>?</code>和<code>&</code>),使用这个方法还是挺方便的。 *mw.util.wikiUrlencode(),非常好用的方法,相比encodeURIComponent不会转义<code>:</code>和<code>/</code>,相比encodeURI则增加了对<code>?</code>和<code>&</code>的转义,是转义页面名称的最佳选择,同时在用做url时也比mw.util.getUrl()方法有更大的自由度。 ====mediawiki.Uri==== 除了可以替代mw.util.getParamValue()方法用于获得URI的各项参数,mediawiki.Uri还可以方便地修改或生成URI。使用时首先需要应用<code lang="js">const uri = new mw.Uri(str, options);</code>语法来构建一个mw.Uri对象,强烈推荐在options中设置<code lang="js">{overrideKeys: true}</code>以免后续出现未预期的JS语法错误。 *uri.fragment,获得<code>#</code>后的章节名。 *uri.host,在LLWiki总是为<code lang="js">'llwiki.org'</code>。 *uri.path,在LLWiki的内容页面一般总是为<code lang="js">'/zh'</code>或<code lang="js">'/mediawiki/index.php'</code>(两者等效)。 *uri.protocol,在LLWiki总是为<code lang="js">'https'</code>。 *uri.query,包含了所有php参数的JS对象,在规定了<code lang="js">{overrideKeys: true}</code>时每个值都是字符串,否则重复参数的值为数组。 *uri.clone(),复制mw.Uri对象。 *<code lang="js">uri.extend({key: value})</code>,添加或覆盖php参数,这在URI以<code>#</code>结尾时非常方便。如果需要删除php参数的话,可以直接使用<code lang="js">delete uri.query.param</code>的语法。 *uri.getQueryString(),获得整个php请求字符串。 *uri.getRelativePath(),获得相对地址。 *uri.toString(),获得包含协议的绝对地址。 ====mediawiki.Title==== 彻底解决关于页面名称或文件名称的各种烦恼,包括大小写、空格/下划线、名字空间别名等等。通常用法为先使用<code lang="js">const title = new mw.Title(str);</code>的语法构建一个mw.Title对象。与mw.util的很多方法以及<code lang="js">new mw.Uri()</code>不同,<code lang="js">new mw.Title(str)</code>不会以当前页面作为默认参数。因为未统一大小写、空格/下划线等,请勿直接访问title.title属性,而是根据需要使用下列方法。 *title.getExtension(),获取文件名的扩展名。 *title.getFragment(),如果页面名称中含<code>#</code>,获取章节名。也可以直接使用title.fragment属性访问。 *title.getMain(),获取页面名,首字母大写,空格替换为下划线。 *title.getMainText(),获取页面名,首字母大写,下划线被替换为空格。 *title.getName(),获取文件名,不含扩展名,首字母大写,空格替换为下划线。 *title.getNameText(),获取文件名,不含扩展名,首字母大写,下划线替换为空格。 *title.getNamespaceId(),获取名字空间,能识别一切别名。也可以直接使用title.namespace属性访问。 *title.getNamespacePrefix(),获取标准名字空间前缀,含<code>:</code>。 *title.toString(),获取完整页面名称,名字空间使用标准前缀,不含<code>#</code>,空格替换为下划线。 *title.toText(),相比title.toString()方法,下划线替换为空格。 *<code>title.getRelativeText(nsid)</code>,相比title.toText()方法,会名字空间编号匹配时移除名字空间前缀。 *title.getSubjectPage(),生成讨论页对应的主页面的mw.Title对象。 *title.getTalkPage(),生成对应的讨论页的mw.Title对象。 *title.getUrl(),生成地址,可以添加JS对象格式的php参数。注意在LLWiki,mw.util.getUrl()方法和mw.Uri对象均可以获得脚本路径为<code lang="js">'/zh'</code>的短地址,而title.getUrl()方法只能获得脚本路径为<code lang="js">'/mediawiki/index.php'</code>的长地址,因此并不推荐使用这一方法。 *title.isTalkPage(),是否是讨论页。 此外,mediawiki.Title还有一些静态方法用于生成mw.Title对象。 *<code>mw.Title.makeTitle(nsid, title)</code>,给定名字空间编号和标题生成对象。不存在的名字空间会报错。仅当名字空间为0时,会根据标题生成正确的名字空间。 *<code>mw.Title.newFromFileName(filename)</code>,给定文件名生成对象。 *<code>mw.Title.newFromImg(node)</code>,给定<code lang="html"><img></code>节点或对应的jQuery对象生成mw.Title对象。 *<code>mw.Title.newFromText(title, nsid)</code>,相比mw.Title.makeTitle()方法,错误的名字空间编号也不会报错,且当标题含名字空间前缀时总是覆盖第二个名字空间参数。 ====mediawiki.storage==== mediawiki.storage提供了处理localStorage或sessionStorage的便利方法。注意出于安全性的考虑,请勿使用localStorage存储用户的个人信息。mw.storage对象对应localStorage,mw.storage.session对象对应sessionStorage,这两个对象拥有相同的方法,所以以下只介绍mw.storage对象。 *mw.storage.get(),相当于localStorage.getItem()方法,所以使用价值不高。 *mw.storage.set(),相当于localStorage.setItem()方法,所以使用价值不高。 *mw.storage.remove(),相当于localStorage.removeItem()方法。 *mw.storage.getObject(),相当于<code lang="js">JSON.parse( localStorage.getItem(key) )</code>。 *mw.storage.setObject(),相当于<code lang="js">localStorage.setItem(key, JSON.stringify(value))</code>。 ====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添加的全局變量和方法=== ;<code lang="js">window.wgULS(hans, hant)</code>和<code lang="js">window.wgUCS(hans, hant)</code><ref name="site-lib">需要加載[[mediawiki:gadget-site-lib.js|site-lib.js]]</ref> ;mw.gadgets ;mw.request ;mw.widget ;mw.windowManager ;mw.pagenamee()<ref name="site-lib" /> ;<code>mw.standardQuery(api)</code><ref name="site-lib" /> ;<code>mw.timedQuery(api, params, topic)</code><ref name="site-lib" /> ;<code>mw.apiFailure(reason, topic)</code><ref name="site-lib" /> ;<code>mw.safeEdit(api, curRevid, params)</code><ref name="site-lib" /> ;<code>mw.safeRedirect(api, title, target)</code><ref name="site-lib" /> ;<code>mw.confirm(text, flags)</code><ref name="site-lib" /> ;mw.resizeLyrics()<ref>需要加載[[Widget:Lyrics]]</ref> ===ESLint=== CodeEditor使用ESLint标注可能存在的语法问题。LLWiki并未在后台预先规定太多规则,目前比较常用的仅是在<code lang="js>"use strict";</code>的基础上添加<code lang="js">/*global mw, $, OO, wgULS*/</code>或类似语句注明全局变量。特别要注意ESLint并不会对大多数JS模块不允许使用的ES6语法(async/await语法是已知的唯一例外)作出警告(详见[[#ResourceLoader和JS模块]]),因此请勿过度依赖这一功能来除错。 ===注意事项=== ==手机版== ===手机版解析器=== ====图片懒加载==== ===手机版CSS=== 手机版LLWiki使用Minerva Neue皮肤,与桌面版的Vector皮肤相比,不仅界面有很大差异,众多基础HTML元素也都添加了不同的CSS样式。为了适配窄屏设备,Minerva皮肤还添加了大量基于<code lang="css">@media</code>的规则,一般以设备宽度720px为分界使用不同的样式。以下着重介绍<code><table></code>和<code><img></code>这两种需要CSS修正的重灾区。 手机版CSS很多时候依赖外层容器的<code>content</code>类来生效,与此同时<code lang="css">#mw-content-text .mw-parser-output</code>的外层结构也同样有效,设计各种基于API的快速编辑工具(如Wikiplus等)的预览界面时需要考虑。 ====表格==== 对于<code><table></code>元素及其子节点,手机版已知会自动添加以下样式: <pre lang="css"> 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; } } </pre> 这里重点说明一下第二和第四条规则造成的影响。第二条规则使得表格的外层边框、行边框和单元格边框合并,可能造成一系列关于边框的CSS规则出现不符合预期的表现,尤其是<code><table></code>的<code>cellspacing</code>属性会无法生效。因此一般建议避免使用<code>cellspacing</code>这一HTML属性,改为使用CSS中的<code>border-spacing</code>。另外,在需要<code>border-spacing</code>或<code>border-radius</code>等样式时,请同时指定<code lang="css">border-collapse: separate;</code>以使手机版生效。 第四条规则的本意是在窄屏上<code><table></code>元素不会将页面撑得过宽,但这同时会造成外层的<code><table></code>和内层的<code><tbody></code>分离。特别是如果外层<code><table></code>规定了边框或背景色时,很容易看出样式的错误。为此一般需要主动指定<code lang="css">display: table;</code>以修复这一问题,LLWiki有很多预定义的表格CSS类也都添加了这一规则<ref name="site-styles">[[mediawiki:gadget-site-styles.css|全站CSS]]</ref>。但这样修改的话又会重新面临过宽的表格将整个页面撑大的问题。LLWiki现定义了<code>table-wrapper</code>类<ref name="site-styles" />,用于套在宽表格外:<code lang="html"><nowiki><div class="table-wrapper"></nowiki></code>,这个外层容器会在窄屏上通过<code lang="css">overflow-x: auto;</code>限制里面的表格宽度。 ====图片==== ====皮肤界面==== ====其他==== ===手机版JS=== ====手机版JS模块==== ==繁简转换== ===Wikitext繁简转换=== ====转换表==== ====[[Template:NoteTA]]==== ====基本手工转换语法==== ===系统消息=== ===CSS繁简转换=== ===JS繁简转换=== ==滥用过滤器== ==测试账户== 如果管理员需要一个没有[[project:自动确认用户|自确]]权限的测试账户用于滥用过滤器测试、小工具测试等,可以临时启用[[special:abusefilter/6|6号滥用过滤器]]来移除某个测试账户的自确权限。这个滥用过滤器的使用语法非常简单,请根据样例修改为对应的用户名即可,这里不再赘述。 ==参考资料== <references /> [[Category:LLWiki指引]]
本页使用的模板:
Template:Ac
(
查看源代码
)
Template:ArticleCategory
(
查看源代码
)(受保护)
Template:Color
(
查看源代码
)(受保护)
Template:Info
(
查看源代码
)
Template:Membermapping
(
查看源代码
)(受保护)
Template:Membermapping/core
(
查看源代码
)
Template:Nico/color
(
查看源代码
)(受保护)
Template:Plainlinks
(
查看源代码
)
Template:內容缺失
(
查看源代码
)
Template:目錄摺疊
(
查看源代码
)(受保护)
返回
LLWiki:管理员技术手册
。