Module:Utils: Difference between revisions

From Eco - English Wiki
[checked revision][checked revision]
Avaren (talk | contribs)
No edit summary
No edit summary
Tag: Manual revert
 
(146 intermediate revisions by 4 users not shown)
Line 1: Line 1:
local p = {}
local p = {}


-- 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.normalise(args)
 
for k, v in pairs(args) do
v = mw.text.trim(tostring(v))
if v ~= '' then
args[k] = v
end
end
 
return args
end
 
--- Trims and parses the args into a table, then returns the table
--- @author User:Avaren
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
v = mw.text.trim(tostring(v))
if v ~= '' then
args[k] = v
end
end
 
return args
end
 
function p.CheckId(name)
local itemData = mw.loadData("Module:ItemData")
    local ItemName = p.ItemSearch(name)
    local itemTable = itemData.items[ItemName]
    if itemTable == nil then return 'NoItem' end
    local IconName = itemTable.ID
return IconName
end


    for k, v in pairs(origArgs) do
function p.CheckList(List)
        v = mw.text.trim(tostring(v))
local NewList = ""
        if v ~= '' then
if (List ~= "") then
            args[k] = v
local TempList ={}
        end
for Name in string.gmatch(List, "([^,]+)") do
    end
TempList[Name] = Name
end
for Name,Data in pairs(TempList) do
if (NewList == "") then NewList = NewList .. Name else NewList = NewList .. "," .. Name end
end
end
return NewList
end


    return args
function p.getLanguageCode()
  local language = mw.language.getContentLanguage()
  local languageCode = language:getCode()
  return languageCode
end
end


function p.checkImage(name, too_expensive)
function p.getLanguageName()
    local icon = name:gsub('%s+', '') .. '_Icon.png'
  local languageName = "English"
    if too_expensive then
  local languageCode = p.getLanguageCode()
        return icon
  if languageCode == "ru" then languageName = "Russian" end
    end
  if languageCode == "de" then languageName = "German" end
  if languageCode == "fr" then languageName = "French" end
  return languageName
end


    if mw.title.makeTitle('File', icon).file.exists then
function p.checkImage(filename)
        return icon
if filename then
    else
if mw.title.makeTitle('Media', filename).fileExists then return "True" else return "False" end
        return 'NoImage.png'
else return "Error" end
    end
end
end


local function in_array(item, array)
function p.checkPage(pagename)
    -- Should only use on short arrays
local pagetitle = mw.title.new(pagename)
    local set = {}
if pagetitle and pagetitle.exists then return "Y" else return "N" end
    for _, l in ipairs(array) do
        set[l] = true
    end
    return set[item] ~= nil
end
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
function p.SkillSearch(PageName)
local SkillName = ''
local skillData = mw.loadData( "Module:SkillData" )
    local skillList = skillData.skills
    local Lang = p.getLanguageName()
    for Sname,Sdata in pairs(skillList) do
    if (Sdata.Name[Lang] == PageName) then SkillName = Sname end
    end
    return SkillName
end


    if not size then
function p.SkillSearchByID(SkillID)
        size = 'iconNormal'
local SkillName = 'None'
    end
local skillData = mw.loadData( "Module:SkillData" )
     local icon_bg = ''
     local skillList = skillData.skills
     local icon_border = ''
     local Lang = p.getLanguageName()
    for Sname,Sdata in pairs(skillList) do
    if (Sdata.SkillID == SkillID) then SkillName = Sname end
    end
return SkillName
end


    local item_data = mw.loadData('Module:ItemData')
function p.ItemSearch(PageName)
     local item = item_data.items[name]
local ItemName = 'None'
     local image
local ItemData = mw.loadData( "Module:ItemData" )
    if item then
     local ItemList = ItemData.items
        if item['group'] == L.t('Skill Books') then
     local Lang = p.getLanguageName()
            image = 'SkillBook.png'
    for Iname,Idata in pairs(ItemList) do
            icon_bg = 'iconGold'
    if (Idata.Name[Lang] == PageName) then ItemName = Iname end
        elseif item['group'] == L.t('Skill Scrolls') then
    end
            image = 'Skill Scroll'
     return ItemName
            icon_bg = 'iconGold'
end
        -- 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 icon_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
function p.TagSearch(PageName)
        icon_border = border
local TagName = 'None'
     end
