Module:File link: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(move duplicate size error checks to the setting functions, fix the alignment error message) |
(enable call-chaining and tweak the error messages to use "image:method" rather than just "method") |
||
Line 2: | Line 2: | ||
local libraryUtil = require('libraryUtil') |
local libraryUtil = require('libraryUtil') |
||
⚫ | |||
local image = {} |
local image = {} |
||
function image.new() |
function image.new(filename) |
||
checkType('image.new', 1, filename, 'string', true) |
|||
local obj, data = {}, {} |
local obj, data = {}, {} |
||
local checkSelf = libraryUtil.makeCheckSelfFunction( |
local checkSelf = libraryUtil.makeCheckSelfFunction( |
||
'image', |
|||
⚫ | |||
'image', |
|||
obj, |
|||
'image object' |
|||
) |
|||
-- Set the filename if we were passed it as an input to image.new. |
|||
if filename then |
|||
data.theName = filename |
|||
end |
|||
function data:name(s) |
function data:name(s) |
||
checkSelf(self, 'name') |
checkSelf(self, 'image:name') |
||
checkType('name', 1, s, 'string') |
checkType('image:name', 1, s, 'string') |
||
data.theName = s |
data.theName = s |
||
return self |
|||
end |
end |
||
function data:format(s, filename) |
function data:format(s, filename) |
||
checkSelf(self, 'format') |
checkSelf(self, 'image:format') |
||
checkType('format', 1, s, 'string') |
checkType('image:format', 1, s, 'string') |
||
checkType('format', 2, format, 'string', true) |
checkType('image:format', 2, format, 'string', true) |
||
local validFormats = { |
local validFormats = { |
||
thumb = true, |
thumb = true, |
||
Line 32: | Line 44: | ||
data.theFormatFilename = filename |
data.theFormatFilename = filename |
||
else |
else |
||
error( |
error(string.format( |
||
"bad argument #1 to 'image:format' ('%s' is not a valid format)", |
|||
s |
|||
), 2) |
|||
end |
end |
||
return self |
|||
end |
end |
||
Line 46: | Line 62: | ||
function data:width(px) |
function data:width(px) |
||
checkSelf(self, 'width') |
checkSelf(self, 'image:width') |
||
checkType('width', 1, px, 'number') |
checkType('image:width', 1, px, 'number') |
||
if data.isUpright then |
if data.isUpright then |
||
sizeError('width') |
sizeError('image:width') |
||
end |
end |
||
data.theWidth = px |
data.theWidth = px |
||
return self |
|||
end |
end |
||
function data:height(px) |
function data:height(px) |
||
checkSelf(self, 'height') |
checkSelf(self, 'image:height') |
||
checkType('height', 1, px, 'number') |
checkType('image:height', 1, px, 'number') |
||
if data.isUpright then |
if data.isUpright then |
||
sizeError('height') |
sizeError('image:height') |
||
end |
end |
||
data.theHeight = px |
data.theHeight = px |
||
return self |
|||
end |
end |
||
function data:upright(factor) |
function data:upright(factor) |
||
checkSelf(self, 'upright') |
checkSelf(self, 'image:upright') |
||
checkType('upright', 1, factor, 'number', true) |
checkType('image:upright', 1, factor, 'number', true) |
||
if data.theWidth or data.theHeight then |
if data.theWidth or data.theHeight then |
||
sizeError('upright') |
sizeError('image:upright') |
||
end |
end |
||
data.isUpright = true |
data.isUpright = true |
||
data.uprightFactor = factor |
data.uprightFactor = factor |
||
return self |
|||
end |
end |
||
function data:resetSize() |
function data:resetSize() |
||
checkSelf(self, 'resetSize') |
checkSelf(self, 'image:resetSize') |
||
for i, field in ipairs{'theWidth', 'theHeight', 'isUpright', 'uprightFactor'} do |
for i, field in ipairs{'theWidth', 'theHeight', 'isUpright', 'uprightFactor'} do |
||
data[field] = nil |
data[field] = nil |
||
end |
end |
||
return self |
|||
end |
end |
||
function data:location(s) |
function data:location(s) |
||
checkSelf(self, 'location') |
checkSelf(self, 'image:location') |
||
checkType('location', 1, s, 'string') |
checkType('image:location', 1, s, 'string') |
||
local validLocations = { |
local validLocations = { |
||
right = true, |
right = true, |
||
Line 93: | Line 113: | ||
else |
else |
||
error(string.format( |
error(string.format( |
||
"bad argument #1 to 'location' ('%s' is not a valid location)", |
"bad argument #1 to 'image:location' ('%s' is not a valid location)", |
||
s |
s |
||
)) |
), 2) |
||
end |
end |
||
return self |
|||
end |
end |
||
function data:alignment(s) |
function data:alignment(s) |
||
checkSelf(self, 'alignment') |
checkSelf(self, 'image:alignment') |
||
checkType('alignment', 1, s, 'string') |
checkType('image:alignment', 1, s, 'string') |
||
local validAlignments = { |
local validAlignments = { |
||
baseline = true, |
baseline = true, |
||
Line 116: | Line 137: | ||
else |
else |
||
error(string.format( |
error(string.format( |
||
"bad argument #1 to 'alignment' ('%s' is not a valid alignment)", |
"bad argument #1 to 'image:alignment' ('%s' is not a valid alignment)", |
||
s |
s |
||
)) |
), 2) |
||
end |
end |
||
return self |
|||
end |
end |
||
function data:border() |
function data:border() |
||
checkSelf(self, 'border') |
checkSelf(self, 'image:border') |
||
data.hasBorder = true |
data.hasBorder = true |
||
return self |
|||
end |
end |
||
function data:link(s) |
function data:link(s) |
||
checkSelf(self, 'link') |
checkSelf(self, 'image:link') |
||
checkType('link', 1, s, 'string') |
checkType('image:link', 1, s, 'string') |
||
data.theLink = s |
data.theLink = s |
||
return self |
|||
end |
end |
||
function data:alt(s) |
function data:alt(s) |
||
checkSelf(self, 'alt') |
checkSelf(self, 'image:alt') |
||
checkType('alt', 1, s, 'string') |
checkType('image:alt', 1, s, 'string') |
||
data.theAlt = s |
data.theAlt = s |
||
return self |
|||
end |
end |
||
function data:caption(s) |
function data:caption(s) |
||
checkSelf(self, 'caption') |
checkSelf(self, 'image:caption') |
||
checkType('caption', 1, s, 'string') |
checkType('image:caption', 1, s, 'string') |
||
data.theCaption = s |
data.theCaption = s |
||
return self |
|||
end |
end |
||
function data:render() |
function data:render() |
||
checkSelf(self, 'render') |
checkSelf(self, 'image:render') |
||
local ret = {} |
local ret = {} |
||