Module:SMO Power Moons

From the Super Mario Wiki, the Mario encyclopedia
Jump to navigationJump to search

This module outputs the {{SMO Power Moons}} table with data from here.


local MOONS = mw.loadJsonData('Module:SMO Power Moons/data.json')
local tables = require('Module:Table')

local p = {}

function p.main(frame)
    local args = frame:getParent().args
    local current_title = string.lower(mw.title.getCurrentTitle().text)
    local wikitext = '{|class="wikitable '
    if args[2] then
        wikitext = wikitext .. "sortable "
    end
    if args.nokingdom then
        wikitext = wikitext .. 'col4left col5left'
    else
        wikitext = wikitext .. 'col5left col6left'
    end
    wikitext = wikitext .. ' mario sm" style="width:100%;text-align:center"\n'
    wikitext = wikitext .. '!!data-sort-type="number"|#\n'
    wikitext = wikitext .. '!class="unsortable" width="192px"|Image\n'
    wikitext = wikitext .. '!data-sort-type="alphabetical"|Name\n'

    if not args.nokingdom then
        wikitext = wikitext .. '!class="unsortable"|Kingdom\n'
    end

    wikitext = wikitext .. '!class="unsortable"|Location\n'
    wikitext = wikitext .. '!Availability\n'

    local link_tracker = tables.LinkTracker.new(current_title)

    for k, v in ipairs(args) do
        v = tables.trim(v)
        if v ~= "" then
            wikitext = wikitext .. frame:preprocess("|-{{anchor|" .. v .. "}}\n")
            local moon = MOONS[v]

            if moon == nil then
                error("Power Moon parameter " .. k .. " is invalid: " .. v)
            else
                wikitext = wikitext .. "|" .. frame:preprocess(moon.number or "") .. "\n"
                wikitext = wikitext .. "|" .. frame:preprocess(moon.image or tables.noimage("SMO Power Moon " .. v)) .. "\n"

                if moon.sort_name then
                    wikitext = wikitext .. "|data-sort-value=\"" .. moon.sort_name .. "\""
                end

                wikitext = wikitext .. "|''"

                if type(moon.objective) == "string" then
                    wikitext = wikitext .. "[[" .. moon.objective .. "|" .. v .. "]]"
                elseif moon.objective then
                    wikitext = wikitext .. "[[" .. v .. "]]"
                else
                    wikitext = wikitext .. v
                end

                wikitext = wikitext .. "''"

                if moon.multi then
                    wikitext = wikitext .. " ❸\n"
                end

                wikitext = wikitext .. "\n"

                if not args.nokingdom then
                    wikitext = wikitext .. "|"

                    if moon.kingdom == "Mushroom Kingdom" then
                        wikitext = wikitext .. "[[" .. moon.kingdom .. "]]"
                    else
                        wikitext = wikitext .. "[[Mushroom Kingdom (Super Mario Odyssey)|" .. moon.kingdom .. "]]"
                    end

                    wikitext = wikitext .. "\n"
                end

                wikitext = wikitext .. "|" .. frame:preprocess(link_tracker:parse(moon.location)) .. "\n"
                wikitext = wikitext .. "|" .. frame:preprocess(moon.availability or "") .. "\n"
            end
        end
    end

    wikitext = wikitext .. "|}"

    return wikitext
end

return p