Module:Traits: Difference between revisions
From Elwiki
No edit summary |
No edit summary Tag: Reverted |
||
Line 29: | Line 29: | ||
end | end | ||
local desc = { | local desc = {} | ||
-- Extra effects | -- Extra effects | ||
local counts = {} | local counts = {} | ||
local desc_arg = nil; | local desc_arg = nil; | ||
local header_data = { | local header_data = {} | ||
for i = 1, 2, 1 do | for i = 1, 2, 1 do | ||
if (i == 1) then | if (i == 1) then | ||
Line 53: | Line 47: | ||
if desc_arg ~= nil then | if desc_arg ~= nil then | ||
local | traits[i] = trim(traits[i]); | ||
local data_split = split(desc_arg, ';'); | |||
local headers; | |||
local data; | |||
if (#data_split >= 2) then | |||
headers = split(data_split[1]); | |||
data = data_split[2]; | |||
else | |||
data = data_split[1]; | |||
-- Generate headers based on trait. | |||
if (traits[i] == 'Light' or traits[i] == 'Critical') then | |||
headers = {[1] = 'MP Usage'} | |||
elseif (traits[i] == 'Heavy' or traits[i] == 'Haste' or traits[i] == 'Regenerating (2)' or traits[i] == 'Ruthless' or traits[i] == 'Powerful') then | |||
headers = {[1] = 'Cooldown'} | |||
elseif (traits[i] == 'Reversed') then | |||
headers = {[1] = 'Cooldown', [2] = 'MP Usage'} | |||
elseif (traits[i] == 'Regenerating (1)') then | |||
headers = {[1] = 'MP Recovery'} | |||
elseif (traits[i] == 'Killing Blow (1)') then | |||
headers = {[1] = 'Duration'} | |||
end | |||
end | |||
for k, v in spairs(headers) do | for k, v in spairs(headers) do | ||
header_data[i] = {} | |||
table.insert(header_data[i], v) | table.insert(header_data[i], v) | ||
end | end | ||
Line 66: | Line 83: | ||
local index = 1 | local index = 1 | ||
while index <= #headers do | while index <= #headers do | ||
desc[i][headers[index]] = data[index] | desc[i] = {} | ||
desc[i][index] = {} | |||
desc[i][index][headers[index]] = data[index] | |||
index = index + 1 | index = index + 1 | ||
end | end | ||
Line 99: | Line 118: | ||
thead:tag('th'):attr('colspan', counts[1]):wikitext(traits[1] .. ' ' .. skill) | thead:tag('th'):attr('colspan', counts[1]):wikitext(traits[1] .. ' ' .. skill) | ||
thead:tag('th'):attr('colspan', counts[2]):wikitext(traits[2] .. ' ' .. skill) | thead:tag('th'):attr('colspan', counts[2]):wikitext(traits[2] .. ' ' .. skill) | ||
local no_desc; | |||
local tr_2 = newtr(); | local tr_2 = newtr(); | ||
for i = 1, 2, 1 do | for i = 1, 2, 1 do | ||
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil; | |||
tr_2:tag('th'):wikitext('Attribute Effect') | tr_2:tag('th'):wikitext('Attribute Effect') | ||
if ( | if not (no_desc) then | ||
for k, v in | for k, v in ipairs(header_data[i]) do | ||
v = frame:preprocess(v); | v = frame:preprocess(v); | ||
tr_2:tag('th'):wikitext(v) | tr_2:tag('th'):wikitext(v) | ||
Line 114: | Line 136: | ||
local tr = trait_table:tag('tr') | local tr = trait_table:tag('tr') | ||
for i = 1, 2, 1 do | for i = 1, 2, 1 do | ||
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil; | |||
tr:tag('td'):wikitext(frame:expandTemplate{ | tr:tag('td'):wikitext(frame:expandTemplate{ | ||
title = 'SkillText', | title = 'SkillText', | ||
args = {traits[i], effects[i][1], effects[i][2]} | args = {traits[i], effects[i][1], effects[i][2]} | ||
}) | }) | ||
for k, v in pairs(desc[i]) do | if not (no_desc) then | ||
for k, v in ipairs(desc[i]) do | |||
for k2, v2 in pairs(desc[i][k]) do | |||
tr:tag('td'):wikitext(frame:preprocess(v2)) | |||
end | |||
end | |||
end | end | ||
end | end |
Revision as of 14:37, 24 August 2022
Documentation for this module may be created at Module:Traits/doc
require('Module:CommonFunctions')
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Main process
function p.main(frame)
local args = getArgs(frame);
-- Argument init
local traits = args[3]
if (traits == nil) then
traits = '-, -'
end
traits = split(traits);
local skill = args[2]
-- Attribute effect
local effects = {
[1] = {},
[2] = {}
}
args.effects1 = args.effects1 or args[4]
args.effects2 = args.effects2 or args[5]
if args.effects1 ~= nil then
effects[1] = split(args.effects1)
end
if args.effects2 ~= nil then
effects[2] = split(args.effects2)
end
local desc = {}
-- Extra effects
local counts = {}
local desc_arg = nil;
local header_data = {}
for i = 1, 2, 1 do
if (i == 1) then
desc_arg = args[6]
else
desc_arg = args[7]
end
if desc_arg == nil then
desc_arg = args['desc' .. i]
end
if desc_arg ~= nil then
traits[i] = trim(traits[i]);
local data_split = split(desc_arg, ';');
local headers;
local data;
if (#data_split >= 2) then
headers = split(data_split[1]);
data = data_split[2];
else
data = data_split[1];
-- Generate headers based on trait.
if (traits[i] == 'Light' or traits[i] == 'Critical') then
headers = {[1] = 'MP Usage'}
elseif (traits[i] == 'Heavy' or traits[i] == 'Haste' or traits[i] == 'Regenerating (2)' or traits[i] == 'Ruthless' or traits[i] == 'Powerful') then
headers = {[1] = 'Cooldown'}
elseif (traits[i] == 'Reversed') then
headers = {[1] = 'Cooldown', [2] = 'MP Usage'}
elseif (traits[i] == 'Regenerating (1)') then
headers = {[1] = 'MP Recovery'}
elseif (traits[i] == 'Killing Blow (1)') then
headers = {[1] = 'Duration'}
end
end
for k, v in spairs(headers) do
header_data[i] = {}
table.insert(header_data[i], v)
end
data = split(data);
counts[i] = 1 + #headers;
local index = 1
while index <= #headers do
desc[i] = {}
desc[i][index] = {}
desc[i][index][headers[index]] = data[index]
index = index + 1
end
end
end
-- Main block
local trait_table = mw.html.create('table'):attr({
['cellpadding'] = '5',
['border'] = '1'
}):css({
['border-collapse'] = 'collapse',
['text-align'] = 'center'
})
-- Get table head color
local function color(char)
char = char or args[1]
return frame:expandTemplate{
title = 'ColorSel',
args = {'CharLight', char}
}:gsub("#", "#")
end
function newtr()
return trait_table:tag('tr'):css('background-color', color())
end
-- Spawn headers
local thead = newtr()
thead:tag('th'):attr('colspan', counts[1]):wikitext(traits[1] .. ' ' .. skill)
thead:tag('th'):attr('colspan', counts[2]):wikitext(traits[2] .. ' ' .. skill)
local no_desc;
local tr_2 = newtr();
for i = 1, 2, 1 do
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil;
tr_2:tag('th'):wikitext('Attribute Effect')
if not (no_desc) then
for k, v in ipairs(header_data[i]) do
v = frame:preprocess(v);
tr_2:tag('th'):wikitext(v)
end
end
end
-- Spawn information
local tr = trait_table:tag('tr')
for i = 1, 2, 1 do
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil;
tr:tag('td'):wikitext(frame:expandTemplate{
title = 'SkillText',
args = {traits[i], effects[i][1], effects[i][2]}
})
if not (no_desc) then
for k, v in ipairs(desc[i]) do
for k2, v2 in pairs(desc[i][k]) do
tr:tag('td'):wikitext(frame:preprocess(v2))
end
end
end
end
-- Output point
return tostring(trait_table);
end
return p