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

De Le Wiki de Lug
Aller à la navigation Aller à la recherche
Modèle>Od1n
(ce "prepend au lieu de replace" faisait plus de mal que de bien, car en plus d'être déroutant, j'ai observé un paquet de contenus dupliqués dans le listing que j'ai survolé ; refs aussi cette discussion que j'ai retrouvée entretemps)
m (140 revisions imported: Modele avancement)
 
(19 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
--Ce module implémente le modèle {{Documentation}}.
-- Ce module implémente le modèle {{Méta documentation de modèle}}.


local p = {}
local p = {}
Ligne 24 : Ligne 24 :
end
end


local function lienUrl(nomPage, titrePage, action, pagePreload)
local function lienUrl(nomPage, texteLien, action, pagePreload)
local argument = {['action'] = action or 'edit'}
local arguments = {}
 
if action then
arguments['action'] = action
end


if pagePreload then
if pagePreload then
argument['preload'] = 'Modèle:Documentation/Preload' .. pagePreload
arguments['preload'] = 'Modèle:Documentation/' .. pagePreload
end
end


return mw.ustring.format('[%s %s]', nomPage:fullUrl(argument), titrePage)
if arguments['action'] or arguments['preload'] then
return mw.ustring.format('[%s %s]', nomPage:fullUrl(arguments), texteLien)
else
return mw.ustring.format('[[%s|%s]]', nomPage.fullText, texteLien)
end
end
end


Ligne 37 : Ligne 45 :
local res = mw.html.create('div')
local res = mw.html.create('div')


-- Titre
res
res
:css('margin-bottom', '1ex')
:css('margin-bottom', '1ex')
Ligne 50 : Ligne 59 :
:done()
:done()


if not args.contenu then
-- Liens
local editionLien = res:tag('span')
local editionLien = res:tag('span')
:addClass('mw-editsection plainlinks')
:addClass('mw-editsection-like plainlinks')
:css('vertical-align', 'middle')
:css('vertical-align', 'middle')
:wikitext('[')
 
if args['aucun contenu additionnel'] == nil then
if not args.contenu then
if existeDoc then
editionLien
:wikitext('[')
:wikitext(lienUrl(doc, 'voir'))
:wikitext('] ')
 
:wikitext('[')
:wikitext(lienUrl(doc, 'modifier', 'edit'))
:wikitext('] ')


if existeDoc then
:wikitext('[')
editionLien:wikitext(lienUrl(doc, 'modifier'))
:wikitext(lienUrl(doc, 'historique', 'history'))
else
:wikitext('] ')
if args.module then
editionLien:wikitext(lienUrl(doc, 'créer', 'edit', 'Module'))
else
else
editionLien:wikitext(lienUrl(doc, 'créer', 'edit', ''))
local pagePreload = 'Preload'
if page.namespace == 828 then
pagePreload = 'PreloadModule'
end
 
editionLien
:wikitext('[')
:wikitext(lienUrl(doc, 'créer', 'edit', pagePreload))
:wikitext('] ')
end
end
end
end
end


editionLien
editionLien
:wikitext('] [')
:wikitext('[')
:wikitext(lienUrl(page, 'purger', 'purge'))
:wikitext(lienUrl(page, 'purger', 'purge'))
:wikitext(']')
:wikitext(']')
end


return res
return res
Ligne 126 : Ligne 152 :
local res = mw.html.create():newline()
local res = mw.html.create():newline()


if existeDoc then
-- Contenu auto haut
local contenuDoc = mw.getCurrentFrame():expandTemplate{title = doc.prefixedText}
if args['contenu auto haut'] then
if page.subpageText == 'Bac à sable' or page.subpageText == 'Test' then
res:wikitext(args['contenu auto haut'])
contenuDoc = retireBalisesCategories(contenuDoc)
  :newline()
end
end
res:wikitext(contenuDoc)


if args['complément'] then
-- Contenu ou sous-page de doc
res :newline()
if args['aucun contenu additionnel'] == nil then
:newline()
if args.contenu then
:wikitext(args['complément'])
res:newline()
end
  :wikitext(args.contenu)
  :newline()


elseif args.contenu then
elseif existeDoc then
res:wikitext(args.contenu)
local contenuDoc = mw.getCurrentFrame():expandTemplate{title = doc.prefixedText}
if page.subpageText == 'Bac à sable' or page.subpageText == 'Test' then
contenuDoc = retireBalisesCategories(contenuDoc)
end
res:newline()
  :wikitext(contenuDoc)
  :newline()


elseif page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then
elseif page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' and args['contenu facultatif'] == nil then
local texteBandeau = '<b>Ce %s ne possède aucune [[Aide:Documentation de modèle|documentation]] '
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> '
..'explicative en sous-page</b>, pas même une description succincte.<br> '
..'Vous pouvez %s afin de documenter ce %s adéquatement.'
..'Vous pouvez %s afin de documenter ce %s adéquatement.'
if args.module then
if page.namespace == 828 then -- Module
texteBandeau = texteBandeau:format(
texteBandeau = texteBandeau:format(
'module',
'module',
lienUrl(doc, 'créer cette sous-page', 'edit', 'Module'),
lienUrl(doc, 'créer cette sous-page', 'edit', 'PreloadModule'),
'module'
'module'
)
)
if page.baseText == 'Country data' or page.text:sub(1, 12) == 'Utilisateur:' then
else -- Modèle
-- pas de catégorisation pour : modèles de données, pseudo-namespace "Module:Utilisateur:Toto/Nom du module"
texteBandeau = texteBandeau:format(
else
'modèle',
texteBandeau = texteBandeau .. '[[Catégorie:Module sans documentation]]'
lienUrl(doc, 'créer cette sous-page', 'edit', 'Preload'),
'modèle'
)
end
if page.namespace == 10 then -- Modèle
texteBandeau = texteBandeau .. '[[Catégorie:Modèle sans documentation]]'
elseif page.namespace == 828 then -- Module
if page.text:sub(1, 12) == 'Utilisateur:' then
-- Pas de catégorisation pour le pseudo-namespace "Module:Utilisateur:Toto/Nom du module"
elseif existeDoc == false then
texteBandeau = texteBandeau .. '[[Catégorie:Module sans documentation]]'
end
end
end
else
local param = {
texteBandeau = texteBandeau:format(
['icône'] = 'OOjs_UI_icon_book-ltr.svg',
'modèle',
alt = 'MIT',
lienUrl(doc, 'créer cette sous-page', 'edit', ''),
style = 'width:80%;',
'modèle'
texte = texteBandeau,
)
}
texteBandeau = texteBandeau .. '[[Catégorie:Modèle sans documentation]]'
res:wikitext(require('Module:Bandeau')._bandeau(param))
end
end
local param = {
end
['icône'] = 'OOjs_UI_icon_book-ltr.svg',
 
alt = 'MIT',
-- Contenu auto bas
style = 'width:80%;',
if args['contenu auto bas'] then
texte = texteBandeau,
res:newline()
}
  :wikitext(args['contenu auto bas'])
res:wikitext(require('Module:Bandeau')._bandeau(param))
end
end


res
res
:newline()
:tag('div')
:tag('div')
:css('clear', 'both')
:css('clear', 'both')
Ligne 194 : Ligne 235 :
:css('font-style', 'italic')
:css('font-style', 'italic')


if args.contenu then
-- Phrase "la documentation est générée par ..."
if args.notice then
if args['nom modèle'] then
contenuParagraphe:wikitext(args.notice .. '<br />')
local lienAide = '[[Aide:Modèle|modèle]]'
else
if page.namespace == 828 then
lienAide = '[[Aide:Module|module]]'
end
 
contenuParagraphe
:wikitext('La [[Aide:Documentation de modèle|documentation]] de ce ')
:wikitext(lienAide)
:wikitext(' est générée par le modèle ')
:wikitext(mw.getCurrentFrame():expandTemplate{title = 'm', args = {args['nom modèle']} })
:wikitext('.<br>')
else
contenuParagraphe
:tag('span')
:addClass('error')
:wikitext('Erreur : le paramètre <code>nom modèle</code> n\'est pas renseigné.<br>')
end
 
-- Phrase indiquant la provenance du contenu (dans le corps ou en sous-page)
if args['aucun contenu additionnel'] == nil then
if args.contenu then
contenuParagraphe
contenuParagraphe
:wikitext('La [[Aide:Documentation de modèle|documentation]] ')
:wikitext('Elle est directement [[Aide:Inclusion|incluse]] dans l\'appel de ce dernier. ')
:wikitext('de ce [[Aide:Modèle|modèle]] est directement ')
:wikitext('Si cette page est protégée, veuillez ')
: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('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', 'Preload'))
:wikitext('.<br /> ')
:wikitext('.<br>')
end
elseif existeDoc then
else
contenuParagraphe
if existeDoc then
:wikitext('Elle est [[Aide:Inclusion|incluse]] depuis ')
local lienAide = '[[Aide:Modèle|modèle]]'
 
