Possibly complete manifest
This commit is contained in:
@@ -6,6 +6,10 @@ import Canvas from '../src/Canvas.js';
|
||||
import Image from '../src/Image.js';
|
||||
|
||||
import * as fs from 'fs';
|
||||
|
||||
/**
|
||||
* @typedef {Obj}
|
||||
*/
|
||||
/**
|
||||
* Generate a manifest object to serve
|
||||
* @param {string} manifestId
|
||||
@@ -14,17 +18,14 @@ export default async function generateManifest(manifestId) {
|
||||
const IIIF_API_VERSION = process.env.IIIF_API_VERSION;
|
||||
const BASE_URL = process.env.BASE_URL;
|
||||
|
||||
const manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
|
||||
const sequence = new Sequence();
|
||||
const canvas = new Canvas(IIIF_API_VERSION, BASE_URL);
|
||||
const image = new Image(4000, 3000);
|
||||
canvas.setThumbnail();
|
||||
canvas.addImage(image);
|
||||
sequence.addCanvas(canvas);
|
||||
manifest.addSequence(sequence);
|
||||
let manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
|
||||
manifest.generateID(manifestId);
|
||||
|
||||
console.log(await getImageList(manifestId));
|
||||
|
||||
manifest = await populateCanvases(
|
||||
manifest,
|
||||
await getImageList(manifestId),
|
||||
manifestId
|
||||
);
|
||||
|
||||
return manifest.toObject();
|
||||
}
|
||||
@@ -32,9 +33,74 @@ export default async function generateManifest(manifestId) {
|
||||
* @param {string} manifestId
|
||||
*/
|
||||
async function getImageList(manifestId) {
|
||||
let folderName = manifestId.replace(/pherc-(\d+)-(\w+)$/, function (match, g1, g2) {
|
||||
let folderName = manifestId.replace(/pherc-(\d+)-(\w+)$/, function (_match, g1, g2) {
|
||||
return `PHerc_${g1}_${g2.toUpperCase()}`;
|
||||
});
|
||||
|
||||
return await fs.promises.readdir(`./test-images/${folderName}`);
|
||||
folderName += '_iiif';
|
||||
|
||||
return await fs.promises.readdir(`${process.env.IMAGES_DIR}/${folderName}`);
|
||||
}
|
||||
/**
|
||||
* @todo Read height & width from info.json
|
||||
* @param {Manifest} manifest
|
||||
* @param {string[]} images List of image filenames from folder
|
||||
* @returns {Manifest}
|
||||
*/
|
||||
async function populateCanvases(manifest, images, manifestId) {
|
||||
const IIIF_API_VERSION = process.env.IIIF_API_VERSION;
|
||||
const BASE_URL = process.env.BASE_URL;
|
||||
const sequence = new Sequence(BASE_URL);
|
||||
// There's only one sequence
|
||||
sequence.generateID(manifestId, 0);
|
||||
|
||||
for (let img of images) {
|
||||
let canvas = new Canvas(IIIF_API_VERSION, BASE_URL);
|
||||
const canvasName = img.split('_')[3].replace(/\.[\w\d]{2,3}$/,'');
|
||||
|
||||
canvas.generateID(manifestId, canvasName);
|
||||
canvas.setLabel(`${manifestId}-${canvasName.toLowerCase()}`);
|
||||
|
||||
let image = new Image(canvas.id);
|
||||
image.generateID(process.env.IMAGE_SERVER_URL, img);
|
||||
const imgSize = await getImageSize(image.id);
|
||||
image.setSize(imgSize.height, imgSize.width);
|
||||
|
||||
canvas.setThumbnail(
|
||||
imgSize.thumb.height,
|
||||
imgSize.thumb.width,
|
||||
image.id
|
||||
);
|
||||
|
||||
canvas.addImage(image);
|
||||
sequence.addCanvas(canvas);
|
||||
}
|
||||
|
||||
manifest.addSequence(sequence);
|
||||
|
||||
return manifest;
|
||||
}
|
||||
/**
|
||||
* @todo Read height & width from info.json
|
||||
* @param {string} imageId The image's id as a URL to the image server
|
||||
* @returns {{width: number, height: number, thumb: {width: number, height: number}}}
|
||||
*/
|
||||
async function getImageSize(imageId) {
|
||||
let infoURL = imageId.replace(/full.*$/,'info.json');
|
||||
const res = await fetch(infoURL);
|
||||
|
||||
let size = {};
|
||||
|
||||
if (res.ok) {
|
||||
const infoJson = await res.json();
|
||||
const maxSize = infoJson.sizes[infoJson.sizes.length - 1];
|
||||
size.height = maxSize.height;
|
||||
size.width = maxSize.width;
|
||||
size.thumb = {
|
||||
width: infoJson.sizes[1].width,
|
||||
height: infoJson.sizes[1].height,
|
||||
}
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
Reference in New Issue
Block a user