« Module:Documentation » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Ajout détection automatique de la protection
0x010D (discussion | contributions)
mise en forme ; l'implémentation des modèles de protection en Lua serait plus appropriée, mais bon, pour l'instant pourquoi pas
Ligne 17 : Ligne 17 :
end
end


function p.nomDocumentation( frame )
function p.nomDocumentation(frame)
if frame.args[1] and mw.text.trim( frame.args[1] ) ~= '' then
if frame.args[1] and mw.text.trim(frame.args[1]) ~= '' then
return frame.args[1]
return frame.args[1]
else
else
local titreDoc = nomDocumentation( mw.title.getCurrentTitle() )
local titreDoc = nomDocumentation(mw.title.getCurrentTitle())
if mw.title.new( titreDoc ).exists then
if mw.title.new(titreDoc).exists then
return titreDoc
return titreDoc
end  
end  
Ligne 52 : Ligne 52 :
:css('padding', '1em 1em 0.8em')
:css('padding', '1em 1em 0.8em')
:node(entete(args, page, doc, existeDoc))
:node(entete(args, page, doc, existeDoc))
:wikitext(protection( args, page, doc, existeDoc ))
:wikitext(protection(page, doc, existeDoc))
:node(contenu(args, titreDoc, existeDoc))
:node(contenu(args, titreDoc, existeDoc))
:node(notice(args, page, doc, existeDoc))
:node(notice(args, page, doc, existeDoc))
Ligne 131 : Ligne 131 :
end
end


function protection( args, page, doc, existeDoc )
function protection(page, doc, existeDoc)
-- Ajout modèle de protection si nécessaire
-- Insertion automatique du modèle de protection.
local niveauProtection = page.protectionLevels.edit
local niveauProtection = page.protectionLevels.edit
if niveauProtection and niveauProtection[1] then
if niveauProtection and niveauProtection[1] then
local tableProtection = {
local tableProtection = {
autoconfirmed = { 'Semi-protection', '{{%s*[Ss]emi%-protection%s*l?o?n?g?u?e?[|}]' },
autoconfirmed = {'Semi-protection', '{{%s*[Ss]emi%-protection%s*l?o?n?g?u?e?[|}]'},
sysop = { 'Protection', '{{%s*[Pp]rotection%s*[|}]' },
sysop = {'Protection', '{{%s*[Pp]rotection%s*[|}]'},
}
}
local protection = tableProtection[ niveauProtection[1] ]
local protection = tableProtection[niveauProtection[1]]
if existeDoc then
if existeDoc then
-- vérification qu'il n'y a pas déjà un modèle de protection dans la documentation du modèle
-- 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()
local contenuDoc = doc:getContent()
if contenuDoc:match( protection[2] ) then
if contenuDoc:match(protection[2]) then
protection = false
protection = false
end
end
end
end
 
if protection then
if protection then
return mw.getCurrentFrame():expandTemplate{ title = protection[1] }
return mw.getCurrentFrame():expandTemplate{title = protection[1]}
end
end
end
end

Version du 5 août 2014 à 13:23

--Ce module implémente le modèle Modèle:Méta documentation de modèle.

local p = {}

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

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 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

function existePage(page) return page and page.exists end

function lienUrl(nomPage, titrePage, action, pagePreload) local argument = {}

if pagePreload then argument = { ['action'] = action or 'edit', ['preload'] = 'Modèle:Documentation/Preload' .. pagePreload} else argument = {['action'] = action or 'edit'} end

return mw.ustring.format('[%s %s]', nomPage:fullUrl(argument), titrePage) end

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('Documentation')

: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 tostring(res) end

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 = {'Semi-protection', '{{%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 mw.getCurrentFrame():expandTemplate{title = protection[1]} end end end

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 tostring(res) end

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 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 contenuParagraphe :wikitext('La documentation ') :wikitext('de ce modèle est ') :wikitext('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() 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('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('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('.
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 tostring(res) end

return p