|
|
Строка 1: |
Строка 1: |
| local kbdPrefix =
| | <includeonly>{{{{{♥|safesubst:}}}#invoke:key|keypress}}</includeonly><noinclude> |
| '<kbd class=' ..
| | {{Template:Key press/doc}} |
| '"keyboard-key nowrap" ' ..
| | </noinclude> |
| 'style="border: 1px solid #aaa; ' ..
| |
| -- The following is an expansion of {{border-radius|0.2em}}
| |
| 'border-radius: 0.2em; ' ..
| |
| -- The following is an expansion of {{box-shadow|0.1em|0.1em|0.2em|rgba(0,0,0,0.1)}}
| |
| 'box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); ' ..
| |
| 'background-color: #f9f9f9; ' ..
| |
| -- The following is an expansion of {{linear-gradient|top|#eee, #f9f9f9, #eee}}
| |
| 'background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); ' ..
| |
| -- Force black color to fix [[phab:T200258]]
| |
| 'color: #000; ' ..
| |
| 'padding: 0.1em 0.3em; ' ..
| |
| 'font-family: inherit; ' ..
| |
| 'font-size: 0.85em;">'
| |
| | |
| 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()
| |
| 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,
| |
| }
| |