Skip to content
Snippets Groups Projects
KeyboardDisplay.vue 1.38 KiB
Newer Older
Valentin Rigal's avatar
Valentin Rigal committed
  <div>
    <div v-if="!charTable">An error occured loading the keyboard</div>
    <div v-else v-for="(row, i) in charTable" :key="i">
      <span v-for="(char, j) in row" :key="j">
        <button
          type="button"
          v-if="char"
          v-on:mouseup="$emit('input', char.character)"
        >
          {{ char.character }}
        </button>
        <button type="button" v-else>&nbsp;</button>
      </span>
    </div>
Valentin Rigal's avatar
Valentin Rigal committed
    keyboard: {
      type: Object,
Valentin Rigal's avatar
Valentin Rigal committed
  computed: {
    characters() {
      return this.keyboard.characters;
Valentin Rigal's avatar
Valentin Rigal committed
    rowsCount() {
      return (
        this.characters && Math.max(...this.characters.map((c) => c.row)) + 1
      );
Valentin Rigal's avatar
Valentin Rigal committed
    columnsCount() {
      return (
        this.characters && Math.max(...this.characters.map((c) => c.column)) + 1
      );
Valentin Rigal's avatar
Valentin Rigal committed
    charTable() {
      if (!this.columnsCount || !this.rowsCount) return;
      // Return a list of every column with padding
      const table = Array.from(
        Array(this.rowsCount),
        () => new Array(this.columnsCount)
      );
      if (!this.characters) return table;
      this.characters.forEach((c) => {
        table[c.row][c.column] = c;
      });
      return table;
  width: 3rem;
  height: 3rem;
  margin: 0.1rem;