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