Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const divContainer = document.createElement('div');
  2. divContainer.className = 'wrapper';
  3. document.body.append(divContainer);
  4.  
  5. const createElement = (tag, name, base) => {
  6.   const elem = document.createElement(tag);
  7.   elem.className = name;
  8.   base.append(elem);
  9.   return elem;
  10. }
  11.  
  12. let textArea = createElement('textarea', 'textarea', divContainer);
  13. let keyboard = createElement('div', 'keyboard', divContainer);
  14. let rowOne = createElement('div', 'row one', keyboard);
  15. let rowTwo = createElement('div', 'row two', keyboard);
  16. let rowThree = createElement('div', 'row three', keyboard);
  17. let rowFour = createElement('div', 'row four', keyboard);
  18. let rowFive = createElement('div', 'row five', keyboard);
  19.  
  20. const keyValueEn = [
  21.   [['`', '~'], ['1', '!'], ['2', '@'], ['3', '#'], ['4', '$'], ['5', '%'], ['6', '^'], ['7', '&'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Backspace', 'Backspace']],
  22.   [['Tab', 'Tab'], ['q', 'Q'], ['w', 'W'], ['e', 'E'], ['r', 'R'], ['t', 'T'], ['y', 'Y'], ['u', 'U'], ['i', 'I'], ['o', 'O'], ['p', 'P'], ['[', '{'], [']', '}'], ['\\', '\\'], ['Del', 'Del']],
  23.   [['CapsLock', 'CapsLock'], ['a', 'A'], ['s', 'S'], ['d', 'D'], ['f', 'F'], ['g', 'G'], ['h', 'H'], ['j', 'J'], ['k', 'K'], ['l', 'L'], [';', ':'], ['`', '"'], ['Enter', 'Enter']],
  24.   [['Shift', 'Shifr'], ['\\', '||'], ['z', 'Z'], ['x', 'X'], ['c', 'C'], ['v', 'V'], ['b', 'B'], ['n', 'N'], ['m', 'M'], [',', '<'], ['.', '>'], ['/', '?'], ['↑', '↑'], ['Shift', 'Shift']],
  25.   [['Ctrl', 'Ctrl'], ['Win', 'Win'], ['Alt', 'Alt'], [' ', ' '], ['Alt', 'Alt'], ['Ctrl', 'Ctrl'], ['←', '←'], ['↓', '↓'], ['→', '→']],
  26. ];
  27.  
  28. const keyValueRu = [
  29.   [['ё', 'Ё'], ['1', '!'], ['2', '"'], ['3', '№'], ['4', ';'], ['5', '%'], ['6', ':'], ['7', '?'], ['8', '*'], ['9', '('], ['0', ')'], ['-', '_'], ['=', '+'], ['Backspace', 'Backspace']],
  30.   [['Tab', 'Tab'], ['й', 'Й'], ['ц', 'Ц'], ['у', 'У'], ['к', 'К'], ['е', 'Е'], ['н', 'Н'], ['г', 'Г'], ['ш', 'Ш'], ['щ', 'Щ'], ['з', 'З'], ['х', 'Х'], ['ъ', 'Ъ'], ['\\', '\\'], ['Del', 'Del']],
  31.   [['CapsLock', 'CapsLock'], ['ф', 'Ф'], ['ы', 'Ы'], ['в', 'В'], ['а', 'А'], ['п', 'П'], ['р', 'Р'], ['о', 'О'], ['л', 'Л'], ['д', 'Д'], ['ж', 'Ж'], ['э', 'Э'], ['Enter', 'Enter']],
  32.   [['Shift', 'Shifr'], ['\\', '||'], ['я', 'Я'], ['ч', 'Ч'], ['c', 'C'], ['м', 'М'], ['и', 'И'], ['т', 'Т'], ['ь', 'Ь'], ['б', 'Б'], ['ю', 'Ю'], ['.', ','], ['↑', '↑'], ['Shift', 'Shift']],
  33.   [['Ctrl', 'Ctrl'], ['Win', 'Win'], ['Alt', 'Alt'], [' ', ' '], ['Alt', 'Alt'], ['Ctrl', 'Ctrl'], ['←', '←'], ['↓', '↓'], ['→', '→']],
  34. ];
  35.  
  36. const keyCode = [
  37.   ['Backquote', 'Digit1', 'Digit2', 'Digit3', 'Digit4', 'Digit5', 'Digit6', 'Digit7', 'Digit8', 'Digit9', 'Digit0', 'Minus', 'Equal', 'Backspace'],
  38.   ['Tab', 'KeyQ', 'KeyW', 'KeyE', 'KeyR', 'KeyT', 'KeyY', 'KeyU', 'KeyI', 'KeyO', 'KeyP', 'BracketLeft', 'BracketRight', 'Backslash', 'Delete'],
  39.   ['CapsLock', 'KeyA', 'KeyS', 'KeyD', 'KeyF', 'KeyG', 'KeyH', 'KeyJ', 'KeyK', 'KeyL', 'Semicolon', 'Quote', 'Enter'],
  40.   ['ShiftLeft', 'Backslash', 'KeyZ', 'KeyX', 'KeyC', 'KeyV', 'KeyB', 'KeyN', 'KeyM', 'Comma', 'Period', 'Slash', 'ArrowUp', 'ShiftRight'],
  41.   ['ControlLeft', 'OSLeft', 'AltLeft', 'Space', 'AltRight', 'ControlRight', 'ArrowLeft', 'ArrowDown', 'ArrowRight'],
  42. ];
  43.  
  44. let language = '';
  45. if (localStorage.language === undefined) {
  46.   language = 'en';
  47.   localStorage.language = language;
  48. } else {
  49.   language = localStorage.language;
  50. }
  51.  
  52.  
  53. const rows = [...document.querySelectorAll('.row')];
  54. const createKey = (raskladka) => {
  55.   console.log(raskladka);
  56.   for (let i = 0; i < rows[i].length; i += 1) {
  57.     console.log(rows[i]);
  58.     rows[i].innerHTML = "";
  59.     raskladka[i].forEach((elem, idx) => {
  60.       const but = document.createElement('div');
  61.       but.innerHTML = elem;
  62.       but.className = 'key';
  63.       rows[i].append(but);
  64.       but.id = keyCode[i][idx];
  65.     });
  66.   }
  67. };
  68.  
  69. createKey(keyValueEn);
  70.  
  71. let capsLockON = false;
  72. let shiftON = false;
  73. let lang = true;
  74. const printSimbol = (simbol) => {
  75.   if (capsLockON || shiftON) {
  76.     simbol = simbol.toUpperCase();
  77.   }
  78.   if (capsLockON && shiftON) {
  79.     simbol = simbol.toLowerCase();
  80.   }
  81.   if (lang) {
  82.  
  83.   }
  84.   switch (simbol) {
  85.     case 'Tab':
  86.       simbol = '     ';
  87.       break;
  88.     case 'Enter':
  89.       simbol = '\n';
  90.       break;
  91.     case 'CapsLock':
  92.       simbol = simbol.toUpperCase();
  93.       break;
  94.     case 'Backspace':
  95.       simbol = textArea.innerHTML.slice(0, -1);
  96.       textArea.innerHTML = simbol;
  97.       simbol = '';
  98.       break;
  99.     case 'Alt':
  100.     case 'Ctrl':
  101.     case 'Shift':
  102.     case 'Win':
  103.       simbol = '';
  104.       break;
  105.     default:
  106.       simbol = simbol;
  107.   }
  108.   textArea.innerHTML += simbol;
  109. };
  110.  
  111. const print = document.querySelector('.keyboard');
  112. const printLetter = print.querySelector('div').innerHTML;
  113. print.addEventListener('mousedown', (event) => {
  114.   if (event.target.className === 'keyboard' || event.target.className.includes('row')) {
  115.     return;
  116.   }
  117.   const letter = event.target.closest('div').querySelector('span').innerHTML;
  118.   event.target.closest('div').classList.add('active');
  119.   printSimbol(letter);
  120. });
  121.  
  122. print.addEventListener('mouseup', (event) => {
  123.   if (event.target.className === 'keyboard' || event.target.className.includes('row')) {
  124.     return;
  125.   }/* Пофиксить остаток active при смещении нажатой мышки */
  126.   event.target.closest('div').classList.remove('active');
  127. });
  128.  
  129. document.addEventListener('keydown', (event) => {
  130.   const keyElement = document.querySelector(`#${event.code}`);
  131.   if (keyElement) {
  132.     let simbol = keyElement.closest('div').querySelector('span').innerHTML;
  133.     printSimbol(simbol);
  134.     keyElement.classList.add('active');
  135.     if (keyElement.id === 'ShiftLeft' || keyElement.id === 'ShiftRight') {
  136.       shiftON = true;
  137.       keyValueEn[0] = rowSimbolsEn;
  138.       keyValueEn[1][11] = '{';
  139.       keyValueEn[1][12] = '}';
  140.       keyValueEn[2][10] = ':';
  141.       keyValueEn[2][11] = '"';
  142.       keyValueEn[3][9] = '<';
  143.       keyValueEn[3][10] = '>';
  144.       keyValueEn[3][11] = '?';
  145.       createKeys(rowList, keyValueEn);
  146.     }
  147.     if (keyElement.id === 'CapsLock') {
  148.       capsLockON = !capsLockON;
  149.       simbol.toLocaleUpperCase();
  150.     }
  151.   }
  152. });
  153.  
  154. document.addEventListener('keyup', (event) => {
  155.   const keyElement = document.querySelector(`#${event.code}`);
  156.   if (keyElement) {
  157.     keyElement.classList.remove('active');
  158.     if (keyElement.id === 'ShiftLeft' || keyElement.id === 'ShiftRight') {
  159.       shiftON = false;
  160.       keyValueEn[0] = NumsEn;
  161.       keyValueEn[1][11] = '[';
  162.       keyValueEn[1][12] = ']';
  163.       keyValueEn[2][10] = ';';
  164.       keyValueEn[2][11] = '`';
  165.       keyValueEn[3][9] = '.';
  166.       keyValueEn[3][10] = ',';
  167.       keyValueEn[3][11] = '/';
  168.       createKeys(rowList, keyValueEn);
  169.     }
  170.   }
  171. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement