@allmaps/iiif-parser
Version:
Allmaps IIIF parser
86 lines (85 loc) • 3.47 kB
JavaScript
import { EmbeddedImage } from './image.js';
import { parseVersion2String, parseVersion3String, parseVersion2Metadata, parseVersion3Metadata, parseVersion2Attribution, parseVersion2Thumbnail, parseVersion2Rendering, parseVersion2Related } from '../lib/convert.js';
const CanvasTypeString = 'canvas';
/**
* Parsed IIIF Canvas
*
* @property uri - URI of Canvas
* @property label - Label of Manifest
* @property metadata - Metadata of Manifest
* @property image - Image of painted on Canvas
* @property height - Height of Canvas
* @property width - Width of Canvas
* @property type - Resource type, equals 'canvas'
*/
export class Canvas {
uri;
type = CanvasTypeString;
height;
width;
image;
label;
description;
metadata;
navDate;
navPlace;
homepage;
thumbnail;
rendering;
seeAlso;
summary;
requiredStatement;
annotations;
constructor(parsedCanvas) {
this.width = parsedCanvas.width;
this.height = parsedCanvas.height;
if ('@id' in parsedCanvas) {
// IIIF Presentation API 2.0
this.uri = parsedCanvas['@id'];
this.description = parseVersion2String(parsedCanvas.description);
this.label = parseVersion2String(parsedCanvas.label);
this.metadata = parseVersion2Metadata(parsedCanvas.metadata);
this.navDate = parsedCanvas.navDate;
this.navPlace = parsedCanvas.navPlace;
this.requiredStatement = parseVersion2Attribution(parsedCanvas.attribution);
this.thumbnail = parseVersion2Thumbnail(parsedCanvas.thumbnail);
this.rendering = parseVersion2Rendering(parsedCanvas.rendering);
this.homepage = parseVersion2Related(parsedCanvas.related);
this.image = new EmbeddedImage(parsedCanvas.images[0].resource, parsedCanvas);
}
else if ('id' in parsedCanvas) {
// IIIF Presentation API 3.0
this.uri = parsedCanvas.id;
this.label = parseVersion3String(parsedCanvas.label);
this.description = parseVersion3String(parsedCanvas.description);
this.metadata = parseVersion3Metadata(parsedCanvas.metadata);
this.navDate = parsedCanvas.navDate;
this.navPlace = parsedCanvas.navPlace;
this.homepage = parsedCanvas.homepage;
this.thumbnail = parsedCanvas.thumbnail;
this.rendering = parsedCanvas.rendering;
this.seeAlso = parsedCanvas.seeAlso;
this.summary = parsedCanvas.summary;
this.requiredStatement = parsedCanvas.requiredStatement;
this.annotations = parsedCanvas.annotations;
const annotationBodyOrBodies = parsedCanvas.items[0].items[0].body;
let annotationBody;
if (Array.isArray(annotationBodyOrBodies)) {
annotationBody = annotationBodyOrBodies[0];
}
else if (annotationBodyOrBodies.type === 'Image') {
annotationBody = annotationBodyOrBodies;
}
else if (annotationBodyOrBodies.type === 'Choice') {
annotationBody = annotationBodyOrBodies.items[0];
}
else {
throw new Error('Invalid IIIF Canvas');
}
this.image = new EmbeddedImage(annotationBody, parsedCanvas);
}
else {
throw new Error('Invalid IIIF Canvas');
}
}
}