Skip to content

Commit 682b900

Browse files
committed
Merged in task/dspace-cris-2023_02_x/IIIF-148 (pull request DSpace#3233)
[IIIF-148] Add canvas index param Approved-by: Francesco Molinaro
2 parents 8b7f147 + 5fc3af1 commit 682b900

5 files changed

Lines changed: 33 additions & 13 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<p class="full-text-op">{{'iiifviewer.fullscreen.notice' | translate}}</p>
22
<p *ngIf="!isViewerAvailable" id="viewer-message">{{viewerMessage}}</p>
3-
<iframe title="Mirador Viewer" allowtransparency="true" *ngIf="isViewerAvailable" [src]="iframeViewerUrl | async" id="mirador-viewer"></iframe>
3+
<ng-container *ngVar="(iframeViewerUrl | async) as iframeUrl">
4+
<iframe title="Mirador Viewer" allowtransparency="true" *ngIf="isViewerAvailable && iframeUrl" [src]="(iframeUrl) | dsSafeUrl" id="mirador-viewer"></iframe>
5+
</ng-container>
46

src/app/item-page/mirador-viewer/mirador-viewer.component.spec.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { of as observableOf } from 'rxjs';
1313
import { MiradorViewerService } from './mirador-viewer.service';
1414
import { HostWindowService } from '../../shared/host-window.service';
1515
import { BundleDataService } from '../../core/data/bundle-data.service';
16+
import { VarDirective } from '../../shared/utils/var.directive';
17+
import { SafeUrlPipe } from '../../shared/utils/safe-url-pipe';
1618

1719

1820
function getItem(metadata: MetadataMap) {
@@ -44,7 +46,7 @@ describe('MiradorViewerComponent with search', () => {
4446
useClass: TranslateLoaderMock
4547
}
4648
})],
47-
declarations: [MiradorViewerComponent],
49+
declarations: [MiradorViewerComponent, VarDirective, SafeUrlPipe],
4850
providers: [
4951
{ provide: BitstreamDataService, useValue: {} },
5052
{ provide: BundleDataService, useValue: {} },
@@ -65,6 +67,7 @@ describe('MiradorViewerComponent with search', () => {
6567
comp = fixture.componentInstance;
6668
comp.object = getItem(noMetadata);
6769
comp.searchable = true;
70+
comp.iframeViewerUrl = observableOf('testUrl');
6871
fixture.detectChanges();
6972
}));
7073

@@ -107,7 +110,7 @@ describe('MiradorViewerComponent with multiple images', () => {
107110
useClass: TranslateLoaderMock
108111
}
109112
})],
110-
declarations: [MiradorViewerComponent],
113+
declarations: [MiradorViewerComponent, VarDirective, SafeUrlPipe],
111114
providers: [
112115
{ provide: BitstreamDataService, useValue: {} },
113116
{ provide: BundleDataService, useValue: {} },
@@ -129,6 +132,7 @@ describe('MiradorViewerComponent with multiple images', () => {
129132
comp = fixture.componentInstance;
130133
comp.object = getItem(noMetadata);
131134
comp.searchable = false;
135+
comp.iframeViewerUrl = observableOf('testUrl');
132136
fixture.detectChanges();
133137
}));
134138

@@ -167,7 +171,7 @@ describe('MiradorViewerComponent with a single image', () => {
167171
useClass: TranslateLoaderMock
168172
}
169173
})],
170-
declarations: [MiradorViewerComponent],
174+
declarations: [MiradorViewerComponent, VarDirective, SafeUrlPipe],
171175
providers: [
172176
{ provide: BitstreamDataService, useValue: {} },
173177
{ provide: BundleDataService, useValue: {} },
@@ -188,6 +192,7 @@ describe('MiradorViewerComponent with a single image', () => {
188192
fixture = TestBed.createComponent(MiradorViewerComponent);
189193
comp = fixture.componentInstance;
190194
comp.object = getItem(noMetadata);
195+
comp.iframeViewerUrl = observableOf('testUrl');
191196
fixture.detectChanges();
192197
}));
193198

@@ -220,7 +225,7 @@ describe('MiradorViewerComponent in development mode', () => {
220225
useClass: TranslateLoaderMock
221226
}
222227
})],
223-
declarations: [MiradorViewerComponent],
228+
declarations: [MiradorViewerComponent, VarDirective, SafeUrlPipe],
224229
providers: [
225230
{ provide: BitstreamDataService, useValue: {} }
226231
],
@@ -241,6 +246,7 @@ describe('MiradorViewerComponent in development mode', () => {
241246
fixture = TestBed.createComponent(MiradorViewerComponent);
242247
comp = fixture.componentInstance;
243248
comp.object = getItem(noMetadata);
249+
comp.iframeViewerUrl = observableOf('testUrl');
244250
fixture.detectChanges();
245251
}));
246252

