Editing Module:MonsterVariantsTable
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
require('strict') |
|||
require('Module:Mw.html extension') |
|||
local editbutton = require('Module:Edit button') |
|||
local p = {} |
local p = {} |
||
function p.main(frame) |
function p.main(frame) |
||
return p._main(frame:getParent().args) |
|||
return p._main(args[1] or args.variant or '') |
|||
end |
end |
||
function p._main(args) |
|||
local function formatProfessionLevel(profession, level, high) |
|||
local variant = args[1] or args.variant or 'Thug' |
|||
profession = profession or 'Unknown profession' |
|||
local |
local query = { |
||
string.format('[[Variant of::%s]] [[Has query::+]] OR [[Has subobject::<q>[[Variant of::%s]]</q>]]', variant, variant), |
|||
if high then |
|||
'?Image#64px;x64px=img', |
|||
level_text = ('%s➨%d'):format(level_text, high) |
|||
'?Has subobject.Image#64px;x64px=img2', |
|||
end |
|||
'?= page', |
|||
return ('%s [[File:%s small icon.png|21x21px|link=%s]]'):format(level_text, profession, profession) |
|||
'?Unlock_level = unlock', |
|||
end |
|||
'?Has subobject.Unlock_level = unlock2', |
|||
'?Profession_Level_A = combat', |
|||
function p._main(variant) |
|||
'?Has subobject.Profession_Level_A = combat2', |
|||
local results = mw.smw.ask{ |
|||
} |
|||
('[[Variant of::%s]]'):format(variant), |
|||
'?Image#64px;x64px = img', |
|||
'?Name = name', |
|||
'?= page', |
|||
'?Unlock_level = unlock_lvl', |
|||
'?Unlock profession # = unlock_profession', |
|||
'?Profession_Level_A = combat', |
|||
'?Profession A # = profession', |
|||
'?Version default = default', |
|||
'?Variant name = variant', |
|||
'?Version anchor = version', |
|||
'?-Version subobject#- = superobject', |
|||
'sort=Profession Level A', |
|||
'order=asc' |
|||
} |
|||
mw.logObject(results) |
|||
if results == nil or results[1] == nil then |
|||
return ":''No variants found for "..variant.."''" |
|||
end |
|||
local filtered = p.filter_versions(results) |
|||
local sorted = p.sort_by_combat(filtered) |
|||
local results = mw.smw.ask(query) |
|||
return p.create_table(sorted) |
|||
local sorted = p.sort_by_combat(results) |
|||
end |
|||
local debug_str = '<pre>'..mw.text.jsonEncode(sorted, mw.text.JSON_PRETTY)..'</pre>' |
|||
function p.filter_versions(data) |
|||
return tostring(p.create_table(sorted))--..debug_str |
|||
local filtered = {} |
|||
for _, entry in ipairs(data) do |
|||
if entry.default then |
|||
entry.page = ('[[%s|%s]]'):format(entry.superobject, entry.name) |
|||
table.insert(filtered, entry) |
|||
elseif entry.version == nil then |
|||
table.insert(filtered, entry) |
|||
end |
|||
end |
|||
return filtered |
|||
end |
end |
||
function p.sort_by_combat(data) |
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 |
end |
||
function p.insert_row(tbl, entry) |
function p.insert_row(tbl, entry) |
||
tbl:tag('tr') |
|||
local edit = editbutton("'''?''' (edit)", entry.name) |
|||
:tag('td') |
|||
:wikitext(entry.img) |
|||
:td{ entry.img, addClass = 'plinkt-image no-border' }:done() |
|||
:td{ entry.page, addClass = 'plinkt-link no-border' }:done() |
|||
:td() |
|||
:IF(entry.unlock_profession) |
|||
:wikitext(entry.unlock_lvl and formatProfessionLevel(entry.unlock_profession, entry.unlock_lvl) or edit) |
|||
:ELSE() |
|||
:addClass('table-na') |
|||
:wikitext('N/A') |
|||
:END() |
|||
:done() |
:done() |
||
: |
:tag('td') |
||
:wikitext(entry. |
:wikitext(entry.page) |
||
:done() |
|||
:tag('td') |
|||
:wikitext(entry.unlock) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(entry.combat) |
|||
:done() |
:done() |
||
:done() |
:done() |
||
return tbl |
return tbl |
||
end |
end |
||
Line 93: | Line 57: | ||
function p.create_table(results) |
function p.create_table(results) |
||
local out = mw.html.create('table') |
local out = mw.html.create('table') |
||
:addClass('wikitable sortable |
:addClass('wikitable sortable') |
||
: |
:tag('tr') |
||
:tag('th') |
|||
:th{ 'Monster', attr = { colspan = 2 } }:done() |
|||
: |
:wikitext('Image') |
||
:done() |
|||
:tag('th') |
|||
:wikitext('Monster') |
|||
:done() |
|||
:tag('th') |
|||
:wikitext('Unlocked at') |
|||
:done() |
|||
:tag('th') |
|||
:wikitext('Combat level') |
|||
:done() |
|||
:done() |
:done() |
||
for _, |
for _,entry in ipairs(results) do |
||
local built_entry = { |
|||
out = p.insert_row(out, entry) |
|||
combat = entry.combat or entry.combat2[1] or entry.combat2 or '', |
|||
img = entry.img or entry.img2[1] or entry.img2 or '', |
|||
unlock = entry.unlock or entry.unlock2[1] or entry.unlock2 or '', |
|||
page = entry.page |
|||
} |
|||
out = p.insert_row(out, built_entry) |
|||
end |
end |
||
return out |
return out |
||
end |
end |