Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const keyboardLayout = {
  2.   en: {
  3.     backquote: ['`', '~'],
  4.     digit1: ['1', '!'],
  5.     digit2: ['2', '@'],
  6.     digit3: ['3', '#'],
  7.     digit4: ['4', '$'],
  8.     digit5: ['5', '%'],
  9.     digit6: ['6', '^'],
  10.     digit7: ['7', '&'],
  11.     digit8: ['8', '*'],
  12.     digit9: ['9', '('],
  13.     digit0: ['0', ')'],
  14.     minus: ['-', '_'],
  15.     equal: ['=', '+'],
  16.     backspace: ['Backspace'],
  17.     tab: ['Tab'],
  18.     keyQ: ['q', 'Q'],
  19.     keyW: ['w', 'W'],
  20.     keyE: ['e', 'E'],
  21.     keyR: ['r', 'R'],
  22.     keyT: ['t', 'T'],
  23.     keyY: ['y', 'Y'],
  24.     keyU: ['u', 'U'],
  25.     keyI: ['i', 'I'],
  26.     keyO: ['o', 'O'],
  27.     keyP: ['p', 'P'],
  28.     bracketLeft: ['[', '{'],
  29.     bracketRight: [']', '}'],
  30.     backslash: ['\\', '|'],
  31.     del: ['DEL'],
  32.     capsLock: ['CapsLock'],
  33.     keyA: ['a', 'A'],
  34.     keyS: ['s', 'S'],
  35.     keyD: ['d', 'D'],
  36.     keyF: ['f', 'F'],
  37.     keyG: ['g', 'G'],
  38.     keyH: ['h', 'H'],
  39.     keyJ: ['j', 'J'],
  40.     keyK: ['k', 'K'],
  41.     keyL: ['l', 'L'],
  42.     semicolon: [';', ':'],
  43.     quote: ['\'', '"'],
  44.     enter: ['ENTER'],
  45.     shiftLeft: ['Shift'],
  46.     keyZ: ['z', 'Z'],
  47.     keyX: ['x', 'X'],
  48.     keyC: ['c', 'C'],
  49.     keyV: ['v', 'V'],
  50.     keyB: ['b', 'B'],
  51.     keyN: ['n', 'N'],
  52.     keyM: ['m', 'M'],
  53.     comma: [',', '<'],
  54.     period: ['.', '>'],
  55.     slash: ['/', '?'],
  56.     arrowUp: ['↑'],
  57.     shiftRight: ['Shift'],
  58.     controlLeft: ['Ctrl'],
  59.     altLeft: ['Alt'],
  60.     space: [' ', ' '],
  61.     altRight: ['Alt'],
  62.     arrowLeft: ['←'],
  63.     arrowDown: ['↓'],
  64.     arrowRight: ['→'],
  65.     controlRight: ['Ctrl'],
  66.   },
  67.   ru: {
  68.     backquote: ['ё', 'Ё'],
  69.     digit1: ['1', '!'],
  70.     digit2: ['2', '"'],
  71.     digit3: ['3', '№'],
  72.     digit4: ['4', ';'],
  73.     digit5: ['5', '%'],
  74.     digit6: ['6', ':'],
  75.     digit7: ['7', '?'],
  76.     digit8: ['8', '*'],
  77.     digit9: ['9', '('],
  78.     digit0: ['0', ')'],
  79.     dash: ['-', '_'],
  80.     equal: ['=', '+'],
  81.     backspace: ['Backspace'],
  82.     tab: ['Tab'],
  83.     keyQ: ['й', 'Й'],
  84.     keyW: ['ц', 'Ц'],
  85.     keyE: ['у', 'У'],
  86.     keyR: ['к', 'К'],
  87.     keyT: ['е', 'Е'],
  88.     keyY: ['н', 'Н'],
  89.     keyU: ['г', 'Г'],
  90.     keyI: ['ш', 'Ш'],
  91.     keyO: ['щ', 'Щ'],
  92.     keyP: ['з', 'З'],
  93.     leftBracket: ['х', 'Х'],
  94.     rightBracket: ['ъ', 'Ъ'],
  95.     backslash: ['\\', '/'],
  96.     del: ['DEL'],
  97.     capslock: ['CapsLock'],
  98.     keyA: ['ф', 'Ф'],
  99.     keyS: ['ы', 'Ы'],
  100.     keyD: ['в', 'В'],
  101.     keyF: ['а', 'А'],
  102.     keyG: ['п', 'П'],
  103.     keyH: ['р', 'Р'],
  104.     keyJ: ['о', 'О'],
  105.     keyK: ['л', 'Л'],
  106.     keyL: ['д', 'Д'],
  107.     semicolon: ['ж', 'Ж'],
  108.     quote: ['э', 'Э'],
  109.     enter: ['ENTER'],
  110.     shiftLeft: ['Shift'],
  111.     keyZ: ['я', 'Я'],
  112.     keyX: ['ч', 'Ч'],
  113.     keyC: ['с', 'С'],
  114.     keyV: ['м', 'М'],
  115.     keyB: ['и', 'И'],
  116.     keyN: ['т', 'Т'],
  117.     keyM: ['ь', 'Ь'],
  118.     comma: ['б', 'Б'],
  119.     dot: ['ю', 'Ю'],
  120.     slash: ['.', ','],
  121.     arrowUp: ['↑'],
  122.     shiftRight: ['Shift'],
  123.     controlLeft: ['Ctrl'],
  124.     altLeft: ['Alt'],
  125.     space: [' ', ' '],
  126.     altRight: ['Alt'],
  127.     arrowLeft: ['←'],
  128.     arrowDown: ['↓'],
  129.     arrowRight: ['→'],
  130.     controlRight: ['Ctrl'],
  131.   },
  132. };
  133.  
  134. const css = {
  135.   wrapper: 'wrapper',
  136.   textarea: 'textarea',
  137.   keyboard: 'keyboard',
  138.   row: 'row',
  139.   key: 'key',
  140.   backspace: 'backspace',
  141.   tab: 'tab',
  142.   del: 'del',
  143.   capsLock: 'capsLock',
  144.   enter: 'enter',
  145.   shift: 'shift',
  146.   ctrl: 'ctrl',
  147.   alt: 'alt',
  148.   space: 'space',
  149.   keydown: 'keydown',
  150. };
  151.  
  152.  
  153. function handleKeydown(event) {
  154.   event.preventDefault();
  155.   const keyID = `#${event.code[0].toLowerCase()}${event.code.substring(1)}`;
  156.   const keyElem = document.querySelector(keyID);
  157.   keyElem.classList.add(css.keydown);
  158.   return true;
  159. }
  160.  
  161. function handleKeyup(event) {
  162.   const keyID = `#${event.code[0].toLowerCase()}${event.code.substring(1)}`;
  163.   const keyElem = document.querySelector(keyID);
  164.   keyElem.classList.remove(css.keydown);
  165.   return true;
  166. }
  167.  
  168. function createKey() {
  169.   const key = document.createElement('div');
  170.   key.classList.add(css.key);
  171.   return key;
  172. }
  173.  
  174. /*
  175. const languages = ['en', 'ru'];
  176. const curLangIndex = 0; */
  177.  
  178. function getKeysByLang(/* lang */) {
  179.   /* lang = languages[curLangIndex];  */
  180.   const langArr = Object.entries(keyboardLayout.en /* [lang] */);
  181.   const value = langArr.map((arr) => {
  182.     const [keyID, values] = arr;
  183.     const [val1, val2] = values;
  184.     const val = document.createElement('span');
  185.  
  186.     val.setAttribute('class', 'val');
  187.     val.textContent = val1;
  188.  
  189.     const key = createKey();
  190.     key.append(val);
  191.     key.id = keyID;
  192.  
  193.     key.classList.add(css.backspace);
  194.     key.classList.add(css.tab);
  195.     key.classList.add(css.del);
  196.     key.classList.add(css.capsLock);
  197.     key.classList.add(css.enter);
  198.     key.classList.add(css.shift);
  199.     key.classList.add(css.ctrl);
  200.     key.classList.add(css.alt);
  201.     key.classList.add(css.space);
  202.  
  203.     function specialKeys(keyWord, cssClass) {
  204.       if (val1 !== keyWord) {
  205.         key.classList.remove(cssClass);
  206.       }
  207.       return key;
  208.     }
  209.  
  210.     specialKeys('Backspace', 'backspace');
  211.     specialKeys('Tab', 'tab');
  212.     specialKeys('DEL', 'del');
  213.     specialKeys('CapsLock', 'capsLock');
  214.     specialKeys('ENTER', 'enter');
  215.     specialKeys('Shift', 'shift');
  216.     specialKeys('Ctrl', 'ctrl');
  217.     specialKeys('Alt', 'alt');
  218.     specialKeys(' ', 'space');
  219.  
  220.     return key;
  221.   });
  222.  
  223.   return value;
  224. }
  225. /*
  226. function saveLang() {
  227.   window.localStorage.setItem('language', curLangIndex);
  228. }
  229.  
  230. function getLang() {
  231.   const langIndex = window.localStorage.getItem('language');
  232.   return (langIndex || 0);
  233. } */
  234.  
  235. function createElements() {
  236.   const wrapper = document.createElement('div');
  237.   wrapper.classList.add(css.wrapper);
  238.  
  239.   const textarea = document.createElement('textarea');
  240.   const t = document.createTextNode('');
  241.   textarea.appendChild(t);
  242.   textarea.style = 'resize: none;';
  243.   textarea.setAttribute('cols', 80);
  244.   textarea.setAttribute('rows', 10);
  245.   document.body.appendChild(textarea);
  246.   textarea.classList.add(css.textarea);
  247.  
  248.   const keyboard = document.createElement('div');
  249.   keyboard.classList.add(css.keyboard);
  250.   wrapper.append(textarea, keyboard);
  251.  
  252.   const allKeys = getKeysByLang();
  253.   /* saveLang(); */
  254.   let indexAllKeys = 0;
  255.  
  256.   function createRowsWithKeys(row, keysAmount) {
  257.     row.classList.add(css.row);
  258.     for (let i = 0; i < keysAmount; i += 1, indexAllKeys += 1) {
  259.       row.append(allKeys[indexAllKeys]);
  260.       keyboard.append(row);
  261.     }
  262.     return keyboard;
  263.   }
  264.  
  265.   const row1 = document.createElement('div');
  266.   const row2 = document.createElement('div');
  267.   const row3 = document.createElement('div');
  268.   const row4 = document.createElement('div');
  269.   const row5 = document.createElement('div');
  270.  
  271.   createRowsWithKeys(row1, 14);
  272.   createRowsWithKeys(row2, 15);
  273.   createRowsWithKeys(row3, 13);
  274.   createRowsWithKeys(row4, 13);
  275.   createRowsWithKeys(row5, 8);
  276.  
  277.   return wrapper;
  278. }
  279.  
  280. window.addEventListener('load', () => {
  281.   const pageElements = createElements();
  282.   document.querySelector('body').appendChild(pageElements);
  283.   window.addEventListener('keydown', handleKeydown);
  284.   window.addEventListener('keyup', handleKeyup);
  285. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement