Jump to content

Module:DigimonTab: Difference between revisions

From Untitled Monster Game
imported>Ziebster
No edit summary
imported>Ziebster
No edit summary
Line 1: Line 1:
local p = {}
local p = {}function p.show(frame)
 
function p.show(frame)
     local versionTag = frame.args[1] or (frame:getParent() and frame:getParent().args[1]) or "Error: No version tag"
     local versionTag = frame.args[1] or (frame:getParent() and frame:getParent().args[1]) or "Error: No version tag"
     local data = mw.loadData("Module:MasterList")
     local data = mw.loadData("Module:MasterList")
     local summonable, unsummonable = {}, {}
     local summonable, unsummonable = {}, {}for _, digimon in ipairs(data) do
 
    for i, v in ipairs(digimon.versions or {}) do
    for _, digimon in ipairs(data) do
        if v == versionTag then
        for i, v in ipairs(digimon.versions or {}) do
            local summonable_field = digimon.summonable
            if v == versionTag then
            local status
                local summonable_field = digimon.summonable
            if type(summonable_field) == 'table' then
                local status
                status = summonable_field[i] or "Yes"
                if type(summonable_field) == 'table' then
            else
                    status = summonable_field[i] or "Yes"
                status = summonable_field or "Yes"
                else
                    status = summonable_field or "Yes"
                end
                local entry = {
                    image = digimon.image and digimon.image ~= "" and "[[File:" .. digimon.image .. "|50px]]" or "",
                    name = "'''" .. digimon.name .. "'''"
                }
                if status == "''Yes''" then entry.name = entry.name .. "<ref>You need another device with a similar Battle Type in order to battle with this Digimon.</ref>" end
                table.insert(status == "No" and unsummonable or summonable, entry)
                break
             end
             end
            local entry = {
                image = digimon.image and digimon.image ~= "" and "[[File:" .. digimon.image .. "|50px]]" or "",
                name = "'''" .. digimon.name .. "'''"
            }
            if status == "''Yes''" then entry.name = entry.name .. "<ref>You need another device with a similar Battle Type in order to battle with this Digimon.</ref>" end
            table.insert(status == "No" and unsummonable or summonable, entry)
            break
         end
         end
     end
     end
end


    table.sort(summonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)
table.sort(summonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)
    table.sort(unsummonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)
table.sort(unsummonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)


    local function buildGrid(entries)
local function buildGrid(entries)
        local rows = ""
    local rows = ""
        local max_entries_per_row = 3  -- Limit to 2 entries per row (4 columns) to avoid scroll bars; increase to 3 if needed
    local max_entries_per_row = 3  -- Limit to 2 entries per row (4 columns) to avoid scroll bars; increase to 3 if needed
        for i = 1, #entries, max_entries_per_row do
    for i = 1, #entries, max_entries_per_row do
            local cells = {}
        local cells = {}
            for j = 0, max_entries_per_row - 1 do
        for j = 0, max_entries_per_row - 1 do
                local idx = i + j
            local idx = i + j
                if idx > #entries then break end
            if idx > #entries then break end
                table.insert(cells, 'style="border:none;" | ' .. entries[idx].image)
            table.insert(cells, 'style="border:none;" | ' .. entries[idx].image)
                table.insert(cells, 'style="border:none;" | ' .. entries[idx].name)
            table.insert(cells, 'style="border:none;" | ' .. entries[idx].name)
            end
        end
            if #cells > 0 then
        if #cells > 0 then
                rows = rows .. "|-\n| " .. table.concat(cells, " || ") .. "\n"
            rows = rows .. "|-\n| " .. table.concat(cells, " || ") .. "\n"
            end
         end
         end
        return rows
     end
     end
    return rows
end


    local out = (#summonable > 0 and "='''Summonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(summonable) .. "|}\n" or "") ..
local out = (#summonable > 0 and "='''Summonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(summonable) .. "|}\n" or "") ..
                (#unsummonable > 0 and "='''Unsummonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(unsummonable) .. "|}\n" or (#summonable == 0 and "''No Digimon in this version.''\n" or ""))
            (#unsummonable > 0 and "='''Unsummonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(unsummonable) .. "|}\n" or (#summonable == 0 and "''No Digimon in this version.''\n" or ""))


    return frame:preprocess(out)
return frame:preprocess(out)
end
end
return p
return p

Revision as of 08:27, 6 January 2026

Example Usage:

<tabber>
|-|Example=<div class="mobileonly"><h3>Example</h3></div>
{{#invoke:DigimonTab|show|Exam|Ex}}
</tabber>
  • Example = Version tabber label
  • Exam = Master List device tag
  • Ex = Footnote tag (if applicable)

local p = {}function p.show(frame)
    local versionTag = frame.args[1] or (frame:getParent() and frame:getParent().args[1]) or "Error: No version tag"
    local data = mw.loadData("Module:MasterList")
    local summonable, unsummonable = {}, {}for _, digimon in ipairs(data) do
    for i, v in ipairs(digimon.versions or {}) do
        if v == versionTag then
            local summonable_field = digimon.summonable
            local status
            if type(summonable_field) == 'table' then
                status = summonable_field[i] or "Yes"
            else
                status = summonable_field or "Yes"
            end
            local entry = {
                image = digimon.image and digimon.image ~= "" and "[[File:" .. digimon.image .. "|50px]]" or "",
                name = "'''" .. digimon.name .. "'''"
            }
            if status == "''Yes''" then entry.name = entry.name .. "<ref>You need another device with a similar Battle Type in order to battle with this Digimon.</ref>" end
            table.insert(status == "No" and unsummonable or summonable, entry)
            break
        end
    end
end

table.sort(summonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)
table.sort(unsummonable, function(a,b) return mw.text.unstripNoWiki(a.name) < mw.text.unstripNoWiki(b.name) end)

local function buildGrid(entries)
    local rows = ""
    local max_entries_per_row = 3  -- Limit to 2 entries per row (4 columns) to avoid scroll bars; increase to 3 if needed
    for i = 1, #entries, max_entries_per_row do
        local cells = {}
        for j = 0, max_entries_per_row - 1 do
            local idx = i + j
            if idx > #entries then break end
            table.insert(cells, 'style="border:none;" | ' .. entries[idx].image)
            table.insert(cells, 'style="border:none;" | ' .. entries[idx].name)
        end
        if #cells > 0 then
            rows = rows .. "|-\n| " .. table.concat(cells, " || ") .. "\n"
        end
    end
    return rows
end

local out = (#summonable > 0 and "='''Summonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(summonable) .. "|}\n" or "") ..
            (#unsummonable > 0 and "='''Unsummonable Digimon'''=\n{| class=\"fandom-table\" style=\"border: none; border-collapse: collapse;\"\n" .. buildGrid(unsummonable) .. "|}\n" or (#summonable == 0 and "''No Digimon in this version.''\n" or ""))

return frame:preprocess(out)
end
return p