Ir al contenido

Módulo:Enlace Wikidata

De Wikisource, la biblioteca libre.
Documentación del módulo


Uso

Implementa {{Enlace Wikidata}}
Esta documentación está transcluida desde Módulo:Enlace Wikidata/doc.
Los editores pueden experimentar en la zona de pruebas
Por favor, añade las categorías a la subpágina de documentación.
(subpáginas - enlaces)

local nsother= require('Módulo:Namespace other')._namespace_other
local p = {}

-- Entrega un enlace a una página de un elemento de Wikidata de los siguientes sitios:
--  1. Wikisource
--  2. Wikipedia
--  3. Commons
--  4. Reasonator
local function linkwanted(label)
	if label ~= nil and label ~= '' then
		local args = {target='página'}
		args[1]=label..'<span style="color:red;font-size:smaller" title="Posible enlace a Wikidata">*</span>[[Categoría:Páginas con enlaces a elementos por identificar]]'
		args[2]=label
		return nsother(args)
	end
end
local function checkId(ID, label)
	if ID == '' then return linkwanted(label) end
	if not mw.wikibase.isValidEntityId(ID) then
		return "<span class='error'>" .. ID .. " no es un elemento de Wikidata válido</span>"
	end
	if not mw.wikibase.entityExists(ID) then
		return "<span class='error'>" .. ID .. " no existe en Wikidata</span>"
	end
end
local function formatlink(itemId, sitename, sitecode, sitelink, description, label)
	return '<span data-enlace-wikidata="https://www.wikidata.org/entity/'..itemId..
			'" class="enlace-wikidata enlace-wikidata-'..sitename..
			'">[[' .. sitecode .. ':' .. sitelink .. '|<span title="'..(description or '')..
			'">' .. label .. '</span>]]</span>'
end
function p.worklink(frame)
	local workId = frame.args.wikidata
	local label = frame.args.label
	
	local error = checkId(workId, label)
	if error then return error end

	local sitelink = mw.wikibase.getSitelink(workId, 'eswikisource')
	if sitelink then
		return p.link(frame)
	end

	local ediciones = mw.wikibase.getBestStatements( workId, 'P747' )
	if ediciones then
		for i, ed in pairs(ediciones) do
			local qid = ed and ed.mainsnak.datavalue.value.id
			if qid and mw.wikibase.getSitelink( qid, 'eswikisource' ) then
				return p.link({args={wikidata=qid, label=label}})
			end
		end
	end

	return p.link(frame)
end
function p.link(frame)
	local itemId = frame.args.wikidata
	local label = frame.args.label

	local error = checkId(itemId, label)
	if error then return error end

	local description = mw.wikibase.getDescription(itemId)
	if label == nil or frame.args.label == '' then
		label = mw.wikibase.getLabel(itemId)
	end

	-- enlace para propiedades
	if string.sub(itemId, 1, 1) == 'P' then
		return '[[d:Property:'..itemId..'|('..itemId..') '..label..']]'
	end
	-- enlace para QID
	local sitelinks = {'eswikisource', 'eswiki', 'commonswiki'}
	local interwikis = {'', 'w', 'commons'}
	local sitios = {'wikisource', 'wikipedia', 'commons'}
	for i = 1, #sitelinks do
		local sitelink = mw.wikibase.getSitelink(itemId, sitelinks[i])
		if sitelink then
			return formatlink(itemId, sitios[i], interwikis[i], sitelink, description, label)
		end
	end
	-- Si no encuentra .
	return '<span data-enlace-wikidata="https://www.wikidata.org/entity/'..itemId..'" class="plainlinks enlace-wikidata enlace-wikidata-reasonator">[https://reasonator.toolforge.org/?q=' .. itemId .. ' ' .. label .. ']</span>'

	
end

return p