Module:Gifted item
Jump to navigation
Jump to search
local p = {}
local lib = require('Module:Feature')
local Icon_list = require('Module:Icon list').buildList
local characters = mw.loadData('Module:Gifted item/data')
local order = { 'love', 'like', 'neutral', 'dislike'}
local categories = mw.html.create()
local noDupe = {}
local blankReturn = {
love = 'No character loves this item.',
like = 'No character likes this item.',
neutral = 'No character is neutral towards this item.',
dislike = 'No character dislikes this item.',
}
local function adj(preference, cap)
if preference == 'neutral' then
if cap then return 'Neutral' else return 'neutral' end
else
if cap then return preference:gsub("^%l", string.upper) .. 'd' else return preference .. 'd' end
end
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, { parentFirst = true })
return p._main(args)
end
function p._main(args)
local data = p.parseCharacters(args)
local result = mw.html.create('table'):addClass('article-table tdc1 tdbg1 tdwid1 tablelarge')
local tr = result:tag('tr')
tr:tag('th'):css{ width = '10%' }
tr:tag('th'):wikitext('Characters')
-- mw.logObject(data)
--build table
for _, preference in ipairs(order) do
local tr = result:tag('tr')
--type
if preference == 'neutral' then
tr:tag('th'):wikitext('Neutral')
else
tr:tag('th'):wikitext(adj(preference, true))
end
--characters
local td = tr:tag('td')
if next(data[preference]) == nil then
td:tag('i'):wikitext(blankReturn[preference])
else
local ul = td:tag('ul')
local list = {}
local settings = { prefix = ' face ' }
for _, character in ipairs(characters) do
if data[preference][character] and (noDupe[character] == nil or noDupe[character] == preference) then
table.insert(list, character)
if noDupe[character] == nil then noDupe[character] = preference end
end
end
-- adding cols = 6 was breaking mobile views
-- if #list >= 1 then settings.cols = 6 end
td:node(Icon_list(list, settings))
end
end
--add categories
-- result:node(require('Module:Namespace detect').main{main=categories})
--return table with categories
return result
end
function p.parseCharacters(args)
local data = {
love = {},
like = {},
neutral = {},
dislike = {},
}
for _, preference in ipairs(order) do
if lib.isNotEmpty(args[preference]) then
if args[preference] == 'universal' then
for _, character in ipairs(characters) do
data[preference][character] = true
end
else
for _, character in ipairs(lib.split(args[preference], ';')) do
if noDupe[character] == nil then noDupe[character] = preference end
if noDupe[character] == preference then
data[preference][character] = true
end
end
end
end
end
--return parsed characters
return data
end
return p