Module:Documentation : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(preprocess de preprocess, intéressant...)
(non malheureusement)
Ligne 15 : Ligne 15 :
  
 
     --Génération de la documentation
 
     --Génération de la documentation
     table.insert(corps, frame:preprocess(p.entete(args, page)))
+
     table.insert(corps, frame:preprocess(p.entete(frame, args, page)))
 
     table.insert(corps, p.contenu(frame, args, page))
 
     table.insert(corps, p.contenu(frame, args, page))
     table.insert(corps, frame:preprocess(p.notice(args, page)))
+
     table.insert(corps, frame:preprocess(p.notice(frame, args, page)))
  
 
     --Code HTML brut
 
     --Code HTML brut
Ligne 48 : Ligne 48 :
 
end
 
end
  
function p.entete(args, page)
+
function p.entete(frame, args, page)
 
     local entete = {'<div style="clear:both; margin:1em 0 0 0; border:1px solid #aaa; background:'}
 
     local entete = {'<div style="clear:both; margin:1em 0 0 0; border:1px solid #aaa; background:'}
 
     local doc = p.docname(page)
 
     local doc = p.docname(page)
Ligne 123 : Ligne 123 :
 
end
 
end
  
function p.notice(args, page)
+
function p.notice(frame, args, page)
 
     local notice = {}
 
     local notice = {}
 
     local doc = p.docname(page)
 
     local doc = p.docname(page)
Ligne 172 : Ligne 172 :
 
         table.insert(notice, 'Les éditeurs peuvent travailler dans le ')
 
         table.insert(notice, 'Les éditeurs peuvent travailler dans le ')
  
         if args[1] and p.ifexist('{{#rel2abs:' .. args[1] .. '/../Bac à sable}}')
+
         if args[1] and p.ifexist(frame:preprocess('{{#rel2abs:' .. args[1] .. '/../Bac à sable}}'))
         or p.ifexist('{{#rel2abs:' .. doc .. '/../Bac à sable}}') then
+
         or p.ifexist(frame:preprocess('{{#rel2abs:' .. doc .. '/../Bac à sable}}')) then
 
             table.insert(notice, '[[{{#rel2abs:')
 
             table.insert(notice, '[[{{#rel2abs:')
 
             if args[1] then
 
             if args[1] then
Ligne 202 : Ligne 202 :
 
         table.insert(notice, ' et la page de ')
 
         table.insert(notice, ' et la page de ')
  
         if args[1] and p.ifexist('{{#rel2abs:' .. args[1] .. '/../Test}}')
+
         if args[1] and p.ifexist(frame:preprocess('{{#rel2abs:' .. args[1] .. '/../Test}}'))
         or p.ifexist('{{#rel2abs:' .. doc .. '/../Test}}') then
+
         or p.ifexist(frame:preprocess('{{#rel2abs:' .. doc .. '/../Test}}')) then
 
             table.insert(notice, '[[{{#rel2abs:')
 
             table.insert(notice, '[[{{#rel2abs:')
 
             if args[1] then
 
             if args[1] then

Version du 23 juillet 2013 à 13:49

La documentation pour ce module peut être créée à Module:Documentation/doc

--Ce module implemente le modèle {{Documentation}}.

local p = {}

function p.corps(frame)
    local args = frame:getParent().args
    local page = mw.title.getCurrentTitle()
    local corps = {}

    --Bandeau pour les sous-pages /Bac à sable
    if page.subpageText == 'Bac à sable' then
        table.insert(corps, '<div style="clear:both />')
        table.insert(corps, frame:preprocess('{{Sous-page de bac à sable}}'))
    end

    --Génération de la documentation
    table.insert(corps, frame:preprocess(p.entete(frame, args, page)))
    table.insert(corps, p.contenu(frame, args, page))
    table.insert(corps, frame:preprocess(p.notice(frame, args, page)))

    --Code HTML brut
    if args.raw then
        return frame:preprocess('<nowiki>' .. table.concat(corps) .. '</nowiki>')
    end

    return table.concat(corps)

end

function p.ifexist(page)
    if not page then return false end
    if mw.title.new(page).exists then return true end
    return false
end

