-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/app/core/shared/media-viewer-item.model.ts b/src/app/core/shared/media-viewer-item.model.ts
new file mode 100644
index 0000000000..cd3a31bd0b
--- /dev/null
+++ b/src/app/core/shared/media-viewer-item.model.ts
@@ -0,0 +1,21 @@
+import { Bitstream } from './bitstream.model';
+
+/**
+ * Model representing a media viewer item
+ */
+export class MediaViewerItem {
+ /**
+ * Incoming Bitsream
+ */
+ bitstream: Bitstream;
+
+ /**
+ * Incoming Bitsream format type
+ */
+ format: string;
+
+ /**
+ * Incoming Bitsream thumbnail
+ */
+ thumbnail: string;
+}
diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5
index 84c0b27962..eb429cf546 100644
--- a/src/assets/i18n/en.json5
+++ b/src/assets/i18n/en.json5
@@ -2544,6 +2544,13 @@
"publication.search.results.head": "Publication Search Results",
"publication.search.title": "DSpace Angular :: Publication Search",
+
+
+ "media-viewer.next": "Next",
+
+ "media-viewer.previous": "Previous",
+
+ "media-viewer.playlist": "Playlist",
"register-email.title": "New user registration",
diff --git a/src/assets/images/replacement_audio.svg b/src/assets/images/replacement_audio.svg
new file mode 100644
index 0000000000..03899914c9
--- /dev/null
+++ b/src/assets/images/replacement_audio.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/images/replacement_document.svg b/src/assets/images/replacement_document.svg
new file mode 100644
index 0000000000..f684ca9597
--- /dev/null
+++ b/src/assets/images/replacement_document.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/images/replacement_image.svg b/src/assets/images/replacement_image.svg
new file mode 100644
index 0000000000..b6817cf7fc
--- /dev/null
+++ b/src/assets/images/replacement_image.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/images/replacement_video.svg b/src/assets/images/replacement_video.svg
new file mode 100644
index 0000000000..1972b25eca
--- /dev/null
+++ b/src/assets/images/replacement_video.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/config/global-config.interface.ts b/src/config/global-config.interface.ts
index c197a1407c..8ca11e4a8c 100644
--- a/src/config/global-config.interface.ts
+++ b/src/config/global-config.interface.ts
@@ -12,6 +12,7 @@ import { CollectionPageConfig } from './collection-page-config.interface';
import { ThemeConfig } from './theme.model';
import { AuthConfig } from './auth-config.interfaces';
import { UIServerConfig } from './ui-server-config.interface';
+import { MediaViewerConfig } from './media-viewer-config.interface';
export interface GlobalConfig extends Config {
ui: UIServerConfig;
@@ -32,4 +33,5 @@ export interface GlobalConfig extends Config {
collection: CollectionPageConfig;
themes: ThemeConfig[];
rewriteDownloadUrls: boolean;
+ mediaViewer: MediaViewerConfig;
}
diff --git a/src/config/media-viewer-config.interface.ts b/src/config/media-viewer-config.interface.ts
new file mode 100644
index 0000000000..8a6a163872
--- /dev/null
+++ b/src/config/media-viewer-config.interface.ts
@@ -0,0 +1,6 @@
+import { Config } from './config.interface';
+
+export interface MediaViewerConfig extends Config {
+ image: boolean;
+ video: boolean;
+}
diff --git a/src/environments/environment.common.ts b/src/environments/environment.common.ts
index c6ae9858e5..b8248890fc 100644
--- a/src/environments/environment.common.ts
+++ b/src/environments/environment.common.ts
@@ -263,4 +263,11 @@ export const environment: GlobalConfig = {
],
// Whether the UI should rewrite file download URLs to match its domain. Only necessary to enable when running UI and REST API on separate domains
rewriteDownloadUrls: false,
+ // Whether to enable media viewer for image and/or video Bitstreams (i.e. Bitstreams whose MIME type starts with "image" or "video").
+ // For images, this enables a gallery viewer where you can zoom or page through images.
+ // For videos, this enables embedded video streaming
+ mediaViewer: {
+ image: false,
+ video: false,
+ },
};
diff --git a/src/environments/mock-environment.ts b/src/environments/mock-environment.ts
index 4f321c01d4..8de5b187ad 100644
--- a/src/environments/mock-environment.ts
+++ b/src/environments/mock-environment.ts
@@ -217,4 +217,8 @@ export const environment: Partial
= {
name: 'base',
},
],
+ mediaViewer: {
+ image: true,
+ video: true
+ },
};
diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss
index b79cf52fbb..bf8efeca8b 100644
--- a/src/styles/_global-styles.scss
+++ b/src/styles/_global-styles.scss
@@ -35,10 +35,6 @@ body {
margin: 0;
}
-ds-header-navbar-wrapper {
- z-index: var(--ds-nav-z-index);
-}
-
ds-admin-sidebar {
position: fixed;
z-index: var(--ds-sidebar-z-index);
@@ -47,3 +43,16 @@ ds-admin-sidebar {
.ds-full-screen-loader {
height: 100vh;
}
+
+.sticky-top {
+ z-index: 0;
+}
+
+.media-viewer
+ .change-gallery
+ .ngx-gallery
+ ngx-gallery-preview.ngx-gallery-active {
+ right: 0;
+ left: auto;
+ width: calc(100% - 53px);
+}
diff --git a/yarn.lock b/yarn.lock
index f042076b0d..c92f8b3154 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1247,6 +1247,11 @@
merge-source-map "^1.1.0"
schema-utils "^2.7.0"
+"@kolkov/ngx-gallery@^1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@kolkov/ngx-gallery/-/ngx-gallery-1.2.3.tgz#bb15d4b64a5c03905677aa4ca741835aabe41f43"
+ integrity sha512-Dpnhwq3DGPSXrNt65gexo+/Smb2L0bne14A0WONN04+racETtcY33fqFvNWfRw5Nvk2Eza+sq95eEA0NbgF/6g==
+
"@ng-bootstrap/ng-bootstrap@7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-7.0.0.tgz#3bfa62eb52fdb891b1ce693ea11c39127e2d1ab7"