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 checkType = libraryUtil.checkType


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('image', 'image', obj, 'image object')
local checkSelf = libraryUtil.makeCheckSelfFunction(
'image',
local checkType = libraryUtil.checkType
'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('invalid format')
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 = {}