Module:InfoboxNeue DS
From GameBrew
More actions
Documentation for this module may be created at Module:InfoboxNeue DS/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(typeVal)
if not typeVal then return end
local categories = {
-- Applications
['Math'] = {'DS homebrew applications', 'Maths applications on DS', 'DS homebrew applications'},
}
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, class)
if empty(link) then return altlink end
local linkText
if link:find('://') then
linkText = '[' .. link .. ' ' .. label .. ']'
else
linkText = '[[' .. link .. '|' .. label .. ']]'
end
if class then
return '<a href="' .. link .. '" class="' .. class .. '">' .. label .. '</a>'
else
return linkText
end
end
local function getSource( source )
if empty( source ) then return end
if source == 'included' then return 'Source included[[Category:DS open source homebrew]]' end
return getLink( 'Source', source ) .. '[[Category:DS 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
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',
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,
-- Links
data15 = getLink( 'Download', a.download, a.downloadraw ),
data16 = getLink( 'Website', a.website ),
data17 = getSource( a.source ),
data18 = getDonation( a.donation),
data19 = getLink('Test', a.discussion, nil, 'test'),
below = a.below
}
if ibData.data15 or ibData.data16 or ibData.data17 or ibData.data18 or ibData.data19 then ibData.header14 = 'Links' end
return infobox.infobox( ibData )
end
return p