Module:Documentation : Différence entre versions
(on évite) |
(optimisation du code ; importation du bac à sable) |
||
Ligne 1 : | Ligne 1 : | ||
− | --Ce module | + | --Ce module implémente le modèle {{Documentation}}. |
local p = {} | local p = {} | ||
function p.corps(frame) | function p.corps(frame) | ||
− | + | args = frame:getParent().args | |
local page = mw.title.getCurrentTitle() | local page = mw.title.getCurrentTitle() | ||
+ | doc = p.docname(page) | ||
local corps = {} | local corps = {} | ||
Ligne 15 : | Ligne 16 : | ||
--Génération de la documentation | --Génération de la documentation | ||
− | table.insert(corps, | + | table.insert(corps, p.entete(page)) |
− | table.insert(corps, p.contenu(frame | + | table.insert(corps, p.contenu(frame, page)) |
− | table.insert(corps, | + | table.insert(corps, p.notice(page)) |
--Code HTML brut | --Code HTML brut | ||
if args.raw then | if args.raw then | ||
− | return frame:preprocess('<nowiki>' .. table.concat(corps) .. '</nowiki>') | + | return frame:preprocess('<nowiki>' .. table.concat(corps) .. '</nowiki>\n:' .. os.clock()) |
end | end | ||
return table.concat(corps) | return table.concat(corps) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Ligne 48 : | Ligne 42 : | ||
end | end | ||
− | function p.entete( | + | 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.entete(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:'} | ||
− | |||
− | if not args.couleur then | + | if not args.couleur then table.insert(entete, '#ecfcf4') |
− | + | else table.insert(entete, args.couleur) end | |
− | else | ||
− | |||
− | |||
table.insert(entete, '; padding:1em 1em 0.8em;">') | table.insert(entete, '; padding:1em 1em 0.8em;">') | ||
Ligne 63 : | Ligne 59 : | ||
table.insert(entete, '<span style="font-weight:bold; font-size:125%"> ') | table.insert(entete, '<span style="font-weight:bold; font-size:125%"> ') | ||
− | if args.titre then | + | if args.titre then table.insert(entete, args.titre) |
− | + | else table.insert(entete, 'Documentation') end | |
− | else | ||
− | |||
− | |||
table.insert(entete, '</span>') | table.insert(entete, '</span>') | ||
if not args.contenu then | if not args.contenu then | ||
− | table.insert(entete, '<span | + | table.insert(entete, '<span class="mw-editsection plainlinks">[[') |
− | + | local arg = mw.title.new(args[1] or doc) | |
− | if args[1] | + | if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then |
− | + | table.insert(entete, arg:fullUrl('action=edit') .. ' modifier]') | |
− | + | table.insert(entete, '] [[') | |
− | + | table.insert(entete, page:fullUrl('action=purge') .. ' purger]') | |
− | |||
− | |||
− | |||
− | |||
else | else | ||
− | + | table.insert(entete, arg:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload"})) | |
− | + | table.insert(entete, ' créer]') | |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
table.insert(entete, ']</span>') | table.insert(entete, ']</span>') | ||
Ligne 98 : | Ligne 82 : | ||
end | end | ||
− | function p.contenu(frame | + | function p.contenu(frame, page) |
local contenu = {} | local contenu = {} | ||
− | local doc | + | local arg = args[1] or doc |
− | |||
if args.contenu then | if args.contenu then | ||
table.insert(contenu, '\n') | table.insert(contenu, '\n') | ||
table.insert(contenu, args.contenu) | table.insert(contenu, args.contenu) | ||
else | else | ||
− | table.insert(contenu, frame:preprocess('<nowiki /> | + | table.insert(contenu, frame:preprocess('<nowiki />')) |
− | + | table.insert(contenu, '\n') | |
− | + | if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then | |
− | + | table.insert(contenu, frame:preprocess('{{' .. arg .. '}}')) | |
− | |||
− | |||
− | |||
− | |||
− | table.insert(contenu, frame:preprocess('{{' .. | ||
end | end | ||
end | end | ||
− | table.insert(contenu, frame:preprocess(' | + | table.insert(contenu, '\n') |
− | + | table.insert(contenu, frame:preprocess('<nowiki />')) | |
+ | table.insert(contenu, '<div style="clear:both" />\n') | ||
return table.concat(contenu) | return table.concat(contenu) | ||
end | end | ||
− | function p.notice( | + | function p.notice(page) |
local notice = {} | local notice = {} | ||
− | local | + | local arg = mw.title.new(args[1] or doc) |
if args.contenu then | if args.contenu then | ||
Ligne 134 : | Ligne 113 : | ||
table.insert(notice, args.notice) | table.insert(notice, args.notice) | ||
else | else | ||
− | table.insert(notice, 'La [[Aide:Comment documenter un modèle ?|documentation]] de ce | + | table.insert(notice, 'La [[Aide:Comment documenter un modèle ?|documentation]] de ce ') |
− | table.insert(notice, 'est directement [[Aide:Inclusion|incluse]] dans le corps de ce dernier.<br />') | + | table.insert(notice, '[[Aide:Modèle|modèle]] est directement [[Aide:Inclusion|incluse]] ') |
− | table.insert(notice, ' | + | table.insert(notice, 'dans le corps de ce dernier.<br />Si cette page est protégée, ') |
− | table.insert(notice, | + | table.insert(notice, 'veuillez transférer le contenu de la documentation vers sa [') |
− | table.insert(notice, ' | + | table.insert(notice, arg:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload"})) |
+ | table.insert(notice, ' sous-page dédiée].') | ||
end | end | ||
else | else | ||
Ligne 145 : | Ligne 125 : | ||
table.insert(notice, '<p style="margin-bottom:0; padding-left:1em; font-style:italic;">') | 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, 'La [[Aide:Comment documenter un modèle ?|documentation]] de ce ') | ||
− | table.insert(notice, '[[Aide:Modèle|modèle]] est [[Aide:Inclusion|incluse]] depuis sa | + | table.insert(notice, '[[Aide:Modèle|modèle]] est [[Aide:Inclusion|incluse]] depuis sa [[') |
− | + | table.insert(notice, tostring(arg) .. '|sous-page de documentation]]') | |
− | + | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') | |
− | + | table.insert(notice, arg:fullUrl('action=edit')) | |
− | + | table.insert(notice, ' modifier] | [') | |
− | + | table.insert(notice, arg:fullUrl('action=history') .. ' historique])</span>.<br />') | |
− | |||
− | |||
− | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">(') | ||
− | table.insert(notice, | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
table.insert(notice, '<div class="plainlinks">') | table.insert(notice, '<div class="plainlinks">') | ||
Ligne 172 : | Ligne 137 : | ||
table.insert(notice, 'Les éditeurs peuvent travailler dans le ') | table.insert(notice, 'Les éditeurs peuvent travailler dans le ') | ||
− | + | local bacasable = arg.subjectNsText .. ":" .. arg.baseText .. "/Bac à sable" | |
− | + | local argbacasable = mw.title.new(bacasable) | |
− | table.insert(notice, '[[ | + | if p.ifexist(bacasable) then |
− | + | table.insert(notice, '[[' .. bacasable .. '|bac à sable]]') | |
− | + | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') | |
− | + | table.insert(notice, argbacasable:fullUrl('action=edit')) | |
− | + | table.insert(notice, ' modifier])</span>') | |
− | |||
− | |||
− | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">(') | ||
− | table.insert(notice, ' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | table.insert(notice, ' | ||
else | else | ||
− | table.insert(notice, ' | + | table.insert(notice, 'bacasable <span style="font-size:89%; font-style:normal;">([') |
− | table.insert(notice, | + | table.insert(notice, argbacasable:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload2"})) |
− | + | table.insert(notice, ' créer])</span>') | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | table.insert(notice, ')</span>') | ||
end | end | ||
table.insert(notice, ' et la page de ') | table.insert(notice, ' et la page de ') | ||
− | + | local test = arg.subjectNsText .. ":" .. arg.baseText .. "/Test" | |
− | + | local argtest = mw.title.new(test) | |
− | table.insert(notice, '[[ | + | if p.ifexist(test) then |
− | + | table.insert(notice, '[[' .. test .. '|test]]') | |
− | + | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') | |
− | + | table.insert(notice, argtest:fullUrl('action=edit')) | |
− | + | table.insert(notice, ' modifier])</span>') | |
− | |||
− | |||
− | table.insert(notice, ' <span style="font-size:89%; font-style:normal;">(') | ||
− | table.insert(notice, ' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | table.insert(notice, ' | ||
else | else | ||
− | table.insert(notice, 'test <span style="font-size:89%; font-style:normal;">(') | + | table.insert(notice, 'test <span style="font-size:89%; font-style:normal;">([') |
− | table.insert(notice, | + | table.insert(notice, argtest:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload3"})) |
− | + | table.insert(notice, ' créer])</span>') | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | table.insert(notice, ')</span>') | ||
end | end | ||
+ | |||
table.insert(notice, '.<br />Veuillez placer les catégories dans la sous-page ') | table.insert(notice, '.<br />Veuillez placer les catégories dans la sous-page ') | ||
table.insert(notice, '<span class="plainlinks">[') | table.insert(notice, '<span class="plainlinks">[') | ||
− | + | ||
if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then | if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then | ||
− | + | table.insert(notice, arg:fullUrl('action=edit')) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
− | + | table.insert(notice, arg:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload"})) | |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | table.insert(notice, ' /Documentation | + | |
+ | table.insert(notice, ' /Documentation].') | ||
end | end | ||
table.insert(notice, '</p></div></div>') | table.insert(notice, '</p></div></div>') |
Version du 28 juillet 2013 à 17:56
La documentation pour ce module peut être créée à Module:Documentation/doc
--Ce module implémente le modèle {{Documentation}}. local p = {} function p.corps(frame) args = frame:getParent().args local page = mw.title.getCurrentTitle() doc = p.docname(page) 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, p.entete(page)) table.insert(corps, p.contenu(frame, page)) table.insert(corps, p.notice(page)) --Code HTML brut if args.raw then return frame:preprocess('<nowiki>' .. table.concat(corps) .. '</nowiki>\n:' .. os.clock()) end return table.concat(corps) 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.ifexist(page) if not page then return false end if mw.title.new(page).exists then return true end return false end function p.entete(page) local entete = {'<div style="clear:both; margin:1em 0 0 0; border:1px solid #aaa; background:'} 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%"> ') 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 class="mw-editsection plainlinks">[[') local arg = mw.title.new(args[1] or doc) if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then table.insert(entete, arg:fullUrl('action=edit') .. ' modifier]') table.insert(entete, '] [[') table.insert(entete, page:fullUrl('action=purge') .. ' purger]') else table.insert(entete, arg:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload"})) table.insert(entete, ' créer]') end table.insert(entete, ']</span>') end table.insert(entete, '</div>') return table.concat(entete) end function p.contenu(frame, page) local contenu = {} local arg = args[1] or doc if args.contenu then table.insert(contenu, '\n') table.insert(contenu, args.contenu) else table.insert(contenu, frame:preprocess('<nowiki />')) table.insert(contenu, '\n') if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then table.insert(contenu, frame:preprocess('{{' .. arg .. '}}')) end end table.insert(contenu, '\n') table.insert(contenu, frame:preprocess('<nowiki />')) table.insert(contenu, '<div style="clear:both" />\n') return table.concat(contenu) end function p.notice(page) local notice = {} local arg = mw.title.new(args[1] or doc) 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 ') table.insert(notice, '[[Aide:Modèle|modèle]] est directement [[Aide:Inclusion|incluse]] ') table.insert(notice, 'dans le corps de ce dernier.<br />Si cette page est protégée, ') table.insert(notice, 'veuillez transférer le contenu de la documentation vers sa [') table.insert(notice, arg:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload"})) table.insert(notice, ' 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 [[') table.insert(notice, tostring(arg) .. '|sous-page de documentation]]') table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') table.insert(notice, arg:fullUrl('action=edit')) table.insert(notice, ' modifier] | [') table.insert(notice, arg:fullUrl('action=history') .. ' historique])</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 ') local bacasable = arg.subjectNsText .. ":" .. arg.baseText .. "/Bac à sable" local argbacasable = mw.title.new(bacasable) if p.ifexist(bacasable) then table.insert(notice, '[[' .. bacasable .. '|bac à sable]]') table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') table.insert(notice, argbacasable:fullUrl('action=edit')) table.insert(notice, ' modifier])</span>') else table.insert(notice, 'bacasable <span style="font-size:89%; font-style:normal;">([') table.insert(notice, argbacasable:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload2"})) table.insert(notice, ' créer])</span>') end table.insert(notice, ' et la page de ') local test = arg.subjectNsText .. ":" .. arg.baseText .. "/Test" local argtest = mw.title.new(test) if p.ifexist(test) then table.insert(notice, '[[' .. test .. '|test]]') table.insert(notice, ' <span style="font-size:89%; font-style:normal;">([') table.insert(notice, argtest:fullUrl('action=edit')) table.insert(notice, ' modifier])</span>') else table.insert(notice, 'test <span style="font-size:89%; font-style:normal;">([') table.insert(notice, argtest:fullUrl({["action"]="edit", ["preload"]="Modèle:Documentation/Preload3"})) table.insert(notice, ' créer])</span>') end table.insert(notice, '.<br />Veuillez placer les catégories dans la sous-page ') table.insert(notice, '<span class="plainlinks">[') if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then table.insert(notice, arg:fullUrl('action=edit')) else table.insert(notice, arg:fullUrl({["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