ElEditors, Interface administrators, Administrators
70,975
edits
No edit summary |
No edit summary |
||
(24 intermediate revisions by 2 users not shown) | |||
Line 63: | Line 63: | ||
return keys[i], t[keys[i]] | return keys[i], t[keys[i]] | ||
end | end | ||
end | |||
end | |||
function spairsByLength(t) | |||
local keys = {} | |||
for k in pairs(t) do keys[#keys + 1] = k end | |||
table.sort(keys, function(a, b) return #a == #b and a < b or #a < #b end) | |||
local i = 0 | |||
return function() | |||
i = i + 1 | |||
return keys[i], t[keys[i]] | |||
end | end | ||
end | end | ||
Line 110: | Line 121: | ||
end | end | ||
return result; | return result; | ||
end | |||
-- Implement templating string with slots. | |||
function fillTemplate(tpl, data) | |||
tpl = tpl or '' | |||
data = data or {} | |||
return string.gsub(tpl, "%{(%d+)%}", (function(slotIndex) | |||
return data[tonumber(slotIndex)] or ('{' .. slotIndex .. '}') | |||
end)) | |||
end | end | ||
Line 228: | Line 249: | ||
end | end | ||
function link(page, text) | function link(page, text, prefix, suffix, dolink) | ||
return '[[' .. page .. '|' .. (text or page) .. ']]' | local suffixString = ((suffix and suffix ~= "") and (' ' .. suffix) or '') | ||
local prefixString = ((prefix and prefix ~= "") and (prefix .. ' ') or '') | |||
if dolink == false then | |||
return prefixString .. (text or page) .. suffixString | |||
end | |||
return prefixString .. '[[' .. page .. '|' .. (text or page) .. ']]' .. suffixString | |||
end | end | ||
Line 248: | Line 275: | ||
function formatDamage(number) | function formatDamage(number) | ||
local formattedDamage = number > 0 and (formatnum(math.round(number, 2)) .. '%') or ' | local formattedDamage = number > 0 and (formatnum(math.round(number, 2)) .. '%') or 'N/A' | ||
return formattedDamage | return formattedDamage | ||
end | end | ||
function doVariables(frame, input) | function doVariables(frame, input, prefix) | ||
local s = '' | local s = '' | ||
for mode, mode_content in pairs(input) do | for mode, mode_content in pairs(input) do | ||
for damage_name, damage_number in pairs(mode_content) do | for damage_name, damage_number in pairs(mode_content) do | ||
s = s .. '{{#vardefine:' .. damage_name .. '|' .. | damage_number = doRangeText(damage_number) | ||
local is_range = string.find(damage_number, '~') | |||
s = s .. '{{#vardefine:' .. (prefix and prefix .. '_' or '') .. (is_range and 'range_' or '') .. damage_name .. (mode ~= 'PvE' and ('_' .. string.lower(mode)) or '') .. '|' .. damage_number .. '}}' | |||
end | end | ||
end | end | ||
return frame:preprocess(s) | return frame:preprocess(s) | ||
end | |||
function table.fuse(t1, t2) | |||
for k, v in pairs(t2) do | |||
t1[k] = v | |||
end | |||
return t1 | |||
end | end |