Vés al contingut

Mòdul:DemoTemplate

De la Viquipèdia, l'enciclopèdia lliure
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul DemoTemplate (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Simplement col·loqueu "#invoke:DemoTemplate|" abans d’una crida a una plantilla. Per exemple, {{#invoke:DemoTemplate|Convert|10|km|nmi|abbr=off}} produeix el següent:

{{Convert|10|km|nmi|abbr=off}} → 10 quilometres (5.4 milles nàutiques)

Aquest mòdul gestiona correctament tant els paràmetres nomenats i posicionals com els signes iguals tant en els noms com en els valors dels paràmetres, de manera que això (per exemple) funcionarà: {{#invoke:DemoTemplate|1x|1=Alguns paràmetres amb un = sign in it}}

{{1x|1=Alguns paràmetres amb un = sign in it}} → Alguns paràmetres amb un = sign in it

Tingueu en compte, però, que aquest mòdul no manipula correctament les barres verticals, claus, etc., de manera que això (per exemple) no funcionarà correctament: {{#invoke:DemoTemplate|1x|foo{{!}}bar}}

{{1x|foo|bar}} → foo

require('strict')

local newBuffer = require('Module:OutputBuffer')
local mt = {}

function mt.__index(t, title)
	return function(frame)
		local getBuffer, print, printf = newBuffer()
		printf('{{%s', title)
		local ipairsArgs = {}
		for k,v in ipairs(frame.args) do
			if string.find(v, '=', 1, true) then
				break
			end
			ipairsArgs[k] = true
			printf('|%s', v)
		end
		for k,v in pairs(frame.args) do
			if not ipairsArgs[k] then
				printf('|%s=%s', string.gsub(k, '=', '{{=}}'), v)
			end
		end
		print('}}')
		local buffer = getBuffer()
		-- rather than calling expandTemplate with the title and args we have, call preprocess, so that our code example will always match our output, even in the cases of pipes or other things we should have escaped but didn't
		return string.format('<code>%s</code> &rarr; %s', mw.text.nowiki(buffer), frame:preprocess(buffer))
	end
end

return setmetatable({}, mt)