« Module:Pistes » : différence entre les versions

Une page de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 190 : Ligne 190 :
if args.total_temps then
if args.total_temps then
tabPistes:tag( 'tr' ):tag('td')
tabPistes:tag( 'tr' ):tag('td')
:addClass( 'pistes-dureetotale' )
:attr( 'colspan', '10' )
:attr( 'colspan', '10' )
:css({
['padding-right'] = '10px',
['text-align'] = 'right',
['background-color'] = 'var(--background-color-base, #fff)',
color = 'var(--color-base, #202122)',
['font-weight'] = 'bold',
['border-width'] = '0'
})
:wikitext( args.total_temps )
:wikitext( args.total_temps )
end
end

Version du 17 mai 2024 à 22:29

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

Utilisation

Ce module est conçu pour une utilisation à travers le modèle Modèle:Pistes. Il fournit une fonction permettant la génération du tableau correspondant à une liste de pistes audio, avec indication du titre et de la durée et d'autres paramètres optionnels.

Le style du modèle est géré par Modèle:Pistes/styles.css.

Fonctions exportables

main(frame) – Prend en argument un frame et retourne une chaîne de caractères contenant le code html d'un tableau.

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

  • Module:Langue – Module de mise en forme du contenu en langue étrangère.

Modules lua utilisant ce module

Aucun

Modèles appelant directement ce module

Exemples

Dans Modèle:Pistes, ce module est appelé par le code suivant :

{{#invoke:Pistes|main}}
local p = {}

local langue = require 'Module:Langue'

local nbPistes = 0

function p.main( frame )
	-- 1. Lecture des paramètres
	local args = {}
	
	for k, v in pairs(frame:getParent().args) do
		local param, nb = mw.ustring.match( k, '(.+)(%d+)' )
		if nb then
			nb = tonumber(nb)
			if nb and args[nb] == nil then
				if nb > nbPistes then
					nbPistes = nb
				end
				args[nb] = {}
			end
			args[nb][param] = mw.text.trim(v)
			args[nb][param] = args[nb][param] ~= "" and args[nb][param] or nil
		else
			args[k] = mw.text.trim(v)
			args[k] = args[k] ~= "" and args[k] or nil
		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 and args.total_temps ~= '' 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( mw.getCurrentFrame():expandTemplate({ title = 'Numéro avec majuscule', args = { 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
	
		if args[i] and (args[i].piste or args[i].title or args[i].note or args[i].temps or args[i].length) then
			local ligne = tabPistes:tag( 'tr' )
			if i%2 == 0 then
				ligne:addClass( 'pistes-pair' )
			else
				ligne:addClass( 'pistes-impair' )
			end
			ligne
				:tag( 'th' )
					:addClass( "pistes-numero" )
					:attr{ scope = 'row' }
					:wikitext( (args[i].numero or tostring(i)) .. '.' )
			local titre
			if args[i].piste or args[i].title  then
				local nonLatin =  langue.nonLatin( args[i].piste or args[i].title )
				if nonLatin then
					titre = args[i].piste or args[i].title
				else
					titre = "''" .. (args[i].piste or args[i].title) .. "''"
				end
				if args[i].langue or args["langue titres"] then
					titre = langue.langue({ args[i].langue or args["langue titres"], titre })
				end
			else 
				titre = 'Sans titre'
			end
			if args[i].note then
				titre = titre .. ' <small>(' .. args[i].note .. ')</small>'
			end
			ligne:tag ( 'td' ):wikitext( titre )
			if args.credits_paroles == 'oui' or args.lyrics_credits == 'oui' then
				ligne:tag( 'td' ):wikitext( args[i].paroles or args[i].lyrics )
			end
			if args.credits_musique == 'oui' or args.music_credits == 'oui' then
				ligne:tag( 'td' ):wikitext( args[i].musique or args[i].music )
			end
			if args.credits_ecriture == 'oui' or args.writing_credits == 'oui' then
				ligne:tag( 'td' ):wikitext( args[i].auteur or args[i].writer )
			end
			if args.colonne_extra or args.extra_column then
				ligne:tag( 'td' ):wikitext( args[i].extra )
			end
			ligne:tag('td')
						:addClass( 'pistes-duree' )
						:wikitext( args[i].temps or args[i].length )
		end
	end

	if args.total_temps then
		tabPistes:tag( 'tr' ):tag('td')
						:addClass( 'pistes-dureetotale' )
						:attr( 'colspan', '10' )
						:wikitext( args.total_temps )
	end
	
	return tostring( divPistes )
end

return p