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

De Baripedia
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(mw.getCurrentFrame():expandTemplate{title = contenuDoc})
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('&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 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]]&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