Skip to content
Snippets Groups Projects
Select Git revision
  • da6c062370d7f1cdfdf70212847b2ba7f556e263
  • master default protected
  • add-action-params-in-backup
  • test-fix-cache-issues
4 results

list_files.sh

Blame
  • ManifestoCanvas.js 2.63 KiB
    /**
     * ManifestoCanvas - adds additional, testable logic around Manifesto's Canvas
     * https://iiif-commons.github.io/manifesto/classes/_canvas_.manifesto.canvas.html
     */
    export default class ManifestoCanvas {
      /**
       * @param {ManifestoCanvas} canvas
       */
      constructor(canvas) {
        this.canvas = canvas;
      }
    
      /**
       */
      get canonicalImageUri() {
        return this.canvas.getCanonicalImageUri();
      }
    
      /**
       */
      get aspectRatio() {
        return this.canvas.getWidth() / this.canvas.getHeight();
      }
    
      /**
       */
      get imageInformationUri() {
        if (!(
          this.canvas.getImages()[0]
          && this.canvas.getImages()[0].getResource()
          && this.canvas.getImages()[0].getResource().getServices()[0]
          && this.canvas.getImages()[0].getResource().getServices()[0].id
        )) {
          return undefined;
        }
    
        return `${
          this.canvas.getImages()[0].getResource().getServices()[0].id.replace(/\/$/, '')
        }/info.json`;
      }
    
      /**
       * checks whether the canvas has a valid height
       */
      get hasValidHeight() {
        return (
          typeof this.canvas.getHeight() === 'number'
          && this.canvas.getHeight() > 0
        );
      }
    
      /**
       * checks whether the canvas has a valid height
       */
      get hasValidWidth() {
        return (
          typeof this.canvas.getHeight() === 'number'
          && this.canvas.getHeight() > 0
        );
      }
    
      /**
       * checks whether the canvas has valid dimensions
       */
      get hasValidDimensions() {
        return (
          this.hasValidHeight
          && this.hasValidWidth
        );
      }
    
      /**
       * Creates a canonical image request for a thumb
       * @param {Number} height
       */
      thumbnail(maxWidth = undefined, maxHeight = undefined) {
        let width;
        let height;
    
        if (!this.imageInformationUri) {
          return undefined;
        }
    
        switch (this.thumbnailConstraints(maxWidth, maxHeight)) {
          case 'sizeByH':
            height = maxHeight;
            break;
          case 'sizeByW':
            width = maxWidth;
            break;
          default:
            height = '150';
        }
    
        // note that, although the IIIF server may support sizeByConfinedWh (e.g. !w,h)
        // this is a IIIF level 2 feature, so we're instead providing w, or h,-style requests
        // which are only level 1.
        return this.canonicalImageUri.replace(/\/full\/.*\/0\//, `/full/${width || ''},${height || ''}/0/`);
      }
    
      /** @private */
      thumbnailConstraints(maxWidth, maxHeight) {
        if (!maxHeight && !maxWidth) return undefined;
        if (maxHeight && !maxWidth) return 'sizeByH';
        if (!maxHeight && maxWidth) return 'sizeByW';
    
        const { aspectRatio } = this;
        const desiredAspectRatio = maxWidth / maxHeight;
    
        return desiredAspectRatio < aspectRatio ? 'sizeByW' : 'sizeByH';
      }
    }