Modulenn:Header template

Eus Wikimammenn
Sauter à la navigation Sauter à la recherche

La documentation pour ce module peut être créée à Modulenn:Header template/doc

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
    local Taolennzo = (headerType == 'Taolenn' or headerType == 'toc')

    --Début du header
    local text = '' --TODO
    classement( parentFrame, page, args )
    if args.header_type == 'empty' then
        if args.taolenn then
            return text .. '<div id="ws-summary" style="margin-top:1em">\n' .. args.taolenn .. '</div>'
        else
            return text
        end
    end

    text = text .. '<div id="headertemplate" class="ws-noexport"><div class="'
    if args.type == 'kazetenn' then
        text = text .. 'headertemplate-journal'
    else
        text = text .. 'headertemplate'
    end
    text = text .. '">'

    --Auteur
    if args.oberour and args.oberour ~= '' then
        text = text .. '<div class="headertemplate-author">' .. args.oberour .. '</div>'
    end

    --Titre
    local titl = page.baseText
    if args.type == 'dastummad' then
        if args.current then
            titre = args.current
        end
        if args.recueil and args.recueil ~= '' then
            titre = titre .. '&#32;— <i>' .. args.recueil .. '</i>'
        end
    elseif args.type == 'kazetenn' then
        if Taolennzo then
            titl = args.titl
        elseif args.current then
            titl = args.current
        end
    else
        if args.titl then
            titl = args.titl
        end
        if args.publication and args.publication ~= '' then
            titl = titl .. ' <span style="font-size:90%;">(' .. args.publication .. ')</span>'
        end
    end
    text = text .. '<div class="headertemplate-title">' .. titl .. '</div>'

    --References
    text = text .. '<div class="headertemplate-reference">'
    if args.troer and args.troer ~= '' then
        text = text .. 'Troet gant ' .. args.troer .. '.<br />'
    end

    if Taolennzo and args.levrenn and args.levrenn ~= '' then
          text = text .. args.levrenn .. '<br />'
    end

    local infos = {} --Liste des données à afficher séparés par une virgule
    if args.type == 'dastummad' then
        table.insert( infos, '<i>' .. args.titl .. '</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, ',&nbsp;' )
    end

    --Parenthèse
    if not Taolennzo and args.from and args.from ~= '' then
        line = line .. ' ('
        if args.levrenn and args.levrenn ~= '' and args.type ~= 'dastummad' and args.type ~= 'kazetenn' then
            line = line .. args.levrenn .. ',&nbsp;'
        end
        line = line .. pagination( args ) .. ')'
    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 Taolennzo then
        local texteEntier = mw.title.new( page.prefixedText .. '/a-bezh' )
        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 Taolennzo 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">&#x25C4;&nbsp;&nbsp;</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">&nbsp;&nbsp;&#x25BA;</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
        end
        text = text .. '<div id="ws-summary" style="margin-top:1em">\n' .. args.taolenn .. '</div>'
    elseif headerType == 'Taolenn' 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 == 'kazetenn' then
        uriCoins = uriCoins .. 'kazetenn'
        if estSommaire then
            coins['rft.genre'] = 'publication'
            coins['rft.jtitle '] = titl
        else
            coins['rft.genre'] = 'pennad'
            coins['rft.atitle'] = titl
            if args.titre then
                coins['rft.jtitle'] = args.titl
                text = text .. outputMicroformatRow( 'periodical', args.titl )
            end
        end
    else
        uriCoins = uriCoins .. 'book'
        if Taolennzo then
            coins['rft.btitle '] = titl
        else
            coins['rft.atitle '] = titl
        end
        if args.type and args.type == 'book' then
            if Taolennzo then
                coins['rft.genre'] = 'book'
            else
                coins['rft.genre'] = 'bookitem'
            end
        end
    end
    text = text .. outputMicroformatRow( 'title', titl )
    if args.oberour and args.oberour ~= '' then
        text = text .. outputMicroformatRow( 'author', args.oberour )
        coins['rft.au'] = args.oberour
    end
    if args.troer and args.troer ~= '' then
        text = text .. outputMicroformatRow( 'translator', args.troer )
    end
    if args.illustrateur and args.illustrateur ~= '' then
        text = text .. outputMicroformatRow( 'illustrator', args.illustrateur )
    end
    if args.skol and args.skol ~= '' then
        text = text .. outputMicroformatRow( 'school', args.skol )
    end
    if args.embanner and args.embanner ~= '' then
        text = text .. outputMicroformatRow( 'publisher', args.embanner )
        coins['rft.pub'] = args.embanner
    end
    if args.bloavezh and args.bloavezh ~= '' then
        text = text .. outputMicroformatRow( 'year', args.bloavezh )
        coins['rft.date'] = args.bloavez
    end
    if args.chomlech and args.chomlech ~= '' then
        text = text .. outputMicroformatRow( 'place', args.chomlech )
        coins['rft.place'] = args.chomlech
    end
    if args.araokaat and args.araokaat ~= '' then
        text = text .. outputMicroformatRow( 'progress', args.araokaat )
    end
    if args.levrenn and args.levrenn ~= '' then
        text = text .. outputMicroformatRow( 'volume', args.levrenn )
    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 args.from and args.to then
        if args.from == args.to then
            text = text .. outputMicroformatRow( 'pages', args.from )
        else
            text = text .. outputMicroformatRow( 'pages', args.from .. '-' .. args.to )
        end
        coins['rft.spage'] = args.from
        coins['rft.epage'] = args.to
    end
    return text .. '<span class="Z3988" title="' .. uriCoins .. '&' .. mw.uri.buildQueryString( coins ) .. '">&nbsp;</span></div>'
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( args )
    if args.from and args.to and args.from ~= '' and args.to ~= '' then
        if args.from == args.to then
            return '<abbr title="page">p.</abbr>&nbsp;' .. args.from
        else
            return '<abbr title="pages">pp.</abbr>&nbsp;' .. args.from .. '-' .. args.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