local TagData = mw.loadData( "Module:TagData" )
     local TagList = TagData.tags
    local Lang = p.getLanguageName()
    for Tname,Tdata in pairs(TagList) do
    if (Tdata.Name[Lang] == PageName) then TagName = Tname end
    end
    return TagName
end
 
function p.BiomeSearch(PageName)
local BiomeName = 'None'
local BiomeData = mw.loadData( "Module:BiomeData" )
    local BiomeList = BiomeData.biomes
    local Lang = p.getLanguageName()
    for Bname,Bdata in pairs(BiomeList) do
    if (Bdata.Name[Lang] == PageName) then BiomeName = Bname end
    end
     return BiomeName   
end


     if not icon_bg then
function p.AnimalSearch(PageName)
        icon_bg = 'iconBlue'
local AnimalName = 'None'
     end
local AnimalData = mw.loadData( "Module:AnimalData" )
    local AnimalList = AnimalData.animals
     local Lang = p.getLanguageName()
    for Aname,Adata in pairs(AnimalList) do
    if (Adata.Name[Lang] == PageName) then AnimalName = Aname end
    end
     return AnimalName
end


    local file = '[[File:' .. image .. '|frameless|class=' .. size .. ' ' .. icon_bg .. ']]'
function p.PlantSearch(PageName)
     return '<div class="iconContainer"><div class="iconStack">' .. file .. '</div><div class="iconBorder ' .. icon_border .. '" style="position:absolute;"></div></div>'
local PlantName = 'None'
local PlantData = mw.loadData( "Module:PlantData" )
    local PlantList = PlantData.plants
     local Lang = p.getLanguageName()
    for Pname,Pdata in pairs(PlantList) do
    if (Pdata.Name[Lang] == PageName) then PlantName = Pname end
    end
    return PlantName
end
end


function p.Icon(frame)
function p.TreeSearch(PageName)
    args = p.normaliseArgs(frame)
local TreeName = 'None'
     return p.build_icon(args.name, args.size, args.bg, args.border, args.too_expensive)
local TreeData = mw.loadData( "Module:TreeData" )
     local TreeList = TreeData.trees
    local Lang = p.getLanguageName()
    for Tname,Tdata in pairs(TreeList) do
    if (Tdata.Name[Lang] == PageName) then TreeName = Tname end
    end
    return TreeName
end
end


-- mw.LoadData prevents #table from working correctly
function p.SpecialtyXP(Tier)
function p.tableLen(tbl)
local WikiText =  ''
    local count = 0
WikiText =  WikiText ..'<table class="table table-striped table-bordered"><tr class="thead-dark"><th>Specialty Level</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th></tr><tr><td>Specialty XP</td>'
    for _, v in ipairs(tbl) do
for i = 1, 6 do
        if v == nil then
local XP = Tier * ( 25 * i) ^ 2
            return count
WikiText = WikiText .. '<td>' .. XP .. '</td>'
        end
end
        count = count + 1
WikiText = WikiText ..'</tr></table>'
    end
     return WikiText
     return count
end
end
function p.Translate(String)
local Translate = String
local Lang = p.getLanguageName()
local TranslateData = mw.loadData( "Module:LocalizationData" )
local TranslateList = TranslateData.locales
for Tname,Tdata in pairs(TranslateList) do
    if ( Tname == String) then Translate = Tdata.Translate[Lang] end
    end
return Translate
end
function p.ItemTags(TagsList)
local WikiText = ""
local WikiTagText = ""
local Lang = p.getLanguageName()
local TagString = p.Translate("{0} Tag");
local TagData = mw.loadData( "Module:TagData" )
local IconUtils = require('Module:IconUtils')
for Count,Tname in pairs(TagsList) do
local TagName = TagData.tags[Tname];
local TagNameLoc = TagName.Name[Lang];
local TagLink = p.VarSub(TagString,TagNameLoc);
if (TagName.IsVisibleInTooltip == "True") then WikiTagText = IconUtils.main{ name = TagNameLoc, id = TagName.ID, size = 128, style = 4, link = TagLink } end
end
if (WikiTagText ~= "") then WikiText = '<div class="row">' .. WikiTagText .. '</div>' end
return WikiText
end
-- variable substitution
function p.VarSub(String,Loc)
return string.gsub(String,'{0}',Loc)
end
function p.VSTranslate(String,Loc)
return p.VarSub(p.Translate(String),Loc)
end
function p.gallery(context)
local gallery = frame:callParserFunction{ name = '#tag:gallery', args = { mode = 'slideshow', widths = '100%', ''.. context:getParent().args[1] .. '' , showthumbnails = 'true'} }
return gallery
end
function p.FoodsShelfLife(ShelfLife)
local WikiText = tonumber(ShelfLife)/86400 .. ' days'
return WikiText
end
function p.Stars(StarCost)
local WikiText = ""
local StarCost = tonumber(StarCost)
if StarCost > 0 then
for i = 1, StarCost do
WikiText = WikiText .. ' <i class="fa fa-star"></i>'
end
end
return WikiText
end
function p.Mbox(Icon, Text, TextColor, BorderColor)
local WikiText = ""
WikiText = '<center><div class="alert alert-' .. TextColor .. '" style="border-style: solid; border-width: 5px; border-color: ' .. BorderColor .. ';" role="alert"><i class="fa fa-2x fa-' .. Icon .. '"></i>'
WikiText = WikiText .. Text .. '</div></center>'
return WikiText
end
--- Global Language Wiki
p.WikiLang = p.getLanguageName()