if args.module then
if args['page doc'] then
lienAide = '[[Aide:Module|module]]'
contenuParagraphe
:wikitext('la page [[')
:wikitext(tostring(doc))
:wikitext(']]. ')
else
contenuParagraphe
:wikitext('sa [[')
:wikitext(tostring(doc))
:wikitext('|sous-page de documentation]]. ')
end
end
contenuParagraphe
contenuParagraphe
:wikitext('La [[Aide:Documentation de modèle|documentation]] de ce ')
:wikitext('Veuillez placer les catégories sur cette page-.<br>')
:wikitext(lienAide)
:wikitext(' est [[Aide:Inclusion|incluse]] depuis sa [[')
:wikitext(tostring(doc))
:wikitext('|sous-page de documentation]]&nbsp;')
:tag('span')
:css('font-size', '89%')
:css('font-style', 'normal')
:wikitext('(')
:wikitext(lienUrl(doc, 'modifier'))
:wikitext('&nbsp;|&nbsp;')
: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
end
end


contenuParagraphe:wikitext('Les éditeurs peuvent travailler dans le ')
-- Phrase indiquant les liens vers le bac à sable et la page de test
contenuParagraphe
:wikitext('Les éditeurs peuvent travailler dans le ')


local titrePageBacasable = nomSouspage(page, 'Bac à sable')
local titrePageBacasable = nomSouspage(page, 'Bac à sable')
Ligne 247 : Ligne 299 :
:css('font-style', 'normal')
:css('font-style', 'normal')
:wikitext('(')
:wikitext('(')
:wikitext(lienUrl(pageBacasable, 'modifier'))
:wikitext(lienUrl(pageBacasable, 'modifier', 'edit'))
:wikitext(')')
:wikitext(')')
else
else
local preLoad = '2'
local pagePreload = 'Preload2'
if args.module then
if page.namespace == 828 then
preLoad = nil
pagePreload = nil
end
end
contenuParagraphe
contenuParagraphe
Ligne 260 : Ligne 312 :
:css('font-style', 'normal')
:css('font-style', 'normal')
:wikitext('(')
:wikitext('(')
:wikitext(lienUrl(pageBacasable, 'créer', 'edit', preLoad))
:wikitext(lienUrl(pageBacasable, 'créer', 'edit', pagePreload))
:wikitext(')')
:wikitext(')')
end
end


