greek-manifests/controllers/canvas.mjs

45 lines
1.4 KiB
JavaScript

import Canvas from '../src/Canvas.js';
import Image from '../src/Image.js';
import Manifest from '../src/Manifest.js';
import Common from '../src/common.js';
/**
* Generate a canvas object to serve
* @todo Use createCanvas from Common?
* @todo Pass a Manifest object, not a manifest id
* @param {string} manifestId The corresponding manifest's id
* @param {number|string} name The canvas name
*/
export default async function generateCanvas(manifestId, name) {
const IIIF_API_VERSION = process.env.IIIF_API_VERSION;
const BASE_URL = process.env.BASE_URL;
const canvas = new Canvas(IIIF_API_VERSION, BASE_URL);
const manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
manifest.generateID(manifestId);
canvas.generateID(manifestId, name);
let label = name
.replace(/c(\w{1,2})0+(\d+).*(\.\w{2,3})?$/i, function (str, c, number) {
return `C${c}. ${number}`;
});
// Add PCA to canvas label for HSI images
if (manifest.technique === 'hsi') {
label += ` ${filename.split('_')[3].replace(/\..*$/,'')}`;
}
canvas.label = label;
const image = new Image(canvas.id);
image.generateID(process.env.IMAGE_SERVER_URL, await Common.getImageName(canvas));
const imgSize = await Common.getImageSize(image.id);
image.setSize(imgSize.height, imgSize.width);
canvas.setThumbnail(
imgSize.thumb.height,
imgSize.thumb.width,
image.id
);
canvas.addImage(image);
return canvas.toObject();
}