Module:Characters

From Candypedia

Documentation for this module may be created at Module:Characters/doc

-- Module:Characters
local p = {}

-- 1) Define the ordered groups of characters
p.groups = {
    { name = "Main cast", list = {
        "Mike","Lucy","Paulo","Daisy","David","Abbey","Sue","Augustus"
    }},
    { name = "Secondary cast", list = {
        "Amaya","Katie","Stacy","Jasmine","Sandy","Tess",
        "James","Jessica","Rachel","Matt","Madison"
    }},
    { name = "Students", list = {
        "Alec McCain","Mina","Cassidy","Courtney","Flower Girl",
        "Three Weird Girls","John","Craig","Roger","Tiff",
        "Darwin","Dylan","Felix","Finn","Lucas","Max"
    }},
    { name = "Siblings", list = {
        "Chris","Haley","Jordan","Sam","Paulo's sister","Molly","Aaron"
    }},
    { name = "Parents", list = {
        "Abraham","Charlotte","Amaya's dad","Augustus's dad","Augustus's mom",
        "Daisy's mom","Teddy","David's mom","Ellen","Janet",
        "Kevin","Lucy's dad","Lucy's mom","Mike's dad","Paulo's dad",
        "Rose Muir","Sandy's mom","Sue's mom"
    }},
    { name = "Pets", list = {
        "Blur","Chirpy","Lily","Yashy"
    }},
    { name = "School faculty", list = {
        "Gym Teacher (High School)","Lani Amalu","Sir Poodles of Noodles",
        "Principal","Sex-Ed Teacher"
    }},
    { name = "Other characters", list = {
        "Alejandro","Toby","Zachary","Catherine","Emma",
        "Justin","Lauren","Melanie","Miranda","Turtle"
    }},
    { name = "Background characters", list = {
        "List of background characters"
    }},
}

-- 2a) Render the navbox wikitext
function p.renderNav(frame)
    local args = {
        "{{Navbox",
        "| name        = Characters",
        "| title       = Characters",
        "| listclass   = hlist",
        "| state       = " .. (frame.args.state or "autocollapse")
    }

    for i, grp in ipairs(p.groups) do
        table.insert(args, "| group" .. i .. " = " .. grp.name)
        local items = {}
        for _, page in ipairs(grp.list) do
            table.insert(items, "* [[" .. page .. "]]" )
        end
        table.insert(args, "| list" .. i .. " =\n" .. table.concat(items, "\n"))
    end

    table.insert(args, "}}")

    -- Here's the fix: parse the string as wikitext
    return frame:preprocess(table.concat(args, "\n"))
end

-- 2b) Render the plain list page
function p.renderList(frame)
    local out = {""}
    for _, grp in ipairs(p.groups) do
        table.insert(out, "== " .. grp.name .. " ==\n")
        table.insert(out, '<div style="column-count: 3; column-gap: 2em;">')

        for _, page in ipairs(grp.list) do
            table.insert(out, "* [[" .. page .. "]]" )
        end
        table.insert(out, "</div>\n")
        table.insert(out, "\n")
    end
    return table.concat(out, "\n")
end

return p