м (1 версия импортирована) |
TigerMehMat (обсуждение | вклад) Нет описания правки |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 41: | Строка 41: | ||
count = 1 |
count = 1 |
||
if printCategories then |
if printCategories then |
||
− | table.insert(categories,'[[ |
+ | table.insert(categories,'[[Категория:Создается с '..res..']]') |
end |
end |
||
end |
end |
||
Строка 51: | Строка 51: | ||
roundedCnt = math.ceil(bcnt) |
roundedCnt = math.ceil(bcnt) |
||
if roundedCnt ~= bcnt then |
if roundedCnt ~= bcnt then |
||
− | roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' |
+ | roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' если быть точным">'..roundedCnt..'</span>' |
end |
end |
||
table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres)) |
table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres)) |
||
Строка 59: | Строка 59: | ||
collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"' |
collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"' |
||
end |
end |
||
− | baseResourcesDiv = '<div style="display:inline-block;margin:0.2em 0.2em 0;vertical-align:top;text-align:left"'..collapsibleBaseClassH..'>\'\'\' |
+ | baseResourcesDiv = '<div style="display:inline-block;margin:0.2em 0.2em 0;vertical-align:top;text-align:left"'..collapsibleBaseClassH..'>\'\'\'Базовые Ингридиенты\'\'\' <div'..collapsibleBaseClassC..'>\n{|\n|-\n| align="right" | '..table.concat(baseResourcesList,'\n|-\n| align="right" | ')..'\n|}\n</div></div>' |
end |
end |
||
local collapsibleButton = '' |
local collapsibleButton = '' |
||
Строка 68: | Строка 68: | ||
table.insert(collapsibles,'mw-customtoggle-res'..i) |
table.insert(collapsibles,'mw-customtoggle-res'..i) |
||
end |
end |
||
− | collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link"> |
+ | collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link">Развернуть</span>]</span>' |
else |
else |
||
-- base resources are the same as displayed resources, so don't show them additionally |
-- base resources are the same as displayed resources, so don't show them additionally |
||
Строка 74: | Строка 74: | ||
end |
end |
||
end |
end |
||
− | return '<div style="display:inline-block;margin:0.2em 1em 0.2em 0;vertical-align:top;text-align:left">\'\'\' |
+ | return '<div style="display:inline-block;margin:0.2em 1em 0.2em 0;vertical-align:top;text-align:left">\'\'\'Список ресурсов\'\'\''..collapsibleButton..'\n\n'..table.concat(resourceList,'\n')..'</div>'..baseResourcesDiv..table.concat(categories) |
end |
end |
||
Строка 80: | Строка 80: | ||
local dlclink = require('Module:DLCLink').link |
local dlclink = require('Module:DLCLink').link |
||
local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' ) |
local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' ) |
||
+ | local aliases = mw.loadData('Module:ResourceBreakdown/aliases') |
||
+ | local aliasesOut = {} |
||
local baseResources = {} |
local baseResources = {} |
||
local recursiveReturned = {} |
local recursiveReturned = {} |
||
Строка 85: | Строка 87: | ||
local collapsibleClass = '' |
local collapsibleClass = '' |
||
local iconsize = '20' |
local iconsize = '20' |
||
+ | |||
+ | -- Returned aliasesOut |
||
+ | for ind1,res1 in pairs(aliases) do |
||
+ | aliasesOut[res1] = ind1 |
||
+ | end |
||
+ | -- end Returned aliasesOut |
||
+ | |||
if indent > 0 then |
if indent > 0 then |
||
style = 'border-left:1px solid grey;margin-left:1.6em;' |
style = 'border-left:1px solid grey;margin-left:1.6em;' |
||
Строка 100: | Строка 109: | ||
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>' |
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>' |
||
end |
end |
||
+ | if aliasesOut[resource] ~= nil then |
||
− | |||
+ | resource = aliasesOut[resource] |
||
⚫ | |||
+ | end |
||
⚫ | |||
-- if resource is combined, list components |
-- if resource is combined, list components |
||
− | if breakdowns[resource] ~= nil then |
+ | if breakdowns[aliases[resource]] ~= nil then |
− | for res,cnt in pairs(breakdowns[resource]) do |
+ | for res,cnt in pairs(breakdowns[aliases[resource]]) do |
recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId) |
recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId) |
||
collapsibleId = recursiveReturned[3] |
collapsibleId = recursiveReturned[3] |
Версия от 11:57, 26 апреля 2019
Для документации этого модуля может быть создана страница Модуль:ResourceBreakdown/doc
local p = {}
function p.breakdownList( f )
local dlclink = require('Module:DLCLink').link
local args = f:getParent().args
local resourceList = {}
local baseResources = {}
local showBaseIngredients, collapsibleIngredients, collapsibleBaseIngredients = true, false, false
local printCategories, categories = false, {}
if args.showBaseIngredients ~= nil and args.showBaseIngredients == 'false' then
showBaseIngredients = false
end
if args.collapsibleIngredients ~= nil and args.collapsibleIngredients == 'true' then
collapsibleIngredients = true
end
if args.collapsibleBaseIngredients ~= nil and args.collapsibleBaseIngredients == 'true' then
collapsibleBaseIngredients = true
end
if args.printCategories ~= nil and args.printCategories == 'true' then
printCategories = true
end
local count, collapsibleId = 1, 1
for _,res in ipairs(args) do
if string.len(res) > 0 then
if tonumber(res) ~= nil then
count = tonumber(res)
else
local returnTable = p.breakdown(res,count,0,collapsibleIngredients,collapsibleId)
collapsibleId = returnTable[3]
table.insert(resourceList,returnTable[1])
-- insert base resources
for bres,bcnt in pairs(returnTable[2]) do
if baseResources[bres] == nil then
baseResources[bres] = 0
end
-- add count to baseresource
baseResources[bres] = baseResources[bres] + bcnt
end
-- set resource count default to 1 (if no number is given)
count = 1
if printCategories then
table.insert(categories,'[[Категория:Создается с '..res..']]')
end
end
end
end
local baseResourcesList, baseResourcesDiv, roundedCnt = {}, '', ''
if showBaseIngredients then
for bres,bcnt in pairs(baseResources) do
roundedCnt = math.ceil(bcnt)
if roundedCnt ~= bcnt then
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' если быть точным">'..roundedCnt..'</span>'
end
table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres))
end
local collapsibleBaseClassH, collapsibleBaseClassC = '',''
if collapsibleBaseIngredients then
collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"'
end
baseResourcesDiv = '<div style="display:inline-block;margin:0.2em 0.2em 0;vertical-align:top;text-align:left"'..collapsibleBaseClassH..'>\'\'\'Базовые Ингридиенты\'\'\' <div'..collapsibleBaseClassC..'>\n{|\n|-\n| align="right" | '..table.concat(baseResourcesList,'\n|-\n| align="right" | ')..'\n|}\n</div></div>'
end
local collapsibleButton = ''
if collapsibleIngredients then
if collapsibleId > 1 then
local collapsibles = {}
for i=1,(collapsibleId-1) do
table.insert(collapsibles,'mw-customtoggle-res'..i)
end
collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link">Развернуть</span>]</span>'
else
-- base resources are the same as displayed resources, so don't show them additionally
baseResourcesDiv = ''
end
end
return '<div style="display:inline-block;margin:0.2em 1em 0.2em 0;vertical-align:top;text-align:left">\'\'\'Список ресурсов\'\'\''..collapsibleButton..'\n\n'..table.concat(resourceList,'\n')..'</div>'..baseResourcesDiv..table.concat(categories)
end
function p.breakdown(resource,count,indent,collapsible,collapsibleId)
local dlclink = require('Module:DLCLink').link
local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' )
local aliases = mw.loadData('Module:ResourceBreakdown/aliases')
local aliasesOut = {}
local baseResources = {}
local recursiveReturned = {}
local style, fontweight = '', ''
local collapsibleClass = ''
local iconsize = '20'
-- Returned aliasesOut
for ind1,res1 in pairs(aliases) do
aliasesOut[res1] = ind1
end
-- end Returned aliasesOut
if indent > 0 then
style = 'border-left:1px solid grey;margin-left:1.6em;'
if collapsible and indent == 1 then
collapsibleClass = ' class="mw-collapsible mw-collapsed" id="mw-customcollapsible-res'..collapsibleId..'"'
collapsibleId = collapsibleId+1
end
else
fontweight = '\'\'\''
iconsize = '25'
end
local roundedCnt = math.ceil(count)
if roundedCnt ~= count then
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>'
end
if aliasesOut[resource] ~= nil then
resource = aliasesOut[resource]
end
local resourceBreakdown = {'<div style="'..style..'padding-left:5px"'..collapsibleClass..' data-wikark="craft">'..fontweight..roundedCnt..' × [[File:'..string.gsub(resource,':',' ')..'.png|'..iconsize..'px]] '..dlclink(resource)..fontweight}
-- if resource is combined, list components
if breakdowns[aliases[resource]] ~= nil then
for res,cnt in pairs(breakdowns[aliases[resource]]) do
recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId)
collapsibleId = recursiveReturned[3]
table.insert(resourceBreakdown,recursiveReturned[1])
-- insert base resources
for bres,bcnt in pairs(recursiveReturned[2]) do
if baseResources[bres] == nil then
baseResources[bres] = 0
end
-- add count to baseresource
baseResources[bres] = baseResources[bres] + bcnt
end
end
else
-- no breakdown-data found, assuming it's a base resource, add it to basecount
if baseResources[resource] == nil then
baseResources[resource] = 0
end
-- add count to baseresource
baseResources[resource] = baseResources[resource] + count
end
return {table.concat(resourceBreakdown,'\n')..'</div>',baseResources,collapsibleId}
end
return p