function p.docname(page)
    --On n'est pas dans une sous-page
    if not page.isSubpage then return page.subjectNsText .. ":" .. page.text .. "/Documentation" end

    --On est dans une sous-page
    if page.subpageText == 'Documentation'
    or page.subpageText == 'Bac à sable'
    or page.subpageText == 'Test' then
        return page.subjectNsText .. ":" .. page.baseText .. "/Documentation"
    else
        return page.subjectNsText .. ":" .. page.text .. "/Documentation"
    end
end

function p.entete(frame, args, page)
    local entete = {'<div style="clear:both; margin:1em 0 0 0; border:1px solid #aaa; background:'}
    local doc = p.docname(page)

    if not args.couleur then
        table.insert(entete, '#ecfcf4')
    else
        table.insert(entete, args.couleur)
    end

    table.insert(entete, '; padding:1em 1em 0.8em;">')
    table.insert(entete, '<div style="margin-bottom:1ex; border-bottom:1px solid #aaa; padding-bottom:3px;">')
    table.insert(entete, '[[Fichier:Template-info.png|50px|alt=Documentation du modèle|link=]]')
    table.insert(entete, '<span style="font-weight:bold; font-size:125%">&nbsp;')

    if args.titre then
        table.insert(entete, args.titre)
    else
        table.insert(entete, 'Documentation')
    end
    table.insert(entete, '</span>')

    if not args.contenu then
        table.insert(entete, '<span id="doc_editlinks" class="mw-editsection plainlinks">&#91;[')
        table.insert(entete, '{{fullurl:')

        if args[1] then
            if p.ifexist(args[1]) then
                table.insert(entete, args[1])
                table.insert(entete, '|action=edit modifier}}]&#93;&#32;&#91;{{Purger le cache|purger}}')
            else
                table.insert(entete, args[1])
                table.insert(entete, '|action=edit&preload=Modèle:Documentation/Preload créer}}]')
            end
        else
            if p.ifexist(doc) then
                table.insert(entete, doc)
                table.insert(entete, '|action=edit modifier}}]&#93;&#32;&#91;{{Purger le cache|purger}}')
            else
                table.insert(entete, doc)
                table.insert(entete, '|action=edit&preload=Modèle:Documentation/Preload créer}}]')
            end
        end
        table.insert(entete, '&#93;</span>')
    end

    table.insert(entete, '</div>')
    return table.concat(entete)
end

function p.contenu(frame, args, page)
    local contenu = {}
    local doc = p.docname(page)

    if args.contenu then
        table.insert(contenu, '\n')
        table.insert(contenu, args.contenu)
    else
        table.insert(contenu, frame:preprocess('<nowiki />\n'))
        --Évite toute récursion
        if args[1]
        and frame:preprocess('{{FULLPAGENAMEE}}') ~= frame:preprocess('{{FULLPAGENAMEE:' .. args[1] .. '}}')
        and p.ifexist(args[1]) then
            table.insert(contenu, frame:preprocess('{{' .. args[1] .. '}}'))
        elseif frame:preprocess('{{FULLPAGENAMEE}}') ~= frame:preprocess('{{FULLPAGENAMEE:' .. doc .. '}}')
        and p.ifexist(doc) then
            table.insert(contenu, frame:preprocess('{{' .. doc .. '}}'))
        end
    end

    table.insert(contenu, frame:preprocess('\n<nowiki /><div style="clear:both" />\n'))

    return table.concat(contenu)
end

