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.

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

local p = {}

local function div()
local div = mw.html.create( 'div' )
div
	:attr( 'id', 'Ads-Infobox' )
return tostring( div )
end

local function div2()
local div = mw.html.create( 'div' )
div
	:attr( 'id', 'largemobilebanner' )
return tostring( div )
end

local function div3()
local div = mw.html.create( 'div' )
div
	:attr( 'id', 'Ads-Infobox1' )
return tostring( div )
end
 
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(typeVal)
    if not typeVal then return end

    local categories = {
        -- Applications
        ['Custom Firmwares']     = {'PSP homebrew applications', 'Custom firmwares on PSP', 'PSP homebrew applications'},
        ['File Browsers']        = {'PSP homebrew applications', 'Utility applications on PSP', 'PSP homebrew applications'},
        ['Math']                 = {'PSP homebrew applications', 'Maths applications on PSP', 'PSP homebrew applications'},
        ['Media Players']        = {'PSP homebrew applications', 'Media players on PSP', 'PSP homebrew applications'},
        ['Music']                = {'PSP homebrew applications', 'Music applications on PSP', 'PSP homebrew applications'},
        ['Operating Systems']    = {'PSP homebrew applications', 'Operating systems on PSP', 'PSP homebrew applications'},
        ['Other']                = {'PSP homebrew applications', 'Other applications on PSP', 'PSP homebrew applications'},
        ['System Tools']         = {'PSP homebrew applications', 'System tools on PSP', 'PSP homebrew applications'},
        ['Utilities']            = {'PSP homebrew applications', 'Utility applications on PSP', 'PSP homebrew applications'},
        ['Plugins']              = {'PSP homebrew applications', 'PSP plugins', 'PSP homebrew applications'},
        -- Games
        ['Action']               = {'PSP homebrew games', 'Action games on PSP', 'PSP homebrew games'},
        ['Adventure']            = {'PSP homebrew games', 'Adventure games on PSP', 'PSP homebrew games'},
        ['Arcade Games']         = {'PSP homebrew games', 'Arcade games on PSP', 'PSP homebrew games'},
        ['Board']                = {'PSP homebrew games', 'Board games on PSP', 'PSP homebrew games'},		
        ['Card']                 = {'PSP homebrew games', 'Card games on PSP', 'PSP homebrew games'},	
        ['Game Engine']          = {'PSP homebrew games', 'Game engines on PSP', 'PSP homebrew games'},	
        ['Music Games']          = {'PSP homebrew games', 'Music games on PSP', 'PSP homebrew games'},	
        ['Other Games']          = {'PSP homebrew games', 'Other games on PSP', 'PSP homebrew games'},	
        ['Platform']             = {'PSP homebrew games', 'Platform games on PSP', 'PSP homebrew games'},	
        ['Puzzle']               = {'PSP homebrew games', 'Puzzle games on PSP', 'PSP homebrew games'},	
        ['Racing']               = {'PSP homebrew games', 'Racing games on PSP', 'PSP homebrew games'},	
        ['Role Playing']         = {'PSP homebrew games', 'Role playing games on PSP', 'PSP homebrew games'},	
        ['Shooter']              = {'PSP homebrew games', 'Shooter games on PSP', 'PSP homebrew games'},	
        ['Simulation']           = {'PSP homebrew games', 'Simulation games on PSP', 'PSP homebrew games'},	
        ['Strategy']             = {'PSP homebrew games', 'Strategy games on PSP', 'PSP homebrew games'},	
        ['Trivia']               = {'PSP homebrew games', 'Trivia games on PSP', 'PSP homebrew games'},	
        ['OpenBOR Games']        = {'PSP homebrew games', 'OpenBOR games on PSP', 'PSP homebrew games'},	
        -- Emulators
        ['Arcade']               = {'PSP homebrew emulators', 'Arcade emulators on PSP', 'PSP homebrew emulators'},
        ['Computer']             = {'PSP homebrew emulators', 'Computer emulators on PSP', 'PSP homebrew emulators'},
        ['Console']              = {'PSP homebrew emulators', 'Console emulators on PSP', 'PSP homebrew emulators'},
        ['Handheld']             = {'PSP homebrew emulators', 'Handheld emulators on PSP', 'PSP homebrew emulators'},
        ['Other Emulators']      = {'PSP homebrew emulators', 'Other emulators on PSP', 'PSP homebrew emulators'},
        -- PC (PC Utilities for PSP)
        ['Development Libraries']  = {'PSP PC utilities', 'Development utilities for PSP', 'PC utilities for PSP'},
        ['Development']            = {'PSP PC utilities', 'Development utilities for PSP', 'PC utilities for PSP'},
        ['File Operation']         = {'PSP PC utilities', 'File management utilities for PSP', 'PC utilities for PSP'},
        ['Save and Game Managers'] = {'PSP PC utilities', 'Other PC utilities for PSP', 'PC utilities for PSP'},
        ['PSP Streaming']          = {'PSP PC utilities', 'Other PC utilities for PSP', 'PC utilities for PSP'},
        ['Theme Tools']            = {'PSP PC utilities', 'Other PC utilities for PSP', 'PC utilities for PSP'},
        ['PC Utilities']           = {'PSP PC utilities', 'Other PC utilities for PSP', 'PC utilities for PSP'},
        -- Demos
        ['Demos']                = {'PSP homebrew demos', 'Demo homebrews on PSP', 'PSP homebrew applications'},
        -- ROM Hack
        ['Game Hacks']           = {'PSP Rom Hacks', 'PSP game hacks', 'PSP rom hacks'},
        ['Translations']         = {'PSP Rom Hacks', 'PSP game translations', 'PSP rom hacks'},
        ['Hack Utilities']       = {'PSP Rom Hacks', 'PSP hack utilities', 'PSP rom hacks'},
        ['Save Editors']         = {'PSP Rom Hacks', 'PSP hack utilities', 'PSP rom hacks'},
    }

    local category = categories[typeVal]
    if category then
            return string.format('[[List of %s#%s|%s]] [[Category:%s]] [[Category:%s]]', category[1], typeVal, typeVal, category[2], category[3])
    else
        return typeVal .. '[[Category:Infobox homebrew using invalid type parameter]]'
    end
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:PSP open source homebrew]]' end
 
	return getLink( 'Source', source ) .. '[[Category:PSP open source homebrew]]'
end

local function getDonation( donation )
	if empty( donation ) then return end
	if donation == 'included' then return 'Donation included[[Category:Support the author]]' end
 
	return getLink( 'Support Author', donation ) .. '[[Category:Support the author]]'
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,
		header2  = 'General',
		description = a.description,
		label3   = 'Author',
		data3    = a.author,
		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 ),
		label11   = 'Last Updated',
		data11    = a.lastupdated,
        header13 = div3(),
        header20 = div(),
        header1 = div2(),
		-- Links
		data15   = getLink( 'Download', a.download, a.downloadraw ),
		data16   = getLink( 'Website', a.website ),
		data17   = getSource( a.source ),
		data18   = getDonation( a.donation),
		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.label112  = 'Title ID'
		ibData.data112   = a.titleID or 'Unknown[[Category:3DS Homebrew missing CIA titleID]]'
		ibData.label113  = 'Unique ID'
		ibData.data113   = a.uniqueID or 'Unknown[[Category:3DS Homebrew missing CIA uniqueID]]'
	end
 
	return infobox.infobox( ibData )
end
 
return p

Advertising: