ATTENTION! The process of updating WiKi to version Eco 10.x has begun. Those wishing to participate can find out more Information on our ECO Contribution Wiki Discord.
From April 26 to May 12, errors may occur in the Wiki, as we will be carrying out a major update to the information processing modules.

Module:Utils: Difference between revisions

From Eco - English Wiki
[checked revision][checked revision]
No edit summary
No edit summary
Line 42: Line 42:


     local L = require('Module:Localization') -- local import
     local L = require('Module:Localization') -- local import
   
 
     if not size then
     if not size then
         size = 'iconNormal'
         size = 'iconNormal'
Line 85: Line 85:
     if border then
     if border then
         icon_border = border
         icon_border = border
    end
    if not item_bg then
        item_bg = 'iconBlue'
     end
     end



Revision as of 13:01, 16 March 2021

This module provides utility functions used from other modules.

Usage

Add the following line of code at the top of your file.

local Utils = require("Module:Utils")

-- You may then call functions from this module in your script. For example:
local tableLength = Utils.tableLen(myTable)

local p = {}

-- Trims and parses the args into a table, then returns the table
function p.normaliseArgs(frame)
    local origArgs = frame:getParent().args
    local args = {}

    for k, v in pairs(origArgs) do
        v = mw.text.trim(tostring(v))
        if v ~= '' then
            args[k] = v
        end
    end

    return args
end

function p.checkImage(name, too_expensive)
    local icon = name:gsub('%s+', '') .. '_Icon.png'
    if too_expensive then
        return icon
    end

    if mw.title.makeTitle('File', icon).file.exists then
        return icon
    else
        return 'NoImage.png'
    end
end

function in_array(item, array)
    -- Should only use on short arrays
    local set = {}
    for _, l in ipairs(array) do
        set[l] = true
    end
    return set[item] ~= nil
end

function p.build_icon(name, size, bg, border, too_expensive)
    -- Size options are iconNormal or iconRecipe - 64px or 44px - defaults to iconNormal

    local L = require('Module:Localization') -- local import

    if not size then
        size = 'iconNormal'
    end
    local icon_bg = ''
    local icon_border = ''

    local item_data = mw.loadData('Module:ItemData')
    local item = item_data.items[name]
    local image
    if item then
        if item['group'] == L.t('Skill Books') then
            image = 'SkillBook.png'
            icon_bg = 'iconGold'
        elseif item['group'] == L.t('Skill Scrolls') then
            image = 'Skill Scroll'
            icon_bg = 'iconGold'
        -- Attempt to generate skill page
        elseif in_array(L.t('Basic  Research'), item['tagGroups']) then
            image = string.sub(item['untranslated'], 1, -7):gsub('%s+', '') .. '_Icon.png'
            icon_bg = 'paperBasic'
        elseif in_array(L.t('Advanced  Research'), item['tagGroups']) then
            image = string.sub(item['untranslated'], 1, -11):gsub('%s+', '') .. '_Icon.png'
            icon_bg = 'paperAdvanced'
        elseif in_array(L.t('Modern  Research'), item['tagGroups']) then
            image = string.sub(item['untranslated'], 1, -9):gsub('%s+', '') .. '_Icon.png'
            icon_bg = 'paperModern'
        else
            image = p.checkImage(item['untranslated'], too_expensive)
        end
        if not bg and not item_bg then
            if item['group'] == L.t('Food') then
                icon_bg = 'iconGreen'
            elseif item['carried'] == L.t('Hands') then
                icon_bg = 'iconBrown'
            end
        end
    else
        image = p.checkImage(name, too_expensive)
    end

    if border then
        icon_border = border
    end

    if not item_bg then
        item_bg = 'iconBlue'
    end

    local file = '[[File:' .. image .. '|frameless|class=' .. size .. ' ' .. icon_bg .. ']]'
    return '<div class="iconContainer"><div class="iconStack">' .. file .. '</div><div class="iconBorder ' .. icon_border .. '" style="position:absolute;"></div></div>'
end

function p.Icon(frame)
    args = p.normaliseArgs(frame)
    return p.build_icon(args.name, args.size, args.bg, args.border, args.too_expensive)
end

-- mw.LoadData prevents #table from working correctly
function p.tableLen(tbl)
    local count = 0
    for _, v in ipairs(tbl) do
        if v == nil then
            return count
        end
        count = count + 1
    end
    return count
end

return p