imported>Jacques Ducloy |
imported>Jacques Ducloy |
Ligne 1 : |
Ligne 1 : |
− | --Ce module implémente le modèle {{Documentation}}.
| + | <includeonly><span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=purge}} {{#if:{{{1|}}}|{{{1}}}|Cliquez ici pour purger le cache}}]</span></includeonly><noinclude> |
− | | + | {{Documentation}}<!-- Métadonnées (catégories, interwikis, …) en sous-page de documentation --> |
− | local p = {}
| + | </noinclude> |
− | | |
− | 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)
| |
− | -- 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 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))
| |
− | :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
| |