src/widgets/ImageDisplay.js
author ymh <ymh.work@gmail.com>
Wed, 04 Sep 2024 17:32:50 +0200
changeset 1072 ac1eacb3aa33
parent 1068 7623f9af9272
permissions -rw-r--r--
Migrate source and build to vite.js

/* This widget displays the image associated to the annotation in the given container */
// ImageDisplay
import imageDisplayStyles from "./ImageDisplay.module.css";

const ImageDisplay = function (ns) {
  return class extends ns.Widgets.Widget {
    constructor(player, config) {
      super(player, config);
    }

    static defaults = {
      annotation_type: "Slides",
      // container: "imageContainer"
    };

    static template =
      '<div class="Ldt-ImageDisplay-Container"><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Left"></div><div class="Ldt-ImageDisplay-Overlay Ldt-ImageDisplay-Overlay-Right"></div></div>';

    annotationTemplate = "";

    update(annotation) {
      // Update the widget with data corresponding to the annotation
      this.image.css("background-image", "url(" + annotation.thumbnail + ")");
      this.image.attr(
        "title",
        ns.textFieldHtml(annotation.title) + " - " + annotation.begin.toString()
      );
    }

    draw() {
      var _annotations = this.getWidgetAnnotations().sortBy(function (
        _annotation
      ) {
        return _annotation.begin;
      });
      var _this = this;
      _this.renderTemplate();
      _this.image = _this.$.find(".Ldt-ImageDisplay-Container");

      _this.$.find(".Ldt-ImageDisplay-Overlay-Left").on("click", function () {
        _this.navigate(-1);
      });
      _this.$.find(".Ldt-ImageDisplay-Overlay-Right").on("click", function () {
        _this.navigate(+1);
      });

      _annotations.forEach(function (_a) {
        _a.on("enter", function () {
          _this.update(_a);
        });
      });
      if (_annotations.length) _this.update(_annotations[0]);
    }
  };
};

export { ImageDisplay, imageDisplayStyles };