@@ -22,7 +22,7 @@ export class Range extends ManifestResource {
2222 public path : string ;
2323 public treeNode : TreeNode ;
2424
25- constructor ( jsonld ? : any , options ? : IManifestoOptions ) {
25+ constructor ( jsonld ? : any , options ? : IManifestoOptions ) {
2626 super ( jsonld , options ) ;
2727 }
2828
@@ -58,63 +58,90 @@ export class Range extends ManifestResource {
5858 ) . options . resource . getSequences ( ) [ 0 ] ;
5959 let manifestCanvases =
6060 manifestSequence . __jsonld . canvases || manifestSequence . __jsonld . elements ;
61+
6162 const canvasLength = this . canvases ? this . canvases . length : 0 ;
6263 let canvasItems : ( Canvas | null ) [ ] = new Array ( canvasLength ) . fill ( null ) ;
6364
65+ const rangeItems = this . __jsonld . items ;
66+
6467 if ( manifestCanvases && this . canvases ) {
6568 for ( let i = 0 ; i < manifestCanvases . length ; i ++ ) {
66- const c = manifestCanvases [ i ] ;
69+ let c = manifestCanvases [ i ] ;
70+
71+ const fragmentCanvas = rangeItems . filter ( item => {
72+ return item . source === c . id ;
73+ } ) ;
6774
6875 if ( c . id in this . canvases ) {
76+ if ( fragmentCanvas ) {
77+ const fragment = fragmentCanvas [ 0 ] . selector . value ;
78+ const fragmentCanvasId = `${ c . id } #${ fragment } ` ;
79+ c = this . _updateFragmentIds ( c , fragmentCanvasId ) ;
80+ }
81+
6982 const canvas : Canvas = new Canvas ( c , this . options ) ;
7083 canvas . index = this . canvases . indexOf ( c . id ) ;
7184 canvasItems . splice ( canvas . index , 1 , canvas ) ;
7285 }
7386 }
7487 } else if ( manifestSequence . __jsonld && this . canvases ) {
7588 for ( let i = 0 ; i < manifestSequence . __jsonld . length ; i ++ ) {
76- const c = manifestSequence . __jsonld [ i ] ;
89+ let c = manifestSequence . __jsonld [ i ] ;
90+
91+ const fragmentCanvas = rangeItems . filter ( item => {
92+ return item . source === c . id ;
93+ } ) ;
7794
7895 if ( this . canvases . includes ( c . id ) ) {
96+ const cIndex = this . canvases . indexOf ( c . id ) ;
97+ if ( fragmentCanvas ) {
98+ const fragment = fragmentCanvas [ 0 ] . selector . value ;
99+ const fragmentCanvasId = `${ c . id } #${ fragment } ` ;
100+ c = this . _updateFragmentIds ( c , fragmentCanvasId ) ;
101+ }
102+
79103 const canvas : Canvas = new Canvas ( c , this . options ) ;
104+ canvas . index = cIndex ;
80105
81- canvas . index = this . canvases . indexOf ( c . id ) ;
82106 canvasItems . splice ( canvas . index , 1 , canvas ) ;
83107 }
84108 }
85109 }
86110
87111 this . _canvases =
88- canvasItems . length > 0
89- ? ! canvasItems . includes ( null )
90- ? < Canvas [ ] > canvasItems
91- : null
92- : null ;
112+ canvasItems . length > 0 ?
113+ ! canvasItems . includes ( null ) ?
114+ < Canvas [ ] > canvasItems :
115+ null :
116+ null ;
93117
94118 return this . _canvases !== null ? this . _canvases : [ ] ;
95119 }
96120
97121 // update __jsonld canvas id's because that is used by other functions in
98122 // the library when working with canvases
99- /* _updateCanvasIds(canvasJson: any, newCanvasId: string): any {
100- // update ids in annotations
101- const items = canvasJson.items || canvasJson.content;
102- const annotations = items.length && items[0].items ? items[0].items : [];
103- if (annotations && canvasJson.items) {
104- for (let i = 0; i < annotations.length; i++) {
105- canvasJson["id"] = newCanvasId;
106- // update target canvas Id in all canvas annotations
107- canvasJson.items[0].items[i]["target"] = newCanvasId;
108- }
109- } else if (annotations) {
110- for (let i = 0; i < annotations.length; i++) {
111- canvasJson["id"] = newCanvasId;
112- // update target canvas Id in all canvas annotations
113- canvasJson.content[0].items[i]["target"] = newCanvasId;
114- }
123+ _updateFragmentIds ( canvasJson : any , newCanvasId : string ) : any {
124+ // update ids in annotations
125+ const items = canvasJson . items || canvasJson . content ;
126+ const annotations = items . length && items [ 0 ] . items ? items [ 0 ] . items : [ ] ;
127+
128+ if ( annotations && canvasJson . items ) {
129+ for ( let i = 0 ; i < annotations . length ; i ++ ) {
130+ canvasJson [ "id" ] = newCanvasId ;
131+ // update target canvas Id in all canvas annotations
132+ canvasJson . items [ 0 ] . items [ i ] [ "target" ] = newCanvasId ;
133+ }
134+ } else if ( annotations ) {
135+ for ( let i = 0 ; i < annotations . length ; i ++ ) {
136+ canvasJson [ "id" ] = newCanvasId ;
137+ // update target canvas Id in all canvas annotations
138+ // replace this with (something that looks at other contents)
139+ canvasJson . content [ 0 ] . items [ i ] [ "target" ] = newCanvasId ;
115140 }
116- return canvasJson;
117- } */
141+ }
142+
143+ return canvasJson ;
144+ }
118145
119146 getCanvasByIndex ( canvasIndex : number ) : any {
120147 return this . getCanvases ( ) [ canvasIndex ] ;
@@ -286,7 +313,7 @@ export class Range extends ManifestResource {
286313 return this . _ranges ;
287314 }
288315
289- return ( this . _ranges = < Range [ ] > this . items . filter ( m => m . isRange ( ) ) ) ;
316+ return ( this . _ranges = < Range [ ] > this . items . filter ( m => m . isRange ( ) ) ) ;
290317 }
291318
292319 getBehavior ( ) : Behavior | null {
@@ -344,7 +371,7 @@ export class Range extends ManifestResource {
344371 }
345372
346373 private _parseTreeNode ( node : TreeNode , range : Range ) : void {
347- node . label = < string > range . getLabel ( ) . getValue ( this . options . locale ) ;
374+ node . label = < string > range . getLabel ( ) . getValue ( this . options . locale ) ;
348375 node . data = range ;
349376 node . data . type = Utils . normaliseType ( TreeNodeType . RANGE ) ;
350377 range . treeNode = node ;
@@ -366,4 +393,4 @@ export class Range extends ManifestResource {
366393 }
367394 }
368395 }
369- }
396+ }
0 commit comments