×
Create a new article
Write your page title here:
We currently have 230 articles on Farthest Frontier. Type your article name above or create one of the articles listed here!



    Farthest Frontier

    Module:Template link general

    Implements {{Template link general}} and other templates in its family

    Basic usage

    {{#invoke:template link general|main}}

    This module is used by {{template link general}} and related templates to display links to templates. It is similar to {{tl}} but with additional formatting options and the ability to include parameters in the display. See Template:Slink for the full list, which can be enabled by passing any value to them (such as "on", "yes", etc).


    -- This implements Template:Tlg
    local getArgs = require('Module:Arguments').getArgs
    local p = {}
    
    -- Is a string non-empty?
    local function _ne(s) 
    	return s ~= nil and s ~= ""
    end
    
    local nw = mw.text.nowiki
    
    local function addTemplate(s)
    	local i, _ = s:find(':', 1, true)
    	if i == nil then
    		return 'Template:' .. s
    	end
    	local ns = s:sub(1, i - 1)
    	if ns == '' or mw.site.namespaces[ns] then
    		return s
    	else
    		return 'Template:' .. s
    	end
    end
    
    local function trimTemplate(s)
    	local needle = 'template:'
    	if s:sub(1, needle:len()):lower() == needle then
    		return s:sub(needle:len() + 1)	
    	else
    		return s
    	end
    end
    
    local function linkTitle(args)
    	if _ne(args.nolink) then
    		return args['1']
    	end
    	
    	local titleObj
    	local titlePart = '[['
    	if args['1'] then
    		-- This handles :Page and other NS
    		titleObj = mw.title.new(args['1'], 'Template')
    	else
    		titleObj = mw.title.getCurrentTitle()
    	end
    	
    	titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or
    				addTemplate(args['1']))
    	
    	local textPart = args.alttext
    	if not _ne(textPart) then
    		if titleObj ~= nil then
    			textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
    		else
    			-- redlink
    			textPart = args['1']
    		end
    	end
    	
    	if _ne(args.subst) then
    		-- HACK: the ns thing above is probably broken
    		textPart = 'subst:' .. textPart
    	end
    	
    	if _ne(args.brace) then
    		textPart = nw('{{') .. textPart .. nw('}}')
    	elseif _ne(args.braceinside) then
    		textPart = nw('{') .. textPart .. nw('}')
    	end
    	
    	titlePart = titlePart .. '|' .. textPart .. ']]'
    	if _ne(args.braceinside) then
    		titlePart = nw('{') .. titlePart .. nw('}')
    	end
    	return titlePart
    end
    
    function p.main(frame)
    	local args = getArgs(frame, {
    		trim = true,
    		removeBlanks = false
    	})
    	return p._main(args)
    end
    
    function p._main(args)
    	local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
    	local italic = _ne(args.italic) or _ne(args.italics)
    	local dontBrace = _ne(args.brace) or _ne(args.braceinside)
    	local code = _ne(args.code) or _ne(args.tt)
    	local show_result = _ne(args._show_result)
    	local expand = _ne(args._expand)
    	
    	-- Build the link part
    	local titlePart = linkTitle(args)
    	if bold then titlePart = "'''" .. titlePart .. "'''" end
    	if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end
    	
    	-- Build the arguments
    	local textPart = ""
    	local textPartBuffer = "&#124;"
    	local codeArguments = {}
    	local codeArgumentsString = ""
    	local i = 2
    	local j = 1
    	while args[i] do
    		local val = args[i]
    		if val ~= "" then
    			if _ne(args.nowiki) then
    				-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
    				-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
    				val = nw(mw.text.unstripNoWiki(val))
    			end
    			local k, v = string.match(val, "(.*)=(.*)")
    			if not k then
    				codeArguments[j] = val
    				j = j + 1
    			else
    				codeArguments[k] = v
    			end
    			codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
    			if italic then
    				val = '<span style="font-style:italic;">' .. val .. '</span>'
    			end
    			textPart = textPart .. textPartBuffer .. val
    		end
    		i = i + 1
    	end
    
    	-- final wrap
    	local ret = titlePart .. textPart
    	if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
    	if _ne(args.a) then ret = nw('*') .. '&nbsp;' .. ret end
    	if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
    	if code then
    		ret = '<code>' .. ret .. '</code>'
    	elseif _ne(args.plaincode) then
    		ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>'
    	end
    	if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
    	
    	--[[ Wrap as html?? 
    	local span = mw.html.create('span')
    	span:wikitext(ret)
    	--]]
    	if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
    
    	if show_result then
    		local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
    		ret = ret .. " → " .. result
    	end
    
    	if expand then
    		local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
    		local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
    		mw.log()
    		ret = ret .. " [" .. tostring(url) .. "]"
    	end
    
    	return ret
    end
    
    return p
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.