Can用户'MediaWiki上的自定义JavaScript调用Lua模块

Can user's custom JavaScript on MediaWiki call a Lua module?

本文关键字:JavaScript 自定义 调用 Lua 模块 用户 MediaWiki Can      更新时间:2023-09-26

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