Documentation du module [voir] [modifier] [purger]
La documentation de ce module Scribunto écrit en Lua est incluse depuis sa sous-page de documentation.


Version : 2021-01-30

  1. ajouter un sous-titre optionnel sous la forme [[titre]] sous-titre ou [[titre|libellé]] sous-titre
  2. déplacer les icones — éditions multiples, traductions ou lien à l’espace livre — dans la première cellule après la date
  3. ajouter un espace insécable entre le titre et les icones d’exportation, avancement et wikidata
  4. réduire le padding de 3 em à 2 em à droite du champ Titre — Éditions
  5. alignement vertical du texte avec le haut de la cellule plutôt qu’au milieu
  6. icone-avancement à positionner immédiatement après le titre
  7. ne plus valider le lien sur la catégorie date comme proposé par Tpt pour réduire la charge
  8. conserver une taille de 100% même lorsqu’il y a 2 dates
  9. date non numérique affichée en simple texte
  10. imposer une largeur minimale au champ date pour éviter chevauchement date/icône livre

Utilisation

modifier

Permet de créer une liste triables d’œuvres structurées sous forme de tableau dans l’espace « Auteur » ou dans les pages d’éditions multiples.

Remarques

modifier

Ce modèle doit être utilisé conjointement avec {{liste documents début}}, pour ouvrir la liste des titres, et avec {{liste documents fin}}, pour la clôturer. Chaque ligne de cette liste doit être entrée avec {{document}}, dans lequel il faut obligatoirement préciser l’un des arguments titre=, éditions= ou traductions=.

  • Avantages : Versatilité et homogénéité dans la mise en forme sans avoir à connaître la syntaxe des tableaux.
  • Inconvénients : Plusieurs cas de figures sont possibles ce qui peut indisposer un nouvel utilisateur.

Syntaxe

modifier

Pour chaque ligne de la liste, il faut préciser un et un seul des trois paramètres titre=, éditions= ou traductions= ; les autres paramètres, entre crochets, sont facultatifs :

  • {{document|[date=] ou [dates=] | titre= ou éditions= ou traductions= | [titre alpha =] | [livre=] | [vo =] | [vo alpha =] | [auteur=] | [auteur alpha =] | [genre=] | [revue=] | [scan=] | [avancement=] | [export=] | [divers=] | [divers alpha=]}}

Voyez la section Remarques sur les paramètres pour la syntaxe spécifique à chaque paramètre.

Paramètres

modifier

Permet de créer une liste triables d’œuvres structurées sous forme de tableau

Paramètres du modèle[Modifier les données du modèle]

La mise en forme sur une seule ligne est préférée pour ce modèle.

ParamètreDescriptionTypeÉtat
Date de publicationdate

Peut contenir une valeur différente ex : Inc. ou 195?

Exemple
1908
Chaînefacultatif
Dates de début et de findates

Dates séparées par /

Exemple
1883/1885
Chaînefacultatif
Titre de l’œuvre titre

Texte ou [lien suivi d’une description] avec ou sans [titre alpha]

Exemple
Arsène Lupin gentleman-cambrioleur ; [[Arsène Lupin gentleman-cambrioleur]], le premier d’une longue série
Chaînefacultatif
Éditions multipleséditions

Nom de la page contenant la liste avec ou sans [titre alpha]

Exemple
Madame Bovary
Chaînefacultatif
Traductions multiplestraductions

Nom de la page contenant la liste des traductions avec ou sans [titre alpha]

Exemple
Le Roi Lear
Chaînefacultatif
Clef alphabétique du titretitre alpha

Titre tel qu’indiqué dans un dictionnaire, pour classement alphabétique

Exemple
Roi Lear
Chaîneobligatoire
Nom du fac-similélivre

Page d’index sans le préfixe ''Livre''

Exemple
Desrosiers - Les Opiniâtres, 1941.djvu
Chaînefacultatif
Avancementavancement

Valeur de 1 à 5 ; 5 correspond à validé

Nombrefacultatif
Icônes pour exportationsexport

Nom de la page à exporter, si différent de l’argument titre

Exemple
export= Arsène Lupin gentleman-cambrioleur
Chaînefacultatif
Titre originalvo

Titre lors du lancement si différent avec ou sans [vo alpha]

