Модуль:Utils: различия между версиями
Материал из Eco - Русская Wiki
[непроверенная версия] | [непроверенная версия] |
Avaren (обсуждение | вклад) Новая страница: «local p = {} -- Trims and parses the args into a table, then returns the table function p.normaliseArgs(frame) local origArgs = frame:getParent().args local...» |
Match EN Version |
||
(не показаны 3 промежуточные версии 1 участника) | |||
Строка 3: | Строка 3: | ||
-- 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 args = {} | |||
for k, v in pairs(origArgs) do | |||
v = mw.text.trim(tostring(v)) | |||
if v ~= '' then | |||
args[k] = v | |||
end | |||
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 | |||
local 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 | |||
---@param name string | |||
---@param size string|nil | |||
---@param bg string|nil | |||
---@param border string|nil | |||
---@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 | |||
size = 'iconNormal' | |||
end | |||
local icon_bg | |||
if bg then | |||
icon_bg = bg | |||
end | |||
local icon_border | |||
if border then | |||
icon_border = border | |||
end | |||
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, -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 | |||
icon_bg = 'iconBlue' | |||
end | |||
if border then | |||
icon_border = border | |||
else | |||
icon_border = 'borderBlue' | |||
end | |||
if size == 'iconNormal' then | |||
icon_container = 'iconContainer' | |||
else | |||
icon_container = 'iconContainerSmall' | |||
end | |||
if not link then | |||
link = '' | |||
else | |||
link = '|link='..link | |||
end | |||
local file = '[[File:' .. image .. '|frameless|class=' .. size .. ' ' .. icon_bg .. link ..']]' | |||
return '<div class="' .. icon_container .. '"><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.link, 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 | end | ||
return p | return p |
Текущая версия от 05:41, 23 августа 2021
Для документации этого модуля может быть создана страница Модуль:Utils/doc
local p = {}
-- 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
local 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
---@param name string
---@param size string|nil
---@param bg string|nil
---@param border string|nil
---@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
size = 'iconNormal'
end
local icon_bg
if bg then
icon_bg = bg
end
local icon_border
if border then
icon_border = border
end
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, -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
icon_bg = 'iconBlue'
end
if border then
icon_border = border
else
icon_border = 'borderBlue'
end
if size == 'iconNormal' then
icon_container = 'iconContainer'
else
icon_container = 'iconContainerSmall'
end
if not link then
link = ''
else
link = '|link='..link
end
local file = '[[File:' .. image .. '|frameless|class=' .. size .. ' ' .. icon_bg .. link ..']]'
return '<div class="' .. icon_container .. '"><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.link, 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