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)
m (A changé le niveau de protection pour « Module:Wikidata/Formatage entité » ([Modifier=Autoriser uniquement les utilisateurs autopatrolled] (infini) [Renommer=Autoriser uniquement les administrateurs] (infini)))
 
(16 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 2 : Ligne 2 :
 
local defaultlang = mw.getContentLanguage():getCode()
 
local defaultlang = mw.getContentLanguage():getCode()
 
local tools = require 'Module:Wikidata/Outils'
 
local tools = require 'Module:Wikidata/Outils'
local getClaims = require "Module:Wikidata/Récup".getClaims
+
-- local getClaims = require "Module:Wikidata/Récup".getClaims -- chargé uniquement si nécessaire
 
local i18n = tools.i18n
 
local i18n = tools.i18n
  
Ligne 8 : Ligne 8 :
  
  
function p.getLabel(entity, lang, site, displayformat)
+
function p.getLabel(entity, lang, 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 14 : Ligne 14 :
  
 
lang = lang or defaultlang
 
lang = lang or defaultlang
site = site or (lang .. 'wiki')
+
 
+
if type(labelformat) == 'function' then
if (site == '-') then
+
return labelformat(entity)
return nil
 
 
end
 
end
 
 
 
if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
 
if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
return mw.wikibase.label(entity)
+
local str = mw.wikibase.label(entity)
 +
if str then -- mw.wikibase.label() ne fonctionne pas avec les redirect https://phabricator.wikimedia.org/T157868
 +
return str
 +
end
 
end
 
end
  
Ligne 27 : Ligne 29 :
 
entity = mw.wikibase.getEntityObject(entity)
 
entity = mw.wikibase.getEntityObject(entity)
 
end
 
end
if entity.labels and entity.labels[lang] then
+
 +
if entity and entity.labels and entity.labels[lang] then
 
return entity.labels[lang].value, true
 
return entity.labels[lang].value, true
 
end
 
end
Ligne 35 : Ligne 38 :
  
 
if (not entity) then
 
if (not entity) then
return formatError('entity-not-found')
+
return nil --formatError('entity-not-found')
 
end
 
end
 
local id = entity
 
local id = entity
Ligne 46 : Ligne 49 :
 
local speciallabels = params.speciallabels
 
local speciallabels = params.speciallabels
 
local displayformat = params.displayformat
 
local displayformat = params.displayformat
 +
local labelformat = params.labelformat
 
local defaultlabel = params.defaultlabel or id
 
local defaultlabel = params.defaultlabel or id
 
local linktype = params.link
 
local linktype = params.link
Ligne 62 : Ligne 66 :
 
 
 
 
label = p.getLabel(entity, lang, displayformat)
+
label = p.getLabel(entity, lang, labelformat)
if label and params.labelformat then
+
label = params.labelformat(label)
+
-- détermination du fait qu'on soit ou non en train de rendre l'élément sur la page de son article
end
+
local rendering_entity_on_its_page = tools.is_page_of_qid(id)
 +
 +
 
 
if not label then
 
if not label then
 
if (defaultlabel == '-') then  
 
if (defaultlabel == '-') then  
 
return nil
 
return nil
 
end
 
end
str = str .. tools.addcat(i18n['to translate'])
 
 
link = tools.siteLink(id, 'wikidata')
 
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
+
return str .. '[[' .. link .. '|' .. id .. ']]' .. tools.addcat(i18n['to translate'])
 +
-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
 
end
 
end
  
if (linktype == '-') then
+
if (linktype == '-') or rendering_entity_on_its_page then
 
return str .. label
 
return str .. label
 
end
 
end
  
 
local link = tools.siteLink(entity, linktype, lang)
 
local link = tools.siteLink(entity, linktype, lang)
 +
 +
 
if (not link) and defaultlinkquery then
 
if (not link) and defaultlinkquery then
 
defaultlinkquery.excludespecial = true
 
defaultlinkquery.excludespecial = true
 
defaultlinkquery.entity = entity
 
defaultlinkquery.entity = entity
local items = getClaims(defaultlinkquery)
+
local getClaims = require("Module:Wikidata/Récup").getClaims
if items then
+
local claims = getClaims(defaultlinkquery)
local id = tools.getMainId(items[1])
+
if claims then
link = tools.siteLink(id, linktype, lang)
+
for i, j in pairs(claims) do
 +
local id = tools.getMainId(j)
 +
link = tools.siteLink(id, linktype, lang)
 +
if link then
 +
break
 +
end
 +
end
 
end
 
end
 
end
 
end
+
 
if link then
+
if link then  
 
return str .. '[[' .. link .. '|' .. label .. ']]'
 
return str .. '[[' .. link .. '|' .. label .. ']]'
 
end
 
end
 +
 +
-- on est pas sur l'article de l'entité, et on a pas de lien de site
 
 
 
if (defaultlinktype ~= '-') then
 
if (defaultlinktype ~= '-') then
Ligne 110 : Ligne 126 :
 
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-wikidata')
 
else
 
else
 
title = tools.translate('see-another-project', site)
 
title = tools.translate('see-another-project', site)

Version actuelle datée du 17 mai 2017 à 13:42

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 -- chargé uniquement si nécessaire
local i18n = tools.i18n

local formatError = tools.formatError


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

	lang = lang or defaultlang

	if type(labelformat) == 'function' then
		return labelformat(entity)
	end
	
	if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
		local str = mw.wikibase.label(entity)
		if str then -- mw.wikibase.label() ne fonctionne pas avec les redirect https://phabricator.wikimedia.org/T157868
			return str
		end
	end

	if type(entity) == 'string' then
		entity = mw.wikibase.getEntityObject(entity)
	end
	
	if entity and 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 nil --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 labelformat = params.labelformat
	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)
	
	-- détermination du fait qu'on soit ou non en train de rendre l'élément sur la page de son article
	local rendering_entity_on_its_page = tools.is_page_of_qid(id)
		

	if not label then
		if (defaultlabel == '-') then 
			return nil
		end
		link = tools.siteLink(id, 'wikidata')
		return str .. '[[' .. link .. '|' .. id .. ']]' .. tools.addcat(i18n['to translate'])
-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
	end

	if (linktype == '-') or rendering_entity_on_its_page 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 getClaims = require("Module:Wikidata/Récup").getClaims
		local claims = getClaims(defaultlinkquery)
		if claims then
			for i, j in pairs(claims) do
				local id = tools.getMainId(j)
				link = tools.siteLink(id, linktype, lang)
				if link then
					break
				end
			end
		end	
	end

	if link then 
		return str .. '[[' .. link .. '|' .. label .. ']]'
	end

	-- on est pas sur l'article de l'entité, et on a pas de lien de site
	
	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-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