Anonymous
×
Create a new article
Write your page title here:
We currently have 15 articles on TwistedFates Database. Type your article name above or click on one of the titles below and start writing!



    TwistedFates Database
    15Articles

    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