Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Difficulties: Difference between revisions

From Obby Wiki
No edit summary
No edit summary
Line 118: Line 118:
     end
     end


     return tostring('<h1>' .. tostring(ordered_difficulties) .. '</h1>') .. tostring(output)
    local tstr = ''
 
    for i, v in pairs(ordered_difficulties) do
        tstr = tstr .. '; '.. tostring(i) .. ' = '.. tostring(v)
    end
 
     return tostring('<h1>' .. tstr .. '</h1>') .. tostring(output)
end
end


return p
return p

Revision as of 14:01, 7 April 2025

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

local p = {}

local config = require('Module:Difficulties/config')

local function ucfirst(str)
    return str:sub(1,1):upper() .. str:sub(2)
end

function p.main(frame)
    local args = frame:getParent().args
    local difficulties = config.difficulties
    local output = mw.html.create('table')
    output:addClass('wikitable')
    output:addClass('center')
    output:addClass('full-width')
    output:attr('style', 'width:100%;')

    local header_row = output:tag('tr')
    header_row:tag('th'):wikitext('Icon')
    header_row:tag('th'):wikitext('Difficulty')
    header_row:tag('th'):wikitext('Stages')
    header_row:tag('th'):wikitext('Completion %')
    header_row:tag('th'):wikitext('Rewards'):addClass('center')




    local ordered_difficulties = {}




    for  arg_i, arg_v in pairs(args) do
        local di_lower = mw.text.trim(arg_i):lower()
        local di_ucfirst = ucfirst(di_lower)

        local matched_difficulty_index = nil

        for config_index in pairs(difficulties) do
            if config_index == di_lower then
                matched_difficulty_index = config_index
                break
            end
        end

        if matched_difficulty_index then
            table.insert(ordered_difficulties, matched_difficulty_index)
        end
    end

    for i, key in ipairs(ordered_difficulties) do
        local v = difficulties[key]

        if v then
            local difficulty_param_name = mw.text.trim(i)
            local enabled_param = args[ucfirst(difficulty_param_name)] or args[difficulty_param_name]
    
            if enabled_param and mw.text.trim(enabled_param):lower() == 'true' then
                local row = output:tag('tr')
    
                local icon_cell = row:tag('td')
                local color_hex = args[difficulty_param_name .. '_hex']
                local icon_file = args[difficulty_param_name .. '_file_name']
                -- if v.file then
    
                if icon_file then
                    icon_cell:wikitext('[[File:' .. icon_file .. '|48px|alt=Difficulty ' .. v.display .. ']]'):attr('style', 'border-radius: 8px; overflow: hidden; display:inline-block;')
                else
                    icon_cell:tag('div')
                        :attr('style', 'width: 48px; height: 48px; background-color: ' .. ((color_hex and '#'.. color_hex) or v.color) .. '; vertical-align: middle; border-radius: 8px;')
                end
    
                local name_cell = row:tag('td')
                local page_link = config.meta.page_prefix .. v.display
                if not v.display then
                    page_link = config.meta.page_prefix .. ucfirst(i)
                end
    
                -- name_cell:tag('a')
                name_cell:wikitext('[[' .. v.display .. ']]') -- maybe thats how this works
                    -- :wikitext('[[' .. v.display .. ']]')
                    -- :attr('href', mw.title.makeTitle('',page_link):fullUrl())
                    -- :wikitext(v.display or ucfirst(i))
    
                local stage_cell = row:tag('td')
                local start_value = args[difficulty_param_name .. '_start']
                local end_value = args[difficulty_param_name .. '_end']
                local is_coming_soon = args[difficulty_param_name .. '_unreleased']
    
                if is_coming_soon then
                    stage_cell:wikitext('\'\'Unreleased\'\'')
                else
                    stage_cell:wikitext( (start_value or '??') .. ' - ' .. (end_value or '??'))
                end
    
                local completionp_cell = row:tag('td')
                local completionp_value = args[difficulty_param_name .. '_completion']
    
                completionp_cell:wikitext( (completionp_value or '?') .. '%')
    
                local rewards_cell = row:tag('td')
                local badge_param_name = difficulty_param_name .. '_badge'
                local badge_value = args[badge_param_name]
                if badge_value then
                    -- badge_cell:tag('a')
                        -- :attr('href', 'https://roblox.com/badges' .. badge_value)
                        -- :attr('target', '_blank')
                        rewards_cell:wikitext('[[File:Icons Badge Small White.png|link=https://roblox.com/badges/' .. badge_value .. '/obbywikidifficultylink|alt=Badge|28px]]')
                        rewards_cell:attr('style', 'vertical-align: middle; margin-auto;')
                            -- :attr('src', mw.file.makeUrl('Icons Badge Small White.png'))
                            -- :attr('alt', 'Badge')
                            -- :attr('style', 'width: 20px; height: 20px; vertical-align: middle;')
                else
                    rewards_cell:wikitext('\'\'None\'\'')
                end
            end
        end
    end

    local tstr = ''

    for i, v in pairs(ordered_difficulties) do
        tstr = tstr .. '; '.. tostring(i) .. ' = '.. tostring(v)
    end

    return tostring('<h1>' .. tstr .. '</h1>') .. tostring(output)
end

return p