Module:Common

local p = {}

p.bullet = " &bull;&#32;"

-- checks if a param is given (i. e. neither null nor whitespace) function p.isGiven(param) if type(param) == "string" then -- special checks for strings if string.gsub(param, "%s*", "") == "" then -- remove all whitespace before checking if empty return false else return true end elseif param == nil then -- return false if nil return false else -- return true in all other cases return true end end

function p.getFrameAndArgs(frame) frame = frame or {} local args -- Make frame.args a fully functional table if frame.args then local frame_args = frame.args frame.args = {} for k, v in pairs(frame_args) do			frame.args[k] = v		end end if frame.args and next(frame.args) ~= nil then args = frame.args -- use args from #invoke elseif type(frame.getParent) == "function" then local pframe = frame:getParent -- Make pframe.args a fully functional table local pframe_args = pframe.args pframe.args = {} for k, v in pairs(pframe_args) do			pframe.args[k] = v		end args = pframe.args -- get args from template call else args = frame -- assume directly passed in args frame = mw.getCurrentFrame end return frame, args end

function p.unescape(s) local news = s	for start, stop in s:gmatch("&#%d*;") do		-- need to be relative to end, otherwise the indexes will be incorrect once the strigh's length changes start = start-1 - #s stop = stop-2 - #s news = news:sub(1, start-3) .. string.char(tonumber(s:sub(start, stop))) .. news:sub(stop+2) end return news end

-- generates a span tag that automatically cycles through the given image list function p.anim(images, size) if p.isGiven(images) then images = p.unescape(images) local r = "" r = r .. " " return r	end end

function p.mwAnim(frame) return p.anim(frame.args.images, frame.args.size) end

-- generates a Semantic MediaWiki property function p.smwProp(name, value, display) if p.isGiven(name) and p.isGiven(value) then if p.isGiven(display) or display == " " then return "" .. display .. "" else return "" .. name .. "::" .. value .. "" end end return nil end

-- trims leading and trailing whitespace characters from a given string function p.trim(str) if p.isGiven(str) then return string.gsub(str, "^%s*(.-)%s*$", "%1") end return "" end

-- appends px to a given value, only if it's not already there function p.px(val) if tonumber(val) then return val .. "px" end if p.isGiven(val) then return string.gsub(val, "^(%d+)(?:px)?$", "%1px") end return "" end

-- creates an internal MediaWiki link function p.link(page, text, anchor) if p.isGiven(page) then local out = "" .. text		end		out = out .. "" return out end return "" end

-- creates an image link function p.img(page, size, link, alt) if p.isGiven(page) then local out = "" .. page		if p.isGiven(size) then			out = out .. "" return out end return "" end

-- capitalize the first letter of a given string function p.cap(str) return (str:gsub("^%l", string.upper)) end

-- parses seconds to a min:sec string function p.parseTime(seconds) if (seconds < 10) then return '0:0' .. seconds elseif (seconds < 60) then return '0:' .. seconds else local sec = seconds % 60 local min = (seconds - sec) / 60 if (sec < 10) then return min .. ':0' .. sec else return min .. ':' .. sec end end end

-- formats a number with commas -- http://lua-users.org/wiki/FormattingNumbers function p.commaValue(n) local left, num, right = string.match(n, '^([^%d]*%d)(%d*)(.-)$') return left .. (num:reverse:gsub('(%d%d%d)', '%1,'):reverse) .. right end

return p