Skip to content

Commit 0a01ae6

Browse files
committed
Merge branch 'dspace-cris-2023_02_x' into dspace-cris-2024_02_x
# Conflicts: # server.ts # src/app/core/auth/server-auth-request.service.ts # src/app/core/services/server-hard-redirect.service.ts # src/app/item-page/mirador-viewer/mirador-viewer.component.spec.ts # src/app/item-page/mirador-viewer/mirador-viewer.component.ts # src/app/item-page/mirador-viewer/mirador-viewer.module.ts # src/app/my-dspace-page/my-dspace-page.component.html # src/app/shared/object-collection/shared/in-workflow-statistics/in-workflow-statistics.component.ts # src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.html # src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.html # src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.html # src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts # src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html # src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts # src/app/shared/search/search-results/themed-search-results.component.ts # src/app/shared/shared.module.ts
2 parents 577de40 + 682b900 commit 0a01ae6

5 files changed

Lines changed: 74 additions & 37 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: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {
99
TranslateModule,
1010
} from '@ngx-translate/core';
1111
import { of as observableOf } from 'rxjs';
12+
import { SafeUrlPipe } from 'src/app/shared/utils/safe-url-pipe';
13+
import { VarDirective } from 'src/app/shared/utils/var.directive';
1214

1315
import { BitstreamDataService } from '../../core/data/bitstream-data.service';
1416
import { BundleDataService } from '../../core/data/bundle-data.service';
@@ -46,12 +48,17 @@ describe('MiradorViewerComponent with search', () => {
4648
beforeEach(waitForAsync(() => {
4749
viewerService.showEmbeddedViewer.and.returnValue(true);
4850
TestBed.configureTestingModule({
49-
imports: [TranslateModule.forRoot({
50-
loader: {
51-
provide: TranslateLoader,
52-
useClass: TranslateLoaderMock,
53-
},
54-
}), MiradorViewerComponent],
51+
imports: [
52+
TranslateModule.forRoot({
53+
loader: {
54+
provide: TranslateLoader,
55+
useClass: TranslateLoaderMock,
56+
},
57+
}),
58+
MiradorViewerComponent,
59+
VarDirective,
60+
SafeUrlPipe,
61+
],
5562
providers: [
5663
{ provide: BitstreamDataService, useValue: {} },
5764
{ provide: BundleDataService, useValue: {} },
@@ -72,6 +79,7 @@ describe('MiradorViewerComponent with search', () => {
7279
comp = fixture.componentInstance;
7380
comp.object = getItem(noMetadata);
7481
comp.searchable = true;
82+
comp.iframeViewerUrl = observableOf('testUrl');
7583
fixture.detectChanges();
7684
}));
7785

@@ -108,12 +116,17 @@ describe('MiradorViewerComponent with multiple images', () => {
108116
viewerService.showEmbeddedViewer.and.returnValue(true);
109117
viewerService.getImageCount.and.returnValue(observableOf(2));
110118
TestBed.configureTestingModule({
111-
imports: [TranslateModule.forRoot({
112-
loader: {
113-
provide: TranslateLoader,
114-
useClass: TranslateLoaderMock,
115-
},
116-
}), MiradorViewerComponent],
119+
imports: [
120+
TranslateModule.forRoot({
121+
loader: {
122+
provide: TranslateLoader,
123+
useClass: TranslateLoaderMock,
124+
},
125+
}),
126+
MiradorViewerComponent,
127+
VarDirective,
128+
SafeUrlPipe,
129+
],
117130
providers: [
118131
{ provide: BitstreamDataService, useValue: {} },
119132
{ provide: BundleDataService, useValue: {} },
@@ -135,6 +148,7 @@ describe('MiradorViewerComponent with multiple images', () => {
135148
comp = fixture.componentInstance;
136149
comp.object = getItem(noMetadata);
137150
comp.searchable = false;
151+
comp.iframeViewerUrl = observableOf('testUrl');
138152
fixture.detectChanges();
139153
}));
140154

@@ -167,12 +181,17 @@ describe('MiradorViewerComponent with a single image', () => {
167181
viewerService.showEmbeddedViewer.and.returnValue(true);
168182
viewerService.getImageCount.and.returnValue(observableOf(1));
169183
TestBed.configureTestingModule({
170-
imports: [TranslateModule.forRoot({
171-
loader: {
172-
provide: TranslateLoader,
173-
useClass: TranslateLoaderMock,
174-
},
175-
}), MiradorViewerComponent],
184+
imports: [
185+
TranslateModule.forRoot({
186+
loader: {
187+
provide: TranslateLoader,
188+
useClass: TranslateLoaderMock,
189+
},
190+
}),
191+
MiradorViewerComponent,
192+
VarDirective,
193+
SafeUrlPipe,
194+
],
176195
providers: [
177196
{ provide: BitstreamDataService, useValue: {} },
178197
{ provide: BundleDataService, useValue: {} },
@@ -193,6 +212,7 @@ describe('MiradorViewerComponent with a single image', () => {
193212
fixture = TestBed.createComponent(MiradorViewerComponent);
194213
comp = fixture.componentInstance;
195214
comp.object = getItem(noMetadata);
215+
comp.iframeViewerUrl = observableOf('testUrl');
196216
fixture.detectChanges();
197217
}));
198218

@@ -219,12 +239,17 @@ describe('MiradorViewerComponent in development mode', () => {
219239
viewerService.showEmbeddedViewer.and.returnValue(false);
220240
viewerService.getImageCount.and.returnValue(observableOf(1));
221241
TestBed.configureTestingModule({
222-
imports: [TranslateModule.forRoot({
223-
loader: {
224-
provide: TranslateLoader,
225-
useClass: TranslateLoaderMock,
226-
},
227-
}), MiradorViewerComponent],
242+
imports: [
243+
TranslateModule.forRoot({
244+
loader: {
245+
provide: TranslateLoader,
246+
useClass: TranslateLoaderMock,
247+
},
248+
}),
249+
MiradorViewerComponent,
250+
VarDirective,
251+
SafeUrlPipe,
252+
],
228253
providers: [
229254
{ provide: BitstreamDataService, useValue: {} },
230255
],
@@ -245,6 +270,7 @@ describe('MiradorViewerComponent in development mode', () => {
245270
fixture = TestBed.createComponent(MiradorViewerComponent);
246271
comp = fixture.componentInstance;
247272
comp.object = getItem(noMetadata);
273+
comp.iframeViewerUrl = observableOf('testUrl');
248274
fixture.detectChanges();
249275
}));
250276

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ import {
1111
OnInit,
1212
PLATFORM_ID,
1313
} from '@angular/core';
14-
import {
15-
DomSanitizer,
16-
SafeResourceUrl,
17-
} from '@angular/platform-browser';
14+
import { DomSanitizer } from '@angular/platform-browser';
1815
import { TranslateModule } from '@ngx-translate/core';
1916
import {
2017
Observable,
@@ -24,6 +21,7 @@ import {
2421
map,
2522
take,
2623
} from 'rxjs/operators';
24+
import { SafeUrlPipe } from 'src/app/shared/utils/safe-url-pipe';
2725

2826
import { environment } from '../../../environments/environment';
2927
import { BitstreamDataService } from '../../core/data/bitstream-data.service';
@@ -44,6 +42,7 @@ import { MiradorViewerService } from './mirador-viewer.service';
4442
TranslateModule,
4543
AsyncPipe,
4644
NgIf,
45+
SafeUrlPipe,
4746
],
4847
standalone: true,
4948
})
@@ -66,6 +65,11 @@ export class MiradorViewerComponent implements OnInit {
6665
*/
6766
@Input() canvasId: string;
6867

68+
/**
69+
* Is used as canvas index of the element to show.
70+
*/
71+
@Input() canvasIndex: string;
72+
6973
/**
7074
* Hides embedded viewer in dev mode.
7175
*/
@@ -74,7 +78,7 @@ export class MiradorViewerComponent implements OnInit {
7478
/**
7579
* The url for the iframe.
7680
*/
77-
iframeViewerUrl: Observable<SafeResourceUrl>;
81+
iframeViewerUrl: Observable<string>;
7882

7983
/**
8084
* Sets the viewer to show or hide thumbnail side navigation menu.
@@ -100,7 +104,7 @@ export class MiradorViewerComponent implements OnInit {
100104
* Creates the url for the Mirador iframe. Adds parameters for the displaying the search panel, query results,
101105
* or multi-page thumbnail navigation.
102106
*/
103-
setURL() {
107+
getURL() {
104108
// The path to the REST manifest endpoint.
105109
const manifestApiEndpoint = encodeURIComponent(environment.rest.baseUrl + '/iiif/'
106110
+ this.object.id + '/manifest');
@@ -128,9 +132,11 @@ export class MiradorViewerComponent implements OnInit {
128132
if (this.canvasId) {
129133
viewerPath += `&canvasId=${this.canvasId}`;
130134
}
135+
if (this.canvasIndex) {
136+
viewerPath += `&canvasIndex=${parseInt(this.canvasIndex, 10) - 1}`;
137+
}
131138

132-
// TODO: Should the query term be trusted here?
133-
return this.sanitizer.bypassSecurityTrustResourceUrl(viewerPath);
139+
return viewerPath;
134140
}
135141

136142
ngOnInit(): void {
@@ -160,7 +166,7 @@ export class MiradorViewerComponent implements OnInit {
160166
const observable = of('');
161167
this.iframeViewerUrl = observable.pipe(
162168
map((val) => {
163-
return this.setURL();
169+
return this.getURL();
164170
}),
165171
);
166172
} else {
@@ -174,7 +180,7 @@ export class MiradorViewerComponent implements OnInit {
174180
if (c > 1) {
175181
this.multi = true;
176182
}
177-
return this.setURL();
183+
return this.getURL();
178184
}),
179185
);
180186
}

src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<ds-item-list-preview [item]="dso"
2-
[object]="object"
3-
[badgeContext]="badgeContext"
2+
[object]="object"
3+
[badgeContext]="badgeContext"
44
[showLabel]="showLabel"
55
[showMetrics]="showMetrics"
66
[showThumbnails]="showThumbnails"

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)