Module:File link: Difference between revisions
Content added Content deleted
Enwikipedia>Mr. Stradivarius (move duplicate size error checks to the setting functions, fix the alignment error message) |
Enwikipedia>Mr. Stradivarius (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 = {} |
||