Module:Palmarès tennis
La documentation de ce module est générée par le modèle {{Documentation module}}.
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.
-- Module destiné à accélérer le traitement des modèles
-- Palmarès WTA/début Palmarès ATP/début
-- Palmarès WTA/ligne Palmarès ATP/ligne
require('strict')
local z = { }
local TableBuilder = require( 'Module:TableBuilder' )
local tableauCategorie = mw.loadData ( 'Module:Palmarès_tennis/categorie' )
-- z.ligne génère une ligne de tableau mise en forme.
-- paramètres : genre : wta ou atp (en minuscule)
function z.ligne ( frame )
local pargs = frame:getParent().args -- paramètre du modèle
local wikiTab = TableBuilder.new() -- Table contenant les texte de chaque cellule du tableau
local txt ='' -- variable utilisé pour stocké un texte temporairement
-- Clarification de certains paramètre
local contexte = string.lower ( pargs.contexte or mw.text.trim ( pargs[1] or tableauCategorie.contexte or '' ) )
contexte = string.match ( contexte, 'tournoi' )
or string.match ( contexte, 'gc' )
or string.match ( contexte, 'joueu' )
or contexte
local double
local tableau = pargs.tableau or pargs[2]
if type( tableau ) == 'string' then
double = string.lower( string.sub ( mw.text.trim( tableau ), 1, 1 ) ) == 'd'
else
double = type( pargs.pn or pargs.v2 or pargs.f2 ) == 'string'
end
local titre = false
local palmares = pargs['palmarès'] or pargs[3]
if palmares then
palmares = string.lower( string.sub ( mw.text.trim( palmares ), 1, 1 ) )
titre = ( palmares ~= 'f' ) and ( palmares ~= 'd' ) -- titre = false si palmarès = défaite, finale, finaliste...
else
if pargs.f1 and not pargs.v1 then
titre = true
end
end
local spantext = pargs.spantext or ''
local tournoi = pargs.tournoi or ''
local edition = pargs ['édition'] or ''
local refedition = pargs ['refédition'] or ''
local dotation = pargs.dotation or ''
if dotation:sub( 1, 1 ):lower() == 'n' then
dotation = false
end
local devise = pargs.devise or '$'
local categorie = pargs ['catégorie'] or ''
local refcat = pargs.refcat or ''
local genre = string.lower ( frame.args.genre or 'atp' )
local couleur
local annee = pargs['année'] or ''
if annee == '' then
annee = string.match ( pargs['date'] or '', '%d%d%d%d' )
end
-- catégorie tournoi : le tableau 'cat' servira a formater la ligne à différent endroit
local cat = tableauCategorie [genre] [ string.lower ( categorie ) ]
if cat == nil then
if categorie == '' then
cat = tableauCategorie [genre] ['non connue']
else
cat = { texte = categorie, tri = 999, date = { debut = 0, fin = 10000 } }
end
end
if cat.date.debut > ( tonumber ( annee ) or 0 ) or cat.date.fin < ( tonumber ( annee ) or 0 ) then
cat = {
texte = cat.texte .. frame:extensionTag { name = 'ref', content = "cette catégorie n'existe pas en " .. annee, args = { } },
tri = 999
}
end
-- couleur ligne
if ( contexte ~= 'gc' ) and ( contexte ~= 'tournoi' ) then
if type ( cat.couleur ) == 'table' then
wikiTab.insert( '|- class="notheme" style="background-color:' .. cat.couleur [titre] .. ';"' )
elseif type ( cat.couleur ) == 'string' and cat.couleur ~= '' then
wikiTab.insert( '|- class="notheme" style="background-color:' .. cat.couleur .. ';"' )
else
wikiTab.insert( '|-' )
end
else
if refcat ~= '' or refedition ~= '' then
wikiTab.insert( '|- class="notheme" style="background-color:#FFFFCC;"' )
else
wikiTab.insert( '|-' )
end
end
-- n° et date
wikiTab.insert( 'style="text-align:right;"|' .. ( pargs['n°'] or '' ) )
wikiTab.insert( pargs.date or '' )
-- spantext
if spantext ~= '' then
local span = 7
if contexte == 'joueu' and ( not double ) then
span = span - 1
end
if not dotation then
span = span - 1
end
wikiTab.insert( 'colspan=' .. span .. ' style="text-align:center;"|' .. spantext )
else
-- tournoi
local ville = pargs.ville or pargs.lieu
local drapeau = ''
if pargs ['code pays'] then
drapeau = frame:expandTemplate { title = pargs ['code pays'] .. '-d' } .. ' '
end
if ( type ( ville ) == 'string' ) and ( ville ~= '' ) then
if double then -- si c'est un double, la ville éventuellement précédée du drapeau est mis sur la {{2e}} ligne
ville = '<br />' .. drapeau .. ville
drapeau = ''
else
ville = ', ' .. ville
end
else
ville = ''
end
if contexte == 'tournoi' then
wikiTab.insert( edition .. refedition .. ville )
else
txt = ''
if edition ~= '' then
txt = '|' .. edition
end
wikiTab.insert(
'<strong>' .. drapeau
.. '[[' .. tournoi .. txt .. ']]</strong>' .. refedition
.. ville
)
end
-- catégorie
wikiTab.insert( cat.texte .. refcat )
-- dotation
if dotation then
if dotation == '' then
wikiTab.insert( 'style="text-align:right;"|<small><abbr class="abbr" title="Dotation non connue" >NC</abbr></small>' )
else
if tonumber( dotation ) then
dotation = mw.getContentLanguage():formatNum( tonumber( dotation ) )
end
wikiTab.insert( 'style="text-align:right;"|<small>' .. dotation .. '\194\160' .. devise .. '</small>' )
end
end
-- surface
local revetement, situation = z.determination_surface (pargs.surface)
if situation then
wikiTab.insert( revetement .. ' (' .. situation .. ')' )
else
wikiTab.insert( revetement )
end
-- Joueurs (vainqueur(s), finaliste(s), partenaire)
local verifJoueur = function ( joueur )
if type ( joueur ) ~= 'string' or joueur == '' then
return '<abbr class="abbr" title="Non connu" >NC</abbr>'
else
return joueur
end
end
if ( contexte == 'joueu' ) then
if double then
if titre then
wikiTab.insert( [[''']] .. verifJoueur ( pargs.pn ) .. [[''']] )
wikiTab.insert( verifJoueur ( pargs.f1 ) .. '<br />' .. verifJoueur ( pargs.f2 ) )
else
wikiTab.insert( [[''']] .. verifJoueur ( pargs.v1 ) .. '<br />' .. verifJoueur ( pargs.v2 ) .. [[''']] )
wikiTab.insert( verifJoueur ( pargs.pn ) )
end
else
if titre then
wikiTab.insert( verifJoueur ( pargs.f1 ) )
else
wikiTab.insert( [[''']] .. verifJoueur ( pargs.v1 ) .. [[''']] )
end
end
else
if double then
wikiTab.insert( [[''']] .. verifJoueur ( pargs.v1 ) .. '<br />' .. verifJoueur ( pargs.v2 ) .. [[''']] )
wikiTab.insert( verifJoueur ( pargs.f1 ) .. '<br />' .. verifJoueur ( pargs.f2 ) )
else
wikiTab.insert( [[''']] .. verifJoueur ( pargs.v1 ) .. [[''']] )
wikiTab.insert( verifJoueur ( pargs.f1 ) )
end
end
-- score
if ( type ( pargs.score ) == 'string' ) and ( pargs.score ~= '' ) then
wikiTab.insert( pargs.score )
else
wikiTab.insert( '<abbr class="abbr" title="Score non connu" >NC</abbr>' )
end
end -- fin de if spantext ~= ''
-- parcours
local parcours = pargs.parcours
if parcours == nil then -- lien avec tournoi ou année si parcours n'existe pas. Pas d'affichage si parcours est vide.
if annee and ( tournoi ~= '' ) then
-- ajout (WTA 2022) pour les tournois, ou simplement 2022 pour les Masters, Classic...
if tournoi:match ( '^[Tt]ournoi de tennis' ) then
parcours = tournoi .. ' (' .. string.upper( genre ) .. ' ' .. annee .. ')'
else
parcours = tournoi .. ' ' .. annee
end
-- test existence page pour les années avant 2010, on suppose que la page existe pour les tournois récents
if tonumber( annee ) < 2010 and not mw.title.new( parcours ).exists then
parcours = ''
end
else
parcours = ''
end
end
if parcours ~= '' then
if parcours:match ( '%[%[' ) or parcours:match ( '%[http') then
wikiTab.insert( parcours )
else
if contexte == 'joueu' then
txt = '|Parcours]]'
else
txt = '|Tableau]]'
end
if parcours:match( '[Ss]imple' ) or parcours:match( '[Dd]ouble' ) then
wikiTab.insert( '[[' .. parcours .. txt )
elseif double then
wikiTab.insert( '[[' .. parcours .. '#Résultats en double' .. txt )
else
wikiTab.insert( '[[' .. parcours .. '#Résultats en simple' .. txt )
end
end
else
wikiTab.insert( '' )
end
return wikiTab.concat ( '\n|' )
end
-- z.determination_surface renvoie dans deux paramètres la surface proprement dite, et si c'est en extérieur / intérieur.
-- Les abréviations 'Terre' et ext. / int. sont explicitées en abréviation discrète.
-- cette fonction est séparée pour pouvoir être plus facilement réutilisée.
-- l'entrée est un texte flou décrivant la surface, de tb à Terre battue (extérieur), de gi à Herbe Intérieure...
function z.determination_surface ( surface )
if type ( surface ) ~= 'string' then
return '<abbr class="abbr" title="Surface non connue" >NC</abbr>', nil
end
surface = string.lower ( surface )
local tabRevetement = { t = '<abbr class="abbr" title="Terre battue" >Terre</abbr>', d = 'Dur', g = 'Gazon', h = 'Gazon', m = 'Moquette', s = 'Moquette' }
local revetement = tabRevetement [ string.sub ( surface, 1, 1 ) ]
local situation = '<abbr class="abbr" title="Extérieur" >ext.</abbr>'
if revetement == nil then
revetement = '<abbr class="abbr" title="Surface non connue" >NC</abbr>'
situation = nil
else
if ( string.sub ( surface, 2, 1 ) == 'i' ) or string.match ( surface, ' i' ) or string.match ( surface, '%(i' ) then
situation = '<abbr class="abbr" title="Intérieur" >int.</abbr>'
end
end
return revetement, situation
end
-- z.debut génére un tableau et la ligne de titre
-- paramètres : genre : wta ou atp
function z.debut ( frame )
local pargs = frame:getParent().args -- paramètre du modèle
local contexte = string.lower ( pargs.contexte or mw.text.trim ( pargs[1] or '' ) )
local tableau = string.lower ( pargs.tableau or mw.text.trim ( pargs[2] or '' ) )
local palmares = string.lower ( pargs [ 'palmarès' ] or mw.text.trim ( pargs[3] or '' ) )
local ligneTitre = '\n! scope="col" class="notheme" style="background-color:#CFCFCF;"|'
local ligneTitreGc = '\n! scope="col" class="unsortable notheme" style="background-color: #CFCFCF; width: 22%;"|'
local ligneSansTri = '\n! scope="col" class="unsortable notheme" style="background-color: #CFCFCF;"|'
local wikiText = '{|'
local txt
-- préparation des variables
contexte = string.match ( contexte, 'tournoi' ) or contexte
contexte = string.match ( contexte, 'gc' ) or contexte
contexte = string.match ( contexte, 'joueu' ) or contexte -- valable pour joueur ou joueuse
palmares = string.sub ( palmares, 1, 1 )
local titre = ( palmares ~= 'f' ) and ( palmares ~= 'd' ) -- titre = false si palmarès = défaite, finale, finaliste...
local double = string.sub ( tableau, 1, 1 ) == 'd'
local wta = frame.args.genre == 'wta'
-- style tableau
if wta and contexte ~= 'tournoi' then
wikiText = wikiText .. 'class="sortable wikitable" style="font-size:11px"'
else
wikiText = wikiText .. 'class="wikitable alternance sortable" style="font-size: .85em;"'
end
wikiText = wikiText .. '\n|-'
-- grand Chelem
if string.match ( contexte, 'gc' ) then
wikiText = wikiText .. '\n! scope="col" class="notheme" style="background-color: #CFCFCF;"|width: 12%;"|Année'
wikiText = wikiText .. ligneTitreGc .. "[[Open d'Australie]]"
wikiText = wikiText .. ligneTitreGc .. "[[Internationaux de France de tennis|Roland-Garros]]"
wikiText = wikiText .. ligneTitreGc .. "[[Tournoi de Wimbledon|Wimbledon]]"
wikiText = wikiText .. ligneTitreGc .. "[[US Open de tennis|US Open]]"
else
-- N°
wikiText = wikiText .. ligneTitre -- .. '<abbr class="abbr" title="Numéro" >N<sup>o</sup></abbr>'
-- Date
local dateRefArgs
if wta then
dateRefArgs = { name = 'date2' }
else
dateRefArgs = { name = 'date', group = 'T' }
end
txt = frame:extensionTag {
name = 'ref',
content = 'Pour chaque tournoi, la date indiquée correspond à la première journée, en général un [[lundi]].',
args = dateRefArgs
}
wikiText = wikiText .. ligneTitre .. 'Date' .. txt
-- Nom du Tournoi
wikiText = wikiText .. ligneTitre .. 'Nom et lieu du tournoi'
-- Catégorie
txt = ''
if not wta then txt = '#Catégories des tournois masculins' end
wikiText = wikiText .. ligneTitre .. '[[Catégorisation des tournois de tennis' .. txt ..'|Cat.]]'
-- dotation
local dotation = pargs.dotation or ''
if dotation:sub( 1, 1 ):lower() ~= 'n' then
if wta then
wikiText = wikiText .. ligneTitre .. '($)'
else
wikiText = wikiText .. ligneTitre .. 'Dotation'
end
end
-- Surface
wikiText = wikiText .. ligneTitre .. '[[Surfaces de jeu au tennis|Surface]]'
-- Joueurs (vainqueur(s), finaliste(s), partenaire)
txt = ''
if double then txt = 's' end
if ( contexte == 'joueu' ) and titre then
if double then
wikiText = wikiText .. ligneTitre .. 'Partenaire'
end
else
wikiText = wikiText .. ligneTitre .. 'Vainqueur' .. txt
end
if ( contexte == 'joueu' ) and ( not titre ) then
if double then
wikiText = wikiText .. ligneTitre .. 'Partenaire'
end
else
wikiText = wikiText .. ligneTitre .. 'Finaliste' .. txt
end
-- Score et parcours
wikiText = wikiText .. ligneSansTri .. 'Score'
wikiText = wikiText .. ligneSansTri .. ''
end
return wikiText
end
return z