« Module:Numéro Q » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
m correction variable globale
TomT0m (discuter | contributions)
Aucun résumé des modifications
 
(13 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
-- extracting Q titles from wikilinks like [[d:Q1]], [[:d:Q1]], [[wikidata:Q1]], [[d:Q1|Q1]] or [[d:Q1|plop]]
-- extracting Q titles from wikilinks like [[d:Q1]], [[:d:Q1]], [[wikidata:Q1]], [[d:Q1|Q1]] or [[d:Q1|plop]]
local function id_from_wd_wikilink(link)
local function qid_from_wd_wikilink(link)
local attempt = link
local attempt = link
:gsub("^%[%[:?d:", "")
:gsub("^%[%[:?d:", "")
:gsub("^%[%[:?wikidata:", "")
:gsub("^%[%[:?wikidata:", "")
:gsub("%|.*%]%]$", "")
:gsub("%|.*%]%]$", "")
:gsub("%]%]$", "")
:gsub("%]%]$", "")
if attempt:find("^Q[0-9]+$") then return attempt end
if attempt:find("^Q[0-9]+$") then
return attempt
end
end
end


local function qid_from_any(input, erreur_si_non_trouve, test_redirection)
-- in case template family like {{PAGENAME}} with its bug are used, apply the
local attempt
local function qid_from_htmlcoded_title(link)
return mw.wikibase.getEntityIdForTitle(mw.title.makeTitle("", mw.getCurrentFrame():callParserFunction("#titleparts", link)).text)
end


attempt = qid_from_wd_wikilink(input)
local function id_from_any(link, test_redirection)
if attempt then
local title = mw.title.makeTitle("", link)
return attempt
local maybe_qid = id_from_wd_wikilink(link) or
end
(title and mw.wikibase.getEntityIdForTitle(title.text)) or

qid_from_htmlcoded_title(link)
local decodedInput = mw.text.decode(input) -- in case template family like {{PAGENAME}} with its bug are used
if maybe_qid then return maybe_qid end
local title = mw.title.new(decodedInput)
if (not maybe_qid) and test_redirection then
if title.isRedirect then
if not title then
error("le titre « " .. link .. " » est une redirection qui n’est pas reliée à un élément Wikidata" )
error('le titre « ' .. input .. ' » est invalide')
end

attempt = mw.wikibase.getEntityIdForTitle(title.prefixedText)
if attempt then
return attempt
end

if erreur_si_non_trouve then
if test_redirection and title.isRedirect then
error("le titre « " .. input .. " » est une redirection qui n’est pas reliée à un élément Wikidata")
else
error("l’article de titre « " .. input .. " » n’existe pas ou n’est pas lié à un élément Wikidata")
end
end
end
end
error("l’article de titre « " .. link .. " » n’existe pas ou n’est pas lié à un élément Wikidata" )
end
end


return {
return {
id_from_wd_wikilink = id_from_wd_wikilink,
id_from_any = id_from_any,

numero = function (frame)
numero = function (frame)
if frame.args[1] == '' then
if frame.args[1] == '' then
error("pas de titre d’article fourni au modèle (probablement « Numéro Q »), c’est un paramètre requis")
error("pas de titre d’article fourni au modèle (probablement « Numéro Q »), c’est un paramètre requis")
end
end
local tester_redirection = true
local erreur_si_non_trouve = true
if frame.args["tester_redirection"] == "non" then
if frame.args["erreur si non trouvé"] == "non" then
tester_redirection = false
erreur_si_non_trouve = false
end
end
local test_redirection = true
return id_from_any(frame.args[1], tester_redirection)
if frame.args["test redirection"] == "non" then
end
test_redirection = false
end
return qid_from_any(frame.args[1], erreur_si_non_trouve, test_redirection) or ''
end,
_numero = qid_from_any
}
}

Dernière version du 21 mars 2022 à 14:39

 Documentation[voir] [modifier] [historique] [purger]

Module support pour {{Numéro Q}} :

Q1

Q1

Utilisation

Fonctions exportables :

  • numero(frame) – Fonction appelable depuis un modèle. Tente de trouver le numéro Q pertinent à partir d’un titre d’article, d’une url d’un élément Wikidata, ou d’une chaîne sous la forme "Qxxxx" .
    Paramètres, voir au dessous et la documentation de {{Numéro Q}}
  • _numero(input, erreur_si_non_trouve, test_redirection) – fonction lua appelée par la fonction au dessus, exportée pour appeler depuis un autre module Lua. Paramètre:
    input
    une chaîne. Peut-être un titre d’article, une uri pour copier/coller depuis la barre d’adresse sur Wikidata, un wikilien au format [[titre]]
    erreur_si_non_trouvé
    par défaut "oui", positionner à "non" si on ne veut qu’une chaîne vide et pas une chaîne d’erreur de modèle wiki dans le cas où la fonction ne trouve pas d’identifiant.
    test_redirection
     booléen. Dans le cas où le titre d’article n’a pas d’élément et si on affiche une erreur, signaler si c’est un titre de redirection.


Modules externes et autres éléments dont ce module a besoin pour fonctionner :

  • mw.title – description (courte description expliquant la dépendance de ce module externe).

Exemples

Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.

Q1

Q1

Q42891670

-- extracting Q titles from wikilinks like [[d:Q1]], [[:d:Q1]], [[wikidata:Q1]], [[d:Q1|Q1]] or [[d:Q1|plop]]
local function qid_from_wd_wikilink(link)
	local attempt = link
		:gsub("^%[%[:?d:", "")
		:gsub("^%[%[:?wikidata:", "")
		:gsub("%|.*%]%]$", "")
		:gsub("%]%]$", "")
	if attempt:find("^Q[0-9]+$") then
		return attempt
	end
end

local function qid_from_any(input, erreur_si_non_trouve, test_redirection)
	local attempt

	attempt = qid_from_wd_wikilink(input)
	if attempt then
		return attempt
	end

	local decodedInput = mw.text.decode(input) -- in case template family like {{PAGENAME}} with its bug are used
	local title = mw.title.new(decodedInput)
	if not title then
		error('le titre « ' .. input .. ' » est invalide')
	end

	attempt = mw.wikibase.getEntityIdForTitle(title.prefixedText)
	if attempt then
		return attempt
	end

	if erreur_si_non_trouve then
		if test_redirection and title.isRedirect then
			error("le titre « "  .. input .. " » est une redirection qui n’est pas reliée à un élément Wikidata")
		else
			error("l’article de titre « "  .. input .. " » n’existe pas ou n’est pas lié à un élément Wikidata")
		end
	end
end

return {
	numero = function (frame)
		if frame.args[1] == '' then
			error("pas de titre d’article fourni au modèle (probablement « Numéro Q »), c’est un paramètre requis")
		end
		local erreur_si_non_trouve = true
		if frame.args["erreur si non trouvé"] == "non" then
			erreur_si_non_trouve = false
		end
		local test_redirection = true
		if frame.args["test redirection"] == "non" then
			test_redirection = false
		end
		return qid_from_any(frame.args[1], erreur_si_non_trouve, test_redirection) or ''
	end,
	_numero = qid_from_any
}