if not args.module then
if page.namespace ~= 828 then
contenuParagraphe:wikitext(' et la page de ')
contenuParagraphe:wikitext(' et la page de ')


Ligne 277 : Ligne 329 :
:css('font-style', 'normal')
:css('font-style', 'normal')
:wikitext('(')
:wikitext('(')
:wikitext(lienUrl(pageTest, 'modifier'))
:wikitext(lienUrl(pageTest, 'modifier', 'edit'))
:wikitext(')')
:wikitext(')')
else
else
Ligne 286 : Ligne 338 :
:css('font-style', 'normal')
:css('font-style', 'normal')
:wikitext('(')
:wikitext('(')
:wikitext(lienUrl(pageTest, 'créer', 'edit', '3'))
:wikitext(lienUrl(pageTest, 'créer', 'edit', 'Preload3'))
:wikitext(')')
:wikitext(')')
end
end
Ligne 297 : Ligne 349 :
function p._documentation(args)
function p._documentation(args)
local page = mw.title.getCurrentTitle()
local page = mw.title.getCurrentTitle()
local titreDoc = args[1] or nomSouspage(page, 'Documentation')
local titrePageDoc = args['page doc'] or nomSouspage(page, 'Documentation')
local doc = mw.title.new(titreDoc)
local doc = mw.title.new(titrePageDoc)
local existeDoc = existePage(doc)
local existeDoc = existePage(doc)
local res = mw.html.create()
local res = mw.html.create()
Ligne 312 : Ligne 364 :


