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

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
Ligne 16 : Ligne 16 :
 
end
 
end
 
if type(entity) == 'string' then
 
if type(entity) == 'string' then
entity = getEntity(entity)
+
entity = mw.wikibase.getEntityObject(entity)
 
end
 
end
 
if (not entity) or type(entity) ~= 'table' then
 
if (not entity) or type(entity) ~= 'table' then
Ligne 36 : Ligne 36 :
 
end
 
end
 
end
 
end
 
  
 
function p.getLink(entity, linktype, lang)
 
function p.getLink(entity, linktype, lang)
Ligne 50 : Ligne 49 :
 
elseif linktype == 'image' then
 
elseif linktype == 'image' then
 
return imageLink(entity)
 
return imageLink(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
 
end
 
local errormsg = i18n['invalid-linktype']
 
local errormsg = i18n['invalid-linktype']
Ligne 77 : Ligne 83 :
  
 
if type(entity) == 'string' then
 
if type(entity) == 'string' then
entity = getEntity(entity)
+
entity = mw.wikibase.getEntityObject(entity)
 
end
 
end
 
if not args then
 
if not args then
Ligne 104 : Ligne 110 :
 
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 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 linktype = params.link
local defaultlinktype = params.defaultlink
+
local defaultlinktype = params.defaultlink or 'wikidata'
 
local showotherlink = not(parenthesislink)
 
local showotherlink = not(parenthesislink)
  
Ligne 134 : Ligne 140 :
 
 
 
local link = p.getLink(entity, linktype, lang)
 
local link = p.getLink(entity, linktype, lang)
if (not link) and defaultlinktype then
+
 
link = p.getLink(entity, defaultlinktype, lang)
 
end
 
 
 
if link then
 
if link then
 
return str .. '[[' .. link .. '|' .. label .. ']]'
 
return str .. '[[' .. link .. '|' .. label .. ']]'
 
end
 
end
if showotherlink and (link ~= 'wikidata') and (defaultlink ~= 'wikidata') then
+
local rightlink = p.getLink(entity, 'wikipedia', 'en')
+
if (defaultlinktype ~= '-') then
 +
local rightlink
 +
if linktype then
 +
rightlink = p.getLink(entity, defaultlinktype, lang)
 +
end
 +
if not rightlink then
 +
rightlink = p.getLink(entity, 'wikidata', lang)
 +
end
 
if rightlink then
 
if rightlink then
return str .. label .. ' <small>([[' .. rightlink .. '|en]])</small>'
+
local prefix = mw.text.split(rightlink, ':')[2]
 +
return str .. label .. ' <small>([[' .. rightlink .. '|' .. prefix ']])</small>'
 
end
 
end
rightlink = p.getLink(entity, 'wikidata')
+
 
return str .. label .. ' <small>([[' .. rightlink .. '|d]])</small>'
 
return str .. label .. ' <small>([[' .. rightlink .. '|d]])</small>'
 
end
 
end

Version du 26 août 2015 à 17:03

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 = 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)
	elseif linktype == 'image' then
		return imageLink(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-- 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 or 'wikidata'
	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 link then
		return str .. '[[' .. link .. '|' .. label .. ']]'
	end
	
	if (defaultlinktype ~= '-') then
		local rightlink
		if linktype then
			rightlink = p.getLink(entity, defaultlinktype, lang)
		end
		if not rightlink then
			rightlink = p.getLink(entity, 'wikidata', lang)
		end
		if rightlink then
			local prefix = mw.text.split(rightlink, ':')[2]
			return str .. label .. ' <small>([[' .. rightlink .. '|' .. prefix ']])</small>'
		end
 
		return str .. label .. ' <small>([[' .. rightlink .. '|d]])</small>'
	end
	return str .. label
end

return p