return p
return p

Latest revision as of 20:39, 14 May 2026

This module provides utility functions used from other modules.

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.normalise(args)

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

	return args
end

--- Trims and parses the args into a table, then returns the table
--- @author User:Avaren
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.CheckId(name)
	local itemData = mw.loadData("Module:ItemData")
    local ItemName = p.ItemSearch(name) 
    local itemTable = itemData.items[ItemName]
    if itemTable == nil then return 'NoItem' end
    local IconName = itemTable.ID
	
	return IconName
end

function p.CheckList(List)
	local NewList = ""
	if (List ~= "") then
		local TempList ={}
		for Name in string.gmatch(List, "([^,]+)") do
			TempList[Name] = Name
		end
		
		for Name,Data in pairs(TempList) do
			if (NewList == "") then NewList = NewList .. Name else NewList = NewList .. "," .. Name end
		end
	end
	
	return NewList
end

function p.getLanguageCode()
  local language = mw.language.getContentLanguage()
  local languageCode = language:getCode()
  return languageCode
end

function p.getLanguageName()
  local languageName = "English"
  local languageCode = p.getLanguageCode()
  if languageCode == "ru" then languageName = "Russian" end
  if languageCode == "de" then languageName = "German" end
  if languageCode == "fr" then languageName = "French" end
  return languageName
end

function p.checkImage(filename)
	if filename then
		if mw.title.makeTitle('Media', filename).fileExists then return "True" else return "False" end
	else return "Error" end
end

function p.checkPage(pagename)
	local pagetitle = mw.title.new(pagename)
	if pagetitle and pagetitle.exists then return "Y" else return "N" end
end


function p.SkillSearch(PageName)
	local SkillName = ''
	local skillData = mw.loadData( "Module:SkillData" )
    local skillList = skillData.skills
    local Lang = p.getLanguageName()
    	for Sname,Sdata in pairs(skillList) do
    		if (Sdata.Name[Lang] == PageName) then SkillName = Sname end
    	end
    return SkillName
end

function p.SkillSearchByID(SkillID)
	local SkillName = 'None'
	local skillData = mw.loadData( "Module:SkillData" )
    local skillList = skillData.skills
    local Lang = p.getLanguageName()
    	for Sname,Sdata in pairs(skillList) do
    		if (Sdata.SkillID == SkillID) then SkillName = Sname end
    	end
	return SkillName
end

function p.ItemSearch(PageName)
	local ItemName = 'None'
	local ItemData = mw.loadData( "Module:ItemData" )
    local ItemList = ItemData.items
    local Lang = p.getLanguageName()
    	for Iname,Idata in pairs(ItemList) do
    		if (Idata.Name[Lang] == PageName) then ItemName = Iname end
    	end
    return ItemName
end

function p.TagSearch(PageName)
	local TagName = 'None'
	local TagData = mw.loadData( "Module:TagData" )
    local TagList = TagData.tags
    local Lang = p.getLanguageName()
    	for Tname,Tdata in pairs(TagList) do
    		if (Tdata.Name[Lang] == PageName) then TagName = Tname end
    	end
    return TagName
end

function p.BiomeSearch(PageName)
	local BiomeName = 'None'
	local BiomeData = mw.loadData( "Module:BiomeData" )
    local BiomeList = BiomeData.biomes
    local Lang = p.getLanguageName()
    	for Bname,Bdata in pairs(BiomeList) do
    		if (Bdata.Name[Lang] == PageName) then BiomeName = Bname end
    	end
    return BiomeName    
