Skip to content

Commit de96b28

Browse files
committed
look for image service on annotation bodies
1 parent 86a7a99 commit de96b28

File tree

6 files changed

+96
-40
lines changed

6 files changed

+96
-40
lines changed

dist/@iiif/manifold.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ declare namespace Manifold {
8080
tokenService: Manifesto.IService | null;
8181
width: number;
8282
constructor(canvas: Manifesto.ICanvas, options: Manifesto.IExternalResourceOptions);
83+
private _getImageServiceDescriptor(services);
8384
private _getDataUri(canvas);
8485
private _parseAuthServices(resource);
8586
private _parseDimensions(canvas);

dist/@iiif/manifold.js

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -241,34 +241,51 @@ var Manifold;
241241
// get the height and width of the image resource if available
242242
this._parseDimensions(canvas);
243243
}
244+
ExternalResource.prototype._getImageServiceDescriptor = function (services) {
245+
var infoUri = null;
246+
for (var i = 0; i < services.length; i++) {
247+
var service = services[i];
248+
var id = service.id;
249+
if (!id.endsWith('/')) {
250+
id += '/';
251+
}
252+
if (manifesto.Utils.isImageProfile(service.getProfile())) {
253+
infoUri = id + 'info.json';
254+
}
255+
}
256+
return infoUri;
257+
};
244258
ExternalResource.prototype._getDataUri = function (canvas) {
245259
var content = canvas.getContent();
246260
var images = canvas.getImages();
261+
var infoUri = null;
262+
// presentation 3
247263
if (content && content.length) {
248264
var annotation = content[0];
249265
var annotationBody = annotation.getBody();
250266
if (annotationBody.length) {
267+
var body = annotationBody[0];
268+
var services = body.getServices();
269+
if (services.length) {
270+
infoUri = this._getImageServiceDescriptor(services);
271+
if (infoUri) {
272+
return infoUri;
273+
}
274+
}
275+
// no image services. return the image id
251276
return annotationBody[0].id;
252277
}
253278
return null;
254279
}
255280
else if (images && images.length) {
256-
var infoUri = null;
257281
var firstImage = images[0];
258282
var resource = firstImage.getResource();
259283
var services = resource.getServices();
260284
if (services.length) {
261-
for (var i = 0; i < services.length; i++) {
262-
var service = services[i];
263-
var id = service.id;
264-
if (!id.endsWith('/')) {
265-
id += '/';
266-
}
267-
if (manifesto.Utils.isImageProfile(service.getProfile())) {
268-
infoUri = id + 'info.json';
269-
}
285+
infoUri = this._getImageServiceDescriptor(services);
286+
if (infoUri) {
287+
return infoUri;
270288
}
271-
return infoUri;
272289
}
273290
// no image services. return the image id
274291
return resource.id;

dist/manifold.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ declare namespace Manifold {
8181
tokenService: Manifesto.IService | null;
8282
width: number;
8383
constructor(canvas: Manifesto.ICanvas, options: Manifesto.IExternalResourceOptions);
84+
private _getImageServiceDescriptor(services);
8485
private _getDataUri(canvas);
8586
private _parseAuthServices(resource);
8687
private _parseDimensions(canvas);

dist/manifold.js

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -242,34 +242,51 @@ var Manifold;
242242
// get the height and width of the image resource if available
243243
this._parseDimensions(canvas);
244244
}
245+
ExternalResource.prototype._getImageServiceDescriptor = function (services) {
246+
var infoUri = null;
247+
for (var i = 0; i < services.length; i++) {
248+
var service = services[i];
249+
var id = service.id;
250+
if (!id.endsWith('/')) {
251+
id += '/';
252+
}
253+
if (manifesto.Utils.isImageProfile(service.getProfile())) {
254+
infoUri = id + 'info.json';
255+
}
256+
}
257+
return infoUri;
258+
};
245259
ExternalResource.prototype._getDataUri = function (canvas) {
246260
var content = canvas.getContent();
247261
var images = canvas.getImages();
262+
var infoUri = null;
263+
// presentation 3
248264
if (content && content.length) {
249265
var annotation = content[0];
250266
var annotationBody = annotation.getBody();
251267
if (annotationBody.length) {
268+
var body = annotationBody[0];
269+
var services = body.getServices();
270+
if (services.length) {
271+
infoUri = this._getImageServiceDescriptor(services);
272+
if (infoUri) {
273+
return infoUri;
274+
}
275+
}
276+
// no image services. return the image id
252277
return annotationBody[0].id;
253278
}
254279
return null;
255280
}
256281
else if (images && images.length) {
257-
var infoUri = null;
258282
var firstImage = images[0];
259283
var resource = firstImage.getResource();
260284
var services = resource.getServices();
261285
if (services.length) {
262-
for (var i = 0; i < services.length; i++) {
263-
var service = services[i];
264-
var id = service.id;
265-
if (!id.endsWith('/')) {
266-
id += '/';
267-
}
268-
if (manifesto.Utils.isImageProfile(service.getProfile())) {
269-
infoUri = id + 'info.json';
270-
}
286+
infoUri = this._getImageServiceDescriptor(services);
287+
if (infoUri) {
288+
return infoUri;
271289
}
272-
return infoUri;
273290
}
274291
// no image services. return the image id
275292
return resource.id;

dist/manifold.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ExternalResource.ts

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,65 @@ namespace Manifold {
3030
this._parseDimensions(canvas);
3131
}
3232

33+
private _getImageServiceDescriptor(services: Manifesto.IService[]): string | null {
34+
let infoUri: string | null = null;
35+
36+
for (let i = 0; i < services.length; i++) {
37+
const service: Manifesto.IService = services[i];
38+
let id: string = service.id;
39+
40+
if (!id.endsWith('/')) {
41+
id += '/';
42+
}
43+
44+
if (manifesto.Utils.isImageProfile(service.getProfile())) {
45+
infoUri = id + 'info.json';
46+
}
47+
}
48+
49+
return infoUri;
50+
}
51+
3352
private _getDataUri(canvas: Manifesto.ICanvas): string | null {
3453

3554
const content: Manifesto.IAnnotation[] = canvas.getContent();
3655
const images: Manifesto.IAnnotation[] = canvas.getImages();
56+
let infoUri: string | null = null;
3757

58+
// presentation 3
3859
if (content && content.length) {
3960

4061
const annotation: Manifesto.IAnnotation = content[0];
4162
const annotationBody: Manifesto.IAnnotationBody[] = annotation.getBody();
4263

4364
if (annotationBody.length) {
65+
const body: Manifesto.IAnnotationBody = annotationBody[0];
66+
const services: Manifesto.IService[] = body.getServices();
67+
68+
if (services.length) {
69+
infoUri = this._getImageServiceDescriptor(services);
70+
if (infoUri) {
71+
return infoUri;
72+
}
73+
}
74+
75+
// no image services. return the image id
4476
return annotationBody[0].id;
4577
}
4678

4779
return null;
4880

49-
} else if (images && images.length) {
50-
51-
let infoUri: string | null = null;
81+
} else if (images && images.length) { // presentation 2
5282

5383
const firstImage: Manifesto.IAnnotation = images[0];
5484
const resource: Manifesto.IResource = firstImage.getResource();
5585
const services: Manifesto.IService[] = resource.getServices();
5686

5787
if (services.length) {
58-
for (let i = 0; i < services.length; i++) {
59-
const service: Manifesto.IService = services[i];
60-
let id: string = service.id;
61-
62-
if (!id.endsWith('/')) {
63-
id += '/';
64-
}
65-
66-
if (manifesto.Utils.isImageProfile(service.getProfile())) {
67-
infoUri = id + 'info.json';
68-
}
88+
infoUri = this._getImageServiceDescriptor(services);
89+
if (infoUri) {
90+
return infoUri;
6991
}
70-
71-
return infoUri;
7292
}
7393

7494
// no image services. return the image id

0 commit comments

Comments
 (0)