Happy Early Access Launch! Please bear with us: We're doing our best to get the site updated. If we currently don't have what you're looking for, try checking our sister site, beastieball.info.
If you're looking to contribute to the site, we're happy to have you! Check out Beastiepedia:To Do List to see what needs done.
Find us in the Wishes Unlimited Discord in the "Beastiepedia: The Beastieball Wiki" thread in the Forums!
Module:PlayList: Difference between revisions
From Beastiepedia: The Beastieball Wiki
DrChillbrain (talk | contribs) No edit summary |
(re-add beastie learnset stuff?) |
||
Line 41: | Line 41: | ||
local levels = {} | local levels = {} | ||
local lastPlay = nil | local lastPlay = nil | ||
local storein = nil | |||
local beastie = nil | |||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
if k == "header" then | if k == "header" then | ||
Line 46: | Line 48: | ||
elseif k == "where" then | elseif k == "where" then | ||
where = v | where = v | ||
elseif k == "storein" then | |||
storein = v | |||
elseif k == "beastie" then | |||
beastie = v | |||
elseif v == "?sortable" then | elseif v == "?sortable" then | ||
sortable = true | sortable = true | ||
Line 65: | Line 71: | ||
end | end | ||
end | end | ||
end | |||
if beastie == nil then | |||
beastie = mw.title.getCurrentTitle().text | |||
end | end | ||
if #names == 0 and where == nil then | if #names == 0 and where == nil then | ||
Line 72: | Line 81: | ||
local args = { | local args = { | ||
where = "Plays.Name IN ('" .. table.concat(names, "','") .. "')", | where = "Plays.Name IN ('" .. table.concat(names, "','") .. "')", | ||
limit = | limit=999999, | ||
} | } | ||
if where then | if where then | ||
Line 98: | Line 107: | ||
end | end | ||
end | end | ||
playsStore = "" | |||
for _, name in ipairs(names) do | for _, name in ipairs(names) do | ||
local row = namedResults[name] | local row = namedResults[name] | ||
local tr = tbl:tag('tr') | local tr = tbl:tag('tr') | ||
if playsStore ~= "" then | |||
playsStore = playsStore .. ", " | |||
end | |||
playsStore = playsStore .. name | |||
if levelEnabled then | |||
playsStore = playsStore .. ";" .. levels[name] | |||
end | |||
for k = 1, #displayFields do | for k = 1, #displayFields do | ||
local td = tr:tag('td') | local td = tr:tag('td') | ||
Line 124: | Line 141: | ||
end | end | ||
end | end | ||
end | |||
if storein ~= "" then | |||
cargo.store(storein, { Beastie=beastie, Plays=playsStore }) | |||
end | end | ||
return tbl | return tbl |
Revision as of 14:29, 18 November 2024
Documentation for this module may be created at Module:PlayList/doc
local p = {} local cargo = mw.ext.cargo local getArgs = require('Module:Arguments').getArgs local typeFormat = { Body={value="[[File:Body.png|frameless|20x20px|link=Body]][[Body]]", bg="#f3c18c"}, Spirit={value="[[File:Spirit.png|frameless|20x20px|link=Spirit]][[Spirit]]", bg="#f5abab"}, Mind={value="[[File:Mind.png|frameless|20x20px|link=Mind]][[Mind]]", bg="#60c0f3"}, Volley={value="[[File:Volley.png|frameless|20x20px|link=Volley]][[Volley]]", bg="#ebcdff"}, Support={value="[[File:Support.png|frameless|20x20px|link=Support]][[Support]]", bg="#99ecaa"}, Defense={value="[[File:Defense.png|frameless|20x20px|link=Defense]][[Defense]]", bg="#b3b3b3"}, Move={value="[[File:Move.png|frameless|20x20px|link=Move]][[Move]]", bg=nil}, } local hasPow = { Body=true, Spirit=true, Mind=true, Volley=false, Support=false, Defense=false, Move=false, } local fieldTransform = {} function fieldTransform.Name(content) return "[[" .. content .. "]]" end function p.Main( frame ) local names = {} local where = nil local args = getArgs(frame) local extraHeader = nil local sortable = false local displayFields = {"Name", "Description", "Pow", "Type"} local fields = {"Name", "Description", "Pow", "Type"} local levelEnabled = false local lookingForLevel = false local levels = {} local lastPlay = nil local storein = nil local beastie = nil for k, v in pairs(args) do if k == "header" then extraHeader = v elseif k == "where" then where = v elseif k == "storein" then storein = v elseif k == "beastie" then beastie = v elseif v == "?sortable" then sortable = true elseif v == "?level" then levelEnabled = true table.insert(displayFields, "Level") elseif v == "?favors" then table.insert(displayFields, "Favors") table.insert(fields, "Favors") elseif v[1] ~= "?" then if lookingForLevel then levels[lastPlay] = v else lastPlay = v table.insert(names, v) end if levelEnabled then lookingForLevel = lookingForLevel == false end end end if beastie == nil then beastie = mw.title.getCurrentTitle().text end if #names == 0 and where == nil then return "No moves specified" end local tables = 'Plays' local args = { where = "Plays.Name IN ('" .. table.concat(names, "','") .. "')", limit=999999, } if where then args.where = where names = {} end local results = cargo.query( tables, table.concat(fields, ","), args ) local tbl = mw.html.create('table'):addClass('wikitable') tbl:css( 'width', '100%' ) if sortable then tbl:addClass('sortable') end if extraHeader then tbl:tag('tr'):tag('th'):attr("colspan", #displayFields):wikitext(extraHeader) end local header = tbl:tag('tr') for k = 1, #displayFields do header:tag('th'):wikitext(displayFields[k]) end local namedResults = {} for r = 1, #results do namedResults[results[r].Name] = results[r] if where then table.insert(names, results[r].Name) end end playsStore = "" for _, name in ipairs(names) do local row = namedResults[name] local tr = tbl:tag('tr') if playsStore ~= "" then playsStore = playsStore .. ", " end playsStore = playsStore .. name if levelEnabled then playsStore = playsStore .. ";" .. levels[name] end for k = 1, #displayFields do local td = tr:tag('td') local field = displayFields[k] local content = row and row[field] if field == "Level" then td:wikitext(levels[name]) elseif field == "Type" then local format = typeFormat[content] td:wikitext((format and format.value) or content) if format then td:attr("bgcolor", format.bg) end else content = content or (field == "Name" and name) or "--" if fieldTransform[field] then content = fieldTransform[field](content) end if field == "Pow" and row and not hasPow[row["Type"]] then content = "--" end td:wikitext(frame:preprocess(content)) end end end if storein ~= "" then cargo.store(storein, { Beastie=beastie, Plays=playsStore }) end return tbl end return p