用户在MediaWiki上的自定义JavaScript可以调用Lua模块吗?

时间:2015-04-06 16:00:28

标签: javascript lua mediawiki scribunto

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

MediaWiki也有一个名为Scribunto的嵌入式Lua,现在已经有一段时间了。

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


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

1 个答案:

答案 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['*']。否则没有区别。)