« Module:Pistes » : différence entre les versions
Apparence
Modèle:Pistes>Od1n balise <cite> pour meilleure sémantique ; il existe des gestions plus évoluées, voir par exemple dans Module:Biblio/Ouvrage, la classe "italique" (mais ici, ça ne serait pas utile, ni même souhaitable) et le Langue.nonLatin (refs 113688445) (pourquoi pas, mais impact performances, pour l'instant restons sur quelque chose de simple et d'aussi bon que précédemment) |
Modèle:Pistes>Od1n je n'avais même pas remarqué, il y a déjà un Langue.nonLatin… balisage <cite> (mais en font-style:normal) aussi pour les titres contenant des caractères non latins, et j'en profite pour virer la double négation |
||
| Ligne 162 : | Ligne 162 : | ||
local titrePiste = rowArgs.piste or rowArgs.title | local titrePiste = rowArgs.piste or rowArgs.title | ||
if titrePiste then | if titrePiste then | ||
if | if langue.nonLatin( titrePiste ) then | ||
titrePiste = '<cite style="font-style:normal">' .. titrePiste .. '</cite>' | |||
else | |||
titrePiste = '<cite>' .. titrePiste .. '</cite>' | titrePiste = '<cite>' .. titrePiste .. '</cite>' | ||
end | end | ||
Version du 27 juin 2024 à 00:38
La documentation pour ce module peut être créée à Module:Pistes/doc
local p = {}
local langue = require 'Module:Langue'
local nbPistes = 0
function p.main( frame )
-- 1. Lecture des paramètres
local args = {}
local rowArgsTable = {}
for k, v in pairs(frame:getParent().args) do
-- match: foobar42, foo21bar42 (digits in base name), 21foo42 (leading digits in base name), foobar04 (leading zeroes)
-- do not match: 42 (only digits; the regex matches actually, but we reject in the following conditional), foobar (no digits suffix)
local param, nb = mw.ustring.match( k, '^(.-)(%d+)$' )
if param and param ~= '' then
nb = tonumber(nb)
if rowArgsTable[nb] == nil then
if nb > nbPistes then
nbPistes = nb
end
rowArgsTable[nb] = {}
end
if v ~= "" or param == "numero" then -- il est possible de renseigner des paramètres « numeroN » vides
rowArgsTable[nb][param] = v
end
else
local trimmed = ( type(k) == "number" ) and mw.text.trim(v) or v
if trimmed ~= "" then
args[k] = trimmed
end
end
end
-- 2. Initialisation du tableau de la liste des titres
local divPistes = mw.html.create( 'div' )
:addClass( "overflow pistes-marge" )
:css({
['margin-bottom'] = (args.total_temps or args.total_length) and '0.5em' or '1em'
})
local tabPistes = divPistes
:tag( "table" )
:addClass( "tracklist" .. (args.collapsed == 'oui' and " collapsible collapsed" or "") )
:attr( 'cellpadding', "0" )
-- 3. Éventuel code avant l'entête du tableau (titre ou boîte repliable)
if args.titre or args.headline then
tabPistes
:tag( "tr" )
:tag( "th" )
:addClass( "tlheader pistes-titre" )
:attr( "scope", "col" )
:attr( "colspan", "10" )
:wikitext( (args["langue titre"] or args["langue titres"]) and langue.langue({ args["langue titre"] or args["langue titres"], args.titre or args.headline }) or (args.titre or args.headline) )
elseif args.collapsed == 'oui' then
tabPistes
:tag( "tr" )
:tag( "th" )
:addClass( "tlheader pistes-titre" )
:attr( "colspan", "10" )
:wikitext( " " )
end
-- 4. Création de l'entête du tableau
local nbColonnesExtra = ((args.credits_paroles or args.lyrics_credits) and 1 or 0) + ((args.credits_musique or args.music_credits) and 1 or 0) + ((args.credits_ecriture or args.writing_credits) and 1 or 0) + ((args.colonne_extra or args.extra_column) and 1 or 0)
local entetesPistes = tabPistes
:tag( "tr" )
:tag( "th" ) -- Colonne « Numéro »
:addClass( "tlheader pistes-entete" )
:attr( "scope", "col" )
:css({
width = '20px',
['padding-left'] = '10px',
['padding-right'] = '10px',
['text-align'] = 'right'
})
:wikitext( '<abbr class="abbr" title="Numéro">N<sup>o</sup></abbr>' ) -- résultat de {{Numéro avec majuscule|espace=non}}
:done()
:tag( "th" ) -- Colonne « Titre »
:addClass( "tlheader pistes-entete" )
:attr( "scope", "col" )
:css({
width = ({[0]='100%', [1]='60%', [2]='40%', [3]='30%', [4]='20%'})[nbColonnesExtra]
})
:wikitext( "Titre" )
:done()
if args.credits_paroles == 'oui' or args.lyrics_credits == 'oui' then -- Colonne « Paroles »
entetesPistes
:tag( "th" )
:addClass( "pistes-entete" )
:attr( "scope", "col" )
:css({
width = ({[1]='40%', [2]='30%', [3]='20%', [4]='20%'})[nbColonnesExtra]
})
:wikitext( "Paroles" )
:done()
end
if args.credits_musique == 'oui' or args.music_credits == 'oui' then -- Colonne « Musique »
entetesPistes
:tag( "th" )
:addClass( "pistes-entete" )
:attr( "scope", "col" )
:css({
width = ({[1]='40%', [2]='30%', [3]='20%', [4]='20%'})[nbColonnesExtra]
})
:wikitext( "Musique" )
:done()
end
if args.credits_ecriture == 'oui' or args.writing_credits == 'oui' then -- Colonne « Auteur »
entetesPistes
:tag( "th" )
:addClass( "pistes-entete" )
:attr( "scope", "col" )
:css({
width = ({[1]='40%', [2]='30%', [3]='20%', [4]='20%'})[nbColonnesExtra]
})
:wikitext( "Auteur" )
:done()
end
if args.colonne_extra or args.extra_column then -- Colonne extra
entetesPistes
:tag( "th" )
:addClass( "pistes-entete" )
:attr( "scope", "col" )
:css({
width = ({[1]='40%', [2]='30%', [3]='20%', [4]='20%'})[nbColonnesExtra]
})
:wikitext( args.colonne_extra or args.extra_column )
:done()
end
entetesPistes
:tag( "th" ) -- Colonne « Durée »
:addClass( "tlheader pistes-entete" )
:attr( "scope", "col" )
:css({
width = '60px',
['padding-right'] = '10px',
['text-align'] = 'right'
})
:wikitext( "Durée" )
:done()
-- 5. Tracé des lignes du tableau
for i = 1, nbPistes do
local rowArgs = rowArgsTable[i]
if rowArgs and (rowArgs.piste or rowArgs.title or rowArgs.note or rowArgs.temps or rowArgs.length) then
local ligne = tabPistes:tag( 'tr' )
local numero
if rowArgs.numero == '' then
numero = ''
else
numero = (rowArgs.numero or tostring(i)) .. '.'
end
ligne
:addClass( (i%2 == 0) and 'pistes-pair' or 'pistes-impair' )
:tag( 'th' )
:addClass( "pistes-numero" )
:attr{ scope = 'row' }
:wikitext( numero )
local titrePiste = rowArgs.piste or rowArgs.title
if titrePiste then
if langue.nonLatin( titrePiste ) then
titrePiste = '<cite style="font-style:normal">' .. titrePiste .. '</cite>'
else
titrePiste = '<cite>' .. titrePiste .. '</cite>'
end
if rowArgs["langue titre"] or args["langue titres"] then -- "langue titreN" puis "langue titres"
titrePiste = langue.langue({ rowArgs["langue titre"] or args["langue titres"], titrePiste })
end
else
titrePiste = 'Sans titre'
end
ligne:tag( 'td' ):wikitext(titrePiste .. (rowArgs.note and (' <small>(' .. rowArgs.note .. ')</small>') or '') )
if args.credits_paroles == 'oui' or args.lyrics_credits == 'oui' then
ligne:tag( 'td' ):wikitext( rowArgs.paroles or rowArgs.lyrics )
end
if args.credits_musique == 'oui' or args.music_credits == 'oui' then
ligne:tag( 'td' ):wikitext( rowArgs.musique or rowArgs.music )
end
if args.credits_ecriture == 'oui' or args.writing_credits == 'oui' then
ligne:tag( 'td' ):wikitext( rowArgs.auteur or rowArgs.writer )
end
if args.colonne_extra or args.extra_column then
ligne:tag( 'td' ):wikitext( rowArgs.extra )
end
ligne:tag('td')
:addClass( 'pistes-duree' )
:wikitext( rowArgs.temps or rowArgs.length )
end
end
-- 6. Affichage de la durée totale le cas échéant
if args.total_temps or args.total_length then
tabPistes:tag( 'tr' ):tag('td')
:addClass( 'pistes-dureetotale' )
:attr( 'colspan', '10' )
:wikitext( args.total_temps or args.total_length )
end
return tostring( divPistes )
end
return p