src/app/item-page/mirador-viewer/mirador-viewer.component.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChangeDetectionStrategy, Component, Inject, Input, OnInit, PLATFORM_ID } from '@angular/core';
2-
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
2+
import { DomSanitizer } from '@angular/platform-browser';
33
import { Item } from '../../core/shared/item.model';
44
import { environment } from '../../../environments/environment';
55
import { BitstreamDataService } from '../../core/data/bitstream-data.service';
@@ -36,6 +36,11 @@ export class MiradorViewerComponent implements OnInit {
3636
*/
3737
@Input() canvasId: string;
3838

39+
/**
40+
* Is used as canvas index of the element to show.
41+
*/
42+
@Input() canvasIndex: string;
43+
3944
/**
4045
* Hides embedded viewer in dev mode.
4146
*/
@@ -44,7 +49,7 @@ export class MiradorViewerComponent implements OnInit {
4449
/**
4550
* The url for the iframe.
4651
*/
47-
iframeViewerUrl: Observable<SafeResourceUrl>;
52+
iframeViewerUrl: Observable<string>;
4853

4954
/**
5055
* Sets the viewer to show or hide thumbnail side navigation menu.
@@ -70,7 +75,7 @@ export class MiradorViewerComponent implements OnInit {
7075
* Creates the url for the Mirador iframe. Adds parameters for the displaying the search panel, query results,
7176
* or multi-page thumbnail navigation.
7277
*/
73-
setURL() {
78+
getURL() {
7479
// The path to the REST manifest endpoint.
7580
const manifestApiEndpoint = encodeURIComponent(environment.rest.baseUrl + '/iiif/'
7681
+ this.object.id + '/manifest');
@@ -98,9 +103,11 @@ export class MiradorViewerComponent implements OnInit {
98103
if (this.canvasId) {
99104
viewerPath += `&canvasId=${this.canvasId}`;
100105
}
106+
if (this.canvasIndex) {
107+
viewerPath += `&canvasIndex=${parseInt(this.canvasIndex, 10) - 1}`;
108+
}
101109

102-
// TODO: Should the query term be trusted here?
103-
return this.sanitizer.bypassSecurityTrustResourceUrl(viewerPath);
110+
return viewerPath;
104111
}
105112

106113
ngOnInit(): void {
@@ -130,7 +137,7 @@ export class MiradorViewerComponent implements OnInit {
130137
const observable = of('');
131138
this.iframeViewerUrl = observable.pipe(
132139
map((val) => {
133-
return this.setURL();
140+
return this.getURL();
134141
})
135142
);
136143
} else {
@@ -144,7 +151,7 @@ export class MiradorViewerComponent implements OnInit {
144151
if (c > 1) {
145152
this.multi = true;
146153
}
147-
return this.setURL();
154+
return this.getURL();
148155
})
149156
);
150157
}

src/app/item-page/mirador-viewer/mirador-viewer.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
22
import { CommonModule } from '@angular/common';
33
import { MiradorViewerComponent } from './mirador-viewer.component';
44
import { TranslateModule } from '@ngx-translate/core';
5+
import { SharedModule } from '../../shared/shared.module';
56

67

78
@NgModule({
@@ -13,7 +14,8 @@ import { TranslateModule } from '@ngx-translate/core';
1314
],
1415
imports: [
1516
CommonModule,
16-
TranslateModule
17+
TranslateModule,
18+
SharedModule
1719
]
1820
})
1921
export class MiradorViewerModule { }

src/mirador-viewer/config.default.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const multi = params.get('multi');
2828
const notMobile = params.get('notMobile');
2929
const isDownloadPluginEnabled = (params.get('enableDownloadPlugin') === 'true');
3030
const canvasId = params.get('canvasId');
31+
const canvasIndex = params.get('canvasIndex');
3132

3233
let windowSettings = {};
3334
let sideBarPanel = 'info';
@@ -62,6 +63,8 @@ windowSettings.manifestId = manifest;
6263
if (canvasId && canvasId !== 'null') {
6364
windowSettings.canvasId =
6465
`${(manifest.replace(MANIFEST_URL_PART, ''))}/canvas/${canvasId}`;
66+
} else if (canvasIndex) {
67+
windowSettings.canvasIndex = parseInt(canvasIndex);
6568
}
6669
})();
6770

0 commit comments

Comments
 (0)