模組:Interwiki
外观
local familys = {}
local siteCfg
siteCfg = {
lang = 'zh',
family = 'wiki',
familyToInterPrefix = {
wiki = 'w',
wiktionary = 'wikt',
wikiquote = 'q',
wikibooks = 'b',
wikinews = 'n',
wikisource = 's',
wikiversity = 'v',
wikivoyage = 'voy',
},
getInterWikiFromWikiId = function (wikiId)
if wikiId == 'mediawikiwiki' then
return 'mw:'
end
local familyPrefix = ''
local lang = wikiId
for _, family in ipairs(familys) do
if wikiId:sub(-#family) == family then
lang = wikiId:sub(0, -#family-1)
if family ~= siteCfg.family then
familyPrefix = siteCfg.familyToInterPrefix[family] .. ':'
end
break
end
end
if lang == siteCfg.lang then
return familyPrefix
end
return familyPrefix .. lang .. ':'
end
}
for family, _ in pairs(siteCfg.familyToInterPrefix) do
table.insert(familys, family)
end
local p = {}
function p._main(args)
local lang = args['lang'] or args['1'] or args[1]
local family = args['family']
local wikiId = args['wiki']
if not wikiId then
if not lang and not family then
error('At least one of the parameters lang, family or wiki must be provided.')
end
wikiId = (lang or siteCfg.lang) .. (family or siteCfg.family)
end
local overrideTitle = args['title']
local entity = args['entity']
if not entity then
if overrideTitle then
entity = mw.wikibase.getEntityIdForTitle(overrideTitle)
if not entity then
error('Title "' .. overrideTitle .. '" isn\'t valid or there are no wikidata entity for this page yet.')
end
else
entity = mw.wikibase.getEntityIdForCurrentPage()
if not entity then
error('There are no wikidata entity for this page yet.')
end
end
end
local remotePage = mw.wikibase.getSitelink(entity, wikiId)
if remotePage then
return '[[:' .. siteCfg.getInterWikiFromWikiId(wikiId) .. remotePage .. ']]'
end
return args.fallback or error('Can\'t found interwiki for wikiId ' .. wikiId .. ' for entity ' .. entity .. '.')
end
function p.main(frame)
return p._main(frame.args)
end
return p