Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
The main server is currently down. We are running on a backup server, so editing and search functionality are temporarily disabled. Please check back in a few hours.
Revision as of 11:05, 14 October 2021 by HydeWing (talk | contribs) (Created page with "local p = {} local function empty(param) return not param or param == '' end local function formatUser( user ) return '[[User:' .. user .. (user:find('|') and '' or ('|'...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Infobox DS Homebrews/doc

local p = {}
 
local function empty(param)
	return not param or param == ''	
end

local function formatUser( user )
	return '[[User:' .. user .. (user:find('|') and '' or ('|' .. user)) .. ']]'
end
 
local function userList( list )
	if empty(list) then return end
 
	if not list:find(',') then
		return formatUser(list)	
	end
 
	local ret = {}
	for user in mw.text.gsplit( list, '%s*,%s*' ) do
		ret[#ret+1] = formatUser(user)	
	end
	return table.concat( ret, ', ' )
end
 
local function getType( type )
	if empty( type ) then return end
 
	local types = {
		-- Applications
		['media player']       = '[[List of DS homebrew applications#Media players|Media player]] [[Category:DS Homebrew media players]]',
		['utility']            = '[[List of DS homebrew applications#Utilities|Utility]] [[Category:DS Homebrew utilities]]',
		['operating system']   = '[[List of DS homebrew applications#Operating systems|Operating system]] [[Category:DS Homebrew operating systems]]',
		['math']               = '[[List of DS homebrew applications#Math|Math application]] [[Category:DS Homebrew math applications]]',
		['other']              = '[[List of DS homebrew applications#Other applications|Other application]] [[Category:DS Homebrew other applications]]',
		-- Games
		['arcade game']        = '[[List of DS homebrew games#Arcade|Arcade game]] [[Category:DS Homebrew arcade games]]',
		['board game']         = '[[List of DS homebrew games#Board|Board game]] [[Category:DS Homebrew board games]]',
		['card game']          = '[[List of DS homebrew games#Card|Card game]] [[Category:DS Homebrew card games]]',
		['game engine']        = '[[List of DS homebrew games#Game engine|Game engine]] [[Category:DS Homebrew game engines]]',
		['music game']         = '[[List of DS homebrew games#Music|Music game]] [[Category:DS Homebrew music games]]',
		['platform game']      = '[[List of DS homebrew games#Platform|Platform game]] [[Category:DS Homebrew platform games]]',
		['puzzle game']        = '[[List of DS homebrew games#Puzzle|Puzzle game]] [[Category:DS Homebrew puzzle games]]',
		['racing game']        = '[[List of DS homebrew games#Racing|Racing game]] [[Category:DS Homebrew racing games]]',
		['role playing game']  = '[[List of DS homebrew games#Role playing|Role playing game]] [[Category:DS Homebrew role playing games]]',
		['shooting game']      = '[[List of DS homebrew games#Shooter|Shooting game]] [[Category:DS Homebrew shooting games]]',
		['simulation game']    = '[[List of DS homebrew games#Simulation|Simulation game]] [[Category:DS Homebrew simulation games]]',
		['trivia game']        = '[[List of DS homebrew games#Trivia|Trivia game]] [[Category:DS Homebrew trivia games]]',
		['other game']         = '[[List of DS homebrew games#Other games|Other game]] [[Category:DS Homebrew other games]]',
		-- Emulators
		['console emulator']   = '[[List of DS homebrew emulators#Console|Console emulator]] [[Category:DS Homebrew console emulators]]',
		['handheld emulator']  = '[[List of DS homebrew emulators#Handheld|Handheld emulator]] [[Category:DS Homebrew portable emulators]]',
		['arcade emulator']    = '[[List of DS homebrew emulators#Arcade|Arcade emulator]] [[Category:DS Homebrew arcade emulators]]',
		['computer emulator']  = '[[List of DS homebrew emulators#Computer|Computer emulator]] [[Category:DS Homebrew computer emulators]]',
		-- Loaders
		['loader']             = '[[List of DS homebrew loaders|Loader]] [[Category:DS Homebrew loaders]]',
		-- Exploits
		['exploit']            = '[[List of DS homebrew exploits|Exploit]] [[Category:DS Homebrew exploits]]',
		-- System Tools
		['system tool']        = '[[List of DS system tools|System tool]] [[Category:DS homebrew system tools]]',
		-- PC Utilities
		['pc utility']         = '[[List of DS PC utilities|PC utility]] [[Category:DS PC utilities]]',
		-- Demos
		['demo']               = '[[List of DS homebrew demos|Demo]] [[Category:DS homebrew demos]]',
	}
 
	return types[type] or type .. '[[Category:Infobox homebrew using invalid type parameter]]'
end
 
local function getLicense( license )
	if empty( license ) then return end
 
	local licenses = {
		['Apache']       = '[https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0]',
		['GNU GPL']      = '[https://www.gnu.org/licenses/gpl.html GNU GPL]',
		['GNU LGPL']     = '[https://www.gnu.org/licenses/lgpl.html GNU LGPL]',
		['BSD 2-Clause'] = '[http://opensource.org/licenses/BSD-2-Clause BSD 2-Clause]',
		['BSD 3-Clause'] = '[http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause]',
		['Mixed'] 		 = 'Mixed',
		['MIT']          = '[http://opensource.org/licenses/mit-license.html MIT License]',
	}
 
	return licenses[license] or license
end
 
local function getFormats( a )
	local formats = { '3dsx', '3ds', 'cia', 'bin', 'dat', 'cxi' }
	local ret = {}
 
	for i=1,#formats do
		local f = formats[i]
		local tmp = a[f]
		if not empty(tmp) then
			local label = f == 'bin' and 'bin/elf' or f
			if tmp == 'yes' then
				ret[#ret+1] = label .. ' <span style="color:#00B000">✔</span>'
			elseif tmp == 'no' then
				ret[#ret+1] = label .. ' <span style="color:red">✘</span>'
			else
				ret[#ret+1] = label .. ' <span style="color:orange">?</span>'
			end
		end
	end
 
	if next(ret) == nil then return end -- We got nothing...
	return table.concat(ret, '<br />')
end
 
local function getLink( label, link, altlink )
	if empty( link ) then return altlink end
 
	if link:find( '://' ) then
		return '[' .. link .. ' ' .. label .. ']'	
	end
 
	return '[[' .. link .. '|' .. label .. ']]'
end
 
local function getSource( source )
	if empty( source ) then return end
	if source == 'included' then return 'Source included[[Category:Open source homebrew]]' end
 
	return getLink( 'Source', source ) .. '[[Category:Open source homebrew]]'
end
 
local function getDownloadMii( dm, dmversion, version )
	if not dm or dm ~= 'yes' then return end
 
	if empty(dmversion) or dmversion == version then
		return 'Downloadable via [[DownloadMii]] [[Category:3DS Homebrew in DownloadMii]]'
	else
		return "Version '''" .. dmversion .. "''' downloadable via [[DownloadMii]] [[Category:3DS Homebrew in DownloadMii]]"
	end
end
 
function p.main( frame )
	local a = frame:getParent().args
	local infobox = require( 'Module:Infobox' )
 
	if not empty( a.title ) then
		frame:callParserFunction( 'DISPLAYTITLE', a.title )	
	end
 
	local ibData = {
		title    = a.title,
		image    = a.image,
		imagesize    = a.imagesize or '48px',
		imagecaption = a.imagecaption,
		header1  = 'General',
		label2   = 'Author',
		data2    = userList( a.author ),
		label3   = 'Last Updated',
		data3    = a.lastupdated,
		label4   = 'Contributor',
		data4    = userList( a.contributor ),
		label5   = 'Ported by',
		data5    = userList( a.portedby ),
		label6   = 'Type',
		data6    = getType( a['type'] ),
		label7   = 'Version',
		data7    = a.version,
		label8   = 'License',
		data8    = getLicense( a.license ),
		label9   = 'Language',
		data9    = a.language,
		label10  = 'Format',
		data10   = getFormats( a ),
		-- Links
		data15   = getLink( 'Download', a.download, a.downloadraw ),
		data16   = getLink( 'Website', a.website ),
		data17   = getSource( a.source ),
		data18   = getLink( 'Discussion', a.discussion ),
		data19   = getDownloadMii( a.dm, a.dmversion, a.version ),
		below    = a.below
	}
 
	if ibData.data15 or ibData.data16 or ibData.data17 or ibData.data18 or ibData.data19 then ibData.header14 = 'Links' end
 
	if a.cia == 'yes' then
		ibData.header11 = 'CIA information'
		ibData.label12  = 'Title ID'
		ibData.data12   = a.titleID or 'Unknown[[Category:3DS Homebrew missing CIA titleID]]'
		ibData.label13  = 'Unique ID'
		ibData.data13   = a.uniqueID or 'Unknown[[Category:3DS Homebrew missing CIA uniqueID]]'
	end
 
	return infobox.infobox( ibData )
end
 
return p

Advertising: