Module:Biblio/Lien vidéo

 Documentation[créer] [purger]
local Video = { }

local Langue = require( 'Module:Langue' )
local Commun = require( 'Module:Biblio/Commun' )
local References = require( 'Module:Biblio/Références' )

local function role ( args, validArg , nomsRole )
	
	local listeRole = { }  -- contiendra un élément pour chaque nom
	local role = validArg( nomsRole, nomsRole .. i ) --brouillon
	local i = 1

	-- boucle sur chaque élément, assemble toutes les caractéristiques et ajoute l'ensemble à la liste.
	while role do
		table.insert( listeRole, role )
		i = i + 1
		role = validArg( 'nom' .. i, 'last' .. i )
	end
	
	return listeRole

end	

function Video.lienVideo( args )
	-- La table wiki va recevoir tous les petits morceaux de texte, et sera concaténée à la fin.
	-- Elle utilise la meta-table de TableBuilder, permettant d'utiliser les fonctions de la
	-- librairie table comme des méthodes. minsert permet d'insérer plusieurs éléments en une
	-- seule fois en, ignorant les paramètres nil.
	local wiki = TableBuilder.new()
	
	-- validArg renvoie le premier paramètre non vide, ou nil s'ils sont tous vides.
	-- Seul les noms des paramètres doivent être transmis à la fonction.
	local validArg = function ( ... ) return Commun.validTextArg( args, ... ) or false end
	
	-- span initial (id) et libellé
	local spanInitial, spanFinal = Commun.spanInitial ( args, validArg )
	wiki.minsert( spanInitial,  Commun.libelle( args ) )
	
	-- Indication de langue
	local indicLangue, codeLangue = Commun.indicationDeLangue ( args, validArg )
	local dir, attributsLangue
	if indicLangue and indicLangue ~= '' then
		wiki.minsert( indicLangue, ' ' )
		if codeLangue then
			dir = Langue.directionLangue( codeLangue )
			if dir == 'rtl' then 
				attributsLangue = ' lang="' .. codeLangue .. '" dir="rtl"'
			else 
				dir = nil
				attributsLangue = ' lang="' .. codeLangue .. '"'
			end
		end
	end
	
	-- titre + url
	
	-- Volume
	local volume = validArg( 'volume', 'vol' )
	if volume then
		wiki.minsert( ', ', Commun.vol, volume )
	end
	
	-- Liste des auteurs et de leurs responsabilités (principales et secondaires)

	local listeResponsables = { }  -- contiendra un élément pour chaque nom (sauf pour people si utilisé avec plusieurs noms)
	local prenom
	local nom = validArg( 'nom1', 'nom', 'last1', 'last' )
	local auteur = validArg( 'auteur1', 'auteur', 'author1', 'author', 'people' )

	if nom or auteur then
		-- clarification des paramètres
		args['prénom1'] = validArg( 'prénom1', 'prénom', 'first1', 'first' )
		args['lien auteur1'] = validArg( 'lien auteur1', 'lien auteur', 'author-link' )
	end
	
	local i = 1

	-- boucle sur chaque nom, assemble toutes les caractéristiques et ajoute l'ensemble à la liste.
	while nom or auteur do

		-- nom de l'auteur
		if not auteur then
			prenom = validArg( 'prénom' .. i, 'first' .. i )
			nom = '<span class="nom_auteur">' .. nom .. '</span>'
			if prenom then
				auteur = prenom .. ' ' .. nom
			else
				auteur = nom
			end
		end

		-- lien sur l'auteur
		auteur = Commun.fusionTexteLien( auteur, args['lien auteur' .. i], nil)

		table.insert( listeResponsables, auteur )

		i = i + 1
		nom = validArg( 'nom' .. i, 'last' .. i )
		auteur = validArg( 'auteur' .. i, 'author' .. i )
	end
	
	listeAuteurs = mw.text.listToText( listeResponsables )

	if listeAuteurs then
		wiki.minsert( ", " .. listeAuteurs )
	end
	
	local acteur = role ( args, validArg , {'acteur', 'actor'} )
	if acteur then	wiki.minsert( ', ', acteur ) end
	
	local realisateur = role ( args, validArg , {'réalisateur', 'director'} )
	if realisateur then	wiki.minsert( ', ', realisateur ) end
	
	local producteur = role ( args, validArg , {'producteur', 'producer'} )
	if producteur then	wiki.minsert( ', ', producteur ) end
	
	local scenariste = role ( args, validArg , {'scénariste', 'scenarist', 'scriptwriter'} )
	if scenariste then	wiki.minsert( ', ', scenariste ) end
	
	local contributeur = role ( args, validArg , {'contributeur', 'contributor'} )
	if contributeur then	wiki.minsert( ', ', contributeur ) end
	
	local invite = role ( args, validArg , {'invité', 'guest'} )
	if invite then	wiki.minsert( ', ', invite ) end
	
	local listeAuteurs
	local et_al = ''
	if validArg( 'et al.', 'et alii' ) then
		et_al = " ''" .. abr { "et al.", "et alii (et d’autres)" } .. "''"
		wiki.minsert( ', ' .. et_al )
	end
	
	-- Émission
	local emission = validArgs('émission')
	if emission then
		wiki.minsert( ", dans ''" .. emission .. "''" )
	end
	
	-- Chaîne
	local chaine = validArgs('chaîne')
	if chaine then
		wiki.minsert( "&nbsp;sur " .. chaine )
	end

	-- Date
	local date = validArg('date', 'année', 'year' )
	if date then
		local lrm
		if Langue.nonLatin( wiki.concat() ) then
			lrm = '&lrm;'
		end
		wiki.minsert( ',', lrm, ' ', Commun.inscriptionDate( args ) )
		-- le &lrm est une marque de texte gauche à droite, utile si le texte qui précède est en droite à gauche (arabe, hébreux...)
	end
	
	-- Durée
	
	-- Lieu et éditeur
	local lieu = validArg( 'lieu', 'location', 'place' )
	if lieu then
		wiki.minsert( ', ', lieu )
	end
	local editeur = validArg( 'éditeur', 'édition', 'editeur', 'edition', 'publisher' )
	if editeur then
		local lienEditeur = validArg( 'lien éditeur' )
		wiki.minsert( ', ', Commun.fusionTexteLien( editeur, lienEditeur, nil ) )
	end
	
	-- Temps
	local temps = validArg( 'temps', 'time' )
	if temps then
		wiki.minsert( '.&nbsp;La scène se produit à ', temps , '.')
	end
	
	-- Lien vers l'ouvrage en ligne (isbn, issn, pmid, doi, lire en ligne, résumé...)
	wiki.minsert( References.affichageLiensExternes( args, validArg, false, true ) )

	-- Fin du span (id) et de la description de l'ouvrage
	wiki.minsert( spanFinal )
	
	-- extrait
	local extrait = validArg( 'citation', 'extrait', 'quote' )
	if citation then
		if codeLangue then
			citation = Langue.lang{ codeLangue, citation }
		end
		wiki.minsert( '\194\160: <span class="citation">« ' .. citation .. ' »</span>' )
	end

	
	return wiki.concat()
end


return Video