function p.notice(frame, args, page)
    local notice = {}
    local doc = p.docname(page)

    if args.contenu then
        table.insert(notice, '<div class="plainlinks" style="border-top:1px solid #aaa; margin: 1em 0 0;">')
        table.insert(notice, '<p style="margin-bottom:0; padding-left:1em; font-style:italic;">\n')

        if args.notice then
            table.insert(notice, args.notice)
        else
            table.insert(notice, 'La [[Aide:Comment documenter un modèle ?|documentation]] de ce [[Aide:Modèle|modèle]] ')
            table.insert(notice, 'est directement [[Aide:Inclusion|incluse]] dans le corps de ce dernier.<br />')
            table.insert(notice, 'Si cette page est protégée, veuillez transférer le contenu de la documentation vers sa ')
            table.insert(notice, '[{{fullurl:' .. doc)
            table.insert(notice, '|action=edit&preload=Modèle:Documentation/Preload sous-page dédiée}}].')
        end
    else
        if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
            table.insert(notice, '<div class="plainlinks" style="border-top:1px solid #aaa; margin: 1em 0 0;">')
            table.insert(notice, '<p style="margin-bottom:0; padding-left:1em; font-style:italic;">')
            table.insert(notice, 'La [[Aide:Comment documenter un modèle ?|documentation]] de ce ')
            table.insert(notice, '[[Aide:Modèle|modèle]] est [[Aide:Inclusion|incluse]] depuis sa ')

            if args[1] then
                table.insert(notice, '[[' .. args[1] .. '|sous-page de documentation]]')
            else
                table.insert(notice, '[[' .. doc .. '|sous-page de documentation]]')
            end

            table.insert(notice, '&nbsp;<span style="font-size:89%; font-style:normal;">(')
            table.insert(notice, '[{{fullurl:')

            if args[1] then
                table.insert(notice, args[1] .. '|action=edit}} modifier]')
                table.insert(notice, '&nbsp;|&nbsp;[{{fullurl:')
                table.insert(notice, args[1] .. '|action=history}} historique]')
            else
                table.insert(notice, doc .. '|action=edit}} modifier]')
                table.insert(notice, '&nbsp;|&nbsp;[{{fullurl:')
                table.insert(notice, doc .. '|action=history}} historique]')
            end
            table.insert(notice, ')</span>.<br />')
        else
            table.insert(notice, '<div class="plainlinks">')
            table.insert(notice, '<p style="margin-bottom:0; padding-left:1em; font-style:italic;">')
        end
        table.insert(notice, 'Les éditeurs peuvent travailler dans le ')

        if args[1] and p.ifexist(frame:preprocess('{{#rel2abs:' .. args[1] .. '/../Bac à sable}}'))
        or p.ifexist(frame:preprocess('{{#rel2abs:' .. doc .. '/../Bac à sable}}')) then
            table.insert(notice, '[[{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Bac à sable}}|bac à sable]]')
            table.insert(notice, '&nbsp;<span style="font-size:89%; font-style:normal;">(')
            table.insert(notice, '[{{fullurl:{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Bac à sable}}|action=edit}} modifier])</span>')
        else
            table.insert(notice, 'bac à sable&nbsp;<span style="font-size:89%; font-style:normal;">(')
            table.insert(notice, '[{{fullurl:{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Bac à sable}}|action=edit&preload=Modèle:Documentation/Preload2}} créer]')
            table.insert(notice, ')</span>')
        end
        table.insert(notice, ' et la page de ')

        if args[1] and p.ifexist(frame:preprocess('{{#rel2abs:' .. args[1] .. '/../Test}}'))
        or p.ifexist(frame:preprocess('{{#rel2abs:' .. doc .. '/../Test}}')) then
            table.insert(notice, '[[{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Test}}|test]]')
            table.insert(notice, '&nbsp;<span style="font-size:89%; font-style:normal;">(')
            table.insert(notice, '[{{fullurl:{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Test}}|action=edit}} modifier])</span>')
        else
            table.insert(notice, 'test&nbsp;<span style="font-size:89%; font-style:normal;">(')
            table.insert(notice, '[{{fullurl:{{#rel2abs:')
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '/../Test}}|action=edit&preload=Modèle:Documentation/Preload3}} créer]')
            table.insert(notice, ')</span>')
        end
        table.insert(notice, '.<br />Veuillez placer les catégories dans la sous-page ')
        table.insert(notice, '<span class="plainlinks">[')
        table.insert(notice, '{{fullurl:')
        if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '|action=edit')

        else
            if args[1] then
                table.insert(notice, args[1])
            else
                table.insert(notice, doc)
            end
            table.insert(notice, '|action=edit&preload=Modèle:Documentation/Preload')
        end
        table.insert(notice, ' /Documentation}}].')
    end
    table.insert(notice, '</p></div></div>')
    return table.concat(notice)
end

return p