├── pix
└── icon.gif
├── tinymce
├── img
│ └── keyboard.png
├── editor_plugin.js
├── css
│ └── keyboard.css
└── js
│ └── keyboard.js
├── thirdpartylibs.xml
├── lang
└── en
│ └── tinymce_virtualkeyboard.php
├── version.php
├── lib.php
└── readme.md
/pix/icon.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kndnsow/moodle-tinymce_virtualkeyboard/HEAD/pix/icon.gif
--------------------------------------------------------------------------------
/tinymce/img/keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kndnsow/moodle-tinymce_virtualkeyboard/HEAD/tinymce/img/keyboard.png
--------------------------------------------------------------------------------
/thirdpartylibs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | tinymce/js/
5 | HTML Virtual Keyboard Interface Script
6 | BSDL
7 | v1.53
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/lang/en/tinymce_virtualkeyboard.php:
--------------------------------------------------------------------------------
1 | .
16 | /**
17 | * Strings for Moodle Vortual Keyboard plugin.
18 | *
19 | * @package tinymce_virtualkeyboard
20 | * @author DualCube
21 | * @copyright 2022 DualCube (https://dualcube.com)
22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 | */
24 | $string['pluginname'] = 'Virtual Keyboard';
25 |
--------------------------------------------------------------------------------
/tinymce/editor_plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE plugin Virtual Keyboard
3 | *
4 | * Copyright 2022 DualCube (https://dualcube.com)
5 | * Author DualCube
6 | * License http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
7 | */
8 | (function() {
9 | var DOM = tinymce.DOM;
10 | tinymce.create('tinymce.plugins.MoodleVirtualKeyboardPlugin', {
11 | init : function(ed, url) {
12 | var s = ed.settings;
13 | // Register commands
14 | ed.addCommand('mceVirtualKeyboard', function() {
15 | document.getElementById(ed.id + 'xyz').click();
16 | });
17 | DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/css/keyboard.css");
18 | // Register buttons
19 | ed.addButton('keyboard', {
20 | title : 'virtual keyboard',
21 | cmd : 'mceVirtualKeyboard',
22 | image : url + '/img/keyboard.png'
23 | });
24 | },
25 | getInfo : function() {
26 | return {
27 | longname : 'Virtual Keyboard',
28 | author : 'DualCube',
29 | version : '1.2' // Version of Virtual Keyboard plugin this plugin is based on.
30 | };
31 | }
32 | });
33 | // Register plugin
34 | tinymce.PluginManager.add('virtualkeyboard', tinymce.plugins.MoodleVirtualKeyboardPlugin);
35 | })();
36 |
--------------------------------------------------------------------------------
/version.php:
--------------------------------------------------------------------------------
1 | .
16 | /**
17 | * TinyMCE virtualkeyboard plugin version details.
18 | *
19 | * @package tinymce_virtualkeyboard
20 | * @author DualCube
21 | * @copyright 2022 DualCube (https://dualcube.com)
22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 | */
24 | defined('MOODLE_INTERNAL') || die();
25 | $plugin->component = 'tinymce_virtualkeyboard';
26 | $plugin->version = 2023042500;
27 | $plugin->requires = 2013051400;
28 | $plugin->maturity = MATURITY_STABLE;
29 | $plugin->release = '1.3 (Build: 2023042500)';
30 |
--------------------------------------------------------------------------------
/lib.php:
--------------------------------------------------------------------------------
1 | .
16 | /**
17 | * virtual keyboard addons for tinyMCE editor
18 | *
19 | * @package tinymce_virtualkeyboard
20 | * @author DualCube
21 | * @copyright 2022 DualCube (https://dualcube.com)
22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 | */
24 | defined('MOODLE_INTERNAL') || die();
25 | class tinymce_virtualkeyboard extends editor_tinymce_plugin {
26 | /** @var array list of buttons defined by this plugin */
27 | protected $buttons = array('keyboard');
28 | /**
29 | * This load require js files and update the init parameters.
30 | *
31 | * @param array $params
32 | * @param context $context
33 | * @param array $options display options: null
34 | * @return void
35 | */
36 | protected function update_init_params(array &$params, context $context,
37 | array $options = null) {
38 | global $PAGE, $CFG;
39 | // This plugin overrides standard 'image' button, no need to insert new button.
40 | $PAGE->requires->js(new moodle_url(
41 | $CFG->httpswwwroot.'/lib/editor/tinymce/plugins/virtualkeyboard/tinymce/js/keyboard.js'));
42 | // Add JS file, which uses default name.
43 | $this->add_js_plugin($params);
44 | }
45 | /**
46 | * Get sort order.
47 | *
48 | * @return 110
49 | */
50 | protected function get_sort_order() {
51 | return 110;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | Moodle Virtual Keyboard Plugin [tinymce_virtualkeyboard]
2 | =======================
3 | * Developed by: Team DualCube
4 | * Copyright: (c) 2022 DualCube (https://dualcube.com)
5 | * License: [GNU GENERAL PUBLIC LICENSE](LICENSE)
6 | * Contributors: DualCube
7 |
8 | Description
9 | ===========
10 | This is a TinyMCE editor add-on plugin that helps to type without Keyboard. It's add a virtual Keyboard on web-page with bunch of language and functionality.
11 |
12 | This is a modification of JavaScript Graphical / Virtual Keyboard Interface by GreyWyvern,
13 | see http://www.greywyvern.com/code/javascript/keyboard
14 |
15 |
16 | _Added features include:_
17 | * Language: Default Language is “US International”. You can change the language by selecting from this dropdown list.
18 | * Number Pad: This will show the number, basic arithmatic notation and currency symbols.
19 | * Enlarge/Shrink: For zoom In/Out the keyboard.
20 | * Clear Editor: Clear the whole editor text, Image or any others content.
21 | * Close: Close the keyboard.
22 | * Backspace: Delete the character in backward direction of the selected line.
23 | * Enter: Create the new line.
24 | * Right/Left Shift: Toggle the charecter (Small to capital or capital to small) and symbols/numbers.
25 | * Alt: Mathematical symbols and special notation (¼, ß, æ, ø, ¥).
26 | * Space: Single space between character.
27 | * Toggle Dead Key: This will show the dead keys (ù, ò, é, ū).
28 | * Caps: Show the capital letter of the selected language.
29 |
30 |
31 | Installation
32 | ============
33 | 1. Login to your moodle site as an “admin user” and follow the steps.
34 | 2. Upload the zip package from Site administration > Plugins > Install plugins. or Add files to ["lib/editor/tinymce/plugins/"], check the acknowledgement and install.
35 | 3. Go to Administration > Plugins > Text editors > TinyMCE HTML editor > General settings Settings tab and add the keyword “keyboard” in any position of the “editor_tinymce | customtoolbar ” .
36 | 4. Go to Administration > Plugins > Text editors > Manage editors and ensure thet “TinyMCE HTML editor (legacy)” is in the top of the ‘Available text editors’ list.
37 | 5. This completes all the steps from the administrator end. Now all users can use virtual keyboard in any editable form successful, which will appearon the top of the editor.
38 |
39 | Requirements
40 | ------------
41 | * Moodle 2.5.0 - 4.1.X
42 |
43 |
44 |
45 | Uninstall
46 | =========
47 | * Go to Administration > Plugins > Text editors > TinyMCE HTML editor > General settings and find Virtual keyboard on the Plugins list and uninstall.
48 |
--------------------------------------------------------------------------------
/tinymce/css/keyboard.css:
--------------------------------------------------------------------------------
1 | span.mce_keyboard img.mceIcon {
2 | object-fit: contain;
3 | object-position: center center;
4 | height: 100%;
5 | width: 100%;
6 | }
7 | #keyboardInputMaster {
8 | position:absolute;
9 | font:normal 0.8rem Arial,sans-serif;
10 | border-top:0.1em solid #eeeeee;
11 | border-right:0.1em solid #888888;
12 | border-bottom:0.1em solid #444444;
13 | border-left:0.1em solid #cccccc;
14 | border-collapse:separate;
15 | border-radius:0.6em;
16 | box-shadow:0 0.2em 1em #444444;
17 | opacity:0.95;
18 | filter:alpha(opacity=95);
19 | background-color:#dddddd;
20 | text-align:left;
21 | z-index:1000000;
22 | width:auto;
23 | height:auto;
24 | min-width:0;
25 | min-height:0;
26 | margin:0;
27 | padding:0;
28 | line-height:normal;
29 | pointer-events:auto;
30 | -moz-user-select:none;
31 | cursor:default;
32 | }
33 | #keyboardInputMaster * {
34 | position:static;
35 | color:#000000;
36 | opacity:1;
37 | filter:alpha(opacity=100);
38 | background:transparent;
39 | font:normal 0.8rem Arial,sans-serif;
40 | width:auto;
41 | height:auto;
42 | min-width:0;
43 | min-height:0;
44 | margin:0;
45 | padding:0;
46 | border:0 none;
47 | outline:0;
48 | vertical-align:baseline;
49 | line-height:1.3em;
50 | pointer-events:auto;
51 | }
52 | #keyboardInputMaster table {
53 | table-layout:auto;
54 | }
55 | #keyboardInputMaster.keyboardInputSize1,
56 | #keyboardInputMaster.keyboardInputSize1 * {
57 | font-size:0.7rem;
58 | }
59 | #keyboardInputMaster.keyboardInputSize3,
60 | #keyboardInputMaster.keyboardInputSize3 * {
61 | font-size:0.9rem;
62 | }
63 | #keyboardInputMaster.keyboardInputSize4,
64 | #keyboardInputMaster.keyboardInputSize4 * {
65 | font-size:1rem;
66 | }
67 | #keyboardInputMaster.keyboardInputSize5,
68 | #keyboardInputMaster.keyboardInputSize5 * {
69 | font-size:1.1rem;
70 | }
71 |
72 | #keyboardInputMaster thead tr th {
73 | padding:0.3em 0.3em 0.1em 0.3em;
74 | background-color:#999999;
75 | white-space:nowrap;
76 | text-align:right;
77 | border-radius:0.6em 0.6em 0 0;
78 | }
79 | #keyboardInputMaster thead tr th div {
80 | float:left;
81 | font-size:130% !important;
82 | height:1.3em;
83 | font-weight:bold;
84 | position:relative;
85 | z-index:1;
86 | margin-right:0.5em;
87 | cursor:pointer;
88 | background-color:transparent;
89 | }
90 | #keyboardInputMaster thead tr th div ol {
91 | position:absolute;
92 | left:0;
93 | top:90%;
94 | list-style-type:none;
95 | height:9.4em;
96 | overflow-y:auto;
97 | overflow-x:hidden;
98 | background-color:#f6f6f6;
99 | border:0.1em solid #999999;
100 | display:none;
101 | text-align:left;
102 | width:12em;
103 | }
104 | #keyboardInputMaster thead tr th div ol li {
105 | padding:0.2em 0.4em;
106 | cursor:pointer;
107 | white-space:nowrap;
108 | width:12em;
109 | }
110 | #keyboardInputMaster thead tr th div ol li.selected {
111 | background-color:#ffffcc;
112 | }
113 | #keyboardInputMaster thead tr th div ol li:hover,
114 | #keyboardInputMaster thead tr th div ol li.hover {
115 | background-color:#dddddd;
116 | }
117 | #keyboardInputMaster thead tr th span,
118 | #keyboardInputMaster thead tr th strong,
119 | #keyboardInputMaster thead tr th small,
120 | #keyboardInputMaster thead tr th big {
121 | display:inline-block;
122 | padding:0 0.4em;
123 | height:1.4em;
124 | line-height:1.4em;
125 | border-top:0.1em solid #e5e5e5;
126 | border-right:0.1em solid #5d5d5d;
127 | border-bottom:0.1em solid #5d5d5d;
128 | border-left:0.1em solid #e5e5e5;
129 | background-color:#cccccc;
130 | cursor:pointer;
131 | margin:0 0 0 0.3em;
132 | border-radius:0.3em;
133 | vertical-align:middle;
134 | transition:background-color .15s ease-in-out;
135 | }
136 | #keyboardInputMaster thead tr th strong {
137 | font-weight:bold;
138 | }
139 | #keyboardInputMaster thead tr th small {
140 | border-radius:0.3em 0 0 0.3em;
141 | border-right:0.1em solid #aaaaaa;
142 | padding:0 0.2em 0 0.3em;
143 | }
144 | #keyboardInputMaster thead tr th big {
145 | border-radius:0 0.3em 0.3em 0;
146 | border-left:0 none;
147 | margin:0;
148 | padding:0 0.3em 0 0.2em;
149 | }
150 | #keyboardInputMaster thead tr th span:hover,
151 | #keyboardInputMaster thead tr th span.hover,
152 | #keyboardInputMaster thead tr th strong:hover,
153 | #keyboardInputMaster thead tr th strong.hover,
154 | #keyboardInputMaster thead tr th small:hover,
155 | #keyboardInputMaster thead tr th small.hover,
156 | #keyboardInputMaster thead tr th big:hover,
157 | #keyboardInputMaster thead tr th big.hover {
158 | background-color:#dddddd;
159 | }
160 |
161 | #keyboardInputMaster tbody tr td {
162 | text-align:left;
163 | padding:0.2em 0.3em 0.3em 0.3em;
164 | vertical-align:top;
165 | }
166 | #keyboardInputMaster tbody tr td div {
167 | text-align:center;
168 | position:relative;
169 | zoom:1;
170 | }
171 | #keyboardInputMaster tbody tr td table {
172 | white-space:nowrap;
173 | width:100%;
174 | border-collapse:separate;
175 | border-spacing:0;
176 | }
177 | #keyboardInputMaster tbody tr td#keyboardInputNumpad table {
178 | margin-left:0.2em;
179 | width:auto;
180 | }
181 | #keyboardInputMaster tbody tr td table.keyboardInputCenter {
182 | width:auto;
183 | margin:0 auto;
184 | }
185 | #keyboardInputMaster tbody tr td table tbody tr td {
186 | vertical-align:middle;
187 | padding:0 0.45em;
188 | white-space:pre;
189 | height:1.8em;
190 | font-family:'Lucida Console','Arial Unicode MS',monospace;
191 | border-top:0.1em solid #e5e5e5;
192 | border-right:0.1em solid #5d5d5d;
193 | border-bottom:0.1em solid #5d5d5d;
194 | border-left:0.1em solid #e5e5e5;
195 | background-color:#eeeeee;
196 | cursor:default;
197 | min-width:0.75em;
198 | border-radius:0.2em;
199 | transition:background-color .15s ease-in-out;
200 | }
201 | #keyboardInputMaster tbody tr td table tbody tr td.last {
202 | width:99%;
203 | }
204 | #keyboardInputMaster tbody tr td table tbody tr td.space {
205 | padding:0 4em;
206 | }
207 | #keyboardInputMaster tbody tr td table tbody tr td.deadkey {
208 | background-color:#ccccdd;
209 | }
210 | #keyboardInputMaster tbody tr td table tbody tr td.target {
211 | background-color:#ddddcc;
212 | }
213 | #keyboardInputMaster tbody tr td table tbody tr td:hover,
214 | #keyboardInputMaster tbody tr td table tbody tr td.hover {
215 | border-top:0.1em solid #d5d5d5;
216 | border-right:0.1em solid #555555;
217 | border-bottom:0.1emsolid #555555;
218 | border-left:0.1em solid #d5d5d5;
219 | background-color:#cccccc;
220 | }
221 | #keyboardInputMaster thead tr th span:active,
222 | #keyboardInputMaster thead tr th span.pressed,
223 | #keyboardInputMaster tbody tr td table tbody tr td:active,
224 | #keyboardInputMaster tbody tr td table tbody tr td.pressed {
225 | border-top:0.1em solid #555555 !important;
226 | border-right:0.1em solid #d5d5d5;
227 | border-bottom:0.1em solid #d5d5d5;
228 | border-left:0.1em solid #555555;
229 | background-color:#cccccc;
230 | }
231 |
232 | #keyboardInputMaster tbody tr td table tbody tr td small {
233 | display:block;
234 | text-align:center;
235 | font-size:0.6em !important;
236 | line-height:1.1em;
237 | }
238 |
239 | #keyboardInputMaster tbody tr td div label {
240 | position:absolute;
241 | bottom:0.2em;
242 | left:0.3em;
243 | }
244 | #keyboardInputMaster tbody tr td div label input {
245 | background-color:#f6f6f6;
246 | vertical-align:middle;
247 | font-size:inherit;
248 | width:1.1em;
249 | height:1.1em;
250 | }
251 | #keyboardInputMaster tbody tr td div var {
252 | position:absolute;
253 | bottom:0;
254 | right:0.3em;
255 | font-weight:bold;
256 | font-style:italic;
257 | color:#444444;
258 | }
259 |
260 | #keyboardInputMaster #keyboardInputNumpadBksp,
261 | #keyboardInputMaster.numpadOnly #keyboardInputSelect,
262 | #keyboardInputMaster.numpadOnly #keyboardInputNumpadToggle,
263 | #keyboardInputMaster.numpadOnly #keyboardInputKeyboard,
264 | #keyboardInputMaster.numpadOnly #keyboardInputNumpad td {
265 | display:none;
266 | }
267 | #keyboardInputMaster.numpadOnly #keyboardInputNumpadBksp {
268 | display:inline-block;
269 | }
270 | #keyboardInputMaster.numpadOnly #keyboardInputNumpad table {
271 | margin-left:auto;
272 | margin-right:auto;
273 | }
274 | #keyboardInputMaster.numpadOnly > thead > tr > th > * {
275 | font-size:125%;
276 | }
277 | #keyboardInputMaster.numpadOnly #keyboardInputNumpad td.digit,
278 | #keyboardInputMaster.numpadOnly #keyboardInputNumpad.showNegative td.negative,
279 | #keyboardInputMaster.numpadOnly #keyboardInputNumpad.showDecimal td.decimal {
280 | display:table-cell;
281 | font-size:200%;
282 | padding:0 0.9em;
283 | }
284 |
285 | .keyboardInputInitiator {
286 | margin:0 0.3em;
287 | vertical-align:middle;
288 | cursor:pointer;
289 | max-height:1.3em;
290 | }
--------------------------------------------------------------------------------
/tinymce/js/keyboard.js:
--------------------------------------------------------------------------------
1 | /* ********************************************************************
2 | **********************************************************************
3 | * HTML Virtual Keyboard Interface Script - v1.53
4 | * Copyright (c) 2022 - GreyWyvern
5 | *
6 | * - Licenced for free distribution under the BSDL
7 | * https://www.opensource.org/licenses/bsd-license.php
8 | *
9 | * Add a script-driven keyboard interface to text fields, password
10 | * fields and textareas.
11 | *
12 | * See https://greywyvern.com/code/javascript/keyboard/ for examples
13 | * and usage instructions.
14 | *
15 | * Version 1.53 - December 27, 2022
16 | * - Prevent showing mobile keyboard (if possible) when Virtual
17 | * Keyboard is attached
18 | * - Font size is now rem unit based instead of px based so it should
19 | * scale better.
20 | *
21 | * See full changelog at:
22 | * https://greywyvern.com/code/javascript/keyboard/changelog.txt
23 | *
24 | * Keyboard Credits
25 | * - Yiddish (Yidish Lebt) keyboard layout by Simche Taub (jidysz.net)
26 | * - Urdu Phonetic keyboard layout by Khalid Malik
27 | * - Yiddish keyboard layout by Helmut Wollmersdorfer
28 | * - Khmer keyboard layout by Sovann Heng (km-kh.com)
29 | * - Dari keyboard layout by Saif Fazel
30 | * - Kurdish keyboard layout by Ara Qadir
31 | * - Assamese keyboard layout by Kanchan Gogoi
32 | * - Bulgarian BDS keyboard layout by Milen Georgiev
33 | * - Basic Japanese Hiragana/Katakana keyboard layout by Damjan
34 | * - Ukrainian keyboard layout by Dmitry Nikitin
35 | * - Macedonian keyboard layout by Damjan Dimitrioski
36 | * - Pashto keyboard layout by Ahmad Wali Achakzai (qamosona.com)
37 | * - Armenian Eastern and Western keyboard layouts by Hayastan Project (www.hayastan.co.uk)
38 | * - Pinyin keyboard layout from a collaboration with Lou Winklemann
39 | * - Kazakh keyboard layout by Alex Madyankin
40 | * - Danish keyboard layout by Verner Kjærsgaard
41 | * - Slovak keyboard layout by Daniel Lara (www.learningslovak.com)
42 | * - Belarusian and Serbian Cyrillic keyboard layouts by Evgeniy Titov
43 | * - Bulgarian Phonetic keyboard layout by Samuil Gospodinov
44 | * - Swedish keyboard layout by HÃ¥kan Sandberg
45 | * - Romanian keyboard layout by Aurel
46 | * - Farsi (Persian) keyboard layout by Kaveh Bakhtiyari (www.bakhtiyari.com)
47 | * - Burmese keyboard layout by Cetanapa
48 | * - Bosnian/Croatian/Serbian Latin/Slovenian keyboard layout by Miran Zeljko
49 | * - Hungarian keyboard layout by Antal Sall 'Hiromacu'
50 | * - Arabic keyboard layout by Srinivas Reddy
51 | * - Italian and Spanish (Spain) keyboard layouts by dictionarist.com
52 | * - Lithuanian and Russian keyboard layouts by Ramunas
53 | * - German keyboard layout by QuHno
54 | * - French keyboard layout by Hidden Evil
55 | * - Polish Programmers layout by moose
56 | * - Turkish keyboard layouts by offcu
57 | * - Dutch and US Int'l keyboard layouts by jerone
58 | *
59 | */
60 | var VKI_attach, VKI_close;
61 | (function() {
62 | let self = this;
63 |
64 | let scripts = document.getElementsByTagName('script');
65 | let scrpath = new URL(scripts[scripts.length - 1].src);
66 |
67 | this.VKI_version = '1.53';
68 | this.VKI_showVersion = true; // Display the version number
69 | this.VKI_deadBox = true; // Show the dead keys checkbox
70 | this.VKI_deadkeysOn = false; // Turn dead keys on by default
71 | this.VKI_numberPad = true; // Allow user to open and close the number pad
72 | this.VKI_numberPadOn = false; // Show number pad by default
73 | this.VKI_kts = this.VKI_kt = 'US International'; // Default keyboard layout
74 | this.VKI_langAdapt = true; // Use lang attribute of input to pre-select keyboard
75 | this.VKI_size = 2; // Default keyboard size (1-5)
76 | this.VKI_sizeAdj = true; // Allow user to adjust keyboard size
77 | this.VKI_clearPasswords = false; // Clear password fields on focus
78 | this.VKI_flashPassword = 1000; // Flash last character of password: 0 = disabled, > 0 = delay in ms
79 | this.VKI_imageURI = 'keyboard.svg'; // If empty string, use imageless mode
80 | this.VKI_clickless = 0; // 0 = disabled, > 0 = delay in ms
81 | this.VKI_activeTab = 0; // Tab moves to next: 1 = element, 2 = keyboard enabled element
82 | this.VKI_enterSubmit = true; // Submit forms when Enter is pressed
83 | this.VKI_keyCenter = 3; // If this many or fewer keys in a row, center the row
84 |
85 | // Do not touch these
86 | this.VKI_target = false;
87 | this.VKI_shift = this.VKI_shiftlock = false;
88 | this.VKI_altgr = this.VKI_altgrlock = false;
89 | this.VKI_dead = false;
90 | this.VKI_path = scrpath.pathname.replace(/\/[^\/]*$/, '/');
91 |
92 | this.VKI_isIE = /*@cc_on!@*/false;
93 | this.VKI_isIE6 = /*@if(@_jscript_version == 5.6)!@end@*/false;
94 | this.VKI_isIElt8 = /*@if(@_jscript_version < 5.8)!@end@*/false;
95 | this.VKI_isWebKit = RegExp('KHTML').test(navigator.userAgent);
96 | this.VKI_isOpera = RegExp('Opera').test(navigator.userAgent);
97 | this.VKI_isMoz = (!this.VKI_isWebKit && navigator.product == 'Gecko');
98 |
99 | /* ***** i18n text strings ************************************* */
100 | this.VKI_i18n = {
101 | '00': 'Display Number Pad',
102 | '01': 'Display virtual keyboard interface',
103 | '02': 'Select keyboard layout',
104 | '03': 'Dead keys',
105 | '04': 'On',
106 | '05': 'Off',
107 | '06': 'Close the keyboard',
108 | '07': 'Clear',
109 | '08': 'Clear this input',
110 | '09': 'Version',
111 | '10': 'Decrease keyboard size',
112 | '11': 'Increase keyboard size',
113 | '12': 'Backspace'
114 | };
115 |
116 |
117 | /* ***** Create keyboards ************************************** */
118 | this.VKI_layout = {};
119 |
120 | // - Lay out each keyboard in rows of sub-arrays. Each sub-array
121 | // represents one key.
122 | //
123 | // - Each sub-array consists of four slots described as follows:
124 | // example: ['a', 'A', '\u00e1', '\u00c1']
125 | //
126 | // a) Normal character
127 | // A) Character + Shift/Caps
128 | // \u00e1) Character + Alt/AltGr/AltLk
129 | // \u00c1) Character + Shift/Caps + Alt/AltGr/AltLk
130 | //
131 | // You may include sub-arrays which are fewer than four slots.
132 | // In these cases, the missing slots will be blanked when the
133 | // corresponding modifier key (Shift or AltGr) is pressed.
134 | //
135 | // - If the second slot of a sub-array matches one of the following
136 | // strings:
137 | // 'Tab', 'Caps', 'Shift', 'Enter', 'Bksp',
138 | // 'Alt' OR 'AltGr', 'AltLk'
139 | // then the function of the key will be the following,
140 | // respectively:
141 | // - Insert a tab
142 | // - Toggle Caps Lock (technically a Shift Lock)
143 | // - Next entered character will be the shifted character
144 | // - Insert a newline (textarea), or close the keyboard
145 | // - Delete the previous character
146 | // - Next entered character will be the alternate character
147 | // - Toggle Alt/AltGr Lock
148 | //
149 | // The first slot of this sub-array will be the text to display
150 | // on the corresponding key. This allows for easy localisation
151 | // of key names.
152 | //
153 | // - Layout dead keys (diacritic + letter) should be added as
154 | // property/value pairs of objects with hash keys equal to the
155 | // diacritic. See the 'this.VKI_deadkey' object below the layout
156 | // definitions. In each property/value pair, the value is what
157 | // the diacritic would change the property name to.
158 | //
159 | // - Note that any characters beyond the normal ASCII set should be
160 | // entered in escaped Unicode format. (eg \u00a3 = Pound symbol)
161 | // You can find Unicode values for characters here:
162 | // https://unicode.org/charts/
163 | //
164 | // - To remove a keyboard, just delete it, or comment it out of the
165 | // source code. If you decide to remove the US International
166 | // keyboard layout, make sure you change the default layout
167 | // (this.VKI_kt) above so it references an existing layout.
168 |
169 | this.VKI_layout['\u0627\u0644\u0639\u0631\u0628\u064a\u0629'] = {
170 | 'name': 'Arabic', 'keys': [
171 | [['\u0630', '\u0651 '], ['1', '!', '\u00a1', '\u00b9'], ['2', '@', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00a4', '\u00a3'], ['5', '%', '\u20ac'], ['6', '^', '\u00bc'], ['7', '&', '\u00bd'], ['8', '*', '\u00be'], ['9', '(', '\u2018'], ['0', ')', '\u2019'], ['-', '_', '\u00a5'], ['=', '+', '\u00d7', '\u00f7'], ['Bksp', 'Bksp']],
172 | [['Tab', 'Tab'], ['\u0636', '\u064e'], ['\u0635', '\u064b'], ['\u062b', '\u064f'], ['\u0642', '\u064c'], ['\u0641', '\u0644'], ['\u063a', '\u0625'], ['\u0639', '\u2018'], ['\u0647', '\u00f7'], ['\u062e', '\u00d7'], ['\u062d', '\u061b'], ['\u062c', '<'], ['\u062f', '>'], ['\\', '|']],
173 | [['Caps', 'Caps'], ['\u0634', '\u0650'], ['\u0633', '\u064d'], ['\u064a', ']'], ['\u0628', '['], ['\u0644', '\u0644'], ['\u0627', '\u0623'], ['\u062a', '\u0640'], ['\u0646', '\u060c'], ['\u0645', '/'], ['\u0643', ':'], ['\u0637', '"'], ['Enter', 'Enter']],
174 | [['Shift', 'Shift'], ['\u0626', '~'], ['\u0621', '\u0652'], ['\u0624', '}'], ['\u0631', '{'], ['\u0644', '\u0644'], ['\u0649', '\u0622'], ['\u0629', '\u2019'], ['\u0648', ','], ['\u0632', '.'], ['\u0638', '\u061f'], ['Shift', 'Shift']],
175 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
176 | ], 'lang': ['ar'] };
177 |
178 | this.VKI_layout['\u0985\u09b8\u09ae\u09c0\u09df\u09be'] = {
179 | 'name': 'Assamese', 'keys': [
180 | [['+', '?'], ['\u09E7', '{', '\u09E7'], ['\u09E8', '}', '\u09E8'], ['\u09E9', '\u09CD\u09F0', '\u09E9'], ['\u09EA', '\u09F0\u09CD', '\u09EA'], ['\u09EB', '\u099C\u09CD\u09F0', '\u09EB'], ['\u09EC', '\u0995\u09CD\u09B7', '\u09EC'], ['\u09ED', '\u0995\u09CD\u09F0', '\u09ED'], ['\u09EE', '\u09B6\u09CD\u09F0', '\u09EE'], ['\u09EF', '(', '\u09EF'], ['\u09E6', ')', '\u09E6'], ['-', ''], ['\u09C3', '\u098B', '\u09E2', '\u09E0'], ['Bksp', 'Bksp']],
181 | [['Tab', 'Tab'], ['\u09CC', '\u0994', '\u09D7'], ['\u09C8', '\u0990'], ['\u09BE', '\u0986'], ['\u09C0', '\u0988', '\u09E3', '\u09E1'], ['\u09C2', '\u098A'], ['\u09F1', '\u09AD'], ['\u09B9', '\u0999'], ['\u0997', '\u0998'], ['\u09A6', '\u09A7'], ['\u099C', '\u099D'], ['\u09A1', '\u09A2', '\u09DC', '\u09DD'], ['Enter', 'Enter']],
182 | [['Caps', 'Caps'], ['\u09CB', '\u0993', '\u09F4', '\u09F5'], ['\u09C7', '\u098F', '\u09F6', '\u09F7'], ['\u09CD', '\u0985', '\u09F8', '\u09F9'], ['\u09BF', '\u0987', '\u09E2', '\u098C'], ['\u09C1', '\u0989'], ['\u09AA', '\u09AB'], ['\u09F0', '', '\u09F0', '\u09F1'], ['\u0995', '\u0996'], ['\u09A4', '\u09A5'], ['\u099A', '\u099B'], ['\u099F', '\u09A0'], ['\u09BC', '\u099E']],
183 | [['Shift', 'Shift'], ['\u09CE', '\u0983'], ['\u0982', '\u0981', '\u09FA'], ['\u09AE', '\u09A3'], ['\u09A8', '\u09F7'], ['\u09AC', '"'], ['\u09B2', '\''], ['\u09B8', '\u09B6'], [',', '\u09B7'], ['.', ';'], ['\u09AF', '\u09DF'], ['Shift', 'Shift']],
184 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
185 | ], 'lang': ['as'] };
186 |
187 | this.VKI_layout['\u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d\u04b9\u0430'] = {
188 | 'name': 'Azerbaijani Cyrillic', 'keys': [
189 | [['`', '~'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
190 | [['Tab', 'Tab'], ['\u0458', '\u0408'], ['\u04AF', '\u04AE'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u04BB', '\u04BA'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u04B9', '\u04B8'], ['\\', '/']],
191 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044B', '\u042B'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u049D', '\u049C'], ['Enter', 'Enter']],
192 | [['Shift', 'Shift'], ['\\', '|'], ['\u04D9', '\u04D8'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u0493', '\u0492'], ['\u0431', '\u0411'], ['\u04E9', '\u04E8'], ['.', ','], ['Shift', 'Shift']],
193 | [[' ', ' ']]
194 | ], 'lang': ['az-Cyrl'] };
195 |
196 | this.VKI_layout['Az\u0259rbaycanca'] = {
197 | 'name': 'Azerbaijani Latin', 'keys': [
198 | [['`', '~'], ['1', '!'], ['2', '"'], ['3', '\u2166'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
199 | [['Tab', 'Tab'], ['q', 'Q'], ['\u00FC', '\u00DC'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', '\u0130'], ['o', 'O'], ['p', 'P'], ['\u00F6', '\u00D6'], ['\u011F', '\u011E'], ['\\', '/']],
200 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u0131', 'I'], ['\u0259', '\u018F'], ['Enter', 'Enter']],
201 | [['Shift', 'Shift'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], ['\u00E7', '\u00C7'], ['\u015F', '\u015E'], ['.', ','], ['Shift', 'Shift']],
202 | [[' ', ' ']]
203 | ], 'lang': ['az'] };
204 |
205 | this.VKI_layout['\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f'] = {
206 | 'name': 'Belarusian', 'keys': [
207 | [['\u0451', '\u0401'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
208 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043a', '\u041a'], ['\u0435', '\u0415'], ['\u043d', '\u041d'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u045e', '\u040e'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\'', '\''], ['\\', '/']],
209 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044b', '\u042b'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043f', '\u041f'], ['\u0440', '\u0420'], ['\u043e', '\u041e'], ['\u043b', '\u041b'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u044d', '\u042d'], ['Enter', 'Enter']],
210 | [['Shift', 'Shift'], ['/', '|'], ['\u044f', '\u042f'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043c', '\u041c'], ['\u0456', '\u0406'], ['\u0442', '\u0422'], ['\u044c', '\u042c'], ['\u0431', '\u0411'], ['\u044e', '\u042e'], ['.', ','], ['Shift', 'Shift']],
211 | [[' ', ' ']]
212 | ], 'lang': ['be'] };
213 |
214 | this.VKI_layout['Belgische / Belge'] = {
215 | 'name': 'Belgian', 'keys': [
216 | [['\u00b2', '\u00b3'], ['&', '1', '|'], ['\u00e9', '2', '@'], ['"', '3', '#'], ['\'', '4'], ['(', '5'], ['\u00a7', '6', '^'], ['\u00e8', '7'], ['!', '8'], ['\u00e7', '9', '{'], ['\u00e0', '0', '}'], [')', '\u00b0'], ['-', '_'], ['Bksp', 'Bksp']],
217 | [['Tab', 'Tab'], ['a', 'A'], ['z', 'Z'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['^', '\u00a8', '['], ['$', '*', ']'], ['\u03bc', '\u00a3', '`']],
218 | [['Caps', 'Caps'], ['q', 'Q'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['m', 'M'], ['\u00f9', '%', '\u00b4'], ['Enter', 'Enter']],
219 | [['Shift', 'Shift'], ['<', '>', '\\'], ['w', 'W'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], [',', '?'], [';', '.'], [':', '/'], ['=', '+', '~'], ['Shift', 'Shift']],
220 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
221 | ], 'lang': ['nl-BE', 'fr-BE'] };
222 |
223 | this.VKI_layout['\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u0424\u043e\u043d\u0435\u0442\u0438\u0447\u0435\u043d'] = {
224 | 'name': 'Bulgarian Phonetic', 'keys': [
225 | [['\u0447', '\u0427'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
226 | [['Tab', 'Tab'], ['\u044F', '\u042F'], ['\u0432', '\u0412'], ['\u0435', '\u0415'], ['\u0440', '\u0420'], ['\u0442', '\u0422'], ['\u044A', '\u042A'], ['\u0443', '\u0423'], ['\u0438', '\u0418'], ['\u043E', '\u041E'], ['\u043F', '\u041F'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u044E', '\u042E']],
227 | [['Caps', 'Caps'], ['\u0430', '\u0410'], ['\u0441', '\u0421'], ['\u0434', '\u0414'], ['\u0444', '\u0424'], ['\u0433', '\u0413'], ['\u0445', '\u0425'], ['\u0439', '\u0419'], ['\u043A', '\u041A'], ['\u043B', '\u041B'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
228 | [['Shift', 'Shift'], ['\u0437', '\u0417'], ['\u044C', '\u042C'], ['\u0446', '\u0426'], ['\u0436', '\u0416'], ['\u0431', '\u0411'], ['\u043D', '\u041D'], ['\u043C', '\u041C'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
229 | [[' ', ' ']]
230 | ], 'lang': ['bg'] };
231 |
232 | this.VKI_layout['\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438'] = {
233 | 'name': 'Bulgarian BDS', 'keys': [
234 | [['`', '~'], ['1', '!'], ['2', '?'], ['3', '+'], ['4', '"'], ['5', '%'], ['6', '='], ['7', ':'], ['8', '/'], ['9', '_'], ['0', '\u2116'], ['-', '\u0406'], ['=', 'V'], ['Bksp', 'Bksp']],
235 | [['Tab', 'Tab'], [',', '\u044b'], ['\u0443', '\u0423'], ['\u0435', '\u0415'], ['\u0438', '\u0418'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u043a', '\u041a'], ['\u0441', '\u0421'], ['\u0434', '\u0414'], ['\u0437', '\u0417'], ['\u0446', '\u0426'], [';', '\u00a7'], ['(', ')']],
236 | [['Caps', 'Caps'], ['\u044c', '\u042c'], ['\u044f', '\u042f'], ['\u0430', '\u0410'], ['\u043e', '\u041e'], ['\u0436', '\u0416'], ['\u0433', '\u0413'], ['\u0442', '\u0422'], ['\u043d', '\u041d'], ['\u0412', '\u0412'], ['\u043c', '\u041c'], ['\u0447', '\u0427'], ['Enter', 'Enter']],
237 | [['Shift', 'Shift'], ['\u042e', '\u044e'], ['\u0439', '\u0419'], ['\u044a', '\u042a'], ['\u044d', '\u042d'], ['\u0444', '\u0424'], ['\u0445', '\u0425'], ['\u043f', '\u041f'], ['\u0440', '\u0420'], ['\u043b', '\u041b'], ['\u0431', '\u0411'], ['Shift', 'Shift']],
238 | [[' ', ' ']]
239 | ]};
240 |
241 | this.VKI_layout['\u09ac\u09be\u0982\u09b2\u09be'] = {
242 | 'name': 'Bengali', 'keys': [
243 | [[''], ['1', '', '\u09E7'], ['2', '', '\u09E8'], ['3', '\u09CD\u09B0', '\u09E9'], ['4', '\u09B0\u09CD', '\u09EA'], ['5', '\u099C\u09CD\u09B0', '\u09EB'], ['6', '\u09A4\u09CD\u09B7', '\u09EC'], ['7', '\u0995\u09CD\u09B0', '\u09ED'], ['8', '\u09B6\u09CD\u09B0', '\u09EE'], ['9', '(', '\u09EF'], ['0', ')', '\u09E6'], ['-', '\u0983'], ['\u09C3', '\u098B', '\u09E2', '\u09E0'], ['Bksp', 'Bksp']],
244 | [['Tab', 'Tab'], ['\u09CC', '\u0994', '\u09D7'], ['\u09C8', '\u0990'], ['\u09BE', '\u0986'], ['\u09C0', '\u0988', '\u09E3', '\u09E1'], ['\u09C2', '\u098A'], ['\u09AC', '\u09AD'], ['\u09B9', '\u0999'], ['\u0997', '\u0998'], ['\u09A6', '\u09A7'], ['\u099C', '\u099D'], ['\u09A1', '\u09A2', '\u09DC', '\u09DD'], ['Enter', 'Enter']],
245 | [['Caps', 'Caps'], ['\u09CB', '\u0993', '\u09F4', '\u09F5'], ['\u09C7', '\u098F', '\u09F6', '\u09F7'], ['\u09CD', '\u0985', '\u09F8', '\u09F9'], ['\u09BF', '\u0987', '\u09E2', '\u098C'], ['\u09C1', '\u0989'], ['\u09AA', '\u09AB'], ['\u09B0', '', '\u09F0', '\u09F1'], ['\u0995', '\u0996'], ['\u09A4', '\u09A5'], ['\u099A', '\u099B'], ['\u099F', '\u09A0'], ['\u09BC', '\u099E']],
246 | [['Shift', 'Shift'], [''], ['\u0982', '\u0981', '\u09FA'], ['\u09AE', '\u09A3'], ['\u09A8'], ['\u09AC'], ['\u09B2'], ['\u09B8', '\u09B6'], [',', '\u09B7'], ['.', '{'], ['\u09AF', '\u09DF'], ['Shift', 'Shift']],
247 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
248 | ], 'lang': ['bn'] };
249 |
250 | this.VKI_layout['Bosanski'] = {
251 | 'name': 'Bosnian', 'keys': [
252 | [['\u00B8', '\u00A8'], ['1', '!', '~'], ['2', '"', '\u02C7'], ['3', '#', '^'], ['4', '$', '\u02D8'], ['5', '%', '\u00B0'], ['6', '&', '\u02DB'], ['7', '/', '`'], ['8', '(', '\u02D9'], ['9', ')', '\u00B4'], ['0', '=', '\u02DD'], ['\'', '?', '\u00A8'], ['+', '*', '\u00B8'], ['Bksp', 'Bksp']],
253 | [['Tab', 'Tab'], ['q', 'Q', '\\'], ['w', 'W', '|'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u0161', '\u0160', '\u00F7'], ['\u0111', '\u0110', '\u00D7'], ['\u017E', '\u017D', '\u00A4']],
254 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\u0142'], ['l', 'L', '\u0141'], ['\u010D', '\u010C'], ['\u0107', '\u0106', '\u00DF'], ['Enter', 'Enter']],
255 | [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['-', '_', '\u00A9'], ['Shift', 'Shift']],
256 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
257 | ], 'lang': ['bs'] };
258 |
259 | this.VKI_layout['Canadienne-fran\u00e7aise'] = {
260 | 'name': 'Canadian French', 'keys': [
261 | [['#', '|', '\\'], ['1', '!', '\u00B1'], ['2', '"', '@'], ['3', '/', '\u00A3'], ['4', '$', '\u00A2'], ['5', '%', '\u00A4'], ['6', '?', '\u00AC'], ['7', '&', '\u00A6'], ['8', '*', '\u00B2'], ['9', '(', '\u00B3'], ['0', ')', '\u00BC'], ['-', '_', '\u00BD'], ['=', '+', '\u00BE'], ['Bksp', 'Bksp']],
262 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O', '\u00A7'], ['p', 'P', '\u00B6'], ['^', '^', '['], ['\u00B8', '\u00A8', ']'], ['<', '>', '}']],
263 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':', '~'], ['`', '`', '{'], ['Enter', 'Enter']],
264 | [['Shift', 'Shift'], ['\u00AB', '\u00BB', '\u00B0'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u00B5'], [',', '\'', '\u00AF'], ['.', '.', '\u00AD'], ['\u00E9', '\u00C9', '\u00B4'], ['Shift', 'Shift']],
265 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
266 | ], 'lang': ['fr-CA'] };
267 |
268 | this.VKI_layout['\u010cesky'] = {
269 | 'name': 'Czech', 'keys': [
270 | [[';', '\u00b0', '`', '~'], ['+', '1', '!'], ['\u011B', '2', '@'], ['\u0161', '3', '#'], ['\u010D', '4', '$'], ['\u0159', '5', '%'], ['\u017E', '6', '^'], ['\u00FD', '7', '&'], ['\u00E1', '8', '*'], ['\u00ED', '9', '('], ['\u00E9', '0', ')'], ['=', '%', '-', '_'], ['\u00B4', '\u02c7', '=', '+'], ['Bksp', 'Bksp']],
271 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00FA', '/', '[', '{'], [')', '(', ']', '}'], ['\u00A8', '\'', '\\', '|']],
272 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u016F', '"', ';', ':'], ['\u00A7', '!', '\u00a4', '^'], ['Enter', 'Enter']],
273 | [['Shift', 'Shift'], ['\\', '|', '', '\u02dd'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '?', '<', '\u00d7'], ['.', ':', '>', '\u00f7'], ['-', '_', '/', '?'], ['Shift', 'Shift']],
274 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
275 | ], 'lang': ['cs'] };
276 |
277 | this.VKI_layout['Dansk'] = {
278 | 'name': 'Danish', 'keys': [
279 | [['\u00bd', '\u00a7'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00a3'], ['4', '\u00a4', '$'], ['5', '%', '\u20ac'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\u00b4', '`', '|'], ['Bksp', 'Bksp']],
280 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00e5', '\u00c5'], ['\u00a8', '^', '~'], ['\'', '*']],
281 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00e6', '\u00c6'], ['\u00f8', '\u00d8'], ['Enter', 'Enter']],
282 | [['Shift', 'Shift'], ['<', '>', '\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u03bc', '\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
283 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
284 | ], 'lang': ['da'] };
285 |
286 | this.VKI_layout['Deutsch'] = {
287 | 'name': 'German', 'keys': [
288 | [['^', '\u00b0'], ['1', '!'], ['2', '"', '\u00b2'], ['3', '\u00a7', '\u00b3'], ['4', '$'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\u00df', '?', '\\'], ['\u00b4', '`'], ['Bksp', 'Bksp']],
289 | [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00fc', '\u00dc'], ['+', '*', '~'], ['#', '\'']],
290 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00f6', '\u00d6'], ['\u00e4', '\u00c4'], ['Enter', 'Enter']],
291 | [['Shift', 'Shift'], ['<', '>', '\u00a6'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u00b5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
292 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
293 | ], 'lang': ['de'] };
294 |
295 | this.VKI_layout['Dingbats'] = {
296 | 'name': 'Dingbats', 'keys': [
297 | [['\u2764', '\u2765', '\u2766', '\u2767'], ['\u278a', '\u2780', '\u2776', '\u2768'], ['\u278b', '\u2781', '\u2777', '\u2769'], ['\u278c', '\u2782', '\u2778', '\u276a'], ['\u278d', '\u2783', '\u2779', '\u276b'], ['\u278e', '\u2784', '\u277a', '\u276c'], ['\u278f', '\u2785', '\u277b', '\u276d'], ['\u2790', '\u2786', '\u277c', '\u276e'], ['\u2791', '\u2787', '\u277d', '\u276f'], ['\u2792', '\u2788', '\u277e', '\u2770'], ['\u2793', '\u2789', '\u277f', '\u2771'], ['\u2795', '\u2796', '\u274c', '\u2797'], ['\u2702', '\u2704', '\u2701', '\u2703'], ['Bksp', 'Bksp']],
298 | [['Tab', 'Tab'], ['\u2714', '\u2705', '\u2713'], ['\u2718', '\u2715', '\u2717', '\u2716'], ['\u271a', '\u2719', '\u271b', '\u271c'], ['\u271d', '\u271e', '\u271f', '\u2720'], ['\u2722', '\u2723', '\u2724', '\u2725'], ['\u2726', '\u2727', '\u2728', '\u2756'], ['\u2729', '\u272a', '\u272d', '\u2730'], ['\u272c', '\u272b', '\u272e', '\u272f'], ['\u2736', '\u2731', '\u2732', '\u2749'], ['\u273b', '\u273c', '\u273d', '\u273e'], ['\u2744', '\u2745', '\u2746', '\u2743'], ['\u2733', '\u2734', '\u2735', '\u2721'], ['\u2737', '\u2738', '\u2739', '\u273a']],
299 | [['Caps', 'Caps'], ['\u2799', '\u279a', '\u2798', '\u2758'], ['\u27b5', '\u27b6', '\u27b4', '\u2759'], ['\u27b8', '\u27b9', '\u27b7', '\u275a'], ['\u2794', '\u279c', '\u27ba', '\u27bb'], ['\u279d', '\u279e', '\u27a1', '\u2772'], ['\u27a9', '\u27aa', '\u27ab', '\u27ac'], ['\u27a4', '\u27a3', '\u27a2', '\u279b'], ['\u27b3', '\u27bc', '\u27bd', '\u2773'], ['\u27ad', '\u27ae', '\u27af', '\u27b1'], ['\u27a8', '\u27a6', '\u27a5', '\u27a7'], ['\u279f', '\u27a0', '\u27be', '\u27b2'], ['Enter', 'Enter']],
300 | [['Shift', 'Shift'], ['\u270c', '\u270b', '\u270a', '\u270d'], ['\u274f', '\u2750', '\u2751', '\u2752'], ['\u273f', '\u2740', '\u2741', '\u2742'], ['\u2747', '\u2748', '\u274a', '\u274b'], ['\u2757', '\u2755', '\u2762', '\u2763'], ['\u2753', '\u2754', '\u27b0', '\u27bf'], ['\u270f', '\u2710', '\u270e', '\u2774'], ['\u2712', '\u2711', '\u274d', '\u274e'], ['\u2709', '\u2706', '\u2708', '\u2707'], ['\u275b', '\u275d', '\u2761', '\u2775'], ['\u275c', '\u275e', '\u275f', '\u2760'], ['Shift', 'Shift']],
301 | [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
302 | ]};
303 |
304 | this.VKI_layout['\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0'] = {
305 | 'name': 'Divehi', 'keys': [
306 | [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
307 | [['Tab', 'Tab'], ['\u07ab', '\u00d7'], ['\u07ae', '\u2019'], ['\u07a7', '\u201c'], ['\u07a9', '/'], ['\u07ad', ':'], ['\u078e', '\u07a4'], ['\u0783', '\u079c'], ['\u0789', '\u07a3'], ['\u078c', '\u07a0'], ['\u0780', '\u0799'], ['\u078d', '\u00f7'], ['[', '{'], [']', '}']],
308 | [['Caps', 'Caps'], ['\u07a8', '<'], ['\u07aa', '>'], ['\u07b0', '.', ',', ','], ['\u07a6', '\u060c'], ['\u07ac', '"'], ['\u0788', '\u07a5'], ['\u0787', '\u07a2'], ['\u0782', '\u0798'], ['\u0786', '\u079a'], ['\u078a', '\u07a1'], ['\ufdf2', '\u061b', ';', ';'], ['Enter', 'Enter']],
309 | [['Shift', 'Shift'], ['\\', '|'], ['\u0792', '\u0796'], ['\u0791', '\u0795'], ['\u0790', '\u078f'], ['\u0794', '\u0797', '\u200D'], ['\u0785', '\u079f', '\u200C'], ['\u078b', '\u079b', '\u200E'], ['\u0784', '\u079D', '\u200F'], ['\u0781', '\\'], ['\u0793', '\u079e'], ['\u07af', '\u061f'], ['Shift', 'Shift']],
310 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
311 | ], 'lang': ['dv'] };
312 |
313 | this.VKI_layout['Dvorak'] = {
314 | 'name': 'Dvorak', 'keys': [
315 | [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['[', '{'], [']', '}'], ['Bksp', 'Bksp']],
316 | [['Tab', 'Tab'], ['\'', '"'], [',', '<'], ['.', '>'], ['p', 'P'], ['y', 'Y'], ['f', 'F'], ['g', 'G'], ['c', 'C'], ['r', 'R'], ['l', 'L'], ['/', '?'], ['=', '+'], ['\\', '|']],
317 | [['Caps', 'Caps'], ['a', 'A'], ['o', 'O'], ['e', 'E'], ['u', 'U'], ['i', 'I'], ['d', 'D'], ['h', 'H'], ['t', 'T'], ['n', 'N'], ['s', 'S'], ['-', '_'], ['Enter', 'Enter']],
318 | [['Shift', 'Shift'], [';', ':'], ['q', 'Q'], ['j', 'J'], ['k', 'K'], ['x', 'X'], ['b', 'B'], ['m', 'M'], ['w', 'W'], ['v', 'V'], ['z', 'Z'], ['Shift', 'Shift']],
319 | [[' ', ' ']]
320 | ]};
321 |
322 | this.VKI_layout['\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac'] = {
323 | 'name': 'Greek', 'keys': [
324 | [['`', '~'], ['1', '!'], ['2', '@', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00a3'], ['5', '%', '\u00a7'], ['6', '^', '\u00b6'], ['7', '&'], ['8', '*', '\u00a4'], ['9', '(', '\u00a6'], ['0', ')', '\u00ba'], ['-', '_', '\u00b1'], ['=', '+', '\u00bd'], ['Bksp', 'Bksp']],
325 | [['Tab', 'Tab'], [';', ':'], ['\u03c2', '^'], ['\u03b5', '\u0395'], ['\u03c1', '\u03a1'], ['\u03c4', '\u03a4'], ['\u03c5', '\u03a5'], ['\u03b8', '\u0398'], ['\u03b9', '\u0399'], ['\u03bf', '\u039f'], ['\u03c0', '\u03a0'], ['[', '{', '\u201c'], [']', '}', '\u201d'], ['\\', '|', '\u00ac']],
326 | [['Caps', 'Caps'], ['\u03b1', '\u0391'], ['\u03c3', '\u03a3'], ['\u03b4', '\u0394'], ['\u03c6', '\u03a6'], ['\u03b3', '\u0393'], ['\u03b7', '\u0397'], ['\u03be', '\u039e'], ['\u03ba', '\u039a'], ['\u03bb', '\u039b'], ['\u0384', '\u00a8', '\u0385'], ['\'', '"'], ['Enter', 'Enter']],
327 | [['Shift', 'Shift'], ['<', '>'], ['\u03b6', '\u0396'], ['\u03c7', '\u03a7'], ['\u03c8', '\u03a8'], ['\u03c9', '\u03a9'], ['\u03b2', '\u0392'], ['\u03bd', '\u039d'], ['\u03bc', '\u039c'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
328 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
329 | ], 'lang': ['el'] };
330 |
331 | this.VKI_layout['Eesti'] = {
332 | 'name': 'Estonian', 'keys': [
333 | [['\u02C7', '~'], ['1', '!'], ['2', '"', '@', '@'], ['3', '#', '\u00A3', '\u00A3'], ['4', '\u00A4', '$', '$'], ['5', '%', '\u20AC'], ['6', '&'], ['7', '/', '{', '{'], ['8', '(', '[', '['], ['9', ')', ']', ']'], ['0', '=', '}', '}'], ['+', '?', '\\', '\\'], ['\u00B4', '`'], ['Bksp', 'Bksp']],
334 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00FC', '\u00DC'], ['\u00F5', '\u00D5', '\u00A7', '\u00A7'], ['\'', '*', '\u00BD', '\u00BD']],
335 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u0161', '\u0160'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00F6', '\u00D6'], ['\u00E4', '\u00C4', '^', '^'], ['Enter', 'Enter']],
336 | [['Shift', 'Shift'], ['<', '>', '|', '|'], ['z', 'Z', '\u017E', '\u017D'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
337 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
338 | ], 'lang': ['et'] };
339 |
340 | this.VKI_layout['Espa\u00f1ol'] = {
341 | 'name': 'Spanish', 'keys': [
342 | [['\u00ba', '\u00aa', '\\'], ['1', '!', '|'], ['2', '"', '@'], ['3', '\'', '#'], ['4', '$', '~'], ['5', '%', '\u20ac'], ['6', '&', '\u00ac'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\'', '?'], ['\u00a1', '\u00bf'], ['Bksp', 'Bksp']],
343 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['`', '^', '['], ['+', '*', ']'], ['\u00e7', '\u00c7', '}']],
344 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00f1', '\u00d1'], ['\u00b4', '\u00a8', '{'], ['Enter', 'Enter']],
345 | [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
346 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
347 | ], 'lang': ['es'] };
348 |
349 | this.VKI_layout['\u062f\u0631\u06cc'] = {
350 | 'name': 'Dari', 'keys': [
351 | [['\u200D', '\u00F7', '~'], ['\u06F1', '!', '`'], ['\u06F2', '\u066C', '@'], ['\u06F3', '\u066B', '#'], ['\u06F4', '\u060B', '$'], ['\u06F5', '\u066A', '%'], ['\u06F6', '\u00D7', '^'], ['\u06F7', '\u060C', '&'], ['\u06F8', '*', '\u2022'], ['\u06F9', ')', '\u200E'], ['\u06F0', '(', '\u200F'], ['-', '\u0640', '_'], ['=', '+'], ['Bksp', 'Bksp']],
352 | [['Tab', 'Tab'], ['\u0636', '\u0652', '\u00B0'], ['\u0635', '\u064C'], ['\u062B', '\u064D', '\u20AC'], ['\u0642', '\u064B', '\uFD3E'], ['\u0641', '\u064F', '\uFD3F'], ['\u063A', '\u0650', '\u0656'], ['\u0639', '\u064E', '\u0659'], ['\u0647', '\u0651', '\u0655'], ['\u062E', ']', '\''], ['\u062D', '[', '"'], ['\u062C', '}', '\u0681'], ['\u0686', '{', '\u0685'], ['\\', '|', '?']],
353 | [['Caps', 'Caps'], ['\u0634', '\u0624', '\u069A'], ['\u0633', '\u0626', '\u06CD'], ['\u06CC', '\u064A', '\u0649'], ['\u0628', '\u0625', '\u06D0'], ['\u0644', '\u0623', '\u06B7'], ['\u0627', '\u0622', '\u0671'], ['\u062A', '\u0629', '\u067C'], ['\u0646', '\u00BB', '\u06BC'], ['\u0645', '\u00AB', '\u06BA'], ['\u06A9', ':', ';'], ['\u06AF', '\u061B', '\u06AB'], ['Enter', 'Enter']],
354 | [['Shift', 'Shift'], ['\u0638', '\u0643', '\u06D2'], ['\u0637', '\u0653', '\u0691'], ['\u0632', '\u0698', '\u0696'], ['\u0631', '\u0670', '\u0693'], ['\u0630', '\u200C', '\u0688'], ['\u062F', '\u0654', '\u0689'], ['\u067E', '\u0621', '\u0679'], ['\u0648', '>', ','], ['.', '<', '\u06C7'], ['/', '\u061F', '\u06C9'], ['Shift', 'Shift']],
355 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
356 | ], 'lang': ['fa-AF'] };
357 |
358 | this.VKI_layout['\u0641\u0627\u0631\u0633\u06cc'] = {
359 | 'name': 'Farsi', 'keys': [
360 | [['\u067e', '\u0651 '], ['1', '!', '\u00a1', '\u00b9'], ['2', '@', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00a4', '\u00a3'], ['5', '%', '\u20ac'], ['6', '^', '\u00bc'], ['7', '&', '\u00bd'], ['8', '*', '\u00be'], ['9', '(', '\u2018'], ['0', ')', '\u2019'], ['-', '_', '\u00a5'], ['=', '+', '\u00d7', '\u00f7'], ['Bksp', 'Bksp']],
361 | [['Tab', 'Tab'], ['\u0636', '\u064e'], ['\u0635', '\u064b'], ['\u062b', '\u064f'], ['\u0642', '\u064c'], ['\u0641', '\u0644'], ['\u063a', '\u0625'], ['\u0639', '\u2018'], ['\u0647', '\u00f7'], ['\u062e', '\u00d7'], ['\u062d', '\u061b'], ['\u062c', '<'], ['\u0686', '>'], ['\u0698', '|']],
362 | [['Caps', 'Caps'], ['\u0634', '\u0650'], ['\u0633', '\u064d'], ['\u064a', ']'], ['\u0628', '['], ['\u0644', '\u0644'], ['\u0627', '\u0623'], ['\u062a', '\u0640'], ['\u0646', '\u060c'], ['\u0645', '\\'], ['\u06af', ':'], ['\u0643', '"'], ['Enter', 'Enter']],
363 | [['Shift', 'Shift'], ['\u0638', '~'], ['\u0637', '\u0652'], ['\u0632', '}'], ['\u0631', '{'], ['\u0630', '\u0644'], ['\u062f', '\u0622'], ['\u0626', '\u0621'], ['\u0648', ','], ['.', '.'], ['/', '\u061f'], ['Shift', 'Shift']],
364 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
365 | ], 'lang': ['fa'] };
366 |
367 | this.VKI_layout['F\u00f8royskt'] = {
368 | 'name': 'Faeroese', 'keys': [
369 | [['\u00BD', '\u00A7'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00A3'], ['4', '\u00A4', '$'], ['5', '%', '\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\u00B4', '`', '|'], ['Bksp', 'Bksp']],
370 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00E5', '\u00C5', '\u00A8'], ['\u00F0', '\u00D0', '~'], ['\'', '*']],
371 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00E6', '\u00C6'], ['\u00F8', '\u00D8', '^'], ['Enter', 'Enter']],
372 | [['Shift', 'Shift'], ['<', '>', '\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u00B5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
373 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
374 | ], 'lang': ['fo'] };
375 |
376 | this.VKI_layout['Fran\u00e7ais'] = {
377 | 'name': 'French', 'keys': [
378 | [['\u00b2', '\u00b3'], ['&', '1'], ['\u00e9', '2', '~'], ['"', '3', '#'], ['\'', '4', '{'], ['(', '5', '['], ['-', '6', '|'], ['\u00e8', '7', '`'], ['_', '8', '\\'], ['\u00e7', '9', '^'], ['\u00e0', '0', '@'], [')', '\u00b0', ']'], ['=', '+', '}'], ['Bksp', 'Bksp']],
379 | [['Tab', 'Tab'], ['a', 'A'], ['z', 'Z'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['^', '\u00a8'], ['$', '\u00a3', '\u00a4'], ['*', '\u03bc']],
380 | [['Caps', 'Caps'], ['q', 'Q'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['m', 'M'], ['\u00f9', '%'], ['Enter', 'Enter']],
381 | [['Shift', 'Shift'], ['<', '>'], ['w', 'W'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], [',', '?'], [';', '.'], [':', '/'], ['!', '\u00a7'], ['Shift', 'Shift']],
382 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
383 | ], 'lang': ['fr'] };
384 |
385 | this.VKI_layout['Gaeilge'] = {
386 | 'name': 'Irish / Gaelic', 'keys': [
387 | [['`', '\u00AC', '\u00A6', '\u00A6'], ['1', '!'], ['2', '"'], ['3', '\u00A3'], ['4', '$', '\u20AC'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
388 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u00E9', '\u00C9'], ['r', 'R'], ['t', 'T'], ['y', 'Y', '\u00FD', '\u00DD'], ['u', 'U', '\u00FA', '\u00DA'], ['i', 'I', '\u00ED', '\u00CD'], ['o', 'O', '\u00F3', '\u00D3'], ['p', 'P'], ['[', '{'], [']', '}'], ['#', '~']],
389 | [['Caps', 'Caps'], ['a', 'A', '\u00E1', '\u00C1'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\'', '@', '\u00B4', '`'], ['Enter', 'Enter']],
390 | [['Shift', 'Shift'], ['\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
391 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
392 | ], 'lang': ['ga', 'gd'] };
393 |
394 | this.VKI_layout['\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0'] = {
395 | 'name': 'Gujarati', 'keys': [
396 | [[''], ['1', '\u0A8D', '\u0AE7'], ['2', '\u0AC5', '\u0AE8'], ['3', '\u0ACD\u0AB0', '\u0AE9'], ['4', '\u0AB0\u0ACD', '\u0AEA'], ['5', '\u0A9C\u0ACD\u0A9E', '\u0AEB'], ['6', '\u0AA4\u0ACD\u0AB0', '\u0AEC'], ['7', '\u0A95\u0ACD\u0AB7', '\u0AED'], ['8', '\u0AB6\u0ACD\u0AB0', '\u0AEE'], ['9', '(', '\u0AEF'], ['0', ')', '\u0AE6'], ['-', '\u0A83'], ['\u0AC3', '\u0A8B', '\u0AC4', '\u0AE0'], ['Bksp', 'Bksp']],
397 | [['Tab', 'Tab'], ['\u0ACC', '\u0A94'], ['\u0AC8', '\u0A90'], ['\u0ABE', '\u0A86'], ['\u0AC0', '\u0A88'], ['\u0AC2', '\u0A8A'], ['\u0AAC', '\u0AAD'], ['\u0AB9', '\u0A99'], ['\u0A97', '\u0A98'], ['\u0AA6', '\u0AA7'], ['\u0A9C', '\u0A9D'], ['\u0AA1', '\u0AA2'], ['\u0ABC', '\u0A9E'], ['\u0AC9', '\u0A91']],
398 | [['Caps', 'Caps'], ['\u0ACB', '\u0A93'], ['\u0AC7', '\u0A8F'], ['\u0ACD', '\u0A85'], ['\u0ABF', '\u0A87'], ['\u0AC1', '\u0A89'], ['\u0AAA', '\u0AAB'], ['\u0AB0'], ['\u0A95', '\u0A96'], ['\u0AA4', '\u0AA5'], ['\u0A9A', '\u0A9B'], ['\u0A9F', '\u0AA0'], ['Enter', 'Enter']],
399 | [['Shift', 'Shift'], [''], ['\u0A82', '\u0A81', '', '\u0AD0'], ['\u0AAE', '\u0AA3'], ['\u0AA8'], ['\u0AB5'], ['\u0AB2', '\u0AB3'], ['\u0AB8', '\u0AB6'], [',', '\u0AB7'], ['.', '\u0964', '\u0965', '\u0ABD'], ['\u0AAF'], ['Shift', 'Shift']],
400 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
401 | ], 'lang': ['gu'] };
402 |
403 | this.VKI_layout['\u05e2\u05d1\u05e8\u05d9\u05ea'] = {
404 | 'name': 'Hebrew', 'keys': [
405 | [['~', '`'], ['1', '!'], ['2', '@'], ['3', '#'], ['4' , '$', '\u20aa'], ['5' , '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
406 | [['Tab', 'Tab'], ['/', 'Q'], ['\'', 'W'], ['\u05e7', 'E', '\u20ac'], ['\u05e8', 'R'], ['\u05d0', 'T'], ['\u05d8', 'Y'], ['\u05d5', 'U', '\u05f0'], ['\u05df', 'I'], ['\u05dd', 'O'], ['\u05e4', 'P'], ['\\', '|'], ['Enter', 'Enter']],
407 | [['Caps', 'Caps'], ['\u05e9', 'A'], ['\u05d3', 'S'], ['\u05d2', 'D'], ['\u05db', 'F'], ['\u05e2', 'G'], ['\u05d9', 'H', '\u05f2'], ['\u05d7', 'J', '\u05f1'], ['\u05dc', 'K'], ['\u05da', 'L'], ['\u05e3', ':'], [',' , '"'], [']', '}'], ['[', '{']],
408 | [['Shift', 'Shift'], ['\u05d6', 'Z'], ['\u05e1', 'X'], ['\u05d1', 'C'], ['\u05d4', 'V'], ['\u05e0', 'B'], ['\u05de', 'N'], ['\u05e6', 'M'], ['\u05ea', '>'], ['\u05e5', '<'], ['.', '?'], ['Shift', 'Shift']],
409 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
410 | ], 'lang': ['he'] };
411 |
412 | this.VKI_layout['\u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940'] = {
413 | 'name': 'Devanagari', 'keys': [
414 | [['\u094A', '\u0912'], ['1', '\u090D', '\u0967'], ['2', '\u0945', '\u0968'], ['3', '\u094D\u0930', '\u0969'], ['4', '\u0930\u094D', '\u096A'], ['5', '\u091C\u094D\u091E', '\u096B'], ['6', '\u0924\u094D\u0930', '\u096C'], ['7', '\u0915\u094D\u0937', '\u096D'], ['8', '\u0936\u094D\u0930', '\u096E'], ['9', '(', '\u096F'], ['0', ')', '\u0966'], ['-', '\u0903'], ['\u0943', '\u090B', '\u0944', '\u0960'], ['Bksp', 'Bksp']],
415 | [['Tab', 'Tab'], ['\u094C', '\u0914'], ['\u0948', '\u0910'], ['\u093E', '\u0906'], ['\u0940', '\u0908', '\u0963', '\u0961'], ['\u0942', '\u090A'], ['\u092C', '\u092D'], ['\u0939', '\u0919'], ['\u0917', '\u0918', '\u095A'], ['\u0926', '\u0927'], ['\u091C', '\u091D', '\u095B'], ['\u0921', '\u0922', '\u095C', '\u095D'], ['\u093C', '\u091E'], ['\u0949', '\u0911']],
416 | [['Caps', 'Caps'], ['\u094B', '\u0913'], ['\u0947', '\u090F'], ['\u094D', '\u0905'], ['\u093F', '\u0907', '\u0962', '\u090C'], ['\u0941', '\u0909'], ['\u092A', '\u092B', '', '\u095E'], ['\u0930', '\u0931'], ['\u0915', '\u0916', '\u0958', '\u0959'], ['\u0924', '\u0925'], ['\u091A', '\u091B', '\u0952'], ['\u091F', '\u0920', '', '\u0951'], ['Enter', 'Enter']],
417 | [['Shift', 'Shift'], ['\u0946', '\u090E', '\u0953'], ['\u0902', '\u0901', '', '\u0950'], ['\u092E', '\u0923', '\u0954'], ['\u0928', '\u0929'], ['\u0935', '\u0934'], ['\u0932', '\u0933'], ['\u0938', '\u0936'], [',', '\u0937', '\u0970'], ['.', '\u0964', '\u0965', '\u093D'], ['\u092F', '\u095F'], ['Shift', 'Shift']],
418 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
419 | ], 'lang': ['hi-Deva'] };
420 |
421 | this.VKI_layout['\u0939\u093f\u0902\u0926\u0940'] = {
422 | 'name': 'Hindi', 'keys': [
423 | [['\u200d', '\u200c', '`', '~'], ['1', '\u090D', '\u0967', '!'], ['2', '\u0945', '\u0968', '@'], ['3', '\u094D\u0930', '\u0969', '#'], ['4', '\u0930\u094D', '\u096A', '$'], ['5', '\u091C\u094D\u091E', '\u096B', '%'], ['6', '\u0924\u094D\u0930', '\u096C', '^'], ['7', '\u0915\u094D\u0937', '\u096D', '&'], ['8', '\u0936\u094D\u0930', '\u096E', '*'], ['9', '(', '\u096F', '('], ['0', ')', '\u0966', ')'], ['-', '\u0903', '-', '_'], ['\u0943', '\u090B', '=', '+'], ['Bksp', 'Bksp']],
424 | [['Tab', 'Tab'], ['\u094C', '\u0914'], ['\u0948', '\u0910'], ['\u093E', '\u0906'], ['\u0940', '\u0908'], ['\u0942', '\u090A'], ['\u092C', '\u092D'], ['\u0939', '\u0919'], ['\u0917', '\u0918'], ['\u0926', '\u0927'], ['\u091C', '\u091D'], ['\u0921', '\u0922', '[', '{'], ['\u093C', '\u091E', ']', '}'], ['\u0949', '\u0911', '\\', '|']],
425 | [['Caps', 'Caps'], ['\u094B', '\u0913'], ['\u0947', '\u090F'], ['\u094D', '\u0905'], ['\u093F', '\u0907'], ['\u0941', '\u0909'], ['\u092A', '\u092B'], ['\u0930', '\u0931'], ['\u0915', '\u0916'], ['\u0924', '\u0925'], ['\u091A', '\u091B', ';', ':'], ['\u091F', '\u0920', '\'', '"'], ['Enter', 'Enter']],
426 | [['Shift', 'Shift'], [''], ['\u0902', '\u0901', '', '\u0950'], ['\u092E', '\u0923'], ['\u0928'], ['\u0935'], ['\u0932', '\u0933'], ['\u0938', '\u0936'], [',', '\u0937', ',', '<'], ['.', '\u0964', '.', '>'], ['\u092F', '\u095F', '/', '?'], ['Shift', 'Shift']],
427 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
428 | ], 'lang': ['hi'] };
429 |
430 | this.VKI_layout['Hrvatski'] = {
431 | 'name': 'Croatian', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['hr']
432 | };
433 |
434 | this.VKI_layout['\u0540\u0561\u0575\u0565\u0580\u0565\u0576 \u0561\u0580\u0565\u0582\u0574\u0578\u0582\u057f\u0584'] = {
435 | 'name': 'Western Armenian', 'keys': [
436 | [['\u055D', '\u055C'], [':', '1'], ['\u0571', '\u0541'], ['\u0575', '\u0545'], ['\u055B', '3'], [',', '4'], ['-', '9'], ['.', '\u0587'], ['\u00AB', '('], ['\u00BB', ')'], ['\u0585', '\u0555'], ['\u057C', '\u054C'], ['\u056A', '\u053A'], ['Bksp', 'Bksp']],
437 | [['Tab', 'Tab'], ['\u056D', '\u053D'], ['\u057E', '\u054E'], ['\u0567', '\u0537'], ['\u0580', '\u0550'], ['\u0564', '\u0534'], ['\u0565', '\u0535'], ['\u0568', '\u0538'], ['\u056B', '\u053B'], ['\u0578', '\u0548'], ['\u0562', '\u0532'], ['\u0579', '\u0549'], ['\u057B', '\u054B'], ['\'', '\u055E']],
438 | [['Caps', 'Caps'], ['\u0561', '\u0531'], ['\u057D', '\u054D'], ['\u057F', '\u054F'], ['\u0586', '\u0556'], ['\u056F', '\u053F'], ['\u0570', '\u0540'], ['\u0573', '\u0543'], ['\u0584', '\u0554'], ['\u056C', '\u053C'], ['\u0569', '\u0539'], ['\u0583', '\u0553'], ['Enter', 'Enter']],
439 | [['Shift', 'Shift'], ['\u0566', '\u0536'], ['\u0581', '\u0551'], ['\u0563', '\u0533'], ['\u0582', '\u0552'], ['\u057A', '\u054A'], ['\u0576', '\u0546'], ['\u0574', '\u0544'], ['\u0577', '\u0547'], ['\u0572', '\u0542'], ['\u056E', '\u053E'], ['Shift', 'Shift']],
440 | [[' ', ' ']]
441 | ], 'lang': ['hy-arevmda'] };
442 |
443 | this.VKI_layout['\u0540\u0561\u0575\u0565\u0580\u0565\u0576 \u0561\u0580\u0565\u0582\u0565\u056c\u0584'] = {
444 | 'name': 'Eastern Armenian', 'keys': [
445 | [['\u055D', '\u055C'], [':', '1'], ['\u0571', '\u0541'], ['\u0575', '\u0545'], ['\u055B', '3'], [',', '4'], ['-', '9'], ['.', '\u0587'], ['\u00AB', '('], ['\u00BB', ')'], ['\u0585', '\u0555'], ['\u057C', '\u054C'], ['\u056A', '\u053A'], ['Bksp', 'Bksp']],
446 | [['Tab', 'Tab'], ['\u056D', '\u053D'], ['\u0582', '\u0552'], ['\u0567', '\u0537'], ['\u0580', '\u0550'], ['\u057F', '\u054F'], ['\u0565', '\u0535'], ['\u0568', '\u0538'], ['\u056B', '\u053B'], ['\u0578', '\u0548'], ['\u057A', '\u054A'], ['\u0579', '\u0549'], ['\u057B', '\u054B'], ['\'', '\u055E']],
447 | [['Caps', 'Caps'], ['\u0561', '\u0531'], ['\u057D', '\u054D'], ['\u0564', '\u0534'], ['\u0586', '\u0556'], ['\u0584', '\u0554'], ['\u0570', '\u0540'], ['\u0573', '\u0543'], ['\u056F', '\u053F'], ['\u056C', '\u053C'], ['\u0569', '\u0539'], ['\u0583', '\u0553'], ['Enter', 'Enter']],
448 | [['Shift', 'Shift'], ['\u0566', '\u0536'], ['\u0581', '\u0551'], ['\u0563', '\u0533'], ['\u057E', '\u054E'], ['\u0562', '\u0532'], ['\u0576', '\u0546'], ['\u0574', '\u0544'], ['\u0577', '\u0547'], ['\u0572', '\u0542'], ['\u056E', '\u053E'], ['Shift', 'Shift']],
449 | [[' ', ' ']]
450 | ], 'lang': ['hy'] };
451 |
452 | this.VKI_layout['\u00cdslenska'] = {
453 | 'name': 'Icelandic', 'keys': [
454 | [['\u00B0', '\u00A8', '\u00B0'], ['1', '!'], ['2', '"'], ['3', '#'], ['4', '$'], ['5', '%', '\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\u00F6', '\u00D6', '\\'], ['-', '_'], ['Bksp', 'Bksp']],
455 | [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00F0', '\u00D0'], ['\'', '?', '~'], ['+', '*', '`']],
456 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00E6', '\u00C6'], ['\u00B4', '\'', '^'], ['Enter', 'Enter']],
457 | [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u00B5'], [',', ';'], ['.', ':'], ['\u00FE', '\u00DE'], ['Shift', 'Shift']],
458 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
459 | ], 'lang': ['is'] };
460 |
461 | this.VKI_layout['Italiano'] = {
462 | 'name': 'Italian', 'keys': [
463 | [['\\', '|'], ['1', '!'], ['2', '"'], ['3', '\u00a3'], ['4', '$', '\u20ac'], ['5', '%'], ['6', '&'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\'', '?'], ['\u00ec', '^'], ['Bksp', 'Bksp']],
464 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00e8', '\u00e9', '[', '{'], ['+', '*', ']', '}'], ['\u00f9', '\u00a7']],
465 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00f2', '\u00e7', '@'], ['\u00e0', '\u00b0', '#'], ['Enter', 'Enter']],
466 | [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
467 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
468 | ], 'lang': ['it'] };
469 |
470 | this.VKI_layout['\u65e5\u672c\u8a9e'] = {
471 | 'name': 'Japanese Hiragana/Katakana', 'keys': [
472 | [['\uff5e'], ['\u306c', '\u30cc'], ['\u3075', '\u30d5'], ['\u3042', '\u30a2', '\u3041', '\u30a1'], ['\u3046', '\u30a6', '\u3045', '\u30a5'], ['\u3048', '\u30a8', '\u3047', '\u30a7'], ['\u304a', '\u30aa', '\u3049', '\u30a9'], ['\u3084', '\u30e4', '\u3083', '\u30e3'], ['\u3086', '\u30e6', '\u3085', '\u30e5'], ['\u3088', '\u30e8', '\u3087', '\u30e7'], ['\u308f', '\u30ef', '\u3092', '\u30f2'], ['\u307b', '\u30db', '\u30fc', '\uff1d'], ['\u3078', '\u30d8' , '\uff3e', '\uff5e'], ['Bksp', 'Bksp']],
473 | [['Tab', 'Tab'], ['\u305f', '\u30bf'], ['\u3066', '\u30c6'], ['\u3044', '\u30a4', '\u3043', '\u30a3'], ['\u3059', '\u30b9'], ['\u304b', '\u30ab'], ['\u3093', '\u30f3'], ['\u306a', '\u30ca'], ['\u306b', '\u30cb'], ['\u3089', '\u30e9'], ['\u305b', '\u30bb'], ['\u3001', '\u3001', '\uff20', '\u2018'], ['\u3002', '\u3002', '\u300c', '\uff5b'], ['\uffe5', '', '', '\uff0a'], ['\u309B', '"', '\uffe5', '\uff5c']],
474 | [['Caps', 'Caps'], ['\u3061', '\u30c1'], ['\u3068', '\u30c8'], ['\u3057', '\u30b7'], ['\u306f', '\u30cf'], ['\u304d', '\u30ad'], ['\u304f', '\u30af'], ['\u307e', '\u30de'], ['\u306e', '\u30ce'], ['\u308c', '\u30ec', '\uff1b', '\uff0b'], ['\u3051', '\u30b1', '\uff1a', '\u30f6'], ['\u3080', '\u30e0', '\u300d', '\uff5d'], ['Enter', 'Enter']],
475 | [['Shift', 'Shift'], ['\u3064', '\u30c4'], ['\u3055', '\u30b5'], ['\u305d', '\u30bd'], ['\u3072', '\u30d2'], ['\u3053', '\u30b3'], ['\u307f', '\u30df'], ['\u3082', '\u30e2'], ['\u306d', '\u30cd', '\u3001', '\uff1c'], ['\u308b', '\u30eb', '\u3002', '\uff1e'], ['\u3081', '\u30e1', '\u30fb', '\uff1f'], ['\u308d', '\u30ed', '', '\uff3f'], ['Shift', 'Shift']],
476 | [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]
477 | ], 'lang': ['ja'] };
478 |
479 | this.VKI_layout['\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8'] = {
480 | 'name': 'Georgian', 'keys': [
481 | [['\u201E', '\u201C'], ['!', '1'], ['?', '2'], ['\u2116', '3'], ['\u00A7', '4'], ['%', '5'], [':', '6'], ['.', '7'], [';', '8'], [',', '9'], ['/', '0'], ['\u2013', '-'], ['=', '+'], ['Bksp', 'Bksp']],
482 | [['Tab', 'Tab'], ['\u10E6', '\u10E6'], ['\u10EF', '\u10EF'], ['\u10E3', '\u10E3'], ['\u10D9', '\u10D9'], ['\u10D4', '\u10D4', '\u10F1'], ['\u10DC', '\u10DC'], ['\u10D2', '\u10D2'], ['\u10E8', '\u10E8'], ['\u10EC', '\u10EC'], ['\u10D6', '\u10D6'], ['\u10EE', '\u10EE', '\u10F4'], ['\u10EA', '\u10EA'], ['(', ')']],
483 | [['Caps', 'Caps'], ['\u10E4', '\u10E4', '\u10F6'], ['\u10EB', '\u10EB'], ['\u10D5', '\u10D5', '\u10F3'], ['\u10D7', '\u10D7'], ['\u10D0', '\u10D0'], ['\u10DE', '\u10DE'], ['\u10E0', '\u10E0'], ['\u10DD', '\u10DD'], ['\u10DA', '\u10DA'], ['\u10D3', '\u10D3'], ['\u10DF', '\u10DF'], ['Enter', 'Enter']],
484 | [['Shift', 'Shift'], ['\u10ED', '\u10ED'], ['\u10E9', '\u10E9'], ['\u10E7', '\u10E7'], ['\u10E1', '\u10E1'], ['\u10DB', '\u10DB'], ['\u10D8', '\u10D8', '\u10F2'], ['\u10E2', '\u10E2'], ['\u10E5', '\u10E5'], ['\u10D1', '\u10D1'], ['\u10F0', '\u10F0', '\u10F5'], ['Shift', 'Shift']],
485 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
486 | ], 'lang': ['ka'] };
487 |
488 | this.VKI_layout['\u049a\u0430\u0437\u0430\u049b\u0448\u0430'] = {
489 | 'name': 'Kazakh', 'keys': [
490 | [['(', ')'], ['"', '!'], ['\u04d9', '\u04d8'], ['\u0456', '\u0406'], ['\u04a3', '\u04a2'], ['\u0493', '\u0492'], [',', ';'], ['.', ':'], ['\u04af', '\u04ae'], ['\u04b1', '\u04b0'], ['\u049b', '\u049a'], ['\u04e9', '\u04e8'], ['\u04bb', '\u04ba'], ['Bksp', 'Bksp']],
491 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u044A', '\u042A'], ['\\', '/']],
492 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044B', '\u042B'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u044D', '\u042D'], ['Enter', 'Enter']],
493 | [['Shift', 'Shift'], ['\\', '|'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044C', '\u042C'], ['\u0431', '\u0411'], ['\u044E', '\u042E'], ['\u2116', '?'], ['Shift', 'Shift']],
494 | [[' ', ' ']]
495 | ], 'lang': ['kk'] };
496 |
497 | this.VKI_layout['\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a'] = {
498 | 'name': 'Khmer', 'keys': [
499 | [['\u00AB', '\u00BB','\u200D'], ['\u17E1', '!','\u200C','\u17F1'], ['\u17E2', '\u17D7', '@', '\u17F2'], ['\u17E3', '"', '\u17D1', '\u17F3'], ['\u17E4', '\u17DB', '$', '\u17F4'], ['\u17E5', '%' ,'\u20AC', '\u17F5'], ['\u17E6', '\u17CD', '\u17D9', '\u17F6'], ['\u17E7', '\u17D0', '\u17DA', '\u17F7'], ['\u17E8', '\u17CF', '*', '\u17F8'], ['\u17E9', '(', '{', '\u17F9'], ['\u17E0', ')', '}', '\u17F0'], ['\u17A5', '\u17CC', 'x'], ['\u17B2', '=', '\u17CE'], ['Bksp', 'Bksp']],
500 | [['Tab', 'Tab'], ['\u1786', '\u1788', '\u17DC', '\u19E0'], ['\u17B9', '\u17BA', '\u17DD', '\u19E1'], ['\u17C1', '\u17C2', '\u17AF', '\u19E2'], ['\u179A', '\u17AC', '\u17AB', '\u19E3'], ['\u178F', '\u1791', '\u17A8', '\u19E4'], ['\u1799', '\u17BD', '\u1799\u17BE\u1784', '\u19E5'], ['\u17BB', '\u17BC', '', '\u19E6'], ['\u17B7', '\u17B8', '\u17A6', '\u19E7'], ['\u17C4', '\u17C5', '\u17B1', '\u19E8'], ['\u1795', '\u1797', '\u17B0', '\u19E9'], ['\u17C0', '\u17BF', '\u17A9', '\u19EA'], ['\u17AA', '\u17A7', '\u17B3', '\u19EB'], ['\u17AE', '\u17AD', '\\']],
501 | [['Caps', 'Caps'], ['\u17B6', '\u17B6\u17C6', '\u17B5', '\u19EC'], ['\u179F', '\u17C3', '', '\u19ED'], ['\u178A', '\u178C', '\u17D3', '\u19EE'], ['\u1790', '\u1792', '', '\u19EF'], ['\u1784', '\u17A2', '\u17A4', '\u19F0'], ['\u17A0', '\u17C7', '\u17A3', '\u19F1'], ['\u17D2', '\u1789', '\u17B4', '\u19F2'], ['\u1780', '\u1782', '\u179D', '\u19F3'], ['\u179B', '\u17A1', '\u17D8', '\u19F4'], ['\u17BE', '\u17C4\u17C7', '\u17D6', '\u19F5'], ['\u17CB', '\u17C9', '\u17C8', '\u19F6'], ['Enter', 'Enter']],
502 | [['Shift', 'Shift'], ['\u178B', '\u178D', '|', '\u19F7'], ['\u1781', '\u1783', '\u1781\u17D2\u1789\u17BB\u17C6', '\u19F8'], ['\u1785', '\u1787', '-', '\u19F9'], ['\u179C', '\u17C1\u17C7', '+', '\u19FA'], ['\u1794', '\u1796', '\u179E', '\u19FB'], ['\u1793', '\u178E', '[', '\u19FC'], ['\u1798', '\u17C6', ']', '\u19FD'], ['\u17BB\u17C6', '\u17BB\u17C7', ',', '\u19FE'], ['\u17D4', '\u17D5', '.', '\u19FF'], ['\u17CA', '?', '/'], ['Shift', 'Shift']],
503 | [['\u200B', ' ', '\u00A0', ' '], ['AltGr', 'AltGr']]
504 | ], 'lang': ['km'] };
505 |
506 | this.VKI_layout['\u0c95\u0ca8\u0ccd\u0ca8\u0ca1'] = {
507 | 'name': 'Kannada', 'keys': [
508 | [['\u0CCA', '\u0C92'], ['1', '', '\u0CE7'], ['2', '', '\u0CE8'], ['3', '\u0CCD\u0CB0', '\u0CE9'], ['4', '\u0CB0\u0CCD', '\u0CEA'], ['5', '\u0C9C\u0CCD\u0C9E', '\u0CEB'], ['6', '\u0CA4\u0CCD\u0CB0', '\u0CEC'], ['7', '\u0C95\u0CCD\u0CB7', '\u0CED'], ['8', '\u0CB6\u0CCD\u0CB0', '\u0CEE'], ['9', '(', '\u0CEF'], ['0', ')', '\u0CE6'], ['-', '\u0C83'], ['\u0CC3', '\u0C8B', '\u0CC4', '\u0CE0'], ['Bksp', 'Bksp']],
509 | [['Tab', 'Tab'], ['\u0CCC', '\u0C94'], ['\u0CC8', '\u0C90', '\u0CD6'], ['\u0CBE', '\u0C86'], ['\u0CC0', '\u0C88', '', '\u0CE1'], ['\u0CC2', '\u0C8A'], ['\u0CAC', '\u0CAD'], ['\u0CB9', '\u0C99'], ['\u0C97', '\u0C98'], ['\u0CA6', '\u0CA7'], ['\u0C9C', '\u0C9D'], ['\u0CA1', '\u0CA2'], ['Enter', 'Enter']],
510 | [['Caps', 'Caps'], ['\u0CCB', '\u0C93'], ['\u0CC7', '\u0C8F', '\u0CD5'], ['\u0CCD', '\u0C85'], ['\u0CBF', '\u0C87', '', '\u0C8C'], ['\u0CC1', '\u0C89'], ['\u0CAA', '\u0CAB', '', '\u0CDE'], ['\u0CB0', '\u0CB1'], ['\u0C95', '\u0C96'], ['\u0CA4', '\u0CA5'], ['\u0C9A', '\u0C9B'], ['\u0C9F', '\u0CA0'], ['', '\u0C9E']],
511 | [['Shift', 'Shift'], ['\u0CC6', '\u0C8F'], ['\u0C82'], ['\u0CAE', '\u0CA3'], ['\u0CA8'], ['\u0CB5'], ['\u0CB2', '\u0CB3'], ['\u0CB8', '\u0CB6'], [',', '\u0CB7'], ['.', '|'], ['\u0CAF'], ['Shift', 'Shift']],
512 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
513 | ], 'lang': ['kn'] };
514 |
515 | this.VKI_layout['\ud55c\uad6d\uc5b4'] = {
516 | 'name': 'Korean', 'keys': [
517 | [['`', '~', '`', '~'], ['1', '!', '1', '!'], ['2', '@', '2', '@'], ['3', '#', '3', '#'], ['4', '$', '4', '$'], ['5', '%', '5', '%'], ['6', '^', '6', '^'], ['7', '&', '7', '&'], ['8', '*', '8', '*'], ['9', ')', '9', ')'], ['0', '(', '0', '('], ['-', '_', '-', '_'], ['=', '+', '=', '+'], ['\u20A9', '|', '\u20A9', '|'], ['Bksp', 'Bksp']],
518 | [['Tab', 'Tab'], ['\u1107', '\u1108', 'q', 'Q'], ['\u110C', '\u110D', 'w', 'W'], ['\u1103', '\u1104', 'e', 'E'], ['\u1100', '\u1101', 'r', 'R'], ['\u1109', '\u110A', 't', 'T'], ['\u116D', '', 'y', 'Y'], ['\u1167', '', 'u', 'U'], ['\u1163', '', 'i', 'I'], ['\u1162', '\u1164', 'o', 'O'], ['\u1166', '\u1168', 'p', 'P'], ['[', '{', '[', '{'], [']', '}', ']', '}']],
519 | [['Caps', 'Caps'], ['\u1106', '', 'a', 'A'], ['\u1102', '', 's', 'S'], ['\u110B', '', 'd', 'D'], ['\u1105', '', 'f', 'F'], ['\u1112', '', 'g', 'G'], ['\u1169', '', 'h', 'H'], ['\u1165', '', 'j', 'J'], ['\u1161', '', 'k', 'K'], ['\u1175', '', 'l', 'L'], [';', ':', ';', ':'], ['\'', '"', '\'', '"'], ['Enter', 'Enter']],
520 | [['Shift', 'Shift'], ['\u110F', '', 'z', 'Z'], ['\u1110', '', 'x', 'X'], ['\u110E', '', 'c', 'C'], ['\u1111', '', 'v', 'V'], ['\u1172', '', 'b', 'B'], ['\u116E', '', 'n', 'N'], ['\u1173', '', 'm', 'M'], [',', '<', ',', '<'], ['.', '>', '.', '>'], ['/', '?', '/', '?'], ['Shift', 'Shift']],
521 | [[' ', ' ', ' ', ' '], ['Kor', 'Alt']]
522 | ], 'lang': ['ko'] };
523 |
524 | this.VKI_layout['Kurd\u00ee'] = {
525 | 'name': 'Kurdish', 'keys': [
526 | [['\u20ac', '~'], ['\u0661', '!'], ['\u0662', '@'], ['\u0663', '#'], ['\u0664', '$'], ['\u0665', '%'], ['\u0666', '^'], ['\u0667', '&'], ['\u0668', '*'], ['\u0669', '('], ['\u0660', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
527 | [['Tab', 'Tab'], ['\u0642', '`'], ['\u0648', '\u0648\u0648'], ['\u06d5', '\u064a'], ['\u0631', '\u0695'], ['\u062a', '\u0637'], ['\u06cc', '\u06ce'], ['\u0626', '\u0621'], ['\u062d', '\u0639'], ['\u06c6', '\u0624'], ['\u067e', '\u062b'], ['[', '{'], [']', '}'], ['\\', '|']],
528 | [['Caps', 'Caps'], ['\u0627', '\u0622'], ['\u0633', '\u0634'], ['\u062f', '\u0630'], ['\u0641', '\u0625'], ['\u06af', '\u063a'], ['\u0647', '\u200c'], ['\u0698', '\u0623'], ['\u06a9', '\u0643'], ['\u0644', '\u06b5'], ['\u061b', ':'], ['\'', '"'], ['Enter', 'Enter']],
529 | [['Shift', 'Shift'], ['\u0632', '\u0636'], ['\u062e', '\u0635'], ['\u062c', '\u0686'], ['\u06a4', '\u0638'], ['\u0628', '\u0649'], ['\u0646', '\u0629'], ['\u0645', '\u0640'], ['\u060c', '<'], ['.', '>'], ['/', '\u061f'], ['Shift', 'Shift']],
530 | [[' ', ' ']]
531 | ], 'lang': ['ku'] };
532 |
533 | this.VKI_layout['\u041a\u044b\u0440\u0433\u044b\u0437\u0447\u0430'] = {
534 | 'name': 'Kyrgyz', 'keys': [
535 | [['\u0451', '\u0401'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
536 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423', '\u04AF', '\u04AE'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D', '\u04A3', '\u04A2'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u044A', '\u042A'], ['\\', '/']],
537 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044B', '\u042B'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E', '\u04E9', '\u04E8'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u044D', '\u042D'], ['Enter', 'Enter']],
538 | [['Shift', 'Shift'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044C', '\u042C'], ['\u0431', '\u0411'], ['\u044E', '\u042E'], ['.', ','], ['Shift', 'Shift']],
539 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
540 | ], 'lang': ['ky'] };
541 |
542 | this.VKI_layout['Latvie\u0161u'] = {
543 | 'name': 'Latvian', 'keys': [
544 | [['\u00AD', '?'], ['1', '!', '\u00AB'], ['2', '\u00AB', '', '@'], ['3', '\u00BB', '', '#'], ['4', '$', '\u20AC', '$'], ['5', '%', '"', '~'], ['6', '/', '\u2019', '^'], ['7', '&', '', '\u00B1'], ['8', '\u00D7', ':'], ['9', '('], ['0', ')'], ['-', '_', '\u2013', '\u2014'], ['f', 'F', '=', ';'], ['Bksp', 'Bksp']],
545 | [['Tab', 'Tab'], ['\u016B', '\u016A', 'q', 'Q'], ['g', 'G', '\u0123', '\u0122'], ['j', 'J'], ['r', 'R', '\u0157', '\u0156'], ['m', 'M', 'w', 'W'], ['v', 'V', 'y', 'Y'], ['n', 'N'], ['z', 'Z'], ['\u0113', '\u0112'], ['\u010D', '\u010C'], ['\u017E', '\u017D', '[', '{'], ['h', 'H', ']', '}'], ['\u0137', '\u0136']],
546 | [['Caps', 'Caps'], ['\u0161', '\u0160'], ['u', 'U'], ['s', 'S'], ['i', 'I'], ['l', 'L'], ['d', 'D'], ['a', 'A'], ['t', 'T'], ['e', 'E', '\u20AC'], ['c', 'C'], ['\u00B4', '\u00B0', '\u00B4', '\u00A8'], ['Enter', 'Enter']],
547 | [['Shift', 'Shift'], ['\u0146', '\u0145'], ['b', 'B', 'x', 'X'], ['\u012B', '\u012A'], ['k', 'K', '\u0137', '\u0136'], ['p', 'P'], ['o', 'O', '\u00F5', '\u00D5'], ['\u0101', '\u0100'], [',', ';', '<'], ['.', ':', '>'], ['\u013C', '\u013B'], ['Shift', 'Shift']],
548 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
549 | ], 'lang': ['lv'] };
550 |
551 | this.VKI_layout['Lietuvi\u0173'] = {
552 | 'name': 'Lithuanian', 'keys': [
553 | [['`', '~'], ['\u0105', '\u0104'], ['\u010D', '\u010C'], ['\u0119', '\u0118'], ['\u0117', '\u0116'], ['\u012F', '\u012E'], ['\u0161', '\u0160'], ['\u0173', '\u0172'], ['\u016B', '\u016A'], ['\u201E', '('], ['\u201C', ')'], ['-', '_'], ['\u017E', '\u017D'], ['Bksp', 'Bksp']],
554 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\', '|']],
555 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
556 | [['Shift', 'Shift'], ['\u2013', '\u20AC'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
557 | [[' ', ' ']]
558 | ], 'lang': ['lt'] };
559 |
560 | this.VKI_layout['Magyar'] = {
561 | 'name': 'Hungarian', 'keys': [
562 | [['0', '\u00a7'], ['1', '\'', '~'], ['2', '"', '\u02c7'], ['3', '+', '\u02c6'], ['4', '!', '\u02d8'], ['5', '%', '\u00b0'], ['6', '/', '\u02db'], ['7', '=', '`'], ['8', '(', '\u02d9'], ['9', ')', '\u00b4'], ['\u00f6', '\u00d6', '\u02dd'], ['\u00fc', '\u00dc', '\u00a8'], ['\u00f3', '\u00d3', '\u00b8'], ['Bksp', 'Bksp']],
563 | [['Tab', 'Tab'], ['q', 'Q', '\\'], ['w', 'W', '|'], ['e', 'E', '\u00c4'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U', '\u20ac'], ['i', 'I', '\u00cd'], ['o', 'O'], ['p', 'P'], ['\u0151', '\u0150', '\u00f7'], ['\u00fa', '\u00da', '\u00d7'], ['\u0171', '\u0170', '\u00a4']],
564 | [['Caps', 'Caps'], ['a', 'A', '\u00e4'], ['s', 'S', '\u0111'], ['d', 'D', '\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J', '\u00ed'], ['k', 'K', '\u0141'], ['l', 'L', '\u0142'], ['\u00e9', '\u00c9', '$'], ['\u00e1', '\u00c1', '\u00df'], ['Enter', 'Enter']],
565 | [['Shift', 'Shift'], ['\u00ed', '\u00cd', '<'], ['y', 'Y', '>'], ['x', 'X', '#'], ['c', 'C', '&'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '<'], [',', '?', ';'], ['.', ':', '>'], ['-', '_', '*'], ['Shift', 'Shift']],
566 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
567 | ], 'lang': ['hu'] };
568 |
569 | this.VKI_layout['Malti'] = {
570 | 'name': 'Maltese 48', 'keys': [
571 | [['\u010B', '\u010A', '`'], ['1', '!'], ['2', '"'], ['3', '\u20ac', '\u00A3'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
572 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u00E8', '\u00C8'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U', '\u00F9', '\u00D9'], ['i', 'I', '\u00EC', '\u00cc'], ['o', 'O', '\u00F2', '\u00D2'], ['p', 'P'], ['\u0121', '\u0120', '[', '{'], ['\u0127', '\u0126', ']', '}'], ['#', '\u017e']],
573 | [['Caps', 'Caps'], ['a', 'A', '\u00E0', '\u00C0'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\'', '@'], ['Enter', 'Enter']],
574 | [['Shift', 'Shift'], ['\u017c', '\u017b', '\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?', '', '`'], ['Shift', 'Shift']],
575 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
576 | ], 'lang': ['mt'] };
577 |
578 | this.VKI_layout['\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438'] = {
579 | 'name': 'Macedonian Cyrillic', 'keys': [
580 | [['`', '~'], ['1', '!'], ['2', '\u201E'], ['3', '\u201C'], ['4', '\u2019'], ['5', '%'], ['6', '\u2018'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
581 | [['Tab', 'Tab'], ['\u0459', '\u0409'], ['\u045A', '\u040A'], ['\u0435', '\u0415', '\u20AC'], ['\u0440', '\u0420'], ['\u0442', '\u0422'], ['\u0455', '\u0405'], ['\u0443', '\u0423'], ['\u0438', '\u0418'], ['\u043E', '\u041E'], ['\u043F', '\u041F'], ['\u0448', '\u0428', '\u0402'], ['\u0453', '\u0403', '\u0452'], ['\u0436', '\u0416']],
582 | [['Caps', 'Caps'], ['\u0430', '\u0410'], ['\u0441', '\u0421'], ['\u0434', '\u0414'], ['\u0444', '\u0424', '['], ['\u0433', '\u0413', ']'], ['\u0445', '\u0425'], ['\u0458', '\u0408'], ['\u043A', '\u041A'], ['\u043B', '\u041B'], ['\u0447', '\u0427', '\u040B'], ['\u045C', '\u040C', '\u045B'], ['Enter', 'Enter']],
583 | [['Shift', 'Shift'], ['\u0451', '\u0401'], ['\u0437', '\u0417'], ['\u045F', '\u040F'], ['\u0446', '\u0426'], ['\u0432', '\u0412', '@'], ['\u0431', '\u0411', '{'], ['\u043D', '\u041D', '}'], ['\u043C', '\u041C', '\u00A7'], [',', ';'], ['.', ':'], ['/', '?'], ['Shift', 'Shift']],
584 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
585 | ], 'lang': ['mk'] };
586 |
587 | this.VKI_layout['\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02'] = {
588 | 'name': 'Malayalam', 'keys': [
589 | [['\u0D4A', '\u0D12'], ['1', '', '\u0D67'], ['2', '', '\u0D68'], ['3', '\u0D4D\u0D30', '\u0D69'], ['4', '', '\u0D6A'], ['5', '', '\u0D6B'], ['6', '', '\u0D6C'], ['7', '\u0D15\u0D4D\u0D37', '\u0D6D'], ['8', '', '\u0D6E'], ['9', '(', '\u0D6F'], ['0', ')', '\u0D66'], ['-', '\u0D03'], ['\u0D43', '\u0D0B', '', '\u0D60'], ['Bksp', 'Bksp']],
590 | [['Tab', 'Tab'], ['\u0D4C', '\u0D14', '\u0D57'], ['\u0D48', '\u0D10'], ['\u0D3E', '\u0D06'], ['\u0D40', '\u0D08', '', '\u0D61'], ['\u0D42', '\u0D0A'], ['\u0D2C', '\u0D2D'], ['\u0D39', '\u0D19'], ['\u0D17', '\u0D18'], ['\u0D26', '\u0D27'], ['\u0D1C', '\u0D1D'], ['\u0D21', '\u0D22'], ['', '\u0D1E']],
591 | [['Caps', 'Caps'], ['\u0D4B', '\u0D13'], ['\u0D47', '\u0D0F'], ['\u0D4D', '\u0D05', '', '\u0D0C'], ['\u0D3F', '\u0D07'], ['\u0D41', '\u0D09'], ['\u0D2A', '\u0D2B'], ['\u0D30', '\u0D31'], ['\u0D15', '\u0D16'], ['\u0D24', '\u0D25'], ['\u0D1A', '\u0D1B'], ['\u0D1F', '\u0D20'], ['Enter', 'Enter']],
592 | [['Shift', 'Shift'], ['\u0D46', '\u0D0F'], ['\u0D02'], ['\u0D2E', '\u0D23'], ['\u0D28'], ['\u0D35', '\u0D34'], ['\u0D32', '\u0D33'], ['\u0D38', '\u0D36'], [',', '\u0D37'], ['.'], ['\u0D2F'], ['Shift', 'Shift']],
593 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
594 | ], 'lang': ['ml'] };
595 |
596 | this.VKI_layout['Misc. Symbols'] = {
597 | 'name': 'Misc. Symbols', 'keys': [
598 | [['\u2605', '\u2606', '\u260e', '\u260f'], ['\u2648', '\u2673', '\u2659', '\u2630'], ['\u2649', '\u2674', '\u2658', '\u2631'], ['\u264a', '\u2675', '\u2657', '\u2632'], ['\u264b', '\u2676', '\u2656', '\u2633'], ['\u264c', '\u2677', '\u2655', '\u2634'], ['\u264d', '\u2678', '\u2654', '\u2635'], ['\u264e', '\u2679', '\u265f', '\u2636'], ['\u264f', '\u267a', '\u265e', '\u2637'], ['\u2650', '\u267b', '\u265d', '\u2686'], ['\u2651', '\u267c', '\u265c', '\u2687'], ['\u2652', '\u267d', '\u265b', '\u2688'], ['\u2653', '\u2672', '\u265a', '\u2689'], ['Bksp', 'Bksp']],
599 | [['\u263f', '\u2680', '\u268a', '\u26a2'], ['\u2640', '\u2681', '\u268b', '\u26a3'], ['\u2641', '\u2682', '\u268c', '\u26a4'], ['\u2642', '\u2683', '\u268d', '\u26a5'], ['\u2643', '\u2684', '\u268e', '\u26a6'], ['\u2644', '\u2685', '\u268f', '\u26a7'], ['\u2645', '\u2620', '\u26ff', '\u26a8'], ['\u2646', '\u2622', '\u2692', '\u26a9'], ['\u2647', '\u2623', '\u2693', '\u26b2'], ['\u2669', '\u266d', '\u2694', '\u26ac'], ['\u266a', '\u266e', '\u2695', '\u26ad'], ['\u266b', '\u266f', '\u2696', '\u26ae'], ['\u266c', '\u2607', '\u2697', '\u26af'], ['\u26f9', '\u2608', '\u2698', '\u26b0'], ['\u267f', '\u262e', '\u2638', '\u2609']],
600 | [['Tab', 'Tab'], ['\u261e', '\u261c', '\u261d', '\u261f'], ['\u261b', '\u261a', '\u2618', '\u2619'], ['\u2602', '\u2614', '\u26f1', '\u26d9'], ['\u2615', '\u2668', '\u26fe', '\u26d8'], ['\u263a', '\u2639', '\u263b', '\u26dc'], ['\u2617', '\u2616', '\u26ca', '\u26c9'], ['\u2660', '\u2663', '\u2665', '\u2666'], ['\u2664', '\u2667', '\u2661', '\u2662'], ['\u26c2', '\u26c0', '\u26c3', '\u26c1'], ['\u2624', '\u2625', '\u269a', '\u26b1'], ['\u2610', '\u2611', '\u2612', '\u2613'], ['\u2628', '\u2626', '\u2627', '\u2629'], ['\u262a', '\u262b', '\u262c', '\u262d'], ['\u26fa', '\u26fb', '\u26fc', '\u26fd']],
601 | [['Caps', 'Caps'], ['\u262f', '\u2670', '\u2671', '\u267e'], ['\u263c', '\u2699', '\u263d', '\u263e'], ['\u26c4', '\u2603', '\u26c7', '\u26c6'], ['\u26a0', '\u26a1', '\u2621', '\u26d4'], ['\u26e4', '\u26e5', '\u26e6', '\u26e7'], ['\u260a', '\u260b', '\u260c', '\u260d'], ['\u269c', '\u269b', '\u269d', '\u2604'], ['\u26b3', '\u26b4', '\u26b5', '\u26b6'], ['\u26b7', '\u26bf', '\u26b8', '\u26f8'], ['\u26b9', '\u26ba', '\u26bb', '\u26bc'], ['\u26bd', '\u26be', '\u269f', '\u269e'], ['Enter', 'Enter']],
602 | [['Shift', 'Shift'], ['\u2600', '\u2601', '\u26c5', '\u26c8'], ['\u2691', '\u2690', '\u26ab', '\u26aa'], ['\u26cb', '\u26cc', '\u26cd', '\u26ce'], ['\u26cf', '\u26d0', '\u26d1', '\u26d2'], ['\u26d3', '\u26d5', '\u26d6', '\u26d7'], ['\u26da', '\u26db', '\u26dd', '\u26de'], ['\u26df', '\u26e0', '\u26e1', '\u26e2'], ['\u26e3', '\u26e8', '\u26e9', '\u26ea'], ['\u26eb', '\u26ec', '\u26ed', '\u26ee'], ['\u26ef', '\u26f0', '\u26f2', '\u26f3'], ['\u26f4', '\u26f5', '\u26f6', '\u26f7'], ['Shift', 'Shift']],
603 | [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]
604 | ]};
605 |
606 | this.VKI_layout['\u041c\u043e\u043d\u0433\u043e\u043b'] = {
607 | 'name': 'Mongolian Cyrillic', 'keys': [
608 | [['=', '+'], ['\u2116', '1'], ['-', '2'], ['"', '3'], ['\u20AE', '4'], [':', '5'], ['.', '6'], ['_', '7'], [',', '8'], ['%', '9'], ['?', '0'], ['\u0435', '\u0415'], ['\u0449', '\u0429'], ['Bksp', 'Bksp']],
609 | [['Tab', 'Tab'], ['\u0444', '\u0424'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u0436', '\u0416'], ['\u044d', '\u042d'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u04af', '\u04AE'], ['\u0437', '\u0417'], ['\u043A', '\u041a'], ['\u044A', '\u042A'], ['\\', '|']],
610 | [['Caps', 'Caps'], ['\u0439', '\u0419'], ['\u044B', '\u042B'], ['\u0431', '\u0411'], ['\u04e9', '\u04e8'], ['\u0430', '\u0410'], ['\u0445', '\u0425'], ['\u0440', '\u0420'], ['\u043e', '\u041e'], ['\u043B', '\u041b'], ['\u0434', '\u0414'], ['\u043f', '\u041f'], ['Enter', 'Enter']],
611 | [['Shift', 'Shift'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0451', '\u0401'], ['\u0441', '\u0421'], ['\u043c', '\u041c'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044c', '\u042c'], ['\u0432', '\u0412'], ['\u044e', '\u042e'], ['Shift', 'Shift']],
612 | [[' ', ' ']]
613 | ], 'lang': ['mn'] };
614 |
615 | this.VKI_layout['\u092e\u0930\u093e\u0920\u0940'] = {
616 | 'name': 'Marathi', 'keys': [
617 | [['', '', '`', '~'], ['\u0967', '\u090D', '1', '!'], ['\u0968', '\u0945', '2', '@'], ['\u0969', '\u094D\u0930', '3', '#'], ['\u096A', '\u0930\u094D', '4', '$'], ['\u096B', '\u091C\u094D\u091E', '5', '%'], ['\u096C', '\u0924\u094D\u0930', '6', '^'], ['\u096D', '\u0915\u094D\u0937', '7', '&'], ['\u096E', '\u0936\u094D\u0930', '8', '*'], ['\u096F', '(', '9', '('], ['\u0966', ')', '0', ')'], ['-', '\u0903', '-', '_'], ['\u0943', '\u090B', '=', '+'], ['Bksp', 'Bksp']],
618 | [['Tab', 'Tab'], ['\u094C', '\u0914'], ['\u0948', '\u0910'], ['\u093E', '\u0906'], ['\u0940', '\u0908'], ['\u0942', '\u090A'], ['\u092C', '\u092D'], ['\u0939', '\u0919'], ['\u0917', '\u0918'], ['\u0926', '\u0927'], ['\u091C', '\u091D'], ['\u0921', '\u0922', '[', '{'], ['\u093C', '\u091E', ']', '}'], ['\u0949', '\u0911', '\\', '|']],
619 | [['Caps', 'Caps'], ['\u094B', '\u0913'], ['\u0947', '\u090F'], ['\u094D', '\u0905'], ['\u093F', '\u0907'], ['\u0941', '\u0909'], ['\u092A', '\u092B'], ['\u0930', '\u0931'], ['\u0915', '\u0916'], ['\u0924', '\u0925'], ['\u091A', '\u091B', ';', ':'], ['\u091F', '\u0920', '\'', '"'], ['Enter', 'Enter']],
620 | [['Shift', 'Shift'], [''], ['\u0902', '\u0901', '', '\u0950'], ['\u092E', '\u0923'], ['\u0928'], ['\u0935'], ['\u0932', '\u0933'], ['\u0938', '\u0936'], [',', '\u0937', ',', '<'], ['.', '\u0964', '.', '>'], ['\u092F', '\u095F', '/', '?'], ['Shift', 'Shift']],
621 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
622 | ], 'lang': ['mr'] };
623 |
624 | this.VKI_layout['\u1019\u103c\u1014\u103a\u1019\u102c\u1018\u102c\u101e\u102c'] = {
625 | 'name': 'Burmese', 'keys': [
626 | [['\u1039`', '~'], ['\u1041', '\u100D'], ['\u1042', '\u100E'], ['\u1043', '\u100B'], ['\u1044', '\u1000\u103B\u1015\u103A'], ['\u1045', '%'], ['\u1046', '/'], ['\u1047', '\u101B'], ['\u1048', '\u1002'], ['\u1049', '('], ['\u1040', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
627 | [['Tab', 'Tab'], ['\u1006', '\u1029'], ['\u1010', '\u1040'], ['\u1014', '\u103F'], ['\u1019', '\u1023'], ['\u1021', '\u1024'], ['\u1015', '\u104C'], ['\u1000', '\u1009'], ['\u1004', '\u104D'], ['\u101E', '\u1025'], ['\u1005', '\u100F'], ['\u101F', '\u1027'], ['\u2018', '\u2019'], ['\u104F', '\u100B\u1039\u100C']],
628 | [['Caps', 'Caps'], ['\u200B\u1031', '\u1017'], ['\u200B\u103B', '\u200B\u103E'], ['\u200B\u102D', '\u200B\u102E'], ['\u200B\u103A', '\u1004\u103A\u1039\u200B'], ['\u200B\u102B', '\u200B\u103D'], ['\u200B\u1037', '\u200B\u1036'], ['\u200B\u103C', '\u200B\u1032'], ['\u200B\u102F', '\u200B\u102F'], ['\u200B\u1030', '\u200B\u1030'], ['\u200B\u1038', '\u200B\u102B\u103A'], ['\u1012', '\u1013'], ['Enter', 'Enter']],
629 | [['Shift', 'Shift'], ['\u1016', '\u1007'], ['\u1011', '\u100C'], ['\u1001', '\u1003'], ['\u101C', '\u1020'], ['\u1018', '\u1026'], ['\u100A', '\u1008'], ['\u200B\u102C', '\u102A'], ['\u101A', '\u101B'], ['.', '\u101B'], ['\u104B', '\u104A'], ['Shift', 'Shift']],
630 | [[' ', ' ']]
631 | ], 'lang': ['my'] };
632 |
633 | this.VKI_layout['Nederlands'] = {
634 | 'name': 'Dutch', 'keys': [
635 | [['@', '\u00a7', '\u00ac'], ['1', '!', '\u00b9'], ['2', '"', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00bc'], ['5', '%', '\u00bd'], ['6', '&', '\u00be'], ['7', '_', '\u00a3'], ['8', '(', '{'], ['9', ')', '}'], ['0', '\''], ['/', '?', '\\'], ['\u00b0', '~', '\u00b8'], ['Bksp', 'Bksp']],
636 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R', '\u00b6'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00a8', '^'], ['*', '|'], ['<', '>']],
637 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u00df'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['+', '\u00b1'], ['\u00b4', '`'], ['Enter', 'Enter']],
638 | [['Shift', 'Shift'], [']', '[', '\u00a6'], ['z', 'Z', '\u00ab'], ['x', 'X', '\u00bb'], ['c', 'C', '\u00a2'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u00b5'], [',', ';'], ['.', ':', '\u00b7'], ['-', '='], ['Shift', 'Shift']],
639 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
640 | ], 'lang': ['nl'] };
641 |
642 | this.VKI_layout['Norsk'] = {
643 | 'name': 'Norwegian', 'keys': [
644 | [['|', '\u00a7'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00a3'], ['4', '\u00a4', '$'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?'], ['\\', '`', '\u00b4'], ['Bksp', 'Bksp']],
645 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00e5', '\u00c5'], ['\u00a8', '^', '~'], ['\'', '*']],
646 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00f8', '\u00d8'], ['\u00e6', '\u00c6'], ['Enter', 'Enter']],
647 | [['Shift', 'Shift'], ['<', '>'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u03bc', '\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
648 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
649 | ], 'lang': ['no', 'nb', 'nn'] };
650 |
651 | this.VKI_layout['\u067e\u069a\u062a\u0648'] = {
652 | 'name': 'Pashto', 'keys': [
653 | [['\u200d', '\u00f7', '`'], ['\u06f1', '!', '`'], ['\u06f2', '\u066c', '@'], ['\u06f3', '\u066b', '\u066b'], ['\u06f4', '\u00a4', '\u00a3'], ['\u06f5', '\u066a', '%'], ['\u06f6', '\u00d7', '^'], ['\u06f7', '\u00ab', '&'], ['\u06f8', '\u00bb', '*'], ['\u06f9', '(', '\ufdf2'], ['\u06f0', ')', '\ufefb'], ['-', '\u0640', '_'], ['=', '+', '\ufe87', '\u00f7'], ['Bksp', 'Bksp']],
654 | [['Tab', 'Tab'], ['\u0636', '\u0652', '\u06d5'], ['\u0635', '\u064c', '\u0653'], ['\u062b', '\u064d', '\u20ac'], ['\u0642', '\u064b', '\ufef7'], ['\u0641', '\u064f', '\ufef5'], ['\u063a', '\u0650', '\''], ['\u0639', '\u064e', '\ufe84'], ['\u0647', '\u0651', '\u0670'], ['\u062e', '\u0681', '\''], ['\u062d', '\u0685', '"'], ['\u062c', ']', '}'], ['\u0686', '[', '{'], ['\\', '\u066d', '|']],
655 | [['Caps', 'Caps'], ['\u0634', '\u069a', '\ufbb0'], ['\u0633', '\u06cd', '\u06d2'], ['\u06cc', '\u064a', '\u06d2'], ['\u0628', '\u067e', '\u06ba'], ['\u0644', '\u0623', '\u06b7'], ['\u0627', '\u0622', '\u0671'], ['\u062a', '\u067c', '\u0679'], ['\u0646', '\u06bc', '<'], ['\u0645', '\u0629', '>'], ['\u06a9', ':', '\u0643'], ['\u06af', '\u061b', '\u06ab'], ['Enter', 'Enter']],
656 | [['Shift', 'Shift'], ['\u0638', '\u0626', '?'], ['\u0637', '\u06d0', ';'], ['\u0632', '\u0698', '\u0655'], ['\u0631', '\u0621', '\u0654'], ['\u0630', '\u200c', '\u0625'], ['\u062f', '\u0689', '\u0688'], ['\u0693', '\u0624', '\u0691'], ['\u0648', '\u060c', ','], ['\u0696', '.', '\u06c7'], ['/', '\u061f', '\u06c9'], ['Shift', 'Shift', '\u064d']],
657 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
658 | ], 'lang': ['ps'] };
659 |
660 | this.VKI_layout['\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40'] = {
661 | 'name': 'Punjabi (Gurmukhi)', 'keys': [
662 | [[''], ['1', '\u0A4D\u0A35', '\u0A67', '\u0A67'], ['2', '\u0A4D\u0A2F', '\u0A68', '\u0A68'], ['3', '\u0A4D\u0A30', '\u0A69', '\u0A69'], ['4', '\u0A71', '\u0A6A', '\u0A6A'], ['5', '', '\u0A6B', '\u0A6B'], ['6', '', '\u0A6C', '\u0A6C'], ['7', '', '\u0A6D', '\u0A6D'], ['8', '', '\u0A6E', '\u0A6E'], ['9', '(', '\u0A6F', '\u0A6F'], ['0', ')', '\u0A66', '\u0A66'], ['-'], [''], ['Bksp', 'Bksp']],
663 | [['Tab', 'Tab'], ['\u0A4C', '\u0A14'], ['\u0A48', '\u0A10'], ['\u0A3E', '\u0A06'], ['\u0A40', '\u0A08'], ['\u0A42', '\u0A0A'], ['\u0A2C', '\u0A2D'], ['\u0A39', '\u0A19'], ['\u0A17', '\u0A18', '\u0A5A', '\u0A5A'], ['\u0A26', '\u0A27'], ['\u0A1C', '\u0A1D', '\u0A5B', '\u0A5B'], ['\u0A21', '\u0A22', '\u0A5C', '\u0A5C'], ['Enter', 'Enter']],
664 | [['Caps', 'Caps'], ['\u0A4B', '\u0A13'], ['\u0A47', '\u0A0F'], ['\u0A4D', '\u0A05'], ['\u0A3F', '\u0A07'], ['\u0A41', '\u0A09'], ['\u0A2A', '\u0A2B', '\u0A5E', '\u0A5E'], ['\u0A30'], ['\u0A15', '\u0A16', '\u0A59', '\u0A59'], ['\u0A24', '\u0A25'], ['\u0A1A', '\u0A1B'], ['\u0A1F', '\u0A20'], ['\u0A3C', '\u0A1E']],
665 | [['Shift', 'Shift'], [''], ['\u0A02', '\u0A02'], ['\u0A2E', '\u0A23'], ['\u0A28'], ['\u0A35', '\u0A72', '\u0A73', '\u0A73'], ['\u0A32', '\u0A33'], ['\u0A38', '\u0A36'], [','], ['.', '|', '\u0965', '\u0965'], ['\u0A2F'], ['Shift', 'Shift']],
666 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
667 | ], 'lang': ['pa'] };
668 |
669 | this.VKI_layout['\u62fc\u97f3 (Pinyin)'] = {
670 | 'name': 'Pinyin', 'keys': [
671 | [['`', '~', '\u4e93', '\u301C'], ['1', '!', '\uFF62'], ['2', '@', '\uFF63'], ['3', '#', '\u301D'], ['4', '$', '\u301E'], ['5', '%', '\u301F'], ['6', '^', '\u3008'], ['7', '&', '\u3009'], ['8', '*', '\u302F'], ['9', '(', '\u300A'], ['0', ')', '\u300B'], ['-', '_', '\u300E'], ['=', '+', '\u300F'], ['Bksp', 'Bksp']],
672 | [['Tab', 'Tab'], ['q', 'Q', '\u0101', '\u0100'], ['w', 'W', '\u00E1', '\u00C1'], ['e', 'E', '\u01CE', '\u01CD'], ['r', 'R', '\u00E0', '\u00C0'], ['t', 'T', '\u0113', '\u0112'], ['y', 'Y', '\u00E9', '\u00C9'], ['u', 'U', '\u011B', '\u011A'], ['i', 'I', '\u00E8', '\u00C8'], ['o', 'O', '\u012B', '\u012A'], ['p', 'P', '\u00ED', '\u00CD'], ['[', '{', '\u01D0', '\u01CF'], [']', '}', '\u00EC', '\u00CC'], ['\\', '|', '\u3020']],
673 | [['Caps', 'Caps'], ['a', 'A', '\u014D', '\u014C'], ['s', 'S', '\u00F3', '\u00D3'], ['d', 'D', '\u01D2', '\u01D1'], ['f', 'F', '\u00F2', '\u00D2'], ['g', 'G', '\u00fc', '\u00dc'], ['h', 'H', '\u016B', '\u016A'], ['j', 'J', '\u00FA', '\u00DA'], ['k', 'K', '\u01D4', '\u01D3'], ['l', 'L', '\u00F9', '\u00D9'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
674 | [['Shift', 'Shift'], ['z', 'Z', '\u01D6', '\u01D5'], ['x', 'X', '\u01D8', '\u01D7'], ['c', 'C', '\u01DA', '\u01D9'], ['v', 'V', '\u01DC', '\u01DB'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<', '\u3001'], ['.', '>', '\u3002'], ['/', '?'], ['Shift', 'Shift']],
675 | [['AltLk', 'AltLk'], [' ', ' ', ' ', ' '], ['Alt', 'Alt']]
676 | ], 'lang': ['zh-Latn'] };
677 |
678 | this.VKI_layout['Polski'] = {
679 | 'name': 'Polish (214)', 'keys': [
680 | [['\u02DB', '\u00B7'], ['1', '!', '~'], ['2', '"', '\u02C7'], ['3', '#', '^'], ['4', '\u00A4', '\u02D8'], ['5', '%', '\u00B0'], ['6', '&', '\u02DB'], ['7', '/', '`'], ['8', '(', '\u00B7'], ['9', ')', '\u00B4'], ['0', '=', '\u02DD'], ['+', '?', '\u00A8'], ['\'', '*', '\u00B8'], ['Bksp', 'Bksp']],
681 | [['Tab', 'Tab'], ['q', 'Q', '\\'], ['w', 'W', '\u00A6'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U', '\u20AC'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u017C', '\u0144', '\u00F7'], ['\u015B', '\u0107', '\u00D7'], ['\u00F3', '\u017A']],
682 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u0111'], ['d', 'D', '\u0110'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u0142', '\u0141', '$'], ['\u0105', '\u0119', '\u00DF'], ['Enter', 'Enter']],
683 | [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['-', '_'], ['Shift', 'Shift']],
684 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
685 | ]};
686 |
687 | this.VKI_layout['Polski Programisty'] = {
688 | 'name': 'Polish Programmers', 'keys': [
689 | [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
690 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u0119', '\u0118'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O', '\u00f3', '\u00d3'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\', '|']],
691 | [['Caps', 'Caps'], ['a', 'A', '\u0105', '\u0104'], ['s', 'S', '\u015b', '\u015a'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\u0142', '\u0141'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
692 | [['Shift', 'Shift'], ['z', 'Z', '\u017c', '\u017b'], ['x', 'X', '\u017a', '\u0179'], ['c', 'C', '\u0107', '\u0106'], ['v', 'V'], ['b', 'B'], ['n', 'N', '\u0144', '\u0143'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
693 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
694 | ], 'lang': ['pl'] };
695 |
696 | this.VKI_layout['Portugu\u00eas Brasileiro'] = {
697 | 'name': 'Portuguese (Brazil)', 'keys': [
698 | [['\'', '"'], ['1', '!', '\u00b9'], ['2', '@', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00a3'], ['5', '%', '\u00a2'], ['6', '\u00a8', '\u00ac'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+', '\u00a7'], ['Bksp', 'Bksp']],
699 | [['Tab', 'Tab'], ['q', 'Q', '/'], ['w', 'W', '?'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00b4', '`'], ['[', '{', '\u00aa'], ['Enter', 'Enter']],
700 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00e7', '\u00c7'], ['~', '^'], [']', '}', '\u00ba'], ['/', '?']],
701 | [['Shift', 'Shift'], ['\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C', '\u20a2'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], [':', ':'], ['Shift', 'Shift']],
702 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
703 | ], 'lang': ['pt-BR'] };
704 |
705 | this.VKI_layout['Portugu\u00eas'] = {
706 | 'name': 'Portuguese', 'keys': [
707 | [['\\', '|'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00a3'], ['4', '$', '\u00a7'], ['5', '%'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['\'', '?'], ['\u00ab', '\u00bb'], ['Bksp', 'Bksp']],
708 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['+', '*', '\u00a8'], ['\u00b4', '`'], ['~', '^']],
709 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00e7', '\u00c7'], ['\u00ba', '\u00aa'], ['Enter', 'Enter']],
710 | [['Shift', 'Shift'], ['<', '>', '\\'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
711 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
712 | ], 'lang': ['pt'] };
713 |
714 | this.VKI_layout['Rom\u00e2n\u0103'] = {
715 | 'name': 'Romanian', 'keys': [
716 | [['\u201E', '\u201D', '`', '~'], ['1', '!', '~'], ['2', '@', '\u02C7'], ['3', '#', '^'], ['4', '$', '\u02D8'], ['5', '%', '\u00B0'], ['6', '^', '\u02DB'], ['7', '&', '`'], ['8', '*', '\u02D9'], ['9', '(', '\u00B4'], ['0', ')', '\u02DD'], ['-', '_', '\u00A8'], ['=', '+', '\u00B8', '\u00B1'], ['Bksp', 'Bksp']],
717 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P', '\u00A7'], ['\u0103', '\u0102', '[', '{'], ['\u00EE', '\u00CE', ']', '}'], ['\u00E2', '\u00C2', '\\', '|']],
718 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u00df'], ['d', 'D', '\u00f0', '\u00D0'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\u0142', '\u0141'], [(this.VKI_isIElt8) ? '\u015F' : '\u0219', (this.VKI_isIElt8) ? '\u015E' : '\u0218', ';', ':'], [(this.VKI_isIElt8) ? '\u0163' : '\u021B', (this.VKI_isIElt8) ? '\u0162' : '\u021A', '\'', '"'], ['Enter', 'Enter']],
719 | [['Shift', 'Shift'], ['\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C', '\u00A9'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';', '<', '\u00AB'], ['.', ':', '>', '\u00BB'], ['/', '?'], ['Shift', 'Shift']],
720 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
721 | ], 'lang': ['ro'] };
722 |
723 | this.VKI_layout['\u0420\u0443\u0441\u0441\u043a\u0438\u0439'] = {
724 | 'name': 'Russian', 'keys': [
725 | [['\u0451', '\u0401'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
726 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u044A', '\u042A'], ['\\', '/']],
727 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044B', '\u042B'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u044D', '\u042D'], ['Enter', 'Enter']],
728 | [['Shift', 'Shift'], ['/', '|'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044C', '\u042C'], ['\u0431', '\u0411'], ['\u044E', '\u042E'], ['.', ','], ['Shift', 'Shift']],
729 | [[' ', ' ']]
730 | ], 'lang': ['ru'] };
731 |
732 | this.VKI_layout['Schweizerdeutsch'] = {
733 | 'name': 'Swiss German', 'keys': [
734 | [['\u00A7', '\u00B0'], ['1', '+', '\u00A6'], ['2', '"', '@'], ['3', '*', '#'], ['4', '\u00E7', '\u00B0'], ['5', '%', '\u00A7'], ['6', '&', '\u00AC'], ['7', '/', '|'], ['8', '(', '\u00A2'], ['9', ')'], ['0', '='], ['\'', '?', '\u00B4'], ['^', '`', '~'], ['Bksp', 'Bksp']],
735 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00FC', '\u00E8', '['], ['\u00A8', '!', ']'], ['$', '\u00A3', '}']],
736 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00F6', '\u00E9'], ['\u00E4', '\u00E0', '{'], ['Enter', 'Enter']],
737 | [['Shift', 'Shift'], ['<', '>', '\\'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
738 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
739 | ], 'lang': ['de-CH'] };
740 |
741 | this.VKI_layout['Shqip'] = {
742 | 'name': 'Albanian', 'keys': [
743 | [['\\', '|'], ['1', '!', '~'], ['2', '"', '\u02C7'], ['3', '#', '^'], ['4', '$', '\u02D8'], ['5', '%', '\u00B0'], ['6', '^', '\u02DB'], ['7', '&', '`'], ['8', '*', '\u02D9'], ['9', '(', '\u00B4'], ['0', ')', '\u02DD'], ['-', '_', '\u00A8'], ['=', '+', '\u00B8'], ['Bksp', 'Bksp']],
744 | [['Tab', 'Tab'], ['q', 'Q', '\\'], ['w', 'W', '|'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00E7', '\u00C7', '\u00F7'], ['[', '{', '\u00DF'], [']', '}', '\u00A4']],
745 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u0111'], ['d', 'D', '\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\u0142'], ['l', 'L', '\u0141'], ['\u00EB', '\u00CB', '$'], ['@', '\'', '\u00D7'], ['Enter', 'Enter']],
746 | [['Shift', 'Shift'], ['<', '>'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M', '\u00A7'], [',', ';', '<'], ['.', ':', '>'], ['/', '?'], ['Shift', 'Shift']],
747 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
748 | ], 'lang': ['sq'] };
749 |
750 | this.VKI_layout['Sloven\u010dina'] = {
751 | 'name': 'Slovak', 'keys': [
752 | [[';', '\u00b0'], ['+', '1', '~'], ['\u013E', '2', '\u02C7'], ['\u0161', '3', '^'], ['\u010D', '4', '\u02D8'], ['\u0165', '5', '\u00B0'], ['\u017E', '6', '\u02DB'], ['\u00FD', '7', '`'], ['\u00E1', '8', '\u02D9'], ['\u00ED', '9', '\u00B4'], ['\u00E9', '0', '\u02DD'], ['=', '%', '\u00A8'], ['\u00B4', '\u02c7', '\u00B8'], ['Bksp', 'Bksp']],
753 | [['Tab', 'Tab'], ['q', 'Q', '\\'], ['w', 'W', '|'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P', '\''], ['\u00FA', '/', '\u00F7'], ['\u00E4', '(', '\u00D7'], ['\u0148', ')', '\u00A4']],
754 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S', '\u0111'], ['d', 'D', '\u0110'], ['f', 'F', '['], ['g', 'G', ']'], ['h', 'H'], ['j', 'J'], ['k', 'K', '\u0142'], ['l', 'L', '\u0141'], ['\u00F4', '"', '$'], ['\u00A7', '!', '\u00DF'], ['Enter', 'Enter']],
755 | [['Shift', 'Shift'], ['&', '*', '<'], ['y', 'Y', '>'], ['x', 'X', '#'], ['c', 'C', '&'], ['v', 'V', '@'], ['b', 'B', '{'], ['n', 'N', '}'], ['m', 'M'], [',', '?', '<'], ['.', ':', '>'], ['-', '_', '*', ], ['Shift', 'Shift']],
756 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
757 | ], 'lang': ['sk'] };
758 |
759 | this.VKI_layout['Sloven\u0161\u010dina'] = {
760 | 'name': 'Slovenian', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['sl']
761 | };
762 |
763 | this.VKI_layout['\u0441\u0440\u043f\u0441\u043a\u0438'] = {
764 | 'name': 'Serbian Cyrillic', 'keys': [
765 | [['`', '~'], ['1', '!'], ['2', '"'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '&'], ['7', '/'], ['8', '('], ['9', ')'], ['0', '='], ['\'', '?'], ['+', '*'], ['Bksp', 'Bksp']],
766 | [['Tab', 'Tab'], ['\u0459', '\u0409'], ['\u045a', '\u040a'], ['\u0435', '\u0415', '\u20ac'], ['\u0440', '\u0420'], ['\u0442', '\u0422'], ['\u0437', '\u0417'], ['\u0443', '\u0423'], ['\u0438', '\u0418'], ['\u043e', '\u041e'], ['\u043f', '\u041f'], ['\u0448', '\u0428'], ['\u0452', '\u0402'], ['\u0436', '\u0416']],
767 | [['Caps', 'Caps'], ['\u0430', '\u0410'], ['\u0441', '\u0421'], ['\u0434', '\u0414'], ['\u0444', '\u0424'], ['\u0433', '\u0413'], ['\u0445', '\u0425'], ['\u0458', '\u0408'], ['\u043a', '\u041a'], ['\u043b', '\u041b'], ['\u0447', '\u0427'], ['\u045b', '\u040b'], ['Enter', 'Enter']],
768 | [['Shift', 'Shift'], ['<', '>'], ['\u0455', '\u0405'], ['\u045f', '\u040f'], ['\u0446', '\u0426'], ['\u0432', '\u0412'], ['\u0431', '\u0411'], ['\u043d', '\u041d'], ['\u043c', '\u041c'], [',', ';', '<'], ['.', ':', '>'], ['-', '_', '\u00a9'], ['Shift', 'Shift']],
769 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
770 | ], 'lang': ['sr-Cyrl'] };
771 |
772 | this.VKI_layout['Srpski'] = {
773 | 'name': 'Serbian Latin', 'keys': this.VKI_layout['Bosanski'].keys.slice(0), 'lang': ['sr']
774 | };
775 |
776 | this.VKI_layout['Suomi'] = {
777 | 'name': 'Finnish', 'keys': [
778 | [['\u00a7', '\u00BD'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00A3'], ['4', '\u00A4', '$'], ['5', '%', '\u20AC'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?', '\\'], ['\u00B4', '`'], ['Bksp', 'Bksp']],
779 | [['Tab', 'Tab'], ['q', 'Q', '\u00E2', '\u00C2'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T', '\u0167', '\u0166'], ['y', 'Y'], ['u', 'U'], ['i', 'I', '\u00ef', '\u00CF'], ['o', 'O', '\u00f5', '\u00D5'], ['p', 'P'], ['\u00E5', '\u00C5'], ['\u00A8', '^', '~'], ['\'', '*']],
780 | [['Caps', 'Caps'], ['a', 'A', '\u00E1', '\u00C1'], ['s', 'S', '\u0161', '\u0160'], ['d', 'D', '\u0111', '\u0110'], ['f', 'F', '\u01e5', '\u01E4'], ['g', 'G', '\u01E7', '\u01E6'], ['h', 'H', '\u021F', '\u021e'], ['j', 'J'], ['k', 'K', '\u01e9', '\u01E8'], ['l', 'L'], ['\u00F6', '\u00D6', '\u00F8', '\u00D8'], ['\u00E4', '\u00C4', '\u00E6', '\u00C6'], ['Enter', 'Enter']],
781 | [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z', '\u017E', '\u017D'], ['x', 'X'], ['c', 'C', '\u010d', '\u010C'], ['v', 'V', '\u01EF', '\u01EE'], ['b', 'B', '\u0292', '\u01B7'], ['n', 'N', '\u014B', '\u014A'], ['m', 'M', '\u00B5'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
782 | [['Alt', 'Alt'], [' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
783 | ], 'lang': ['fi'] };
784 |
785 | this.VKI_layout['Svenska'] = {
786 | 'name': 'Swedish', 'keys': [
787 | [['\u00a7', '\u00bd'], ['1', '!'], ['2', '"', '@'], ['3', '#', '\u00a3'], ['4', '\u00a4', '$'], ['5', '%', '\u20ac'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['+', '?', '\\'], ['\u00b4', '`'], ['Bksp', 'Bksp']],
788 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00e5', '\u00c5'], ['\u00a8', '^', '~'], ['\'', '*']],
789 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00f6', '\u00d6'], ['\u00e4', '\u00c4'], ['Enter', 'Enter']],
790 | [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M', '\u03bc', '\u039c'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
791 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
792 | ], 'lang': ['sv'] };
793 |
794 | this.VKI_layout['Swiss Fran\u00e7ais'] = {
795 | 'name': 'Swiss French', 'keys': [
796 | [['\u00A7', '\u00B0'], ['1', '+', '\u00A6'], ['2', '"', '@'], ['3', '*', '#'], ['4', '\u00E7', '\u00B0'], ['5', '%', '\u00A7'], ['6', '&', '\u00AC'], ['7', '/', '|'], ['8', '(', '\u00A2'], ['9', ')'], ['0', '='], ['\'', '?', '\u00B4'], ['^', '`', '~'], ['Bksp', 'Bksp']],
797 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u20AC'], ['r', 'R'], ['t', 'T'], ['z', 'Z'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['\u00E8', '\u00FC', '['], ['\u00A8', '!', ']'], ['$', '\u00A3', '}']],
798 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u00E9', '\u00F6'], ['\u00E0', '\u00E4', '{'], ['Enter', 'Enter']],
799 | [['Shift', 'Shift'], ['<', '>', '\\'], ['y', 'Y'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', ';'], ['.', ':'], ['-', '_'], ['Shift', 'Shift']],
800 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
801 | ], 'lang': ['fr-CH'] };
802 |
803 | this.VKI_layout['\u0723\u0718\u072a\u071d\u071d\u0710'] = {
804 | 'name': 'Syriac', 'keys': [
805 | [['\u070f', '\u032e', '\u0651', '\u0651'], ['1', '!', '\u0701', '\u0701'], ['2', '\u030a', '\u0702', '\u0702'], ['3', '\u0325', '\u0703', '\u0703'], ['4', '\u0749', '\u0704', '\u0704'], ['5', '\u2670', '\u0705', '\u0705'], ['6', '\u2671', '\u0708', '\u0708'], ['7', '\u070a', '\u0709', '\u0709'], ['8', '\u00bb', '\u070B', '\u070B'], ['9', ')', '\u070C', '\u070C'], ['0', '(', '\u070D', '\u070D'], ['-', '\u00ab', '\u250C', '\u250C'], ['=', '+', '\u2510', '\u2510'], ['Bksp', 'Bksp']],
806 | [['Tab', 'Tab'], ['\u0714', '\u0730', '\u064E', '\u064E'], ['\u0728', '\u0733', '\u064B', '\u064B'], ['\u0716', '\u0736', '\u064F', '\u064F'], ['\u0729', '\u073A', '\u064C', '\u064C'], ['\u0726', '\u073D', '\u0653', '\u0653'], ['\u071c', '\u0740', '\u0654', '\u0654'], ['\u0725', '\u0741', '\u0747', '\u0747'], ['\u0717', '\u0308', '\u0743', '\u0743'], ['\u071e', '\u0304', '\u0745', '\u0745'], ['\u071a', '\u0307', '\u032D', '\u032D'], ['\u0713', '\u0303'], ['\u0715', '\u074A'], ['\u0706', ':']],
807 | [['Caps', 'Caps'], ['\u072b', '\u0731', '\u0650', '\u0650'], ['\u0723', '\u0734', '\u064d', '\u064d'], ['\u071d', '\u0737'], ['\u0712', '\u073b', '\u0621', '\u0621'], ['\u0720', '\u073e', '\u0655', '\u0655'], ['\u0710', '\u0711', '\u0670', '\u0670'], ['\u072c', '\u0640', '\u0748', '\u0748'], ['\u0722', '\u0324', '\u0744', '\u0744'], ['\u0721', '\u0331', '\u0746', '\u0746'], ['\u071f', '\u0323'], ['\u071b', '\u0330'], ['Enter', 'Enter']],
808 | [['Shift', 'Shift'], [']', '\u0732'], ['[', '\u0735', '\u0652', '\u0652'], ['\u0724', '\u0738'], ['\u072a', '\u073c', '\u200D'], ['\u0727', '\u073f', '\u200C'], ['\u0700', '\u0739', '\u200E'], ['.', '\u0742', '\u200F'], ['\u0718', '\u060c'], ['\u0719', '\u061b'], ['\u0707', '\u061F'], ['Shift', 'Shift']],
809 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
810 | ], 'lang': ['syc'] };
811 |
812 | this.VKI_layout['\u0ba4\u0bae\u0bbf\u0bb4\u0bcd'] = {
813 | 'name': 'Tamil', 'keys': [
814 | [['\u0BCA', '\u0B92'], ['1', '', '\u0BE7'], ['2', '', '\u0BE8'], ['3', '', '\u0BE9'], ['4', '', '\u0BEA'], ['5', '', '\u0BEB'], ['6', '\u0BA4\u0BCD\u0BB0', '\u0BEC'], ['7', '\u0B95\u0BCD\u0BB7', '\u0BED'], ['8', '\u0BB7\u0BCD\u0BB0', '\u0BEE'], ['9', '', '\u0BEF'], ['0', '', '\u0BF0'], ['-', '\u0B83', '\u0BF1'], ['', '', '\u0BF2'], ['Bksp', 'Bksp']],
815 | [['Tab', 'Tab'], ['\u0BCC', '\u0B94'], ['\u0BC8', '\u0B90'], ['\u0BBE', '\u0B86'], ['\u0BC0', '\u0B88'], ['\u0BC2', '\u0B8A'], ['\u0BAA', '\u0BAA'], ['\u0BB9', '\u0B99'], ['\u0B95', '\u0B95'], ['\u0BA4', '\u0BA4'], ['\u0B9C', '\u0B9A'], ['\u0B9F', '\u0B9F'], ['\u0B9E']],
816 | [['Caps', 'Caps'], ['\u0BCB', '\u0B93'], ['\u0BC7', '\u0B8F'], ['\u0BCD', '\u0B85'], ['\u0BBF', '\u0B87'], ['\u0BC1', '\u0B89'], ['\u0BAA', '\u0BAA'], ['\u0BB0', '\u0BB1'], ['\u0B95', '\u0B95'], ['\u0BA4', '\u0BA4'], ['\u0B9A', '\u0B9A'], ['\u0B9F', '\u0B9F'], ['Enter', 'Enter']],
817 | [['Shift', 'Shift'], ['\u0BC6', '\u0B8E'], [''], ['\u0BAE', '\u0BA3'], ['\u0BA8', '\u0BA9'], ['\u0BB5', '\u0BB4'], ['\u0BB2', '\u0BB3'], ['\u0BB8', '\u0BB7'], [',', '\u0BB7'], ['.', '\u0BB8\u0BCD\u0BB0\u0BC0'], ['\u0BAF', '\u0BAF'], ['Shift', 'Shift']],
818 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
819 | ], 'lang': ['ta'] };
820 |
821 | this.VKI_layout['\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41'] = {
822 | 'name': 'Telugu', 'keys': [
823 | [['\u0C4A', '\u0C12'], ['1', '', '\u0C67'], ['2', '', '\u0C68'], ['3', '\u0C4D\u0C30', '\u0C69'], ['4', '', '\u0C6A'], ['5', '\u0C1C\u0C4D\u0C1E', '\u0C6B'], ['6', '\u0C24\u0C4D\u0C30', '\u0C6C'], ['7', '\u0C15\u0C4D\u0C37', '\u0C6D'], ['8', '\u0C36\u0C4D\u0C30', '\u0C6E'], ['9', '(', '\u0C6F'], ['0', ')', '\u0C66'], ['-', '\u0C03'], ['\u0C43', '\u0C0B', '\u0C44'], ['Bksp', 'Bksp']],
824 | [['Tab', 'Tab'], ['\u0C4C', '\u0C14'], ['\u0C48', '\u0C10', '\u0C56'], ['\u0C3E', '\u0C06'], ['\u0C40', '\u0C08', '', '\u0C61'], ['\u0C42', '\u0C0A'], ['\u0C2C'], ['\u0C39', '\u0C19'], ['\u0C17', '\u0C18'], ['\u0C26', '\u0C27'], ['\u0C1C', '\u0C1D'], ['\u0C21', '\u0C22'], ['', '\u0C1E']],
825 | [['Caps', 'Caps'], ['\u0C4B', '\u0C13'], ['\u0C47', '\u0C0F', '\u0C55'], ['\u0C4D', '\u0C05'], ['\u0C3F', '\u0C07', '', '\u0C0C'], ['\u0C41', '\u0C09'], ['\u0C2A', '\u0C2B'], ['\u0C30', '\u0C31'], ['\u0C15', '\u0C16'], ['\u0C24', '\u0C25'], ['\u0C1A', '\u0C1B'], ['\u0C1F', '\u0C25'], ['Enter', 'Enter']],
826 | [['Shift', 'Shift'], ['\u0C46', '\u0C0E'], ['\u0C02', '\u0C01'], ['\u0C2E', '\u0C23'], ['\u0C28', '\u0C28'], ['\u0C35'], ['\u0C32', '\u0C33'], ['\u0C38', '\u0C36'], [',', '\u0C37'], ['.'], ['\u0C2F'], ['Shift', 'Shift']],
827 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
828 | ], 'lang': ['te'] };
829 |
830 | this.VKI_layout['Ti\u1ebfng Vi\u1ec7t'] = {
831 | 'name': 'Vietnamese', 'keys': [
832 | [['`', '~', '`', '~'], ['\u0103', '\u0102', '1', '!'], ['\u00E2', '\u00C2', '2', '@'], ['\u00EA', '\u00CA', '3', '#'], ['\u00F4', '\u00D4', '4', '$'], ['\u0300', '\u0300', '5', '%'], ['\u0309', '\u0309', '6', '^'], ['\u0303', '\u0303', '7', '&'], ['\u0301', '\u0301', '8', '*'], ['\u0323', '\u0323', '9', '('], ['\u0111', '\u0110', '0', ')'], ['-', '_', '-', '_'], ['\u20AB', '+', '=', '+'], ['Bksp', 'Bksp']],
833 | [['Tab', 'Tab'], ['q', 'Q', 'q', 'Q'], ['w', 'W', 'w', 'W'], ['e', 'E', 'e', 'E'], ['r', 'R', 'r', 'R'], ['t', 'T', 't', 'T'], ['y', 'Y', 'y', 'Y'], ['u', 'U', 'u', 'U'], ['i', 'I', 'i', 'I'], ['o', 'O', 'o', 'O'], ['p', 'P', 'p', 'P'], ['\u01B0', '\u01AF', '[', '{'], ['\u01A1', '\u01A0', ']', '}'], ['\\', '|', '\\', '|']],
834 | [['Caps', 'Caps'], ['a', 'A', 'a', 'A'], ['s', 'S', 's', 'S'], ['d', 'D', 'd', 'D'], ['f', 'F', 'f', 'F'], ['g', 'G', 'g', 'G'], ['h', 'H', 'h', 'H'], ['j', 'J', 'j', 'J'], ['k', 'K', 'k', 'K'], ['l', 'L', 'l', 'L'], [';', ':', ';', ':'], ['\'', '"', '\'', '"'], ['Enter', 'Enter']],
835 | [['Shift', 'Shift'], ['z', 'Z', 'z', 'Z'], ['x', 'X', 'x', 'X'], ['c', 'C', 'c', 'C'], ['v', 'V', 'v', 'V'], ['b', 'B', 'b', 'B'], ['n', 'N', 'n', 'N'], ['m', 'M', 'm', 'M'], [',', '<', ',', '<'], ['.', '>', '.', '>'], ['/', '?', '/', '?'], ['Shift', 'Shift']],
836 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
837 | ], 'lang': ['vi'] };
838 |
839 | this.VKI_layout['\u0e44\u0e17\u0e22 Kedmanee'] = {
840 | 'name': 'Thai Kedmanee', 'keys': [
841 | [['_', '%'], ['\u0E45', '+'], ['/', '\u0E51'], ['-', '\u0E52'], ['\u0E20', '\u0E53'], ['\u0E16', '\u0E54'], ['\u0E38', '\u0E39'], ['\u0E36', '\u0E3F'], ['\u0E04', '\u0E55'], ['\u0E15', '\u0E56'], ['\u0E08', '\u0E57'], ['\u0E02', '\u0E58'], ['\u0E0A', '\u0E59'], ['Bksp', 'Bksp']],
842 | [['Tab', 'Tab'], ['\u0E46', '\u0E50'], ['\u0E44', '"'], ['\u0E33', '\u0E0E'], ['\u0E1E', '\u0E11'], ['\u0E30', '\u0E18'], ['\u0E31', '\u0E4D'], ['\u0E35', '\u0E4A'], ['\u0E23', '\u0E13'], ['\u0E19', '\u0E2F'], ['\u0E22', '\u0E0D'], ['\u0E1A', '\u0E10'], ['\u0E25', ','], ['\u0E03', '\u0E05']],
843 | [['Caps', 'Caps'], ['\u0E1F', '\u0E24'], ['\u0E2B', '\u0E06'], ['\u0E01', '\u0E0F'], ['\u0E14', '\u0E42'], ['\u0E40', '\u0E0C'], ['\u0E49', '\u0E47'], ['\u0E48', '\u0E4B'], ['\u0E32', '\u0E29'], ['\u0E2A', '\u0E28'], ['\u0E27', '\u0E0B'], ['\u0E07', '.'], ['Enter', 'Enter']],
844 | [['Shift', 'Shift'], ['\u0E1C', '('], ['\u0E1B', ')'], ['\u0E41', '\u0E09'], ['\u0E2D', '\u0E2E'], ['\u0E34', '\u0E3A'], ['\u0E37', '\u0E4C'], ['\u0E17', '?'], ['\u0E21', '\u0E12'], ['\u0E43', '\u0E2C'], ['\u0E1D', '\u0E26'], ['Shift', 'Shift']],
845 | [[' ', ' ']]
846 | ], 'lang': ['th'] };
847 |
848 | this.VKI_layout['\u0e44\u0e17\u0e22 Pattachote'] = {
849 | 'name': 'Thai Pattachote', 'keys': [
850 | [['_', '\u0E3F'], ['=', '+'], ['\u0E52', '"'], ['\u0E53', '/'], ['\u0E54', ','], ['\u0E55', '?'], ['\u0E39', '\u0E38'], ['\u0E57', '_'], ['\u0E58', '.'], ['\u0E59', '('], ['\u0E50', ')'], ['\u0E51', '-'], ['\u0E56', '%'], ['Bksp', 'Bksp']],
851 | [['Tab', 'Tab'], ['\u0E47', '\u0E4A'], ['\u0E15', '\u0E24'], ['\u0E22', '\u0E46'], ['\u0E2D', '\u0E0D'], ['\u0E23', '\u0E29'], ['\u0E48', '\u0E36'], ['\u0E14', '\u0E1D'], ['\u0E21', '\u0E0B'], ['\u0E27', '\u0E16'], ['\u0E41', '\u0E12'], ['\u0E43', '\u0E2F'], ['\u0E0C', '\u0E26'], ['\uF8C7', '\u0E4D']],
852 | [['Caps', 'Caps'], ['\u0E49', '\u0E4B'], ['\u0E17', '\u0E18'], ['\u0E07', '\u0E33'], ['\u0E01', '\u0E13'], ['\u0E31', '\u0E4C'], ['\u0E35', '\u0E37'], ['\u0E32', '\u0E1C'], ['\u0E19', '\u0E0A'], ['\u0E40', '\u0E42'], ['\u0E44', '\u0E06'], ['\u0E02', '\u0E11'], ['Enter', 'Enter']],
853 | [['Shift', 'Shift'], ['\u0E1A', '\u0E0E'], ['\u0E1B', '\u0E0F'], ['\u0E25', '\u0E10'], ['\u0E2B', '\u0E20'], ['\u0E34', '\u0E31'], ['\u0E04', '\u0E28'], ['\u0E2A', '\u0E2E'], ['\u0E30', '\u0E1F'], ['\u0E08', '\u0E09'], ['\u0E1E', '\u0E2C'], ['Shift', 'Shift']],
854 | [[' ', ' ']]
855 | ]};
856 |
857 | this.VKI_layout['\u0422\u0430\u0442\u0430\u0440\u0447\u0430'] = {
858 | 'name': 'Tatar', 'keys': [
859 | [['\u04BB', '\u04BA', '\u0451', '\u0401'], ['1', '!'], ['2', '"', '@'], ['3', '\u2116', '#'], ['4', ';', '$'], ['5', '%'], ['6', ':'], ['7', '?', '['], ['8', '*', ']'], ['9', '(', '{'], ['0', ')', '}'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
860 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u04E9', '\u04E8', '\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u04D9', '\u04D8', '\u0449', '\u0429'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u04AF', '\u04AE', '\u044A', '\u042A'], ['\\', '/']],
861 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u044B', '\u042B'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u04A3', '\u04A2', '\u0436', '\u0416'], ['\u044D', '\u042D', '\''], ['Enter', 'Enter']],
862 | [['Shift', 'Shift'], ['\u0491', '\u0490'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u0497', '\u0496', '\u044C', '\u042C'], ['\u0431', '\u0411', '<'], ['\u044E', '\u042E', '>'], ['.', ','], ['Shift', 'Shift']],
863 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
864 | ], 'lang': ['tt'] };
865 |
866 | this.VKI_layout['T\u00fcrk\u00e7e F'] = {
867 | 'name': 'Turkish F', 'keys': [
868 | [['+', '*', '\u00ac'], ['1', '!', '\u00b9', '\u00a1'], ['2', '"', '\u00b2'], ['3', '^', '#', '\u00b3'], ['4', '$', '\u00bc', '\u00a4'], ['5', '%', '\u00bd'], ['6', '&', '\u00be'], ['7', '\'', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['/', '?', '\\', '\u00bf'], ['-', '_', '|'], ['Bksp', 'Bksp']],
869 | [['Tab', 'Tab'], ['f', 'F', '@'], ['g', 'G'], ['\u011f', '\u011e'], ['\u0131', 'I', '\u00b6', '\u00ae'], ['o', 'O'], ['d', 'D', '\u00a5'], ['r', 'R'], ['n', 'N'], ['h', 'H', '\u00f8', '\u00d8'], ['p', 'P', '\u00a3'], ['q', 'Q', '\u00a8'], ['w', 'W', '~'], ['x', 'X', '`']],
870 | [['Caps', 'Caps'], ['u', 'U', '\u00e6', '\u00c6'], ['i', '\u0130', '\u00df', '\u00a7'], ['e', 'E', '\u20ac'], ['a', 'A', ' ', '\u00aa'], ['\u00fc', '\u00dc'], ['t', 'T'], ['k', 'K'], ['m', 'M'], ['l', 'L'], ['y', 'Y', '\u00b4'], ['\u015f', '\u015e'], ['Enter', 'Enter']],
871 | [['Shift', 'Shift'], ['<', '>', '|', '\u00a6'], ['j', 'J', '\u00ab', '<'], ['\u00f6', '\u00d6', '\u00bb', '>'], ['v', 'V', '\u00a2', '\u00a9'], ['c', 'C'], ['\u00e7', '\u00c7'], ['z', 'Z'], ['s', 'S', '\u00b5', '\u00ba'], ['b', 'B', '\u00d7'], ['.', ':', '\u00f7'], [',', ';', '-'], ['Shift', 'Shift']],
872 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
873 | ]};
874 |
875 | this.VKI_layout['T\u00fcrk\u00e7e Q'] = {
876 | 'name': 'Turkish Q', 'keys': [
877 | [['"', '\u00e9', '<'], ['1', '!', '>'], ['2', '\'', '\u00a3'], ['3', '^', '#'], ['4', '+', '$'], ['5', '%', '\u00bd'], ['6', '&'], ['7', '/', '{'], ['8', '(', '['], ['9', ')', ']'], ['0', '=', '}'], ['*', '?', '\\'], ['-', '_', '|'], ['Bksp', 'Bksp']],
878 | [['Tab', 'Tab'], ['q', 'Q', '@'], ['w', 'W'], ['e', 'E', '\u20ac'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['\u0131', 'I', 'i', '\u0130'], ['o', 'O'], ['p', 'P'], ['\u011f', '\u011e', '\u00a8'], ['\u00fc', '\u00dc', '~'], [',', ';', '`']],
879 | [['Caps', 'Caps'], ['a', 'A', '\u00e6', '\u00c6'], ['s', 'S', '\u00df'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], ['\u015f', '\u015e', '\u00b4'], ['i', '\u0130'], ['Enter', 'Enter']],
880 | [['Shift', 'Shift'], ['<', '>', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], ['\u00f6', '\u00d6'], ['\u00e7', '\u00c7'], ['.', ':'], ['Shift', 'Shift']],
881 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
882 | ], 'lang': ['tr'] };
883 |
884 | this.VKI_layout['\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430'] = {
885 | 'name': 'Ukrainian', 'keys': [
886 | [['\u00b4', '~'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
887 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u0449', '\u0429'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u0457', '\u0407'], ['\u0491', '\u0490']],
888 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u0456', '\u0406'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u0454', '\u0404'], ['Enter', 'Enter']],
889 | [['Shift', 'Shift'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044C', '\u042C'], ['\u0431', '\u0411'], ['\u044E', '\u042E'], ['.', ','], ['Shift', 'Shift']],
890 | [[' ', ' ']]
891 | ], 'lang': ['uk'] };
892 |
893 | this.VKI_layout['United Kingdom'] = {
894 | 'name': 'United Kingdom', 'keys': [
895 | [['`', '\u00ac', '\u00a6'], ['1', '!'], ['2', '"'], ['3', '\u00a3'], ['4', '$', '\u20ac'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
896 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E', '\u00e9', '\u00c9'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U', '\u00fa', '\u00da'], ['i', 'I', '\u00ed', '\u00cd'], ['o', 'O', '\u00f3', '\u00d3'], ['p', 'P'], ['[', '{'], [']', '}'], ['#', '~']],
897 | [['Caps', 'Caps'], ['a', 'A', '\u00e1', '\u00c1'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\'', '@'], ['Enter', 'Enter']],
898 | [['Shift', 'Shift'], ['\\', '|'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
899 | [[' ', ' ', ' ', ' '], ['AltGr', 'AltGr']]
900 | ], 'lang': ['en-gb'] };
901 |
902 | this.VKI_layout['\u0627\u0631\u062f\u0648'] = {
903 | 'name': 'Urdu', 'keys': [
904 | [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '\u066A'], ['6', '^'], ['7', '\u06D6'], ['8', '\u066D'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
905 | [['Tab', 'Tab'], ['\u0637', '\u0638'], ['\u0635', '\u0636'], ['\u06be', '\u0630'], ['\u062f', '\u0688'], ['\u0679', '\u062B'], ['\u067e', '\u0651'], ['\u062a', '\u06C3'], ['\u0628', '\u0640'], ['\u062c', '\u0686'], ['\u062d', '\u062E'], [']', '}'], ['[', '{'], ['\\', '|']],
906 | [['Caps', 'Caps'], ['\u0645', '\u0698'], ['\u0648', '\u0632'], ['\u0631', '\u0691'], ['\u0646', '\u06BA'], ['\u0644', '\u06C2'], ['\u06c1', '\u0621'], ['\u0627', '\u0622'], ['\u06A9', '\u06AF'], ['\u06CC', '\u064A'], ['\u061b', ':'], ['\'', '"'], ['Enter', 'Enter']],
907 | [['Shift', 'Shift'], ['\u0642', '\u200D'], ['\u0641', '\u200C'], ['\u06D2', '\u06D3'], ['\u0633', '\u200E'], ['\u0634', '\u0624'], ['\u063a', '\u0626'], ['\u0639', '\u200F'], ['\u060C', '>'], ['\u06D4', '<'], ['/', '\u061F'], ['Shift', 'Shift']],
908 | [[' ', ' ']]
909 | ], 'lang': ['ur'] };
910 |
911 | this.VKI_layout['\u0627\u0631\u062f\u0648 Phonetic'] = {
912 | 'name': 'Urdu Phonetic', 'keys': [
913 | [['\u064D', '\u064B', '~'], ['\u06F1', '1', '!'], ['\u06F2', '2', '@'], ['\u06F3', '3', '#'], ['\u06F4', '4', '$'], ['\u06F5', '5', '\u066A'], ['\u06F6', '6', '^'], ['\u06F7', '7', '&'], ['\u06F8', '8', '*'], ['\u06F9', '9', '('], ['\u06F0', '0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
914 | [['Tab', 'Tab'], ['\u0642', '\u0652'], ['\u0648', '\u0651', '\u0602'], ['\u0639', '\u0670', '\u0656'], ['\u0631', '\u0691', '\u0613'], ['\u062A', '\u0679', '\u0614'], ['\u06D2', '\u064E', '\u0601'], ['\u0621', '\u0626', '\u0654'], ['\u06CC', '\u0650', '\u0611'], ['\u06C1', '\u06C3'], ['\u067E', '\u064F', '\u0657'], ['[', '{'], [']', '}'], ['\\', '|']],
915 | [['Caps', 'Caps'], ['\u0627', '\u0622', '\uFDF2'], ['\u0633', '\u0635', '\u0610'], ['\u062F', '\u0688', '\uFDFA'], ['\u0641'], ['\u06AF', '\u063A'], ['\u062D', '\u06BE', '\u0612'], ['\u062C', '\u0636', '\uFDFB'], ['\u06A9', '\u062E'], ['\u0644'], ['\u061B', ':'], ['\'', '"'], ['Enter', 'Enter']],
916 | [['Shift', 'Shift'], ['\u0632', '\u0630', '\u060F'], ['\u0634', '\u0698', '\u060E'], ['\u0686', '\u062B', '\u0603'], ['\u0637', '\u0638'], ['\u0628', '', '\uFDFD'], ['\u0646', '\u06BA', '\u0600'], ['\u0645', '\u0658'], ['\u060C', '', '<'], ['\u06D4', '\u066B', '>'], ['/', '\u061F'], ['Shift', 'Shift']],
917 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
918 | ]};
919 |
920 | this.VKI_layout['US Standard'] = {
921 | 'name': 'US Standard', 'keys': [
922 | [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
923 | [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\', '|']],
924 | [['Caps', 'Caps'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
925 | [['Shift', 'Shift'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
926 | [[' ', ' ']]
927 | ], 'lang': ['en-us'] };
928 |
929 | this.VKI_layout['US International'] = {
930 | 'name': 'US International', 'keys': [
931 | [['`', '~'], ['1', '!', '\u00a1', '\u00b9'], ['2', '@', '\u00b2'], ['3', '#', '\u00b3'], ['4', '$', '\u00a4', '\u00a3'], ['5', '%', '\u20ac'], ['6', '^', '\u00bc'], ['7', '&', '\u00bd'], ['8', '*', '\u00be'], ['9', '(', '\u2018'], ['0', ')', '\u2019'], ['-', '_', '\u00a5'], ['=', '+', '\u00d7', '\u00f7'], ['Bksp', 'Bksp']],
932 | [['Tab', 'Tab'], ['q', 'Q', '\u00e4', '\u00c4'], ['w', 'W', '\u00e5', '\u00c5'], ['e', 'E', '\u00e9', '\u00c9'], ['r', 'R', '\u00ae'], ['t', 'T', '\u00fe', '\u00de'], ['y', 'Y', '\u00fc', '\u00dc'], ['u', 'U', '\u00fa', '\u00da'], ['i', 'I', '\u00ed', '\u00cd'], ['o', 'O', '\u00f3', '\u00d3'], ['p', 'P', '\u00f6', '\u00d6'], ['[', '{', '\u00ab'], [']', '}', '\u00bb'], ['\\', '|', '\u00ac', '\u00a6']],
933 | [['Caps', 'Caps'], ['a', 'A', '\u00e1', '\u00c1'], ['s', 'S', '\u00df', '\u00a7'], ['d', 'D', '\u00f0', '\u00d0'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L', '\u00f8', '\u00d8'], [';', ':', '\u00b6', '\u00b0'], ['\'', '"', '\u00b4', '\u00a8'], ['Enter', 'Enter']],
934 | [['Shift', 'Shift'], ['z', 'Z', '\u00e6', '\u00c6'], ['x', 'X'], ['c', 'C', '\u00a9', '\u00a2'], ['v', 'V'], ['b', 'B'], ['n', 'N', '\u00f1', '\u00d1'], ['m', 'M', '\u00b5'], [',', '<', '\u00e7', '\u00c7'], ['.', '>'], ['/', '?', '\u00bf'], ['Shift', 'Shift']],
935 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
936 | ], 'lang': ['en'] };
937 |
938 | this.VKI_layout['\u040e\u0437\u0431\u0435\u043a\u0447\u0430'] = {
939 | 'name': 'Uzbek Cyrillic', 'keys': [
940 | [['\u0451', '\u0401'], ['1', '!'], ['2', '"'], ['3', '\u2116'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['\u0493', '\u0492'], ['\u04B3', '\u04B2'], ['Bksp', 'Bksp']],
941 | [['Tab', 'Tab'], ['\u0439', '\u0419'], ['\u0446', '\u0426'], ['\u0443', '\u0423'], ['\u043A', '\u041A'], ['\u0435', '\u0415'], ['\u043D', '\u041D'], ['\u0433', '\u0413'], ['\u0448', '\u0428'], ['\u045E', '\u040E'], ['\u0437', '\u0417'], ['\u0445', '\u0425'], ['\u044A', '\u042A'], ['\\', '/']],
942 | [['Caps', 'Caps'], ['\u0444', '\u0424'], ['\u049B', '\u049A'], ['\u0432', '\u0412'], ['\u0430', '\u0410'], ['\u043F', '\u041F'], ['\u0440', '\u0420'], ['\u043E', '\u041E'], ['\u043B', '\u041B'], ['\u0434', '\u0414'], ['\u0436', '\u0416'], ['\u044D', '\u042D'], ['Enter', 'Enter']],
943 | [['Shift', 'Shift'], ['\u044F', '\u042F'], ['\u0447', '\u0427'], ['\u0441', '\u0421'], ['\u043C', '\u041C'], ['\u0438', '\u0418'], ['\u0442', '\u0422'], ['\u044C', '\u042C'], ['\u0431', '\u0411'], ['\u044E', '\u042E'], ['.', ','], ['Shift', 'Shift']],
944 | [[' ', ' ']]
945 | ], 'lang': ['uz'] };
946 |
947 | this.VKI_layout['\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9'] = { // from https://www.yv.org/uyip/hebyidkbd.txt https://uyip.org/keyboards.html
948 | 'name': 'Yiddish', 'keys': [
949 | [[';', '~', '\u05B0'], ['1', '!', '\u05B1'], ['2', '@', '\u05B2'], ['3', '#', '\u05B3'], ['4', '$', '\u05B4'], ['5', '%', '\u05B5'], ['6', '^', '\u05B6'], ['7', '*', '\u05B7'], ['8', '&', '\u05B8'], ['9', '(', '\u05C2'], ['0', ')', '\u05C1'], ['-', '_', '\u05B9'], ['=', '+', '\u05BC'], ['Bksp', 'Bksp']],
950 | [['Tab', 'Tab'], ['/', '\u201F', '\u201F'], ['\'', '\u201E', '\u201E'], ['\u05E7', '`', '`'], ['\u05E8', '\uFB2F', '\uFB2F'], ['\u05D0', '\uFB2E', '\uFB2E'], ['\u05D8', '\u05F0', '\u05F0'], ['\u05D5', '\uFB35', '\uFB35'], ['\u05DF', '\uFB4B', '\uFB4B'], ['\u05DD', '\uFB4E', '\uFB4E'], ['\u05E4', '\uFB44', '\uFB44'], ['[', '{', '\u05BD'], [']', '}', '\u05BF'], ['\\', '|', '\u05BB']],
951 | [['Caps', 'Caps'], ['\u05E9', '\uFB2A', '\uFB2A'], ['\u05D3', '\uFB2B', '\uFB2B'], ['\u05D2'], ['\u05DB', '\uFB3B', '\uFB3B'], ['\u05E2', '\u05F1', '\u05F1'], ['\u05D9', '\uFB1D', '\uFB1D'], ['\u05D7', '\uFF1F', '\uFF1F'], ['\u05DC', '\u05F2', '\u05F2'], ['\u05DA'], ['\u05E3', ':', '\u05C3'], [',', '"', '\u05C0'], ['Enter', 'Enter']],
952 | [['Shift', 'Shift'], ['\u05D6', '\u2260', '\u2260'], ['\u05E1', '\uFB4C', '\uFB4C'], ['\u05D1', '\uFB31', '\uFB31'], ['\u05D4', '\u05BE', '\u05BE'], ['\u05E0', '\u2013', '\u2013'], ['\u05DE', '\u2014', '\u2014'], ['\u05E6', '\uFB4A', '\uFB4A'], ['\u05EA', '<', '\u05F3'], ['\u05E5', '>', '\u05F4'], ['.', '?', '\u20AA'], ['Shift', 'Shift']],
953 | [[' ', ' '], ['Alt', 'Alt']]
954 | ], 'lang': ['yi'] };
955 |
956 | this.VKI_layout['\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9 \u05dc\u05e2\u05d1\u05d8'] = { // from https://jidysz.net/
957 | 'name': 'Yiddish (Yidish Lebt)', 'keys': [
958 | [[';', '~'], ['1', '!', '\u05B2', '\u05B2'], ['2', '@', '\u05B3', '\u05B3'], ['3', '#', '\u05B1', '\u05B1'], ['4', '$', '\u05B4', '\u05B4'], ['5', '%', '\u05B5', '\u05B5'], ['6', '^', '\u05B7', '\u05B7'], ['7', '&', '\u05B8', '\u05B8'], ['8', '*', '\u05BB', '\u05BB'], ['9', ')', '\u05B6', '\u05B6'], ['0', '(', '\u05B0', '\u05B0'], ['-', '_', '\u05BF', '\u05BF'], ['=', '+', '\u05B9', '\u05B9'], ['Bksp', 'Bksp']],
959 | [['Tab', 'Tab'], ['/', '', '\u05F4', '\u05F4'], ['\'', '', '\u05F3', '\u05F3'], ['\u05E7', '', '\u20AC'], ['\u05E8'], ['\u05D0', '', '\u05D0\u05B7', '\uFB2E'], ['\u05D8', '', '\u05D0\u05B8', '\uFB2F'], ['\u05D5', '\u05D5\u05B9', '\u05D5\u05BC', '\uFB35'], ['\u05DF', '', '\u05D5\u05D5', '\u05F0'], ['\u05DD', '', '\u05BC'], ['\u05E4', '', '\u05E4\u05BC', '\uFB44'], [']', '}', '\u201E', '\u201D'], ['[', '{', '\u201A', '\u2019'], ['\\', '|', '\u05BE', '\u05BE']],
960 | [['Caps', 'Caps'], ['\u05E9', '\u05E9\u05C1', '\u05E9\u05C2', '\uFB2B'], ['\u05D3', '', '\u20AA'], ['\u05D2', '\u201E'], ['\u05DB', '', '\u05DB\u05BC', '\uFB3B'], ['\u05E2', '', '', '\uFB20'], ['\u05D9', '', '\u05D9\u05B4', '\uFB1D'], ['\u05D7', '', '\u05F2\u05B7', '\uFB1F'], ['\u05DC', '\u05DC\u05B9', '\u05D5\u05D9', '\u05F1'], ['\u05DA', '', '', '\u05F2'], ['\u05E3', ':', '\u05E4\u05BF', '\uFB4E'], [',', '"', ';', '\u05B2'], ['Enter', 'Enter']],
961 | [['Shift', 'Shift'], ['\u05D6', '', '\u2013', '\u2013'], ['\u05E1', '', '\u2014', '\u2014'], ['\u05D1', '\u05DC\u05B9', '\u05D1\u05BF', '\uFB4C'], ['\u05D4', '', '\u201D', '\u201C'], ['\u05E0', '', '\u059C', '\u059E'], ['\u05DE', '', '\u2019', '\u2018'], ['\u05E6', '', '\u05E9\u05C1', '\uFB2A'], ['\u05EA', '>', '\u05EA\u05BC', '\uFB4A'], ['\u05E5', '<'], ['.', '?', '\u2026'], ['Shift', 'Shift']],
962 | [[' ', ' ', ' ', ' '], ['Alt', 'Alt']]
963 | ], 'lang': ['yi'] };
964 |
965 | this.VKI_layout['\u4e2d\u6587\u6ce8\u97f3\u7b26\u53f7'] = {
966 | 'name': 'Chinese Bopomofo IME', 'keys': [
967 | [['\u20AC', '~'], ['\u3105', '!'], ['\u3109', '@'], ['\u02C7', '#'], ['\u02CB', '$'], ['\u3113', '%'], ['\u02CA', '^'], ['\u02D9', '&'], ['\u311A', '*'], ['\u311E', ')'], ['\u3122', '('], ['\u3126', '_'], ['=', '+'], ['Bksp', 'Bksp']],
968 | [['Tab', 'Tab'], ['\u3106', 'q'], ['\u310A', 'w'], ['\u310D', 'e'], ['\u3110', 'r'], ['\u3114', 't'], ['\u3117', 'y'], ['\u3127', 'u'], ['\u311B', 'i'], ['\u311F', 'o'], ['\u3123', 'p'], ['[', '{'], [']', '}'], ['\\', '|']],
969 | [['Caps', 'Caps'], ['\u3107', 'a'], ['\u310B', 's'], ['\u310E', 'd'], ['\u3111', 'f'], ['\u3115', 'g'], ['\u3118', 'h'], ['\u3128', 'j'], ['\u311C', 'k'], ['\u3120', 'l'], ['\u3124', ':'], ['\'', '"'], ['Enter', 'Enter']],
970 | [['Shift', 'Shift'], ['\u3108', 'z'], ['\u310C', 'x'], ['\u310F', 'c'], ['\u3112', 'v'], ['\u3116', 'b'], ['\u3119', 'n'], ['\u3129', 'm'], ['\u311D', '<'], ['\u3121', '>'], ['\u3125', '?'], ['Shift', 'Shift']],
971 | [[' ', ' ']]
972 | ], 'lang': ['zh-Bopo'] };
973 |
974 | this.VKI_layout['\u4e2d\u6587\u4ed3\u9889\u8f93\u5165\u6cd5'] = {
975 | 'name': 'Chinese Cangjie IME', 'keys': [
976 | [['\u20AC', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', ')'], ['0', '('], ['-', '_'], ['=', '+'], ['Bksp', 'Bksp']],
977 | [['Tab', 'Tab'], ['\u624B', 'q'], ['\u7530', 'w'], ['\u6C34', 'e'], ['\u53E3', 'r'], ['\u5EFF', 't'], ['\u535C', 'y'], ['\u5C71', 'u'], ['\u6208', 'i'], ['\u4EBA', 'o'], ['\u5FC3', 'p'], ['[', '{'], [']', '}'], ['\\', '|']],
978 | [['Caps', 'Caps'], ['\u65E5', 'a'], ['\u5C38', 's'], ['\u6728', 'd'], ['\u706B', 'f'], ['\u571F', 'g'], ['\u7AF9', 'h'], ['\u5341', 'j'], ['\u5927', 'k'], ['\u4E2D', 'l'], [';', ':'], ['\'', '"'], ['Enter', 'Enter']],
979 | [['Shift', 'Shift'], ['\uFF3A', 'z'], ['\u96E3', 'x'], ['\u91D1', 'c'], ['\u5973', 'v'], ['\u6708', 'b'], ['\u5F13', 'n'], ['\u4E00', 'm'], [',', '<'], ['.', '>'], ['/', '?'], ['Shift', 'Shift']],
980 | [[' ', ' ']]
981 | ], 'lang': ['zh'] };
982 |
983 |
984 | /* ***** Define Dead Keys ************************************** */
985 | this.VKI_deadkey = {};
986 |
987 | // - Lay out each dead key set as an object of property/value
988 | // pairs. The rows below are wrapped so uppercase letters are
989 | // below their lowercase equivalents.
990 | //
991 | // - The property name is the letter pressed after the diacritic.
992 | // The property value is the letter this key-combo will generate.
993 | //
994 | // - Note that if you have created a new keyboard layout and want
995 | // it included in the distributed script, PLEASE TELL ME if you
996 | // have added additional dead keys to the ones below.
997 |
998 | this.VKI_deadkey['"'] = this.VKI_deadkey['\u00a8'] = this.VKI_deadkey['\u309B'] = { // Umlaut / Diaeresis / Greek Dialytika / Hiragana/Katakana Voiced Sound Mark
999 | 'a': '\u00e4', 'e': '\u00eb', 'i': '\u00ef', 'o': '\u00f6', 'u': '\u00fc', 'y': '\u00ff', '\u03b9': '\u03ca', '\u03c5': '\u03cb', '\u016B': '\u01D6', '\u00FA': '\u01D8', '\u01D4': '\u01DA', '\u00F9': '\u01DC',
1000 | 'A': '\u00c4', 'E': '\u00cb', 'I': '\u00cf', 'O': '\u00d6', 'U': '\u00dc', 'Y': '\u0178', '\u0399': '\u03aa', '\u03a5': '\u03ab', '\u016A': '\u01D5', '\u00DA': '\u01D7', '\u01D3': '\u01D9', '\u00D9': '\u01DB',
1001 | '\u304b': '\u304c', '\u304d': '\u304e', '\u304f': '\u3050', '\u3051': '\u3052', '\u3053': '\u3054', '\u305f': '\u3060', '\u3061': '\u3062', '\u3064': '\u3065', '\u3066': '\u3067', '\u3068': '\u3069',
1002 | '\u3055': '\u3056', '\u3057': '\u3058', '\u3059': '\u305a', '\u305b': '\u305c', '\u305d': '\u305e', '\u306f': '\u3070', '\u3072': '\u3073', '\u3075': '\u3076', '\u3078': '\u3079', '\u307b': '\u307c',
1003 | '\u30ab': '\u30ac', '\u30ad': '\u30ae', '\u30af': '\u30b0', '\u30b1': '\u30b2', '\u30b3': '\u30b4', '\u30bf': '\u30c0', '\u30c1': '\u30c2', '\u30c4': '\u30c5', '\u30c6': '\u30c7', '\u30c8': '\u30c9',
1004 | '\u30b5': '\u30b6', '\u30b7': '\u30b8', '\u30b9': '\u30ba', '\u30bb': '\u30bc', '\u30bd': '\u30be', '\u30cf': '\u30d0', '\u30d2': '\u30d3', '\u30d5': '\u30d6', '\u30d8': '\u30d9', '\u30db': '\u30dc'
1005 | };
1006 | this.VKI_deadkey['~'] = { // Tilde / Stroke
1007 | 'a': '\u00e3', 'l': '\u0142', 'n': '\u00f1', 'o': '\u00f5',
1008 | 'A': '\u00c3', 'L': '\u0141', 'N': '\u00d1', 'O': '\u00d5'
1009 | };
1010 | this.VKI_deadkey['^'] = { // Circumflex
1011 | 'a': '\u00e2', 'e': '\u00ea', 'i': '\u00ee', 'o': '\u00f4', 'u': '\u00fb', 'w': '\u0175', 'y': '\u0177',
1012 | 'A': '\u00c2', 'E': '\u00ca', 'I': '\u00ce', 'O': '\u00d4', 'U': '\u00db', 'W': '\u0174', 'Y': '\u0176'
1013 | };
1014 | this.VKI_deadkey['\u02c7'] = { // Baltic caron
1015 | 'c': '\u010D', 'd': '\u010f', 'e': '\u011b', 's': '\u0161', 'l': '\u013e', 'n': '\u0148', 'r': '\u0159', 't': '\u0165', 'u': '\u01d4', 'z': '\u017E', '\u00fc': '\u01da',
1016 | 'C': '\u010C', 'D': '\u010e', 'E': '\u011a', 'S': '\u0160', 'L': '\u013d', 'N': '\u0147', 'R': '\u0158', 'T': '\u0164', 'U': '\u01d3', 'Z': '\u017D', '\u00dc': '\u01d9'
1017 | };
1018 | this.VKI_deadkey['\u02d8'] = { // Romanian and Turkish breve
1019 | 'a': '\u0103', 'g': '\u011f',
1020 | 'A': '\u0102', 'G': '\u011e'
1021 | };
1022 | this.VKI_deadkey['-'] = this.VKI_deadkey['\u00af'] = { // Macron
1023 | 'a': '\u0101', 'e': '\u0113', 'i': '\u012b', 'o': '\u014d', 'u': '\u016B', 'y': '\u0233', '\u00fc': '\u01d6',
1024 | 'A': '\u0100', 'E': '\u0112', 'I': '\u012a', 'O': '\u014c', 'U': '\u016A', 'Y': '\u0232', '\u00dc': '\u01d5'
1025 | };
1026 | this.VKI_deadkey['`'] = { // Grave
1027 | 'a': '\u00e0', 'e': '\u00e8', 'i': '\u00ec', 'o': '\u00f2', 'u': '\u00f9', '\u00fc': '\u01dc',
1028 | 'A': '\u00c0', 'E': '\u00c8', 'I': '\u00cc', 'O': '\u00d2', 'U': '\u00d9', '\u00dc': '\u01db'
1029 | };
1030 | this.VKI_deadkey['\''] = this.VKI_deadkey['\u00b4'] = this.VKI_deadkey['\u0384'] = { // Acute / Greek Tonos
1031 | 'a': '\u00e1', 'e': '\u00e9', 'i': '\u00ed', 'o': '\u00f3', 'u': '\u00fa', 'y': '\u00fd', '\u03b1': '\u03ac', '\u03b5': '\u03ad', '\u03b7': '\u03ae', '\u03b9': '\u03af', '\u03bf': '\u03cc', '\u03c5': '\u03cd', '\u03c9': '\u03ce', '\u00fc': '\u01d8',
1032 | 'A': '\u00c1', 'E': '\u00c9', 'I': '\u00cd', 'O': '\u00d3', 'U': '\u00da', 'Y': '\u00dd', '\u0391': '\u0386', '\u0395': '\u0388', '\u0397': '\u0389', '\u0399': '\u038a', '\u039f': '\u038c', '\u03a5': '\u038e', '\u03a9': '\u038f', '\u00dc': '\u01d7'
1033 | };
1034 | this.VKI_deadkey['\u02dd'] = { // Hungarian Double Acute Accent
1035 | 'o': '\u0151', 'u': '\u0171',
1036 | 'O': '\u0150', 'U': '\u0170'
1037 | };
1038 | this.VKI_deadkey['\u0385'] = { // Greek Dialytika + Tonos
1039 | '\u03b9': '\u0390', '\u03c5': '\u03b0'
1040 | };
1041 | this.VKI_deadkey['\u00b0'] = this.VKI_deadkey['\u00ba'] = { // Ring
1042 | 'a': '\u00e5', 'u': '\u016f',
1043 | 'A': '\u00c5', 'U': '\u016e'
1044 | };
1045 | this.VKI_deadkey['\u02DB'] = { // Ogonek
1046 | 'a': '\u0106', 'e': '\u0119', 'i': '\u012f', 'o': '\u01eb', 'u': '\u0173', 'y': '\u0177',
1047 | 'A': '\u0105', 'E': '\u0118', 'I': '\u012e', 'O': '\u01ea', 'U': '\u0172', 'Y': '\u0176'
1048 | };
1049 | this.VKI_deadkey['\u02D9'] = { // Dot-above
1050 | 'c': '\u010B', 'e': '\u0117', 'g': '\u0121', 'z': '\u017C',
1051 | 'C': '\u010A', 'E': '\u0116', 'G': '\u0120', 'Z': '\u017B'
1052 | };
1053 | this.VKI_deadkey['\u00B8'] = this.VKI_deadkey['\u201a'] = { // Cedilla
1054 | 'c': '\u00e7', 's': '\u015F',
1055 | 'C': '\u00c7', 'S': '\u015E'
1056 | };
1057 | this.VKI_deadkey[','] = { // Comma
1058 | 's': (this.VKI_isIElt8) ? '\u015F' : '\u0219', 't': (this.VKI_isIElt8) ? '\u0163' : '\u021B',
1059 | 'S': (this.VKI_isIElt8) ? '\u015E' : '\u0218', 'T': (this.VKI_isIElt8) ? '\u0162' : '\u021A'
1060 | };
1061 | this.VKI_deadkey['\u3002'] = { // Hiragana/Katakana Point
1062 | '\u306f': '\u3071', '\u3072': '\u3074', '\u3075': '\u3077', '\u3078': '\u307a', '\u307b': '\u307d',
1063 | '\u30cf': '\u30d1', '\u30d2': '\u30d4', '\u30d5': '\u30d7', '\u30d8': '\u30da', '\u30db': '\u30dd'
1064 | };
1065 |
1066 |
1067 | /* ***** Define Symbols **************************************** */
1068 | this.VKI_symbol = {
1069 | '\u00a0': "NB\nSP", '\u200b': "ZW\nSP", '\u200c': "ZW\nNJ", '\u200d': "ZW\nJ"
1070 | };
1071 |
1072 |
1073 | /* ***** Layout Number Pad ************************************* */
1074 | this.VKI_numpad = [
1075 | [['$'], ['\u00a3'], ['\u20ac'], ['\u00a5']],
1076 | [['7'], ['8'], ['9'], ['/']],
1077 | [['4'], ['5'], ['6'], ['*']],
1078 | [['1'], ['2'], ['3'], ['=']],
1079 | [['0'], ['.'], ['+'], ['-']]
1080 | ];
1081 |
1082 |
1083 | /* ****************************************************************
1084 | * Attach the keyboard to an element
1085 | *
1086 | */
1087 | VKI_attach = function(elem) {
1088 | if (elem.getAttribute('VKI_attached')) return false;
1089 | if (self.VKI_imageURI) {
1090 | let keybut = document.createElement('img');
1091 | keybut.src = self.VKI_path + self.VKI_imageURI;
1092 | keybut.alt = self.VKI_i18n['01'];
1093 | keybut.classList.add('keyboardInputInitiator');
1094 | keybut.title = self.VKI_i18n['01'];
1095 | keybut.elem = elem;
1096 | keybut.addEventListener('click', function(e) {
1097 | e = e || event;
1098 | if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;
1099 | self.VKI_show(this.elem);
1100 | }, false);
1101 | elem.parentNode.insertBefore(keybut, (elem.dir == 'rtl') ? elem : elem.nextSibling);
1102 | } else {
1103 | elem.addEventListener('focus', function() {
1104 | if (self.VKI_target != this) {
1105 | if (self.VKI_target) self.VKI_close();
1106 | self.VKI_show(this);
1107 | }
1108 | }, false);
1109 | elem.addEventListener('click', function() {
1110 | if (!self.VKI_target) self.VKI_show(this);
1111 | }, false);
1112 | }
1113 | elem.setAttribute('VKI_attached', 'true');
1114 | elem.setAttribute('VKI_type', elem.type);
1115 | elem.setAttribute('inputmode', 'none');
1116 | if (elem.classList.contains('keyboardInputNumbersOnly')) {
1117 | elem.setAttribute('VKI_numpadInput', 'true');
1118 | elem.min = 0;
1119 | elem.step = 1;
1120 | } else if (elem.type == 'number') {
1121 | elem.setAttribute('VKI_numpadInput', 'true');
1122 | } else elem.setAttribute('VKI_numpadInput', 'false');
1123 | if (self.VKI_isIE) {
1124 | elem.onclick = elem.onselect = elem.onkeyup = function(e) {
1125 | if ((e || event).type != 'keyup' || !this.readOnly)
1126 | this.range = document.selection.createRange();
1127 | };
1128 | }
1129 | VKI_addListener(elem, 'click', function(e) {
1130 | if (self.VKI_target == this) {
1131 | e = e || event;
1132 | if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;
1133 | } return false;
1134 | }, false);
1135 | if (self.VKI_flashPassword && elem.getAttribute('VKI_type') == 'password') {
1136 | elem.setAttribute('autocomplete', 'new-password');
1137 | elem.storeValue = elem.value;
1138 | elem.timeout = false;
1139 | elem.addEventListener('focus', function() {
1140 | if (typeof this.timeout !== 'number')
1141 | this.storeValue = this.value;
1142 | }, false);
1143 | elem.restorePassword = function() {
1144 | if (typeof this.timeout === 'number') {
1145 | this.type = 'password';
1146 | this.value = this.storeValue;
1147 | clearTimeout(this.timeout);
1148 | this.timeout = false;
1149 | }
1150 | };
1151 | if (elem.form) {
1152 | elem.form.addEventListener('submit', function(e) {
1153 | elem.restorePassword();
1154 | }, false);
1155 | }
1156 | elem.addEventListener('beforeinput', function() {
1157 | elem.restorePassword();
1158 | }, false);
1159 | elem.addEventListener('input', function() {
1160 | let selfPass = this;
1161 | if (this.value.length == this.storeValue.length + 1) {
1162 | this.storeValue = this.value;
1163 | this.value = this.value.replace(/.(?!$)/g, '•');
1164 | setTimeout(function() {
1165 | selfPass.type = 'text';
1166 | selfPass.setSelectionRange(selfPass.value.length, selfPass.value.length);
1167 | }, 0);
1168 | this.timeout = setTimeout(function() {
1169 | selfPass.type = 'password';
1170 | selfPass.value = selfPass.storeValue;
1171 | selfPass.timeout = false;
1172 | }, self.VKI_flashPassword);
1173 | } else this.storeValue = this.value;
1174 | }, false);
1175 | }
1176 | if (elem.getAttribute('VKI_numpadInput') == 'true') {
1177 | elem.type = (elem.getAttribute('VKI_type') == 'password') ? 'password' : 'text';
1178 | elem.addEventListener('beforeinput', function() {
1179 | if (this.getAttribute('VKI_type') != 'password')
1180 | this.storeValue = this.value;
1181 | }, false);
1182 | elem.addEventListener('input', function() {
1183 | let selfNumpadInput = this;
1184 | if (!this.value.match(new RegExp(this.pattern)) ||
1185 | (this.max && parseFloat(this.value) > parseFloat(this.max)) ||
1186 | (this.min && parseFloat(this.value) < parseFloat(this.min))) {
1187 | if (this.getAttribute('VKI_type') != 'password')
1188 | this.value = this.storeValue;
1189 | }
1190 | }, false);
1191 | }
1192 | if (self.VKI_isMoz)
1193 | elem.addEventListener('blur', function() { this.setAttribute('_scrollTop', this.scrollTop); }, false);
1194 | };
1195 |
1196 |
1197 | /* ***** Find tagged input & textarea elements ***************** */
1198 | function VKI_buildKeyboardInputs() {
1199 | let inputElems = [
1200 | document.getElementsByTagName('input'),
1201 | document.getElementsByTagName('textarea')
1202 | ];
1203 | for (let x = 0, elem; elem = inputElems[x++];)
1204 | for (let y = 0, ex; ex = elem[y++];)
1205 | if (ex.nodeName == 'TEXTAREA' || ex.type == 'text' || ex.type == 'number' || ex.type == 'password')
1206 | if (ex.classList.contains('keyboardInput')) VKI_attach(ex);
1207 |
1208 | VKI_addListener(document.documentElement, 'click', function(e) { self.VKI_close(); }, false);
1209 | }
1210 |
1211 |
1212 | /* ****************************************************************
1213 | * Common mouse event actions
1214 | *
1215 | */
1216 | function VKI_mouseEvents(elem) {
1217 | if (elem.nodeName == 'TD') {
1218 | if (!elem.click) elem.click = function() {
1219 | let evt = this.ownerDocument.createEvent('MouseEvents');
1220 | evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
1221 | this.dispatchEvent(evt);
1222 | };
1223 | elem.VKI_clickless = 0;
1224 | VKI_addListener(elem, 'dblclick', function() { return false; }, false);
1225 | }
1226 | VKI_addListener(elem, 'mouseover', function() {
1227 | if (this.nodeName == 'TD' && self.VKI_clickless) {
1228 | let _self = this;
1229 | clearTimeout(this.VKI_clickless);
1230 | this.VKI_clickless = setTimeout(function() { _self.click(); }, self.VKI_clickless);
1231 | }
1232 | if (self.VKI_isIE) this.classList.add('hover');
1233 | }, false);
1234 | VKI_addListener(elem, 'mouseout', function() {
1235 | if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);
1236 | if (self.VKI_isIE) this.classList.remove('hover', 'pressed');
1237 | }, false);
1238 | VKI_addListener(elem, 'mousedown', function() {
1239 | if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);
1240 | if (self.VKI_isIE) this.classList.add('pressed');
1241 | }, false);
1242 | VKI_addListener(elem, 'mouseup', function() {
1243 | if (this.nodeName == 'TD') clearTimeout(this.VKI_clickless);
1244 | if (self.VKI_isIE) this.classList.remove('pressed');
1245 | }, false);
1246 | }
1247 |
1248 |
1249 | /* ***** Build the keyboard interface ************************** */
1250 | this.VKI_keyboard = document.createElement('table');
1251 | this.VKI_keyboard.id = 'keyboardInputMaster';
1252 | this.VKI_keyboard.dir = 'ltr';
1253 | this.VKI_keyboard.cellSpacing = '0';
1254 | this.VKI_keyboard.reflow = function() {
1255 | this.style.width = '50px';
1256 | let foo = this.offsetWidth;
1257 | this.style.width = '';
1258 | };
1259 | VKI_addListener(this.VKI_keyboard, 'click', function(e) {
1260 | e = e || event;
1261 | if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;
1262 | return false;
1263 | }, false);
1264 |
1265 | if (!this.VKI_layout[this.VKI_kt])
1266 | return alert('No keyboard named "' + this.VKI_kt + '"');
1267 |
1268 | this.VKI_langCode = {};
1269 | let thead = document.createElement('thead');
1270 | let thtr = document.createElement('tr');
1271 | let thth = document.createElement('th');
1272 | thth.colSpan = '2';
1273 |
1274 | let kbSelect = document.createElement('div');
1275 | kbSelect.id = 'keyboardInputSelect';
1276 | kbSelect.title = this.VKI_i18n['02'];
1277 | VKI_addListener(kbSelect, 'click', function() {
1278 | let ol = this.getElementsByTagName('ol')[0];
1279 | if (!ol.style.display) {
1280 | ol.style.display = 'block';
1281 | let li = ol.getElementsByTagName('li'), scr = 0;
1282 | for (let x = 0; x < li.length; x++) {
1283 | if (VKI_kt == li[x].firstChild.nodeValue) {
1284 | li[x].classList.add('selected');
1285 | scr = li[x].offsetTop - li[x].offsetHeight * 2;
1286 | } else li[x].classList.remove('selected');
1287 | } setTimeout(function() { ol.scrollTop = scr; }, 0);
1288 | } else ol.style.display = '';
1289 | }, false);
1290 | kbSelect.appendChild(document.createTextNode(this.VKI_kt));
1291 | kbSelect.appendChild(document.createTextNode(this.VKI_isIElt8 ? ' \u2193' : ' \u25be'));
1292 | kbSelect.langCount = 0;
1293 | let ol = document.createElement('ol');
1294 | for (ktype in this.VKI_layout) {
1295 | if (typeof this.VKI_layout[ktype] == 'object') {
1296 | if (!this.VKI_layout[ktype].lang) this.VKI_layout[ktype].lang = [];
1297 | for (let x = 0; x < this.VKI_layout[ktype].lang.length; x++)
1298 | this.VKI_langCode[this.VKI_layout[ktype].lang[x].toLowerCase().replace(/-/g, '_')] = ktype;
1299 | let li = document.createElement('li');
1300 | li.title = this.VKI_layout[ktype].name;
1301 | VKI_addListener(li, 'click', function(e) {
1302 | e = e || event;
1303 | if (e.stopPropagation) { e.stopPropagation(); } else e.cancelBubble = true;
1304 | this.parentNode.style.display = '';
1305 | self.VKI_kts = self.VKI_kt = kbSelect.firstChild.nodeValue = this.firstChild.nodeValue;
1306 | self.VKI_buildKeys();
1307 | self.VKI_position(true);
1308 | }, false);
1309 | VKI_mouseEvents(li);
1310 | li.appendChild(document.createTextNode(ktype));
1311 | ol.appendChild(li);
1312 | kbSelect.langCount++;
1313 | }
1314 | } kbSelect.appendChild(ol);
1315 | if (kbSelect.langCount > 1) thth.appendChild(kbSelect);
1316 | this.VKI_langCode.index = [];
1317 | for (prop in this.VKI_langCode)
1318 | if (prop != 'index' && typeof this.VKI_langCode[prop] == 'string')
1319 | this.VKI_langCode.index.push(prop);
1320 | this.VKI_langCode.index.sort();
1321 | this.VKI_langCode.index.reverse();
1322 |
1323 | if (this.VKI_numberPad) {
1324 | let numtogspan = document.createElement('span');
1325 | numtogspan.id = 'keyboardInputNumpadToggle';
1326 | numtogspan.appendChild(document.createTextNode('#'));
1327 | numtogspan.title = this.VKI_i18n['00'];
1328 | VKI_addListener(numtogspan, 'click', function() {
1329 | kbNumpad.style.display = (!kbNumpad.style.display) ? 'none' : '';
1330 | kbNumpad.previousStyle = kbNumpad.style.display;
1331 | self.VKI_position(true);
1332 | }, false);
1333 | VKI_mouseEvents(numtogspan);
1334 | thth.appendChild(numtogspan);
1335 | }
1336 |
1337 | this.VKI_kbsize = function(e) {
1338 | self.VKI_size = Math.min(5, Math.max(1, self.VKI_size));
1339 | self.VKI_keyboard.className = self.VKI_keyboard.className.replace(/\bkeyboardInputSize\d\b/, '');
1340 | if (self.VKI_size != 2) self.VKI_keyboard.classList.add('keyboardInputSize' + self.VKI_size);
1341 | self.VKI_position(true);
1342 | if (self.VKI_isOpera) self.VKI_keyboard.reflow();
1343 | };
1344 | if (this.VKI_sizeAdj) {
1345 | let small = document.createElement('small');
1346 | small.title = this.VKI_i18n['10'];
1347 | VKI_addListener(small, 'click', function() {
1348 | --self.VKI_size;
1349 | self.VKI_kbsize();
1350 | }, false);
1351 | VKI_mouseEvents(small);
1352 | small.appendChild(document.createTextNode(this.VKI_isIElt8 ? '\u2193' : '\u21d3'));
1353 | thth.appendChild(small);
1354 | let big = document.createElement('big');
1355 | big.title = this.VKI_i18n['11'];
1356 | VKI_addListener(big, 'click', function() {
1357 | ++self.VKI_size;
1358 | self.VKI_kbsize();
1359 | }, false);
1360 | VKI_mouseEvents(big);
1361 | big.appendChild(document.createTextNode(this.VKI_isIElt8 ? '\u2191' : '\u21d1'));
1362 | thth.appendChild(big);
1363 | }
1364 |
1365 | let numbkspspan = document.createElement('span');
1366 | numbkspspan.id = 'keyboardInputNumpadBksp';
1367 | numbkspspan.appendChild(document.createTextNode('\u21E6'));
1368 | numbkspspan.title = this.VKI_i18n['12'];
1369 | VKI_addListener(numbkspspan, 'click', function() { self.VKI_backspace(); }, false);
1370 | VKI_mouseEvents(numbkspspan);
1371 | thth.appendChild(numbkspspan);
1372 |
1373 | let clrspan = document.createElement('span');
1374 | clrspan.appendChild(document.createTextNode(this.VKI_i18n['07']));
1375 | clrspan.title = this.VKI_i18n['08'];
1376 | VKI_addListener(clrspan, 'click', function() {
1377 | self.VKI_target.value = '';
1378 | self.VKI_target.focus();
1379 | return false;
1380 | }, false);
1381 | VKI_mouseEvents(clrspan);
1382 | thth.appendChild(clrspan);
1383 |
1384 | let strong = document.createElement('strong');
1385 | strong.appendChild(document.createTextNode('X'));
1386 | strong.title = this.VKI_i18n['06'];
1387 | VKI_addListener(strong, 'click', function() { self.VKI_close(); }, false);
1388 | VKI_mouseEvents(strong);
1389 | thth.appendChild(strong);
1390 |
1391 | thtr.appendChild(thth);
1392 | thead.appendChild(thtr);
1393 | this.VKI_keyboard.appendChild(thead);
1394 |
1395 | let tbody = document.createElement('tbody');
1396 | let tr = document.createElement('tr');
1397 | let td = document.createElement('td');
1398 | td.id = 'keyboardInputKeyboard';
1399 | let div = document.createElement('div');
1400 |
1401 | if (this.VKI_deadBox) {
1402 | let label = document.createElement('label');
1403 | let checkbox = document.createElement('input');
1404 | checkbox.type = 'checkbox';
1405 | checkbox.title = this.VKI_i18n['03'] + ': ' + ((this.VKI_deadkeysOn) ? this.VKI_i18n['04'] : this.VKI_i18n['05']);
1406 | checkbox.defaultChecked = this.VKI_deadkeysOn;
1407 | VKI_addListener(checkbox, 'click', function() {
1408 | this.title = self.VKI_i18n['03'] + ': ' + ((this.checked) ? self.VKI_i18n['04'] : self.VKI_i18n['05']);
1409 | self.VKI_modify('');
1410 | return true;
1411 | }, false);
1412 | label.appendChild(checkbox);
1413 | checkbox.checked = this.VKI_deadkeysOn;
1414 | div.appendChild(label);
1415 | this.VKI_deadkeysOn = checkbox;
1416 | } else this.VKI_deadkeysOn.checked = this.VKI_deadkeysOn;
1417 |
1418 | if (this.VKI_showVersion) {
1419 | let vr = document.createElement('var');
1420 | vr.title = this.VKI_i18n['09'] + ' ' + this.VKI_version;
1421 | vr.appendChild(document.createTextNode('v' + this.VKI_version));
1422 | div.appendChild(vr);
1423 | } td.appendChild(div);
1424 | tr.appendChild(td);
1425 |
1426 | let kbNumpad = document.createElement('td');
1427 | kbNumpad.id = 'keyboardInputNumpad';
1428 | if (!this.VKI_numberPadOn) {
1429 | kbNumpad.style.display = 'none';
1430 | kbNumpad.previousStyle = 'none';
1431 | } else kbNumpad.previousStyle = '';
1432 | let ntable = document.createElement('table');
1433 | ntable.cellSpacing = '0';
1434 | let ntbody = document.createElement('tbody');
1435 | for (let x = 0; x < this.VKI_numpad.length; x++) {
1436 | let ntr = document.createElement('tr');
1437 | for (let y = 0; y < this.VKI_numpad[x].length; y++) {
1438 | let ntd = document.createElement('td');
1439 | VKI_addListener(ntd, 'click', VKI_keyClick, false);
1440 | VKI_mouseEvents(ntd);
1441 | if (this.VKI_numpad[x][y][0].match(/\d/)) ntd.classList.add('digit');
1442 | if (this.VKI_numpad[x][y][0] == '.') ntd.classList.add('decimal');
1443 | if (this.VKI_numpad[x][y][0] == '-') ntd.classList.add('negative');
1444 | ntd.appendChild(document.createTextNode(this.VKI_numpad[x][y][0]));
1445 | ntr.appendChild(ntd);
1446 | } ntbody.appendChild(ntr);
1447 | } ntable.appendChild(ntbody);
1448 | kbNumpad.appendChild(ntable);
1449 | tr.appendChild(kbNumpad);
1450 | tbody.appendChild(tr);
1451 | this.VKI_keyboard.appendChild(tbody);
1452 |
1453 | if (this.VKI_isIE6) {
1454 | this.VKI_iframe = document.createElement('iframe');
1455 | this.VKI_iframe.style.position = 'absolute';
1456 | this.VKI_iframe.style.border = '0 none';
1457 | this.VKI_iframe.style.filter = 'mask()';
1458 | this.VKI_iframe.style.zIndex = '999999';
1459 | this.VKI_iframe.src = this.VKI_imageURI;
1460 | }
1461 |
1462 |
1463 | /* ****************************************************************
1464 | * Private table cell attachment function for generic characters
1465 | *
1466 | */
1467 | function VKI_keyClick() {
1468 | let done = false, character = '\xa0';
1469 | if (this.firstChild.nodeName.toLowerCase() != 'small') {
1470 | if ((character = this.firstChild.nodeValue) == '\xa0') return false;
1471 | } else character = this.firstChild.getAttribute('char');
1472 | if (self.VKI_deadkeysOn.checked && self.VKI_dead) {
1473 | if (self.VKI_dead != character) {
1474 | if (character != ' ') {
1475 | if (self.VKI_deadkey[self.VKI_dead][character]) {
1476 | self.VKI_insert(self.VKI_deadkey[self.VKI_dead][character]);
1477 | done = true;
1478 | }
1479 | } else {
1480 | self.VKI_insert(self.VKI_dead);
1481 | done = true;
1482 | }
1483 | } else done = true;
1484 | } self.VKI_dead = false;
1485 |
1486 | if (!done) {
1487 | if (self.VKI_deadkeysOn.checked && self.VKI_deadkey[character]) {
1488 | self.VKI_dead = character;
1489 | this.classList.add('dead');
1490 | if (self.VKI_shift) self.VKI_modify('Shift');
1491 | if (self.VKI_altgr) self.VKI_modify('AltGr');
1492 | } else self.VKI_insert(character);
1493 | } self.VKI_modify('');
1494 | return false;
1495 | }
1496 |
1497 |
1498 | /* ****************************************************************
1499 | * Build or rebuild the keyboard keys
1500 | *
1501 | */
1502 | this.VKI_buildKeys = function() {
1503 | this.VKI_shift = this.VKI_shiftlock = this.VKI_altgr = this.VKI_altgrlock = this.VKI_dead = false;
1504 | let container = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0];
1505 | let tables = container.getElementsByTagName('table');
1506 | for (let x = tables.length - 1; x >= 0; x--) container.removeChild(tables[x]);
1507 |
1508 | let hasDeadKey = false;
1509 | for (let x = 0, lyt; lyt = this.VKI_layout[this.VKI_kt].keys[x++];) {
1510 | let table = document.createElement('table');
1511 | table.cellSpacing = '0';
1512 | if (lyt.length <= this.VKI_keyCenter) table.classList.add('keyboardInputCenter');
1513 | let tbody = document.createElement('tbody');
1514 | let tr = document.createElement('tr');
1515 | for (let y = 0, lkey; lkey = lyt[y++];) {
1516 | let td = document.createElement('td');
1517 | if (this.VKI_symbol[lkey[0]]) {
1518 | let text = this.VKI_symbol[lkey[0]].split("\n");
1519 | let small = document.createElement('small');
1520 | small.setAttribute('char', lkey[0]);
1521 | for (let z = 0; z < text.length; z++) {
1522 | if (z) small.appendChild(document.createElement('br'));
1523 | small.appendChild(document.createTextNode(text[z]));
1524 | } td.appendChild(small);
1525 | } else td.appendChild(document.createTextNode(lkey[0] || '\xa0'));
1526 |
1527 | if (this.VKI_deadkeysOn.checked)
1528 | for (key in this.VKI_deadkey)
1529 | if (key === lkey[0]) { td.classList.add('deadkey'); break; }
1530 | if (lyt.length > this.VKI_keyCenter && y == lyt.length) td.classList.add('last');
1531 | if (lkey[0] == ' ' || lkey[1] == ' ') td.classList.add('space');
1532 |
1533 | switch (lkey[1]) {
1534 | case 'Caps': case 'Shift':
1535 | case 'Alt': case 'AltGr': case 'AltLk':
1536 | VKI_addListener(td, 'click', (function(type) { return function() { self.VKI_modify(type); return false; }})(lkey[1]), false);
1537 | break;
1538 | case 'Tab':
1539 | VKI_addListener(td, 'click', function() {
1540 | if (self.VKI_activeTab) {
1541 | if (self.VKI_target.form) {
1542 | let target = self.VKI_target, elems = target.form.elements;
1543 | self.VKI_close();
1544 | for (let z = 0, me = false, j = -1; z < elems.length; z++) {
1545 | if (j == -1 && elems[z].getAttribute('VKI_attached')) j = z;
1546 | if (me) {
1547 | if (self.VKI_activeTab == 1 && elems[z]) break;
1548 | if (elems[z].getAttribute('VKI_attached')) break;
1549 | } else if (elems[z] == target) me = true;
1550 | } if (z == elems.length) z = Math.max(j, 0);
1551 | if (elems[z].getAttribute('VKI_attached')) {
1552 | self.VKI_show(elems[z]);
1553 | } else elems[z].focus();
1554 | } else self.VKI_target.focus();
1555 | } else self.VKI_insert("\t");
1556 | return false;
1557 | }, false);
1558 | break;
1559 | case 'Bksp':
1560 | td.title = this.VKI_i18n['12'];
1561 | VKI_addListener(td, 'click', function() { self.VKI_backspace(); }, false);
1562 | break;
1563 | case 'Enter':
1564 | VKI_addListener(td, 'click', function() {
1565 | if (self.VKI_target.nodeName != 'TEXTAREA') {
1566 | if (self.VKI_enterSubmit && self.VKI_target.form) {
1567 | for (let z = 0, subm = false; z < self.VKI_target.form.elements.length; z++)
1568 | if (self.VKI_target.form.elements[z].type == 'submit') subm = true;
1569 | if (!subm) self.VKI_target.form.submit();
1570 | }
1571 | self.VKI_close();
1572 | } else self.VKI_insert("\n");
1573 | return true;
1574 | }, false);
1575 | break;
1576 | default:
1577 | VKI_addListener(td, 'click', VKI_keyClick, false);
1578 |
1579 | } VKI_mouseEvents(td);
1580 | tr.appendChild(td);
1581 | for (let z = 0; z < 4; z++)
1582 | if (this.VKI_deadkey[lkey[z] = lkey[z] || '']) hasDeadKey = true;
1583 | } tbody.appendChild(tr);
1584 | table.appendChild(tbody);
1585 | container.appendChild(table);
1586 | }
1587 | if (this.VKI_deadBox)
1588 | this.VKI_deadkeysOn.style.display = (hasDeadKey) ? 'inline' : 'none';
1589 | if (this.VKI_isIE6) {
1590 | this.VKI_iframe.style.width = this.VKI_keyboard.offsetWidth + 'px';
1591 | this.VKI_iframe.style.height = this.VKI_keyboard.offsetHeight + 'px';
1592 | }
1593 | };
1594 |
1595 | this.VKI_buildKeys();
1596 | VKI_addListener(this.VKI_keyboard, 'selectstart', function() { return false; }, false);
1597 | this.VKI_keyboard.unselectable = 'on';
1598 | if (this.VKI_isOpera)
1599 | VKI_addListener(this.VKI_keyboard, 'mousedown', function() { return false; }, false);
1600 |
1601 |
1602 | /* ****************************************************************
1603 | * Controls modifier keys
1604 | *
1605 | */
1606 | this.VKI_modify = function(type) {
1607 | switch (type) {
1608 | case 'Alt':
1609 | case 'AltGr': this.VKI_altgr = !this.VKI_altgr; break;
1610 | case 'AltLk': this.VKI_altgr = 0; this.VKI_altgrlock = !this.VKI_altgrlock; break;
1611 | case 'Caps': this.VKI_shift = 0; this.VKI_shiftlock = !this.VKI_shiftlock; break;
1612 | case 'Shift': this.VKI_shift = !this.VKI_shift; break;
1613 | }
1614 | let vchar = 0;
1615 | if (!this.VKI_shift != !this.VKI_shiftlock) vchar += 1;
1616 | if (!this.VKI_altgr != !this.VKI_altgrlock) vchar += 2;
1617 |
1618 | let tables = this.VKI_keyboard.tBodies[0].getElementsByTagName('div')[0].getElementsByTagName('table');
1619 | for (let x = 0; x < tables.length; x++) {
1620 | let tds = tables[x].getElementsByTagName('td');
1621 | for (let y = 0; y < tds.length; y++) {
1622 | tds[y].className = '';
1623 | let lkey = this.VKI_layout[this.VKI_kt].keys[x][y];
1624 |
1625 | switch (lkey[1]) {
1626 | case 'Alt':
1627 | case 'AltGr':
1628 | if (this.VKI_altgr) tds[y].classList.add('pressed');
1629 | break;
1630 | case 'AltLk':
1631 | if (this.VKI_altgrlock) tds[y].classList.add('pressed');
1632 | break;
1633 | case 'Shift':
1634 | if (this.VKI_shift) tds[y].classList.add('pressed');
1635 | break;
1636 | case 'Caps':
1637 | if (this.VKI_shiftlock) tds[y].classList.add('pressed');
1638 | break;
1639 | case 'Tab': case 'Enter': case 'Bksp': break;
1640 | default:
1641 | if (type) {
1642 | tds[y].removeChild(tds[y].firstChild);
1643 | if (this.VKI_symbol[lkey[vchar]]) {
1644 | let text = this.VKI_symbol[lkey[vchar]].split("\n");
1645 | let small = document.createElement('small');
1646 | small.setAttribute('char', lkey[vchar]);
1647 | for (let z = 0; z < text.length; z++) {
1648 | if (z) small.appendChild(document.createElement('br'));
1649 | small.appendChild(document.createTextNode(text[z]));
1650 | } tds[y].appendChild(small);
1651 | } else tds[y].appendChild(document.createTextNode(lkey[vchar] || '\xa0'));
1652 | }
1653 | if (this.VKI_deadkeysOn.checked) {
1654 | let character = tds[y].firstChild.nodeValue || tds[y].firstChild.className;
1655 | if (this.VKI_dead) {
1656 | if (character == this.VKI_dead) tds[y].classList.add('pressed');
1657 | if (this.VKI_deadkey[this.VKI_dead][character]) tds[y].classList.add('target');
1658 | }
1659 | if (this.VKI_deadkey[character]) tds[y].classList.add('deadkey');
1660 | }
1661 | }
1662 |
1663 | if (y == tds.length - 1 && tds.length > this.VKI_keyCenter) tds[y].classList.add('last');
1664 | if (lkey[0] == ' ' || lkey[1] == ' ') tds[y].classList.add('space');
1665 | }
1666 | }
1667 | };
1668 |
1669 |
1670 | /* ****************************************************************
1671 | * Insert text at the cursor
1672 | *
1673 | */
1674 | this.VKI_insert = function(text) {
1675 | this.VKI_target.dispatchEvent(new Event('beforeinput'));
1676 | this.VKI_target.focus();
1677 | if (this.VKI_target.maxLength) this.VKI_target.maxlength = this.VKI_target.maxLength;
1678 | if (typeof this.VKI_target.maxlength == 'undefined' ||
1679 | this.VKI_target.maxlength < 0 ||
1680 | this.VKI_target.value.length < this.VKI_target.maxlength) {
1681 | if (this.VKI_target.setSelectionRange && !this.VKI_target.readOnly && !this.VKI_isIE) {
1682 | let rng = [this.VKI_target.selectionStart, this.VKI_target.selectionEnd];
1683 | this.VKI_target.value = this.VKI_target.value.substr(0, rng[0]) + text + this.VKI_target.value.substr(rng[1]);
1684 | if (text == "\n" && this.VKI_isOpera) rng[0]++;
1685 | this.VKI_target.setSelectionRange(rng[0] + text.length, rng[0] + text.length);
1686 | } else if (this.VKI_target.createTextRange && !this.VKI_target.readOnly) {
1687 | try {
1688 | this.VKI_target.range.select();
1689 | } catch(e) { this.VKI_target.range = document.selection.createRange(); }
1690 | this.VKI_target.range.text = text;
1691 | this.VKI_target.range.collapse(true);
1692 | this.VKI_target.range.select();
1693 | } else this.VKI_target.value += text;
1694 | if (this.VKI_shift) this.VKI_modify('Shift');
1695 | if (this.VKI_altgr) this.VKI_modify('AltGr');
1696 | this.VKI_target.dispatchEvent(new Event('input'));
1697 | this.VKI_target.focus();
1698 | } else if (this.VKI_target.createTextRange && this.VKI_target.range)
1699 | this.VKI_target.range.select();
1700 | };
1701 |
1702 |
1703 | /* ****************************************************************
1704 | * Delete a character behind the cursor
1705 | *
1706 | */
1707 | this.VKI_backspace = function() {
1708 | self.VKI_target.focus();
1709 | if (self.VKI_target.setSelectionRange && !self.VKI_target.readOnly) {
1710 | let rng = [self.VKI_target.selectionStart, self.VKI_target.selectionEnd];
1711 | if (rng[0] < rng[1]) rng[0]++;
1712 | self.VKI_target.value = self.VKI_target.value.substr(0, rng[0] - 1) + self.VKI_target.value.substr(rng[1]);
1713 | self.VKI_target.setSelectionRange(rng[0] - 1, rng[0] - 1);
1714 | } else if (self.VKI_target.createTextRange && !self.VKI_target.readOnly) {
1715 | try {
1716 | self.VKI_target.range.select();
1717 | } catch(e) { self.VKI_target.range = document.selection.createRange(); }
1718 | if (!self.VKI_target.range.text.length) self.VKI_target.range.moveStart('character', -1);
1719 | self.VKI_target.range.text = '';
1720 | } else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);
1721 | if (self.VKI_shift) self.VKI_modify('Shift');
1722 | if (self.VKI_altgr) self.VKI_modify('AltGr');
1723 | self.VKI_target.focus();
1724 | return true;
1725 | };
1726 |
1727 |
1728 | /* ****************************************************************
1729 | * Show the keyboard interface
1730 | *
1731 | */
1732 | this.VKI_show = function(elem) {
1733 | if (!this.VKI_target) {
1734 | this.VKI_target = elem;
1735 | if (this.VKI_langAdapt && this.VKI_target.lang) {
1736 | let chg = false, sub = [], lang = this.VKI_target.lang.toLowerCase().replace(/-/g, '_');
1737 | for (let x = 0; !chg && x < this.VKI_langCode.index.length; x++)
1738 | if (lang.indexOf(this.VKI_langCode.index[x]) == 0)
1739 | chg = kbSelect.firstChild.nodeValue = this.VKI_kt = this.VKI_langCode[this.VKI_langCode.index[x]];
1740 | if (chg) this.VKI_buildKeys();
1741 | }
1742 | if (this.VKI_isIE) {
1743 | if (!this.VKI_target.range) {
1744 | this.VKI_target.range = this.VKI_target.createTextRange();
1745 | this.VKI_target.range.moveStart('character', this.VKI_target.value.length);
1746 | } this.VKI_target.range.select();
1747 | }
1748 | try { this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard); } catch (e) {}
1749 | if (this.VKI_target.getAttribute('VKI_type') == 'password') {
1750 | this.VKI_target.storeReadOnly = this.VKI_target.readOnly;
1751 | this.VKI_target.readOnly = 'readonly';
1752 | if (this.VKI_clearPasswords) this.VKI_target.value = '';
1753 | }
1754 |
1755 | if (this.VKI_target.getAttribute('VKI_numpadInput') == 'true') {
1756 | this.VKI_keyboard.classList.add('numpadOnly');
1757 | kbNumpad.classList.add('showNegative', 'showDecimal');
1758 | kbNumpad.previousStyle = kbNumpad.style.display;
1759 | kbNumpad.style.display = '';
1760 | let noNeg = false;
1761 | this.VKI_target.pattern = '^[+-]?[0-9]*\\.?[0-9]*$';
1762 | if (this.VKI_target.min && parseFloat(this.VKI_target.min) >= 0) {
1763 | this.VKI_target.pattern = '^\\+?[0-9]*\\.?[0-9]*$';
1764 | kbNumpad.classList.remove('showNegative');
1765 | noNeg = true;
1766 | }
1767 | if (this.VKI_target.step && !parseFloat(this.VKI_target.step).toString().match(/\./)) {
1768 | this.VKI_target.pattern = (noNeg) ? '^\\+?[0-9]*$' : '^[+-]?[0-9]*$';
1769 | kbNumpad.classList.remove('showDecimal');
1770 | }
1771 | } else {
1772 | this.VKI_keyboard.classList.remove('numpadOnly');
1773 | kbNumpad.style.display = kbNumpad.previousStyle;
1774 | }
1775 |
1776 | let elemStep = this.VKI_target;
1777 | this.VKI_target.keyboardPosition = 'absolute';
1778 | do {
1779 | if (VKI_getStyle(elemStep, 'position') == 'fixed') {
1780 | this.VKI_target.keyboardPosition = 'fixed';
1781 | break;
1782 | }
1783 | } while (elemStep = elemStep.offsetParent);
1784 |
1785 | if (this.VKI_isIE6) document.body.appendChild(this.VKI_iframe);
1786 | document.body.appendChild(this.VKI_keyboard);
1787 | this.VKI_keyboard.style.position = this.VKI_target.keyboardPosition;
1788 | if (this.VKI_isOpera) this.VKI_keyboard.reflow();
1789 |
1790 | this.VKI_position(true);
1791 | if (self.VKI_isMoz || self.VKI_isWebKit) this.VKI_position(true);
1792 | this.VKI_target.blur();
1793 | this.VKI_target.focus();
1794 | } else this.VKI_close();
1795 | };
1796 |
1797 |
1798 | /* ****************************************************************
1799 | * Position the keyboard
1800 | *
1801 | */
1802 | this.VKI_position = function(force) {
1803 | if (self.VKI_target) {
1804 | let kPos = VKI_findPos(self.VKI_keyboard), wDim = VKI_innerDimensions(), sDis = VKI_scrollDist();
1805 | let place = false, fudge = self.VKI_target.offsetHeight + 3;
1806 | if (force !== true) {
1807 | if (kPos[1] + self.VKI_keyboard.offsetHeight - sDis[1] - wDim[1] > 0) {
1808 | place = true;
1809 | fudge = -self.VKI_keyboard.offsetHeight - 3;
1810 | } else if (kPos[1] - sDis[1] < 0) place = true;
1811 | }
1812 | if (place || force === true) {
1813 | let iPos = VKI_findPos(self.VKI_target), scr = self.VKI_target;
1814 | while (scr = scr.parentNode) {
1815 | if (scr == document.body) break;
1816 | if (scr.scrollHeight > scr.offsetHeight || scr.scrollWidth > scr.offsetWidth) {
1817 | if (!scr.getAttribute('VKI_scrollListener')) {
1818 | scr.setAttribute('VKI_scrollListener', true);
1819 | VKI_addListener(scr, 'scroll', function() { self.VKI_position(true); }, false);
1820 | } // Check if the input is in view
1821 | let pPos = VKI_findPos(scr), oTop = iPos[1] - pPos[1], oLeft = iPos[0] - pPos[0];
1822 | let top = oTop + self.VKI_target.offsetHeight;
1823 | let left = oLeft + self.VKI_target.offsetWidth;
1824 | let bottom = scr.offsetHeight - oTop - self.VKI_target.offsetHeight;
1825 | let right = scr.offsetWidth - oLeft - self.VKI_target.offsetWidth;
1826 | self.VKI_keyboard.style.display = (top < 0 || left < 0 || bottom < 0 || right < 0) ? 'none' : '';
1827 | if (self.VKI_isIE6) self.VKI_iframe.style.display = (top < 0 || left < 0 || bottom < 0 || right < 0) ? 'none' : '';
1828 | }
1829 | }
1830 | self.VKI_keyboard.style.top = iPos[1] + fudge + 'px';
1831 | self.VKI_keyboard.style.left = Math.max(10, Math.min(wDim[0] - self.VKI_keyboard.offsetWidth - 25, iPos[0])) + 'px';
1832 | if (self.VKI_isIE6) {
1833 | self.VKI_iframe.style.width = self.VKI_keyboard.offsetWidth + 'px';
1834 | self.VKI_iframe.style.height = self.VKI_keyboard.offsetHeight + 'px';
1835 | self.VKI_iframe.style.top = self.VKI_keyboard.style.top;
1836 | self.VKI_iframe.style.left = self.VKI_keyboard.style.left;
1837 | }
1838 | }
1839 | if (force === true) self.VKI_position();
1840 | }
1841 | };
1842 |
1843 |
1844 | /* ****************************************************************
1845 | * Close the keyboard interface
1846 | *
1847 | */
1848 | this.VKI_close = VKI_close = function() {
1849 | if (this.VKI_target) {
1850 | if (this.VKI_target.getAttribute('VKI_type') == 'password')
1851 | this.VKI_target.readOnly = this.VKI_target.storeReadOnly;
1852 | if (this.VKI_target.getAttribute('VKI_numpadInput') == 'true')
1853 | this.VKI_target.pattern = '.*';
1854 | try {
1855 | this.VKI_keyboard.parentNode.removeChild(this.VKI_keyboard);
1856 | if (this.VKI_isIE6) this.VKI_iframe.parentNode.removeChild(this.VKI_iframe);
1857 | } catch (e) {}
1858 | if (this.VKI_kt != this.VKI_kts) {
1859 | kbSelect.firstChild.nodeValue = this.VKI_kt = this.VKI_kts;
1860 | this.VKI_buildKeys();
1861 | } kbSelect.getElementsByTagName('ol')[0].style.display = '';;
1862 | this.VKI_target.focus();
1863 | if (this.VKI_isIE) {
1864 | setTimeout(function() { self.VKI_target = false; }, 0);
1865 | } else this.VKI_target = false;
1866 | }
1867 | };
1868 |
1869 |
1870 | /* ***** Private functions *************************************** */
1871 | function VKI_addListener(elem, type, func, cap) {
1872 | if (elem.addEventListener) {
1873 | elem.addEventListener(type, function(e) { func.call(elem, e); }, cap);
1874 | } else if (elem.attachEvent)
1875 | elem.attachEvent('on' + type, function() { func.call(elem); });
1876 | }
1877 |
1878 | function VKI_findPos(obj) {
1879 | let curleft = curtop = 0, scr = obj;
1880 | while ((scr = scr.parentNode) && scr != document.body) {
1881 | curleft -= scr.scrollLeft || 0;
1882 | curtop -= scr.scrollTop || 0;
1883 | }
1884 | do {
1885 | curleft += obj.offsetLeft;
1886 | curtop += obj.offsetTop;
1887 | } while (obj = obj.offsetParent);
1888 | return [curleft, curtop];
1889 | }
1890 |
1891 | function VKI_innerDimensions() {
1892 | if (self.innerHeight) {
1893 | return [self.innerWidth, self.innerHeight];
1894 | } else if (document.documentElement && document.documentElement.clientHeight) {
1895 | return [document.documentElement.clientWidth, document.documentElement.clientHeight];
1896 | } else if (document.body)
1897 | return [document.body.clientWidth, document.body.clientHeight];
1898 | return [0, 0];
1899 | }
1900 |
1901 | function VKI_scrollDist() {
1902 | let html = document.getElementsByTagName('html')[0];
1903 | if (html.scrollTop && document.documentElement.scrollTop) {
1904 | return [html.scrollLeft, html.scrollTop];
1905 | } else if (html.scrollTop || document.documentElement.scrollTop) {
1906 | return [html.scrollLeft + document.documentElement.scrollLeft, html.scrollTop + document.documentElement.scrollTop];
1907 | } else if (document.body.scrollTop)
1908 | return [document.body.scrollLeft, document.body.scrollTop];
1909 | return [0, 0];
1910 | }
1911 |
1912 | function VKI_getStyle(obj, styleProp) {
1913 | let y;
1914 | if (obj.currentStyle) {
1915 | y = obj.currentStyle[styleProp];
1916 | } else if (window.getComputedStyle)
1917 | y = window.getComputedStyle(obj, null)[styleProp];
1918 | return y;
1919 | }
1920 |
1921 | VKI_addListener(window, 'resize', this.VKI_position, false);
1922 | VKI_addListener(window, 'scroll', this.VKI_position, false);
1923 | this.VKI_kbsize();
1924 | VKI_addListener(window, 'load', VKI_buildKeyboardInputs, false);
1925 | // VKI_addListener(window, 'load', function() {
1926 | // setTimeout(VKI_buildKeyboardInputs, 5);
1927 | // }, false);
1928 | })();
--------------------------------------------------------------------------------