Module:File link: Difference between revisions

Content added Content deleted
Enwikipedia>Mr. Stradivarius
m (Undid revision 611451330 by Mr. Stradivarius (talk) whoops, that edit was supposed to be to the sandbox...)
(Created page with " -- This module provides a library for formatting file wikilinks. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local fileLink = {}...")
Line 1: Line 1:


-- This module provides a library for formatting file wikilinks.
-- 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 fileLink = {}
local fileLink = {}

function fileLink.new(filename)
function fileLink.new(filename)
checkType('fileLink.new', 1, filename, 'string', true)
checkType('fileLink.new', 1, filename, 'string', true)
local obj, data = {}, {}
local obj, data = {}, {}
local checkSelf = libraryUtil.makeCheckSelfFunction(
local checkSelf = libraryUtil.makeCheckSelfFunction(
'fileLink',
'fileLink',
Line 16: Line 18:
'fileLink object'
'fileLink object'
)
)
-- Set the filename if we were passed it as an input to fileLink.new.
-- 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
end
end
function data:name(s)
function data:name(s)
checkSelf(self, 'name')
checkSelf(self, 'name')
Line 28: Line 30:
return self
return self
end
end
function data:format(s, filename)
function data:format(s, filename)
checkSelf(self, 'format')
checkSelf(self, 'format')
Line 51: Line 53:
return self
return self
end
end

local function sizeError(methodName)
local function sizeError(methodName)
-- Used for formatting duplication errors in size-related methods.
-- Used for formatting duplication errors in size-related methods.
Line 60: Line 62:
), 3)
), 3)
end
end
function data:width(px)
function data:width(px)
checkSelf(self, 'width')
checkSelf(self, 'width')
Line 70: Line 72:
return self
return self
end
end
function data:height(px)
function data:height(px)
checkSelf(self, 'height')
checkSelf(self, 'height')
Line 80: Line 82:
return self
return self
end
end
function data:upright(isUpright, factor)
function data:upright(isUpright, factor)
checkSelf(self, 'upright')
checkSelf(self, 'upright')
Line 92: Line 94:
return self
return self
end
end
function data:resetSize()
function data:resetSize()
checkSelf(self, 'resetSize')
checkSelf(self, 'resetSize')
Line 100: Line 102:
return self
return self
end
end
function data:location(s)
function data:location(s)
checkSelf(self, 'location')
checkSelf(self, 'location')
Line 120: Line 122:
return self
return self
end
end
function data:alignment(s)
function data:alignment(s)
checkSelf(self, 'alignment')
checkSelf(self, 'alignment')
Line 144: Line 146:
return self
return self
end
end
function data:border(hasBorder)
function data:border(hasBorder)
checkSelf(self, 'border')
checkSelf(self, 'border')
Line 151: Line 153:
return self
return self
end
end
function data:link(s)
function data:link(s)
checkSelf(self, 'link')
checkSelf(self, 'link')
Line 158: Line 160:
return self
return self
end
end
function data:alt(s)
function data:alt(s)
checkSelf(self, 'alt')
checkSelf(self, 'alt')
Line 165: Line 167:
return self
return self
end
end
function data:page(num)
function data:page(num)
checkSelf(self, 'page')
checkSelf(self, 'page')
Line 172: Line 174:
return self
return self
end
end
function data:class(s)
function data:class(s)
checkSelf(self, 'class')
checkSelf(self, 'class')
Line 179: Line 181:
return self
return self
end
end
function data:lang(s)
function data:lang(s)
checkSelf(self, 'lang')
checkSelf(self, 'lang')
Line 186: Line 188:
return self
return self
end
end

local function checkTypeStringOrNum(funcName, pos, arg)
local function checkTypeStringOrNum(funcName, pos, arg)
local argType = type(arg)
local argType = type(arg)
Line 198: Line 200:
end
end
end
end
function data:startTime(time)
function data:startTime(time)
checkSelf(self, 'startTime')
checkSelf(self, 'startTime')
Line 205: Line 207:
return self
return self
end
end
function data:endTime(time)
function data:endTime(time)
checkSelf(self, 'endTime')
checkSelf(self, 'endTime')
Line 212: Line 214:
return self
return self
end
end
function data:thumbTime(time)
function data:thumbTime(time)
checkSelf(self, 'thumbTime')
checkSelf(self, 'thumbTime')
Line 219: Line 221:
return self
return self
end
end
function data:caption(s)
function data:caption(s)
checkSelf(self, 'caption')
checkSelf(self, 'caption')
Line 226: Line 228:
return self
return self
end
end
function data:render()
function data:render()
checkSelf(self, 'render')
checkSelf(self, 'render')
local ret = {}
local ret = {}
-- Filename
-- Filename
if not data.theName then
if not data.theName then
Line 236: Line 238:
end
end
ret[#ret + 1] = 'File:' .. data.theName
ret[#ret + 1] = 'File:' .. data.theName
-- Format
-- Format
if data.theFormat and data.theFormatFilename then
if data.theFormat and data.theFormatFilename then
Line 243: Line 245:
ret[#ret + 1] = data.theFormat
ret[#ret + 1] = data.theFormat
end
end
-- Border
-- Border
if data.hasBorder then
if data.hasBorder then
ret[#ret + 1] = 'border'
ret[#ret + 1] = 'border'
end
end
-- Location
-- Location
ret[#ret + 1] = data.theLocation
ret[#ret + 1] = data.theLocation

-- Alignment
-- Alignment
ret[#ret + 1] = data.theAlignment
ret[#ret + 1] = data.theAlignment
-- Size
-- Size
if data.isUpright and data.uprightFactor then
if data.isUpright and data.uprightFactor then
Line 267: Line 269:
ret[#ret + 1] = string.format('x%dpx', data.theHeight)
ret[#ret + 1] = string.format('x%dpx', data.theHeight)
end
end
-- Render named parameters.
-- Render named parameters.
-- That includes link, alt, page, class, lang, start, end, and thumbtime.
-- That includes link, alt, page, class, lang, start, end, and thumbtime.
Line 289: Line 291:
end
end
end
end

-- Caption
-- Caption
ret[#ret + 1] = data.theCaption
ret[#ret + 1] = data.theCaption
return string.format('[[%s]]', table.concat(ret, '|'))
return string.format('[[%s]]', table.concat(ret, '|'))
end
end
local privateFields = {
local privateFields = {
theName = true,
theName = true,
Line 314: Line 316:
theCaption = true
theCaption = true
}
}
local readOnlyFields = {}
local readOnlyFields = {}
for field in pairs(data) do
for field in pairs(data) do
Line 320: Line 322:
end
end
readOnlyFields.theName = nil -- This is set if a filename is given to fileLink.new, so remove it.
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(
Line 328: Line 330:
), 3)
), 3)
end
end
setmetatable(obj, {
setmetatable(obj, {
__index = function (t, key)
__index = function (t, key)
Line 359: Line 361:
end
end
})
})
return obj
return obj
end
end

return fileLink
return fileLink