Module:CommonFunctions: Difference between revisions

no edit summary
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 .. '|' .. doRangeText(damage_number) .. '}}'
            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