Difference between revisions of "Module:Sandbox/Arcangelus"
Arcangelus (talk | contribs) (Testing lua module sandbox. I "think" this is how module sandboxes are set up.) |
Arcangelus (talk | contribs) m |
||
(63 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | local | + | --[[ |
− | + | -- A proper solution needs to consider PC, PlayStation 4 and Xbox One. Maybe Steam deck as well. | |
− | function | + | |
− | + | -- This solution uses images: https://splatoonwiki.org/wiki/Module:Button | |
+ | -- Switch: https://splatoonwiki.org/w/index.php?title=Special%3APrefixIndex&prefix=Switch_Icon_&namespace=6 | ||
+ | -- | ||
+ | -- Possible to get icons from wikipedia, if needed. | ||
+ | -- For Xbox: | ||
+ | -- https://commons.wikimedia.org/wiki/Category:Xbox_controller_buttons | ||
+ | -- https://commons.wikimedia.org/wiki/Category:Xbox_Series_Controller_icons | ||
+ | -- For PlayStation 4: | ||
+ | -- https://commons.wikimedia.org/wiki/Category:PlayStation_controller_buttons | ||
+ | -- | ||
+ | -- Other possible sources (Creative Commons Attribution): | ||
+ | -- https://zacksly.itch.io/ps5-button-icons-and-controls ; https://zacksly.itch.io/xbox-series-button-icons-and-controls | ||
+ | |||
+ | -- Below this line was taken from https://en.wikipedia.org/wiki/Module:Key. As the CSS was was not copied ovee, this is incomplete and only kinda works. Not properly implemented as I'm not happy on the handling of console inputs (controller) | ||
+ | -- Aditionally, there seems to be some kind of issue with dark mode. See here to avoid it: https://www.mediawiki.org/wiki/Recommendations_for_night_mode_compatibility_on_Wikimedia_wikis?minervanightmode=1 ]] | ||
+ | -------------------------------------------------- | ||
+ | -- This module implements {{key press}}. | ||
+ | |||
+ | local kbdPrefix = '<kbd class="keyboard-key nowrap">' | ||
+ | |||
+ | local kbdSuffix = '</kbd>' | ||
+ | |||
+ | local keyText = { | ||
+ | ['caps lock'] = '⇪ Caps Lock', | ||
+ | ['[[caps lock]]'] = '⇪ [[Caps Lock]]', | ||
+ | ['shift'] = '⇧ Shift', | ||
+ | ['[[shift key|shift]]'] = '⇧ [[Shift key|Shift]]', | ||
+ | ['enter'] = '↵ Enter', | ||
+ | ['[[enter key|enter]]'] = '↵ [[Enter key|Enter]]', | ||
+ | ['cmd'] = '⌘ Cmd', | ||
+ | ['[[command key|cmd]]'] = '⌘ [[Command key|Cmd]]', | ||
+ | ['command'] = '⌘ Command', | ||
+ | ['[[command key|command]]'] = '⌘ [[Command key|Command]]', | ||
+ | ['opt'] = '⌥ Opt', | ||
+ | ['[[option key|opt]]'] = '⌥ [[Option key|Opt]]', | ||
+ | ['option'] = '⌥ Option', | ||
+ | ['[[option key|option]]'] = '⌥ [[Option key|Option]]', | ||
+ | ['tab'] = 'Tab ↹', | ||
+ | ['[[tab key|tab]]'] = '[[Tab key|Tab]] ↹', | ||
+ | ['backspace'] = '← Backspace', | ||
+ | ['[[backspace]]'] = '← [[Backspace]]', | ||
+ | ['win'] = '⊞ Win', | ||
+ | ['[[windows key|win]]'] = '⊞ [[Windows key|Win]]', | ||
+ | ['menu'] = '≣ Menu', | ||
+ | ['[[menu key|menu]]'] = '≣ [[Menu key|Menu]]', | ||
+ | ['up'] = '↑', | ||
+ | ['[[arrow keys|up]]'] = '[[Arrow keys|↑]]', | ||
+ | ['down'] = '↓', | ||
+ | ['[[arrow keys|down]]'] = '[[Arrow keys|↓]]', | ||
+ | ['left'] = '←', | ||
+ | ['[[arrow keys|left]]'] = '[[Arrow keys|←]]', | ||
+ | ['right'] = '→', | ||
+ | ['[[arrow keys|right]]'] = '[[Arrow keys|→]]', | ||
+ | ['asterisk'] = '*', | ||
+ | ['hash'] = '#', | ||
+ | ['[[#]]'] = '[[Number sign|#]]', | ||
+ | ['colon'] = ':', | ||
+ | ['[[:]]'] = '[[Colon (punctuation)|:]]', | ||
+ | ['pipe'] = '|', | ||
+ | ['[[|]]'] = '[[Pipe symbol||]]', | ||
+ | ['semicolon'] = ';', | ||
+ | ['[[;]]'] = '[[Semi-colon|;]]', | ||
+ | ['equals'] = '=', | ||
+ | |||
+ | -- Left & right analog sticks. | ||
+ | ['l up'] = 'L↑', | ||
+ | ['l down'] = 'L↓', | ||
+ | ['l left'] = 'L←', | ||
+ | ['l right'] = 'L→', | ||
+ | ['l ne'] = 'L↗', | ||
+ | ['l se'] = 'L↘', | ||
+ | ['l nw'] = 'L↖', | ||
+ | ['l sw'] = 'L↙', | ||
+ | |||
+ | ['r up'] = 'R↑', | ||
+ | ['r down'] = 'R↓', | ||
+ | ['r left'] = 'R←', | ||
+ | ['r right'] = 'R→', | ||
+ | ['r ne'] = 'R↗', | ||
+ | ['r se'] = 'R↘', | ||
+ | ['r nw'] = 'R↖', | ||
+ | ['r sw'] = 'R↙', | ||
+ | |||
+ | -- PlayStation. | ||
+ | ['ex'] = '×', | ||
+ | ['circle'] = '○', | ||
+ | ['square'] = '□', | ||
+ | ['triangle'] = '△', | ||
+ | |||
+ | -- Nintendo 64 and GameCube. | ||
+ | ['c up'] = 'C↑', | ||
+ | ['c down'] = 'C↓', | ||
+ | ['c left'] = 'C←', | ||
+ | ['c right'] = 'C→', | ||
+ | ['c ne'] = 'C↗', | ||
+ | ['c se'] = 'C↘', | ||
+ | ['c nw'] = 'C↖', | ||
+ | ['c sw'] = 'C↙', | ||
+ | } | ||
+ | |||
+ | local keyAlias = { | ||
+ | -- ['alternate name for key (alias)'] = 'name for key used in key table' | ||
+ | ['[[cmd key|cmd]]'] = '[[command key|cmd]]', | ||
+ | ['[[cmd key|command]]'] = '[[command key|command]]', | ||
+ | ['[[opt key|opt]]'] = '[[option key|opt]]', | ||
+ | ['[[option key]]'] = '[[option key|option]]', | ||
+ | ['[[opt key|option]]'] = '[[option key|option]]', | ||
+ | ['[[win key|win]]'] = '[[windows key|win]]', | ||
+ | ['*'] = 'asterisk', | ||
+ | ['#'] = 'hash', | ||
+ | [':'] = 'colon', | ||
+ | [';'] = 'semicolon', | ||
+ | ['l-up'] = 'l up', | ||
+ | ['l-down'] = 'l down', | ||
+ | ['l-left'] = 'l left', | ||
+ | ['l-right'] = 'l right', | ||
+ | ['l-ne'] = 'l ne', | ||
+ | ['l-se'] = 'l se', | ||
+ | ['l-nw'] = 'l nw', | ||
+ | ['l-sw'] = 'l sw', | ||
+ | ['r-up'] = 'r up', | ||
+ | ['r-down'] = 'r down', | ||
+ | ['r-left'] = 'r left', | ||
+ | ['r-right'] = 'r right', | ||
+ | ['r-ne'] = 'r ne', | ||
+ | ['r-se'] = 'r se', | ||
+ | ['r-nw'] = 'r nw', | ||
+ | ['r-sw'] = 'r sw', | ||
+ | ['ps x'] = 'ex', | ||
+ | ['ps c'] = 'circle', | ||
+ | ['ps s'] = 'square', | ||
+ | ['ps t'] = 'triangle', | ||
+ | ['c-up'] = 'c up', | ||
+ | ['c-down'] = 'c down', | ||
+ | ['c-left'] = 'c left', | ||
+ | ['c-right'] = 'c right', | ||
+ | ['c-ne'] = 'c ne', | ||
+ | ['c-se'] = 'c se', | ||
+ | ['c-nw'] = 'c nw', | ||
+ | ['c-sw'] = 'c sw', | ||
+ | } | ||
+ | |||
+ | local Collection = {} | ||
+ | Collection.__index = Collection | ||
+ | do | ||
+ | function Collection:add(item) | ||
+ | if item ~= nil then | ||
+ | self.n = self.n + 1 | ||
+ | self[self.n] = item | ||
+ | end | ||
+ | end | ||
+ | function Collection:join(sep) | ||
+ | return table.concat(self, sep) | ||
+ | end | ||
+ | function Collection:sort(comp) | ||
+ | table.sort(self, comp) | ||
+ | end | ||
+ | function Collection.new() | ||
+ | return setmetatable({n = 0}, Collection) | ||
+ | end | ||
end | end | ||
− | + | ||
− | return | + | local function keyPress(args) |
+ | local chainNames = { | ||
+ | 'chain first', | ||
+ | 'chain second', | ||
+ | 'chain third', | ||
+ | 'chain fourth', | ||
+ | 'chain fifth', | ||
+ | 'chain sixth', | ||
+ | 'chain seventh', | ||
+ | 'chain eighth', | ||
+ | 'chain ninth', | ||
+ | } | ||
+ | local result = Collection.new() | ||
+ | local chainDefault = args.chain or '+' | ||
+ | for i, id in ipairs(args) do | ||
+ | if i > 1 then | ||
+ | result:add(args[chainNames[i - 1]] or chainDefault) | ||
+ | end | ||
+ | local lc = id:lower() | ||
+ | local text = keyText[lc] or keyText[keyAlias[lc]] or id | ||
+ | result:add(kbdPrefix .. text .. kbdSuffix) | ||
+ | end | ||
+ | return result:join() | ||
+ | --mw.getCurrentFrame():extensionTag{ | ||
+ | -- name = 'templatestyles', args = { src = 'Template:Key press/styles.css'} | ||
+ | -- }..result:join() | ||
+ | |||
+ | end | ||
+ | |||
+ | local function keypress(frame) | ||
+ | -- Called by "{{key press|...}}". | ||
+ | -- Using the template doubles the post‐expand include size. | ||
+ | return keyPress(frame:getParent().args) | ||
+ | end | ||
+ | |||
+ | local function press(frame) | ||
+ | -- Called by "{{#invoke:key|press|...}}". | ||
+ | return keyPress(frame.args) | ||
+ | end | ||
+ | |||
+ | return { | ||
+ | keypress = keypress, | ||
+ | press = press, | ||
+ | } |
Latest revision as of 20:50, 21 August 2024
Welcome to the RimWorld Wiki sandbox!
This sandbox is where you can experiment and practice working on a wiki page. This page will usually have little or no content. Feel free to add content or to make changes and save them to see the results.
To learn about editing and formatting start here: Help:Contents. Just start with the basics... enter some text, and learn the other pieces as you go.
Your content contributions are welcome and important. The wiki is a collaborative effort and others can help with formatting and other improvements.]
Best wishes!
Description[edit]
This is a doc attached to my sandbox. I'll use it to see the effects of my changes W/o messing something important
NOTE: LUA is usually slower than ParserFunctions for short statements. The factor varies from 7-1 to 2-1.
Lua only is an advantage to long statements, nested logic, loops (maybe others case i don't see right now).
expr only uses 1 Preprocessor visited node count, in general. Variables may change that.
function p._TableRow(skillBase, skillBonus, statMin, statMax, capImportance, capLimit, resultCols, LV, Ln)
--[[ -- A proper solution needs to consider PC, PlayStation 4 and Xbox One. Maybe Steam deck as well. -- This solution uses images: https://splatoonwiki.org/wiki/Module:Button -- Switch: https://splatoonwiki.org/w/index.php?title=Special%3APrefixIndex&prefix=Switch_Icon_&namespace=6 -- -- Possible to get icons from wikipedia, if needed. -- For Xbox: -- https://commons.wikimedia.org/wiki/Category:Xbox_controller_buttons -- https://commons.wikimedia.org/wiki/Category:Xbox_Series_Controller_icons -- For PlayStation 4: -- https://commons.wikimedia.org/wiki/Category:PlayStation_controller_buttons -- -- Other possible sources (Creative Commons Attribution): -- https://zacksly.itch.io/ps5-button-icons-and-controls ; https://zacksly.itch.io/xbox-series-button-icons-and-controls -- Below this line was taken from https://en.wikipedia.org/wiki/Module:Key. As the CSS was was not copied ovee, this is incomplete and only kinda works. Not properly implemented as I'm not happy on the handling of console inputs (controller) -- Aditionally, there seems to be some kind of issue with dark mode. See here to avoid it: https://www.mediawiki.org/wiki/Recommendations_for_night_mode_compatibility_on_Wikimedia_wikis?minervanightmode=1 ]] -------------------------------------------------- -- This module implements {{key press}}. local kbdPrefix = '<kbd class="keyboard-key nowrap">' local kbdSuffix = '</kbd>' local keyText = { ['caps lock'] = '⇪ Caps Lock', ['[[caps lock]]'] = '⇪ [[Caps Lock]]', ['shift'] = '⇧ Shift', ['[[shift key|shift]]'] = '⇧ [[Shift key|Shift]]', ['enter'] = '↵ Enter', ['[[enter key|enter]]'] = '↵ [[Enter key|Enter]]', ['cmd'] = '⌘ Cmd', ['[[command key|cmd]]'] = '⌘ [[Command key|Cmd]]', ['command'] = '⌘ Command', ['[[command key|command]]'] = '⌘ [[Command key|Command]]', ['opt'] = '⌥ Opt', ['[[option key|opt]]'] = '⌥ [[Option key|Opt]]', ['option'] = '⌥ Option', ['[[option key|option]]'] = '⌥ [[Option key|Option]]', ['tab'] = 'Tab ↹', ['[[tab key|tab]]'] = '[[Tab key|Tab]] ↹', ['backspace'] = '← Backspace', ['[[backspace]]'] = '← [[Backspace]]', ['win'] = '⊞ Win', ['[[windows key|win]]'] = '⊞ [[Windows key|Win]]', ['menu'] = '≣ Menu', ['[[menu key|menu]]'] = '≣ [[Menu key|Menu]]', ['up'] = '↑', ['[[arrow keys|up]]'] = '[[Arrow keys|↑]]', ['down'] = '↓', ['[[arrow keys|down]]'] = '[[Arrow keys|↓]]', ['left'] = '←', ['[[arrow keys|left]]'] = '[[Arrow keys|←]]', ['right'] = '→', ['[[arrow keys|right]]'] = '[[Arrow keys|→]]', ['asterisk'] = '*', ['hash'] = '#', ['[[#]]'] = '[[Number sign|#]]', ['colon'] = ':', ['[[:]]'] = '[[Colon (punctuation)|:]]', ['pipe'] = '|', ['[[|]]'] = '[[Pipe symbol||]]', ['semicolon'] = ';', ['[[;]]'] = '[[Semi-colon|;]]', ['equals'] = '=', -- Left & right analog sticks. ['l up'] = 'L↑', ['l down'] = 'L↓', ['l left'] = 'L←', ['l right'] = 'L→', ['l ne'] = 'L↗', ['l se'] = 'L↘', ['l nw'] = 'L↖', ['l sw'] = 'L↙', ['r up'] = 'R↑', ['r down'] = 'R↓', ['r left'] = 'R←', ['r right'] = 'R→', ['r ne'] = 'R↗', ['r se'] = 'R↘', ['r nw'] = 'R↖', ['r sw'] = 'R↙', -- PlayStation. ['ex'] = '×', ['circle'] = '○', ['square'] = '□', ['triangle'] = '△', -- Nintendo 64 and GameCube. ['c up'] = 'C↑', ['c down'] = 'C↓', ['c left'] = 'C←', ['c right'] = 'C→', ['c ne'] = 'C↗', ['c se'] = 'C↘', ['c nw'] = 'C↖', ['c sw'] = 'C↙', } local keyAlias = { -- ['alternate name for key (alias)'] = 'name for key used in key table' ['[[cmd key|cmd]]'] = '[[command key|cmd]]', ['[[cmd key|command]]'] = '[[command key|command]]', ['[[opt key|opt]]'] = '[[option key|opt]]', ['[[option key]]'] = '[[option key|option]]', ['[[opt key|option]]'] = '[[option key|option]]', ['[[win key|win]]'] = '[[windows key|win]]', ['*'] = 'asterisk', ['#'] = 'hash', [':'] = 'colon', [';'] = 'semicolon', ['l-up'] = 'l up', ['l-down'] = 'l down', ['l-left'] = 'l left', ['l-right'] = 'l right', ['l-ne'] = 'l ne', ['l-se'] = 'l se', ['l-nw'] = 'l nw', ['l-sw'] = 'l sw', ['r-up'] = 'r up', ['r-down'] = 'r down', ['r-left'] = 'r left', ['r-right'] = 'r right', ['r-ne'] = 'r ne', ['r-se'] = 'r se', ['r-nw'] = 'r nw', ['r-sw'] = 'r sw', ['ps x'] = 'ex', ['ps c'] = 'circle', ['ps s'] = 'square', ['ps t'] = 'triangle', ['c-up'] = 'c up', ['c-down'] = 'c down', ['c-left'] = 'c left', ['c-right'] = 'c right', ['c-ne'] = 'c ne', ['c-se'] = 'c se', ['c-nw'] = 'c nw', ['c-sw'] = 'c sw', } local Collection = {} Collection.__index = Collection do function Collection:add(item) if item ~= nil then self.n = self.n + 1 self[self.n] = item end end function Collection:join(sep) return table.concat(self, sep) end function Collection:sort(comp) table.sort(self, comp) end function Collection.new() return setmetatable({n = 0}, Collection) end end local function keyPress(args) local chainNames = { 'chain first', 'chain second', 'chain third', 'chain fourth', 'chain fifth', 'chain sixth', 'chain seventh', 'chain eighth', 'chain ninth', } local result = Collection.new() local chainDefault = args.chain or '+' for i, id in ipairs(args) do if i > 1 then result:add(args[chainNames[i - 1]] or chainDefault) end local lc = id:lower() local text = keyText[lc] or keyText[keyAlias[lc]] or id result:add(kbdPrefix .. text .. kbdSuffix) end return result:join() --mw.getCurrentFrame():extensionTag{ -- name = 'templatestyles', args = { src = 'Template:Key press/styles.css'} -- }..result:join() end local function keypress(frame) -- Called by "{{key press|...}}". -- Using the template doubles the post‐expand include size. return keyPress(frame:getParent().args) end local function press(frame) -- Called by "{{#invoke:key|press|...}}". return keyPress(frame.args) end return { keypress = keypress, press = press, }