|
|
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
| |
Overview
Utility functions that serve any miscellaneous purpose
Functions
get_slot_color
Retrieve's the color of a certain slot/category in any color format (default hex), formerly known in english as Weapon, Vitality, and Spirit, though their unlocalized names are Weapon, Armor, and Tech. Utilized by Template:Color
Parameters
- slot - slot key, options are Weapon, Armor, and Tech
- color_format - color format - Defaults to hex. Valid options are hex, rgb, hsl, cmyk
- no_wrap - (OPTIONAL) - Defaults to false. Set to true to remove prefixes and postfixes of '#' from hex, or 'rgb()', 'hsl()', and 'cmyk()' from the other formats. May be useful for altering the values dynamically
- debug_mode - (OPTIONAL) - Defaults to false. Used mostly for documentation purposes
Examples
See examples at Template:Color