Module:TradRef
La documentation pour ce module peut être créée à Module:TradRef/doc
-- À faire :
-- * Vérifier que le modèle est seulement utilisé dans l'espace de noms principal
-- ** S'inspirer de [[Modèle:Traduction/Référence]]
local moduleLangue = require 'Module:Langue'
local p = {}
function p.getNomProjet(prefixe, projet)
local prefixes = {
commons = 'Wikimedia Commons',
meta = 'Meta-Wiki',
species = 'Wikispecies',
}
local projets = {
wikibooks = 'Wikilivres',
wikidata = 'Wikidata',
wikinews = 'Wikinews',
wikipedia = 'Wikipédia',
wikisource = 'Wikisource',
wikiversity = 'Wikiversité',
wikivoyage = 'Wikivoyage',
wiktionary = 'Wiktionnaire',
}
return prefixes[prefixe] or projets[projet] or '(projet inconnu)'
end
function p.parseUrl(url)
-- Deux formats d'URL :
-- * https://de.wikipedia.org /w/index.php?title= Amandus_(Bagaudenf%C3%BChrer)&oldid=148366994
-- * https://de.wikipedia.org /wiki/ Amandus_(Bagaudenf%C3%BChrer)?oldid=148366994
local uri = mw.uri.new(url)
local host, path, query = uri.host, uri.path, uri.query
if not (host and path and query) then
return
end
local prefixe, projet = host:match('^(%a+)%.(%a+)%.org$')
local title
if path == '/w/index.php' and type(query.title) == 'string' and query.title ~= '' then
title = query.title
elseif path:sub(1, 6) == '/wiki/' and path:sub(7) ~= '' then
title = path:sub(7)
end
local oldid
if type(query.oldid) == 'string' and query.oldid:match('^%d+$') then
oldid = query.oldid
end
if prefixe and projet and title and oldid then
return prefixe, projet, title, oldid
end
end
function p.getIndicateurAndFragment(url)
local prefixe, projet, title, oldid = p.parseUrl(url)
if not prefixe then
return
end
local htmlIndicateur, nomProjet
if prefixe == 'commons' or prefixe == 'meta' or prefixe == 'species' or prefixe == 'www' then
-- Pour les wikis multilingues :
-- * Commons : https://commons.wikimedia.org/w/index.php?title=Accueil&oldid=169324172
-- * Meta-Wiki : https://meta .wikimedia.org/w/index.php?title=Accueil&oldid=15738990
-- * Wikispecies : https://species.wikimedia.org/w/index.php?title=Accueil&oldid=2717007
-- * Wikidata : https:// www.wikidata.org/w/index.php?title=Wikidata:Main_Page&oldid=400496920
-- Retourne {{mul}} comme indicateur de langue et le fragment de phrase « de la page de Wikimedia Commons en ... (voir liste des auteurs) »
-- (Les projets sans langue précisée sont, en théorie, multilingues.)
htmlIndicateur = moduleLangue.indicationMultilingue({})
nomProjet = p.getNomProjet(prefixe, projet)
else
-- Pour les wikis unilingues (WIKT.ES, WP.EN, WS.DE...)
-- Retourne l'indicateur de langue et le fragment de phrase « de la page de Wiki... en ... (voir liste des auteurs) »
htmlIndicateur = moduleLangue.indicationDeLangue({'', prefixe})
nomProjet = p.getNomProjet(prefixe, projet) .. ' en ' .. moduleLangue.lienLangue(prefixe)
end
-- Remplacer %C3%B par un caractère Unicode, et _ par une espace
local titleDecoded = mw.uri.decode(title, 'WIKI')
local linkOldid = '<span class="plainlinks">[//' .. prefixe .. '.' .. projet .. '.org/w/index.php?title=' .. title .. '&oldid=' .. oldid .. ' ' .. titleDecoded .. ']</span>'
local linkHistory = '<span class="plainlinks">[//' .. prefixe .. '.' .. projet .. '.org/w/index.php?title=' .. title .. '&action=history voir la liste des auteurs]</span>'
local htmlFragment = 'de la page de ' .. nomProjet .. ' intitulée « ' .. linkOldid .. ' » <small>(' .. linkHistory .. ')</small>'
return htmlIndicateur, htmlFragment
end
function p.ConstruireTradRef(frame)
local args = frame:getParent().args
local hasErrors = false
-- Selon les « préfixes » d'URL (en, de, www, commons...), noter des informations
local indicateurs = {}
local fragments = {}
for i = 1, 5 do
local nomParam = 'url'..i
if i == 1 and not args.url1 and args.url then
nomParam = 'url'
end
local url = args[nomParam]
if not url then
break
end
indicateurs[i], fragments[i] = p.getIndicateurAndFragment(url)
if not indicateurs[i] then
indicateurs[i], fragments[i] = '-', 'paramètre <code>'..nomParam..'</code> invalide'
hasErrors = true
end
end
-- Composer le message à l'intention des lecteurs
local html
if not args.url1 and not args.url then
html = 'Chaque paramètre url1, url2, url3... doit être suivi d\'une adresse web.'
hasErrors = true
elseif args.url6 then
html = 'Le modèle n\'accepte pas plus que 5 adresses web.'
hasErrors = true
else
html = '<p><span style="padding-left: 1.2em;">'
.. mw.text.listToText(indicateurs, '/', '/')
.. ' Cet article est partiellement ou en totalité issu '
.. mw.text.listToText(fragments)
.. '.</span></p>'
end
if hasErrors then
html = html .. '[[Kategori:Page utilisant le modèle TradRef avec une syntaxe erronée]]'
end
return html
end
return p