「モジュール:InterwikiLink」の版間の差分

    提供:ManyoWiki
    (strict)
     
    (1版 をインポートしました)
     

    2023年7月30日 (日) 21:49時点における最新版

    このモジュールについての説明文ページを モジュール:InterwikiLink/doc に作成できます

    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