Exemple
{{lang|de|Die Leiden des jungen Werthers}}
Chaînefacultatif
Clef alphabétique du titre originalvo alpha

Titre original tel qu’indiqué dans un dictionnaire, pour classement alphabétique

Exemple
Leiden des jungen Werthers
Chaînefacultatif
Auteurauteur

Nom de l’auteur ou co-auteur avec ou sans [auteur alpha]

Exemple
Germaine de Staël ; [[Auteur:Germaine de Staël|Madame de Staël]]
Chaînefacultatif
Clef alphabétique de l’auteurauteur alpha

Nom de l’auteur tel qu’indiqué dans un dictionnaire, pour classement alphabétique

Exemple
Staël, Germaine de
Chaînefacultatif
Genregenre

Genre de l’ouvrage

Exemple
roman
Chaînefacultatif
Sourcescan

lien URL

URLfacultatif
Diversdivers

Champ libre avec ou sans [divers alpha]

Chaînefacultatif
Clef alphabétique du champ Diversdivers alpha

Contenu du champ Divers tel qu’indiqué dans un dictionnaire, pour classement alphabétique

Chaînefacultatif
Revuerevue

Référence au numéro de la Revue Des Deux Mondes

Exemple
RDDM/numéro
Chaînefacultatif

Remarques sur les paramètres

modifier

Pour les conventions appliquées au nommage des œuvres et à la construction de bibliographies dans l’espace Auteur:, reportez-vous à Aide:Conventions de nommages des œuvres et Aide:Espace « Auteur ».

