Модуль:Utils: различия между версиями

Материал из Eco - Русская Wiki
Перейти к:навигация, поиск
[непроверенная версия][досмотренная версия]
Copying from EN
Нет описания правки
 
(не показаны 24 промежуточные версии 3 участников)
Строка 1: Строка 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
 
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


    for k, v in pairs(origArgs) do
function p.getLanguageCode()
        v = mw.text.trim(tostring(v))
  local language = mw.language.getContentLanguage()
        if v ~= '' then
  local languageCode = language:getCode()
            args[k] = v
  return languageCode
        end
end
    end


    return args
function p.getLanguageName()
  local languageName = "English"
  local language = mw.language.getContentLanguage()
  local languageCode = language:getCode()
  if languageCode == "ru" then languageName = "Russian" end
  if languageCode == "de" then languageName = "German" end
  if languageCode == "fr" then languageName = "French" end
  return languageName
end
end


function p.checkImage(name, too_expensive)
function p.checkImage(filename)
    local icon = name:gsub('%s+', '') .. '_Icon.png'
if filename then
    if too_expensive then
if mw.title.makeTitle('Media', filename).file.exists then return "Y" else return "N" end
        return icon
else return "Error name" end
    end
end


    if mw.title.makeTitle('File', icon).file.exists then
function p.checkPage(pagename)
        return icon
local pagetitle = mw.title.new(pagename)
    else
if pagetitle and pagetitle.exists then return "Y" else return "N" end
        return 'NoImage.png'
    end
end
end


local function in_array(item, array)
 
     -- Should only use on short arrays
function p.SkillSearch(PageName)
     local set = {}
local SkillName = ''
    for _, l in ipairs(array) do
local skillData = mw.loadData( "Module:SkillData" )
        set[l] = true
     local skillList = skillData.skills
    end
     local Lang = p.getLanguageName()
     return set[item] ~= nil
    for Sname,Sdata in pairs(skillList) do
    if (Sdata.Name[Lang] == PageName) then SkillName = Sname end
    end
     return SkillName
end
end


---@param name string
function p.SkillSearchByID(SkillID)
---@param size string|nil
local SkillName = 'None'
---@param bg string|nil
local skillData = mw.loadData( "Module:SkillData" )
---@param border string|nil
    local skillList = skillData.skills
---@param too_expensive boolean|nil
    local Lang = p.getLanguageName()
function p.build_icon(name, size, bg, border, too_expensive)
    for Sname,Sdata in pairs(skillList) do
    -- Size options are iconNormal or iconRecipe - 64px or 44px - defaults to iconNormal
    if (Sdata.SkillID == SkillID) then SkillName = Sname end
    end
return SkillName
end


    local L = require('Module:Localization') -- local import
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


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


    local item_data = mw.loadData('Module:ItemData')
function p.BiomeSearch(PageName)
    local item = item_data.items[name]
local BiomeName = 'None'
    local image
local BiomeData = mw.loadData( "Module:BiomeData" )
    if item then
    local BiomeList = BiomeData.biomes
        if item['group'] == L.t('Skill Books') then
    local Lang = p.getLanguageName()
            image = 'SkillBook.png'
    for Bname,Bdata in pairs(BiomeList) do
            icon_bg = 'iconGold'
    if (Bdata.Name[Lang] == PageName) then BiomeName = Bname end
        elseif item['group'] == L.t('Skill Scrolls') then
    end
            image = 'Skill Scroll'
     return BiomeName   
            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, -10):gsub('%s+', '') .. '_Icon.png'
            icon_bg = 'paperAdvanced'
        elseif in_array(L.t('Modern  Research'), item['tagGroups']) then
            image = string.sub(item['untranslated'], 1, -8):gsub('%s+', '') .. '_Icon.png'
            icon_bg = 'paperModern'
        else
            image = p.checkImage(item['untranslated'], too_expensive)
        end
        if 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 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


    if border then
function p.SpecialtyXP(Tier)
        icon_border = border
local WikiText =  ''
    else
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>'
        icon_border = 'borderBlue'
for i = 1, 6 do
     end
local XP = Tier * ( 25 * i) ^ 2
WikiText = WikiText .. '<td>' .. XP .. '</td>'
end
WikiText = WikiText ..'</tr></table>'
     return WikiText
end


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


    local file = '[[File:' .. image .. '|frameless|class=' .. size .. ' ' .. icon_bg .. ']]'
function p.ItemTags(TagsList)
    return '<div class="' .. icon_container .. '"><div class="iconStack">' .. file .. '</div><div class="iconBorder ' .. icon_border .. '" style="position:absolute;"></div></div>'
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
TagName = TagData.tags[Tname];
TagNameLoc = TagName.Name[Lang];
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
end


function p.Icon(frame)
-- variable substitution
    args = p.normaliseArgs(frame)
function p.VarSub(String,Loc)
    return p.build_icon(args.name, args.size, args.bg, args.border, args.too_expensive)
return string.gsub(String,'{0}',Loc)
end
end


-- mw.LoadData prevents #table from working correctly
function p.VSTranslate(String,Loc)
function p.tableLen(tbl)
return p.VarSub(p.Translate(String),Loc)
    local count = 0
    for _, v in ipairs(tbl) do
        if v == nil then
            return count
        end
        count = count + 1
    end
    return count
end
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
return p
return p

Текущая версия от 09:58, 4 марта 2026

Для документации этого модуля может быть создана страница Модуль:Utils/doc

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	language = mw.language.getContentLanguage()
  local languageCode = language:getCode()
  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).file.exists then return "Y" else return "N" end
	else return "Error name" 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.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
			TagName = TagData.tags[Tname];
			TagNameLoc = TagName.Name[Lang];
			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
return p