| Latest revision |
Your text |
| Line 26: |
Line 26: |
| --round_to_significant_figures(12345.6789, 3) -- Output: 12300 | | --round_to_significant_figures(12345.6789, 3) -- Output: 12300 |
| --round_to_significant_figures(0.0012345, 2) -- Output: 0.0012 | | --round_to_significant_figures(0.0012345, 2) -- Output: 0.0012 |
| --round_to_significant_figures("-98765", 4) -- Output: -98760 | | --round_to_significant_figures(-98765, 4) -- Output: -98760 |
| --round_to_significant_figures("foobar", 4) -- Output: foobar
| | function p.round_to_sig_fig(num, n) |
| function p.round_to_sig_fig(input_value, n) | |
| num = tonumber(input_value)
| |
| if num == nil then
| |
| return input_value
| |
| end
| |
|
| |
| if num == 0 then | | if num == 0 then |
| return 0 | | return 0 |
| Line 111: |
Line 105: |
| local slot_colors = { | | local slot_colors = { |
| ["Weapon"] = { | | ["Weapon"] = { |
| hex = "c8761c", | | hex = "c97a03", |
| rgb = "200, 118, 28", | | rgb = "201,122,3", |
| hsl = "31, 75%, 45%", | | hsl = "35,97%,40%", |
| cmyk = "0%, 41%, 86%, 22%" | | cmyk = "0%,39%,98%,21%" |
| }, | | }, |
| ["Armor"] = { | | ["Armor"] = { |
| hex = "6f8724", | | hex = "659818", |
| rgb = "198, 248, 114", | | rgb = "101,152,24", |
| hsl = "82, 91%, 71%", | | hsl = "82,73%,34%", |
| cmyk = "20%, 0%, 54%, 3%" | | cmyk = "34%,0%,84%,40%" |
| }, | | }, |
| ["Tech"] = { | | ["Tech"] = { |
| hex = "ba5ca6", | | hex = "c288f0", -- purple |
| rgb = "186, 92, 166", | | rgb = "194,136,240", |
| hsl = "313, 41%, 55%", | | hsl = "276,79%,74%", |
| cmyk = "0%, 51%, 11%, 27%" | | cmyk = "19%,43%,0%,6%" |
| } | | } |
|
| |
|
| Line 194: |
Line 188: |
| -- Remove trailing colon | | -- Remove trailing colon |
| return (str:gsub(":$", "")) | | return (str:gsub(":$", "")) |
| end
| |
|
| |
| function p.process_variables(frame)
| |
| -- Get arguments
| |
| local string_key = frame.args[1] or ''
| |
| local item_name = frame.args[2] or ''
| |
|
| |
| -- Load required modules
| |
| local lang_module = require('Module:Lang')
| |
| local item_data_module = require('Module:ItemData')
| |
|
| |
| -- Get the original text
| |
| local original_text = lang_module.get_string(frame, string_key) or ''
| |
|
| |
| -- Process the text to replace variables with their values
| |
| local processed_text = original_text:gsub("{s:([^}]+)}", function(variable_name)
| |
| -- Get the value from ItemData
| |
| local value = item_data_module.get_prop({args = {item_name, variable_name}})
| |
|
| |
| -- If value exists, remove non-number symbols (but keep + and -)
| |
| if value then
| |
| -- Keep only digits (0-9), plus (+), and minus (-)
| |
| value = value:gsub("[^0-9+.-]", "")
| |
| -- Return empty string if nothing left, otherwise return the filtered value
| |
| return value ~= "" and value or variable_name
| |
| else
| |
| return variable_name -- Fallback to variable name if value not found
| |
| end
| |
| end)
| |
|
| |
| return processed_text
| |
| end
| |
|
| |
| function p.contains(tbl, str)
| |
| for _, v in ipairs(tbl) do
| |
| if v == str then
| |
| return true
| |
| end
| |
| end
| |
| return false
| |
| end
| |
|
| |
| -- Expands multiple of the same template in a single preprocess call
| |
| -- Example:
| |
| -- expand_teampltes(frame, 'HeroIcon', {hero_atlas: {'Abrams'}, hero_bebop: {'Bebop'})
| |
| -- Returns {hero_atlas: <abrams_icon_template>, hero_bebop: <bebop_icon_template>, ...}
| |
| function p.expand_templates(frame, template_name, args_map)
| |
| local keys = {}
| |
| local strings = {}
| |
| for key, args in pairs(args_map) do
| |
| keys[#keys + 1] = key
| |
| end
| |
| for i, key in ipairs(keys) do
| |
| local args = args_map[key]
| |
| local parts = {"{{", template_name, "|"}
| |
| for j, arg in ipairs(args) do
| |
| if j > 1 then parts[#parts + 1] = "|" end
| |
| parts[#parts + 1] = arg
| |
| end
| |
| parts[#parts + 1] = "}}"
| |
| strings[i] = table.concat(parts)
| |
| end
| |
| local expanded = mw.text.split(
| |
| frame:preprocess(table.concat(strings, "\x01")), "\x01"
| |
| )
| |
| local result = {}
| |
| for i, key in ipairs(keys) do
| |
| result[key] = expanded[i]
| |
| end
| |
| return result
| |
| end
| |
|
| |
| -- Helper function
| |
| -- Returns true or false depending if the page exist
| |
| function p.page_exists(title_text)
| |
| local title_obj = mw.title.new(title_text)
| |
| return title_obj and title_obj.exists or false
| |
| end | | end |
|
| |
|
| return p | | return p |