Module:Document

La bibliothèque libre.
Sauter à la navigation Sauter à la recherche
Documentation du module Documentation du module[voir] [modifier] [purger]
La documentation de ce module est incluse depuis sa sous-page de documentation.
Présentation 
Ce modèle sert à créer dans l’espace « Auteur » ou dans les pages d’éditions multiples des listes triables d’œuvres correctement mises en forme. Chaque ligne doit contenir au minimum un titre. Le modèle utilise {{liste documents début}} et {{Liste documents fin}}.
Avantages : Il n’y a pas besoin de connaître la syntaxe des tableaux et la mise en forme est homogène.
Inconvénients : il faut connaître les paramètres et la manipulation du modèle peut être un peu lourde.
Syntaxe de base 
Pour chaque ligne de la liste, avec, entre crochets, les données facultatives :
{{document| [date =] | titre= ou éditions= ou traductions= | [titre alpha=] | [livre=] | [avancement=] | [export=]}}


Exemple 
On place {{liste documents début}} au début de la liste et {{Liste documents fin}} à la fin de la liste.

{{liste documents début}}

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

{{document| date=1760 |titre= Autre exemple | avancement=}}

{{document| date= |éditions= Autre exemple | avancement=4}}

[…]

{{liste documents fin}}

 Titre et éditions
1758 :  Exemple
1760 :  Autre exemple
Autre exemple Plusieurs éditions disponibles Relu et corrigé


Colonne Titre et éditions
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}}
Pour supprimer le titre, en ne laissant que le bouton de tri :
{{liste documents début|type=}}


Ajouter des colonnes prédéfinies avec {{liste documents début}}
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}}.
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.
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}}


Colonne libre
Un paramètre divers= permet en outre de définir sa propre colonne. Cette colonne est dans tous les cas ajoutée tout à droite de la liste.


Tous les paramètres de {{Document}}
1re colonne (optionnelle) 
  • Date/dates (lien automatique vers la catégorie) :
    • date= :
      • soit : année de publication seule (exemple : « 1902 »), sous la forme d’un lien vers la catégorie quand elle existe.
      • soit : année et mois de publication (pour les revues), sous la forme « 1902/04 », avec un lien vers la catégorie de l’année quand elle existe.
    • dates= : Dates de début et de fin de publication, exemple : dates=1909/1911
  • Autre : on peut remplacer la date par n’importe quoi, par exemple —, en écrivant date=— (attention toutefois à ne pas remplacer la date par un texte trop encombrant qui risque de modifier l’alignement des colonnes).
  • Rien : ne pas utiliser le paramètre, ou le laisser vide.
2ème colonne 
  • 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]].
    • titre alpha= : Classement alphabétique du titre en français (si nécessaire)
  • livre = : lien vers l’index sans le préfixe Livre.
  • éditions= : utilisable à la place du paramètre titre, pour créer un lien vers une page contenant une liste d’éditions, suivi de [+] pour afficher cette liste directement dans la page auteur.
  • traductions= : utilisable à la place du paramètre titre, pour créer un lien vers une page contenant une liste de traductions, suivi de [+] pour afficher cette liste directement dans la page auteur.
  • avancement= : Avancement, de 0 à 5. 0 équivaut à {{0/4}}, et 5 équivaut à {{validé}}.
  • export : affiche trois icônes cliquables pour télécharger un livre aux formats ePub, PDF et mobi depuis une page Auteur ou d’éditions multiples. On peut ajouter « export » seul, quand le paramètre « titre » est le titre exact de la page. Si ce n’est pas le cas, il faut obligatoirement spécifier ce titre : « export=titre ». Voir Catégorie:Bon pour export pour les critères d’utilisation.
3ème, 4ème et/ou 5ème colonnes (optionnelles) 
  • vo= Titre original
    • vo alpha= Classement alphabétique du titre original (si nécessaire).
  • auteur=
    • auteur alpha=
  • scan =


Autres paramètres
Trois paramètres d’affichage peuvent être utilisés avec {{Liste documents début}} : class, rules et largeur.
  • Avec le paramètre class, on peut désactiver le tri :
{{Liste documents début|class=unsortable}}
  • Le paramètre rules permet d’afficher des lignes à l’intérieur des listes. Par exemple, rules=rows donnera un affichage plus lisible pour des listes bibliographiques détaillées (exemple).
  • Le paramètre largeur définit en pourcentage la largeur de la liste.


