We're currently working on updating the Wiki content for the August 2024 Closed Playtest. All this information is subject to change in the final release.

Find us in the Wishes Unlimited Discord in the "Beastiepedia (Beastieball Wiki)" thread under #beastieball-spoilers!

Module:PlayList: Difference between revisions

From Beastiepedia: The Beastieball Wiki
(Created page with "local p = {} local cargo = mw.ext.cargo local getArgs = require('Module:Arguments').getArgs local typeFormat = { Body={value="frameless|20x20pxBody", bg="#f3c18c"}, Spirit={value="frameless|20x20pxSpirit", bg="#f5abab"}, Mind={value="frameless|20x20pxMind", bg="#60c0f3"}, Volley={value="frameless|20x20pxVolley", bg="#ebcdff"}, Support={value="[[File:Support.pn...")
 
No edit summary
Line 66: Line 66:
         end
         end
     end
     end
     if #names == 0 then
     if #names == 0 and where == nil then
         return "No moves specified"
         return "No moves specified"
     end
     end
Line 75: Line 75:
     if where then
     if where then
         args.where = where
         args.where = where
        names = {}
     end
     end
     local results = cargo.query( tables, table.concat(fields, ","), args )
     local results = cargo.query( tables, table.concat(fields, ","), args )
Line 91: Line 92:
     for r = 1, #results do
     for r = 1, #results do
         namedResults[results[r].Name] = results[r]
         namedResults[results[r].Name] = results[r]
        if where then
            table.insert(names, results[r].Name)
        end
     end
     end
     for _, name in ipairs(names) do
     for _, name in ipairs(names) do

Revision as of 06:00, 6 July 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]][[Body]]", bg="#f3c18c"},
    Spirit={value="[[File:Spirit.png|frameless|20x20px]][[Spirit]]", bg="#f5abab"},
    Mind={value="[[File:Mind.png|frameless|20x20px]][[Mind]]", bg="#60c0f3"},
    Volley={value="[[File:Volley.png|frameless|20x20px]][[Volley]]", bg="#ebcdff"},
    Support={value="[[File:Support.png|frameless|20x20px]][[Support]]", bg="#99ecaa"},
    Defence={value="[[File:Defence.png|frameless|20x20px]][[Defence]]", bg="#b3b3b3"},
    Move={value="[[File:Move.png|frameless|20x20px]][[Move]]", bg=nil},
}

local hasPow = {
    Body=true,
    Spirit=true,
    Mind=true,
    Volley=false,
    Support=false,
    Defence=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
    for k, v in pairs(args) do
        if k == "header" then
            extraHeader = v
        elseif k == "where" then
            where = 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 #names == 0 and where == nil then
        return "No moves specified"
    end
    local tables = 'Plays'
    local args = {
        where = "Name IN ('" .. table.concat(names, "','") .. "')",
    }
    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')
    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
    for _, name in ipairs(names) do
        local row = namedResults[name]
        if row then
            local tr = tbl:tag('tr')
            for k = 1, #displayFields do
                if displayFields[k] == "Type" then
                    local format = typeFormat[row[displayFields[k]]]
                    local td = tr:tag('td'):wikitext(format.value)
                    if format.bg then
                        td:attr("bgcolor", format.bg)
                    end
                elseif displayFields[k] == "Level" then
                    tr:tag('td'):wikitext(levels[name])
                else
                    local content = row[displayFields[k]]
                    if fieldTransform[displayFields[k]] then
                        content = fieldTransform[displayFields[k]](content)
                    end
                    if not content then
                        content = "--"
                    end
                    if displayFields[k] == "Pow" and not hasPow[row["Type"]] then
                        content = "--"
                    end
                    tr:tag('td'):wikitext(frame:preprocess(content))
                end
            end
        end
    end
    return tbl
end

return p