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: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()  	if not args.contenu then 		local editionLien = res:tag('span') 			:addClass('mw-editsection plainlinks') 			:css('vertical-align', 'middle') 			:wikitext('&#91;')  		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('&#93;&#32;&#91;') 			:wikitext(lienUrl(page, 'purger', 'purge')) 			:wikitext('&#93;') 	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]]&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 	 	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]]&nbsp;') 			: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&nbsp;') 			: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]]&nbsp;') 				:tag('span') 					:css('font-size', '89%') 					:css('font-style', 'normal') 					:wikitext('(') 					:wikitext(lienUrl(pageTest, 'modifier')) 					:wikitext(')') 		else 			contenuParagraphe 				:wikitext('test&nbsp;') 				: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') 			:addClass('documentation') 			: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