FANDOM


local Infobox = {}
 
------------------------------------
-- Libraries and Global functions --
------------------------------------
 
-- stands for High Frequency
local HF = require('Module:HF')
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
-- Generates lists
local L = require('Dev:List')
-- Language functions
local language = mw.language.new('en')
 
-- Pattern Constants
local stripLinkToTarget = '^%[*([^%[|]*)|?'
 
-- The page title of whatever page is calling the function
local pageTitle = mw.title.getCurrentTitle().text
 
------------------------------------------------
-- Local functions (used only in this Module) --
------------------------------------------------
-- Replaces {{IsUnnamed}}
local function nameCheck ( target )
	local nq = mw.smw.ask{ HF.Link(target:match(stripLinkToTarget)), '?Maintenance' }
	if type(nq) == 'table' 
	    and (nq[1]['Maintenance'] == 'Name' 
            or (
    	        type(nq[1]['Maintenance']) == 'table' 
                and table.concat(nq[1]['Maintenance']):match('Name')
            )
        )
    then
		return true
	else
		return nil
	end
end
----------------------------------------------------------
-- Public functions (called from a Template or article) --
----------------------------------------------------------
 
function Infobox.titleTools(frame)
	local args = getArgs(frame)
	local out = {}
	if mw.title.getCurrentTitle().isContentPage == true then
		table.insert( out, HF.Category('Tools') )
		if args['unnamed tool'] == 'Yes' then
			mw.smw.set{ ['Maintenance'] = 'Name' }
			table.insert( out, ("''%s''"):format( pageTitle:match("%s*[^(]*") ) )
		else
			table.insert( out, pageTitle:match("%s*[^(]*") )
		end
		mw.smw.set { ['Name'] = pageTitle:gsub(''',"'") }
		return table.concat( out ) .. ( args['ref'] or '' )
	elseif mw.title.getCurrentTitle().namespace == 10
		and not pageTitle:match('/testcases') then
			return nil
	else
		return args['english'] or pageTitle:match("[^(]*")
	end
end
 
function Infobox.toolsRelated(frame)
	local args = getArgs(frame)
	local out = {}
	local tools = args['related tools'] and mw.text.split( args['related tools'], ',%s*' )
	if type(tools) == 'table' then
		for _,tool in ipairs( tools ) do
			table.insert( out, HF.Link( tool, tool:match('%s*[^(]*')))
		end
		return table.concat(out, ', ')
	end
end
 
function Infobox.toolsUsers(frame)
	local args = getArgs(frame)
	local out = {}
	local types = {
		null = true, anime = true, manga = true,
		novel = true, game = true, movie = true, ['movie canon'] = true
	}
	local users = args['users'] and mw.text.split( args['users'], ',%s*' )
	if type(users) == 'table' then
		for _,user in ipairs( users ) do
			if type(user) == 'string' and #user > 1 then
				local base = nameCheck ( user )
					and ("''%s''"):format( HF.Link (
						user:match('[^~]*'),
						user:match('[^~]*'):match('%s*[^(]*')
					) )
					or HF.Link (
						user:match('[^~]*'),
						user:match('[^~]*'):match('%s*[^(]*')
					)
				local extra = user:match('~(.*)')
				local type = (extra and types[extra:lower()]) and language:ucfirst(extra)
				mw.smw.set { ['User tech'] = user:match('[^~]*') .. ';' .. (type or 'null')}
				if extra ~= nil and types[extra:lower()] and extra ~= 'null' then
					if extra:lower() == 'movie canon' then
						table.insert( out, base .. ' <sup> (Movie only)</sup>' )
					else
						table.insert( out, base .. (' <sup>(%s only)</sup>'):format( language:ucfirst(extra) ) )
					end
				else
					table.insert( out, base )
				end
			end
		end
		return L.makeList( 'bulleted' , out )
	end
end
 
 
---------------------------------------------------------
-- Exported functions (used in this and other Modules) --
---------------------------------------------------------
-- None.
-------------------------------------------------
-- Output (send it back to whatever called it) --
-------------------------------------------------
return Infobox
Community content is available under CC-BY-SA unless otherwise noted.