Module:File link: Difference between revisions
allow specifying height and width values as strings ending in px
m (Protected Module:File link: High-risk Lua module ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))) |
(allow specifying height and width values as strings ending in px) |
||
Line 5: | Line 5: | ||
local fileLink = {} | local fileLink = {} | ||
local function checkTypeStringOrNum(funcName, pos, arg) | |||
local argType = type(arg) | |||
if argType ~= 'nil' and argType ~= 'string' and argType ~= 'number' then | |||
error(string.format( | |||
"bad argument #%d to '%s' (string or number expected, got %s)", | |||
pos, | |||
funcName, | |||
argType | |||
), 3) | |||
end | |||
end | |||
function fileLink.new(filename) | function fileLink.new(filename) | ||
Line 52: | Line 64: | ||
end | end | ||
local function | local function validateSize(method, px) | ||
-- | -- Validate input for size-related functions. The px type is checked | ||
error(string.format( | -- using checkTypeStringOrNum, so will be a string, a number, or nil. | ||
if px and data.isUpright then | |||
error(string.format( | |||
"duplicate size argument detected in '%s' ('upright' cannot be" | |||
), 3) | .. ' used in conjunction with height or width)', | ||
method | |||
), 3) | |||
end | |||
if type(px) == 'string' then | |||
local origPx = px | |||
px = px:match('^(%d+)px$') or px | |||
px = tonumber(px) | |||
if not px then | |||
error(string.format( | |||
"invalid string '%s' passed to '%s'", | |||
origPx, | |||
method | |||
), 3) | |||
end | |||
end | |||
-- px is now a number or nil. | |||
if px and px < 1 or math.floor(px) ~= px then | |||
error(string.format( | |||
"invalid image size specified in '%s' (size must be a positive" | |||
.. 'integer)', | |||
method | |||
), 3) | |||
end | |||
return px | |||
end | end | ||
function data:width(px) | function data:width(px) | ||
checkSelf(self, 'width') | checkSelf(self, 'width') | ||
checkTypeStringOrNum('fileLink:width', 1, px) | |||
px = validateSize('fileLink:width', px) | |||
data.theWidth = px | data.theWidth = px | ||
return self | return self | ||
Line 73: | Line 107: | ||
function data:height(px) | function data:height(px) | ||
checkSelf(self, 'height') | checkSelf(self, 'height') | ||
checkTypeStringOrNum('fileLink:height', 1, px) | |||
px = validateSize('fileLink:height', px) | |||
data.theHeight = px | data.theHeight = px | ||
return self | return self | ||
Line 185: | Line 217: | ||
data.theLang = s | data.theLang = s | ||
return self | return self | ||
end | end | ||