Module:Documentation
--Ce module implémente le modèle
- Documentation de Module:Documentation.[actualiser] • [créer] • [historique]
.
local p = {}
local function existePage(page) return page and page.exists end
local function nomDocumentation(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 local sousPage = page.subpageText if sousPage == 'Documentation' or sousPage == 'Bac à sable' or sousPage == 'Test' then return page.subjectNsText .. ':' .. page.baseText .. '/Documentation' else return page.subjectNsText .. ':' .. page.text .. '/Documentation' end end
local function lienUrl(nomPage, titrePage, action, pagePreload) local argument = {['action'] = action or 'edit'}
if pagePreload then argument['preload'] = 'Modèle:Documentation/Preload' .. pagePreload end
return mw.ustring.format('[%s %s]', nomPage:fullUrl(argument), titrePage) end
local function entete(args, page, doc, existeDoc) local res = mw.html.create('div')
res :css('margin-bottom', '1ex') :css('border-bottom', '1px solid #aaa') :css('padding-bottom', '3px')
:wikitext('')
:tag('span') :css('font-weight', 'bold') :css('font-size', '125%') :wikitext(' ') :wikitext(args.titre or 'Documentation') :done()
if not args.contenu then local editionLien = res:tag('span') :addClass('mw-editsection plainlinks') :wikitext('[')
if existeDoc then editionLien:wikitext(lienUrl(doc, 'modifier')) else if args.module then editionLien:wikitext(lienUrl(doc, 'créer', 'edit', 'Module')) else editionLien:wikitext(lienUrl(doc, 'créer', 'edit', )) end end
editionLien :wikitext('] [') :wikitext(lienUrl(page, 'purger', 'purge')) :wikitext(']') end
return res end
local function protection(page, doc, existeDoc) -- Insertion automatique du modèle de protection. local niveauProtection = page.protectionLevels.edit
if niveauProtection and niveauProtection[1] then local tableProtection = { autoconfirmed = {'semiProtection', '{{%s*[Ss]emi%-protection%s*l?o?n?g?u?e?[|}]'}, editextendedsemiprotected = {'semiProtectionEtendue', '{{%s*[Ss]emi%-protection étendue%s*[|}]'}, sysop = {'protection', '{{%s*[Pp]rotection%s*[|}]'}, } local protection = tableProtection[niveauProtection[1]] if existeDoc then -- Vérification qu'il n'y a pas déjà un modèle de -- protection dans la documentation du modèle. local contenuDoc = doc:getContent() if contenuDoc:match(protection[2]) then protection = false end end
if protection then return require('Module:Protection').main({}, protection[1], page) end end end
local function contenu(args, doc, existeDoc) local res = mw.html.create():newline()
if args.contenu then
res:wikitext(args.contenu)
elseif existeDoc then
local frame = mw.getCurrentFrame()
if frame.args and frame.args['contenu sous-page'] then
res:wikitext(frame.args['contenu sous-page'])
else
res:wikitext(frame:expandTemplate{title = doc.prefixedText})
end
elseif mw.title.getCurrentTitle().subpageText ~= 'Bac à sable' then
local texteBandeau = 'Ce %s ne possède aucune documentation '
..'explicative en sous-page, pas même une description succincte.
'
..'Vous pouvez %s afin de documenter ce %s adéquatement.'
local ns = mw.title.getCurrentTitle().namespace
if ns == 10 or ns == 828 then
texteBandeau = texteBandeau ..
end
if args.module then
texteBandeau = texteBandeau:format(
'module',
lienUrl(doc, 'créer cette sous-page', 'edit', 'Module'),
'module',
'module'
)
else
texteBandeau = texteBandeau:format(
'modèle',
lienUrl(doc, 'créer cette sous-page', 'edit', ),
'modèle',
'modèle'
)
end
local param = {
['icône'] = 'Book-cover-A-Z.svg',
alt = 'domaine public',
style = 'width:80%;',
texte = texteBandeau,
}
res:wikitext(require('Module:Bandeau')._bandeau(param))
end
res :newline() :tag('div', {selfClosing = true}) :css('clear', 'both')
return res end
local function notice(args, page, doc, existeDoc) local res = mw.html.create('div') :css('border-top', '1px solid #aaa') :css('margin', '1em 0 0')
local contenuParagraphe = res :tag('p') :addClass('plainlinks') :css('margin-bottom', '0') :css('padding-left', '1em') :css('font-style', 'italic')
if args.contenu then
if args.notice then
contenuParagraphe:wikitext(args.notice)
else
contenuParagraphe
:wikitext('La documentation ')
:wikitext('de ce modèle est directement ')
:wikitext('incluse dans le corps de ce dernier. ')
:wikitext(lienUrl(page, 'Cliquez ici pour purger le cache', 'purge'))
:wikitext('.
Si cette page est protégée, veuillez ')
:wikitext('transférer le contenu de la documentation vers sa ')
:wikitext(lienUrl(doc, 'sous-page dédiée', 'edit', ))
:wikitext('.
')
end
else
if existeDoc then
local lienAide = 'modèle'
if args.module then
lienAide = 'module'
end
contenuParagraphe
:wikitext('La documentation de ce ')
:wikitext(lienAide)
:wikitext(' est incluse depuis sa [[')
:wikitext(tostring(doc))
:wikitext('|sous-page de documentation]] ')
:tag('span')
:css('font-size', '89%')
:css('font-style', 'normal')
:wikitext('(')
:wikitext(lienUrl(doc, 'modifier'))
:wikitext(' | ')
:wikitext(lienUrl(doc, 'historique', 'history'))
:wikitext(').
')
:done()
:wikitext('Veuillez placer les catégories dans la sous-page ')
:wikitext(lienUrl(doc, '/Documentation'))
:wikitext('.
')
end
end
contenuParagraphe:wikitext('Les éditeurs peuvent travailler dans le ')
local titrePageBacasable = nomDocumentation(page):gsub('/Documentation', '/Bac à sable') local pageBacasable = mw.title.new(titrePageBacasable)
if existePage(pageBacasable) then contenuParagraphe :wikitext('bac à sable ') :tag('span') :css('font-size', '89%') :css('font-style', 'normal') :wikitext('(') :wikitext(lienUrl(pageBacasable, 'modifier')) :wikitext(')') else local preLoad = '2' if args.module then preLoad = nil end contenuParagraphe :wikitext('bac à sable ') :tag('span') :css('font-size', '89%') :css('font-style', 'normal') :wikitext('(') :wikitext(lienUrl(pageBacasable, 'créer', 'edit', preLoad)) :wikitext(')') end
if not args.module then contenuParagraphe:wikitext(' et la page de ')
local titrePageTest = nomDocumentation(page):gsub('/Documentation', '/Test') local pageTest = mw.title.new(titrePageTest)
if existePage(pageTest) then contenuParagraphe :wikitext('test ') :tag('span') :css('font-size', '89%') :css('font-style', 'normal') :wikitext('(') :wikitext(lienUrl(pageTest, 'modifier')) :wikitext(')') else contenuParagraphe :wikitext('test ') :tag('span') :css('font-size', '89%') :css('font-style', 'normal') :wikitext('(') :wikitext(lienUrl(pageTest, 'créer', 'edit', '3')) :wikitext(')') end end contenuParagraphe:wikitext('.')
return res end
function p._documentation(args) local page = mw.title.getCurrentTitle() local titreDoc = nomDocumentation(page) local doc = mw.title.new(args[1] or titreDoc) local existeDoc = existePage(doc) local res = mw.html.create()
--Bandeau pour les sous-pages /Bac à sable if page.subpageText == 'Bac à sable' then res :tag('div', {selfClosing = true}) :done() :wikitext(mw.getCurrentFrame():expandTemplate{title = 'Sous-page de bac à sable'}) end
--Génération de la documentation res :tag('div') :css('clear', 'both') :css('margin', '1em 0 0 0') :css('border', '1px solid #aaa') :css('background', args.couleur or '#ecfcf4') :css('padding', '1em 1em 0.8em') :node(entete(args, page, doc, existeDoc)) :wikitext(protection(page, doc, existeDoc)) :node(contenu(args, doc, existeDoc)) :node(notice(args, page, doc, existeDoc))
return tostring(res) end
function p.documentation(frame) local args = {} local argsParent = frame:getParent().args
--Paramètres vides interprétés par Lua for cle, val in pairs(argsParent) do if val ~= then args[cle] = mw.text.trim(val) end end
return p._documentation(args) end
function p.nomDocumentation(frame) if frame.args[1] and mw.text.trim(frame.args[1]) ~= then return frame.args[1] else local titreDoc = nomDocumentation(mw.title.getCurrentTitle()) if mw.title.new(titreDoc).exists then return titreDoc end end end
return p