Účelem modulu CommonsLink je sjednocení přebírání odkazů na galerie a kategorie Wikimedia Commons z Wikidat.

Použití

{{#invoke:CommonsLink|gallery}}

z položky Wikidat přebere vlastnost galerie na Commons (P935), pokud je dostupná, případně mezijazykový odkaz, pokud odkazuje do hlavního jmenného prostoru
pokud není nalezen vhodný odkaz, provede se to samé i v položce, na kterou se ze stávající odkazuje pomocí hlavní kategorie tématu (P910) (pokud taková existuje)

{{#invoke:CommonsLink|category}}

z položky Wikidat přebere vlastnost kategorie na Commons (P373), pokud je dostupná, případně mezijazykový odkaz, pokud odkazuje do jmenného prostoru kategorií
pokud není nalezen vhodný odkaz, provede se to samé i v položce, na kterou se ze stávající odkazuje pomocí hlavní kategorie tématu (P910) (pokud taková existuje)

{{#invoke:CommonsLink|any}}

odpovídá category or gallery, tj. přebere kategorii nebo galerii, pokud kategorie není dostupná (prakticky využitelné pouze s link=true)

Parametr prefix=true vynutí název stránky se jmenným prostorem (u kategorií). Parametr link=true změní výstup modulu na interwiki odkaz.


require 'Modul:No globals'

local WD = require 'Modul:Wikidata'
local lib = require 'Modul:Wikidata/lib'
local getArgs = (require 'Modul:Arguments').getArgs

local function gallery(args, of)
	args.property = 'P935'
	args.of = of
	local link = WD.getRawValueFromLua(args)
	if not link then
		args.site = 'commonswiki'
		link = WD.getSitelinkFromLua(args)
		if not link or mw.ustring.sub(link, 1, #'Category:') == 'Category:' then
			return nil
		end
	end
	if lib.IsOptionTrue(args, 'link') then
		return mw.ustring.format('[[c:%s|%s]]', link, link)
	end
	return link
end

local function category(args, of)
	local args = args --mw.clone(args)
	args.property = 'P373'
	args.of = of
	local link = WD.getRawValueFromLua(args)
	if not link then
		args.site = 'commonswiki'
		link = WD.getSitelinkFromLua(args)
		if not link or mw.ustring.sub(link, 1, #'Category:') ~= 'Category:' then
			return nil
		else
			link = mw.ustring.sub(link, #'Category:' + 1)
		end
	end
	if lib.IsOptionTrue(args, 'link') then
		return mw.ustring.format('[[c:Category:%s|%s]]', link, link)
	end
	if lib.IsOptionTrue(args, 'prefix') then
		return 'Category:' .. link
	end
	return link
end

local p = {}

function p._gallery(args)
	return gallery(args) or gallery(args, 'P910')
end

function p.gallery(frame)
	return p._gallery(getArgs(frame, { noOverwrite = false, frameOnly = true }))
end

function p._category(args)
	return category(args) or category(args, 'P910')
end

function p.category(frame)
	return p._category(getArgs(frame, { noOverwrite = false, frameOnly = true }))
end

function p._any(args)
	return p._category(args) or p._gallery(args) 
end

function p.any(frame)
	return p._any(getArgs(frame, { noOverwrite = false, frameOnly = true }))
end

return p