« Module:Documentation » : différence entre les versions
m (1 version) |
m (1 version) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 15 : | Ligne 15 : | ||
return p._documentation(args) | 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 | ||
Ligne 41 : | 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(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 117 : | Ligne 129 : | ||
return tostring(res) | 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 | end | ||
Ligne 126 : | Ligne 163 : | ||
elseif existeDoc then | elseif existeDoc then | ||
local contenuDoc = args[1] or titreDoc or '' | local contenuDoc = args[1] or titreDoc or '' | ||
res:wikitext( | 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 | end | ||
Version du 19 août 2014 à 10:45
This module displays a blue box containing documentation for templates, Lua modules, or other pages. It is usually run using the {{documentation}} template.
Normal usage
For most uses, this module should be called from the {{documentation}} template. Please see the template page for usage instructions and a list of parameters.
Use in other modules
To use this module from another Lua module, first load it with require
:
<source lang="lua"> local documentation = require('Module:Documentation').main </source>
Then you can simply call it using a table of arguments. <source lang="lua"> documentation{content = 'Some documentation', ['link box'] = 'My custom link box'} </source>
Please refer to the template documentation for usage instructions and a list of parameters.
Porting to other wikis
The module has a configuration file at Module:Documentation/config which is intended to allow easy translation and porting to other wikis. Please see the code comments in the config page for instructions. If you have any questions, or you need a feature which is not currently implemented, please leave a message at Template talk:Documentation to get the attention of a developer.
Erreur de script : Erreur Lua : impossible de créer le processus : proc_open n’est pas disponible. Vérifiez la directive de configuration PHP « disable_functions ».
--Ce module implémente le modèle {{Documentation}}. 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('[[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 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 [[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 tostring(res) end return p