Module:Documentation : Différence entre versions
(importation du /Bac à sable : fonction local et utilisation du module:Protection) |
m (retouche modif précédente) |
||
(28 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 41 : | Ligne 41 : | ||
:css('border-bottom', '1px solid #aaa') | :css('border-bottom', '1px solid #aaa') | ||
:css('padding-bottom', '3px') | :css('padding-bottom', '3px') | ||
− | :wikitext('[[Fichier:Template-info.png|50px|alt= | + | :wikitext('[[Fichier:Template-info.png|50px|alt=|link=]]') |
:tag('span') | :tag('span') | ||
:css('font-weight', 'bold') | :css('font-weight', 'bold') | ||
:css('font-size', '125%') | :css('font-size', '125%') | ||
+ | :css('vertical-align', 'middle') | ||
:wikitext(' ') | :wikitext(' ') | ||
:wikitext(args.titre or 'Documentation') | :wikitext(args.titre or 'Documentation') | ||
Ligne 52 : | Ligne 53 : | ||
local editionLien = res:tag('span') | local editionLien = res:tag('span') | ||
:addClass('mw-editsection plainlinks') | :addClass('mw-editsection plainlinks') | ||
+ | :css('vertical-align', 'middle') | ||
:wikitext('[') | :wikitext('[') | ||
Ligne 57 : | Ligne 59 : | ||
editionLien:wikitext(lienUrl(doc, 'modifier')) | editionLien:wikitext(lienUrl(doc, 'modifier')) | ||
else | else | ||
− | editionLien:wikitext(lienUrl(doc, 'créer', 'edit', '')) | + | if args.module then |
+ | editionLien:wikitext(lienUrl(doc, 'créer', 'edit', 'Module')) | ||
+ | else | ||
+ | editionLien:wikitext(lienUrl(doc, 'créer', 'edit', '')) | ||
+ | end | ||
end | end | ||
Ligne 69 : | Ligne 75 : | ||
end | end | ||
− | local function protection(page, doc, existeDoc) | + | local function protection(page, doc, existeDoc, message) |
-- 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 76 : | Ligne 82 : | ||
local tableProtection = { | local tableProtection = { | ||
autoconfirmed = {'semiProtection', '{{%s*[Ss]emi%-protection%s*l?o?n?g?u?e?[|}]'}, | 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*[|}]'}, | sysop = {'protection', '{{%s*[Pp]rotection%s*[|}]'}, | ||
} | } | ||
Ligne 89 : | Ligne 96 : | ||
if protection then | if protection then | ||
− | return require('Module:Protection').main(protection[1] | + | if message == '' then |
+ | message = nil | ||
+ | end | ||
+ | return require('Module:Protection').main({message}, protection[1], page) | ||
end | end | ||
end | end | ||
end | end | ||
− | local function contenu(args, | + | local function contenu(args, doc, existeDoc) |
+ | local page = mw.title.getCurrentTitle() | ||
local res = mw.html.create():newline() | local res = mw.html.create():newline() | ||
Ligne 100 : | Ligne 111 : | ||
res:wikitext(args.contenu) | res:wikitext(args.contenu) | ||
elseif existeDoc then | elseif existeDoc then | ||
− | |||
local frame = mw.getCurrentFrame() | local frame = mw.getCurrentFrame() | ||
if frame.args and frame.args['contenu sous-page'] then | if frame.args and frame.args['contenu sous-page'] then | ||
res:wikitext(frame.args['contenu sous-page']) | res:wikitext(frame.args['contenu sous-page']) | ||
else | else | ||
− | res:wikitext(frame:expandTemplate{title = | + | res:wikitext(frame:expandTemplate{title = doc.prefixedText}) |
+ | end | ||
+ | elseif page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then | ||
+ | local texteBandeau = '<b>Ce %s ne possède aucune [[Aide:Documentation de modèle|documentation]] ' | ||
+ | ..'explicative en sous-page</b>, pas même une description succincte.<br> ' | ||
+ | ..'Vous pouvez %s afin de documenter ce %s adéquatement.' | ||
+ | if args.module then | ||
+ | texteBandeau = texteBandeau:format( | ||
+ | 'module', | ||
+ | lienUrl(doc, 'créer cette sous-page', 'edit', 'Module'), | ||
+ | 'module' | ||
+ | ) | ||
+ | else | ||
+ | texteBandeau = texteBandeau:format( | ||
+ | 'modèle', | ||
+ | lienUrl(doc, 'créer cette sous-page', 'edit', ''), | ||
+ | 'modèle' | ||
+ | ) | ||
+ | end | ||
+ | if page.namespace == 10 then | ||
+ | texteBandeau = texteBandeau .. '[[Catégorie:Modèle sans documentation]]' | ||
+ | elseif page.namespace == 828 then | ||
+ | if page.baseText == 'Carte/données' or page.baseText == 'Country data' or page.text:sub(1, 12) == 'Utilisateur:' then | ||
+ | -- pas de catégorisation pour : modèles de données, pseudo-namespace "Module:Utilisateur:Toto/Nom du module" | ||
+ | else | ||
+ | texteBandeau = texteBandeau .. '[[Catégorie:Module sans documentation]]' | ||
+ | end | ||
end | 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 | end | ||
res | res | ||
:newline() | :newline() | ||
− | :tag('div' | + | :tag('div') |
:css('clear', 'both') | :css('clear', 'both') | ||
Ligne 119 : | Ligne 162 : | ||
local 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') | ||
− | + | :css('border-top', '1px solid #aaa') | |
− | + | :css('margin', '1.5em 0 0') | |
− | |||
− | |||
− | |||
− | |||
local contenuParagraphe = res | local contenuParagraphe = res | ||
Ligne 135 : | Ligne 174 : | ||
if args.contenu then | if args.contenu then | ||
if args.notice then | if args.notice then | ||
− | contenuParagraphe:wikitext(args.notice) | + | contenuParagraphe:wikitext(args.notice .. '<br />') |
else | else | ||
contenuParagraphe | contenuParagraphe | ||
Ligne 142 : | Ligne 181 : | ||
:wikitext('[[Aide:Inclusion|incluse]] dans le corps de ce dernier. ') | :wikitext('[[Aide:Inclusion|incluse]] dans le corps de ce dernier. ') | ||
:wikitext(lienUrl(page, 'Cliquez ici pour purger le cache', 'purge')) | :wikitext(lienUrl(page, 'Cliquez ici pour purger le cache', 'purge')) | ||
− | :wikitext('.<br />Si cette page est protégée, veuillez ') | + | :wikitext('.<br /> Si cette page est protégée, veuillez ') |
:wikitext('transférer le contenu de la documentation vers sa ') | :wikitext('transférer le contenu de la documentation vers sa ') | ||
:wikitext(lienUrl(doc, 'sous-page dédiée', 'edit', '')) | :wikitext(lienUrl(doc, 'sous-page dédiée', 'edit', '')) | ||
− | :wikitext('.') | + | :wikitext('.<br /> ') |
end | end | ||
else | else | ||
if existeDoc then | if existeDoc then | ||
+ | local lienAide = '[[Aide:Modèle|modèle]]' | ||
+ | if args.module then | ||
+ | lienAide = '[[Aide:Module|module]]' | ||
+ | end | ||
contenuParagraphe | contenuParagraphe | ||
− | :wikitext('La [[Aide:Documentation de modèle|documentation]] ') | + | :wikitext('La [[Aide:Documentation de modèle|documentation]] de ce ') |
− | :wikitext( | + | :wikitext(lienAide) |
− | :wikitext('[[Aide:Inclusion|incluse]] depuis sa [[') | + | :wikitext(' est [[Aide:Inclusion|incluse]] depuis sa [[') |
:wikitext(tostring(doc)) | :wikitext(tostring(doc)) | ||
:wikitext('|sous-page de documentation]] ') | :wikitext('|sous-page de documentation]] ') | ||
Ligne 162 : | Ligne 205 : | ||
:wikitext(' | ') | :wikitext(' | ') | ||
:wikitext(lienUrl(doc, 'historique', 'history')) | :wikitext(lienUrl(doc, 'historique', 'history')) | ||
− | :wikitext(').<br />') | + | :wikitext(').<br /> ') |
:done() | :done() | ||
+ | :wikitext('Veuillez placer les catégories dans la sous-page ') | ||
+ | :wikitext(lienUrl(doc, '/Documentation')) | ||
+ | :wikitext('.<br /> ') | ||
end | 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('[[' .. titrePageBacasable .. '|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 | 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 ') | contenuParagraphe:wikitext(' et la page de ') | ||
− | local titrePageTest = | + | local titrePageTest = nomDocumentation(page):gsub('/Documentation', '/Test') |
local pageTest = mw.title.new(titrePageTest) | local pageTest = mw.title.new(titrePageTest) | ||
Ligne 214 : | Ligne 267 : | ||
:wikitext(')') | :wikitext(')') | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | contenuParagraphe:wikitext('.') | ||
return res | return res | ||
Ligne 235 : | Ligne 279 : | ||
local existeDoc = existePage(doc) | local existeDoc = existePage(doc) | ||
local res = mw.html.create() | local res = mw.html.create() | ||
− | + | ||
--Bandeau pour les sous-pages /Bac à sable | --Bandeau pour les sous-pages /Bac à sable | ||
if page.subpageText == 'Bac à sable' then | if page.subpageText == 'Bac à sable' then | ||
res | res | ||
− | :tag('div', | + | :tag('div') |
− | + | :css('clear', 'both') | |
+ | :done() | ||
:wikitext(mw.getCurrentFrame():expandTemplate{title = 'Sous-page de bac à sable'}) | :wikitext(mw.getCurrentFrame():expandTemplate{title = 'Sous-page de bac à sable'}) | ||
end | end | ||
Ligne 253 : | Ligne 298 : | ||
: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(page, doc, existeDoc)) | + | :wikitext(protection(page, doc, existeDoc, args['message protection'])) |
− | :node(contenu(args, | + | :node(contenu(args, doc, existeDoc)) |
:node(notice(args, page, doc, existeDoc)) | :node(notice(args, page, doc, existeDoc)) | ||
+ | |||
+ | --Catégorisation des modules, en rangeant à part les modules de données | ||
+ | if page.namespace == 828 and page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then | ||
+ | if page.isSubpage and page.baseText == 'Carte/données' then | ||
+ | res:wikitext("[[Catégorie:Module de paramétrage de carte]]") | ||
+ | elseif page.isSubpage and page.baseText == 'Country data' then | ||
+ | res:wikitext("[[Catégorie:Module d'informations pays]]") | ||
+ | else | ||
+ | res:wikitext("[[Catégorie:Module en langage Lua]]") | ||
+ | end | ||
+ | end | ||
return tostring(res) | return tostring(res) |
Version actuelle datée du 15 mai 2017 à 08:40
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=|link=]]') :tag('span') :css('font-weight', 'bold') :css('font-size', '125%') :css('vertical-align', 'middle') :wikitext(' ') :wikitext(args.titre or 'Documentation') :done() if not args.contenu then local editionLien = res:tag('span') :addClass('mw-editsection plainlinks') :css('vertical-align', 'middle') :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, message) -- 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 if message == '' then message = nil end return require('Module:Protection').main({message}, protection[1], page) end end end local function contenu(args, doc, existeDoc) local page = mw.title.getCurrentTitle() 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 page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then local texteBandeau = '<b>Ce %s ne possède aucune [[Aide:Documentation de modèle|documentation]] ' ..'explicative en sous-page</b>, pas même une description succincte.<br> ' ..'Vous pouvez %s afin de documenter ce %s adéquatement.' if args.module then texteBandeau = texteBandeau:format( 'module', lienUrl(doc, 'créer cette sous-page', 'edit', 'Module'), 'module' ) else texteBandeau = texteBandeau:format( 'modèle', lienUrl(doc, 'créer cette sous-page', 'edit', ''), 'modèle' ) end if page.namespace == 10 then texteBandeau = texteBandeau .. '[[Catégorie:Modèle sans documentation]]' elseif page.namespace == 828 then if page.baseText == 'Carte/données' or page.baseText == 'Country data' or page.text:sub(1, 12) == 'Utilisateur:' then -- pas de catégorisation pour : modèles de données, pseudo-namespace "Module:Utilisateur:Toto/Nom du module" else texteBandeau = texteBandeau .. '[[Catégorie:Module sans documentation]]' end 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') :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', '1.5em 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 .. '<br />') 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('.<br /> ') end else if existeDoc then local lienAide = '[[Aide:Modèle|modèle]]' if args.module then lienAide = '[[Aide:Module|module]]' end contenuParagraphe :wikitext('La [[Aide:Documentation de modèle|documentation]] de ce ') :wikitext(lienAide) :wikitext(' est [[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() :wikitext('Veuillez placer les catégories dans la sous-page ') :wikitext(lienUrl(doc, '/Documentation')) :wikitext('.<br /> ') 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('[[' .. titrePageBacasable .. '|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('[[' .. 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 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') :css('clear', 'both') :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, args['message protection'])) :node(contenu(args, doc, existeDoc)) :node(notice(args, page, doc, existeDoc)) --Catégorisation des modules, en rangeant à part les modules de données if page.namespace == 828 and page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then if page.isSubpage and page.baseText == 'Carte/données' then res:wikitext("[[Catégorie:Module de paramétrage de carte]]") elseif page.isSubpage and page.baseText == 'Country data' then res:wikitext("[[Catégorie:Module d'informations pays]]") else res:wikitext("[[Catégorie:Module en langage Lua]]") end end 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