モジュール:InterwikiLink
モジュールの解説[作成]
require('strict')
local p = {}
local wb = mw.wikibase or error("wikibase is not installed.")
--[[
@return https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua#mw.wikibase.entity | nil
]]
function p.getCurrentEntity()
return wb.getEntity()
end
function p.getEntity(id)
return wb.getEntity("Q" .. tostring(id))
end
--[[
@param {string} proj
@param {string} label
@param {string | nil} qid
@return {string | nil}
]]
local function check_wikidata(proj, label, qid)
local entity = qid and p.getEntity(qid) or p.getCurrentEntity()
local prefixes = {
["jawiki"] = "",
["jawiktionary"] = "wikt:",
["jawikibooks"] = "b:",
["jawikiquote"] = "q:",
["jawikinews"] = "n:",
["jawikisource"] = "s:",
["jawikiversity"] = "v:",
["jawikivoyage"] = "voy:",
["metawiki"] = "m:",
["commonswiki"] = "c:",
["wikidatawiki"] = "d:",
}
local prefix = prefixes[proj] or error("site " .. proj .. " doesn't exist.")
-- piped link text
local linktext = label and "|" .. label or ""
--[[https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua#mw.wikibase.getSitelink]]
local sl = entity:getSitelink(proj)
if sl then
return "[[" .. prefix .. sl .. linktext .. "]]"
else
-- non-existent
return nil
end
end
local function link_from_wikidata(file, pj_int, pj_abbr, qid)
local link = check_wikidata(pj_int, pj_abbr, qid)
link = link and link or "<del>" .. pj_abbr .. "</del>"
return "* [[File:" .. file .. "|16px|link=]]" .. link .. "\n"
end
function p.manually(args)
-- TODO 現在ParserFunctionsで実装されているwikidata=noの処理をここに持ってくる
end
function p.from_wikidata(frame, qid)
qid = qid or nil
-- convert into wikitext
local wikitext = frame:expandTemplate { title="flatlist", args = {
style = "border:#AAA solid 1px;padding:0.3em;line-height:1.0;",
-- {{Flatlist}}は{{{1}}}しか受け付けない。{{{1}}}の型は箇条書き要素。
link_from_wikidata("Wikipedia-logo-v2.svg", "jawiki", "jawp", qid) ..
link_from_wikidata("Wiktionary-logo.svg", "jawiktionary", "jawt", qid) ..
link_from_wikidata("Wikibooks-logo.svg", "jawikibooks", "jawb", qid) ..
link_from_wikidata("Wikiquote-logo.svg", "jawikiquote", "jawq", qid) ..
link_from_wikidata("Wikinews-logo.png", "jawikinews", "jawn", qid) ..
link_from_wikidata("Wikisource-logo.svg", "jawikisource", "jaws", qid) ..
link_from_wikidata("Wikiversity-logo.svg", "jawikiversity", "jawv", qid) ..
link_from_wikidata("Wikivoyage-logo.svg", "jawikivoyage", "jawy", qid) ..
link_from_wikidata("Commons-logo.svg", "commonswiki", "commons", qid) ..
link_from_wikidata("Wikimedia Community Logo.svg", "metawiki", "meta", qid) ..
link_from_wikidata("Wikidata-logo.svg", "wikidatawiki", "wikidata", qid)
} }
mw.log(wikitext)
return wikitext
end
function p.main(frame)
return p.from_wikidata(frame, nil)
end
return p