跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
分类索引
最近更改
随机页面
灵兰秘典
帮助
帮助
联系我们
捐助本站
关于本站
MediaWiki帮助
中医百科
搜索
搜索
外观
登录
个人工具
登录
查看“︁MediaWiki:Gadget-GadgetsDefinition.js”︁的源代码
系统消息
讨论
English
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
Cargo数据
外观
移至侧栏
隐藏
←
MediaWiki:Gadget-GadgetsDefinition.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
/* * Adds links to gadget definitions in [[MediaWiki:Gadgets-definition]] and * prettifies them by adding whitespace. * Adds anchors to gadget definitions as well as CSS to highlight them when we * click a link to them. * * Can be loaded with the following code: mw.loader.load("//en.wiktionary.org/w/index.php?title=User:Erutuon/scripts/gadgets-definition.js&action=raw&ctype=text/javascript"); * */ /* jshint boss: true, undef: true, unused: true */ /* globals $, mw */ (function gadgetsDefinitionIIFE () { "use strict"; // Only operate on [[MediaWiki:Gadgets-definition]] when the text is visible. if (!(mw.config.get("wgCanonicalNamespace") == "MediaWiki" && mw.config.get("wgTitle") === "Gadgets-definition" && document.querySelector(".mw-parser-output"))) return; /* * Set window.gadgetsDefinitionWhitespaceUnchanged = true * in [[Special:MyPage/common.js]] to turn off the addition of spaces around * punctuation in [[MediaWiki:Gadgets-definition]]. */ const addSpaces = !window.gadgetsDefinitionWhitespaceUnchanged; mw.loader.using("mediawiki.util", function () { // Highlight a gadget's definition when we follow a link to it. mw.util.addCSS(`.page-MediaWiki_Gadgets-definition li:target { background: var(--background-color-progressive-subtle, #eaf3ff); }`); }); // Technique gleaned from [[w:fr:Utilisateur:Od1n/AddLinksGadgetsDefinition.js]]. // This anchor element is used to generate links and is not attached to the document. var link = document.createElement("a"); function makeLink(href, text) { link.href = href; link.textContent = text; return link.outerHTML; } function makeWikilink(page, text) { return makeLink(mw.util.getUrl(page), text || page); } function linkGadgetSource(sourcePage) { return makeWikilink("MediaWiki:Gadget-" + sourcePage, sourcePage); } function linkGadgetAnchor(gadgetName, text) { return makeLink("#" + makeGadgetId(gadgetName), text || gadgetName); } var gadgetNameRegex = /^(\s*)([\w_-]+)\s*/; function getGadgetName(innerHTML) { var match = gadgetNameRegex.exec(innerHTML); return match ? match[2] : null; } function makeGadgetId(gadgetName) { return "Gadget-" + gadgetName; } function processGadgetDefinition(innerHTML) { return innerHTML // link gadget name to system message page and add space after it .replace(gadgetNameRegex, function (wholeMatch, whitespace, gadgetName) { return whitespace + linkGadgetSource(gadgetName) + (addSpaces ? " " : ""); }) .replace(/([\w_\-\.]+\.(?:css|js(?:on)?))/g, linkGadgetSource) // link script names .replace(/(\s*)\|(\s*)/g, addSpaces ? " | " : "$1|$2") // spaces around pipes /* * process options * * Link dependencies: ext.gadget.name to entry on this page, others to * [[mw:ResourceLoader/Core modules]] (even though not all have an entry * there). * * Link peers to entry on this page. * * Link rights to [[mw:Manual:User_rights#List_of_permissions]]. There * are unfortunately no anchors for individual rights. * * Link skin names to page in Skin namespace on MediaWiki. * * Add tooltip to namespace numbers showing local namespace name. * * Link category names to category pages. */ .replace(/([a-z]+)(\s*)=(\s*)(.+?)(?=\s*[|\]])/g, function (wholeMatch, key, whitespace1, whitespace2, value) { function mapValues(transformer) { return value.replace(/([^,\s](?:[^,]*[^,\s])*)(?=\s*(?:,|$))/g, transformer); } var formattedValue = value; switch (key) { case "dependencies": formattedValue = mapValues(function (dependency) { var gadgetName = /^ext\.gadget\.(.+)$/.exec(dependency); if (gadgetName) return linkGadgetAnchor(gadgetName[1], dependency); else return makeWikilink("mw:ResourceLoader/Core modules#" + dependency, dependency); }); break; case "rights": key = makeWikilink("mw:Manual:User_rights#List_of_permissions", key); break; case "skins": { key = makeWikilink("mw:Manual:Skins", "skins"); formattedValue = mapValues(function(skin) { return makeWikilink("mw:Skin:" + skin, skin); }); break; } case "peers": formattedValue = mapValues(linkGadgetAnchor); break; case "namespaces": const formattedNamespaces = mw.config.get("wgFormattedNamespaces"); formattedValue = mapValues(function(namespaceId) { const namespaceNumber = parseInt(namespaceId); if (!isNaN(namespaceNumber)) { const namespaceName = formattedNamespaces[namespaceNumber]; if (namespaceName != undefined) { const abbr = document.createElement("abbr"); abbr.title = namespaceName === "" ? "(main)" : namespaceName; abbr.textContent = namespaceId; return abbr.outerHTML; } } return namespaceId; }); break; case "categories": formattedValue = mapValues(function(categoryName) { return makeWikilink("Category:" + categoryName, categoryName); }); } if (addSpaces) { whitespace1 = " ", whitespace2 = " "; } return key + whitespace1 + "=" + whitespace2 + (addSpaces ? formattedValue.replace(/\s*,\s*/g, ", ") : formattedValue); }); } $(function () { var $parserOutput = $(".mw-parser-output"); // :not(.gadgets-validation li) excludes elements under // class="gadgets-definition" in output of Module:validate_gadgets on other wikis. // Process gadget definitions in lists. $parserOutput.find("li:not(.gadgets-validation li)").each(function (i, element) { // Add id so that gadget definitions can be highlighted when we click a link // to them. var gadgetName = getGadgetName(element.innerHTML); if (gadgetName) element.id = makeGadgetId(gadgetName); element.innerHTML = processGadgetDefinition(element.innerHTML); }); // Process gadget definitions in pre tags. $parserOutput.find("pre:not(.gadgets-validation pre)").each(function (i, element) { element.innerHTML = element.innerHTML.replace(/[^\n]+/g, processGadgetDefinition); }); }); })(); // IIFE
该页面使用的模板:
Template:Gadget Header
(
查看源代码
)
返回
MediaWiki:Gadget-GadgetsDefinition.js
。