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

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(getLabel : suppression de args, variable globale non utilisée)
(gestion plus logique de labelformat, harmonisation de la mise en forme entre le "d" vers wikidata et le "en" vers enwiki (même si je n'aime pas trop la police))
Ligne 8 : Ligne 8 :
  
  
function p.getLabel(entity, lang, site, displayformat)
+
function p.getLabel(entity, lang, site, labelformat)
 
if (not entity) then
 
if (not entity) then
 
return nil -- ou option de gestion des erreurs ?
 
return nil -- ou option de gestion des erreurs ?
Ligne 18 : Ligne 18 :
 
if (site == '-') then
 
if (site == '-') then
 
return nil
 
return nil
 +
end
 +
 +
if type(labelformat) == 'function' then
 +
return labelformat(entity)
 
end
 
end
 
 
Ligne 27 : Ligne 31 :
 
entity = mw.wikibase.getEntityObject(entity)
 
entity = mw.wikibase.getEntityObject(entity)
 
end
 
end
 +
 
if entity.labels and entity.labels[lang] then
 
if entity.labels and entity.labels[lang] then
 
return entity.labels[lang].value, true
 
return entity.labels[lang].value, true
Ligne 62 : Ligne 67 :
 
 
 
 
label = p.getLabel(entity, lang, displayformat)
+
label = p.getLabel(entity, lang, labelformat)
if label and params.labelformat then
+
 
label = params.labelformat(label)
 
end
 
 
if not label then
 
if not label then
 
if (defaultlabel == '-') then  
 
if (defaultlabel == '-') then  
Ligne 110 : Ligne 113 :
 
icon, class, title = langcode, "indicateur-langue", tools.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))
 
icon, class, title = langcode, "indicateur-langue", tools.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))
 
elseif site == 'wikidata' then
 
elseif site == 'wikidata' then
icon, title = 'd', tools.translate('see-another-project', 'Wikidata')
+
icon, class, title = 'd',  "indicateur-langue", tools.translate('see-another-project', 'Wikidata')
 
else
 
else
 
title = tools.translate('see-another-project', site)
 
title = tools.translate('see-another-project', site)

Version du 25 février 2016 à 20:31

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

local p = {}
local defaultlang = mw.getContentLanguage():getCode()
local tools = require 'Module:Wikidata/Outils'
local getClaims = require "Module:Wikidata/Récup".getClaims
local i18n = tools.i18n

local formatError = tools.formatError


function p.getLabel(entity, lang, site, labelformat)
	if (not entity) then
		return nil -- ou option de gestion des erreurs ?
	end

	lang = lang or defaultlang
	site = site or (lang .. 'wiki')
	
	if (site == '-') then
		return nil
	end
	
	if type(labelformat) == 'function' then
		return labelformat(entity)
	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 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 defaultlang
	local speciallabels = params.speciallabels
	local displayformat = params.displayformat
	local defaultlabel = params.defaultlabel or id
	local linktype = params.link
	local defaultlinktype = params.defaultlink
	local defaultlinkquery = params.defaultlinkquery

	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, labelformat)

	if not label then
		if (defaultlabel == '-') then 
			return nil
		end
		str = str .. tools.addcat(i18n['to translate'])
		link = tools.siteLink(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	= tools.siteLink(entity, linktype, lang)
	if (not link) and defaultlinkquery then
		defaultlinkquery.excludespecial = true
		defaultlinkquery.entity = entity
		local items = getClaims(defaultlinkquery)
		if items then
			local id = tools.getMainId(items[1])
			link = tools.siteLink(id, linktype, lang)
		end	
	end
	
	if link then
		return str .. '[[' .. link .. '|' .. label .. ']]'
	end
	
	if (defaultlinktype ~= '-') then
		local linktype
		local sidelink, site, langcode
		if defaultlinktype then
			sidelink, site, langcode = tools.siteLink(entity, linktype, lang)
		else
			sidelink, site, langcode = tools.siteLink(entity, 'wiki', 'en')
		end
		if not sidelink then
			sidelink, site = tools.siteLink(entity, 'wikidata')
		end
		
		local icon, class, title = site, nil, nil -- le texte affiché du lien
		if site == 'wiki' then
			icon, class, title = langcode, "indicateur-langue", tools.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))	
		elseif site == 'wikidata' then
			icon, class, title = 'd',  "indicateur-langue", tools.translate('see-another-project', 'Wikidata')		
		else
			title = tools.translate('see-another-project', site)
		end
		local val = '[[' .. sidelink .. '|' .. '<span class = "' .. (class or '').. '" title = "' .. (title or '') .. '">' .. icon .. '</span>]]'
		return str  .. label .. '<small>&nbsp;(' .. val .. ')</small>'
	end 
	return str .. label
end

-- Fonction dépréciée
function p.getLink(entity, linktype, lang)
	return tools.siteLink(entity, linktype, lang)
end

return p