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
 
(40 intermediate revisions by the same user not shown)
Line 11: Line 11:
     local difficulties = config.difficulties
     local difficulties = config.difficulties
     local output = mw.html.create('table')
     local output = mw.html.create('table')
     output:addClass()
     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 difficulties_s = {}
 
    for k, v in pairs(difficulties) do
        table.insert(difficulties_s, {
            key = k,
            data = v
        })
    end
 
    table.sort(difficulties_s, function(a,b)
        return a.data.priority < b.data.priority
    end)
 
 
    for _, entry in pairs(difficulties_s) do
        local i = entry.key
        local v = entry.data
 
        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
            entry.data.priority = tonumber(args[difficulty_param_name .. '_priority']) or tonumber(args[difficulty_param_name .. '_index']) or entry.data.priority
        end
    end
 
    table.sort(difficulties_s, function(a,b)
        return a.data.priority < b.data.priority
    end)
 
    local inclonlystr = ''
 
    for _, entry in pairs(difficulties_s) do
        local i = entry.key
        local v = entry.data


    for i, v in pairs(difficulties) do
         local difficulty_param_name = mw.text.trim(i)
         local difficulty_param_name = mw.text.trim(i)
         local enabled_param = args[ucfirst(difficulty_param_name)] or args[difficulty_param_name]
         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
         if enabled_param and mw.text.trim(enabled_param):lower() == 'true' then
            inclonlystr = inclonlystr .. '[[Category:'.. ucfirst(difficulty_param_name) .. ']]'
             local row = output:tag('tr')
             local row = output:tag('tr')


             local icon_cell = row:tag('td')
             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 v.file then
             icon_cell:tag('div')
 
                :attr('style', 'width: 20px; height: 20px; background-color: ' .. v.color .. '; vertical-align: middle;')
            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 name_cell = row:tag('td')
Line 32: Line 85:


             -- name_cell:tag('a')
             -- name_cell:tag('a')
             name_cell:wikitext('[[' .. v.display .. ']]') -- maybe thats how this works
             name_cell:wikitext('[[' .. page_link .. '|' .. v.display .. ']]'):attr('style', 'color:'..v.color..';') -- maybe thats how this works
                 -- :wikitext('[[' .. v.display .. ']]')
                 -- :wikitext('[[' .. v.display .. ']]')
                 -- :attr('href', mw.title.makeTitle('',page_link):fullUrl())
                 -- :attr('href', mw.title.makeTitle('',page_link):fullUrl())
                 -- :wikitext(v.display or ucfirst(i))
                 -- :wikitext(v.display or ucfirst(i))


             local badge_cell = row:tag('td')
             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_param_name = difficulty_param_name .. '_badge'
             local badge_value = args[badge_param_name]
             local badge_value = args[badge_param_name]
Line 44: Line 113:
                     -- :attr('href', 'https://roblox.com/badges' .. badge_value)
                     -- :attr('href', 'https://roblox.com/badges' .. badge_value)
                     -- :attr('target', '_blank')
                     -- :attr('target', '_blank')
                     badge_cell:wikitext('[[File:Icons Badge Small White.png|link=https://roblox.com/badges/' .. badge_value .. '|alt=Badge|28px]]')
                     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('src', mw.file.makeUrl('Icons Badge Small White.png'))
                         -- :attr('alt', 'Badge')
                         -- :attr('alt', 'Badge')
                         -- :attr('style', 'width: 20px; height: 20px; vertical-align: middle;')
                         -- :attr('style', 'width: 20px; height: 20px; vertical-align: middle;')
             else
             else
                 badge_cell:wikitext(' ')
                 rewards_cell:wikitext('\'\'None\'\'')
             end
             end
         end
         end
     end
     end


     return tostring(output)
     return tostring(output) .. inclonlystr
end
end


return p
return p

Latest revision as of 04:48, 10 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 difficulties_s = {}

    for k, v in pairs(difficulties) do
        table.insert(difficulties_s, {
            key = k,
            data = v
        })
    end

    table.sort(difficulties_s, function(a,b)
        return a.data.priority < b.data.priority
    end)


    for _, entry in pairs(difficulties_s) do
        local i = entry.key
        local v = entry.data

        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
            entry.data.priority = tonumber(args[difficulty_param_name .. '_priority']) or tonumber(args[difficulty_param_name .. '_index']) or entry.data.priority
        end
    end

    table.sort(difficulties_s, function(a,b)
        return a.data.priority < b.data.priority
    end)

    local inclonlystr = ''

    for _, entry in pairs(difficulties_s) do
        local i = entry.key
        local v = entry.data

        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
            inclonlystr = inclonlystr .. '[[Category:'.. ucfirst(difficulty_param_name) .. ']]'
            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('[[' .. page_link .. '|' .. v.display .. ']]'):attr('style', 'color:'..v.color..';') -- 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

    return tostring(output) .. inclonlystr
end

return p