Module:Wikidata/Formatage entité

De Lagny-sur-Marne Wiki
Révision datée du 27 août 2015 à 07:29 par Zolo (discussion)
Aller à : navigation, rechercher

La documentation pour ce module peut être créée à Module:Wikidata/Formatage entité/doc

local p = {}
local defaultlang = 'fr'
local tools = require 'Module:Wikidata/Outils'
local i18n = tools.i18n

local function wikipediaLink(entity, lang)
	lang = lang or defaultlang
	if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
		return mw.wikibase.sitelink(entity)
	end
	if type(entity) == 'string' then
		entity = mw.wikibase.getEntityObject(entity)
	end
	if (not entity) or type(entity) ~= 'table' then
		return formatError('entity-not-found')
	end
	local link = entity:getSitelink(lang .. 'wiki')
	if link then
		return ':' .. lang .. ':' .. link
	end
end

local function wikidataLink(entity)
	if type(entity) == 'string' then
		return ':d:' .. entity
	elseif type(entity) == 'table' then
		return ':d:' .. entity.id
	elseif type(entity) == nil then
		return formatError('entity-not-found')
	end
end

function p.getLink(entity, linktype, lang)
	lang = lang or defaultlang
	linktype = linktype or 'wikipedia'
	if linktype == '-' then
		return nil
	end
	if linktype == 'wikipedia' then
		return wikipediaLink(entity, lang)
	elseif linktype == 'wikidata' then
		return wikidataLink(entity)
	end
	
	-- analyse les valeurs du type 'enwiki' pour linktype = 'wikipedia', lang = 'en'
	local endstr = string.sub(linktype, #linktype - 3, #linktype)
	if endstr == 'wiki' then
		lang = string.sub(linktype, 1, #linktype - 4)
		return wikipediaLink(entity, lang)
	end
	--[[
	local errormsg = i18n['invalid-linktype']
	if type(linktype) ~= 'string' then
		errormsg = errormsg .. ': ' .. linktype
	else
		errormsg = errormsg .. ':' .. type(linktype) 
	end
	return formatError(errormsg) 
	]]--
end

function p.getLabel(entity, lang, site, displayformat)
	if (not entity) then
		return formatError('entity-not-found')
	end

	lang = lang or defaultlang
	site = site or (lang .. 'wiki')
	
	if (site == '-') then
		return nil
	end
	
	if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
		return mw.wikibase.label(entity)
	end

	if type(entity) == 'string' then
		entity = mw.wikibase.getEntityObject(entity)
	end
	if not args then
		args = {}
	end
	if entity.labels and entity.labels[lang] then
		return entity.labels[lang].value, true
	end
end

function p.formatEntity( entity, params )

	if (not entity) then
		return formatError('entity-not-found')
	end
	local id = entity
	if type(id) == 'table' then
		id = id.id
	end


	params = params or {}
	local lang = params.lang or lang
	local speciallabels = params.speciallabels
	local displayformat = params.displayformat
	local defaultlabel = params.defaultlabel or id
	local linktype = params.link
	local defaultlinktype = params.defaultlink or 'enwiki'
	local showotherlink = not(parenthesislink)


	if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
		return speciallabels[id]
	end
	if params.displayformat == 'raw' then
		return id
	end

	local link, label
	local str = '' -- l'intégralité du text à retourner	
	
	
	label = p.getLabel(entity, lang, displayformat)
	
	if not label then
		if (defaultlabel == '-') then 
			return nil
		end
		str = str .. tools.addcat(i18n['to translate'])
		link = p.getLink(id, 'wikidata')
		return str .. '[[' .. link .. '|' .. id .. ']]'-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
	end

	
	if (linktype == '-') then
		return str .. label
	end
	
	local link = p.getLink(entity, linktype, lang)

	if link then
		return str .. '[[' .. link .. '|' .. label .. ']]'
	end
	
	if (defaultlinktype ~= '-') then
		local rightlink = p.getLink(entity, defaultlinktype, lang) or p.getLink(entity, 'wikidata', lang)
		if rightlink then
			local prefix = mw.text.split(rightlink, ':')[2] or 'voir ailleurs'
			return str .. (label or '?') .. ' <small>([[' .. rightlink .. '|' .. prefix .. ']])</small>'
		end
	end
	return str .. label
end

return p