Jump to content

Module:DemoTemplate

From Simple English Wikipedia, the free encyclopedia
Revision as of 01:38, 11 June 2015 by Jackmcbarn (talk | changes) (use string.format at the end)

Usage

Simply place "#invoke:DemoTemplate|" before a call to a template. For example, {{#invoke:DemoTemplate|Convert|10|km|nmi|abbr=off}} yields the following:

Lua error in package.lua at line 80: module 'Module:No globals' not found.

This module handles both named and positional parameters as well as equals signs in both parameter names and values correctly, so this (for example) will work: {{#invoke:DemoTemplate|1x|1=Some parameter with an = sign in it}}

Lua error in package.lua at line 80: module 'Module:No globals' not found.

Note, however, that pipes, curly braces, etc. are not currently handled correctly by this module, so this (for example) will not work correctly: {{#invoke:DemoTemplate|1x|foo{{!}}bar}}

Lua error in package.lua at line 80: module 'Module:No globals' not found.



require('Module:No globals')

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
			ipairsArgs[k] = true
			if string.find(v, '=', 1, true) then
				printf('|%d=%s', k, v)
			else
				printf('|%s', v)
			end
		end
		for k,v in pairs(frame.args) do
			if not ipairsArgs[k] then
				printf('|%s=%s', string.gsub(k, '=', '{{=}}'), v)
			end
		end
		print('}}')
		return string.format('<code>%s</code> &rarr; %s', mw.text.nowiki(getBuffer()), frame:expandTemplate{title = title, args = frame.args})
	end
end

return setmetatable({}, mt)