--Génération de la documentation
--Génération de la documentation
local couleur = '#ecfcf4'
if page.namespace == 828 then
couleur = '#ecf0fc'
end
res
res
:tag('div')
:tag('div')
:addClass('documentation')
:css('clear', 'both')
:css('clear', 'both')
:css('margin', '1em 0 0 0')
:css('margin', '1em 0 0 0')
:css('border', '1px solid #aaa')
:css('border', '1px solid #aaa')
:css('background', args.couleur or '#ecfcf4')
:css('background', couleur)
:css('padding', '1em 1em 0.8em')
:css('padding', '1em 1em 0.8em')
:node(entete(args, page, doc, existeDoc))
:node(entete(args, page, doc, existeDoc))
Ligne 324 : Ligne 382 :
:node(notice(args, page, doc, existeDoc))
:node(notice(args, page, doc, existeDoc))


--Catégorisation des modules, en rangeant à part les modules de données
-- Catégorisation par défaut pour les modules sans documentation
if args.module and page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then
if page.namespace == 828 and page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then
if page.isSubpage and page.baseText == 'Country data' then
if existeDoc == false then
res:wikitext("[[Catégorie:Module d'informations pays|" .. page.subpageText .. "]]")
else
res:wikitext("[[Catégorie:Module en langage Lua]]")
res:wikitext("[[Catégorie:Module en langage Lua]]")
end
end

Version actuelle datée du 9 avril 2021 à 11:22

La documentation pour ce module peut être créée à Module:Documentation/doc

-- Ce module implémente le modèle {{Méta documentation de modèle}}.

local p = {}

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

local function nomSouspage(page, souspage)
	--On n'est pas dans une sous-page
	if not page.isSubpage then
		return page.subjectNsText .. ':' .. page.text .. '/' .. souspage
	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 .. '/' .. souspage
	else
		return page.subjectNsText .. ':' .. page.text .. '/' .. souspage
	end
end

local function lienUrl(nomPage, texteLien, action, pagePreload)
	local arguments = {}

	if action then
		arguments['action'] = action
	end

	if pagePreload then
		arguments['preload'] = 'Modèle:Documentation/' .. pagePreload
	end

	if arguments['action'] or arguments['preload'] then
		return mw.ustring.format('[%s %s]', nomPage:fullUrl(arguments), texteLien)
	else
		return mw.ustring.format('[[%s|%s]]', nomPage.fullText, texteLien)
	end
end

local function entete(args, page, doc, existeDoc)
	local res = mw.html.create('div')

	-- Titre
	res
		:css('margin-bottom', '1ex')
		:css('border-bottom', '1px solid #aaa')
		:css('padding-bottom', '3px')
 		:wikitext('[[Fichier:Test Template Info-Icon.svg|50px|alt=|link=]]')
	 	:tag('span')
	 		:css('font-weight', 'bold')
	 		:css('font-size', '125%')
	 		:css('vertical-align', 'middle')
	 		:wikitext('&nbsp;')
	 		:wikitext(args.titre or 'Documentation')
	 		:done()

	-- Liens
	local editionLien = res:tag('span')
		:addClass('mw-editsection-like plainlinks')
		:css('vertical-align', 'middle')

	if args['aucun contenu additionnel'] == nil then
		if not args.contenu then
			if existeDoc then
				editionLien
					:wikitext('&#91;')
					:wikitext(lienUrl(doc, 'voir'))
					:wikitext('&#93; ')

					:wikitext('&#91;')
					:wikitext(lienUrl(doc, 'modifier', 'edit'))
					:wikitext('&#93; ')

					:wikitext('&#91;')
					:wikitext(lienUrl(doc, 'historique', 'history'))
					:wikitext('&#93; ')
			else
				local pagePreload = 'Preload'
				if page.namespace == 828 then
					pagePreload = 'PreloadModule'
				end

				editionLien
					:wikitext('&#91;')
					:wikitext(lienUrl(doc, 'créer', 'edit', pagePreload))
					:wikitext('&#93; ')
			end
		end
	end

	editionLien
		:wikitext('&#91;')
		:wikitext(lienUrl(page, 'purger', 'purge'))
		:wikitext('&#93;')

	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*[|}]', '{{%s*[Ss]emi%-protection +longue%s*[|}]'},
			editextendedsemiprotected = {'semiProtectionEtendue', '{{%s*[Ss]emi%-protection +étendue%s*[|}]'},
			sysop = {'protection', '{{%s*[Pp]rotection%s*[|}]'},
		}
		local protection = tableProtection[niveauProtection[1]]
		if not protection then
			return ''
		end

		local alreadyShown = false
		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]) or (protection[3] and contenuDoc:match(protection[3])) then
				alreadyShown = true
			end
		end

		if not alreadyShown then
			if message == '' then
				message = nil
			end
			return require('Module:Protection').main({message}, protection[1], page)
		end
	end
