在MediaWiki wiki上,每个用户都有一个用户JavaScript页面,他们可以放入代码,就像GreaseMonkey但没有扩展名。例如在User:YourUsername/vector.js
MediaWiki也有一个名为Scribunto的嵌入式Lua,现在已经有一段时间了。
我知道可以从MediaWiki模板调用Lua模块,我想这是他们的主要用途。但谷歌搜索和狩猎MediWiki文档我无法找到是否有办法从您的用户JavaScript调用Lua模块。
(我需要在我的JS中将语言名称映射到语言代码,并且有一个Lua模块可以做到这一点,而不会用第二语言复制代码(主要是数据)。)
答案 0 :(得分:2)
你不能直接这样做,因为JS在客户端和服务器上的Lua上运行。您可以做的是使用the MediaWiki API from JS来调用模块。特别是使用the expandtemplates
API module。
例如,如果您想使用参数h2d
(wikitext中的FF
)和{{#invoke:hex|h2d|FF}}
结果从Module:Hex调用函数alert
,然后JS看起来像这样:
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['*']
。否则没有区别。)