Modulo:Header template
La documentazione per questo modulo può essere creata in Modulo:Header template/man
function headerTemplate( frame )
local parentFrame = frame:getParent()
local args = parentFrame.args
local page = mw.title.getCurrentTitle()
local headerType = args.value
if args.header_type and args.header_type ~= '' then
headerType = args.header_type
end
headerType = mw.ustring.lower( headerType ) --Permet d'écrire le type en majuscule ou en minuscule
local estSommaire = (headerType == 'sommaire' or headerType == 'toc')
--Custom page numbers
local from = ''
if args.displayed_from and args.displayed_from ~= '' then
from = args.displayed_from
elseif args.from then
from = args.from
end
local to = ''
if args.displayed_to and args.displayed_to ~= '' then
to = args.displayed_to
elseif args.to then
to = args.to
end
--Début du header
local text = '' --TODO
classement( parentFrame, page, args )
if args.header_type == 'empty' then
if args.sommaire then
return text .. '<div id="ws-summary" style="margin-top:1em">\n' .. args.sommaire .. '</div>'
else
return text
end
end
text = text .. '<div id="headertemplate" class="ws-noexport"><div class="'
if args.type == 'journal' then
text = text .. 'headertemplate-journal'
else
text = text .. 'headertemplate'
end
text = text .. '">'
--Auteur
if args.auteur and args.auteur ~= '' then
text = text .. '<div class="headertemplate-author">' .. args.auteur .. '</div>'
end
--Titre
local titre = page.baseText
if args.type == 'collection' then
if args.current then
titre = args.current
end
if args.recueil and args.recueil ~= '' then
titre = titre .. ' — <i>' .. args.recueil .. '</i>'
end
elseif args.type == 'journal' then
if estSommaire then
titre = args.titre
elseif args.current then
titre = args.current
end
else
if args.titre then
titre = args.titre
end
if args.publication and args.publication ~= '' then
titre = titre .. ' <span style="font-size:90%;">(' .. args.publication .. ')</span>'
end
end
if estSommaire and args['sous-titre'] and args['sous-titre'] ~= '' then
titre = titre .. '<br/><small>' .. args['sous-titre'] .. '</small>'
end
text = text .. '<div class="headertemplate-title">' .. titre .. '</div>'
--References
text = text .. '<div class="headertemplate-reference">'
if args.traducteur and args.traducteur ~= '' then
text = text .. 'Traduction par ' .. args.traducteur .. '.<br />'
end
if estSommaire and args.illustrateur and args.illustrateur ~= '' then
text = text .. 'Illustrations par ' .. args.illustrateur .. '.<br />'
end
if estSommaire and args.volume and args.volume ~= '' then
text = text .. args.volume .. '<br />'
end
local infos = {} --Liste des données à afficher séparés par une virgule
if args.type == 'collection' then
table.insert( infos, '<i>' .. args.titre .. '</i>' )
if args.editeur_scientifique and args.editeur_scientifique ~= '' then
table.insert( infos, 'Texte établi par ' .. args.editeur_scientifique )
end
if args.editeur and args.editeur ~= '' then
table.insert( infos, args.editeur )
end
if args.annee and args.annee ~= '' then
table.insert( infos, args.annee )
end
if not estSommaire then
if args.volume and args.volume ~= '' then
table.insert( infos, args.volume )
end
end
elseif args.type == 'journal' then
if estSommaire then
table.insert( infos, args.annee )
else
table.insert( infos, '<i>' .. args.titre .. '</i>' )
if args.volume and args.volume ~= '' then
table.insert( infos, args.volume )
end
if args.annee and args.annee ~= '' then
table.insert( infos, args.annee )
end
end
else
if args.editeur_scientifique and args.editeur_scientifique ~= '' then
table.insert( infos, 'Texte établi par ' .. args.editeur_scientifique )
end
if args.editeur and args.editeur ~= '' then
table.insert( infos, args.editeur )
end
if args.annee and args.annee ~= '' then
table.insert( infos, args.annee )
end
end
local line = ''
if infos ~= {} then
line = table.concat( infos, ', ' )
end
--Parenthèse
if not estSommaire and from ~= '' then
line = line .. ' ('
if args.volume and args.volume ~= '' and args.type ~= 'collection' and args.type ~= 'journal' then
line = line .. args.volume .. ', '
end
line = line .. pagination( from, to ) .. ')'
end
if line ~= '' then
line = line .. '.'
end
text = text .. line .. '</div></div></div>' --Fin du header
text = text .. '<div id="subheader" class="ws-noexport" style="margin-bottom:1.5em">'
if estSommaire then
local texteEntier = mw.title.new( page.prefixedText .. '/Texte entier' )
if texteEntier and texteEntier.exists then
text = text .. '<div style="text-align:center;">[[' .. texteEntier.fullText .. '|Texte sur une seule page]]</div>'
end
end
if not estSommaire and ((args.prev and args.prev ~= '') or (args.next and args.next ~= '')) then
local maxwidth = 50
if args.current and args.current ~= '' then
maxwidth = 33
end
text = text .. '<div class="footertemplate ws-noexport">'
text = text .. '<div style="width: 100%; padding-left:0px; padding-right:0px; background-color:transparent;" class="ws-noexport">'
if args.prev and args.prev ~= '' then
text = text .. '<div style="text-align:left; float:left; max-width:' .. maxwidth .. '%;"><span id="headerprevious"><span style="color:#808080">◄ </span>' .. args.prev .. '</span></div>'
end
if args.next and args.next~= '' then
text = text .. '<div style="text-align:right; float:right; max-width:' .. maxwidth .. '%;"><span id="headernext">' .. args.next .. '<span style="color:#808080"> ►</span></span></div>'
end
text = text .. '<div style="text-align:center; margin-left: 25%; margin-right: 25%;">'
if type ~= 'collection' and args.current and args.current ~= '' then
text = text .. args.current
end
text = text .. '</div></div><div style="clear:both;"></div></div>'
end
text = text .. '</div>' --LF Ici nécessaire pour l’épigraphe
-- Inclusion de l'épigraphe et du sommaire
if headerType == 'toc' then
if args.epigraphe and args.epigraphe ~= '' then
text = text .. args.epigraphe .. '\n'
end
text = text .. '<div id="ws-summary" style="margin-top:1em">\n' .. args.sommaire .. '</div>'
elseif headerType == 'sommaire' then
text = text .. '<div id="ws-summary">'
end
--Métadonnées
local coins = {}
local uriCoins = 'ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A'
coins['rft.genre'] = 'unknown'
coins['rfr_id'] = tostring( page:fullUrl( nil, "canonical" ) )
text = text .. '<div id="ws-data" class="ws-noexport" style="display:none; speak:none;">'
if args.type then
text = text .. outputMicroformatRow( 'type', args.type )
end
if args.type and args.type == 'journal' then
uriCoins = uriCoins .. 'journal'
if estSommaire then
coins['rft.genre'] = 'publication'
coins['rft.jtitle '] = titre
else
coins['rft.genre'] = 'article'
coins['rft.atitle'] = titre
if args.titre then
coins['rft.jtitle'] = args.titre
text = text .. outputMicroformatRow( 'periodical', args.titre )
end
end
else
uriCoins = uriCoins .. 'book'
if estSommaire then
coins['rft.btitle '] = titre
else
coins['rft.atitle '] = titre
end
if args.type and args.type == 'book' then
if estSommaire then
coins['rft.genre'] = 'book'
else
coins['rft.genre'] = 'bookitem'
end
end
end
text = text .. outputMicroformatRow( 'title', titre )
if args.auteur and args.auteur ~= '' then
text = text .. outputMicroformatRow( 'author', args.auteur )
coins['rft.au'] = args.auteur
end
if args.traducteur and args.traducteur ~= '' then
text = text .. outputMicroformatRow( 'translator', args.traducteur )
end
if args.illustrateur and args.illustrateur ~= '' then
text = text .. outputMicroformatRow( 'illustrator', args.illustrateur )
end
if args.school and args.school ~= '' then
text = text .. outputMicroformatRow( 'school', args.school )
end
if args.editeur and args.editeur ~= '' then
text = text .. outputMicroformatRow( 'publisher', args.editeur )
coins['rft.pub'] = args.editeur
end
if args.annee and args.annee ~= '' then
text = text .. outputMicroformatRow( 'year', args.annee )
coins['rft.date'] = args.annee
end
if args.lieu and args.lieu ~= '' then
text = text .. outputMicroformatRow( 'place', args.lieu )
coins['rft.place'] = args.lieu
end
if args.avancement and args.avancement ~= '' then
text = text .. outputMicroformatRow( 'progress', args.avancement )
end
if args.volume and args.volume ~= '' then
text = text .. outputMicroformatRow( 'volume', args.volume )
end
if args.current and args.current ~= '' then
text = text .. outputMicroformatRow( 'chapter', args.current )
end
if args.index then
text = text .. outputMicroformatRow( 'scan', args.index )
if args.image and mw.ustring.match(args.image, '^%d+$') ~= nil then
text = text .. outputMicroformatRow( 'image', args.index .. '/' .. args.image )
end
end
if from ~= '' and to ~= '' then
if from == to then
text = text .. outputMicroformatRow( 'pages', from )
else
text = text .. outputMicroformatRow( 'pages', from .. '-' .. to )
end
coins['rft.spage'] = from
coins['rft.epage'] = to
end
text=text..'<span class="Z3988" title="' .. uriCoins .. '&' .. mw.uri.buildQueryString( coins ) .. '"> </span></div>'
text=text..'<div class="testi">'
return text
end
function classement( frame, page, args )
local classement = require 'Module:Classement'
local key = ''
if args.type and args.type == 'journal' then
key = classement.getSortKey( {args= {page.text}} )
elseif args.type and args.type == 'dictionary' then
key = classement.getSortKey( {args= {page.subpageText}} )
elseif not page.isSubpage then
key = classement.getSortKey( {args= {page.text}} )
end
if key ~= '' then
--Evite le parse des paramètres passés à la page.
local child = frame:newChild{ title = page.text, args = {} }
child:preprocess( '{{DEFAULTSORT:' .. key .. '}}\n' )
end
end
function pagination( from, to )
if from ~= '' and to ~= '' then
if from == to then
return '<abbr title="page">p.</abbr> ' .. from
else
return '<abbr title="pages">pp.</abbr> ' .. from .. '-' .. to
end
end
end
function outputMicroformatRow( name, value )
return '<span class="ws-' .. name .. '">' .. value .. '</span>'
end
local p = {}
function p.headerTemplate( frame )
return headerTemplate( frame )
end
return p