2015-04-06 78 views
2

在MediaWiki wikis上,每个用户都有一个用户JavaScript页面,他们可以放入代码,很像GreaseMonkey,但没有扩展名。如User:YourUsername/vector.jsMediaWiki上的用户定制JavaScript可以调用Lua模块吗?

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

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


(我需要在我的JS语言代码的语言名称映射,并有一个Lua模块来做到这一点没有我的第二语言重复的代码(主要是数据)。)

+1

顺便提一下,jquery.uls发布了一个从CLDR中获取的langdb。 – Nemo

+0

@Nemo:看起来很有趣 - 现在深入探索它... – hippietrail

+0

[我可以在MediaWiki wiki上使用jquery.uls来从英语语言的名称获取语言代码吗?](http://stackoverflow.com/questions/29485489) – hippietrail

回答

2

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

例如,如果你想从Module:Hex与参数FF(在wiki文字{{#invoke:hex|h2d|FF}})和alert结果调用的函数h2d,那么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['*']。否则没有什么区别。)

+0

是的,我自己尝试过,发现了这个。您是否介意将我的特定问题的代码添加到您的答案中,因为它在评论中不起作用,但可能无法保证单独的答案? – hippietrail

+1

@hippietrail我不介意。 – svick

相关问题