ksylvest/personal

View on GitHub
app/packs/application/controllers/gallery_controller.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { Controller } from "@hotwired/stimulus";

const ESC_KEY = 27;

export class GalleryController extends Controller {
  public static targets = ["dialog", "content"];

  public zoom(event): void {
    const link = event.target.closest("a");
    this.content.src = link.href;
    this.show();
  }

  public close(): void {
    this.content.src = "";
    this.hide();
  }

  private show(): void {
    this.dialog.style.display = "flex";
    document.addEventListener("keyup", this.keyup);
  }

  private hide(): void {
    this.dialog.style.display = "none";
    document.removeEventListener("keyup", this.keyup);
  }

  private get dialog(): HTMLDivElement {
    return this.targets.find("dialog") as HTMLDivElement;
  }

  private get content(): HTMLImageElement {
    return this.targets.find("content") as HTMLImageElement;
  }

  private keyup = (event: KeyboardEvent): void => {
    if (event.which === ESC_KEY) {
      this.close();
    }
  };
}