Advertisement
Guest User

Untitled

a guest
Apr 6th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const KEYS = [
  2. [
  3.     "`1234567890-=",
  4.     "qwertyuiop[]\\",
  5.     "asdfghjkl;'",
  6.     "zxcvbnm,./",
  7.     "Shift#1,Alt#1,Space#5,Bksp#1,Enter#1"
  8. ],
  9. [
  10.     "~!@#$%^&*()_+",
  11.     "QWERTYUIOP{}|",
  12.     "ASDFGHJKL:'",
  13.     "ZXCVBNM<>?"
  14. ]
  15. ];
  16.  
  17. class Keyboard {
  18.  
  19.     constructor() {
  20.         this.scr = null;
  21.         this.mode = 0;
  22.         this.shiftMode = 0;
  23.         this.keys = new Array(5).fill(0).map(() => document.createElement('div'));
  24.         this.keys.forEach((div, row) => {
  25.            if(row != 4) for(let i = 0; i < KEYS[0][row].length; ++i) {
  26.                 const btn = document.createElement('div');
  27.                 btn.className = 'button';
  28.                 btn.textContent = KEYS[0][row][i];
  29.                 btn.addEventListener('click', e => {
  30.                     this.scr.textContent += e.target.textContent;
  31.                     if(this.shiftMode === 1) {
  32.                         this.shiftMode = 0;
  33.                         this.mode = 0;
  34.                         this.changeLayout();
  35.                     }
  36.                  });
  37.                 div.appendChild(btn);
  38.             }
  39.             else {
  40.                 const keys = KEYS[0][row].split(',').map(k => k.split('#'));
  41.                 keys.forEach(key => {
  42.                     const btn = document.createElement('div');
  43.                     btn.className = 'button';
  44.                     btn.textContent = key[0];
  45.                     btn.style.flexGrow = key[1];
  46.                     btn.addEventListener('click', e => {
  47.                         const type = e.target.textContent.toLowerCase();
  48.  
  49.                         switch(type) {
  50.                             case 'space':
  51.                             this.scr.textContent += ' ';
  52.                             break;
  53.  
  54.                             case 'enter':
  55.                             this.scr.textContent += '\n';
  56.                             break;
  57.  
  58.                             case 'bksp':
  59.                             this.scr.textContent.slice(0, -1);
  60.                             break;
  61.  
  62.                             case 'shift':
  63.                             this.shiftMode = ++this.shiftMode % 3;
  64.                             this.mode = this.shiftMode > 0 ? 1 : 0;
  65.                             this.keys[4].childNodes[0].className = this.shiftMode === 2 ? "button_lock" : "button";
  66.                             this.changeLayout();
  67.                             break;
  68.  
  69.                             case 'alt':
  70.                             break;
  71.  
  72.                         }
  73.  
  74.                         if(this.shiftMode === 1 && type !== 'shift') {
  75.                             this.shiftMode = 0;
  76.                             this.mode = 0;
  77.                             this.changeLayout();
  78.                         }
  79.  
  80.                      });
  81.                     div.appendChild(btn);
  82.                 });
  83.             }
  84.         });
  85.     }
  86.  
  87.     changeLayout() {
  88.         const keys = KEYS[this.mode];
  89.             for(let r=0; r < 4; ++r) {
  90.                 this.keys[r].childNodes
  91.                 .forEach((key, i) => { key.textContent = keys[r][i]});
  92.             }
  93.     }
  94.  
  95.     init() {
  96.         this.scr = document.getElementById('gora');
  97.         const cont = document.getElementById('klawiatura');
  98.         this.keys.forEach(div => cont.appendChild(div));
  99.     }
  100.  
  101. }
  102.  
  103. const klawiatura = new Keyboard();
  104.  
  105. window.addEventListener('DOMContentLoaded', () => klawiatura.init());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement