Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export default {
  2.     props: {
  3.         row: {
  4.             type: Number,
  5.             required: true,
  6.         },
  7.         column: {
  8.             type: Number,
  9.             required: true,
  10.         },
  11.         isEditingAllowed: {
  12.             type: Boolean,
  13.             required: false,
  14.             default: true,
  15.         },
  16.         isSelected: {
  17.             type: Boolean,
  18.             required: false,
  19.             default: false,
  20.         },
  21.     },
  22.     data: () => ({
  23.         isFocused: false,
  24.         isEditing: false,
  25.     }),
  26.     methods: {
  27.         onFocusElement(event) {
  28.             const { detail: { isFocused } } = event;
  29.  
  30.             this.isFocused = isFocused;
  31.         },
  32.         onFocusLost() {
  33.             this.isEditing = false;
  34.             this.isFocused = false;
  35.         },
  36.         onClick() {
  37.             this.isFocused = true;
  38.         },
  39.         onDblClick() {
  40.             if (this.isEditingAllowed) {
  41.                 this.isFocused = !this.isFocused;
  42.                 this.isEditing = !this.isEditing;
  43.             }
  44.         },
  45.         onKeyDown(event) {
  46.             const { keyCode } = event;
  47.             let element;
  48.  
  49.             switch (keyCode) {
  50.             case 13:
  51.                 // Key: ENTER
  52.                 if (this.isEditingAllowed) {
  53.                     element = document.querySelector(`.keyboard-navigable-${this.column}-${this.row}`);
  54.                     this.isEditing = !this.isEditing;
  55.                 }
  56.                 break;
  57.             case 37:
  58.                 // Key: LEFT
  59.                 element = document.querySelector(`.keyboard-navigable-${this.column - 1}-${this.row}`);
  60.                 break;
  61.             case 38:
  62.                 // Key: UP
  63.                 element = document.querySelector(`.keyboard-navigable-${this.column}-${this.row - 1}`);
  64.                 break;
  65.             case 39:
  66.             case 9:
  67.                 // Key: RIGHT || TAB
  68.                 element = document.querySelector(`.keyboard-navigable-${this.column + 1}-${this.row}`);
  69.                 if (!element) {
  70.                     // We get out of bounds - go to the next line
  71.                     element = document.querySelector(`.keyboard-navigable-0-${this.row + 1}`);
  72.                 }
  73.                 break;
  74.             case 40:
  75.                 // Key: DOWN
  76.                 element = document.querySelector(`.keyboard-navigable-${this.column}-${this.row + 1}`);
  77.                 break;
  78.             default: break;
  79.             }
  80.  
  81.             if (element) {
  82.                 if (keyCode !== 13) {
  83.                     // Emit event to next focused element - it won't know if it is focused otherwise
  84.                     element.dispatchEvent(new CustomEvent('onFocusElement', {
  85.                         detail: { isFocused: true },
  86.                     }));
  87.                     element.focus();
  88.                 }
  89.             }
  90.         },
  91.     },
  92. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement