Skip to content
Snippets Groups Projects
Commit 965c3fc1 authored by Chris Beer's avatar Chris Beer
Browse files

Extend getManifestThumbnail to try harder to get a thumbnail-sized image

parent 48cf3e96
Branches
Tags
No related merge requests found
......@@ -83,6 +83,30 @@ describe('getManifestThumbnail()', () => {
expect(received).toEqual(manifestFixture001.thumbnail['@id']);
});
it('returns the first canvas thumbnail id', () => {
const manifest = {
manifestation: {
getThumbnail: () => (null),
getSequences: () => [
{
getCanvases: () => [
{ getThumbnail: () => ({ id: 'xyz' }) },
],
},
],
},
};
const received = getManifestThumbnail(manifest);
expect(received).toEqual('xyz');
});
it('returns a thumbnail sized image url from the first canvas', () => {
const manifest = { manifestation: manifesto.create(manifestFixture019) };
const received = getManifestThumbnail(manifest);
expect(received).toEqual('https://stacks.stanford.edu/image/iiif/hg676jb4964%2F0380_796-44/full/,80/0/default.jpg');
});
it('should return null if manifest has no thumbnail', () => {
const manifest = { manifestation: manifesto.create({}) };
const received = getManifestThumbnail(manifest);
......
......@@ -2,6 +2,7 @@ import filter from 'lodash/filter';
import flatten from 'lodash/flatten';
import { LanguageMap } from 'manifesto.js';
import Annotation from '../../lib/Annotation';
import ManifestoCanvas from '../../lib/ManifestoCanvas';
/**
* Return the manifest that belongs to a certain window.
......@@ -43,16 +44,41 @@ export function getManifestProvider(manifest) {
}
/**
* Return the logo of a manifest or null
* Return the supplied thumbnail for a manifest or null
* @param {object} manifest
* @return {String|null}
*/
export function getManifestThumbnail(manifest) {
/** */
function getTopLevelManifestThumbnail() {
return manifest.manifestation
&& manifest.manifestation.getThumbnail()
&& manifest.manifestation.getThumbnail().id;
}
/** */
function getFirstCanvasThumbnail() {
const canvases = getManifestCanvases(manifest);
return canvases.length > 0 && canvases[0].getThumbnail() && canvases[0].getThumbnail().id;
}
/** */
function generateThumbnailFromFirstCanvas() {
const canvases = getManifestCanvases(manifest);
if (canvases.length === 0) return null;
const manifestoCanvas = new ManifestoCanvas(canvases[0]);
return manifestoCanvas.thumbnail(null, 80);
}
return getTopLevelManifestThumbnail()
|| getFirstCanvasThumbnail()
|| generateThumbnailFromFirstCanvas();
}
/**
* Return the logo of a manifest or null
* @param {object} manifest
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment