diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 95358dc446..248c6a0744 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -12,6 +12,7 @@ "date": "Date", "uri": "URI", "files": "Files", + "downloads": "Downloads", "collections": "Collections" } }, diff --git a/src/app/core/shared/item.model.ts b/src/app/core/shared/item.model.ts index 424ead03e7..c663806f40 100644 --- a/src/app/core/shared/item.model.ts +++ b/src/app/core/shared/item.model.ts @@ -59,6 +59,29 @@ export class Item extends DSpaceObject { ); } + /** + * Retrieves the thumbnail for the given original of this item + * @returns {Observable} the primaryBitstream of the "THUMBNAIL" bundle + */ + getThumbnailForOriginal(original: Observable): Observable { //returns obs of obs of bitstream instead... + const bundle: Observable = this.getBundle("THUMBNAIL"); + return bundle.map( + bundle => { + if (bundle != null) { + return bundle.bitstreams.find( + file => { + return Observable.combineLatest( + original, + file.payload, + (original, thumbnail) => { + return (thumbnail.name.startsWith(original.name)); + }); + }); + } + } + ); + } + /** * Retrieves all files that should be displayed on the item page of this item * @returns {Observable>>} an array of all Bitstreams in the "ORIGINAL" bundle diff --git a/src/app/item-page/simple/collections/collections.component.html b/src/app/item-page/field-components/collections/collections.component.html similarity index 100% rename from src/app/item-page/simple/collections/collections.component.html rename to src/app/item-page/field-components/collections/collections.component.html diff --git a/src/app/item-page/simple/collections/collections.component.ts b/src/app/item-page/field-components/collections/collections.component.ts similarity index 100% rename from src/app/item-page/simple/collections/collections.component.ts rename to src/app/item-page/field-components/collections/collections.component.ts diff --git a/src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.html b/src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.html similarity index 100% rename from src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.html rename to src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.html diff --git a/src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.scss b/src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.scss similarity index 61% rename from src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.scss rename to src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.scss index 749382bc9a..26f0f6fa65 100644 --- a/src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.scss +++ b/src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.scss @@ -1,4 +1,4 @@ -@import '../../../styles/variables.scss'; +@import '../../../../styles/variables.scss'; :host { .simple-view-element { margin-bottom: 15px; diff --git a/src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.ts b/src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.ts similarity index 100% rename from src/app/item-page/simple/metadata-field-wrapper/metadata-field-wrapper.component.ts rename to src/app/item-page/field-components/metadata-field-wrapper/metadata-field-wrapper.component.ts diff --git a/src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.html b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html similarity index 100% rename from src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.html rename to src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html diff --git a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.scss b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.scss new file mode 100644 index 0000000000..96ce861942 --- /dev/null +++ b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.scss @@ -0,0 +1 @@ +@import '../../../../styles/variables.scss'; diff --git a/src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.ts b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts similarity index 100% rename from src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.ts rename to src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts diff --git a/src/app/item-page/simple/metadata-values/metadata-values.component.html b/src/app/item-page/field-components/metadata-values/metadata-values.component.html similarity index 100% rename from src/app/item-page/simple/metadata-values/metadata-values.component.html rename to src/app/item-page/field-components/metadata-values/metadata-values.component.html diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.scss b/src/app/item-page/field-components/metadata-values/metadata-values.component.scss new file mode 100644 index 0000000000..96ce861942 --- /dev/null +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.scss @@ -0,0 +1 @@ +@import '../../../../styles/variables.scss'; diff --git a/src/app/item-page/simple/metadata-values/metadata-values.component.ts b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts similarity index 100% rename from src/app/item-page/simple/metadata-values/metadata-values.component.ts rename to src/app/item-page/field-components/metadata-values/metadata-values.component.ts diff --git a/src/app/item-page/full/field-components/file-section/full-file-section.component.html b/src/app/item-page/full/field-components/file-section/full-file-section.component.html new file mode 100644 index 0000000000..9e9903c913 --- /dev/null +++ b/src/app/item-page/full/field-components/file-section/full-file-section.component.html @@ -0,0 +1,11 @@ + +
+ +
{{(file | async)?.name}}
+
{{(file | async)?.findMetadata("dc.description")}}
+
{{((file | async)?.size) | dsFileSize }}
+ + {{"item.page.download" | translate}} + +
+
diff --git a/src/app/item-page/full/field-components/file-section/full-file-section.component.ts b/src/app/item-page/full/field-components/file-section/full-file-section.component.ts new file mode 100644 index 0000000000..6ae2ad7649 --- /dev/null +++ b/src/app/item-page/full/field-components/file-section/full-file-section.component.ts @@ -0,0 +1,47 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Bitstream } from "../../../../core/shared/bitstream.model"; +import { Item } from "../../../../core/shared/item.model"; +import { Observable } from "rxjs"; +import { FileSectionComponent } from "../../../simple/field-components/file-section/file-section.component"; + +/** + * This component renders the file section of the item + * inside a 'ds-metadata-field-wrapper' component. + */ + +@Component({ + selector: 'ds-item-page-full-file-section', + templateUrl: './full-file-section.component.html' +}) +export class FullFileSectionComponent extends FileSectionComponent implements OnInit { + + @Input() item: Item; + + files: Observable>>; + + thumbnails: Map> = new Map(); + + + universalInit() { + } + + ngOnInit(): void { + super.ngOnInit(); + this.files.subscribe( + files => + files.forEach( + file => { + file.subscribe( + original => { + const thumbnail : Observable = this.item.getThumbnailForOriginal(file); + thumbnail.subscribe(t => + console.log("TESTTTT" , t)); + this.thumbnails.set(original.id, thumbnail); + } + ); + } + ) + ) + } + +} diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html new file mode 100644 index 0000000000..0915f5375b --- /dev/null +++ b/src/app/item-page/full/full-item-page.component.html @@ -0,0 +1,16 @@ +
+ + + + + + + + + +
{{metadatum.key}}{{metadatum.value}}{{metadatum.language}}
+ + + + +
diff --git a/src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.scss b/src/app/item-page/full/full-item-page.component.scss similarity index 100% rename from src/app/item-page/simple/metadata-uri-values/metadata-uri-values.component.scss rename to src/app/item-page/full/full-item-page.component.scss diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index 73cfedfbeb..04e3d4d511 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -1,10 +1,11 @@ -import { Component, OnInit } from '@angular/core'; -import { Item } from "../../core/shared/item.model"; -import { RemoteData } from "../../core/data/remote-data"; +import { Component } from '@angular/core'; import { Observable } from "rxjs"; -import { Bitstream } from "../../core/shared/bitstream.model"; import { ItemPageComponent } from "../simple/item-page.component"; import { Metadatum } from "../../core/shared/metadatum.model"; +import { ItemDataService } from "../../core/data/item-data.service"; +import { ActivatedRoute } from "@angular/router"; +import { RemoteData } from "../../core/data/remote-data"; +import { Item } from "../../core/shared/item.model"; /** * This component renders a simple item page. @@ -19,7 +20,13 @@ import { Metadatum } from "../../core/shared/metadatum.model"; }) export class FullItemPageComponent extends ItemPageComponent { - metadata: Array; + item: RemoteData; + + metadata: Observable>; + + constructor(route: ActivatedRoute, items: ItemDataService) { + super(route, items); + } universalInit() { @@ -27,7 +34,7 @@ export class FullItemPageComponent extends ItemPageComponent { initialize(params) { super.initialize(params); - this.metadata = this.item.payload.flatMap(i => i.metadata); + this.metadata = this.item.payload.map(i => i.metadata); } } diff --git a/src/app/item-page/item-page-routing.module.ts b/src/app/item-page/item-page-routing.module.ts index 005dbe30cc..2cd0c200ad 100644 --- a/src/app/item-page/item-page-routing.module.ts +++ b/src/app/item-page/item-page-routing.module.ts @@ -8,7 +8,7 @@ import { FullItemPageComponent } from './full/full-item-page.component'; imports: [ RouterModule.forChild([ { path: 'items/:id', pathMatch: 'full', component: ItemPageComponent }, - { path: 'items/:id/full', pathMatch: 'full', component: FullItemPageComponent }, + { path: 'items/:id/full', component: FullItemPageComponent }, ]) ] }) diff --git a/src/app/item-page/item-page.module.ts b/src/app/item-page/item-page.module.ts index 424013d0a5..8b7bae4477 100644 --- a/src/app/item-page/item-page.module.ts +++ b/src/app/item-page/item-page.module.ts @@ -2,22 +2,25 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ItemPageComponent } from './simple/item-page.component'; import { ItemPageRoutingModule } from './item-page-routing.module'; -import { MetadataValuesComponent } from './simple/metadata-values/metadata-values.component'; -import { MetadataUriValuesComponent } from './simple/metadata-uri-values/metadata-uri-values.component'; -import { MetadataFieldWrapperComponent } from './simple/metadata-field-wrapper/metadata-field-wrapper.component'; -import { ItemPageAuthorFieldComponent } from './simple/specific-field/author/item-page-author-field.component'; -import { ItemPageDateFieldComponent } from './simple/specific-field/date/item-page-date-field.component'; -import { ItemPageAbstractFieldComponent } from './simple/specific-field/abstract/item-page-abstract-field.component'; -import { ItemPageUriFieldComponent } from './simple/specific-field/uri/item-page-uri-field.component'; -import { ItemPageTitleFieldComponent } from './simple/specific-field/title/item-page-title-field.component'; -import { ItemPageSpecificFieldComponent } from './simple/specific-field/item-page-specific-field.component'; +import { MetadataValuesComponent } from './field-components/metadata-values/metadata-values.component'; +import { MetadataUriValuesComponent } from './field-components/metadata-uri-values/metadata-uri-values.component'; +import { MetadataFieldWrapperComponent } from './field-components/metadata-field-wrapper/metadata-field-wrapper.component'; +import { ItemPageAuthorFieldComponent } from './simple/field-components/specific-field/author/item-page-author-field.component'; +import { ItemPageDateFieldComponent } from './simple/field-components/specific-field/date/item-page-date-field.component'; +import { ItemPageAbstractFieldComponent } from './simple/field-components/specific-field/abstract/item-page-abstract-field.component'; +import { ItemPageUriFieldComponent } from './simple/field-components/specific-field/uri/item-page-uri-field.component'; +import { ItemPageTitleFieldComponent } from './simple/field-components/specific-field/title/item-page-title-field.component'; +import { ItemPageSpecificFieldComponent } from './simple/field-components/specific-field/item-page-specific-field.component'; import { SharedModule } from './../shared/shared.module'; -import { FileSectionComponent } from "./simple/file-section/file-section.component"; -import { CollectionsComponent } from "./simple/collections/collections.component"; +import { FileSectionComponent } from "./simple/field-components/file-section/file-section.component"; +import { CollectionsComponent } from "./field-components/collections/collections.component"; +import { FullItemPageComponent } from "./full/full-item-page.component"; +import { FullFileSectionComponent } from "./full/field-components/file-section/full-file-section.component"; @NgModule({ declarations: [ ItemPageComponent, + FullItemPageComponent, MetadataValuesComponent, MetadataUriValuesComponent, MetadataFieldWrapperComponent, @@ -28,7 +31,8 @@ import { CollectionsComponent } from "./simple/collections/collections.component ItemPageTitleFieldComponent, ItemPageSpecificFieldComponent, FileSectionComponent, - CollectionsComponent + CollectionsComponent, + FullFileSectionComponent ], imports: [ ItemPageRoutingModule, diff --git a/src/app/item-page/simple/file-section/file-section.component.html b/src/app/item-page/simple/field-components/file-section/file-section.component.html similarity index 100% rename from src/app/item-page/simple/file-section/file-section.component.html rename to src/app/item-page/simple/field-components/file-section/file-section.component.html diff --git a/src/app/item-page/simple/file-section/file-section.component.ts b/src/app/item-page/simple/field-components/file-section/file-section.component.ts similarity index 79% rename from src/app/item-page/simple/file-section/file-section.component.ts rename to src/app/item-page/simple/field-components/file-section/file-section.component.ts index d434c62b9e..37b6b7c98c 100644 --- a/src/app/item-page/simple/file-section/file-section.component.ts +++ b/src/app/item-page/simple/field-components/file-section/file-section.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Bitstream } from "../../../core/shared/bitstream.model"; -import { Item } from "../../../core/shared/item.model"; +import { Bitstream } from "../../../../core/shared/bitstream.model"; +import { Item } from "../../../../core/shared/item.model"; import { Observable } from "rxjs"; /** @@ -18,7 +18,7 @@ export class FileSectionComponent implements OnInit { label : string = "item.page.files"; - separator: string = "
" + separator: string = "
"; files: Observable; diff --git a/src/app/item-page/simple/specific-field/abstract/item-page-abstract-field.component.ts b/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.ts similarity index 79% rename from src/app/item-page/simple/specific-field/abstract/item-page-abstract-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.ts index faa3b0fa1c..f0e410d89e 100644 --- a/src/app/item-page/simple/specific-field/abstract/item-page-abstract-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../../core/shared/item.model"; import { ItemPageSpecificFieldComponent } from "../item-page-specific-field.component"; @Component({ diff --git a/src/app/item-page/simple/specific-field/author/item-page-author-field.component.ts b/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.ts similarity index 80% rename from src/app/item-page/simple/specific-field/author/item-page-author-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.ts index f5b40e72e6..5b85038e38 100644 --- a/src/app/item-page/simple/specific-field/author/item-page-author-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../../core/shared/item.model"; import { ItemPageSpecificFieldComponent } from "../item-page-specific-field.component"; @Component({ diff --git a/src/app/item-page/simple/specific-field/date/item-page-date-field.component.ts b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.ts similarity index 79% rename from src/app/item-page/simple/specific-field/date/item-page-date-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.ts index 977f68e62f..2d7b3f7c41 100644 --- a/src/app/item-page/simple/specific-field/date/item-page-date-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../../core/shared/item.model"; import { ItemPageSpecificFieldComponent } from "../item-page-specific-field.component"; @Component({ diff --git a/src/app/item-page/simple/specific-field/item-page-specific-field.component.html b/src/app/item-page/simple/field-components/specific-field/item-page-specific-field.component.html similarity index 100% rename from src/app/item-page/simple/specific-field/item-page-specific-field.component.html rename to src/app/item-page/simple/field-components/specific-field/item-page-specific-field.component.html diff --git a/src/app/item-page/simple/specific-field/item-page-specific-field.component.ts b/src/app/item-page/simple/field-components/specific-field/item-page-specific-field.component.ts similarity index 87% rename from src/app/item-page/simple/specific-field/item-page-specific-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/item-page-specific-field.component.ts index 17d3119921..20c9528ebe 100644 --- a/src/app/item-page/simple/specific-field/item-page-specific-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/item-page-specific-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../core/shared/item.model"; /** * This component can be used to represent metadata on a simple item page. diff --git a/src/app/item-page/simple/specific-field/title/item-page-title-field.component.html b/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html similarity index 100% rename from src/app/item-page/simple/specific-field/title/item-page-title-field.component.html rename to src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.html diff --git a/src/app/item-page/simple/specific-field/title/item-page-title-field.component.ts b/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.ts similarity index 77% rename from src/app/item-page/simple/specific-field/title/item-page-title-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.ts index 1f2635458a..4f926000a4 100644 --- a/src/app/item-page/simple/specific-field/title/item-page-title-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/title/item-page-title-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../../core/shared/item.model"; import { ItemPageSpecificFieldComponent } from "../item-page-specific-field.component"; @Component({ diff --git a/src/app/item-page/simple/specific-field/uri/item-page-uri-field.component.html b/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.html similarity index 100% rename from src/app/item-page/simple/specific-field/uri/item-page-uri-field.component.html rename to src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.html diff --git a/src/app/item-page/simple/specific-field/uri/item-page-uri-field.component.ts b/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.ts similarity index 78% rename from src/app/item-page/simple/specific-field/uri/item-page-uri-field.component.ts rename to src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.ts index f442075272..4879fa5aa6 100644 --- a/src/app/item-page/simple/specific-field/uri/item-page-uri-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Item } from "../../../../core/shared/item.model"; +import { Component, Input } from '@angular/core'; +import { Item } from "../../../../../core/shared/item.model"; import { ItemPageSpecificFieldComponent } from "../item-page-specific-field.component"; @Component({ diff --git a/src/app/item-page/simple/item-page.component.scss b/src/app/item-page/simple/item-page.component.scss index 48e6526dff..50be6f5ad0 100644 --- a/src/app/item-page/simple/item-page.component.scss +++ b/src/app/item-page/simple/item-page.component.scss @@ -1 +1 @@ -@import '../../../styles/variables'; +@import '../../../styles/variables.scss'; diff --git a/src/app/item-page/simple/metadata-values/metadata-values.component.scss b/src/app/item-page/simple/metadata-values/metadata-values.component.scss deleted file mode 100644 index 50be6f5ad0..0000000000 --- a/src/app/item-page/simple/metadata-values/metadata-values.component.scss +++ /dev/null @@ -1 +0,0 @@ -@import '../../../styles/variables.scss'; diff --git a/src/backend/items.ts b/src/backend/items.ts index 80690132bd..a60ac44033 100644 --- a/src/backend/items.ts +++ b/src/backend/items.ts @@ -16,9 +16,9 @@ export const ITEMS = [ { "href": "/bundles/2355" }, - // { - // "href": "/bundles/5687" - // } + { + "href": "/bundles/5687" + } ] }, "id": "8871",