Module:Utilities: Difference between revisionsGive feedback
Jump to navigation
Jump to search
Blanked the page Tag: Blanking |
m Reverted edit by 149.28.42.29 (talk) to last revision by Sur Tag: Rollback |
||
| Line 1: | Line 1: | ||
local p = {}; | |||
-- "Default %hero_name% Build" --> "Default Build", or "Default Build" with -1 or +1 for spaces | |||
function p.remove_var(input, spaces) | |||
-- spaces = | |||
-- -1: also remove prefixed character | |||
-- 0 or nil: no character | |||
-- 1: postfixed character | |||
-- Remove text between % and % including the % | |||
local result = input:gsub("%%.-%%", "") | |||
-- If spaces == -1, remove the character before the removed section | |||
if spaces ~= nil and spaces == -1 then | |||
result = result:gsub("%s+%s*", "", 1) -- Removes the preceding space or character | |||
-- If spaces == 1, remove the character after the removed section | |||
elseif spaces ~= nil and spaces == 1 then | |||
result = result:gsub("%s+", "", 1) -- Removes the postfixed space | |||
end | |||
-- Trim any extra whitespace | |||
result = result:gsub("^%s*(.-)%s*$", "%1") | |||
return result | |||
end | |||
--round_to_significant_figures(12345.6789, 3) -- Output: 12300 | |||
--round_to_significant_figures(0.0012345, 2) -- Output: 0.0012 | |||
--round_to_significant_figures(-98765, 4) -- Output: -98760 | |||
function p.round_to_sig_fig(num, n) | |||
if num == 0 then | |||
return 0 | |||
end | |||
-- Calculate the order of magnitude (log10 returns the logarithm base 10) | |||
local order_of_magnitude = math.floor(math.log10(math.abs(num))) | |||
-- Scale the number to move the significant digits into the integer part | |||
local scale = math.pow(10, n - 1 - order_of_magnitude) | |||
-- Round the scaled number and then scale it back | |||
local rounded_num = math.floor(num * scale + 0.5) / scale | |||
return rounded_num | |||
end | |||
-- If the image exists exists, return it back enclosed in brackets, else return a blank string | |||
function p.get_image_file(image_file_name, px, link) | |||
if (px == nil) then px = 15 end --default | |||
if (link == nil) then link = "" end --default | |||
image_file = mw.title.new(image_file_name) | |||
if image_file and image_file.exists then | |||
image_file_name = "[[" .. image_file_name .. "|" .. px .. "px|link=" .. link .. "]]" | |||
else | |||
image_file_name = '' | |||
end | |||
return image_file_name | |||
end | |||
function p.string_endswith(str, ending) | |||
return ending == "" or str:sub(-#ending) == ending | |||
end | |||
-- Add a space before each capital letter that is not the first character | |||
-- i.e. BulletVelocity > Bullet Velocity | |||
-- when a string doesn't have localization, it can outputted as add_space_before_cap(unlocalized_key) | |||
function p.add_space_before_cap(str) | |||
local result = str:gsub("(%l)(%u)", "%1 %2") | |||
return result:gsub("(%u)(%u%l)", " %1%2") | |||
end | |||
--Much room for expansion here, currently just replaces spaces with underscores essentially | |||
--so that it can be used in a url directly | |||
p.url_encode = function(str) | |||
if type(str) == 'table' and str.args then | |||
frame = str | |||
str = frame.args[1] | |||
end | |||
if (str == nil) then return "First parameter must be a string" end | |||
if (str == '') then return '' end | |||
-- Just replaces spaces with %20 | |||
local result = string.gsub(str, " ", "%%20") | |||
return result --must assign as local result first to grab just first returned result | |||
end | |||
--Creates a deepCopy of a table | |||
function p.deep_copy(orig) | |||
local orig_type = type(orig) | |||
local copy | |||
if orig_type == "table" then | |||
copy = {} | |||
for key, value in pairs(orig) do | |||
copy[p.deep_copy(key)] = p.deep_copy(value) | |||
end | |||
setmetatable(copy, p.deep_copy(getmetatable(orig))) | |||
else -- For non-table types, simply return the original value | |||
copy = orig | |||
end | |||
return copy | |||
end | |||
-- Hash for color values | |||
local slot_colors = { | |||
["Weapon"] = { | |||
hex = "c97a03", | |||
rgb = "201,122,3", | |||
hsl = "35,97%,40%", | |||
cmyk = "0%,39%,98%,21%" | |||
}, | |||
["Armor"] = { | |||
hex = "659818", | |||
rgb = "101,152,24", | |||
hsl = "82,73%,34%", | |||
cmyk = "34%,0%,84%,40%" | |||
}, | |||
["Tech"] = { | |||
hex = "c288f0", -- purple | |||
rgb = "194,136,240", | |||
hsl = "276,79%,74%", | |||
cmyk = "19%,43%,0%,6%" | |||
} | |||
} | |||
-- Hash for format configuration | |||
local color_formats = { | |||
hex = { | |||
prefix = "#", | |||
postfix = "" | |||
}, | |||
rgb = { | |||
prefix = "rgb(", | |||
postfix = ")" | |||
}, | |||
hsl = { | |||
prefix = "hsl(", | |||
postfix = ")" | |||
}, | |||
cmyk = { | |||
prefix = "cmyk(", | |||
postfix = ")" | |||
} | |||
} | |||
function p.get_slot_color(slot, color_format, no_wrap, debug_mode) | |||
if type(slot) == 'table' and slot.args then | |||
frame = slot | |||
slot = frame.args[1] | |||
color_format = frame.args[2] | |||
no_wrap = frame.args["no_wrap"] | |||
debug_mode = frame.args["debug_mode"] | |||
end | |||
-- Validate arguments | |||
if slot == nil or slot == "" then return "'slot' parameter must be provided" end | |||
if color_format == nil or color_format == "" then color_format = "hex" end | |||
if no_wrap == nil or no_wrap == 'false' or no_wrap == "" then no_wrap = false else no_wrap = true end | |||
if debug_mode == nil or debug_mode == 'false' or debug_mode == "" then debug_mode = false end | |||
local slot_data = slot_colors[slot] | |||
if slot_data == nil then return "slot '" .. slot .. "' was not in slots_data map" end | |||
--Retrieve the color | |||
local color = slot_data[color_format] | |||
if color == nil then | |||
return "color_format '" .. color_format .. "' is not in slots_data map" | |||
end | |||
-- Add prefix and postfix wrapping | |||
if not no_wrap then | |||
-- Retrieve prefix and postfix | |||
prefix = color_formats[color_format]['prefix'] | |||
postfix = color_formats[color_format]['postfix'] | |||
-- Add to color | |||
color = prefix .. color .. postfix | |||
end | |||
-- Return result | |||
if debug_mode then | |||
return " " .. color | |||
end | |||
return color | |||
end | |||
return p | |||