Mòdul:WikidataCommonsCat

De Viquidites

Mòdul de suport a la plantilla:Commonscat i similars. Obté la pàgina de Commons definida a Wikidata segons les següents possibilitats:

  1. Enllaç al lloc commons en l'element associat a la pàgina, si és una categoria.
  2. Enllaç al lloc commons definit en el valor de categoria principal (P910).
  3. Enllaç al lloc commons definit en el valor de categoria relacionada amb la llista (P1754).
  4. Valor definit a categoria de Commons (P373).
  5. Enllaç al lloc commons en l'element associat a la pàgina, si és una galeria.
  6. Text proporcionat al paràmetre default.

Sintaxi completa:

{{#invoke:WikidataCommonsCat|getCommonslink|<qid>|default= }}

Els paràmetres són opcionals:

  • 1: l'identificador Qid, per defecte serà l'element associat a la pàgina. En general no serà necessari.
  • default=: valor per defecte en cas de no trobar cap valor a Wikidata.

Dependències:


local p = {}

function p.getCommonslink(frame)
	local args = frame.args or frame
	local qid = string.upper(mw.text.trim(args[1] or ""))
	if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
	if not qid then return nil end
	
	local sitelink_cat
	local sitelink = mw.wikibase.getSitelink(qid, "commonswiki")
	if not sitelink or sitelink:sub(1,9) ~= "Category:" then
		-- check for topic's main category
		local catid
		local prop = mw.wikibase.getBestStatements(qid, "P910")[1]
		if prop then
			catid = prop.mainsnak.datavalue and prop.mainsnak.datavalue.value.id
			sitelink_cat = mw.wikibase.getSitelink(catid, "commonswiki")
		end
		if not sitelink_cat then
			-- check for list's main category
			prop = mw.wikibase.getBestStatements(qid, "P1754")[1]
			if prop then
				catid = prop.mainsnak.datavalue and prop.mainsnak.datavalue.value.id
				sitelink_cat = mw.wikibase.getSitelink(catid, "commonswiki")
			end
			if not sitelink_cat then
				-- check for Commons category (string value)
				prop = mw.wikibase.getBestStatements(qid, "P373")[1]
				if prop then
					sitelink_cat = prop.mainsnak.datavalue and prop.mainsnak.datavalue.value
					if sitelink_cat then
						sitelink_cat = "Category:" .. sitelink_cat
					end
				end
			end
		end
	end
	
	return sitelink_cat or sitelink or args.default
end

return p