Module:Documentation

De Baripedia
Révision datée du 2 mai 2014 à 23:06 par Arthur (discussion | contributions) (1 version)
(diff) ◂ Version précédente | Voir la version actuelle (diff) | Version suivante ▸ (diff)

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 = frame:getParent().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(frame: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))
			: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('&nbsp;')
	 		:wikitext(args.titre or 'Documentation')
	 		:done()

	if not args.contenu then
		local editionLien = res:tag('span')
			:addClass('mw-editsection plainlinks')
			:wikitext('&#91;')

		if existeDoc then
			editionLien
				:wikitext(lienUrl(doc, 'modifier'))
		else
			editionLien
				:wikitext(lienUrl(doc, 'créer', 'edit', ''))
		end

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

	return tostring(res)
end

function contenu(args, titreDoc, existeDoc)
	local res = mw.html.create(''):newline()

	if args.contenu then
		res:wikitext(args.contenu)
	elseif existeDoc then
		local frame = mw.getCurrentFrame()
		local contenuDoc = args[1] or titreDoc or ''
		res:wikitext(frame:expandTemplate{title = contenuDoc})
	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]]&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()
		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]]&nbsp;')
				:tag('span')
					:css('font-size', '89%')
					:css('font-style', 'normal')
					:wikitext('(')
					:wikitext(lienUrl(pageBacasable, 'modifier'))
					:wikitext(')')
		else
			contenuParagraphe
				:wikitext('bac à sable&nbsp;')
				: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]]&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

		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