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]
(p.tableLen)
No edit summary
Line 1: Line 1:
local p = {}
local p = {}
local L = require('Module:Localization')


-- Trims and parses the args into a table, then returns the table
-- Trims and parses the args into a table, then returns the table
function p.normaliseArgs(frame)
function p.normaliseArgs(frame)
  local origArgs = frame:getParent().args
    local origArgs = frame:getParent().args
  local args = {}
    local args = {}
 
 
  for k, v in pairs(origArgs) do
    for k, v in pairs(origArgs) do
    v = mw.text.trim(tostring(v))
        v = mw.text.trim(tostring(v))
    if v ~= '' then
        if v ~= '' then
      args[k] = v
            args[k] = v
        end
     end
     end
  end
 
 
    return args
  return args
end
end


function p.checkImage(name, too_expensive)
function p.checkImage(name, too_expensive)
  local icon = name:gsub('%s+', '') .. '_Icon.png'
    local icon = name:gsub('%s+', '') .. '_Icon.png'
  if too_expensive then
    if too_expensive then
     return icon
        return icon
  end
     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
    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
 
    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


  if mw.title.makeTitle('File', icon).file.exists then
function p.Icon(frame)
     return icon
     args = p.normaliseArgs(frame)
  else
     return p.build_icon(args.name, args.size, args.bg, args.border, args.too_expensive)
     return 'NoImage.png'
  end
end
end


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


return p
return p

Revision as of 12:58, 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 = {}

local L = require('Module:Localization')

-- 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
    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

    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