在MediaWiki Wiki上,每个用户都有一个用户JavaScript页面,他们可以将代码放入其中,很像GreaseMonkey,但没有扩展。例如User:YourUsername/vector.js
一段时间以来,MediaWiki还嵌入了一个名为Scribunto的Lua。
我知道Lua模块可以从MediaWiki模板中调用,我想这是它们的主要用途。但是在谷歌上搜索MediWiki文档,我找不到是否有办法从用户JavaScript中调用Lua模块。
(我需要在JS中将语言名称映射到语言代码,并且有一个Lua模块可以做到这一点,而无需在第二种语言中复制代码(主要是数据)。)
不能直接这样做,因为JS在客户端运行,Lua在服务器上运行。您可以使用JS中的MediaWiki API来调用模块。具体使用expandtemplates
API模块。
例如,如果您想用参数FF
(wikitext中的{{#invoke:hex|h2d|FF}}
)和alert
作为结果从Module:Hex调用函数h2d
,那么JS将如下所示:
var api = new mw.Api();
api.get( {
action: 'expandtemplates',
text: '{{#invoke:hex|h2d|FF}}'
} ).done ( function ( data ) {
alert(data.expandtemplates['*']);
} );
对于OP的具体情况,在英语Wiktionary上运行:
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['*']
访问。否则没有区别。)