Module:File link: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
m (Mr. Stradivarius moved page Module:Image to Module:File link without leaving a redirect: this is applicable to all file links, not just images) |
(rename the image table to a fileLink table, seeing as this code is applicable to all file links) |
||
Line 1: | Line 1: | ||
-- This module provides a library for formatting |
-- This module provides a library for formatting file wikilinks. |
||
local libraryUtil = require('libraryUtil') |
local libraryUtil = require('libraryUtil') |
||
local checkType = libraryUtil.checkType |
local checkType = libraryUtil.checkType |
||
local |
local fileLink = {} |
||
function |
function fileLink.new(filename) |
||
checkType(' |
checkType('fileLink.new', 1, filename, 'string', true) |
||
local obj, data = {}, {} |
local obj, data = {}, {} |
||
local checkSelf = libraryUtil.makeCheckSelfFunction( |
local checkSelf = libraryUtil.makeCheckSelfFunction( |
||
' |
'fileLink', |
||
' |
'fileLink', |
||
obj, |
obj, |
||
' |
'fileLink object' |
||
) |
) |
||
-- Set the filename if we were passed it as an input to |
-- Set the filename if we were passed it as an input to fileLink.new. |
||
if filename then |
if filename then |
||
data.theName = filename |
data.theName = filename |
||
Line 23: | Line 23: | ||
function data:name(s) |
function data:name(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:name') |
||
checkType(' |
checkType('fileLink:name', 1, s, 'string') |
||
data.theName = s |
data.theName = s |
||
return self |
return self |
||
Line 30: | Line 30: | ||
function data:format(s, filename) |
function data:format(s, filename) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:format') |
||
checkType(' |
checkType('fileLink:format', 1, s, 'string', true) |
||
checkType(' |
checkType('fileLink:format', 2, format, 'string', true) |
||
local validFormats = { |
local validFormats = { |
||
thumb = true, |
thumb = true, |
||
Line 45: | Line 45: | ||
else |
else |
||
error(string.format( |
error(string.format( |
||
"bad argument #1 to ' |
"bad argument #1 to 'fileLink:format' ('%s' is not a valid format)", |
||
s |
s |
||
), 2) |
), 2) |
||
Line 62: | Line 62: | ||
function data:width(px) |
function data:width(px) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:width') |
||
checkType(' |
checkType('fileLink:width', 1, px, 'number', true) |
||
if px and data.isUpright then |
if px and data.isUpright then |
||
sizeError(' |
sizeError('fileLink:width') |
||
end |
end |
||
data.theWidth = px |
data.theWidth = px |
||
Line 72: | Line 72: | ||
function data:height(px) |
function data:height(px) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:height') |
||
checkType(' |
checkType('fileLink:height', 1, px, 'number', true) |
||
if px and data.isUpright then |
if px and data.isUpright then |
||
sizeError(' |
sizeError('fileLink:height') |
||
end |
end |
||
data.theHeight = px |
data.theHeight = px |
||
Line 82: | Line 82: | ||
function data:upright(isUpright, factor) |
function data:upright(isUpright, factor) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:upright') |
||
checkType(' |
checkType('fileLink:upright', 1, isUpright, 'boolean', true) |
||
checkType(' |
checkType('fileLink:upright', 2, factor, 'number', true) |
||
if isUpright and (data.theWidth or data.theHeight) then |
if isUpright and (data.theWidth or data.theHeight) then |
||
sizeError(' |
sizeError('fileLink:upright') |
||
end |
end |
||
data.isUpright = isUpright |
data.isUpright = isUpright |
||
Line 94: | Line 94: | ||
function data:resetSize() |
function data:resetSize() |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink: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 |
||
Line 102: | Line 102: | ||
function data:location(s) |
function data:location(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:location') |
||
checkType(' |
checkType('fileLink:location', 1, s, 'string', true) |
||
local validLocations = { |
local validLocations = { |
||
right = true, |
right = true, |
||
Line 114: | Line 114: | ||
else |
else |
||
error(string.format( |
error(string.format( |
||
"bad argument #1 to ' |
"bad argument #1 to 'fileLink:location' ('%s' is not a valid location)", |
||
s |
s |
||
), 2) |
), 2) |
||
Line 122: | Line 122: | ||
function data:alignment(s) |
function data:alignment(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:alignment') |
||
checkType(' |
checkType('fileLink:alignment', 1, s, 'string', true) |
||
local validAlignments = { |
local validAlignments = { |
||
baseline = true, |
baseline = true, |
||
Line 138: | Line 138: | ||
else |
else |
||
error(string.format( |
error(string.format( |
||
"bad argument #1 to ' |
"bad argument #1 to 'fileLink:alignment' ('%s' is not a valid alignment)", |
||
s |
s |
||
), 2) |
), 2) |
||
Line 146: | Line 146: | ||
function data:border(hasBorder) |
function data:border(hasBorder) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:border') |
||
checkType(' |
checkType('fileLink:border', 1, hasBorder, 'boolean', true) |
||
data.hasBorder = hasBorder |
data.hasBorder = hasBorder |
||
return self |
return self |
||
Line 153: | Line 153: | ||
function data:link(s) |
function data:link(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:link') |
||
checkType(' |
checkType('fileLink:link', 1, s, 'string', true) |
||
data.theLink = s |
data.theLink = s |
||
return self |
return self |
||
Line 160: | Line 160: | ||
function data:alt(s) |
function data:alt(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:alt') |
||
checkType(' |
checkType('fileLink:alt', 1, s, 'string', true) |
||
data.theAlt = s |
data.theAlt = s |
||
return self |
return self |
||
Line 167: | Line 167: | ||
function data:page(num) |
function data:page(num) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:page') |
||
checkType(' |
checkType('fileLink:page', 1, num, 'number', true) |
||
data.thePage = s |
data.thePage = s |
||
return self |
return self |
||
Line 174: | Line 174: | ||
function data:class(s) |
function data:class(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:class') |
||
checkType(' |
checkType('fileLink:class', 1, s, 'string', true) |
||
data.theClass = s |
data.theClass = s |
||
return self |
return self |
||
Line 181: | Line 181: | ||
function data:lang(s) |
function data:lang(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:lang') |
||
checkType(' |
checkType('fileLink:lang', 1, s, 'string', true) |
||
data.theLang = s |
data.theLang = s |
||
return self |
return self |
||
Line 188: | Line 188: | ||
function data:caption(s) |
function data:caption(s) |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:caption') |
||
checkType(' |
checkType('fileLink:caption', 1, s, 'string', true) |
||
data.theCaption = s |
data.theCaption = s |
||
return self |
return self |
||
Line 195: | Line 195: | ||
function data:render() |
function data:render() |
||
checkSelf(self, ' |
checkSelf(self, 'fileLink:render') |
||
local ret = {} |
local ret = {} |
||
-- |
-- Filename |
||
if not data.theName then |
if not data.theName then |
||
error(' |
error('fileLink:render: no filename was found') |
||
end |
end |
||
ret[#ret + 1] = 'File:' .. data.theName |
ret[#ret + 1] = 'File:' .. data.theName |
||
-- |
-- Format |
||
if data.theFormat and data.theFormatFilename then |
if data.theFormat and data.theFormatFilename then |
||
ret[#ret + 1] = data.theFormat .. '=' .. data.theFormatFilename |
ret[#ret + 1] = data.theFormat .. '=' .. data.theFormatFilename |
||
Line 277: | Line 277: | ||
readOnlyFields[field] = true |
readOnlyFields[field] = true |
||
end |
end |
||
readOnlyFields.theName = nil -- This is set if a filename is given to |
readOnlyFields.theName = nil -- This is set if a filename is given to fileLink.new, so remove it. |
||
local function restrictedFieldError(key, restriction) |
local function restrictedFieldError(key, restriction) |
||
error(string.format( |
error(string.format( |
||
" |
"fileLink object field '%s' is %s", |
||
tostring(key), |
tostring(key), |
||
restriction |
restriction |
||
Line 321: | Line 321: | ||
end |
end |
||
return |
return fileLink |