Module:Wikidata/Formatage entité : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(Nouvelle page : local defaultlang = 'fr' local function imageLink(entity) local val = p.formatStatements{property = 'P18', entity = entity, numval = 1} if not val then return nil end retur...)
 
Ligne 1 : Ligne 1 :
 +
local p = {}
 
local defaultlang = 'fr'
 
local defaultlang = 'fr'
  

Version du 26 août 2015 à 15:53

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

local p = {}
local defaultlang = 'fr'

local function imageLink(entity)
	local val = p.formatStatements{property = 'P18', entity = entity, numval = 1}
	if not val then
		return nil
	end
	return ':File:' .. val
end

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 = getEntity(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)
	elseif linktype == 'image' then
		return imageLink(entity)
	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 = getEntity(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-- usecase : titres d'infobox : s'il n'y a pas de libellé, afficher le titre de la page
	local linktype = params.link
	local defaultlinktype = params.defaultlink
	local showotherlink = not(parenthesislink)


	if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
		return speciallabels[id]
	end
	if args.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 .. addcat(i18n['to translate'])
		link = p.getLink(id, 'wikidata') -- si pas de libellé, lier vers Wikidata pour avoir quelque chose de lisible
		return str .. '[[' .. link .. '|' .. id .. ']]'
	end

	
	if (linktype == '-') then
		return str
	end
	
	local link = p.getLink(entity, linktype, lang)
	if (not link) and defaultlinktype then
		link = p.getLink(entity, defaultlinktype, lang)
	end
	
	if link then
		return str .. '[[' .. link .. '|' .. label .. ']]'
	end
	if showotherlink and (link ~= 'wikidata') and (defaultlink ~= 'wikidata') then
		local rightlink = p.getLink(entity, 'wikipedia', 'en')
		if rightlink then
			return str .. label .. ' <small>([[' .. rightlink .. '|en]])</small>'
		end
		rightlink = p.getLink(entity, 'wikidata')
		return str .. label .. ' <small>([[' .. rightlink .. '|d]])</small>'
	end
	return str .. label
end

return p