Module:Gifted item
Jump to navigation
Jump to search
local p = {}
local lib = require('Module:Feature')
local Icon_list = require('Module:Icon list')._main
local noDupe = {}
local cargo = mw.ext.cargo
-- once more characters are in the cargo table, just get unique character names from the table instead
local allCharacters = mw.loadData('Module:Gifted item/data')
local categories = mw.html.create()
local order = { 'love', 'like', 'neutral', 'dislike' }
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 itemName = mw.title.getCurrentTitle().text
local data = p.parseCharacters(itemName, args)
local result = mw.html.create('table'):addClass('lkg-table tdc1 tdbg1 tdwid1 tablemedium')
local tr = result:tag('tr')
tr:tag('th'):css{ width = '10%' }
tr:tag('th'):wikitext('Characters')
for _, preference in ipairs(order) do
local characters = data[preference]
local tr = result:tag('tr')
tr:tag('th'):wikitext(adj(preference, true))
local td = tr:tag('td')
if next(characters) == nil then
td:tag('i'):wikitext(blankReturn[preference])
else
local list = {}
local settings = { prefix = ' portrait crop ' }
for _, character in pairs(characters) do
table.insert(list, character)
end
local iconListArgs = {
delim = ',',
display = 'stacked',
col = 'true',
[1] = table.concat(list, ',')
}
td:node(Icon_list(iconListArgs))
end
end
--add categories
result:node(require('Module:Namespace detect').main{main=categories})
return tostring(result)
end
function p.parseCharacters(itemName, args)
local data = {
love = {},
like = {},
neutral = {},
dislike = {},
}
local result = mw.ext.cargo.query(
"npcPreferences",
"name,preferenceLevel",
{
where = "item=\"" .. itemName .. "\""
}
)
for r = 1, #result do
local preference = result[r].preferenceLevel:gsub('d$', '')
local character = result[r].name
table.insert(data[preference], character)
noDupe[character] = true
end
for _, preference in ipairs(order) do
if lib.isNotEmpty(args[preference]) then
if args[preference] == 'universal' then
categories:wikitext('[[Category:Item universally ', adj(preference),']]')
for _, character in pairs(allCharacters) do
if noDupe[character] == nil
then table.insert(data[preference], character)
end
end
end
end
end
return data
end
return p