Module:ModuleShowVariantsOrSingle: Difference between revisions

From The First Descendant Wiki
No edit summary
No edit summary
Line 2: Line 2:
-- Modules can have variants, or they can be one of a kind.
-- Modules can have variants, or they can be one of a kind.
-- It doesn't make sense to show all the variant fluff if a module is one of a kind.
-- It doesn't make sense to show all the variant fluff if a module is one of a kind.
-- This script shows or hides all that variant info based on how many unique modules are defined,
-- no having to manually pick a template yourself!


local p = {}
local p = {}
Line 15: Line 17:
     return "\n= " .. tostring(variantID) .. " =\n" ..moduleText
     return "\n= " .. tostring(variantID) .. " =\n" ..moduleText
end
end




Line 50: Line 51:
         result = frame.args[1] --If it's unique and this gives an error: good. You deserve it.
         result = frame.args[1] --If it's unique and this gives an error: good. You deserve it.
     end
     end
   
   


     return frame:preprocess(result)
     return frame:preprocess(result)

Revision as of 23:06, 5 June 2024

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

------------------------------------
-- Modules can have variants, or they can be one of a kind.
-- It doesn't make sense to show all the variant fluff if a module is one of a kind.
-- This script shows or hides all that variant info based on how many unique modules are defined,
-- no having to manually pick a template yourself!

local p = {}


local function moreThanOne(module_name)
    local variants_chapter = "== Variants ==\n{{Template:ModuleTableCompareLevels|module_name=" .. module_name .. "}}\n\n"
    local variant_details_chapter = "== Variant Details ==\n"
    return variants_chapter .. variant_details_chapter
end

local function addChapter(variantID, moduleText)
    return "\n= " .. tostring(variantID) .. " =\n" ..moduleText
end


function p.processData(frame)
    if frame.args.count == nil then
        return "ERROR: Module:ModuleShowVariantsOrSingle not passed a count. Please tell us on Discord!"
    end

    local smw_count = tonumber(frame.args.count)

    -- Count how many Template:ModuleUniqueDetails have been included as params
    -- If this doesn't match how many SMW entries there are, someone screwed up data entry
    local arg_count = 0
    for k, v in pairs(frame.args) do
        if v ~= '' then
            arg_count = arg_count + 1
        end
    end

    -- Two args are the module name and smw count
    if (arg_count-2) ~= smw_count then
        return "ERROR: The Module page template requires each module to be defined twice. Make sure you put it in both spots!"
    end

    local result = ""
    if arg_count > 3 then
        result = moreThanOne(frame.args.module_name)
        -- In MediaWiki, args are a table. Named args get a string key, unnamed args get a sequential number key.
        -- Thus, the first unnamed arg will be 1, and we can loop through them all by subtracting the number of named args.
        for i=1, (arg_count-2) do
            result = result .. addChapter(i, frame.args[i])
        end
    else
        result = frame.args[1] --If it's unique and this gives an error: good. You deserve it.
    end

    return frame:preprocess(result)
end

return p