UNPKG

@allmaps/iiif-parser

Version:

Allmaps IIIF parser

86 lines (85 loc) 3.47 kB
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'); } } }