Module:TradRef
Apparence
[voir] [modifier] [historique] [purger]
Ce module Lua est utilisé par le modèle {{TradRef}}.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- À faire :
-- * Tester que oldid est uniquement composé de chiffres
-- * 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( szProjet )
local projets = {
commons = 'Wikimedia Commons',
meta = 'Meta-Wiki',
species = 'Wikispecies',
wikibooks = 'Wikilivres',
wikidata = 'Wikidata',
wikinews = 'Wikinews',
wikipedia = 'Wikipédia',
wikisource = 'Wikisource',
wikiversity = 'Wikiversité',
wikivoyage = 'Wikivoyage',
wiktionary = 'Wiktionnaire',
}
return projets[szProjet] or '(projet inconnu)'
end
function p.getMultilingue(szUrl)
-- Seulement 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.)
-- Deux formats d'URL :
-- * https://commons.wikimedia.org /w/index.php?title= File... &oldid=232035766
-- * https://commons.wikimedia.org /wiki/ File... ?oldid=232035766
local szPrefixe, szProjet, szTitle, szOldid = '', '', '', ''
local szTest = string.match(szUrl, 'https://%a+%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
if szTest ~= nil then
szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')
else
szPrefixe, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/wiki/(.+)%?oldid=(%d+)')
end
-- Remplacer %C3%B par un caractère Unicode, et _ par une espace
local szTitleDecoded = mw.uri.decode( szTitle , "WIKI" )
-- Le préfixe est : commons, meta-wiki, species ou www
local szNomProjet = p.getNomProjet( szPrefixe )
local szHtmlIndicateur = moduleLangue.indicationMultilingue({})
local szLinkOldid = '<span class="plainlinks">[//' .. szPrefixe .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&oldid=' .. szOldid .. ' ' .. szTitleDecoded .. ']</span>'
local szLinkHistory = '<span class="plainlinks">[//' .. szPrefixe .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&action=history voir la liste des auteurs]</span>'
local szHtmlFragment = 'de la page de ' .. szNomProjet .. ' intitulée « ' .. szLinkOldid .. ' » <small>(' .. szLinkHistory .. ')</small>'
return szHtmlIndicateur , szHtmlFragment
end
function p.getUnilingue(szUrl)
-- Seulement 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) »
-- 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 szIetf, szProjet, szTitle, szOldid = '', '', '', ''
local szTest = string.match(szUrl, 'https://%a+%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
if szTest ~= nil then
szIetf, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/w/index%.php%?title=(.+)&oldid=(%d+)')
else
szIetf, szProjet, szTitle, szOldid = string.match(szUrl, 'https://(%a+)%.(%a+)%.org/wiki/(.+)%?oldid=(%d+)')
end
-- Remplacer %C3%B par un caractère Unicode, et _ par une espace
local szTitleDecoded = mw.uri.decode( szTitle , "WIKI" )
local szLienLangue = moduleLangue.nomLangue(szIetf)
local szNomProjet = p.getNomProjet( szProjet )
local szHtmlIndicateur = moduleLangue.indicationDeLangue({'', szIetf})
local szLinkOldid = '<span class="plainlinks">[//' .. szIetf .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&oldid=' .. szOldid .. ' ' .. szTitleDecoded .. ']</span>'
local szLinkHistory = '<span class="plainlinks">[//' .. szIetf .. '.' .. szProjet .. '.org/w/index.php?title=' .. szTitle .. '&action=history voir la liste des auteurs]</span>'
local szHtmlFragment = 'de la page de ' .. szNomProjet .. ' en ' .. szLienLangue .. ' intitulée « ' .. szLinkOldid .. ' » <small>(' .. szLinkHistory .. ')</small>'
return szHtmlIndicateur, szHtmlFragment
end
function p.enumeration(valeurs, separateur, dernierSeparateur)
if not dernierSeparateur then
dernierSeparateur = separateur
end
if #valeurs == 0 then
return ''
elseif #valeurs == 1 then
return valeurs[1]
else
return table.concat(valeurs, separateur, 1, #valeurs - 1) .. dernierSeparateur .. valeurs[#valeurs]
end
end
function p.ConstruireTradRef( frame )
local args = frame:getParent().args
-- Selon les « préfixes » d'URL (en, de, www, commons...), noter des informations
local Indicateurs = {}
local Fragments = {}
for i = 1, 10 do
local nomParam = 'url'..i
if i == 1 and not args.url1 and args.url then
nomParam = 'url'
end
local szUrl = args[nomParam]
if not szUrl then
break
end
-- Deux formats d'URL acceptés
local szPrefix = nil
local szPrefix1 = string.match(szUrl, 'https://(%a+)%.%a+%.org/w/index%.php%?title=.+&oldid=%d+')
local szPrefix2 = string.match(szUrl, 'https://(%a+)%.%a+%.org/wiki/.+%?oldid=%d+')
if szPrefix1 then szPrefix = szPrefix1
else szPrefix = szPrefix2 end
if not szPrefix then
Indicateurs[i], Fragments[i] = '-', 'paramètre <code>'..nomParam..'</code> invalide'
elseif szPrefix == 'commons' or szPrefix == 'meta' or szPrefix == 'species' or szPrefix == 'www' then
Indicateurs[i], Fragments[i] = p.getMultilingue(szUrl)
else
Indicateurs[i], Fragments[i] = p.getUnilingue(szUrl)
end
end
-- Composer le message à l'intention des lecteurs
local szHtml
if not args.url1 and not args.url then
szHtml = 'Chaque paramètre url1, url2, url3... doit être suivi d\'une adresse Web.'
elseif args.url11 then
szHtml = 'Le modèle n\'accepte pas plus que 10 adresses Web.'
else
szHtml = '<p><span style="padding-left: 1.2em;">'
.. p.enumeration(Indicateurs, '/')
.. ' Cet article est partiellement ou en totalité issu '
.. p.enumeration(Fragments, ', ', ' et ')
.. '.</span></p>'
end
return szHtml
end
-- Fonction servant uniquement à tester du code.
function p.test()
local arguments = {}
arguments[1] = 'https://de.wikipedia.org/w/index.php?title=DEUTSCH&oldid=148366994'
arguments[2] = 'https://commons.wikimedia.org/w/index.php?title=FILE&oldid=232035766'
arguments[3] = 'https://pt.wikipedia.org/w/index.php?title=PORTUGAIS&oldid=148366994'
arguments[4] = 'https://meta.wikimedia.org/w/index.php?title=META&oldid=1111'
arguments[5] = 'https://ru.wikipedia.org/w/index.php?title=RUSSE&oldid=101010101'
arguments[6] = 'https://species.wikimedia.org/w/index.php?title=SPECIES&oldid=222222'
-- local szUrl = 'https://en.wikipedia.org/wiki/Adrienne_Mayor?oldid=716665156'
-- local szUrl = 'https://species.wikimedia.org/w/index.php?title=SPECIES&oldid=222222'
-- mw.log(szPrefixe .. '\n' .. szProjet .. '\n' .. szTitle .. '\n' .. szOldid)
end
return p