Modul:Key
Dokumentaciju za ovaj modul možete napraviti na stranici Modul:Key/dok
-- This module implements {{taster}}.
local kbdPrefix =
'<kbd class=' ..
'"keyboard-key nowrap" ' ..
'style="border: 1px solid #aaa; ' ..
-- The following is an expansion of {{border-radius|0.2em}}
'-moz-border-radius: 0.2em; -webkit-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)}}
'-moz-box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); -webkit-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: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); ' ..
'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]]'] = '⇧ [[Shift]]',
['enter'] = '↵ Enter',
['[[enter]]'] = '↵ [[Enter]]',
['cmd'] = '⌘ Cmd',
['[[command (taster)|cmd]]'] = '⌘ [[Command (taster)|Cmd]]',
['command'] = '⌘ Command',
['[[command (taster)|command]]'] = '⌘ [[Command (taster)|Command]]',
['opt'] = '⌥ Opt',
['[[option|opt]]'] = '⌥ [[Option|Opt]]',
['option'] = '⌥ Option',
['[[option]]'] = '⌥ [[Option]]',
['tab'] = 'Tab ↹',
['[[tab]]'] = '[[Tab]] ↹',
['backspace'] = '← Backspace',
['[[backspace]]'] = '← [[Backspace]]',
['win'] = '⊞ Win',
['[[windows (taster)|win]]'] = '⊞ [[Windows (taster)|Win]]',
['meni'] = '≣ Meni',
['[[meni (taster)|meni]]'] = '≣ [[Meni (taster)|Meni]]',
['gore'] = '↑',
['[[strelice na tastaturi|gore]]'] = '[[Strelice na tastaturi|↑]]',
['dolje'] = '↓',
['[[strelice na tastaturi|dolje]]'] = '[[Strelice na tastaturi|↓]]',
['lijevo'] = '←',
['[[strelice na tastaturi|lijevo]]'] = '[[Strelice na tastaturi|←]]',
['desno'] = '→',
['[[strelice na tastaturi|desno]]'] = '[[Strelice na tastaturi|→]]',
['zvjezdica'] = '*',
['taraba'] = '#',
['[[#]]'] = '[[Taraba (znak)|#]]',
['dvotačka'] = ':',
['[[:]]'] = '[[Dvotačka|:]]',
['vertikalna crta'] = '|',
['[[|]]'] = '[[Vertikalna crta||]]',
['tačka-zarez'] = ';',
['[[;]]'] = '[[Tačka-zarez|;]]',
['znak jednakosti'] = '=',
-- Gljivice (L+R umjesto L+D zbog standardiziranog prikaza).
['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.
['iks'] = '×',
['krug'] = '○',
['kvadrat'] = '□',
['trougao'] = '△',
-- Nintendo 64 i 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 = {
-- ['alternativno ime za taster'] = 'naziv tastera u tabeli, tj. lijeva vrijednost'
['[[cmd taster|cmd]]'] = '[[command (taster)|cmd]]',
['[[taster cmd|cmd]]'] = '[[command (taster)|cmd]]',
['[[cmd taster|command]]'] = '[[command (taster)|command]]',
['[[taster cmd|command]]'] = '[[command (taster)|command]]',
['[[opt taster|opt]]'] = '[[option|opt]]',
['[[taster opt|opt]]'] = '[[option|opt]]',
['[[option taster]]'] = '[[option]]',
['[[taster option]]'] = '[[option]]',
['[[opt taster|option]]'] = '[[option]]',
['[[taster opt|option]]'] = '[[option]]',
['[[win taster|win]]'] = '[[windows (taster)|win]]',
['[[taster win|win]]'] = '[[windows (taster)|win]]',
['*'] = 'zvjezdica',
['asterisk'] = 'zvjezdica',
['#'] = 'taraba',
['ljestve'] = 'taraba',
['hash'] = 'taraba',
['hashtag'] = 'taraba',
['hešteg'] = 'taraba',
['haštag'] = 'taraba',
[':'] = 'dvotačka',
['dvije tačke'] = 'dvotačka',
[';'] = 'tačka-zarez',
['tačka zarez'] = 'tačka-zarez',
['tačka sa zarezom'] = 'tačka-zarez',
['tačka-zapeta'] = 'tačka-zarez',
['tačka zapeta'] = 'tačka-zarez',
['tačka sa zapetom'] = 'tačka-zarez',
['l-up'] = 'l up',
['l-down'] = 'l down',
['l-left'] = 'l left',
['l-right'] = 'l right',
['l-gore'] = 'l up',
['l gore'] = 'l up',
['l-dolje'] = 'l down',
['l dolje'] = 'l down',
['l-lijevo'] = 'l left',
['l lijevo'] = 'l left',
['l-desno'] = 'l right',
['l desno'] = 'l right',
['l-ne'] = 'l ne',
['l-se'] = 'l se',
['l-nw'] = 'l nw',
['l-sw'] = 'l sw',
['l-si'] = 'l ne',
['l si'] = 'l ne',
['l gore desno'] = 'l ne',
['l-gore-desno'] = 'l ne',
['l-ji'] = 'l se',
['l ji'] = 'l se',
['l dolje desno'] = 'l se',
['l-dolje-desno'] = 'l se',
['l-sz'] = 'l nw',
['l sz'] = 'l nw',
['l gore lijevo'] = 'l nw',
['l-gore-lijevo'] = 'l nw',
['l-jz'] = 'l sw',
['l jz'] = 'l sw',
['l dolje lijevo'] = 'l sw',
['l-dolje-lijevo'] = 'l sw',
['r-up'] = 'r up',
['r-down'] = 'r down',
['r-left'] = 'r left',
['r-right'] = 'r right',
['r-gore'] = 'r up',
['r gore'] = 'r up',
['d-gore'] = 'r up',
['d gore'] = 'r up',
['r-dolje'] = 'r down',
['r dolje'] = 'r down',
['d-dolje'] = 'r down',
['d dolje'] = 'r down',
['r-lijevo'] = 'r left',
['r lijevo'] = 'r left',
['d-lijevo'] = 'r left',
['d lijevo'] = 'r left',
['r-desno'] = 'r right',
['r desno'] = 'r right',
['d-desno'] = 'r right',
['d desno'] = 'r right',
['r-ne'] = 'r ne',
['r-se'] = 'r se',
['r-nw'] = 'r nw',
['r-sw'] = 'r sw',
['r-si'] = 'r ne',
['r si'] = 'r ne',
['r-gore-desno'] = 'r ne',
['r gore desno'] = 'r ne',
['d-si'] = 'r ne',
['d si'] = 'r ne',
['d-gore-desno'] = 'r ne',
['d gore desno'] = 'r ne',
['r-ji'] = 'r se',
['r ji'] = 'r se',
['r-dolje-desno'] = 'r se',
['r dolje desno'] = 'r se',
['d-ji'] = 'r se',
['d ji'] = 'r se',
['d-dolje-desno'] = 'r se',
['d dolje desno'] = 'r se',
['r-sz'] = 'r nw',
['r sz'] = 'r nw',
['r-gore-lijevo'] = 'r nw',
['r gore lijevo'] = 'r nw',
['d-sz'] = 'r nw',
['d sz'] = 'r nw',
['d-gore-lijevo'] = 'r nw',
['d gore lijevo'] = 'r nw',
['r-jz'] = 'r sw',
['r jz'] = 'r sw',
['r-dolje-lijevo'] = 'r sw',
['r dolje lijevo'] = 'r sw',
['d-jz'] = 'r sw',
['d jz'] = 'r sw',
['d-dolje-lijevo'] = 'r sw',
['d dolje lijevo'] = 'r sw',
['ps x'] = 'iks',
['ps iks'] = 'iks',
['ps kr'] = 'krug',
['ps krug'] = 'krug',
['ps kv'] = 'kvadrat',
['ps kvadrat'] = 'kvadrat',
['ps t'] = 'trougao',
['trokut'] = 'trougao',
['c-up'] = 'c up',
['c-down'] = 'c down',
['c-left'] = 'c left',
['c-right'] = 'c right',
['c-gore'] = 'c up',
['c gore'] = 'c up',
['c-dolje'] = 'c down',
['c dolje'] = 'c down',
['c-lijevo'] = 'c left',
['c lijevo'] = 'c left',
['c-desno'] = 'c right',
['c desno'] = 'c right',
['c-ne'] = 'c ne',
['c-se'] = 'c se',
['c-nw'] = 'c nw',
['c-sw'] = 'c sw',
['c-si'] = 'c ne',
['c si'] = 'c ne',
['c-gore-desno'] = 'c ne',
['c gore desno'] = 'c ne',
['c-ji'] = 'c se',
['c ji'] = 'c se',
['c-dolje-desno'] = 'c se',
['c dolje desno'] = 'c se',
['c-sz'] = 'c nw',
['c sz'] = 'c nw',
['c-gore-lijevo'] = 'c nw',
['c gore lijevo'] = 'c nw',
['c-jz'] = 'c sw',
['c jz'] = 'c sw',
['c-dolje-lijevo'] = 'c sw',
['c dolje lijevo'] = 'c sw',
['uspravna crta'] = 'vertikalna crta',
['okomita crta'] = 'vertikalna crta',
['tabulator'] = 'tab',
['[[tabulator]]'] = '[[tab]]',
['windows'] = 'win',
['[[windows]]'] = '[[windows (taster)|win]]',
['jednako'] = 'znak jednakosti',
}
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 = {
'veza 1',
'veza 2',
'veza 3',
'veza 4',
'veza 5',
'veza 6',
'veza 7',
'veza 8',
'veza 9',
}
local result = Collection.new()
local chainDefault = args.veza 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,
}