2

在 MediaWiki wiki 上,每个用户都有一个用户 JavaScript 页面,他们可以将代码放入其中,就像 GreaseMonkey 但没有扩展。比如在User:YourUsername/vector.js

MediaWiki 也有一个嵌入式 Lua,称为Scribunto,现在有一段时间了。

我知道 Lua 模块可以从 MediaWiki 模板中调用,我想这是它们的主要用途。但是谷歌搜索和搜索 MediWiki 文档我找不到是否有办法从您的用户 JavaScript 调用 Lua 模块。


(我需要将语言名称映射到我的 JS 中的语言代码,并且有一个 Lua 模块可以做到这一点,而无需我用第二种语言复制代码(主要是数据)。)

4

1 回答 1

2

你不能直接这样做,因为 JS 运行在客户端,Lua 运行在服务器上。您可以做的是使用JS 中的 MediaWiki API来调用模块。具体使用APIexpandtemplates​​模块

例如,如果您想使用参数(在 wikitext 中)和结果h2dModule:Hex调用函数,那么 JS 将如下所示:FF{{#invoke:hex|h2d|FF}}alert

var api = new mw.Api();
api.get( {
    action: 'expandtemplates',
    text: '{{#invoke:hex|h2d|FF}}'
} ).done ( function ( data ) {
    alert(data.expandtemplates['*']);
} );

对于 OP 的具体情况,在英语维基词典上运行:

var langName = 'Esperanto';
(new mw.Api()).get({
  action: 'expandtemplates',
  format: 'json',
  prop: 'wikitext',
  text: '{{#invoke:languages/templates|getByCanonicalName|' + langName + '|getCode}}'
}).done(function(data) {
  alert('Language name: ' + langName + '\nLanguage code: ' + data.expandtemplates.wikitext);
});

prop: 'wikitext'避免来自 API 的警告,并让您访问结果data.expandtemplates.wikitext而不是稍微神秘data.expandtemplates['*']。否则没有区别。)

于 2015-04-06T22:14:10.157 回答