diff --git a/controllers/canvas.mjs b/controllers/canvas.mjs new file mode 100644 index 0000000..1d6f609 --- /dev/null +++ b/controllers/canvas.mjs @@ -0,0 +1,20 @@ +import Canvas from '../src/Canvas.js'; +import Image from '../src/Image.js'; +/** + * Generate a canvas object to serve + * @param {string} manifestId The corresponding manifest's id + * @param {int|string} name The canvas name + */ +export default 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); + canvas.generateID(manifestId, name); + + const image = new Image(4000, 3000); + canvas.setThumbnail(); + canvas.addImage(image); + + return canvas.toObject(); +} \ No newline at end of file diff --git a/controllers/manifest.mjs b/controllers/manifest.mjs new file mode 100644 index 0000000..ce1bfd5 --- /dev/null +++ b/controllers/manifest.mjs @@ -0,0 +1,24 @@ +import Manifest from '../src/Manifest.js'; +import Sequence from '../src/Sequence.js'; +import Canvas from '../src/Canvas.js'; +import Image from '../src/Image.js'; +/** + * Generate a manifest object to serve + * @param {string} manifestId + */ +export default 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); + manifest.generateID(manifestId); + + return manifest.toObject(); +} \ No newline at end of file diff --git a/routes/index.mjs b/routes/index.mjs index 4d43390..0e8ebc1 100644 --- a/routes/index.mjs +++ b/routes/index.mjs @@ -1,24 +1,19 @@ -import Manifest from '../src/Manifest.js'; -import Sequence from '../src/Sequence.js'; -import Canvas from '../src/Canvas.js'; +import generateManifest from '../controllers/manifest.mjs'; +import generateCanvas from '../controllers/canvas.mjs'; import express from 'express'; let router = express.Router(); /* GET manifest JSON */ -router.get('/iiif/:manifestid/manifest', function(req, res, next) { - const IIIF_API_VERSION = process.env.IIIF_API_VERSION; - const BASE_URL = process.env.BASE_URL; +router.get('/iiif/:manifestid/manifest', function(req, res) { + const manifest = generateManifest(req.params.manifestid) + res.json(manifest); +}); - const manifest = new Manifest(IIIF_API_VERSION, BASE_URL); - const sequence = new Sequence(); - const canvas = new Canvas(IIIF_API_VERSION, BASE_URL); - canvas.setThumbnail(); - sequence.addCanvas(canvas); - manifest.addSequence(sequence); - manifest.generateID(req.params.manifestid); - - res.json(manifest.toObject()); +/* GET manifest JSON */ +router.get('/iiif/:manifestid/canvas/:name', function(req, res) { + const canvas = generateCanvas(req.params.manifestid, req.params.name) + res.json(canvas); }); export default router; diff --git a/src/Canvas.js b/src/Canvas.js index 10b63b0..29a37f0 100644 --- a/src/Canvas.js +++ b/src/Canvas.js @@ -1,4 +1,5 @@ import IIIFResource from './IIIFResource.js'; +import Image from './Image.js'; /** * @implements IIIFResource */ @@ -29,6 +30,12 @@ class Canvas { setLabel(label) { this.label = label; } + /** + * @param {Image} image Add an image to the canvas + */ + addImage(image) { + this.images.push(image.toObject()); + } /** * Add a thumbnail object * @todo Support multiple thumbs? @@ -52,6 +59,7 @@ class Canvas { "@id" : this.id, "@type" : this.type, "label" : this.label, + "images" : this.images, "thumbnail" : this.thumbnail } } diff --git a/src/Image.js b/src/Image.js new file mode 100644 index 0000000..6d31430 --- /dev/null +++ b/src/Image.js @@ -0,0 +1,39 @@ +import IIIFResource from './IIIFResource.js'; +/** + * @implements IIIFResource + */ +class Image { + /** + * @var {string} id A URL pointing to the image resource + */ + id = ''; + type = 'dctypes:Image'; + format = 'image/jpeg'; + height = 0; + width = 0; + service = {}; + + constructor(height, width) { + this.height = height; + this.width = width; + } + /** + * Object representation of + * image resource + * @returns {object} + */ + toObject() { + return { + resource : { + "@id" : this.id, + "@type" : this.type, + format: this.format, + service : this.service, + height: this.height, + width: this.width, + } + } + } +} + +export default Image; \ No newline at end of file diff --git a/src/Manifest.js b/src/Manifest.js index 2637577..787e938 100644 --- a/src/Manifest.js +++ b/src/Manifest.js @@ -28,6 +28,9 @@ class Manifest { this.id = `${this.BASE_URL}/iiif/${idParam}/manifest` ; } /** + * Object representation of this + * manifest + * * @todo Implement * @returns {object} */