end

-- pour les bacs à sable, on retire les balises de catégories
-- habituellement situées en "includeonly" à la fin de la documentation
local function retireBalisesCategories(contenuDoc)
	local count
	repeat
		contenuDoc, count = mw.ustring.gsub(contenuDoc, '%[%[Catégorie:[^%]]+%]%][\t\r\n\f ]*$', '')
	until count == 0

	contenuDoc, count = mw.ustring.gsub(contenuDoc, '[\t\r\n\f ]*$', '')

	return contenuDoc
end

local function contenu(args, doc, existeDoc)
	local page = mw.title.getCurrentTitle()
	local res = mw.html.create():newline()

	-- Contenu auto haut
	if args['contenu auto haut'] then
		res:wikitext(args['contenu auto haut'])
		   :newline()
	end

	-- Contenu ou sous-page de doc
	if args['aucun contenu additionnel'] == nil then
		if args.contenu then
			res:newline()
			   :wikitext(args.contenu)
			   :newline()

		elseif existeDoc then
			local contenuDoc = mw.getCurrentFrame():expandTemplate{title = doc.prefixedText}
			if page.subpageText == 'Bac à sable' or page.subpageText == 'Test' then
				contenuDoc = retireBalisesCategories(contenuDoc)
			end
			res:newline()
			   :wikitext(contenuDoc)
			   :newline()

		elseif page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' and args['contenu facultatif'] == nil 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 page.namespace == 828 then -- Module
				texteBandeau = texteBandeau:format(
					'module',
					lienUrl(doc, 'créer cette sous-page', 'edit', 'PreloadModule'),
					'module'
				)
			else -- Modèle
				texteBandeau = texteBandeau:format(
					'modèle',
					lienUrl(doc, 'créer cette sous-page', 'edit', 'Preload'),
					'modèle'
				)
			end
			if page.namespace == 10 then -- Modèle
				texteBandeau = texteBandeau .. '[[Catégorie:Modèle sans documentation]]'
			elseif page.namespace == 828 then -- Module
				if page.text:sub(1, 12) == 'Utilisateur:' then
					-- Pas de catégorisation pour le pseudo-namespace "Module:Utilisateur:Toto/Nom du module"
				elseif existeDoc == false then
					texteBandeau = texteBandeau .. '[[Catégorie:Module sans documentation]]'
				end
			end
			local param = {
				['icône'] = 'OOjs_UI_icon_book-ltr.svg',
				alt = 'MIT',
				style = 'width:80%;',
				texte = texteBandeau,
			}
			res:wikitext(require('Module:Bandeau')._bandeau(param))
		end
	end

	-- Contenu auto bas
	if args['contenu auto bas'] then
		res:newline()
		   :wikitext(args['contenu auto bas'])
	end

	res
		: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')

	-- Phrase "la documentation est générée par ..."
	if args['nom modèle'] then
		local lienAide = '[[Aide:Modèle|modèle]]'
		if page.namespace == 828 then
			lienAide = '[[Aide:Module|module]]'
		end

		contenuParagraphe
			:wikitext('La [[Aide:Documentation de modèle|documentation]] de ce ')
			:wikitext(lienAide)
			:wikitext(' est générée par le modèle ')
			:wikitext(mw.getCurrentFrame():expandTemplate{title = 'm', args = {args['nom modèle']} })
			:wikitext('.<br>')
	else
		contenuParagraphe
		:tag('span')
			:addClass('error')
			:wikitext('Erreur : le paramètre <code>nom modèle</code> n\'est pas renseigné.<br>')
	end

	-- Phrase indiquant la provenance du contenu (dans le corps ou en sous-page)
	if args['aucun contenu additionnel'] == nil then
		if args.contenu then
			contenuParagraphe
				:wikitext('Elle est directement [[Aide:Inclusion|incluse]] dans l\'appel de ce dernier. ')
				: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', 'Preload'))
				:wikitext('.<br>')
		elseif existeDoc then
			contenuParagraphe
				:wikitext('Elle est [[Aide:Inclusion|incluse]] depuis ')

			if args['page doc'] then
				contenuParagraphe
					:wikitext('la page [[')
					:wikitext(tostring(doc))
					:wikitext(']]. ')
			else
				contenuParagraphe
					:wikitext('sa [[')
					:wikitext(tostring(doc))
					:wikitext('|sous-page de documentation]]. ')
			end

			contenuParagraphe
				:wikitext('Veuillez placer les catégories sur cette page-là.<br>')
		end
	end

	-- Phrase indiquant les liens vers le bac à sable et la page de test
	contenuParagraphe
		:wikitext('Les éditeurs peuvent travailler dans le ')

	local titrePageBacasable = nomSouspage(page, 'Bac à sable')
	local pageBacasable = mw.title.new(titrePageBacasable)

	if existePage(pageBacasable) then
		contenuParagraphe
			:wikitext('[[' .. titrePageBacasable .. '|bac à sable]]&nbsp;')
			:tag('span')
				:css('font-size', '89%')
				:css('font-style', 'normal')
				:wikitext('(')
				:wikitext(lienUrl(pageBacasable, 'modifier', 'edit'))
				:wikitext(')')
	else
		local pagePreload = 'Preload2'
		if page.namespace == 828 then
			pagePreload = nil
		end
		contenuParagraphe
			:wikitext('bac à sable&nbsp;')
			:tag('span')
				:css('font-size', '89%')
				:css('font-style', 'normal')
				:wikitext('(')
				:wikitext(lienUrl(pageBacasable, 'créer', 'edit', pagePreload))
				:wikitext(')')
	end

	if page.namespace ~= 828 then
		contenuParagraphe:wikitext(' et la page de ')

		local titrePageTest = nomSouspage(page, 'Test')
		local pageTest = mw.title.new(titrePageTest)

		if existePage(pageTest) then
			contenuParagraphe
				:wikitext('[[' .. titrePageTest .. '|test]]&nbsp;')
				:tag('span')
					:css('font-size', '89%')
					:css('font-style', 'normal')
					:wikitext('(')
					:wikitext(lienUrl(pageTest, 'modifier', 'edit'))
					:wikitext(')')
		else
			contenuParagraphe
				:wikitext('test&nbsp;')
				:tag('span')
					:css('font-size', '89%')
					:css('font-style', 'normal')
					:wikitext('(')
					:wikitext(lienUrl(pageTest, 'créer', 'edit', 'Preload3'))
					:wikitext(')')
		end
	end
	contenuParagraphe:wikitext('.')

	return res
end

function p._documentation(args)
	local page = mw.title.getCurrentTitle()
	local titrePageDoc = args['page doc'] or nomSouspage(page, 'Documentation')
	local doc = mw.title.new(titrePageDoc)
	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
	local couleur = '#ecfcf4'
	if page.namespace == 828 then
		couleur = '#ecf0fc'
	end

	res
		:tag('div')
			:addClass('documentation')
			:css('clear', 'both')
			:css('margin', '1em 0 0 0')
			:css('border', '1px solid #aaa')
			:css('background', couleur)
			: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 par défaut pour les modules sans documentation
	if page.namespace == 828 and page.subpageText ~= 'Bac à sable' and page.subpageText ~= 'Test' then
		if existeDoc == false then
			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
		val = mw.text.trim(val)
		if val ~= '' then
			args[cle] = val
		end
	end

	return p._documentation(args)
end

return p