Module:Document
Version : 2021-01-30
- ajouter un sous-titre optionnel sous la forme [[titre]] sous-titre ou [[titre|libellé]] sous-titre
- déplacer les icones — éditions multiples, traductions ou lien à l’espace livre — dans la première cellule après la date
- ajouter un espace insécable entre le titre et les icones d’exportation, avancement et wikidata
- réduire le padding de 3 em à 2 em à droite du champ Titre — Éditions
- alignement vertical du texte avec le haut de la cellule plutôt qu’au milieu
- icone-avancement à positionner immédiatement après le titre
- ne plus valider le lien sur la catégorie date comme proposé par Tpt pour réduire la charge
- conserver une taille de 100% même lorsqu’il y a 2 dates
- date non numérique affichée en simple texte
- 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ètre | Description | Type | État | |
---|---|---|---|---|
Date de publication | date | Peut contenir une valeur différente ex : Inc. ou 195?
| Chaîne | facultatif |
Dates de début et de fin | dates | Dates séparées par /
| Chaîne | facultatif |
Titre de l’œuvre | titre | Texte ou [lien suivi d’une description] avec ou sans [titre alpha]
| Chaîne | facultatif |
Éditions multiples | éditions | Nom de la page contenant la liste avec ou sans [titre alpha]
| Chaîne | facultatif |
Traductions multiples | traductions | Nom de la page contenant la liste des traductions avec ou sans [titre alpha]
| Chaîne | facultatif |
Clef alphabétique du titre | titre alpha | Titre tel qu’indiqué dans un dictionnaire, pour classement alphabétique
| Chaîne | obligatoire |
Nom du fac-similé | livre | Page d’index sans le préfixe ''Livre''
| Chaîne | facultatif |
Avancement | avancement | Valeur de 1 à 5 ; 5 correspond à validé | Nombre | facultatif |
Icônes pour exportations | export | Nom de la page à exporter, si différent de l’argument titre
| Chaîne | facultatif |
Titre original | vo | Titre lors du lancement si différent avec ou sans [vo alpha]
| Chaîne | facultatif |
Clef alphabétique du titre original | vo alpha | Titre original tel qu’indiqué dans un dictionnaire, pour classement alphabétique
| Chaîne | facultatif |
Auteur | auteur | Nom de l’auteur ou co-auteur avec ou sans [auteur alpha]
| Chaîne | facultatif |
Clef alphabétique de l’auteur | auteur alpha | Nom de l’auteur tel qu’indiqué dans un dictionnaire, pour classement alphabétique
| Chaîne | facultatif |
Genre | genre | Genre de l’ouvrage
| Chaîne | facultatif |
Source | scan | lien URL | URL | facultatif |
Divers | divers | Champ libre avec ou sans [divers alpha] | Chaîne | facultatif |
Clef alphabétique du champ Divers | divers alpha | Contenu du champ Divers tel qu’indiqué dans un dictionnaire, pour classement alphabétique | Chaîne | facultatif |
Revue | revue | Référence au numéro de la Revue Des Deux Mondes
| Chaîne | facultatif |
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 écriretitre=[[titre de la page|titre à afficher]] sous-titre/commentaire
(dans ce cas, veiller à modifier le paramètreexport=
).éditions=
: utilisable à la place du paramètretitre=
, pour créer un lien vers une page contenant une liste d’éditions ; la syntaxe est la même que pourtitre=
.traductions=
: utilisable à la place du paramètretitre=
, pour créer un lien vers une page contenant une liste de traductions auteur ; la syntaxe est la même que pourtitre=
.auteur=
: prénom et nom de l’auteur ; le nom d’auteur devient automatiquement un lien quand existe une page Auteur:, mais on peut écrireauteur=[[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.
- écrire
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, voyezlivre=
). 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 ajouterdivers= 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]- On place
{{liste documents début}}
au début de la liste et{{Liste documents fin}}
à la fin de la liste :
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}} |
|
Exemple 2 - Titre et éditions
[modifier]- Colonne Titre et éditions
Code wiki | Rendu | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{liste documents début|type=Articles}} |
| ||||||||||||||||||
{{liste documents début|type=}} |
| ||||||||||||||||||
|
|
Exemple 3 - Différents cas de figures
[modifier]- Différents cas de figure
Code wiki | Rendu |
---|---|
|
Exemple 4 - en contexte
[modifier]- Voir un 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 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]] </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 .. ' '
else
html = html .. doc_text .. doc_comment .. ' '
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]] </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 .. ' '
else
html = html .. doc_text .. doc_comment .. ' '
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]] </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 .. ' '
else
html = html .. doc_text .. doc_comment .. ' '
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 .. ' ' .. 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.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