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