Comment utiliser le 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.

Les tris se font directement sur les paramètres date, titre, auteur et vo. Quand le paramètre livre est utilisé, le tri se fait également d’après le paramètre titre.

Pour que le tri fonctionne bien, il faut veiller à indiquer pour chaque ligne une date et un titre, et pour éviter de mélanger les éditions, on pourra utiliser le paramètre éditions plutôt que de faire la liste dans la page auteur (ce paramètre n’est pour le moment pas en fonction par défaut). Dans le cas où la fonction de tri est inutilisable, on pourra la désactiver en ajoutant class=unsortable dans {{Liste documents début}}.

Si un titre commence par un article, il sera trié d’après cet article. Pour qu’il soit trié correctement (dans le cas des articles le, la, les), il faut utiliser le paramètre titre alpha.


Exemples 
Utilisation minimale avec le titre seul 
{{document|titre=Le Héros}}
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|traduction H. Albert de 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}}


Voir exemple complet 
Auteur:Baltasar Gracián


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 and 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 and categorie_date.exists then
		return '[[:' .. categorie_date.fullText .. '|' .. date .. ']]'
	else
		return date
	end
end

function optional_link(text)
	local title = mw.title.new(text)
	if title and title.exists then
		return '[[:' .. title.fullText .. '|' .. text .. ']]'
	else
		return text
	end
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|- '

	html = html .. '\n| '
	if args.date then
		html = html .. date_link(args.date) .. ' :&nbsp;'
	elseif args.dates then
		local formatted = {}
		local node = mw.html.create('div')
			:css('line-height', '70%')
			:css('font-size', '75%')
		for k,date in pairs(mw.text.split(args.dates, '/')) do
			formatted[k] = date_link(date)
		end
		node:wikitext(table.concat(formatted, '<br/>') ..' :&nbsp;')
		html = html .. tostring(node)
	end

	local item_id = nil
	if args['éditions'] then
		local editions_title = mw.title.new(args['éditions'])
		if editions_title then
			item_id = mw.wikibase.getEntityIdForTitle(editions_title.fullText)
		end
		html = html .. new_row('padding-right: 3em; valign:top;', args['titre alpha']) .. '<span class="lien-oeuvre">' .. optional_link(args['éditions']) .. '</span> [[Image:Disambig.svg|Plusieurs éditions disponibles|link=|20px]] '
	elseif args.traductions then
		local editions_title = mw.title.new(args.traductions)
		if editions_title then
			item_id = mw.wikibase.getEntityIdForTitle(editions_title.fullText)
		end
		html = html .. new_row('padding-right: 3em; valign:top;', args['titre alpha']) .. '<span class="lien-oeuvre">' .. optional_link(args.traductions) .. '</span> [[Image:Disambig.svg|Plusieurs traductions disponibles|link=|20px]] '
	elseif args.titre then
		local edition_title = args.titre
		local edition_text = args.titre
		for c1, c2 in mw.ustring.gmatch( args.titre, '%[%[([^|]*)|(.*)%]%]') do
			edition_title = c1
			edition_text = c2
		end
		for c in mw.ustring.gmatch( args.titre, '%[%[([^|]*)%]%]') do
			edition_title = c
			edition_text = c
		end
		edition_title = normalize_title(mw.title.new(edition_title))
		
		if edition_title then
			item_id = mw.wikibase.getEntityIdForTitle(edition_title.fullText)
		end
		
		html = html .. new_row('padding-right: 3em; valign:top;', args['titre alpha'])
		if edition_title and edition_title.exists then
			html = html .. '[[' .. edition_title.fullText .. '|' .. edition_text .. ']]'
		else
			html = html .. edition_text
		end
		if args.livre then
			html = html .. ' [[Image:Open book nae 02.svg|20px|link=Livre:' .. args.livre .. ']] '
		end
	else
		return '|-'
		--TODO: return an error? return error_message('Le paramètre "titre" doit être renseigné')
	end
	if args[1] == 'epub' or args[1] == 'export' then
		html = html .. 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 .. frame:expandTemplate{title = 'epub', args = {args.epub}}
	end
	if args['export'] then
		html = html .. frame:expandTemplate{title = 'export', args = {args.export}}
	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é'}
	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