end

function p.AnimalSearch(PageName)
	local AnimalName = 'None'
	local AnimalData = mw.loadData( "Module:AnimalData" )
    local AnimalList = AnimalData.animals
    local Lang = p.getLanguageName()
    	for Aname,Adata in pairs(AnimalList) do
    		if (Adata.Name[Lang] == PageName) then AnimalName = Aname end
    	end
    return AnimalName
end

function p.PlantSearch(PageName)
	local PlantName = 'None'
	local PlantData = mw.loadData( "Module:PlantData" )
    local PlantList = PlantData.plants
    local Lang = p.getLanguageName()
    	for Pname,Pdata in pairs(PlantList) do
    		if (Pdata.Name[Lang] == PageName) then PlantName = Pname end
    	end
    return PlantName
end

function p.TreeSearch(PageName)
	local TreeName = 'None'
	local TreeData = mw.loadData( "Module:TreeData" )
    local TreeList = TreeData.trees
    local Lang = p.getLanguageName()
    	for Tname,Tdata in pairs(TreeList) do
    		if (Tdata.Name[Lang] == PageName) then TreeName = Tname end
    	end
    return TreeName
end

function p.SpecialtyXP(Tier)
	local WikiText =  ''
	WikiText =  WikiText ..'<table class="table table-striped table-bordered"><tr class="thead-dark"><th>Specialty Level</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th></tr><tr><td>Specialty XP</td>'
	for i = 1, 6 do
		local XP = Tier * ( 25 * i) ^ 2
		WikiText =  WikiText .. '<td>' .. XP .. '</td>'
	end
	WikiText =  WikiText ..'</tr></table>'
    return WikiText
end

function p.Translate(String)
	local Translate = String
	local Lang = p.getLanguageName()
	local TranslateData = mw.loadData( "Module:LocalizationData" )
	local TranslateList = TranslateData.locales
		for Tname,Tdata in pairs(TranslateList) do
    		if ( Tname == String) then Translate = Tdata.Translate[Lang] end
    	end
	
	return Translate
end

function p.ItemTags(TagsList)
	local WikiText = ""
	local WikiTagText = ""
	local Lang = p.getLanguageName()
	local TagString = p.Translate("{0} Tag");
	local TagData = mw.loadData( "Module:TagData" )
	local IconUtils = require('Module:IconUtils')
		for Count,Tname in pairs(TagsList) do
			local TagName = TagData.tags[Tname];
			local TagNameLoc = TagName.Name[Lang];
			local TagLink = p.VarSub(TagString,TagNameLoc);
			if (TagName.IsVisibleInTooltip == "True") then WikiTagText = IconUtils.main{ name = TagNameLoc, id = TagName.ID, size = 128, style = 4, link = TagLink } end
		end
	if (WikiTagText ~= "") then WikiText = '<div class="row">' .. WikiTagText .. '</div>' end
	return WikiText
end

-- variable substitution
function p.VarSub(String,Loc)
	return string.gsub(String,'{0}',Loc)
end

function p.VSTranslate(String,Loc)
	return p.VarSub(p.Translate(String),Loc)
end

function p.gallery(context)
	local gallery = frame:callParserFunction{ name = '#tag:gallery', args = { mode = 'slideshow', widths = '100%', ''.. context:getParent().args[1] .. '' , showthumbnails = 'true'} }
	return gallery
end

function p.FoodsShelfLife(ShelfLife)
	local WikiText = tonumber(ShelfLife)/86400 .. ' days'
	return WikiText
end

function p.Stars(StarCost)
	local WikiText = ""
	local StarCost = tonumber(StarCost)
	
	if StarCost > 0 then 
			for i = 1, StarCost do
				WikiText = WikiText .. ' <i class="fa fa-star"></i>'
			end
	end
	
	return WikiText
end

function p.Mbox(Icon, Text, TextColor, BorderColor)
	local WikiText = ""
	WikiText = '<center><div class="alert alert-' .. TextColor .. '" style="border-style: solid; border-width: 5px; border-color: ' .. BorderColor .. ';" role="alert"><i class="fa fa-2x fa-' .. Icon .. '"></i>'
	WikiText = WikiText .. Text .. '</div></center>' 
	return WikiText
end

--- Global Language Wiki
p.WikiLang = p.getLanguageName()

return p