11import flatten from 'lodash/flatten' ;
22import flattenDeep from 'lodash/flattenDeep' ;
33import { Canvas , AnnotationPage , Annotation } from 'manifesto.js' ;
4+ import { audioResourcesFrom , iiifImageResourcesFrom , videoResourcesFrom } from './typeFilters' ;
5+ import CanvasAttributes from './CanvasAttributes' ;
6+
47/**
58 * MiradorCanvas - adds additional, testable logic around Manifesto's Canvas
69 * https://iiif-commons.github.io/manifesto/classes/_canvas_.manifesto.canvas.html
@@ -64,7 +67,7 @@ export default class MiradorCanvas {
6467 return this . imageResources [ 0 ] ;
6568 }
6669
67- /** */
70+ /** Despite name, this method returns paintable resources, not just images */
6871 get imageResources ( ) {
6972 const resources = flattenDeep ( [
7073 this . canvas . getImages ( ) . map ( i => i . getResource ( ) ) ,
@@ -83,19 +86,12 @@ export default class MiradorCanvas {
8386
8487 /** */
8588 get videoResources ( ) {
86- const resources = flattenDeep ( [
87- this . canvas . getContent ( ) . map ( i => i . getBody ( ) ) ,
88- ] ) ;
89- return flatten ( resources . filter ( ( resource ) => resource . getProperty ( 'type' ) === 'Video' ) ) ;
89+ return videoResourcesFrom ( this . imageResources ) ;
9090 }
9191
9292 /** */
9393 get audioResources ( ) {
94- const resources = flattenDeep ( [
95- this . canvas . getContent ( ) . map ( i => i . getBody ( ) ) ,
96- ] ) ;
97-
98- return flatten ( resources . filter ( ( resource ) => resource . getProperty ( 'type' ) === 'Sound' ) ) ;
94+ return audioResourcesFrom ( this . imageResources ) ;
9995 }
10096
10197 /** */
@@ -158,13 +154,14 @@ export default class MiradorCanvas {
158154
159155 /** */
160156 get iiifImageResources ( ) {
161- return this . imageResources
162- . filter ( r => r && r . getServices ( ) [ 0 ] && r . getServices ( ) [ 0 ] . id ) ;
157+ return iiifImageResourcesFrom ( this . imageResources ) ;
163158 }
164159
165160 /** */
166161 get imageServiceIds ( ) {
167- return this . iiifImageResources . map ( r => r . getServices ( ) [ 0 ] . id ) ;
162+ /** filter services by profile for IIIF images services */
163+ const imageServiceFilter = s => CanvasAttributes . IMAGE_SERVICE_PROFILES . includes ( s . getProfile ( ) ) ;
164+ return this . iiifImageResources . map ( r => r . getServices ( ) . filter ( imageServiceFilter ) [ 0 ] . id ) ;
168165 }
169166
170167 /**
0 commit comments