Module:User: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(see if we get a significant speed boost by porting {{user}} directly to Lua)
 
(deal with nil values properly)
Line 6: Line 6:


local function validateArg(arg)
local function validateArg(arg)
if not arg then
return nil
end
arg = arg:match('^%s*(.-)%s*$')
arg = arg:match('^%s*(.-)%s*$')
if arg ~= '' then
if arg ~= '' then
Line 34: Line 37:
for argKey, t in pairs(argKeys) do
for argKey, t in pairs(argKeys) do
for i, origArgKey in ipairs(t) do
for i, origArgKey in ipairs(t) do
local value = validateArg(origArgs[origArgKey])
local value = origArgs[origArgKey]
value = validateArg(value)
if value then
if value then
args[argKey] = value
args[argKey] = value

Revision as of 14:18, April 6, 2014

Documentation for this module may be created at Module:User/doc

local mUserLinks = require('Module:UserLinks')
local mShared = require('Module:UserLinks/shared')
local yesno = require('Module:Yesno')

local p = {}

local function validateArg(arg)
	if not arg then
		return nil
	end
	arg = arg:match('^%s*(.-)%s*$')
	if arg ~= '' then
		return arg
	end
end

function p.main(frame)
	local argKeys = {
		user = {
			1,
			'User',
			'user'
		},
		project = {
			2,
			'Project',
			'project'
		},
		lang = {
			3,
			'Lang',
			'lang'
		}
	}
	local origArgs = frame:getParent().args
	local args = {}
	for argKey, t in pairs(argKeys) do
		for i, origArgKey in ipairs(t) do
			local value = origArgs[origArgKey]
			value = validateArg(value)
			if value then
				args[argKey] = value
				break
			end
		end
	end
	local options = {
		span = false,
		separator = validateArg(origArgs.separator) or 'dot',
		isDemo = yesno(validateArg(origArgs.demo))
	}
	local codes = {'t', 'c'}
	local snippets = userLinks.getSnippets(args)
	local links = userLinks.getLinks(snippets)
	local success, result = pcall(mUserLinks.export, codes, links, options)
	if success then
		return result
	else
		return mShared.makeWikitextError(result, options.isDemo)
	end
end

return p