Difference between revisions of "Module:File link"
From Timelines
(enable call-chaining and tweak the error messages to use "image:method" rather than just "method") |
m (1 revision imported: image crop) |
||
(17 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | -- This module provides a library for formatting | + | -- This module provides a library for formatting file wikilinks. |
− | local | + | local yesno = require('Module:Yesno') |
− | local checkType = libraryUtil.checkType | + | local checkType = require('libraryUtil').checkType |
− | local | + | local p = {} |
− | function | + | function p._main(args) |
− | checkType(' | + | checkType('_main', 1, args, 'table') |
− | + | ||
− | + | -- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our | |
− | + | -- own function to get the right error level. | |
− | + | local function checkArg(key, val, level) | |
− | + | if type(val) ~= 'string' then | |
− | |||
− | |||
− | |||
− | |||
− | -- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
error(string.format( | error(string.format( | ||
− | " | + | "type error in '%s' parameter of '_main' (expected string, got %s)", |
− | + | key, type(val) | |
− | ), | + | ), level) |
end | end | ||
− | |||
end | end | ||
− | local | + | local ret = {} |
− | + | ||
− | + | -- Adds a positional parameter to the buffer. | |
− | + | local function addPositional(key) | |
− | + | local val = args[key] | |
− | + | if not val then | |
− | + | return nil | |
− | |||
− | |||
− | function | ||
− | |||
− | |||
− | if | ||
− | |||
end | end | ||
− | + | checkArg(key, val, 4) | |
− | + | ret[#ret + 1] = val | |
end | end | ||
− | + | ||
− | function | + | -- Adds a named parameter to the buffer. We assume that the parameter name |
− | + | -- is the same as the argument key. | |
− | + | local function addNamed(key) | |
− | if | + | local val = args[key] |
− | + | if not val then | |
+ | return nil | ||
end | end | ||
− | + | checkArg(key, val, 4) | |
− | + | ret[#ret + 1] = key .. '=' .. val | |
end | end | ||
− | + | ||
− | + | -- Filename | |
− | + | checkArg('file', args.file, 3) | |
− | + | ret[#ret + 1] = 'File:' .. args.file | |
− | + | ||
− | + | -- Format | |
− | + | if args.format then | |
− | + | checkArg('format', args.format) | |
− | + | if args.formatfile then | |
− | + | checkArg('formatfile', args.formatfile) | |
− | + | ret[#ret + 1] = args.format .. '=' .. args.formatfile | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
− | + | ret[#ret + 1] = args.format | |
− | |||
− | |||
− | |||
end | end | ||
− | |||
end | end | ||
− | + | ||
− | + | -- Border | |
− | + | if yesno(args.border) then | |
− | + | ret[#ret + 1] = 'border' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | ||
− | + | addPositional('location') | |
− | + | addPositional('alignment') | |
− | + | addPositional('size') | |
− | + | addNamed('upright') | |
− | + | addNamed('link') | |
− | + | addNamed('alt') | |
− | + | addNamed('page') | |
− | + | addNamed('class') | |
− | + | addNamed('lang') | |
− | + | addNamed('start') | |
− | + | addNamed('end') | |
− | end | + | addNamed('thumbtime') |
− | + | addPositional('caption') | |
− | + | ||
− | + | return string.format('[[%s]]', table.concat(ret, '|')) | |
− | + | end | |
− | + | ||
− | + | function p.main(frame) | |
+ | local origArgs = require('Module:Arguments').getArgs(frame, { | ||
+ | wrappers = 'Template:File link' | ||
+ | }) | ||
+ | if not origArgs.file then | ||
+ | error("'file' parameter missing from [[Template:File link]]", 0) | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | -- Copy the arguments that were passed to a new table to avoid looking up | |
− | + | -- every possible parameter in the frame object. | |
− | + | local args = {} | |
− | + | for k, v in pairs(origArgs) do | |
− | + | -- Make _BLANK a special argument to add a blank parameter. For use in | |
− | + | -- conditional templates etc. it is useful for blank arguments to be | |
− | + | -- ignored, but we still need a way to specify them so that we can do | |
− | + | -- things like [[File:Example.png|link=]]. | |
− | + | if v == '_BLANK' then | |
− | + | v = '' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | args[k] = v | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | return p._main(args) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | return | + | return p |
Latest revision as of 10:39, 12 September 2020
Documentation for this module may be created at Module:File link/doc
-- This module provides a library for formatting file wikilinks. local yesno = require('Module:Yesno') local checkType = require('libraryUtil').checkType local p = {} function p._main(args) checkType('_main', 1, args, 'table') -- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our -- own function to get the right error level. local function checkArg(key, val, level) if type(val) ~= 'string' then error(string.format( "type error in '%s' parameter of '_main' (expected string, got %s)", key, type(val) ), level) end end local ret = {} -- Adds a positional parameter to the buffer. local function addPositional(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = val end -- Adds a named parameter to the buffer. We assume that the parameter name -- is the same as the argument key. local function addNamed(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = key .. '=' .. val end -- Filename checkArg('file', args.file, 3) ret[#ret + 1] = 'File:' .. args.file -- Format if args.format then checkArg('format', args.format) if args.formatfile then checkArg('formatfile', args.formatfile) ret[#ret + 1] = args.format .. '=' .. args.formatfile else ret[#ret + 1] = args.format end end -- Border if yesno(args.border) then ret[#ret + 1] = 'border' end addPositional('location') addPositional('alignment') addPositional('size') addNamed('upright') addNamed('link') addNamed('alt') addNamed('page') addNamed('class') addNamed('lang') addNamed('start') addNamed('end') addNamed('thumbtime') addPositional('caption') return string.format('[[%s]]', table.concat(ret, '|')) end function p.main(frame) local origArgs = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:File link' }) if not origArgs.file then error("'file' parameter missing from [[Template:File link]]", 0) end -- Copy the arguments that were passed to a new table to avoid looking up -- every possible parameter in the frame object. local args = {} for k, v in pairs(origArgs) do -- Make _BLANK a special argument to add a blank parameter. For use in -- conditional templates etc. it is useful for blank arguments to be -- ignored, but we still need a way to specify them so that we can do -- things like [[File:Example.png|link=]]. if v == '_BLANK' then v = '' end args[k] = v end return p._main(args) end return p