« Module:Documentation » : différence entre les versions
Aller à la navigation
Aller à la recherche
Modèle>Hlm Z. (mise en forme ; l'implémentation des modèles de protection en Lua serait plus appropriée, mais bon, pour l'instant pourquoi pas) |
Modèle>Hlm Z. (importation du /Bac à sable : fonction local et utilisation du module:Protection) |
||
| Ligne 1 : | Ligne 1 : | ||
--Ce module implémente le modèle {{Documentation}}. | --Ce module implémente le modèle {{Documentation}}. | ||
local p = {} | local p = {} | ||
local function existePage(page) | |||
return page and page.exists | |||
function | |||
end | end | ||
function nomDocumentation(page) | local function nomDocumentation(page) | ||
--On n'est pas dans une sous-page | --On n'est pas dans une sous-page | ||
if not page.isSubpage then | if not page.isSubpage then | ||
return page.subjectNsText .. ':' .. page.text .. '/Documentation' | return page.subjectNsText .. ':' .. page.text .. '/Documentation' | ||
end | end | ||
--On est dans une sous-page | --On est dans une sous-page | ||
local sousPage = page.subpageText | local sousPage = page.subpageText | ||
| Ligne 76 : | Ligne 24 : | ||
end | end | ||
local function lienUrl(nomPage, titrePage, action, pagePreload) | |||
local argument = {['action'] = action or 'edit'} | |||
function lienUrl(nomPage, titrePage, action, pagePreload) | |||
local argument = {} | |||
if pagePreload then | if pagePreload then | ||
argument | argument['preload'] = 'Modèle:Documentation/Preload' .. pagePreload | ||
end | end | ||
| Ligne 94 : | Ligne 34 : | ||
end | end | ||
function entete(args, page, doc, existeDoc) | local function entete(args, page, doc, existeDoc) | ||
local res = mw.html.create('div') | local res = mw.html.create('div') | ||
| Ligne 115 : | Ligne 55 : | ||
if existeDoc then | if existeDoc then | ||
editionLien | editionLien:wikitext(lienUrl(doc, 'modifier')) | ||
else | else | ||
editionLien | editionLien:wikitext(lienUrl(doc, 'créer', 'edit', '')) | ||
end | end | ||
| Ligne 128 : | Ligne 66 : | ||
end | end | ||
return | return res | ||
end | end | ||
function protection(page, doc, existeDoc) | local function protection(page, doc, existeDoc) | ||
-- Insertion automatique du modèle de protection. | -- Insertion automatique du modèle de protection. | ||
local niveauProtection = page.protectionLevels.edit | local niveauProtection = page.protectionLevels.edit | ||
| Ligne 137 : | Ligne 75 : | ||
if niveauProtection and niveauProtection[1] then | if niveauProtection and niveauProtection[1] then | ||
local tableProtection = { | local tableProtection = { | ||
autoconfirmed = {' | autoconfirmed = {'semiProtection', '{{%s*[Ss]emi%-protection%s*l?o?n?g?u?e?[|}]'}, | ||
sysop = {' | sysop = {'protection', '{{%s*[Pp]rotection%s*[|}]'}, | ||
} | } | ||
local protection = tableProtection[niveauProtection[1]] | local protection = tableProtection[niveauProtection[1]] | ||
| Ligne 151 : | Ligne 89 : | ||
if protection then | if protection then | ||
return | return require('Module:Protection').main(protection[1], {}, page) | ||
end | end | ||
end | end | ||
end | end | ||
function contenu(args, titreDoc, existeDoc) | local function contenu(args, titreDoc, existeDoc) | ||
local res = mw.html.create():newline() | local res = mw.html.create():newline() | ||
| Ligne 175 : | Ligne 113 : | ||
:tag('div', {selfClosing = true}) | :tag('div', {selfClosing = true}) | ||
:css('clear', 'both') | :css('clear', 'both') | ||
return | return res | ||
end | end | ||
function notice(args, page, doc, existeDoc) | local function notice(args, page, doc, existeDoc) | ||
local res = mw.html.create('div') | local res = mw.html.create('div') | ||
| Ligne 256 : | Ligne 194 : | ||
local titrePageTest = doc.subjectNsText .. ':' .. doc.baseText .. '/Test' | local titrePageTest = doc.subjectNsText .. ':' .. doc.baseText .. '/Test' | ||
local pageTest = mw.title.new(titrePageTest) | local pageTest = mw.title.new(titrePageTest) | ||
if existePage(pageTest) then | if existePage(pageTest) then | ||
contenuParagraphe | contenuParagraphe | ||
| Ligne 279 : | Ligne 217 : | ||
contenuParagraphe | contenuParagraphe | ||
:wikitext('.<br />Veuillez placer les catégories dans la sous-page ') | :wikitext('.<br />Veuillez placer les catégories dans la sous-page ') | ||
if existeDoc then | if existeDoc then | ||
contenuParagraphe:wikitext(lienUrl(doc, '/Documentation')) | contenuParagraphe:wikitext(lienUrl(doc, '/Documentation')) | ||
| Ligne 287 : | Ligne 225 : | ||
contenuParagraphe:wikitext('.') | contenuParagraphe:wikitext('.') | ||
end | end | ||
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, titreDoc, existeDoc)) | |||
:node(notice(args, page, doc, existeDoc)) | |||
return tostring(res) | 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 | end | ||
return p | return p | ||
Version du 8 janvier 2016 à 22:59
La documentation pour ce module peut être créée à Module:Documentation/doc
--Ce module implémente le modèle {{Documentation}}.
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('[[Fichier:Template-info.png|50px|alt=Documentation|link=]]')
: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
editionLien:wikitext(lienUrl(doc, 'créer', 'edit', ''))
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?[|}]'},
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, titreDoc, existeDoc)
local res = mw.html.create():newline()
if args.contenu then
res:wikitext(args.contenu)
elseif existeDoc then
local contenuDoc = args[1] or titreDoc or ''
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 = contenuDoc})
end
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')
if args.contenu or existeDoc then
res
:css('border-top', '1px solid #aaa')
:css('margin', '1em 0 0')
end
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 [[Aide:Documentation de modèle|documentation]] ')
:wikitext('de ce [[Aide:Modèle|modèle]] est directement ')
:wikitext('[[Aide:Inclusion|incluse]] dans le corps de ce dernier. ')
:wikitext(lienUrl(page, 'Cliquez ici pour purger le cache', 'purge'))
:wikitext('.<br />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
contenuParagraphe
:wikitext('La [[Aide:Documentation de modèle|documentation]] ')
:wikitext('de ce [[Aide:Modèle|modèle]] est ')
:wikitext('[[Aide:Inclusion|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(').<br />')
:done()
end
contenuParagraphe:wikitext('Les éditeurs peuvent travailler dans le ')
local titrePageBacasable = doc.subjectNsText .. ':' .. doc.baseText .. '/Bac à sable'
local pageBacasable = mw.title.new(titrePageBacasable)
if existePage(pageBacasable) then
contenuParagraphe
:wikitext('[[' .. titrePageBacasable .. '|bac à sable]] ')
:tag('span')
:css('font-size', '89%')
:css('font-style', 'normal')
:wikitext('(')
:wikitext(lienUrl(pageBacasable, 'modifier'))
:wikitext(')')
else
contenuParagraphe
:wikitext('bac à sable ')
:tag('span')
:css('font-size', '89%')
:css('font-style', 'normal')
:wikitext('(')
:wikitext(lienUrl(pageBacasable, 'créer', 'edit', '2'))
:wikitext(')')
end
contenuParagraphe:wikitext(' et la page de ')
local titrePageTest = doc.subjectNsText .. ':' .. doc.baseText .. '/Test'
local pageTest = mw.title.new(titrePageTest)
if existePage(pageTest) then
contenuParagraphe
:wikitext('[[' .. titrePageTest .. '|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
contenuParagraphe
:wikitext('.<br />Veuillez placer les catégories dans la sous-page ')
if existeDoc then
contenuParagraphe:wikitext(lienUrl(doc, '/Documentation'))
else
contenuParagraphe:wikitext(lienUrl(doc, '/Documentation', 'edit', ''))
end
contenuParagraphe:wikitext('.')
end
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, titreDoc, 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