[3191] | 1 | /* JavaScript Virtual Keyboard (slim variant), version 2.7
|
---|
| 2 | *
|
---|
| 3 | * (C) 2006-2008 Dmitriy Khudorozhkov (mailto:dmitrykhudorozhkov@yahoo.com)
|
---|
| 4 | *
|
---|
| 5 | * This software is provided "as-is", without any express or implied warranty.
|
---|
| 6 | * In no event will the author be held liable for any damages arising from the
|
---|
| 7 | * use of this software.
|
---|
| 8 | *
|
---|
| 9 | * Permission is granted to anyone to use this software for any purpose,
|
---|
| 10 | * including commercial applications, and to alter it and redistribute it
|
---|
| 11 | * freely, subject to the following restrictions:
|
---|
| 12 | *
|
---|
| 13 | * 1. The origin of this software must not be misrepresented; you must not
|
---|
| 14 | * claim that you wrote the original software. If you use this software
|
---|
| 15 | * in a product, an acknowledgment in the product documentation would be
|
---|
| 16 | * appreciated but is not required.
|
---|
| 17 | *
|
---|
| 18 | * 2. Altered source versions must be plainly marked as such, and must not be
|
---|
| 19 | * misrepresented as being the original software.
|
---|
| 20 | *
|
---|
| 21 | * 3. This notice may not be removed or altered from any source distribution.
|
---|
| 22 | */
|
---|
| 23 |
|
---|
| 24 | function VKeyboard(container_id, callback_ref, create_arrows, create_updown,
|
---|
| 25 | create_nav_keys, create_numpad, font_name, font_size,
|
---|
| 26 | font_color, dead_color, bg_color, key_color,
|
---|
| 27 | sel_item_color, border_color, inactive_border_color,
|
---|
| 28 | inactive_key_color, lang_sel_brd_color, show_click,
|
---|
| 29 | click_font_color, click_bg_color, click_border_color,
|
---|
| 30 | do_embed, do_gap, start_layout_index)
|
---|
| 31 | {
|
---|
| 32 | return this._construct(container_id, callback_ref, create_arrows, create_updown,
|
---|
| 33 | create_nav_keys, create_numpad, font_name, font_size,
|
---|
| 34 | font_color, dead_color, bg_color, key_color,
|
---|
| 35 | sel_item_color, border_color, inactive_border_color,
|
---|
| 36 | inactive_key_color, lang_sel_brd_color, show_click,
|
---|
| 37 | click_font_color, click_bg_color, click_border_color,
|
---|
| 38 | do_embed, do_gap, start_layout_index);
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | VKeyboard.kbArray = [];
|
---|
| 42 |
|
---|
| 43 | VKeyboard.prototype = {
|
---|
| 44 |
|
---|
| 45 | _get_event_source: function(event)
|
---|
| 46 | {
|
---|
| 47 | var e = event || window.event;
|
---|
| 48 | return e.srcElement || e.target;
|
---|
| 49 | },
|
---|
| 50 |
|
---|
| 51 | _setup_event: function(elem, eventType, handler)
|
---|
| 52 | {
|
---|
| 53 | return (elem.attachEvent ? elem.attachEvent("on" + eventType, handler) : ((elem.addEventListener) ? elem.addEventListener(eventType, handler, false) : null));
|
---|
| 54 | },
|
---|
| 55 |
|
---|
| 56 | _detach_event: function(elem, eventType, handler)
|
---|
| 57 | {
|
---|
| 58 | return (elem.detachEvent ? elem.detachEvent("on" + eventType, handler) : ((elem.removeEventListener) ? elem.removeEventListener(eventType, handler, false) : null));
|
---|
| 59 | },
|
---|
| 60 |
|
---|
| 61 | _start_flash: function(in_el)
|
---|
| 62 | {
|
---|
| 63 | function getColor(str, posOne, posTwo)
|
---|
| 64 | {
|
---|
| 65 | if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(str)) // try to detect Mozilla-style rgb value.
|
---|
| 66 | {
|
---|
| 67 | switch(posOne)
|
---|
| 68 | {
|
---|
| 69 | case 1: return parseInt(RegExp.$1, 10);
|
---|
| 70 | case 2: return parseInt(RegExp.$2, 10);
|
---|
| 71 | case 3: return parseInt(RegExp.$3, 10);
|
---|
| 72 | default: return 0;
|
---|
| 73 | }
|
---|
| 74 | }
|
---|
| 75 | else // standard (#xxxxxx or #xxx) way
|
---|
| 76 | return str.length == 4 ? parseInt(str.substr(posOne, 1) + str.substr(posOne, 1), 16) : parseInt(str.substr(posTwo, 2), 16);
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | function getR(color_string)
|
---|
| 80 | { return getColor(color_string, 1, 1); }
|
---|
| 81 |
|
---|
| 82 | function getG(color_string)
|
---|
| 83 | { return getColor(color_string, 2, 3); }
|
---|
| 84 |
|
---|
| 85 | function getB(color_string)
|
---|
| 86 | { return getColor(color_string, 3, 5); }
|
---|
| 87 |
|
---|
| 88 | var el = in_el.time ? in_el : (in_el.company && in_el.company.time ? in_el.company : null);
|
---|
| 89 |
|
---|
| 90 | if(el)
|
---|
| 91 | {
|
---|
| 92 | el.time = 0;
|
---|
| 93 | clearInterval(el.timer);
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 | var vkb = this;
|
---|
| 97 | var ftc = vkb.fontcolor, bgc = vkb.keycolor, brc = vkb.bordercolor;
|
---|
| 98 |
|
---|
| 99 | // Special fixes for simple/dead/modifier keys:
|
---|
| 100 |
|
---|
| 101 | if(in_el.dead)
|
---|
| 102 | ftc = vkb.deadcolor;
|
---|
| 103 |
|
---|
| 104 | if(((in_el.innerHTML == "Shift") && vkb.Shift) || ((in_el.innerHTML == "Caps") && vkb.Caps) || ((in_el.innerHTML == "AltGr") && vkb.AltGr))
|
---|
| 105 | bgc = vkb.lic;
|
---|
| 106 |
|
---|
| 107 | // Extract base color values:
|
---|
| 108 | var fr = getR(ftc), fg = getG(ftc), fb = getB(ftc);
|
---|
| 109 | var kr = getR(bgc), kg = getG(bgc), kb = getB(bgc);
|
---|
| 110 | var br = getR(brc), bg = getG(brc), bb = getB(brc);
|
---|
| 111 |
|
---|
| 112 | // Extract flash color values:
|
---|
| 113 | var f_r = getR(vkb.cfc), f_g = getG(vkb.cfc), f_b = getB(vkb.cfc);
|
---|
| 114 | var k_r = getR(vkb.cbg), k_g = getG(vkb.cbg), k_b = getB(vkb.cbg);
|
---|
| 115 | var b_r = getR(vkb.cbr), b_g = getG(vkb.cbr), b_b = getB(vkb.cbr);
|
---|
| 116 |
|
---|
| 117 | var _shift_colors = function()
|
---|
| 118 | {
|
---|
| 119 | function dec2hex(dec)
|
---|
| 120 | {
|
---|
| 121 | var hexChars = "0123456789ABCDEF";
|
---|
| 122 | var a = dec % 16;
|
---|
| 123 | var b = (dec - a) / 16;
|
---|
| 124 |
|
---|
| 125 | return hexChars.charAt(b) + hexChars.charAt(a) + "";
|
---|
| 126 | }
|
---|
| 127 |
|
---|
| 128 | in_el.time = !in_el.time ? 10 : (in_el.time - 1);
|
---|
| 129 |
|
---|
| 130 | function calc_color(start, end)
|
---|
| 131 | { return (end - (in_el.time / 10) * (end - start)); }
|
---|
| 132 |
|
---|
| 133 | var t_f_r = calc_color(f_r, fr), t_f_g = calc_color(f_g, fg), t_f_b = calc_color(f_b, fb);
|
---|
| 134 | var t_k_r = calc_color(k_r, kr), t_k_g = calc_color(k_g, kg), t_k_b = calc_color(k_b, kb);
|
---|
| 135 | var t_b_r = calc_color(b_r, br), t_b_g = calc_color(b_g, bg), t_b_b = calc_color(b_b, bb);
|
---|
| 136 |
|
---|
| 137 | function setStyles(style)
|
---|
| 138 | {
|
---|
| 139 | style.color = "#" + dec2hex(t_f_r) + dec2hex(t_f_g) + dec2hex(t_f_b);
|
---|
| 140 | style.borderColor = "#" + dec2hex(t_b_r) + dec2hex(t_b_g) + dec2hex(t_b_b);
|
---|
| 141 | style.backgroundColor = "#" + dec2hex(t_k_r) + dec2hex(t_k_g) + dec2hex(t_k_b);
|
---|
| 142 | }
|
---|
| 143 |
|
---|
| 144 | var first = (in_el == vkb.mod[4]) ? false : true, is = in_el.style, cs = in_el.company ? in_el.company.style : null;
|
---|
| 145 |
|
---|
| 146 | if(cs && first)
|
---|
| 147 | setStyles(cs);
|
---|
| 148 |
|
---|
| 149 | setStyles(is);
|
---|
| 150 |
|
---|
| 151 | if(cs)
|
---|
| 152 | {
|
---|
| 153 | if(!first)
|
---|
| 154 | {
|
---|
| 155 | setStyles(cs);
|
---|
| 156 | is.borderBottomColor = "#" + dec2hex(t_k_r) + dec2hex(t_k_g) + dec2hex(t_k_b);
|
---|
| 157 | }
|
---|
| 158 | else
|
---|
| 159 | cs.borderBottomColor = "#" + dec2hex(t_k_r) + dec2hex(t_k_g) + dec2hex(t_k_b);
|
---|
| 160 | }
|
---|
| 161 |
|
---|
| 162 | if(!in_el.time)
|
---|
| 163 | {
|
---|
| 164 | clearInterval(in_el.timer);
|
---|
| 165 | return;
|
---|
| 166 | }
|
---|
| 167 | };
|
---|
| 168 |
|
---|
| 169 | _shift_colors();
|
---|
| 170 |
|
---|
| 171 | in_el.timer = window.setInterval(_shift_colors, 50);
|
---|
| 172 | },
|
---|
| 173 |
|
---|
| 174 | _setup_style: function(obj, top, left, width, height, position, text_align, line_height, font_size, font_weight, padding_left, padding_right)
|
---|
| 175 | {
|
---|
| 176 | var os = obj.style;
|
---|
| 177 |
|
---|
| 178 | if(top) os.top = top;
|
---|
| 179 | if(left) os.left = left;
|
---|
| 180 | if(width) os.width = width;
|
---|
| 181 | if(height) os.height = height;
|
---|
| 182 |
|
---|
| 183 | if(position) os.position = position;
|
---|
| 184 |
|
---|
| 185 | if(text_align) os.textAlign = text_align;
|
---|
| 186 | if(line_height) os.lineHeight = line_height;
|
---|
| 187 | if(font_size) os.fontSize = font_size;
|
---|
| 188 |
|
---|
| 189 | os.fontWeight = font_weight || "bold";
|
---|
| 190 |
|
---|
| 191 | if(padding_left) os.paddingLeft = padding_left;
|
---|
| 192 | if(padding_right) os.paddingRight = padding_right;
|
---|
| 193 | },
|
---|
| 194 |
|
---|
| 195 | _setup_key: function(parent, id, top, left, width, height, text_align, line_height, font_size, font_weight, padding_left, padding_right)
|
---|
| 196 | {
|
---|
| 197 | var _id = this.Cntr.id + id;
|
---|
| 198 | var exists = document.getElementById(_id);
|
---|
| 199 |
|
---|
| 200 | var key = exists ? exists.parentNode : document.createElement("DIV");
|
---|
| 201 | this._setup_style(key, top, left, width, height, "absolute");
|
---|
| 202 |
|
---|
| 203 | var key_sub = exists || document.createElement("DIV");
|
---|
| 204 | key.appendChild(key_sub); parent.appendChild(key);
|
---|
| 205 |
|
---|
| 206 | this._setup_style(key_sub, "", "", "", line_height, "relative", text_align, line_height, font_size, font_weight, padding_left, padding_right);
|
---|
| 207 | key_sub.id = _id;
|
---|
| 208 |
|
---|
| 209 | return key_sub;
|
---|
| 210 | },
|
---|
| 211 |
|
---|
| 212 | _findX: function(obj)
|
---|
| 213 | { return (obj && obj.parentNode) ? parseFloat(obj.parentNode.offsetLeft) : 0; },
|
---|
| 214 |
|
---|
| 215 | _findY: function(obj)
|
---|
| 216 | { return (obj && obj.parentNode) ? parseFloat(obj.parentNode.offsetTop) : 0; },
|
---|
| 217 |
|
---|
| 218 | _findW: function(obj)
|
---|
| 219 | { return (obj && obj.parentNode) ? parseFloat(obj.parentNode.offsetWidth) : 0; },
|
---|
| 220 |
|
---|
| 221 | _findH: function(obj)
|
---|
| 222 | { return (obj && obj.parentNode) ? parseFloat(obj.parentNode.offsetHeight) : 0; },
|
---|
| 223 |
|
---|
| 224 | _construct: function(container_id, callback_ref, create_arrows, create_updown, create_nav_keys, create_numpad,
|
---|
| 225 | font_name, font_size, font_color, dead_color, bg_color, key_color, sel_item_color,
|
---|
| 226 | border_color, inactive_border_color, inactive_key_color, lang_sel_brd_color,
|
---|
| 227 | show_click, click_font_color, click_bg_color, click_border_color, do_embed,
|
---|
| 228 | do_gap, start_layout_index)
|
---|
| 229 | {
|
---|
| 230 | var exists = (this.Cntr != undefined), ct = exists ? this.Cntr : document.getElementById(container_id);
|
---|
| 231 | var changed = (font_size && (font_size != this.fontsize));
|
---|
| 232 |
|
---|
| 233 | this._Callback = ((typeof(callback_ref) == "function") && ((callback_ref.length == 1) || (callback_ref.length == 2))) ? callback_ref : (this._Callback || null);
|
---|
| 234 |
|
---|
| 235 | var ff = font_name || this.fontname || "";
|
---|
| 236 | var fs = font_size || this.fontsize || "14px";
|
---|
| 237 |
|
---|
| 238 | var fc = font_color || this.fontcolor || "#000";
|
---|
| 239 | var dc = dead_color || this.deadcolor || "#F00";
|
---|
| 240 | var bg = bg_color || this.bgcolor || "#FFF";
|
---|
| 241 | var kc = key_color || this.keycolor || "#FFF";
|
---|
| 242 | var bc = border_color || this.bordercolor || "#777";
|
---|
| 243 |
|
---|
| 244 | this.fontname = ff, this.fontsize = fs, this.fontcolor = fc;
|
---|
| 245 | this.bgcolor = bg, this.keycolor = kc, this.deadcolor = dc, this.bordercolor = bc;
|
---|
| 246 |
|
---|
| 247 | this.lic = sel_item_color || this.lic || "#DDD";
|
---|
| 248 | this.ibc = inactive_border_color || this.ibc || "#CCC";
|
---|
| 249 | this.ikc = inactive_key_color || this.ikc || "#FFF";
|
---|
| 250 | this.lsc = lang_sel_brd_color || this.lsc || "#F77";
|
---|
| 251 |
|
---|
| 252 | this.cfc = click_font_color || this.cfc || "#CC3300";
|
---|
| 253 | this.cbg = click_bg_color || this.cbg || "#FF9966";
|
---|
| 254 | this.cbr = click_border_color || this.cbr || "#CC3300";
|
---|
| 255 |
|
---|
| 256 | this.sc = (show_click == undefined) ? ((this.sc == undefined) ? false : this.sc) : show_click;
|
---|
| 257 | this.gap = (do_gap != undefined) ? (do_gap ? 1 : -1) : (this.gap || 1);
|
---|
| 258 |
|
---|
| 259 | if(!exists)
|
---|
| 260 | {
|
---|
| 261 | this.Cntr = ct;
|
---|
| 262 | this.Caps = this.Shift = this.AltGr = false;
|
---|
| 263 |
|
---|
| 264 | this.DeadAction = []; this.DeadAction[0] = this.DeadAction[1] = null;
|
---|
| 265 | this.keys = [], this.mod = [], this.pad = [];
|
---|
| 266 |
|
---|
| 267 | VKeyboard.kbArray[container_id] = this;
|
---|
| 268 | }
|
---|
| 269 |
|
---|
| 270 | var kb = exists ? ct.childNodes[0] : document.createElement("DIV");
|
---|
| 271 |
|
---|
| 272 | if(!exists)
|
---|
| 273 | {
|
---|
| 274 | ct.appendChild(kb);
|
---|
| 275 | ct.style.display = "block";
|
---|
| 276 | ct.style.zIndex = 999;
|
---|
| 277 |
|
---|
| 278 | if(do_embed)
|
---|
| 279 | ct.style.position = "relative";
|
---|
| 280 | else
|
---|
| 281 | {
|
---|
| 282 | ct.style.position = "absolute";
|
---|
| 283 |
|
---|
| 284 | var initX = 0, initY = 0, ct_ = ct;
|
---|
| 285 | if(ct_.offsetParent)
|
---|
| 286 | {
|
---|
| 287 | while (ct_.offsetParent)
|
---|
| 288 | {
|
---|
| 289 | initX += ct_.offsetLeft;
|
---|
| 290 | initY += ct_.offsetTop;
|
---|
| 291 |
|
---|
| 292 | ct_ = ct_.offsetParent;
|
---|
| 293 | }
|
---|
| 294 | }
|
---|
| 295 | else if (ct_.x)
|
---|
| 296 | {
|
---|
| 297 | initX += ct_.x;
|
---|
| 298 | initY += ct_.y;
|
---|
| 299 | }
|
---|
| 300 |
|
---|
| 301 | ct.style.top = initY + "px", ct.style.left = initX +"px";
|
---|
| 302 | }
|
---|
| 303 |
|
---|
| 304 | kb.style.position = "relative";
|
---|
| 305 | kb.style.top = "0px", kb.style.left = "0px";
|
---|
| 306 | }
|
---|
| 307 |
|
---|
| 308 | kb.style.border = "1px solid " + bc;
|
---|
| 309 |
|
---|
| 310 | var kb_main = exists ? kb.childNodes[0] : document.createElement("DIV"), ks = kb_main.style;
|
---|
| 311 | if(!exists)
|
---|
| 312 | {
|
---|
| 313 | kb.appendChild(kb_main);
|
---|
| 314 |
|
---|
| 315 | ks.position = "relative";
|
---|
| 316 | ks.width = "1px";
|
---|
| 317 | ks.cursor = "default";
|
---|
| 318 | }
|
---|
| 319 |
|
---|
| 320 | // Disable content selection:
|
---|
| 321 | this._setup_event(kb_main, "selectstart", function(event) { return false; });
|
---|
| 322 | this._setup_event(kb_main, "mousedown", function(event) { if(event.preventDefault) event.preventDefault(); return false; });
|
---|
| 323 |
|
---|
| 324 | ks.fontFamily = ff, ks.backgroundColor = bg;
|
---|
| 325 |
|
---|
| 326 | if(!exists || changed)
|
---|
| 327 | {
|
---|
| 328 | var mag = parseFloat(fs) / 14.0, cell = Math.floor(25.0 * mag), dcell = 2 * cell, gap = this.gap;
|
---|
| 329 | var cp = String(cell) + "px", cx = String(cell - (do_gap ? 0 : 2.0)) + "px", lh = String(cell - 2.0) + "px";
|
---|
| 330 |
|
---|
| 331 | var prevX = 0, prevY = gap, prevW = 0, prevH = 0;
|
---|
| 332 |
|
---|
| 333 | // Convenience strings:
|
---|
| 334 | var c = "center", n = "normal", r = "right", l = "left", e = " ", pad = String(4 * mag) + "px";
|
---|
| 335 |
|
---|
| 336 | // Number row:
|
---|
| 337 |
|
---|
| 338 | var key;
|
---|
| 339 | for(var i = 0; i < 13; i++)
|
---|
| 340 | {
|
---|
| 341 | this.keys[i] = key = this._setup_key(kb_main, "___key" + String(i), prevY + "px", (prevX + prevW + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 342 |
|
---|
| 343 | prevX = this._findX(key), prevW = this._findW(key);
|
---|
| 344 | }
|
---|
| 345 |
|
---|
| 346 | prevY = this._findY(key);
|
---|
| 347 | prevH = this._findH(key); // universal key height
|
---|
| 348 |
|
---|
| 349 | var kb_kbp = this._setup_key(kb_main, "___kbp", prevY + "px", (prevX + prevW + gap) + "px", (2.96 * cell) + "px", cp, r, lh, fs, n, "", pad);
|
---|
| 350 | kb_kbp.innerHTML = "BackSpace";
|
---|
| 351 | this.mod[0] = kb_kbp;
|
---|
| 352 |
|
---|
| 353 | // Top row:
|
---|
| 354 |
|
---|
| 355 | var kb_tab = this._setup_key(kb_main, "___tab", (prevY + prevH + gap) + "px", gap + "px", (1.48 * cell + gap) + "px", cp, l, lh, fs, n, pad);
|
---|
| 356 | kb_tab.innerHTML = "Tab";
|
---|
| 357 | this.mod[1] = kb_tab;
|
---|
| 358 |
|
---|
| 359 | prevX = this._findX(kb_tab), prevW = this._findW(kb_tab), prevY = this._findY(kb_tab);
|
---|
| 360 |
|
---|
| 361 | for(; i < 26; i++)
|
---|
| 362 | {
|
---|
| 363 | this.keys[i] = key = this._setup_key(kb_main, "___key" + String(i), prevY + "px", (prevX + prevW + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 364 |
|
---|
| 365 | prevX = this._findX(key), prevW = this._findW(key);
|
---|
| 366 | }
|
---|
| 367 |
|
---|
| 368 | this.kbpH = this._findX(kb_kbp) + this._findW(kb_kbp);
|
---|
| 369 |
|
---|
| 370 | // Home row:
|
---|
| 371 |
|
---|
| 372 | var kb_caps = this._setup_key(kb_main, "___caps", (prevY + prevH + gap) + "px", gap + "px", dcell + "px", cp, l, lh, fs, n, pad);
|
---|
| 373 | kb_caps.innerHTML = "Caps";
|
---|
| 374 | this.mod[2] = kb_caps;
|
---|
| 375 |
|
---|
| 376 | prevX = this._findX(kb_caps), prevW = this._findW(kb_caps), prevY = this._findY(kb_caps);
|
---|
| 377 |
|
---|
| 378 | for(; i < 38; i++)
|
---|
| 379 | {
|
---|
| 380 | this.keys[i] = key = this._setup_key(kb_main, "___key" + String(i), prevY + "px", (prevX + prevW + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 381 |
|
---|
| 382 | prevX = this._findX(key), prevW = this._findW(key);
|
---|
| 383 | }
|
---|
| 384 |
|
---|
| 385 | prevY = this._findY(key);
|
---|
| 386 | var s = prevX + prevW + gap;
|
---|
| 387 |
|
---|
| 388 | var kb_enter = this._setup_key(kb_main, "___enter_l", prevY + "px", s + "px", (this.kbpH - s) + "px", cp, r, lh, fs, n, "", pad);
|
---|
| 389 | kb_enter.innerHTML = "Enter";
|
---|
| 390 | this.mod[3] = kb_enter;
|
---|
| 391 |
|
---|
| 392 | s = this._findX(this.keys[25]) + this._findW(this.keys[25]) + gap;
|
---|
| 393 |
|
---|
| 394 | var kb_enter_top = this._setup_key(kb_main, "___enter_top", this._findY(kb_tab) + "px", s + "px", (this.kbpH - s) + "px", cx, c, cx);
|
---|
| 395 | kb_enter_top.innerHTML = e;
|
---|
| 396 | kb_enter_top.subst = "Enter";
|
---|
| 397 | this.mod[4] = kb_enter_top;
|
---|
| 398 |
|
---|
| 399 | kb_enter_top.company = kb_enter;
|
---|
| 400 | kb_enter.company = kb_enter_top;
|
---|
| 401 |
|
---|
| 402 | // Bottom row:
|
---|
| 403 |
|
---|
| 404 | var kb_shift = this._setup_key(kb_main, "___shift", (prevY + prevH + gap) + "px", gap + "px", (2.52 * cell) + "px", cp, l, lh, fs, n, pad);
|
---|
| 405 | kb_shift.innerHTML = "Shift";
|
---|
| 406 | this.mod[5] = kb_shift;
|
---|
| 407 |
|
---|
| 408 | prevX = this._findX(kb_shift), prevW = this._findW(kb_shift), prevY = this._findY(kb_shift);
|
---|
| 409 |
|
---|
| 410 | for(; i < 48; i++)
|
---|
| 411 | {
|
---|
| 412 | this.keys[i] = key = this._setup_key(kb_main, "___key" + String(i), prevY + "px", (prevX + prevW + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 413 |
|
---|
| 414 | prevX = this._findX(key), prevW = this._findW(key);
|
---|
| 415 | }
|
---|
| 416 |
|
---|
| 417 | prevY = this._findY(key);
|
---|
| 418 |
|
---|
| 419 | var kb_shift_r = this._setup_key(kb_main, "___shift_r", prevY + "px", (prevX + prevW + gap) + "px", (this._findX(kb_kbp) + this._findW(kb_kbp) - prevX - prevW - gap) + "px", cp, r, lh, fs, n, "", pad);
|
---|
| 420 | kb_shift_r.innerHTML = "Shift";
|
---|
| 421 | this.mod[6] = kb_shift_r;
|
---|
| 422 |
|
---|
| 423 | // Language selector:
|
---|
| 424 |
|
---|
| 425 | var vcell = String(1.32 * cell) + "px";
|
---|
| 426 |
|
---|
| 427 | var kb_lang = this._setup_key(kb_main, "___lang", (prevY + prevH + gap) + "px", gap + "px", vcell, cp, l, lh, fs, n, pad);
|
---|
| 428 | this.mod[7] = kb_lang;
|
---|
| 429 |
|
---|
| 430 | prevY = this._findY(kb_lang);
|
---|
| 431 |
|
---|
| 432 | ks.height = (prevY + prevH + gap) + "px";
|
---|
| 433 |
|
---|
| 434 | prevY += "px";
|
---|
| 435 |
|
---|
| 436 | var kb_res_1 = this._setup_key(kb_main, "___res_1", prevY, (this._findX(kb_lang) + this._findW(kb_lang) + gap) + "px", vcell, cp, c, lh, fs);
|
---|
| 437 | kb_res_1.innerHTML = e;
|
---|
| 438 | this.mod[8] = kb_res_1;
|
---|
| 439 |
|
---|
| 440 | var kb_res_2 = this._setup_key(kb_main, "___res_2", prevY, (this._findX(kb_res_1) + this._findW(kb_res_1) + gap) + "px", vcell, cp, c, lh, fs);
|
---|
| 441 | kb_res_2.innerHTML = e;
|
---|
| 442 | this.mod[9] = kb_res_2;
|
---|
| 443 |
|
---|
| 444 | var kb_space = this._setup_key(kb_main, "___space", prevY, (this._findX(kb_res_2) + this._findW(kb_res_2) + gap) + "px", (6.28 * cell) + "px", cp, c, lh, fs);
|
---|
| 445 | this.mod[10] = kb_space;
|
---|
| 446 |
|
---|
| 447 | var kb_alt_gr = this._setup_key(kb_main, "___alt_gr", prevY, (this._findX(kb_space) + this._findW(kb_space) + gap) + "px", vcell, cp, c, lh, parseFloat(fs) * 0.786, n);
|
---|
| 448 | kb_alt_gr.innerHTML = "AltGr";
|
---|
| 449 | this.mod[11] = kb_alt_gr;
|
---|
| 450 |
|
---|
| 451 | var kb_res_3 = this._setup_key(kb_main, "___res_3", prevY, (this._findX(kb_alt_gr) + this._findW(kb_alt_gr) + gap) + "px", vcell, cp, c, lh, fs);
|
---|
| 452 | kb_res_3.innerHTML = e;
|
---|
| 453 | this.mod[12] = kb_res_3;
|
---|
| 454 |
|
---|
| 455 | var kb_res_4 = this._setup_key(kb_main, "___res_4", prevY, (this._findX(kb_res_3) + this._findW(kb_res_3) + gap) + "px", vcell, cp, c, lh, fs);
|
---|
| 456 | kb_res_4.innerHTML = e;
|
---|
| 457 | this.mod[13] = kb_res_4;
|
---|
| 458 |
|
---|
| 459 | var w = this.kbpH + gap;
|
---|
| 460 |
|
---|
| 461 | // Arrow keys:
|
---|
| 462 | if(!exists && ((create_arrows == undefined) ? true : create_arrows))
|
---|
| 463 | {
|
---|
| 464 | var kb_left = this._setup_key(kb_main, "___left", prevY, (this.kbpH + gap + cell / 2) + "px", cp, cp, c, lh, fs);
|
---|
| 465 | kb_left.innerHTML = "<"
|
---|
| 466 | this.mod[14] = kb_left;
|
---|
| 467 |
|
---|
| 468 | if((create_updown == undefined) ? true : create_updown)
|
---|
| 469 | {
|
---|
| 470 | var kb_down = this._setup_key(kb_main, "___down", prevY, (this._findX(kb_left) + this._findW(kb_left) + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 471 | kb_down.innerHTML = "\\/"
|
---|
| 472 | this.mod[15] = key = kb_down;
|
---|
| 473 |
|
---|
| 474 | var kb_up = this._setup_key(kb_main, "___up", this._findY(kb_shift_r) + "px", (this._findX(kb_left) + this._findW(kb_left) + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 475 | kb_up.innerHTML = "/\\"
|
---|
| 476 | this.mod[16] = kb_up;
|
---|
| 477 | }
|
---|
| 478 | else key = kb_left;
|
---|
| 479 |
|
---|
| 480 | var kb_right = this._setup_key(kb_main, "___right", prevY, (this._findX(key) + this._findW(key) + gap) + "px", cp, cp, c, lh, fs);
|
---|
| 481 | kb_right.innerHTML = ">"
|
---|
| 482 | this.mod[this.mod.length] = kb_right;
|
---|
| 483 |
|
---|
| 484 | this.kbpH = this._findX(kb_right) + this._findW(kb_right);
|
---|
| 485 | w = this.kbpH + gap;
|
---|
| 486 | }
|
---|
| 487 |
|
---|
| 488 | // Numpad:
|
---|
| 489 |
|
---|
| 490 | if((create_numpad == undefined) ? true : create_numpad)
|
---|
| 491 | {
|
---|
| 492 | var w2 = this._create_numpad(container_id, kb_main);
|
---|
| 493 | if(w2 > w) w = w2;
|
---|
| 494 | }
|
---|
| 495 |
|
---|
| 496 | kb.style.width = ks.width = w + "px";
|
---|
| 497 | }
|
---|
| 498 |
|
---|
| 499 | this._refresh_layout(this.avail_langs[start_layout_index || 0][0]);
|
---|
| 500 |
|
---|
| 501 | return this;
|
---|
| 502 | },
|
---|
| 503 |
|
---|
| 504 | _create_numpad: function(container_id, parent)
|
---|
| 505 | {
|
---|
| 506 | var c = "center", n = "normal", l = "left";
|
---|
| 507 | var fs = this.fontsize, bc = this.bordercolor, gap = this.gap;
|
---|
| 508 |
|
---|
| 509 | var mag = parseFloat(fs) / 14.0, cell = Math.floor(25.0 * mag);
|
---|
| 510 | var dcell = 2 * cell, dp = (dcell + 1) + "px", dp2 = (dcell - 1 - ((gap < 0) ? 2 : 0)) + "px";
|
---|
| 511 | var cp = String(cell) + "px", lh = String(Math.floor(cell - 2.0)) + "px";
|
---|
| 512 |
|
---|
| 513 | var edge = (this.kbpH + cell / 2 + gap) + "px";
|
---|
| 514 |
|
---|
| 515 | var kb_pad_eur = this._setup_key(parent, "___pad_eur", gap + "px", edge, cp, cp, c, lh, fs);
|
---|
| 516 | kb_pad_eur.innerHTML = "€";
|
---|
| 517 | this.pad[0] = kb_pad_eur;
|
---|
| 518 |
|
---|
| 519 | var edge_1 = (this._findX(kb_pad_eur) + this._findW(kb_pad_eur) + gap) + "px";
|
---|
| 520 |
|
---|
| 521 | var kb_pad_slash = this._setup_key(parent, "___pad_slash", gap + "px", edge_1, cp, cp, c, lh, fs);
|
---|
| 522 | kb_pad_slash.innerHTML = "/";
|
---|
| 523 | this.pad[1] = kb_pad_slash;
|
---|
| 524 |
|
---|
| 525 | var edge_2 = (this._findX(kb_pad_slash) + this._findW(kb_pad_slash) + gap) + "px";
|
---|
| 526 |
|
---|
| 527 | var kb_pad_star = this._setup_key(parent, "___pad_star", gap + "px", edge_2, cp, cp, c, lh, fs);
|
---|
| 528 | kb_pad_star.innerHTML = "*";
|
---|
| 529 | this.pad[2] = kb_pad_star;
|
---|
| 530 |
|
---|
| 531 | var edge_3 = (this._findX(kb_pad_star) + this._findW(kb_pad_star) + gap) + "px";
|
---|
| 532 |
|
---|
| 533 | var kb_pad_minus = this._setup_key(parent, "___pad_minus", gap + "px", edge_3, cp, cp, c, lh, fs);
|
---|
| 534 | kb_pad_minus.innerHTML = "-";
|
---|
| 535 | this.pad[3] = kb_pad_minus;
|
---|
| 536 |
|
---|
| 537 | this.kbpM = this._findX(kb_pad_minus) + this._findW(kb_pad_minus) + gap;
|
---|
| 538 |
|
---|
| 539 | var prevH = this._findH(kb_pad_eur), edge_Y = (this._findY(kb_pad_eur) + prevH + gap) + "px";
|
---|
| 540 |
|
---|
| 541 | var kb_pad_7 = this._setup_key(parent, "___pad_7", edge_Y, edge, cp, cp, c, lh, fs);
|
---|
| 542 | kb_pad_7.innerHTML = "7";
|
---|
| 543 | this.pad[4] = kb_pad_7;
|
---|
| 544 |
|
---|
| 545 | var kb_pad_8 = this._setup_key(parent, "___pad_8", edge_Y, edge_1, cp, cp, c, lh, fs);
|
---|
| 546 | kb_pad_8.innerHTML = "8";
|
---|
| 547 | this.pad[5] = kb_pad_8;
|
---|
| 548 |
|
---|
| 549 | var kb_pad_9 = this._setup_key(parent, "___pad_9", edge_Y, edge_2, cp, cp, c, lh, fs);
|
---|
| 550 | kb_pad_9.innerHTML = "9";
|
---|
| 551 | this.pad[6] = kb_pad_9;
|
---|
| 552 |
|
---|
| 553 | var kb_pad_plus = this._setup_key(parent, "___pad_plus", edge_Y, edge_3, cp, dp, c, dp2, fs);
|
---|
| 554 | kb_pad_plus.innerHTML = "+";
|
---|
| 555 | this.pad[7] = kb_pad_plus;
|
---|
| 556 |
|
---|
| 557 | edge_Y = (this._findY(kb_pad_7) + prevH + gap) + "px";
|
---|
| 558 |
|
---|
| 559 | var kb_pad_4 = this._setup_key(parent, "___pad_4", edge_Y, edge, cp, cp, c, lh, fs);
|
---|
| 560 | kb_pad_4.innerHTML = "4";
|
---|
| 561 | this.pad[8] = kb_pad_4;
|
---|
| 562 |
|
---|
| 563 | var kb_pad_5 = this._setup_key(parent, "___pad_5", edge_Y, edge_1, cp, cp, c, lh, fs);
|
---|
| 564 | kb_pad_5.innerHTML = "5";
|
---|
| 565 | this.pad[9] = kb_pad_5;
|
---|
| 566 |
|
---|
| 567 | var kb_pad_6 = this._setup_key(parent, "___pad_6", edge_Y, edge_2, cp, cp, c, lh, fs);
|
---|
| 568 | kb_pad_6.innerHTML = "6";
|
---|
| 569 | this.pad[10] = kb_pad_6;
|
---|
| 570 |
|
---|
| 571 | edge_Y = (this._findY(kb_pad_4) + prevH + gap) + "px";
|
---|
| 572 |
|
---|
| 573 | var kb_pad_1 = this._setup_key(parent, "___pad_1", edge_Y, edge, cp, cp, c, lh, fs);
|
---|
| 574 | kb_pad_1.innerHTML = "1";
|
---|
| 575 | this.pad[11] = kb_pad_1;
|
---|
| 576 |
|
---|
| 577 | var kb_pad_2 = this._setup_key(parent, "___pad_2", edge_Y, edge_1, cp, cp, c, lh, fs);
|
---|
| 578 | kb_pad_2.innerHTML = "2";
|
---|
| 579 | this.pad[12] = kb_pad_2;
|
---|
| 580 |
|
---|
| 581 | var kb_pad_3 = this._setup_key(parent, "___pad_3", edge_Y, edge_2, cp, cp, c, lh, fs);
|
---|
| 582 | kb_pad_3.innerHTML = "3";
|
---|
| 583 | this.pad[13] = kb_pad_3;
|
---|
| 584 |
|
---|
| 585 | var kb_pad_enter = this._setup_key(parent, "___pad_enter", edge_Y, edge_3, cp, dp, c, dp2, parseFloat(fs) * 0.643, n);
|
---|
| 586 | kb_pad_enter.innerHTML = "Enter";
|
---|
| 587 | this.pad[14] = kb_pad_enter;
|
---|
| 588 |
|
---|
| 589 | edge_Y = (this._findY(kb_pad_1) + prevH + gap) + "px";
|
---|
| 590 |
|
---|
| 591 | var kb_pad_0 = this._setup_key(parent, "___pad_0", edge_Y, edge, dp, cp, l, lh, fs, "", 7 * mag + "px");
|
---|
| 592 | kb_pad_0.innerHTML = "0";
|
---|
| 593 | this.pad[15] = kb_pad_0;
|
---|
| 594 |
|
---|
| 595 | var kb_pad_period = this._setup_key(parent, "___pad_period", edge_Y, edge_2, cp, cp, c, lh, fs);
|
---|
| 596 | kb_pad_period.innerHTML = ".";
|
---|
| 597 | this.pad[16] = kb_pad_period;
|
---|
| 598 |
|
---|
| 599 | return this.kbpM;
|
---|
| 600 | },
|
---|
| 601 |
|
---|
| 602 | _set_key_state: function(key, on, textcolor, bordercolor, bgcolor)
|
---|
| 603 | {
|
---|
| 604 | if(key)
|
---|
| 605 | {
|
---|
| 606 | var ks = key.style;
|
---|
| 607 | if(ks)
|
---|
| 608 | {
|
---|
| 609 | if(textcolor) ks.color = textcolor;
|
---|
| 610 | if(bordercolor) ks.border = "1px solid " + bordercolor;
|
---|
| 611 | if(bgcolor) ks.backgroundColor = bgcolor;
|
---|
| 612 | }
|
---|
| 613 |
|
---|
| 614 | this._detach_event(key, 'mouseup', this._generic_callback_proc);
|
---|
| 615 |
|
---|
| 616 | if(on)
|
---|
| 617 | this._setup_event(key, 'mouseup', this._generic_callback_proc);
|
---|
| 618 | }
|
---|
| 619 | },
|
---|
| 620 |
|
---|
| 621 | _refresh_layout: function(layout)
|
---|
| 622 | {
|
---|
| 623 | if(!layout) layout = this.mod[7].innerHTML;
|
---|
| 624 |
|
---|
| 625 | var fc = this.fontcolor, kc = this.keycolor, ikc = this.ikc;
|
---|
| 626 | var ibc = this.ibc, bc = this.bordercolor, lic = this.lic;
|
---|
| 627 |
|
---|
| 628 | var arr_type = this.AltGr ? (this.Shift ? "alt_gr_shift" : "alt_gr") : (this.Shift ? "shift" : (this.Caps ? "caps" : "normal"));
|
---|
| 629 |
|
---|
| 630 | var nkeys = this.keys.length;
|
---|
| 631 |
|
---|
| 632 | var norm_arr = this[layout + "_normal"];
|
---|
| 633 | var caps_arr = this[layout + "_caps"];
|
---|
| 634 | var shift_arr = this[layout + "_shift"];
|
---|
| 635 | var alt_arr = this[layout + "_alt_gr"];
|
---|
| 636 |
|
---|
| 637 | var alt_shift_arr = this[layout + "_alt_gr_shift"];
|
---|
| 638 |
|
---|
| 639 | var dead_arr = this[this.DeadAction[1]] || null;
|
---|
| 640 |
|
---|
| 641 | var bcaps = (caps_arr && (caps_arr.length == nkeys));
|
---|
| 642 | var bshift = (shift_arr && (shift_arr.length == nkeys));
|
---|
| 643 | var balt = (alt_arr && (alt_arr.length == nkeys));
|
---|
| 644 | var baltsh = (balt && alt_shift_arr && (alt_shift_arr.length == nkeys));
|
---|
| 645 |
|
---|
| 646 | var caps = this.mod[2], shift = this.mod[5], shift_r = this.mod[6], alt_gr = this.mod[11];
|
---|
| 647 |
|
---|
| 648 | if(bshift)
|
---|
| 649 | {
|
---|
| 650 | this._set_key_state(shift, true, fc, bc, this.Shift ? lic : kc);
|
---|
| 651 | this._set_key_state(shift_r, true, fc, bc, this.Shift ? lic : kc);
|
---|
| 652 | }
|
---|
| 653 | else
|
---|
| 654 | {
|
---|
| 655 | this._set_key_state(shift, false, ibc, ibc, ikc);
|
---|
| 656 | this._set_key_state(shift_r, false, ibc, ibc, ikc);
|
---|
| 657 |
|
---|
| 658 | if(arr_type == "shift")
|
---|
| 659 | {
|
---|
| 660 | arr_type = "normal";
|
---|
| 661 | this.Shift = false;
|
---|
| 662 | }
|
---|
| 663 | }
|
---|
| 664 |
|
---|
| 665 | if(balt)
|
---|
| 666 | {
|
---|
| 667 | this._set_key_state(alt_gr, true, fc, bc, this.AltGr ? lic : kc);
|
---|
| 668 |
|
---|
| 669 | if(this.AltGr)
|
---|
| 670 | {
|
---|
| 671 | if(baltsh)
|
---|
| 672 | {
|
---|
| 673 | this._set_key_state(shift, true, fc, bc);
|
---|
| 674 | this._set_key_state(shift_r, true, fc, bc);
|
---|
| 675 | }
|
---|
| 676 | else
|
---|
| 677 | {
|
---|
| 678 | this._set_key_state(shift, false, ibc, ibc, ikc);
|
---|
| 679 | this._set_key_state(shift_r, false, ibc, ibc, ikc);
|
---|
| 680 |
|
---|
| 681 | arr_type = "alt_gr";
|
---|
| 682 | this.Shift = false;
|
---|
| 683 | }
|
---|
| 684 | }
|
---|
| 685 | }
|
---|
| 686 | else
|
---|
| 687 | {
|
---|
| 688 | this._set_key_state(alt_gr, false, ibc, ibc, ikc);
|
---|
| 689 |
|
---|
| 690 | if(arr_type == "alt_gr")
|
---|
| 691 | {
|
---|
| 692 | arr_type = "normal";
|
---|
| 693 | this.AltGr = false;
|
---|
| 694 | }
|
---|
| 695 | else if(arr_type == "alt_gr_shift")
|
---|
| 696 | {
|
---|
| 697 | arr_type = "normal";
|
---|
| 698 | this.AltGr = false, this.Shift = false;
|
---|
| 699 |
|
---|
| 700 | shift.style.backgroundColor = kc, shift_r.style.backgroundColor = kc;
|
---|
| 701 | }
|
---|
| 702 | }
|
---|
| 703 |
|
---|
| 704 | if(this.Shift && !baltsh)
|
---|
| 705 | this._set_key_state(alt_gr, false, ibc, ibc, ikc);
|
---|
| 706 |
|
---|
| 707 | if(bcaps && !this.AltGr)
|
---|
| 708 | this._set_key_state(caps, true, fc, bc, this.Caps ? lic : kc);
|
---|
| 709 | else
|
---|
| 710 | {
|
---|
| 711 | this._set_key_state(caps, false, ibc, ibc, ikc);
|
---|
| 712 |
|
---|
| 713 | this.Caps = false;
|
---|
| 714 | if(arr_type == "caps") arr_type = "normal";
|
---|
| 715 | }
|
---|
| 716 |
|
---|
| 717 | var arr_cur = this[layout + "_" + arr_type];
|
---|
| 718 |
|
---|
| 719 | var i = nkeys;
|
---|
| 720 | while(--i >= 0)
|
---|
| 721 | {
|
---|
| 722 | var key = this.keys[i], key_val = arr_cur[i]; if(!key_val) key_val = "";
|
---|
| 723 |
|
---|
| 724 | if(this.Shift && this.Caps)
|
---|
| 725 | {
|
---|
| 726 | var key_nrm = norm_arr[i], key_cps = caps_arr[i], key_shf = shift_arr[i];
|
---|
| 727 |
|
---|
| 728 | if((key_cps == key_shf) && (key_nrm != key_cps)) key_val = key_nrm;
|
---|
| 729 | }
|
---|
| 730 |
|
---|
| 731 | if(typeof(key_val) == "object")
|
---|
| 732 | {
|
---|
| 733 | key.innerHTML = key_val[0], key.dead = key_val[1];
|
---|
| 734 |
|
---|
| 735 | this._set_key_state(key, true, this.deadcolor, bc, (this.DeadAction[0] == key_val[0] ? lic : kc));
|
---|
| 736 | }
|
---|
| 737 | else
|
---|
| 738 | {
|
---|
| 739 | key.dead = null;
|
---|
| 740 |
|
---|
| 741 | var block = false;
|
---|
| 742 |
|
---|
| 743 | if(key_val != "")
|
---|
| 744 | {
|
---|
| 745 | if(dead_arr)
|
---|
| 746 | {
|
---|
| 747 | for(var j = 0, l = dead_arr.length; j < l; j++) { var dk = dead_arr[j]; if(dk[0] == key_val) { key_val = dk[1]; break;}};
|
---|
| 748 |
|
---|
| 749 | if(j == l) block = true;
|
---|
| 750 | }
|
---|
| 751 |
|
---|
| 752 | key.innerHTML = key_val;
|
---|
| 753 |
|
---|
| 754 | if(block)
|
---|
| 755 | this._set_key_state(key, false, ibc, ibc, ikc);
|
---|
| 756 | else
|
---|
| 757 | this._set_key_state(key, true, fc, bc, kc);
|
---|
| 758 | }
|
---|
| 759 | else
|
---|
| 760 | {
|
---|
| 761 | key.innerHTML = " ";
|
---|
| 762 | this._set_key_state(key, false, ibc, ibc, ikc);
|
---|
| 763 | }
|
---|
| 764 | }
|
---|
| 765 | }
|
---|
| 766 |
|
---|
| 767 | i = this.mod.length;
|
---|
| 768 | while(--i >= 0)
|
---|
| 769 | {
|
---|
| 770 | var key = this.mod[i];
|
---|
| 771 |
|
---|
| 772 | switch(i)
|
---|
| 773 | {
|
---|
| 774 | case 2: case 5: case 6: case 11:
|
---|
| 775 | break;
|
---|
| 776 |
|
---|
| 777 | case 7:
|
---|
| 778 | key.innerHTML = layout;
|
---|
| 779 |
|
---|
| 780 | this._detach_event(key, 'mousedown', this._handle_lang_menu);
|
---|
| 781 |
|
---|
| 782 | if(this.DeadAction[1])
|
---|
| 783 | this._set_key_state(key, false, ibc, ibc, ikc);
|
---|
| 784 | else
|
---|
| 785 | {
|
---|
| 786 | var many = (this.avail_langs.length > 1);
|
---|
| 787 |
|
---|
| 788 | this._set_key_state(key, false, fc, many ? this.lsc : ibc, many ? kc : ikc);
|
---|
| 789 | if(many)
|
---|
| 790 | this._setup_event(key, 'mousedown', this._handle_lang_menu);
|
---|
| 791 | }
|
---|
| 792 | break;
|
---|
| 793 |
|
---|
| 794 | case 10:
|
---|
| 795 | key.innerHTML = this.DeadAction[1] ? this.DeadAction[0] : " ";
|
---|
| 796 |
|
---|
| 797 | default:
|
---|
| 798 | if((this.DeadAction[1] && (i != 10)) || ((i == 8) || (i == 9) || (i == 12) || (i ==13)))
|
---|
| 799 | this._set_key_state(key, false, ibc, ibc, ikc);
|
---|
| 800 | else
|
---|
| 801 | this._set_key_state(key, true, fc, bc, kc);
|
---|
| 802 |
|
---|
| 803 | var ks = key.style;
|
---|
| 804 | switch(i)
|
---|
| 805 | {
|
---|
| 806 | case 4: ks.borderBottomColor = kc; break;
|
---|
| 807 |
|
---|
| 808 | case 8: case 9: case 12: case 13: ks.borderColor = ibc; break;
|
---|
| 809 | }
|
---|
| 810 | }
|
---|
| 811 | }
|
---|
| 812 |
|
---|
| 813 | i = this.pad.length;
|
---|
| 814 | while(--i >= 0)
|
---|
| 815 | {
|
---|
| 816 | key = this.pad[i];
|
---|
| 817 |
|
---|
| 818 | if(this.DeadAction[1])
|
---|
| 819 | this._set_key_state(key, false, ibc, ibc, ikc);
|
---|
| 820 | else
|
---|
| 821 | this._set_key_state(key, true, fc, bc, kc);
|
---|
| 822 | }
|
---|
| 823 | },
|
---|
| 824 |
|
---|
| 825 | _handle_lang_menu: function(event)
|
---|
| 826 | {
|
---|
| 827 | var in_el = VKeyboard.prototype._get_event_source(event);
|
---|
| 828 | var container_id = in_el.id.substring(0, in_el.id.indexOf("___"));
|
---|
| 829 | var vkb = VKeyboard.kbArray[container_id];
|
---|
| 830 |
|
---|
| 831 | var ct = vkb.Cntr, menu = vkb.menu;
|
---|
| 832 |
|
---|
| 833 | if(menu)
|
---|
| 834 | { ct.removeChild(menu); vkb.menu = null; }
|
---|
| 835 | else
|
---|
| 836 | {
|
---|
| 837 | var fs = vkb.fontsize, kc = vkb.keycolor, bc = "1px solid " + vkb.bordercolor;
|
---|
| 838 |
|
---|
| 839 | var pad = vkb.pad.length, per_row = pad ? 5 : 4, item_wd = pad ? 108 : 103;
|
---|
| 840 | var num_rows = Math.ceil(vkb.avail_langs.length / per_row);
|
---|
| 841 |
|
---|
| 842 | var mag = parseFloat(fs) / 14.0, cell = Math.floor(25.0 * mag), cp = cell + "px", lh = (cell - 2) + "px", w = item_wd * mag;
|
---|
| 843 | var h1 = Math.floor(cell + mag), h2 = String(w - mag) + "px", pad = String(4 * mag) + "px", wd = String(w * per_row + 1) + "px";
|
---|
| 844 |
|
---|
| 845 | var langs = vkb.avail_langs.length;
|
---|
| 846 |
|
---|
| 847 | menu = document.createElement("DIV"); var ms = menu.style;
|
---|
| 848 | ms.display = "block";
|
---|
| 849 | ms.position = "relative";
|
---|
| 850 |
|
---|
| 851 | ms.top = "1px", ms.left = "0px";
|
---|
| 852 | ms.width = wd;
|
---|
| 853 | ms.border = bc;
|
---|
| 854 | ms.backgroundColor = vkb.bgcolor;
|
---|
| 855 |
|
---|
| 856 | vkb.menu = ct.appendChild(menu);
|
---|
| 857 |
|
---|
| 858 | var menu_main = document.createElement("DIV"); ms = menu_main.style;
|
---|
| 859 | ms.fontFamily = vkb.fontname;
|
---|
| 860 | ms.position = "relative";
|
---|
| 861 |
|
---|
| 862 | ms.color = vkb.fontcolor;
|
---|
| 863 | ms.width = wd;
|
---|
| 864 | ms.height = String(num_rows * h1 + 1) + "px";
|
---|
| 865 | ms.cursor = "default";
|
---|
| 866 |
|
---|
| 867 | menu.appendChild(menu_main);
|
---|
| 868 |
|
---|
| 869 | function setcolor(obj, c) { return function() { obj.style.backgroundColor = c; } };
|
---|
| 870 |
|
---|
| 871 | for(var j = 0; j < langs; j++)
|
---|
| 872 | {
|
---|
| 873 | var item = vkb._setup_key(menu_main, "___lang_" + String(j), String(h1 * Math.floor(j / per_row) + 1) + "px", String((j % per_row) * w + 1) + "px", h2, cp, "center", lh, fs, "normal", pad);
|
---|
| 874 | item.style.backgroundColor = kc;
|
---|
| 875 | item.style.border = bc;
|
---|
| 876 | item.innerHTML = vkb.avail_langs[j][1];
|
---|
| 877 |
|
---|
| 878 | vkb._setup_event(item, 'mousedown', vkb._handle_lang_item);
|
---|
| 879 | vkb._setup_event(item, 'mouseover', setcolor(item, vkb.lic));
|
---|
| 880 | vkb._setup_event(item, 'mouseout', setcolor(item, kc));
|
---|
| 881 | }
|
---|
| 882 | }
|
---|
| 883 | },
|
---|
| 884 |
|
---|
| 885 | _handle_lang_item: function(event)
|
---|
| 886 | {
|
---|
| 887 | var in_el = VKeyboard.prototype._get_event_source(event);
|
---|
| 888 | var container_id = in_el.id.substring(0, in_el.id.indexOf("___"));
|
---|
| 889 | var vkb = VKeyboard.kbArray[container_id];
|
---|
| 890 |
|
---|
| 891 | var ndx = in_el.id.indexOf("___lang_");
|
---|
| 892 | var lng = in_el.id.substring(ndx + 8, in_el.id.length);
|
---|
| 893 | var newl = vkb.avail_langs[lng][0];
|
---|
| 894 |
|
---|
| 895 | if(vkb.mod[7].innerHTML != newl)
|
---|
| 896 | vkb._refresh_layout(newl);
|
---|
| 897 |
|
---|
| 898 | vkb.Cntr.removeChild(vkb.menu);
|
---|
| 899 | vkb.menu = null;
|
---|
| 900 | },
|
---|
| 901 |
|
---|
| 902 | _generic_callback_proc: function(event)
|
---|
| 903 | {
|
---|
| 904 | var in_el = VKeyboard.prototype._get_event_source(event);
|
---|
| 905 | var container_id = in_el.id.substring(0, in_el.id.indexOf("___"));
|
---|
| 906 | var vkb = VKeyboard.kbArray[container_id];
|
---|
| 907 |
|
---|
| 908 | var val = in_el.subst || in_el.innerHTML;
|
---|
| 909 | if(!val) return;
|
---|
| 910 |
|
---|
| 911 | switch(val)
|
---|
| 912 | {
|
---|
| 913 | case "Caps": case "Shift": case "AltGr":
|
---|
| 914 |
|
---|
| 915 | vkb[val] = !vkb[val];
|
---|
| 916 | vkb._refresh_layout();
|
---|
| 917 |
|
---|
| 918 | if(vkb.sc) vkb._start_flash(in_el);
|
---|
| 919 | return;
|
---|
| 920 |
|
---|
| 921 | case "Tab": val = "\t"; break;
|
---|
| 922 | case " ": val = " "; break;
|
---|
| 923 | case """: val = "\""; break;
|
---|
| 924 | case "<": val = "<"; break;
|
---|
| 925 | case ">": val = ">"; break;
|
---|
| 926 | case "&": val = "&"; break;
|
---|
| 927 | }
|
---|
| 928 |
|
---|
| 929 | if(vkb.sc) vkb._start_flash(in_el);
|
---|
| 930 |
|
---|
| 931 | if(in_el.dead)
|
---|
| 932 | {
|
---|
| 933 | if(in_el.dead == vkb.DeadAction[1])
|
---|
| 934 | { val = ""; vkb.DeadAction[0] = vkb.DeadAction[1] = null; }
|
---|
| 935 | else
|
---|
| 936 | { vkb.DeadAction[0] = val; vkb.DeadAction[1] = in_el.dead; }
|
---|
| 937 |
|
---|
| 938 | vkb._refresh_layout();
|
---|
| 939 | return;
|
---|
| 940 | }
|
---|
| 941 | else
|
---|
| 942 | {
|
---|
| 943 | var r;
|
---|
| 944 | if(vkb.DeadAction[1]) { vkb.DeadAction[0] = vkb.DeadAction[1] = null; r = true; }
|
---|
| 945 |
|
---|
| 946 | if(vkb.AltGr || vkb.Shift || r)
|
---|
| 947 | {
|
---|
| 948 | vkb.AltGr = false; vkb.Shift = false;
|
---|
| 949 | vkb._refresh_layout();
|
---|
| 950 | }
|
---|
| 951 | }
|
---|
| 952 |
|
---|
| 953 | if(vkb._Callback) vkb._Callback(val, vkb.Cntr.id);
|
---|
| 954 | },
|
---|
| 955 |
|
---|
| 956 | SetParameters: function()
|
---|
| 957 | {
|
---|
| 958 | var l = arguments.length;
|
---|
| 959 | if(!l || (l % 2 != 0)) return false;
|
---|
| 960 |
|
---|
| 961 | var p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16;
|
---|
| 962 |
|
---|
| 963 | while(--l > 0)
|
---|
| 964 | {
|
---|
| 965 | var value = arguments[l];
|
---|
| 966 |
|
---|
| 967 | switch(arguments[--l])
|
---|
| 968 | {
|
---|
| 969 | case "callback":
|
---|
| 970 | p0 = ((typeof(value) == "function") && ((value.length == 1) || (value.length == 2))) ? value : this._Callback;
|
---|
| 971 | break;
|
---|
| 972 |
|
---|
| 973 | case "font-name": p1 = value; break;
|
---|
| 974 | case "font-size": p2 = value; break;
|
---|
| 975 | case "font-color": p3 = value; break;
|
---|
| 976 | case "dead-color": p4 = value; break;
|
---|
| 977 | case "base-color": p5 = value; break;
|
---|
| 978 | case "key-color": p6 = value; break;
|
---|
| 979 |
|
---|
| 980 | case "selection-color": p7 = value; break;
|
---|
| 981 | case "border-color": p8 = value; break;
|
---|
| 982 |
|
---|
| 983 | case "inactive-border-color": p9 = value; break;
|
---|
| 984 | case "inactive-key-color": p10 = value; break;
|
---|
| 985 | case "lang-cell-color": p11 = value; break;
|
---|
| 986 |
|
---|
| 987 | case "show-click": p12 = value; break;
|
---|
| 988 |
|
---|
| 989 | case "click-font-color": p13 = value; break;
|
---|
| 990 | case "click-key-color": p14 = value; break;
|
---|
| 991 | case "click-border-color": p15 = value; break;
|
---|
| 992 |
|
---|
| 993 | case "layout": p16 = value; break;
|
---|
| 994 |
|
---|
| 995 | default: break;
|
---|
| 996 | }
|
---|
| 997 | }
|
---|
| 998 |
|
---|
| 999 | this._construct(this.Cntr.id, p0, 0, 0, 0, (this.pad.length != 0), p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, this.gap, p16);
|
---|
| 1000 |
|
---|
| 1001 | return true;
|
---|
| 1002 | },
|
---|
| 1003 |
|
---|
| 1004 | Show: function(value)
|
---|
| 1005 | {
|
---|
| 1006 | var ct = this.Cntr.style;
|
---|
| 1007 |
|
---|
| 1008 | ct.display = ((value == undefined) || (value == true)) ? "block" : ((value == false) ? "none" : ct.display);
|
---|
| 1009 | },
|
---|
| 1010 |
|
---|
| 1011 | ShowNumpad: function(value)
|
---|
| 1012 | {
|
---|
| 1013 | var sh = ((value == undefined) || (value == true)) ? "block" : ((value == false) ? "none" : null);
|
---|
| 1014 | if(!sh) return;
|
---|
| 1015 |
|
---|
| 1016 | var kb = this.Cntr.childNodes[0];
|
---|
| 1017 |
|
---|
| 1018 | var i = this.pad.length;
|
---|
| 1019 | if(i)
|
---|
| 1020 | {
|
---|
| 1021 | while(--i >= 0)
|
---|
| 1022 | this.pad[i].parentNode.style.display = sh;
|
---|
| 1023 |
|
---|
| 1024 | kb.style.width = kb.childNodes[0].style.width = (sh == "none") ? (this.kbpH + 1) + "px" : this.kbpM + "px";
|
---|
| 1025 | }
|
---|
| 1026 | else
|
---|
| 1027 | {
|
---|
| 1028 | if(sh == "block")
|
---|
| 1029 | {
|
---|
| 1030 | kb.style.width = kb.childNodes[0].style.width = this._create_numpad(this.Cntr.id, kb.childNodes[0]);
|
---|
| 1031 | this._refresh_layout();
|
---|
| 1032 | }
|
---|
| 1033 | }
|
---|
| 1034 | },
|
---|
| 1035 |
|
---|
| 1036 | // Layout info:
|
---|
| 1037 |
|
---|
| 1038 | avail_langs: [["Us", "English (US)"], ["Ca", "Canadian"],
|
---|
| 1039 | ["Ru", "Русский"], ["De", "Deutsch"],
|
---|
| 1040 | ["Fr", "Français"], ["Es", "Español"], ["It", "Italiano"], ["Cz", "Česky"],
|
---|
| 1041 | ["El", "Έλληνας"], ["He", "עברית"]],
|
---|
| 1042 |
|
---|
| 1043 | // Us International:
|
---|
| 1044 |
|
---|
| 1045 | Us_normal: [["`", "Grave"], "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1046 | "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\",
|
---|
| 1047 | "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'",,
|
---|
| 1048 | "z", "x", "c", "v", "b", "n", "m", ",", ".", "/"],
|
---|
| 1049 |
|
---|
| 1050 | Us_caps: [["`", "Grave"], "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1051 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[", "]", "\",
|
---|
| 1052 | "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "'",,
|
---|
| 1053 | "Z", "X", "C", "V", "B", "N", "M", ",", ".", "/"],
|
---|
| 1054 |
|
---|
| 1055 | Us_shift: [["~", "Tilde"], "!", "@", "#", "$", "%", ["^", "Circumflex"], "&", "*", "(", ")", "_", "+",
|
---|
| 1056 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|",
|
---|
| 1057 | "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", """,,
|
---|
| 1058 | "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?"],
|
---|
| 1059 |
|
---|
| 1060 | Us_alt_gr: [, "¡", "²", "³", "¤", "€", "¼", "½", "¾", "‘", "’", "¥", "×",
|
---|
| 1061 | "ä", "å", "é", "®", "þ", "ü", "ú", "í", "ó", "ö", "«", "»",
|
---|
| 1062 | "¬", "á", "ß", "đ",,,,,, "ø", "¶", ["´", "Acute"],, "æ",, "©",,,
|
---|
| 1063 | "ñ", "µ", "ç",, "¿"],
|
---|
| 1064 |
|
---|
| 1065 | Us_alt_gr_shift: [, "¹",,, "£",,,,,,,, "÷", "Ä", "Å", "É",, "Þ", "Ü",
|
---|
| 1066 | "Ú", "Í", "Ó", "Ö",,, "¦", "Á", "§", "Đ",,,,,, "Ø",
|
---|
| 1067 | "°", ["¨", "Umlaut"],, "Æ",, "¢",,, "Ñ",, "Ç",,""],
|
---|
| 1068 |
|
---|
| 1069 | // Canadian (multilingual standard):
|
---|
| 1070 |
|
---|
| 1071 | Ca_normal: ["/", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1072 | "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", ["^", "Circumflex"], "ç", "ù",
|
---|
| 1073 | "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "è", "à",
|
---|
| 1074 | "z", "x", "c", "v", "b", "n", "m", ",", ".", "é"],
|
---|
| 1075 |
|
---|
| 1076 | Ca_caps: ["/", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1077 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ["^", "Circumflex"], "Ç", "Ù",
|
---|
| 1078 | "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "È", "À",
|
---|
| 1079 | "Z", "X", "C", "V", "B", "N", "M", ",", ".", "É"],
|
---|
| 1080 |
|
---|
| 1081 | Ca_shift: ["\", "!", "@", "#", "$", "%", "?", "&", "*", "(", ")", "_", "+",
|
---|
| 1082 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ["¨", "Umlaut"], "Ç", "Ù",
|
---|
| 1083 | "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "È", "À",
|
---|
| 1084 | "Z", "X", "C", "V", "B", "N", "M", "'", """, "É"],
|
---|
| 1085 |
|
---|
| 1086 | Ca_alt_gr: ["|",,,,,,, "{", "}", "[", "]",, "¬",,,,,,,,,,, ["`", "Grave"],
|
---|
| 1087 | ["~", "Tilde"],,,,,,,,,,, "°",,, "«", "»",,,,,, "<", ">",""],
|
---|
| 1088 |
|
---|
| 1089 | // Russian:
|
---|
| 1090 |
|
---|
| 1091 | Ru_normal: ["ё", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1092 | "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "\",
|
---|
| 1093 | "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э",,
|
---|
| 1094 | "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", "."],
|
---|
| 1095 |
|
---|
| 1096 | Ru_caps: ["Ё", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1097 | "Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "\",
|
---|
| 1098 | "Ф", "Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э",,
|
---|
| 1099 | "Я", "Ч", "С", "М", "И", "Т", "Ь", "Б", "Ю", "."],
|
---|
| 1100 |
|
---|
| 1101 | Ru_shift: ["Ё", "!", """, "№", ";", "%", ":", "?", "*", "(", ")", "_", "+",
|
---|
| 1102 | "Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "/",
|
---|
| 1103 | "Ф", "Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э",,
|
---|
| 1104 | "Я", "Ч", "С", "М", "И", "Т", "Ь", "Б", "Ю", ","],
|
---|
| 1105 |
|
---|
| 1106 | // German:
|
---|
| 1107 |
|
---|
| 1108 | De_normal: [["^", "Circumflex"], "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", ["´", "Acute"],
|
---|
| 1109 | "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "+", "<",
|
---|
| 1110 | "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "#",
|
---|
| 1111 | "y", "x", "c", "v", "b", "n", "m", ",", ".", "-"],
|
---|
| 1112 |
|
---|
| 1113 | De_caps: [["^", "Circumflex"], "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", ["´", "Acute"],
|
---|
| 1114 | "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ü", "+", "<",
|
---|
| 1115 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ö", "Ä", "#",
|
---|
| 1116 | "Y", "X", "C", "V", "B", "N", "M", ",", ".", "-"],
|
---|
| 1117 |
|
---|
| 1118 | De_shift: ["º", "!", """, "§", "$", "%", "&", "/", "(", ")", "=", "?", ["`", "Grave"],
|
---|
| 1119 | "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ü", "*", ">",
|
---|
| 1120 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ö", "Ä", "'",
|
---|
| 1121 | "Y", "X", "C", "V", "B", "N", "M", ";", ":", "_"],
|
---|
| 1122 |
|
---|
| 1123 | De_alt_gr: [,, "²", "³",,,, "{", "[", "]", "}", "\",, "@",, "€",,,,,,
|
---|
| 1124 | ,,, ["~", "Tilde"], "|",,,,,,,,,,,,,,,,,,, "µ",,,""],
|
---|
| 1125 |
|
---|
| 1126 | // French:
|
---|
| 1127 |
|
---|
| 1128 | Fr_normal: ["²", "&", "é", """, "'", "(", "|", "è", "_", "ç", "à", ")", "=",
|
---|
| 1129 | "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", ["^", "Circumflex"], "$", "<",
|
---|
| 1130 | "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "ù", "*",
|
---|
| 1131 | "w", "x", "c", "v", "b", "n", ",", ";", ":", "!"],
|
---|
| 1132 |
|
---|
| 1133 | Fr_caps: ["²", "&", "É", """, "'", "(", "|", "È", "_", "Ç", "À", ")", "=",
|
---|
| 1134 | "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", ["^", "Circumflex"], "$", "<",
|
---|
| 1135 | "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "Ù", "*",
|
---|
| 1136 | "W", "X", "C", "V", "B", "N", ",", ";", ":", "!"],
|
---|
| 1137 |
|
---|
| 1138 | Fr_shift: [, "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "º", "+",
|
---|
| 1139 | "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", ["¨", "Umlaut"], "£", ">",
|
---|
| 1140 | "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "%", "µ",
|
---|
| 1141 | "W", "X", "C", "V", "B", "N", "?", "_", "/", "§"],
|
---|
| 1142 |
|
---|
| 1143 | Fr_alt_gr: [,,, "#", "{", "[", "|",, "\", "^", "@", "]", "}",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,""],
|
---|
| 1144 |
|
---|
| 1145 | // Spanish:
|
---|
| 1146 |
|
---|
| 1147 | Es_normal: ["º", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "’", "¡",
|
---|
| 1148 | "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", ["`", "Grave"], "+", "<",
|
---|
| 1149 | "a", "s", "d", "f", "g", "h", "j", "k", "l", "ñ", ["´", "Acute"], "ç",
|
---|
| 1150 | "z", "x", "c", "v", "b", "n", "m", ",", ".", "-"],
|
---|
| 1151 |
|
---|
| 1152 | Es_caps: ["º", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "’", "¡",
|
---|
| 1153 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ["`", "Grave"], "+", "<",
|
---|
| 1154 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ñ", ["´", "Acute"], "Ç",
|
---|
| 1155 | "Z", "X", "C", "V", "B", "N", "M", ",", ".", "-"],
|
---|
| 1156 |
|
---|
| 1157 | Es_shift: ["ª", "!", """, "'", "$", "%", "&", "/", "(", ")", "=", "?", "¿",
|
---|
| 1158 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ["^", "Circumflex"], "*", ">",
|
---|
| 1159 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ñ", ["¨", "Umlaut"], "Ç",
|
---|
| 1160 | "Z", "X", "C", "V", "B", "N", "M", ";", ":", "_"],
|
---|
| 1161 |
|
---|
| 1162 | Es_alt_gr: ["\", "|", "@", "#",,, "¬",,,,,,,,,,,,,,,,, "[","]",,,,,,,,,,,, "{", "}",,,,,,,,,,""],
|
---|
| 1163 |
|
---|
| 1164 | // Italian:
|
---|
| 1165 |
|
---|
| 1166 | It_normal: ["\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "’", "ì",
|
---|
| 1167 | "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "è", "+", "<",
|
---|
| 1168 | "a", "s", "d", "f", "g", "h", "j", "k", "l", "ò", "à", "ù",
|
---|
| 1169 | "z", "x", "c", "v", "b", "n", "m", ",", ".", "-"],
|
---|
| 1170 |
|
---|
| 1171 | It_caps: ["\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "’", "ì",
|
---|
| 1172 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "È", "+", "<",
|
---|
| 1173 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ò", "À", "Ù",
|
---|
| 1174 | "Z", "X", "C", "V", "B", "N", "M", ",", ".", "-"],
|
---|
| 1175 |
|
---|
| 1176 | It_shift: ["|", "!", """, "£", "$", "%", "&", "/", "(", ")", "=", "?", "^",
|
---|
| 1177 | "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "é", "*", "<",
|
---|
| 1178 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "ç", "°", "§",
|
---|
| 1179 | "Z", "X", "C", "V", "B", "N", "M", ";", ":", "_"],
|
---|
| 1180 |
|
---|
| 1181 | It_alt_gr: [,,,,,,,,,,,,,,,,,,,,,,"[","]",,,,,,,,,,,"@","#",,,,,,,,,,,,""],
|
---|
| 1182 |
|
---|
| 1183 | It_alt_gr_shift: [,,,,,,,,,,,,,,,,,,,,,,"{","}",,,,,,,,,,,,,,,,,,,,,,,,""],
|
---|
| 1184 |
|
---|
| 1185 | // Czech:
|
---|
| 1186 |
|
---|
| 1187 | Cz_normal: [";", "+", "ě", "š", "č", "ř", "ž", "ý", "á", "í", "é", "=", ["´", "Acute"],
|
---|
| 1188 | "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ú", ")", "&",
|
---|
| 1189 | "a", "s", "d", "f", "g", "h", "j", "k", "l", "ů", "§", ["¨", "Umlaut"],
|
---|
| 1190 | "y", "x", "c", "v", "b", "n", "m", ",", ".", "-"],
|
---|
| 1191 |
|
---|
| 1192 | Cz_caps: [";", "+", "Ě", "Š", "Č", "Ř", "Ž", "Ý", "Á", "Í", "É", "=", "ˊ",
|
---|
| 1193 | "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ú", ")", "&",
|
---|
| 1194 | "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ů", "§", ["¨", "Umlaut"],
|
---|
| 1195 | "Y", "X", "C", "V", "B", "N", "M", ",", ".", "-"],
|
---|
| 1196 |
|
---|
| 1197 | Cz_shift: [["º", "RingAbove"], "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "%", ["ˇ", "Caron"],
|
---|
| 1198 | "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "/", "(", "*",
|
---|
| 1199 | "A", "S", "D", "F", "G", "H", "J", "K", "L", """, "!", "'",
|
---|
| 1200 | "Y", "X", "C", "V", "B", "N", "M", "?", ":", "_"],
|
---|
| 1201 |
|
---|
| 1202 | Cz_alt_gr: [,["~", "Tilde"],["ˇ", "Caron"],["^", "Circumflex"],["˘", "Breve"],["°", "RingAbove"],["˛", "Ogonek"],
|
---|
| 1203 | ["`", "Grave"],["˙", "DotAbove"],["´", "Acute"],["˝", "DoubleAcute"],["¨", "Umlaut"],["¸", "Cedilla"],
|
---|
| 1204 | "\","|","€",,,,,,,,"÷", "×", "<",,"đ","Ð","[","]",,,"ł","Ł","$", "ß", "¤", ">",
|
---|
| 1205 | "#",,"@","{","}",,,,""],
|
---|
| 1206 |
|
---|
| 1207 | // Greek:
|
---|
| 1208 |
|
---|
| 1209 | El_normal: ["½", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1210 | ";", "ς", "ε", "ρ", "τ", "υ", "θ", "ι", "ο", "π", "[", "]", "§",
|
---|
| 1211 | "α", "σ", "δ", "φ", "γ", "η", "ξ", "κ", "λ", ["´", "Acute"], "’", "\",
|
---|
| 1212 | "ζ", "χ", "ψ", "ω", "β", "ν", "μ", ",", ".", "/"],
|
---|
| 1213 |
|
---|
| 1214 | El_caps: ["½", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1215 | ";", "ς", "Ε", "Ρ", "Τ", "Υ", "Θ", "Ι", "Ο", "Π", "[", "]", "§",
|
---|
| 1216 | "Α", "Σ", "Δ", "Φ", "Γ", "Η", "Ξ", "Κ", "Λ", ["´", "Acute"], "’", "\",
|
---|
| 1217 | "Ζ", "Χ", "Ψ", "Ω", "Β", "Ν", "Μ", ",", ".", "/"],
|
---|
| 1218 |
|
---|
| 1219 | El_shift: ["±", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+",
|
---|
| 1220 | ":", "¦", "Ε", "Ρ", "Τ", "Υ", "Θ", "Ι", "Ο", "Π", "{", "}", "©",
|
---|
| 1221 | "Α", "Σ", "Δ", "Φ", "Γ", "Η", "Ξ", "Κ", "Λ", ["¨", "Umlaut"], "‘", "|",
|
---|
| 1222 | "Ζ", "Χ", "Ψ", "Ω", "Β", "Ν", "Μ", "<", ">", "?"],
|
---|
| 1223 |
|
---|
| 1224 | El_alt_gr: [,,"²", "³", "£", "§", "¶",, "¤", "¦", "°", "±", "½",,,,,,
|
---|
| 1225 | ,,,,,"«", "»",,,,,,,,,,,["΅", "DialytikaTonos"],, "¬",,,,,,,,,,""],
|
---|
| 1226 |
|
---|
| 1227 | // Hebrew:
|
---|
| 1228 |
|
---|
| 1229 | He_normal: [";", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=",
|
---|
| 1230 | "/", "'", "ק", "ר", "א", "ט", "ו", "ן", "ם", "פ", "[", "]", "\",
|
---|
| 1231 | "ש", "ד", "ג", "כ", "ע", "י", "ח", "ל", "ך", "ף", ",",,
|
---|
| 1232 | "ז", "ס", "ב", "ה", "נ", "מ", "צ", "ת", "ץ", "."],
|
---|
| 1233 |
|
---|
| 1234 | He_shift: ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+",
|
---|
| 1235 | "/", "'", "ק", "ר", "א", "ט", "ו", "ן", "ם", "פ", "{", "}", "|",
|
---|
| 1236 | "ש", "ד", "ג", "כ", "ע", "י", "ח", "ל", "ך", ":", """,,
|
---|
| 1237 | "ז", "ס", "ב", "ה", "נ", "מ", "צ", "<", ">", "?"],
|
---|
| 1238 |
|
---|
| 1239 | He_alt_gr: [,,,,"₪",,,,,,,"־",,,,,,,,"װ",,,,,,,,,,,,"ײ","ױ",,,,,,,,,,,,,,,""],
|
---|
| 1240 |
|
---|
| 1241 | // Diacritic arrays:
|
---|
| 1242 |
|
---|
| 1243 | Acute: [["a", "á"], ["e", "é"], ["i", "í"], ["o", "ó"],
|
---|
| 1244 | ["u", "ú"], ["y", "ý"], ["A", "Á"], ["E", "É"],
|
---|
| 1245 | ["I", "Í"], ["O", "Ó"], ["U", "Ú"], ["Y", "Ý"],
|
---|
| 1246 | ["c", "ć"], ["C", "Ć"], ["l", "ĺ"], ["L", "Ĺ"],
|
---|
| 1247 | ["m", "ḿ"], ["M", "Ḿ"], ["n", "ń"], ["N", "Ń"],
|
---|
| 1248 | ["r", "ŕ"], ["R", "Ŕ"], ["s", "ś"], ["S", "Ś"],
|
---|
| 1249 | ["z", "ź"], ["Z", "Ź"], ["Α", "Ά"], ["Ε", "Έ"],
|
---|
| 1250 | ["Η", "Ή"], ["Ι", "Ί"], ["Ο", "Ό"], ["Υ", "Ύ"],
|
---|
| 1251 | ["Ω", "Ώ"], ["α", "ά"], ["ε", "έ"], ["η", "ή"],
|
---|
| 1252 | ["ι", "ί"], ["ο", "ό"], ["υ", "ύ"], ["ω", "ώ"],
|
---|
| 1253 | ["W", "Ẃ"], ["w", "ẃ"]],
|
---|
| 1254 |
|
---|
| 1255 | Breve: [["a", "ă"], ["e", "ĕ"], ["i", "ĭ"], ["o", "ŏ"],
|
---|
| 1256 | ["u", "ŭ"], ["A", "Ă"], ["E", "Ĕ"], ["I", "Ĭ"],
|
---|
| 1257 | ["O", "Ŏ"], ["U", "Ŭ"], ["y", "y̆"], ["Y", "Y̆"],
|
---|
| 1258 | ["g", "ğ"], ["G", "Ğ"]],
|
---|
| 1259 |
|
---|
| 1260 | Caron: [["c", "č"], ["C", "Č"], ["d", "ď"], ["D", "Ď"],
|
---|
| 1261 | ["e", "ě"], ["E", "Ě"], ["n", "ň"], ["N", "Ň"],
|
---|
| 1262 | ["r", "ř"], ["R", "Ř"], ["s", "š"], ["S", "Š"],
|
---|
| 1263 | ["t", "ť"], ["T", "Ť"], ["z", "ž"], ["Z", "Ž"],
|
---|
| 1264 | ["l", "ľ"], ["L", "Ľ"]],
|
---|
| 1265 |
|
---|
| 1266 | Cedilla: [["c", "ç"], ["C", "Ç"], ["g", "ģ"], ["G", "Ģ"],
|
---|
| 1267 | ["k", "ķ"], ["K", "Ķ"], ["l", "ļ"], ["L", "Ļ"],
|
---|
| 1268 | ["n", "ņ"], ["N", "Ņ"], ["r", "ŗ"], ["R", "Ŗ"],
|
---|
| 1269 | ["s", "ş"], ["S", "Ş"], ["t", "ţ"], ["T", "Ţ"]],
|
---|
| 1270 |
|
---|
| 1271 | Circumflex: [["a", "â"], ["A", "Â"], ["e", "ê"], ["E", "Ê"],
|
---|
| 1272 | ["i", "î"], ["I", "Î"], ["o", "ô"], ["O", "Ô"],
|
---|
| 1273 | ["c", "ĉ"], ["C", "Ĉ"], ["g", "ĝ"], ["G", "Ĝ"],
|
---|
| 1274 | ["h", "ĥ"], ["H", "Ĥ"], ["j", "ĵ"], ["J", "Ĵ"],
|
---|
| 1275 | ["s", "ŝ"], ["S", "Ŝ"], ["u", "û"], ["U", "Û"],
|
---|
| 1276 | ["w", "ŵ"], ["W", "Ŵ"], ["y", "ŷ"], ["Y", "Ŷ"]],
|
---|
| 1277 |
|
---|
| 1278 | DialytikaTonos: [["ι", "ΐ"], ["φ", "ΰ"]], // combined acute + ulmaut
|
---|
| 1279 |
|
---|
| 1280 | DotAbove: [["c", "ċ"], ["C", "Ċ"], ["g", "ġ"], ["G", "Ġ"],
|
---|
| 1281 | ["z", "ż"], ["Z", "Ż"], ["e", "ė"], ["E", "Ė"],
|
---|
| 1282 | ["n", "ṅ"], ["N", "Ṅ"], ["m", "ṁ"], ["M", "Ṁ"],
|
---|
| 1283 | ["b", "ḃ"], ["B", "Ḃ"]],
|
---|
| 1284 |
|
---|
| 1285 | DoubleAcute: [["o", "ő"], ["O", "Ő"], ["u", "ű"], ["U", "Ű"]],
|
---|
| 1286 |
|
---|
| 1287 | Grave: [["a", "à"], ["e", "è"], ["i", "ì"], ["o", "ò"], ["u", "ù"],
|
---|
| 1288 | ["A", "À"], ["E", "È"], ["I", "Ì"], ["O", "Ò"], ["U", "Ù"],
|
---|
| 1289 | ["W", "Ẁ"], ["w", "ẁ"], ["Y", "Ỳ"], ["y", "ỳ"],
|
---|
| 1290 | ["m", "m̀"], ["M", "M̀"], ["n", "ǹ"], ["N", "Ǹ"]],
|
---|
| 1291 |
|
---|
| 1292 | Ogonek: [["i", "į"], ["o", "ǫ"], ["u", "ų"],
|
---|
| 1293 | ["I", "Į"], ["O", "Ǫ"], ["U", "Ų"]],
|
---|
| 1294 |
|
---|
| 1295 | RingAbove: [["a", "å"], ["A", "Å"], ["u", "ů"], ["U", "Ů"]],
|
---|
| 1296 |
|
---|
| 1297 | Tilde: [["a", "ã"], ["o", "õ"], ["n", "ñ"], ["A", "Ã"], ["O", "Õ"],
|
---|
| 1298 | ["i", "ĩ"], ["I", "Ĩ"], ["u", "ũ"], ["U", "Ũ"], ["N", "Ñ"],
|
---|
| 1299 | ["e", "ẽ"], ["E", "Ẽ"], ["y", "ỹ"], ["Y", "Ỹ"], ["g", "g̃"],
|
---|
| 1300 | ["G", "G̃"]],
|
---|
| 1301 |
|
---|
| 1302 | Umlaut: [["a", "ä"], ["e", "ë"], ["i", "ï"], ["o", "ö"], ["u", "ü"],
|
---|
| 1303 | ["y", "ÿ"], ["A", "Ä"], ["E", "Ë"], ["I", "Ï"], ["O", "Ö"],
|
---|
| 1304 | ["U", "Ü"], ["Y", "Ÿ"], ["Ι", "Ϊ"], ["Υ", "Ϋ"], ["ι", "ϊ"],
|
---|
| 1305 | ["υ", "ϋ"]]
|
---|
| 1306 | }; |
---|