Module:File link: Difference between revisions

140 bytes removed ,  10 years ago
fix read-only behaviour and remove the test function
(add type checks and write the render function; read-only code not working yet)
(fix read-only behaviour and remove the test function)
Line 14: Line 14:
checkSelf(self, 'name')
checkSelf(self, 'name')
checkType('name', 1, s, 'string')
checkType('name', 1, s, 'string')
self.theName = s
data.theName = s
end
end
Line 29: Line 29:
}
}
if validFormats[s] then
if validFormats[s] then
self.theFormat = s
data.theFormat = s
self.theFormatFilename = filename
data.theFormatFilename = filename
else
else
error('invalid format')
error('invalid format')
Line 39: Line 39:
checkSelf(self, 'width')
checkSelf(self, 'width')
checkType('width', 1, px, 'number')
checkType('width', 1, px, 'number')
self.theWidth = px
data.theWidth = px
end
end
Line 45: Line 45:
checkSelf(self, 'height')
checkSelf(self, 'height')
checkType('height', 1, px, 'number')
checkType('height', 1, px, 'number')
self.theHeight = px
data.theHeight = px
end
end
Line 51: Line 51:
checkSelf(self, 'upright')
checkSelf(self, 'upright')
checkType('upright', 1, factor, 'number', true)
checkType('upright', 1, factor, 'number', true)
self.isUpright = true
data.isUpright = true
self.uprightFactor = factor
data.uprightFactor = factor
end
end
Line 58: Line 58:
checkSelf(self, 'resetSize')
checkSelf(self, 'resetSize')
for i, field in ipairs{'theWidth', 'theHeight', 'isUpright', 'uprightFactor'} do
for i, field in ipairs{'theWidth', 'theHeight', 'isUpright', 'uprightFactor'} do
self[field] = nil
data[field] = nil
end
end
end
end
Line 72: Line 72:
}
}
if validLocations[s] then
if validLocations[s] then
self.theLocation = s
data.theLocation = s
else
else
error(string.format(
error(string.format(
"bad argument #1 to 'image:location' ('%s' is not a valid location)",
"bad argument #1 to 'location' ('%s' is not a valid location)",
s
s
))
))
Line 95: Line 95:
}
}
if validAlignments[s] then
if validAlignments[s] then
self.theAlignment = s
data.theAlignment = s
else
else
error(string.format(
error(string.format(
"bad argument #1 to 'image:alignment' ('%s' is not a valid alignment)"
"bad argument #1 to 'alignment' ('%s' is not a valid alignment)"
))
))
end
end
Line 105: Line 105:
function data:border()
function data:border()
checkSelf(self, 'border')
checkSelf(self, 'border')
self.hasBorder = true
data.hasBorder = true
end
end
Line 111: Line 111:
checkSelf(self, 'link')
checkSelf(self, 'link')
checkType('link', 1, s, 'string')
checkType('link', 1, s, 'string')
self.theLink = s
data.theLink = s
end
end
Line 117: Line 117:
checkSelf(self, 'alt')
checkSelf(self, 'alt')
checkType('alt', 1, s, 'string')
checkType('alt', 1, s, 'string')
self.theAlt = s
data.theAlt = s
end
end
Line 123: Line 123:
checkSelf(self, 'caption')
checkSelf(self, 'caption')
checkType('caption', 1, s, 'string')
checkType('caption', 1, s, 'string')
self.theCaption = s
data.theCaption = s
end
end
function data:render()
function data:render()
checkSelf(self, 'render')
checkSelf(self, 'render')
local ret = {}
local ret = {}
-- Image name.
-- Image name.
if not self.theName then
if not data.theName then
error('image:render: no image name was found')
error('image:render: no image name was found')
end
end
ret[#ret + 1] = 'File:' .. self.theName
ret[#ret + 1] = 'File:' .. data.theName
-- Image format
-- Image format
if self.theFormat and self.theFormatFilename then
if data.theFormat and data.theFormatFilename then
ret[#ret + 1] = self.theFormat .. '=' .. self.theFormatFilename
ret[#ret + 1] = data.theFormat .. '=' .. data.theFormatFilename
elseif self.theFormat then
elseif data.theFormat then
ret[#ret + 1] = self.theFormat
ret[#ret + 1] = data.theFormat
end
end
-- Border
-- Border
if self.hasBorder then
if data.hasBorder then
ret[#ret + 1] = 'border'
ret[#ret + 1] = 'border'
end
end
-- Location
-- Location
ret[#ret + 1] = self.theLocation
ret[#ret + 1] = data.theLocation


-- Alignment
-- Alignment
ret[#ret + 1] = self.theAlignment
ret[#ret + 1] = data.theAlignment
-- Size
-- Size
if self.isUpright and (self.theWidth or self.theHeight) then
if data.isUpright and (data.theWidth or data.theHeight) then
error("duplicate size value detected in 'render' (height/width cannot be used at the same time as 'upright')")
error("duplicate size value detected in 'render' (height/width cannot be used at the same time as 'upright')")
elseif self.isUpright and self.uprightFactor then
elseif data.isUpright and data.uprightFactor then
ret[#ret + 1] = 'upright=' .. tostring(self.uprightFactor)
ret[#ret + 1] = 'upright=' .. tostring(data.uprightFactor)
elseif self.isUpright then
elseif data.isUpright then
ret[#ret + 1] = 'upright'
ret[#ret + 1] = 'upright'
elseif self.theWidth and self.theHeight then
elseif data.theWidth and data.theHeight then
ret[#ret + 1] = string.format('%dx%dpx', self.theWidth, self.theHeight)
ret[#ret + 1] = string.format('%dx%dpx', data.theWidth, data.theHeight)
elseif self.theWidth then
elseif data.theWidth then
ret[#ret + 1] = tostring(self.theWidth) .. 'px'
ret[#ret + 1] = tostring(data.theWidth) .. 'px'
elseif self.theHeight then
elseif data.theHeight then
ret[#ret + 1] = string.format('x%dpx', self.theHeight)
ret[#ret + 1] = string.format('x%dpx', data.theHeight)
end
end
-- Link
-- Link
if self.theLink then
if data.theLink then
ret[#ret + 1] = 'link=' .. self.theLink
ret[#ret + 1] = 'link=' .. data.theLink
end
end
-- Alt
-- Alt
if self.theAlt then
if data.theAlt then
ret[#ret + 1] = 'alt=' .. self.theAlt
ret[#ret + 1] = 'alt=' .. data.theAlt
end
end
-- Caption
-- Caption
ret[#ret + 1] = self.theCaption
ret[#ret + 1] = data.theCaption
return string.format('[[%s]]', table.concat(ret, '|'))
return string.format('[[%s]]', table.concat(ret, '|'))
Line 225: Line 224:
end
end


-- return image
return image
 
local p = {}
 
function p.test()
local myImage = image.new()
myImage:name('Foo')
return myImage:render()
end
 
return p