2015-04-06 76 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

相關問題