Module:File link: Difference between revisions
rename the image table to a fileLink table, seeing as this code is applicable to all file links
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 |