Ir al contenido

Módulo:Unsubst

De Wikisource, la biblioteca libre.
Documentación del módulo


Módulo que implementa plantillas que no se pueden sustituir. Esto se implementa usando un módulo que, al sustituirse, devuelve el wikitexto de la plantilla correspondiente.

Además, es posible agregar la fecha de sustitución de forma automática, para propósitos de mantenimiento.

Uso

Para convertir una plantilla en una no sustituible, se debe envolver el código existente con:

{{SAFESUBST:<noinclude />#invoke:Unsubst||$B=

 [ ... código de la plantilla ... ]

}}
El wikitexto que no debe ser sustituido se debe agregar como el parámetro "$B". Todos los otros parámetros que se entreguen en el #invoke se copiarán a la plantilla sustituida como valores por defecto. Si el valor de cualquiera de esos parámetros es __DATE__, ese parámetro tendrá como valor una cadena del tipo "20251002" que representa el año, mes y día de la sustitución. Esto permite ordenar los artículos por fecha en las categorías de mantenimiento.
Esta documentación está transcluida desde Módulo:Unsubst/doc.
Los editores pueden experimentar en la zona de pruebas
Por favor, añade las categorías a la subpágina de documentación.
(subpáginas - enlaces)

local p = {}

local specialParams = {
	['$B'] = 'contenido de la plantilla',
}

p[''] = function ( frame )
	if not frame:getParent() then
		error( '{{#invoke:Unsubst|}} no tiene sentido si no hay un marco padre' )
	end
	if not frame.args['$B'] then
		error( '{{#invoke:Unsubst|}} requiere un parámetro $B (contenido de la plantilla)' )
	end
	
	if mw.isSubsting() then
		---- substing
		-- Combine passed args with passed defaults
		local args = {}
		for k, v in pairs( frame.args ) do
			if not specialParams[k] then
				if v == '__DATE__' then
					v = mw.getContentLanguage():formatDate( 'Ymd' )
				end
				args[k] = v
			end
		end
		for k, v in pairs( frame:getParent().args ) do
			args[k] = v
		end

		-- Build an equivalent template invocation
		-- First, find the title to use
		local titleobj = mw.title.new(frame:getParent():getTitle())
		local title
		if titleobj.namespace == 10 then -- NS_TEMPLATE
			title = titleobj.text
		elseif titleobj.namespace == 0 then -- NS_MAIN
			title = ':' .. titleobj.text
		else
			title = titleobj.prefixedText
		end

		-- Build the invocation body with numbered args first, then named
		local ret = '{{' .. title
		for k, v in ipairs( args ) do
			if string.find( v, '=', 1, true ) then
				-- likely something like 1=foo=bar, we need to do it as a named arg
				break
			end
			ret = ret .. '|' .. v
			args[k] = nil
		end
		for k, v in pairs( args ) do
			ret = ret .. '|' .. k .. '=' .. v
		end
		
		return ret .. '}}'
	else
		---- Not substing
		-- Just return the "body"
		return frame.args['$B']
	end
end

return p