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

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


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


     return args
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
end


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


    if mw.title.makeTitle('File', icon).file.exists then
function p.getLanguageCode()
        return icon
  local language = mw.language.getContentLanguage()
    else
  local languageCode = language:getCode()
        return 'NoImage.png'
  return languageCode
    end
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
end


local function in_array(item, array)
function p.checkImage(filename)
    -- Should only use on short arrays
if filename then
    local set = {}
if mw.title.makeTitle('Media', filename).file.exists then return "Y" else return "N" end
    for _, l in ipairs(array) do
else return "Error name" end
        set[l] = true
    end
    return set[item] ~= nil
end
end


---@param name string
function p.checkPage(pagename)
---@param size string|nil
local pagetitle = mw.title.new(pagename)
---@param bg string|nil
if pagetitle and pagetitle.exists then return "Y" else return "N" end
---@param border string|nil
end
---@param too_expensive boolean|nil
function p.build_icon(name, link, 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
function p.SkillSearch(PageName)
        size = 'iconNormal'
local SkillName = ''
     end
local skillData = mw.loadData( "Module:SkillData" )
     local icon_bg
     local skillList = skillData.skills
    if bg then
     local Lang = p.getLanguageName()
        icon_bg = bg
    for Sname,Sdata in pairs(skillList) do
    end
    if (Sdata.Name[Lang] == PageName) then SkillName = Sname end
     local icon_border
    end
    if border then
     return SkillName
        icon_border = border
end
    end


    local item_data = mw.loadData('Module:ItemData')
function p.SkillSearchByID(SkillID)
    local item = item_data.items[name]
local SkillName = 'None'
    local image
local skillData = mw.loadData( "Module:SkillData" )
    if item then
    local skillList = skillData.skills
        if item['group'] == L.t('Skill Books') then
    local Lang = p.getLanguageName()
            image = 'SkillBook.png'
    for Sname,Sdata in pairs(skillList) do
            icon_bg = 'iconGold'
    if (Sdata.SkillID == SkillID) then SkillName = Sname end
        elseif item['group'] == L.t('Skill Scrolls') then
    end
            image = 'Skill Scroll'
return SkillName
            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.ItemSearch(PageName)
        icon_bg = 'iconBlue'
local ItemName = 'None'
     end
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 border then
function p.TagSearch(PageName)
        icon_border = border
local TagName = 'None'
    else
local TagData = mw.loadData( "Module:TagData" )
        icon_border = 'borderBlue'
     local TagList = TagData.tags
     end
    local Lang = p.getLanguageName()
    for Tname,Tdata in pairs(TagList) do
    if (Tdata.Name[Lang] == PageName) then TagName = Tname end
    end
     return TagName
end


    if size == 'iconNormal' then
function p.BiomeSearch(PageName)
        icon_container = 'iconContainer'
local BiomeName = 'None'
     else
local BiomeData = mw.loadData( "Module:BiomeData" )
        icon_container = 'iconContainerSmall'
    local BiomeList = BiomeData.biomes
     end
     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 link then
function p.AnimalSearch(PageName)
        link = ''
local AnimalName = 'None'
     else
local AnimalData = mw.loadData( "Module:AnimalData" )
        link = '|link='..link
     local AnimalList = AnimalData.animals
     end
    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 .. link ..']]'
function p.SpecialtyXP(Tier)
    return '<div class="' .. icon_container .. '"><div class="iconStack">' .. file .. '</div><div class="iconBorder ' .. icon_border .. '" style="position:absolute;"></div></div>'
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
end


function p.Icon(frame)
function p.Translate(String)
    args = p.normaliseArgs(frame)
local Translate = String
    return p.build_icon(args.name, args.link, args.size, args.bg, args.border, args.too_expensive)
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
end


-- mw.LoadData prevents #table from working correctly
function p.ItemTags(TagsList)
function p.tableLen(tbl)
local WikiText = ""
    local count = 0
local WikiTagText = ""
    for _, v in ipairs(tbl) do
local Lang = p.getLanguageName()
        if v == nil then
local TagString = p.Translate("{0} Tag");
            return count
local TagData = mw.loadData( "Module:TagData" )
        end
local IconUtils = require('Module:IconUtils')
        count = count + 1
for Count,Tname in pairs(TagsList) do
    end
TagName = TagData.tags[Tname];
    return count
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.getLanguageCode()
-- variable substitution
  local language = mw.language.getContentLanguage()
function p.VarSub(String,Loc)
  local languageCode = language:getCode()
return string.gsub(String,'{0}',Loc)
  return languageCode
end
end


function p.getLanguageName(lang)
function p.VSTranslate(String,Loc)
  local languageName = "English"
return p.VarSub(p.Translate(String),Loc)
  if lang.args[1] == "ru" then languageName = "Russian" end
  if lang.args[1] == "de" then languageName = "German" end
  if lang.args[1] == "fr" then languageName = "French" end
  return languageName
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