Module:MonsterVariantsTable: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
Californ1a (talk | contribs) mNo edit summary |
Californ1a (talk | contribs) mNo edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local editbutton = require('Module:Edit button') |
|||
local p = {} |
local p = {} |
||
Line 6: | Line 7: | ||
function p.formatProfessionLevel(profession, level, high) |
function p.formatProfessionLevel(profession, level, high) |
||
if not (profession or level) then |
|||
return nil |
|||
⚫ | |||
profession = profession or 'Unknown profession' |
profession = profession or 'Unknown profession' |
||
local level_text = tostring(level or '?') |
local level_text = tostring(level or '?') |
||
Line 17: | Line 15: | ||
end |
end |
||
function p._main(args) |
function p._main(args, Avariant) |
||
local variant = args[1] or args.variant or '' |
local variant = args[1] or args.variant or Avariant or '' |
||
local query = { |
local query = { |
||
string.format('[[Variant of::%s]] [[Has query::+]] OR [[Has subobject::<q>[[Variant of::%s]]</q>]]', variant, variant), |
string.format('[[Variant of::%s]] [[Has query::+]] OR [[Has subobject::<q>[[Variant of::%s]]</q>]]', variant, variant), |
||
'?Image#64px;x64px=img', |
'?Image#64px;x64px=img', |
||
'?Has subobject.Image#64px;x64px=img2', |
'?Has subobject.Image#64px;x64px=img2', |
||
'?Name=name', |
|||
'?= page', |
'?= page', |
||
'?Unlock_level = unlock', |
'?Unlock_level = unlock', |
||
Line 28: | Line 27: | ||
'?Profession_Level_A = combat', |
'?Profession_Level_A = combat', |
||
'?Has subobject.Profession_Level_A = combat2', |
'?Has subobject.Profession_Level_A = combat2', |
||
'?Profession A #= |
'?Profession A #=profession', |
||
'?Has subobject.Profession A #=profession2' |
'?Has subobject.Profession A #=profession2' |
||
} |
} |
||
Line 35: | Line 34: | ||
if results == nil or results[1] == nil then |
if results == nil or results[1] == nil then |
||
return 'No |
return ":''No variants found for "..variant.."''" |
||
end |
end |
||
Line 72: | Line 71: | ||
return tbl |
return tbl |
||
⚫ | |||
function p.get_entry(entry, param) |
|||
return entry[param] |
|||
or (type(entry[param..'2']) == 'table' and entry[param..'2'][1]) |
|||
or (type(entry[param..'2']) == 'string' and entry[param..'2']) |
|||
end |
end |
||
Line 93: | Line 98: | ||
for _,entry in ipairs(results) do |
for _,entry in ipairs(results) do |
||
local edit = editbutton("'''?''' (edit)", entry.name) |
|||
local built_entry = { |
local built_entry = { |
||
combat = |
combat = p.get_entry(entry, 'combat') or edit, |
||
img = |
img = p.get_entry(entry, 'img') or mw.ustring.format('[[File:%s.png|64px|x64px]]', entry.name), |
||
unlock = |
unlock = p.get_entry(entry, 'unlock') or edit, |
||
profession = |
profession = p.get_entry(entry, 'profession') or nil, |
||
page = entry.page |
page = entry.page |
||
} |
} |
Revision as of 16:56, 30 December 2024
Module documentation
This documentation is transcluded from Module:MonsterVariantsTable/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:MonsterVariantsTable/doc. [edit]
Module:MonsterVariantsTable's function main is invoked by Template:MonsterVariantsTable.
Module:MonsterVariantsTable requires Module:Edit button.
local editbutton = require('Module:Edit button')
local p = {}
function p.main(frame)
return p._main(frame:getParent().args)
end
function p.formatProfessionLevel(profession, level, high)
profession = profession or 'Unknown profession'
local level_text = tostring(level or '?')
if high then
level_text = ('%s➨%d'):format(level_text, high)
end
return ('%s [[File:%s small icon.png|21x21px|link=%s]]'):format(level_text, profession, profession)
end
function p._main(args, Avariant)
local variant = args[1] or args.variant or Avariant or ''
local query = {
string.format('[[Variant of::%s]] [[Has query::+]] OR [[Has subobject::<q>[[Variant of::%s]]</q>]]', variant, variant),
'?Image#64px;x64px=img',
'?Has subobject.Image#64px;x64px=img2',
'?Name=name',
'?= page',
'?Unlock_level = unlock',
'?Has subobject.Unlock_level = unlock2',
'?Profession_Level_A = combat',
'?Has subobject.Profession_Level_A = combat2',
'?Profession A #=profession',
'?Has subobject.Profession A #=profession2'
}
local results = mw.smw.ask(query)
if results == nil or results[1] == nil then
return ":''No variants found for "..variant.."''"
end
local sorted = p.sort_by_combat(results)
--local debug_str = '<pre>'..mw.text.jsonEncode(sorted, mw.text.JSON_PRETTY)..'</pre>'
return tostring(p.create_table(sorted))--..debug_str
end
function p.sort_by_combat(data)
table.sort(data, function(a, b)
-- Determine combat values
local combatA = a.combat or (a.combat2 and a.combat2[1]) or math.huge
local combatB = b.combat or (b.combat2 and b.combat2[1]) or math.huge
-- Sort in ascending order
return combatA < combatB
end)
return data
end
function p.insert_row(tbl, entry)
tbl:tag('tr')
:tag('td')
:wikitext(entry.img)
:done()
:tag('td')
:wikitext(entry.page)
:done()
:tag('td')
:wikitext(p.formatProfessionLevel(entry.profession, entry.unlock))
:done()
:tag('td')
:wikitext(p.formatProfessionLevel(entry.profession, entry.combat))
:done()
:done()
return tbl
end
function p.get_entry(entry, param)
return entry[param]
or (type(entry[param..'2']) == 'table' and entry[param..'2'][1])
or (type(entry[param..'2']) == 'string' and entry[param..'2'])
end
function p.create_table(results)
local out = mw.html.create('table')
:addClass('wikitable sortable')
:tag('tr')
:tag('th')
:wikitext('Image')
:done()
:tag('th')
:wikitext('Monster')
:done()
:tag('th')
:wikitext('Unlocked at')
:done()
:tag('th')
:wikitext('Combat level')
:done()
:done()
for _,entry in ipairs(results) do
local edit = editbutton("'''?''' (edit)", entry.name)
local built_entry = {
combat = p.get_entry(entry, 'combat') or edit,
img = p.get_entry(entry, 'img') or mw.ustring.format('[[File:%s.png|64px|x64px]]', entry.name),
unlock = p.get_entry(entry, 'unlock') or edit,
profession = p.get_entry(entry, 'profession') or nil,
page = entry.page
}
out = p.insert_row(out, built_entry)
end
return out
end
return p