Module:Wikidata/Formatage entité : Différence entre versions
(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)) |
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))) |
||
(15 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 | + | 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 | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
if type(labelformat) == 'function' then | if type(labelformat) == 'function' then | ||
return labelformat(entity) | return labelformat(entity) | ||
Ligne 25 : | Ligne 20 : | ||
if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique | 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 | end | ||
Ligne 32 : | Ligne 30 : | ||
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 40 : | 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 51 : | 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 68 : | Ligne 67 : | ||
label = p.getLabel(entity, lang, labelformat) | 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 not label then | ||
Ligne 73 : | Ligne 76 : | ||
return nil | return nil | ||
end | end | ||
− | |||
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 | + | local getClaims = require("Module:Wikidata/Récup").getClaims |
− | if | + | local claims = getClaims(defaultlinkquery) |
− | local id = tools.getMainId( | + | 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 | ||
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 113 : | 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, class, title = 'd', "indicateur-langue", tools.translate('see- | + | 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> (' .. 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