Paramètres de données
  • date= : ce paramètre accepte n’importe quel texte (par exemple, — ; attention toutefois à ne pas y écrire un texte trop encombrant qui modifierait l’alignement des colonnes) ; lorsque ce texte est un nombre, un lien automatique vers la catégorie des livres publié en cette année sera créé.
  • dates= : ce paramètre accepte deux syntaxes ; dans les deux cas, un lien automatique est créé vers la catégorie des livres publié en ces dates :
    • année et mois de publication (pour les revues) ; par exemple « 1902/04 ».
    • années de début et de fin de publication ; par exemple : « 1909/1911 ».
  • livre= : crée un lien vers une page d’index de Wikisource (voyez Aide:Espace « Livre »), la page d’index étant donnée dans le paramètre sans le préfixe Livre: ; pour des œuvres en plusieurs volumes, plutôt que de créer un {{document}} par volume, on ne crée qu’une entrée avec lien vers l’index du premier volume.
  • titre= : titre en français ; le titre devient automatiquement un lien quand la page existe, mais on peut écrire titre=[[titre de la page|titre à afficher]] sous-titre/commentaire (dans ce cas, veiller à modifier le paramètre export=).
  • éditions= : utilisable à la place du paramètre titre=, pour créer un lien vers une page contenant une liste d’éditions ; la syntaxe est la même que pour titre=.
  • traductions= : utilisable à la place du paramètre titre=, pour créer un lien vers une page contenant une liste de traductions auteur ; la syntaxe est la même que pour titre=.
  • auteur= : prénom et nom de l’auteur ; le nom d’auteur devient automatiquement un lien quand existe une page Auteur:, mais on peut écrire auteur=[[Auteur:Prénom Nom|Nom différent]] en cas de pseudonyme ou d’existence d’une désignation plus courante que la désignation prénom-nom.
  • avancement= : admet un chiffre de 1 à 5 codant l’état d’avancement du livre : 1 pour un livre incomplet, 2 pour un livre complet non mis en forme, 3 pour un livre complet mis en forme mais non relu, 4 pour un livre complet relu par un contributeur, 5 pour un livre complet relu par deux contributeurs. Si ce paramètre n'est pas donné, l'état d'avancement est récupéré automatiquement de Wikidata s'il y est renseigné (voir État d'avancement des textes dans Wikidata).
  • export= : affiche trois icônes cliquables pour télécharger un livre à l’avancement ≥ 4 aux formats ePub, PDF et mobi (voir Catégorie:Bon pour export pour les critères d’utilisation) ; deux syntaxes sont possibles :
    • écrire export seul, quand le paramètre « titre » est le titre exact de la page à exporter.
    • préciser après export= le titre de la page à exporter : « export=titre » pour éviter une erreur lors de l’exportation.
  • genre= : genre de l’œuvre.
  • revue= : pour l’instant n’est utilisable que pour préciser les références d’un article de la Revue des Deux Mondes.
  • scan= : lien vers un fac-similé numérique de l’œuvre disponible hors de Wikisource (pour les fac-similés de Wikisource, voyez livre=). Ne sont autorisés que les liens vers des œuvres du domaine public en France ou dans le pays de publication ; si l’on veut faire un lien vers le fac-similé d’une œuvre encore protégée par le droit d’auteur, cela est autorisé seulement à titre d’indication pour faciliter le travail des futurs contributeurs, et doit donc être ajouté en page de discussion de la page Auteur:.
  • divers= : contenu libre, ajouté dans une colonne tout à droite de la liste ; si l’on veut donner un nom à cette colonne, il faut ajouter divers= Nom de la colonne à {{Liste documents début}}.
Paramètres de tri

Les boutons de tri permettent de consulter la liste des textes par ordre chronologique et antéchronologique, par ordre alphabétique des titres, et par ordre alphabétique des auteurs et des titres originaux quand ces colonnes existent. Ces tris se fondent par défaut sur les arguments des paramètres date=, titre= (et apparentés), auteur= et vo=. Dans le cas où la fonction de tri est inutilisable, on pourra la désactiver en ajoutant class=unsortable dans {{Liste documents début}}.

Pour assurer un tri alphabétique cohérent, si les arguments des paramètres triables ne sont pas présentés tels qu’ils le seraient dans un dictionnaire, il faut utiliser les paramètres alpha :

  • titre alpha= : titre en français sans article (exemple : titre= Le Roi Lear | titre alpha= Roi Lear).
  • vo alpha= : titre original sans article (exemple : vo= {{lang|de|Die Leiden des jungen Werthers}} | vo alpha= Leiden des jungen Werthers).
  • auteur alpha= : nom de l’auteur avec nom de famille en tête (exemple : auteur= Germaine de Staël | auteur alpha= Staël, Germaine de).
  • divers alpha= : clef alphabétique pour la colonne « divers ».

Paramètres de l’en-tête

modifier

L’en-tête de la liste, qui précise le nom de chaque colonne, est défini par {{liste documents début}}. Trois paramètres d’affichage peuvent être utilisés avec {{Liste documents début}} : class, rules et largeur.

  • class= : désactive le tri avec {{Liste documents début|class=unsortable}}.
  • rules= : affiche des lignes à l’intérieur des listes ; par exemple, rules=rows est utilisé dans cet exemple.
  • largeur= : définit en pourcentage la largeur de la liste.

Utilisation détaillée et exemples

modifier

Exemple 1 - normal

modifier
Code wiki Rendu

{{liste documents début}}

{{document| date=1758 |titre= Exemple 1 | avancement=}}

{{document| date=1760 |titre= Exemple 2 | avancement=4}}

{{document| date= |éditions=Arsène Lupin contre Herlock Sholmès | avancement=4}}

[…]

{{liste documents fin}}

 Titre et éditions
1758 : Exemple 1 
1760 : Exemple 2 Relu et corrigé
Plusieurs éditions disponibles 
Arsène Lupin contre Herlock Sholmès  Relu et corrigé Voir et modifier les données sur Wikidata

Exemple 2 - Titre et éditions

modifier
  • Colonne Titre et éditions
Code wiki Rendu
Le nom de la colonne des œuvres est par défaut Titre et éditions. Pour changer ce nom, par exemple pour faire une liste d’articles :
{{liste documents début|type=Articles}}
Articles
1758 : Exemple 1 
Pour supprimer le titre :
{{liste documents début|type=}}
1758 : Exemple 1 Relu et corrigé
Pour ajouter des colonnes prédéfinies
Des colonnes prédéfinies peuvent être ajoutées pour les titres originaux, les auteurs d’une liste bibliographique, des liens vers des fac-similés. Ces colonnes s’activent en ajoutant des paramètres dans {{liste documents début}}.
Liste des colonnes prédéfinies :
  • liste avec les titres originaux, utiliser : {{liste documents début|vo}}
  • liste bibliographique sur un auteur, utiliser : {{liste documents début|auteur}}
  • liste bibliographique sur un auteur avec les titres originaux, utiliser : {{liste documents début|vo|auteur}}
  • liste simple, date + titre, livre ou éditions, avec liens externes (uniquement Gallica, Internet Archive ou Google Livres) vers un fac-similé : {{liste documents début|scan}}
  • liste avec une colonne genre : fonctionne avec vo et scan (mais pas avec auteur), par exemple : {{liste documents début|vo|scan|genre}}
Deux remarques importantes :
Quand on ajoute plus d’une colonne prédéfinie, il faut le faire obligatoirement de l’une ou l’autre de ces manières : vo|auteur|scan, ou vo|scan, ou auteur|scan.
L’ajout de plus d’une colonne oblige à mentionner les paramètres vo, auteur ou scan, même en les laissant vide, ceci pour conserver l’alignement des données de la liste.
 Titre et éditions  Titre original
 Titre et éditions  Auteur
 Titre et éditions  Titre original  Auteur
 Titre et éditions Fac-similé
 Titre et éditions  Titre original  Genre Fac-similé

Exemple 3 - Différents cas de figures

modifier
Différents cas de figure
Code wiki Rendu
Utilisation minimale avec le titre seul

{{document|titre=[[Le Héros]] (première édition)}}

Pour indiquer seulement une date et un titre

{{document|date=1637|titre=Le Héros}}

Pour ajouter un lien vers un index (espace « Livre »)

{{document|date=1838|titre=Éloge historique de Jean-Antoine Chaptal|livre=Mémoires de l’Académie des sciences, Tome 15.djvu}}

ou, pour afficher un autre titre que le lien :

{{document|date=1882|titre=[[Ainsi parlait Zarathoustra{{!}}Ainsi parlait Zarathoustra, Albert 1901]]|livre=Nietzsche - Ainsi parlait Zarathoustra (trad. Albert, 1903).djvu}}

Pour le classement alphabétique correct d’une œuvre dans la liste

{{document|date=1637|titre=Le Héros|titre alpha=Héros}}

Pour ajouter le titre original

{{document|date=1637|titre=Le Héros|titre alpha=Héros|vo=''El Héroe''}}

Pour ajouter l’avancement

{{document|date=1637|titre=Le Héros|titre alpha=Héros|vo=''El Héroe''|avancement=2}}

 Titre et éditions  Titre original
Le Héros (première édition)  
1637 : Le Héros 
1838 :
Page d’accueil du livre 
Éloge historique de Jean-Antoine Chaptal  Voir et modifier les données sur Wikidata
1882 :
Page d’accueil du livre 
Ainsi parlait Zarathoustra, Albert 1901  Texte validé Voir et modifier les données sur Wikidata
1637 : Le Héros 
1637 : Le Héros  El Héroe
1637 : Le Héros Texte complet non-formaté El Héroe

Exemple 4 - en contexte

modifier


function clean_args(args)
	local cleaned = {}
	for k,v in pairs(args) do
		v = mw.text.trim(v)
		if v == '' then
			v = nil
		end
		cleaned[k] = v
	end
	return cleaned
end

function normalize_title(title)
	if title.isRedirect then
		return normalize_title(title.redirectTarget)
	else
		return title
	end
end

function date_link(date)
	if tonumber(date) ~= nil then
        if tonumber(date) < 0 then
		  date = tostring(math.abs(tonumber(date))) .. ' av. J.-C.'
	    end
		--TODO elzevir
	   local categorie_date = mw.title.makeTitle('Catégorie', date)
	   if categorie_date then 
		  return '[[:' .. categorie_date.fullText .. '|' .. date .. ']]'
	   else
		  return date
	   end
    else
        return date
    end
end

function analyser_titre(titre)
	-- Extrait les composants d'un paramètre titre=, editions= ou traductions=
    --   et renvoit également l'item Wikidata, s'il existe
    -- Exemples : 
    --    doc_title
    --    [[doc_title|doc_text]] doc_comment
	local doc_title = titre
	local doc_text = titre
	local doc_comment = ''
    local item_id = nil

	-- Recherche du lien s'il y en a un et un seul
	if mw.ustring.match(titre .. ' ', '^%s*%[%[[^%]]*%]%][^%[]*$') then
		for c1, c2, c3 in mw.ustring.gmatch( titre .. ' ', '%[%[([^|]*)|(.*)%]%](.*)') do
			doc_title = c1
			doc_text = c2
			doc_comment = c3 --string.sub(c3,1,string.len (c3) - 1)
		end
		for c, c0  in mw.ustring.gmatch( titre .. ' ', '%[%[([^|]*)%]%](.*)') do
			doc_title = c
			doc_text = c
			doc_comment = c0  --string.sub(c0,1,string.len (c0) - 1)
		end
	end
	local mw_title = mw.title.new(doc_title)
	if mw_title then
		doc_title = normalize_title(mw_title)
		item_id = mw.wikibase.getEntityIdForTitle(doc_title.fullText)
	end
	return {doc_title, doc_text, doc_comment, item_id}
end

function new_row(style, sort)
	local html = '\n| '
	if style then 
		html = html .. 'style="' .. style .. '" '
	end
	if sort then
		html = html .. 'data-sort-value="' .. mw.text.nowiki(sort) .. '" '
	end
	return html .. '|'
end

function error_message(text)
	-- Return a html formated version of text stylized as an error.
	local html = mw.html.create('div')
	html:addClass('error')
		:wikitext(text)
		:wikitext('[[Catégorie:Pages faisant un appel erroné au modèle Document]]')
	return tostring(html)
end

local p = {}

function p.document(frame)
	parentFrame = frame:getParent()
    args = clean_args(parentFrame.args)
    --args = clean_args(frame.args)

	--Rendu
	local html = '\n|- style="vertical-align:top;" '
	
	if args.date and (args.livre or args['éditions'] or args.traduction) then
		html = html .. new_row('white-space:nowrap;min-width:5em', nil)
	else
		html = html .. new_row('white-space:nowrap;', nil)
	end
	if args.date then
		html = html .. date_link(args.date) .. ' :'
	elseif args.dates then
		local formatted = {}
		local node = mw.html.create('div')
			:css('line-height', '90%')
			:css('font-size', '100%')
			:css('float', 'left')
		for k,date in pairs(mw.text.split(args.dates, '/')) do
			formatted[k] = date_link(date)
		end
		node:wikitext(table.concat(formatted, '<br/>') ..' :')
		html = html .. tostring(node)
	end

	local item_id = nil
	if args['éditions'] then
        local doc_info = analyser_titre(args['éditions'])
        local doc_title = doc_info[1]
		local doc_text = doc_info[2]
		local doc_comment = doc_info[3]
		item_id = doc_info[4]
		html = html .. '<div style="float:right">[[Image:Disambig.svg|Plusieurs éditions disponibles|link=|20px]]&nbsp;</div>'
		html = html .. new_row('padding-right: 2em;', args['titre alpha']) .. '<span class="lien-oeuvre">'
		if doc_title and doc_title.exists then
			html = html .. '[[' .. doc_title.fullText .. '|' .. doc_text .. ']]' .. doc_comment .. '&nbsp;'
		else
			html = html .. doc_text .. doc_comment .. '&nbsp;'
		end
        html = html .. '</span> '
	elseif args.traductions then
        local doc_info = analyser_titre(args.traductions)
        local doc_title = doc_info[1]
		local doc_text = doc_info[2]
		local doc_comment = doc_info[3]
		item_id = doc_info[4]
		html = html .. '<div style="float:right">[[Image:Disambig.svg|Plusieurs éditions disponibles|link=|20px]]&nbsp;</div>'
		html = html .. new_row('padding-right: 2em;', args['titre alpha']) .. '<span class="lien-oeuvre">'
		if doc_title and doc_title.exists then
			html = html .. '[[' .. doc_title.fullText .. '|' .. doc_text .. ']]' .. doc_comment .. '&nbsp;'
		else
			html = html .. doc_text .. doc_comment .. '&nbsp;'
		end
        html = html .. '</span> '
	elseif args.titre then
        local doc_info = analyser_titre(args.titre)
        local doc_title = doc_info[1]
		local doc_text = doc_info[2]
		local doc_comment = doc_info[3]
		item_id = doc_info[4]
		if args.livre then
			html = html .. '<div style="float:right">[[Image:Open book nae 02.svg|20px|link=Livre:' .. args.livre .. '|Page d’accueil du livre]]&nbsp;</div>'
		end			
		html = html .. new_row('padding-right:2em;', args['titre alpha'])
		if doc_title and doc_title.exists then
			html = html .. '[[' .. doc_title.fullText .. '|' .. doc_text .. ']]' .. doc_comment .. '&nbsp;'
		else
			html = html .. doc_text .. doc_comment .. '&nbsp;'
		end
	else
		return '|-'
		--TODO: return an error? return error_message('Le paramètre "titre" doit être renseigné')
	end
	if not args.avancement and item_id then
		item = mw.wikibase.getEntity(item_id)
		if item and item.sitelinks and item.sitelinks["frwikisource"] then
			for _,badge in pairs(item.sitelinks["frwikisource"].badges) do
				if badge == 'Q20748091' then
					args.avancement = '2'
				elseif badge == 'Q20748094' then
					args.avancement = '1'
				elseif badge == 'Q20748092' then
					args.avancement = '4'
				elseif badge == 'Q20748093' then
					args.avancement = '5'
				end
			end
		end
	end
	if args.avancement == '0' then
		html = html .. frame:expandTemplate{title = '0/4'}
	elseif args.avancement == '1' then
		html = html .. frame:expandTemplate{title = '1/4'}
	elseif args.avancement == '2' then
		html = html .. frame:expandTemplate{title = '2/4'}
	elseif args.avancement == '3' then
		html = html .. frame:expandTemplate{title = '3/4'}
	elseif args.avancement == '4' then
		html = html .. frame:expandTemplate{title = '4/4'}
	elseif args.avancement == '5' then
		html = html .. frame:expandTemplate{title = 'validé'}
	elseif args.avancement then
		mw.addWarning( 'La valeur' .. mw.text.jsonEncode(args.avancement) .. ' du paramètre avancement n\'est pas supporté par le modèle document' )
	end	
	if args[1] == 'epub' or args[1] == 'export' then
		html = html .. '&nbsp;' .. frame:expandTemplate{title = args[1], args = {args.titre}}
	elseif args[1] then
		html = html .. error_message('Paramètre non nommé inconnu: ' .. args[1])
	end
	if args['epub'] then
		html = html .. '&nbsp;' .. frame:expandTemplate{title = 'epub', args = {args.epub}}
	end
	if args['export'] then
		html = html .. '&nbsp;' .. frame:expandTemplate{title = 'export', args = {args.export}}
	end
	if args.DP == 'EU' then
	html = html .. frame:expandTemplate{title = 'DP-EU-Icon'}
	end
	if item_id then
		html = html .. ' [[Image:Blue pencil.svg|10px|link=d:' .. item_id .. '|Voir et modifier les données sur Wikidata]]'
	end

	if args.vo then
		html = html .. new_row('font-size:90%; padding-right:2em:', args['vo alpha']) .. args.vo
	end
	
	if args.auteur then
		local auteur_title = args.auteur
		local auteur_text = args.auteur
		for c1, c2 in mw.ustring.gmatch( args.auteur, '%[%[([^|]*)|(.*)%]%]') do
			auteur_title = c1
			auteur_text = c2
		end
		for c in mw.ustring.gmatch( args.auteur, '%[%[([^|]*)%]%]') do
			auteur_title = c
			auteur_text = c
		end
    	html = html .. new_row('font-size:90%; padding-right:2em;', args['auteur alpha'])
		local auteur_title = mw.title.new(auteur_title, 'Auteur')
		if auteur_title and auteur_title.exists then
			html = html .. '[[' .. auteur_title.fullText .. '|' .. auteur_text .. ']]'
		else
			html = html .. auteur_text
		end
	end
	
	if args.genre then
		html = html .. new_row('font-size:90%; padding-right:2em;', nil) .. args.genre
	end
	
	if args.scan then
		html = html .. new_row('font-size:90%; padding-right:2em;', nil) .. '<span class="plainlink">' .. args.scan .. '</span>'
	end
	
	if args.divers then
		html = html .. new_row('font-size:90%; padding-right:2em;', args['divers alpha']) .. args.divers
	end
	
	if args.revue then
		local revue_parts = mw.text.split(args.revue, '/')
		if revue_parts[1] == 'RDDM' and len(revue_parts) == 2 then
			html = html .. new_row('font-size:90%; padding-right:2em;', nil) .. args.divers .. "''Revue des Deux Mondes'', n°" .. revue_parts[2] .. ', ' .. args.date
		end
	end
	
	return html
end


return p