mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Merge branch 'main' into w2p-97184_theme-feedback_contribute-main
This commit is contained in:
@@ -121,6 +121,9 @@ languages:
|
|||||||
- code: en
|
- code: en
|
||||||
label: English
|
label: English
|
||||||
active: true
|
active: true
|
||||||
|
- code: ca
|
||||||
|
label: Català
|
||||||
|
active: true
|
||||||
- code: cs
|
- code: cs
|
||||||
label: Čeština
|
label: Čeština
|
||||||
active: true
|
active: true
|
||||||
|
@@ -93,6 +93,7 @@
|
|||||||
"date-fns": "^2.29.3",
|
"date-fns": "^2.29.3",
|
||||||
"date-fns-tz": "^1.3.7",
|
"date-fns-tz": "^1.3.7",
|
||||||
"deepmerge": "^4.2.2",
|
"deepmerge": "^4.2.2",
|
||||||
|
"ejs": "^3.1.8",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-rate-limit": "^5.1.3",
|
"express-rate-limit": "^5.1.3",
|
||||||
"fast-json-patch": "^3.0.0-1",
|
"fast-json-patch": "^3.0.0-1",
|
||||||
@@ -147,6 +148,7 @@
|
|||||||
"@ngtools/webpack": "^13.2.6",
|
"@ngtools/webpack": "^13.2.6",
|
||||||
"@nguniversal/builders": "^13.1.1",
|
"@nguniversal/builders": "^13.1.1",
|
||||||
"@types/deep-freeze": "0.1.2",
|
"@types/deep-freeze": "0.1.2",
|
||||||
|
"@types/ejs": "^3.1.1",
|
||||||
"@types/express": "^4.17.9",
|
"@types/express": "^4.17.9",
|
||||||
"@types/jasmine": "~3.6.0",
|
"@types/jasmine": "~3.6.0",
|
||||||
"@types/js-cookie": "2.2.6",
|
"@types/js-cookie": "2.2.6",
|
||||||
|
14
server.ts
14
server.ts
@@ -22,6 +22,7 @@ import 'rxjs';
|
|||||||
/* eslint-disable import/no-namespace */
|
/* eslint-disable import/no-namespace */
|
||||||
import * as morgan from 'morgan';
|
import * as morgan from 'morgan';
|
||||||
import * as express from 'express';
|
import * as express from 'express';
|
||||||
|
import * as ejs from 'ejs';
|
||||||
import * as compression from 'compression';
|
import * as compression from 'compression';
|
||||||
import * as expressStaticGzip from 'express-static-gzip';
|
import * as expressStaticGzip from 'express-static-gzip';
|
||||||
/* eslint-enable import/no-namespace */
|
/* eslint-enable import/no-namespace */
|
||||||
@@ -136,10 +137,23 @@ export function app() {
|
|||||||
})(_, (options as any), callback)
|
})(_, (options as any), callback)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
server.engine('ejs', ejs.renderFile);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register the view engines for html and ejs
|
* Register the view engines for html and ejs
|
||||||
*/
|
*/
|
||||||
server.set('view engine', 'html');
|
server.set('view engine', 'html');
|
||||||
|
server.set('view engine', 'ejs');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serve the robots.txt ejs template, filling in the origin variable
|
||||||
|
*/
|
||||||
|
server.get('/robots.txt', (req, res) => {
|
||||||
|
res.setHeader('content-type', 'text/plain');
|
||||||
|
res.render('assets/robots.txt.ejs', {
|
||||||
|
'origin': req.protocol + '://' + req.headers.host
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set views folder path to directory where template files are stored
|
* Set views folder path to directory where template files are stored
|
||||||
|
@@ -65,6 +65,7 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent {
|
|||||||
const searchOptions = browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails);
|
const searchOptions = browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails);
|
||||||
this.updatePageWithItems(searchOptions, this.value, undefined);
|
this.updatePageWithItems(searchOptions, this.value, undefined);
|
||||||
this.updateParent(params.scope);
|
this.updateParent(params.scope);
|
||||||
|
this.updateLogo();
|
||||||
this.updateStartsWithOptions(this.browseId, metadataKeys, params.scope);
|
this.updateStartsWithOptions(this.browseId, metadataKeys, params.scope);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,11 @@
|
|||||||
<!-- Parent Name -->
|
<!-- Parent Name -->
|
||||||
<ds-comcol-page-header [name]="parentContext.name">
|
<ds-comcol-page-header [name]="parentContext.name">
|
||||||
</ds-comcol-page-header>
|
</ds-comcol-page-header>
|
||||||
|
<!-- Collection logo -->
|
||||||
|
<ds-comcol-page-logo *ngIf="logo$"
|
||||||
|
[logo]="(logo$ | async)?.payload"
|
||||||
|
[alternateText]="'Community or Collection Logo'">
|
||||||
|
</ds-comcol-page-logo>
|
||||||
<!-- Handle -->
|
<!-- Handle -->
|
||||||
<ds-themed-comcol-page-handle
|
<ds-themed-comcol-page-handle
|
||||||
[content]="parentContext.handle"
|
[content]="parentContext.handle"
|
||||||
|
@@ -144,6 +144,9 @@ describe('BrowseByMetadataPageComponent', () => {
|
|||||||
|
|
||||||
route.params = observableOf(paramsWithValue);
|
route.params = observableOf(paramsWithValue);
|
||||||
comp.ngOnInit();
|
comp.ngOnInit();
|
||||||
|
comp.updateParent('fake-scope');
|
||||||
|
comp.updateLogo();
|
||||||
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fetch items', () => {
|
it('should fetch items', () => {
|
||||||
@@ -151,6 +154,10 @@ describe('BrowseByMetadataPageComponent', () => {
|
|||||||
expect(result.payload.page).toEqual(mockItems);
|
expect(result.payload.page).toEqual(mockItems);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should fetch the logo', () => {
|
||||||
|
expect(comp.logo$).toBeTruthy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when calling browseParamsToOptions', () => {
|
describe('when calling browseParamsToOptions', () => {
|
||||||
|
@@ -15,7 +15,11 @@ import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.serv
|
|||||||
import { DSpaceObject } from '../../core/shared/dspace-object.model';
|
import { DSpaceObject } from '../../core/shared/dspace-object.model';
|
||||||
import { StartsWithType } from '../../shared/starts-with/starts-with-decorator';
|
import { StartsWithType } from '../../shared/starts-with/starts-with-decorator';
|
||||||
import { PaginationService } from '../../core/pagination/pagination.service';
|
import { PaginationService } from '../../core/pagination/pagination.service';
|
||||||
import { map } from 'rxjs/operators';
|
import { filter, map, mergeMap } from 'rxjs/operators';
|
||||||
|
import { followLink, FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
|
||||||
|
import { Bitstream } from '../../core/shared/bitstream.model';
|
||||||
|
import { Collection } from '../../core/shared/collection.model';
|
||||||
|
import { Community } from '../../core/shared/community.model';
|
||||||
import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface';
|
import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface';
|
||||||
|
|
||||||
export const BBM_PAGINATION_ID = 'bbm';
|
export const BBM_PAGINATION_ID = 'bbm';
|
||||||
@@ -48,6 +52,11 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy {
|
|||||||
*/
|
*/
|
||||||
parent$: Observable<RemoteData<DSpaceObject>>;
|
parent$: Observable<RemoteData<DSpaceObject>>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The logo of the current Community or Collection
|
||||||
|
*/
|
||||||
|
logo$: Observable<RemoteData<Bitstream>>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The pagination config used to display the values
|
* The pagination config used to display the values
|
||||||
*/
|
*/
|
||||||
@@ -151,6 +160,7 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy {
|
|||||||
this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false));
|
this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false));
|
||||||
}
|
}
|
||||||
this.updateParent(params.scope);
|
this.updateParent(params.scope);
|
||||||
|
this.updateLogo();
|
||||||
}));
|
}));
|
||||||
this.updateStartsWithTextOptions();
|
this.updateStartsWithTextOptions();
|
||||||
|
|
||||||
@@ -196,12 +206,31 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy {
|
|||||||
*/
|
*/
|
||||||
updateParent(scope: string) {
|
updateParent(scope: string) {
|
||||||
if (hasValue(scope)) {
|
if (hasValue(scope)) {
|
||||||
this.parent$ = this.dsoService.findById(scope).pipe(
|
const linksToFollow = () => {
|
||||||
|
return [followLink('logo')];
|
||||||
|
};
|
||||||
|
this.parent$ = this.dsoService.findById(scope,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
...linksToFollow() as FollowLinkConfig<DSpaceObject>[]).pipe(
|
||||||
getFirstSucceededRemoteData()
|
getFirstSucceededRemoteData()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the parent Community or Collection logo
|
||||||
|
*/
|
||||||
|
updateLogo() {
|
||||||
|
if (hasValue(this.parent$)) {
|
||||||
|
this.logo$ = this.parent$.pipe(
|
||||||
|
map((rd: RemoteData<Collection | Community>) => rd.payload),
|
||||||
|
filter((collectionOrCommunity: Collection | Community) => hasValue(collectionOrCommunity.logo)),
|
||||||
|
mergeMap((collectionOrCommunity: Collection | Community) => collectionOrCommunity.logo)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigate to the previous page
|
* Navigate to the previous page
|
||||||
*/
|
*/
|
||||||
|
@@ -4,16 +4,21 @@ import { BrowseByModule } from './browse-by.module';
|
|||||||
import { ItemDataService } from '../core/data/item-data.service';
|
import { ItemDataService } from '../core/data/item-data.service';
|
||||||
import { BrowseService } from '../core/browse/browse.service';
|
import { BrowseService } from '../core/browse/browse.service';
|
||||||
import { BrowseByGuard } from './browse-by-guard';
|
import { BrowseByGuard } from './browse-by-guard';
|
||||||
|
import { SharedBrowseByModule } from '../shared/browse-by/shared-browse-by.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
SharedBrowseByModule,
|
||||||
BrowseByRoutingModule,
|
BrowseByRoutingModule,
|
||||||
BrowseByModule.withEntryComponents()
|
BrowseByModule.withEntryComponents(),
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
ItemDataService,
|
ItemDataService,
|
||||||
BrowseService,
|
BrowseService,
|
||||||
BrowseByGuard
|
BrowseByGuard,
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class BrowseByPageModule {
|
export class BrowseByPageModule {
|
||||||
|
@@ -49,6 +49,7 @@ export class BrowseByTitlePageComponent extends BrowseByMetadataPageComponent {
|
|||||||
this.browseId = params.id || this.defaultBrowseId;
|
this.browseId = params.id || this.defaultBrowseId;
|
||||||
this.updatePageWithItems(browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), undefined, undefined);
|
this.updatePageWithItems(browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), undefined, undefined);
|
||||||
this.updateParent(params.scope);
|
this.updateParent(params.scope);
|
||||||
|
this.updateLogo();
|
||||||
}));
|
}));
|
||||||
this.updateStartsWithTextOptions();
|
this.updateStartsWithTextOptions();
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { BrowseByTitlePageComponent } from './browse-by-title-page/browse-by-title-page.component';
|
import { BrowseByTitlePageComponent } from './browse-by-title-page/browse-by-title-page.component';
|
||||||
import { SharedModule } from '../shared/shared.module';
|
|
||||||
import { BrowseByMetadataPageComponent } from './browse-by-metadata-page/browse-by-metadata-page.component';
|
import { BrowseByMetadataPageComponent } from './browse-by-metadata-page/browse-by-metadata-page.component';
|
||||||
import { BrowseByDatePageComponent } from './browse-by-date-page/browse-by-date-page.component';
|
import { BrowseByDatePageComponent } from './browse-by-date-page/browse-by-date-page.component';
|
||||||
import { BrowseBySwitcherComponent } from './browse-by-switcher/browse-by-switcher.component';
|
import { BrowseBySwitcherComponent } from './browse-by-switcher/browse-by-switcher.component';
|
||||||
@@ -10,6 +9,7 @@ import { ComcolModule } from '../shared/comcol/comcol.module';
|
|||||||
import { ThemedBrowseByMetadataPageComponent } from './browse-by-metadata-page/themed-browse-by-metadata-page.component';
|
import { ThemedBrowseByMetadataPageComponent } from './browse-by-metadata-page/themed-browse-by-metadata-page.component';
|
||||||
import { ThemedBrowseByDatePageComponent } from './browse-by-date-page/themed-browse-by-date-page.component';
|
import { ThemedBrowseByDatePageComponent } from './browse-by-date-page/themed-browse-by-date-page.component';
|
||||||
import { ThemedBrowseByTitlePageComponent } from './browse-by-title-page/themed-browse-by-title-page.component';
|
import { ThemedBrowseByTitlePageComponent } from './browse-by-title-page/themed-browse-by-title-page.component';
|
||||||
|
import { SharedBrowseByModule } from '../shared/browse-by/shared-browse-by.module';
|
||||||
|
|
||||||
const ENTRY_COMPONENTS = [
|
const ENTRY_COMPONENTS = [
|
||||||
// put only entry components that use custom decorator
|
// put only entry components that use custom decorator
|
||||||
@@ -25,9 +25,9 @@ const ENTRY_COMPONENTS = [
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
SharedBrowseByModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
ComcolModule,
|
ComcolModule,
|
||||||
SharedModule
|
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
BrowseBySwitcherComponent,
|
BrowseBySwitcherComponent,
|
||||||
@@ -45,7 +45,7 @@ export class BrowseByModule {
|
|||||||
*/
|
*/
|
||||||
static withEntryComponents() {
|
static withEntryComponents() {
|
||||||
return {
|
return {
|
||||||
ngModule: SharedModule,
|
ngModule: SharedBrowseByModule,
|
||||||
providers: ENTRY_COMPONENTS.map((component) => ({provide: component}))
|
providers: ENTRY_COMPONENTS.map((component) => ({provide: component}))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,12 @@ import { Observable, of as observableOf, of } from 'rxjs';
|
|||||||
import { RemoteData } from '../data/remote-data';
|
import { RemoteData } from '../data/remote-data';
|
||||||
import { Item } from '../shared/item.model';
|
import { Item } from '../shared/item.model';
|
||||||
|
|
||||||
import { ItemMock, MockBitstream1, MockBitstream3 } from '../../shared/mocks/item.mock';
|
import {
|
||||||
|
ItemMock,
|
||||||
|
MockBitstream1,
|
||||||
|
MockBitstream3,
|
||||||
|
MockBitstream2
|
||||||
|
} from '../../shared/mocks/item.mock';
|
||||||
import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
||||||
import { PaginatedList } from '../data/paginated-list.model';
|
import { PaginatedList } from '../data/paginated-list.model';
|
||||||
import { Bitstream } from '../shared/bitstream.model';
|
import { Bitstream } from '../shared/bitstream.model';
|
||||||
@@ -24,6 +29,7 @@ import { HardRedirectService } from '../services/hard-redirect.service';
|
|||||||
import { getMockStore } from '@ngrx/store/testing';
|
import { getMockStore } from '@ngrx/store/testing';
|
||||||
import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions';
|
import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions';
|
||||||
import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service';
|
import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service';
|
||||||
|
import { AppConfig } from '../../../config/app-config.interface';
|
||||||
|
|
||||||
describe('MetadataService', () => {
|
describe('MetadataService', () => {
|
||||||
let metadataService: MetadataService;
|
let metadataService: MetadataService;
|
||||||
@@ -44,6 +50,8 @@ describe('MetadataService', () => {
|
|||||||
let router: Router;
|
let router: Router;
|
||||||
let store;
|
let store;
|
||||||
|
|
||||||
|
let appConfig: AppConfig;
|
||||||
|
|
||||||
const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}};
|
const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}};
|
||||||
|
|
||||||
|
|
||||||
@@ -86,6 +94,14 @@ describe('MetadataService', () => {
|
|||||||
store = getMockStore({ initialState });
|
store = getMockStore({ initialState });
|
||||||
spyOn(store, 'dispatch');
|
spyOn(store, 'dispatch');
|
||||||
|
|
||||||
|
appConfig = {
|
||||||
|
item: {
|
||||||
|
bitstream: {
|
||||||
|
pageSize: 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as any;
|
||||||
|
|
||||||
metadataService = new MetadataService(
|
metadataService = new MetadataService(
|
||||||
router,
|
router,
|
||||||
translateService,
|
translateService,
|
||||||
@@ -98,6 +114,7 @@ describe('MetadataService', () => {
|
|||||||
rootService,
|
rootService,
|
||||||
store,
|
store,
|
||||||
hardRedirectService,
|
hardRedirectService,
|
||||||
|
appConfig,
|
||||||
authorizationService
|
authorizationService
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -358,29 +375,66 @@ describe('MetadataService', () => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should link to first Bitstream with allowed format', fakeAsync(() => {
|
describe(`when there's a bitstream with an allowed format on the first page`, () => {
|
||||||
const bitstreams = [MockBitstream3, MockBitstream3, MockBitstream1];
|
let bitstreams;
|
||||||
(bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams));
|
|
||||||
(bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues(
|
|
||||||
...mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)),
|
|
||||||
);
|
|
||||||
|
|
||||||
(metadataService as any).processRouteChange({
|
beforeEach(() => {
|
||||||
data: {
|
bitstreams = [MockBitstream2, MockBitstream3, MockBitstream1];
|
||||||
value: {
|
(bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams));
|
||||||
dso: createSuccessfulRemoteDataObject(ItemMock),
|
(bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues(
|
||||||
|
...mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should link to first Bitstream with allowed format', fakeAsync(() => {
|
||||||
|
(metadataService as any).processRouteChange({
|
||||||
|
data: {
|
||||||
|
value: {
|
||||||
|
dso: createSuccessfulRemoteDataObject(ItemMock),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
tick();
|
||||||
tick();
|
expect(meta.addTag).toHaveBeenCalledWith({
|
||||||
expect(meta.addTag).toHaveBeenCalledWith({
|
name: 'citation_pdf_url',
|
||||||
name: 'citation_pdf_url',
|
content: 'https://request.org/bitstreams/99b00f3c-1cc6-4689-8158-91965bee6b28/download'
|
||||||
content: 'https://request.org/bitstreams/cf9b0c8e-a1eb-4b65-afd0-567366448713/download'
|
});
|
||||||
});
|
}));
|
||||||
}));
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe(`when there's no bitstream with an allowed format on the first page`, () => {
|
||||||
|
let bitstreams;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
bitstreams = [MockBitstream1, MockBitstream3, MockBitstream2];
|
||||||
|
(bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams));
|
||||||
|
(bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues(
|
||||||
|
...mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`shouldn't add a citation_pdf_url meta tag`, fakeAsync(() => {
|
||||||
|
(metadataService as any).processRouteChange({
|
||||||
|
data: {
|
||||||
|
value: {
|
||||||
|
dso: createSuccessfulRemoteDataObject(ItemMock),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tick();
|
||||||
|
expect(meta.addTag).not.toHaveBeenCalledWith({
|
||||||
|
name: 'citation_pdf_url',
|
||||||
|
content: 'https://request.org/bitstreams/99b00f3c-1cc6-4689-8158-91965bee6b28/download'
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
describe('tagstore', () => {
|
describe('tagstore', () => {
|
||||||
beforeEach(fakeAsync(() => {
|
beforeEach(fakeAsync(() => {
|
||||||
(metadataService as any).processRouteChange({
|
(metadataService as any).processRouteChange({
|
||||||
|
@@ -1,14 +1,21 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable, Inject } from '@angular/core';
|
||||||
|
|
||||||
import { Meta, MetaDefinition, Title } from '@angular/platform-browser';
|
import { Meta, MetaDefinition, Title } from '@angular/platform-browser';
|
||||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||||
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
import { BehaviorSubject, combineLatest, EMPTY, Observable, of as observableOf } from 'rxjs';
|
import {
|
||||||
import { expand, filter, map, switchMap, take } from 'rxjs/operators';
|
BehaviorSubject,
|
||||||
|
combineLatest,
|
||||||
|
Observable,
|
||||||
|
of as observableOf,
|
||||||
|
concat as observableConcat,
|
||||||
|
EMPTY
|
||||||
|
} from 'rxjs';
|
||||||
|
import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators';
|
||||||
|
|
||||||
import { hasNoValue, hasValue } from '../../shared/empty.util';
|
import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util';
|
||||||
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
import { DSONameService } from '../breadcrumbs/dso-name.service';
|
||||||
import { BitstreamDataService } from '../data/bitstream-data.service';
|
import { BitstreamDataService } from '../data/bitstream-data.service';
|
||||||
import { BitstreamFormatDataService } from '../data/bitstream-format-data.service';
|
import { BitstreamFormatDataService } from '../data/bitstream-format-data.service';
|
||||||
@@ -37,6 +44,7 @@ import { coreSelector } from '../core.selectors';
|
|||||||
import { CoreState } from '../core-state.model';
|
import { CoreState } from '../core-state.model';
|
||||||
import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service';
|
import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service';
|
||||||
import { getDownloadableBitstream } from '../shared/bitstream.operators';
|
import { getDownloadableBitstream } from '../shared/bitstream.operators';
|
||||||
|
import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base selector function to select the metaTag section in the store
|
* The base selector function to select the metaTag section in the store
|
||||||
@@ -87,6 +95,7 @@ export class MetadataService {
|
|||||||
private rootService: RootDataService,
|
private rootService: RootDataService,
|
||||||
private store: Store<CoreState>,
|
private store: Store<CoreState>,
|
||||||
private hardRedirectService: HardRedirectService,
|
private hardRedirectService: HardRedirectService,
|
||||||
|
@Inject(APP_CONFIG) private appConfig: AppConfig,
|
||||||
private authorizationService: AuthorizationDataService
|
private authorizationService: AuthorizationDataService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
@@ -298,7 +307,13 @@ export class MetadataService {
|
|||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
followLink('primaryBitstream'),
|
followLink('primaryBitstream'),
|
||||||
followLink('bitstreams', {}, followLink('format')),
|
followLink('bitstreams', {
|
||||||
|
findListOptions: {
|
||||||
|
// limit the number of bitstreams used to find the citation pdf url to the number
|
||||||
|
// shown by default on an item page
|
||||||
|
elementsPerPage: this.appConfig.item.bitstream.pageSize
|
||||||
|
}
|
||||||
|
}, followLink('format')),
|
||||||
).pipe(
|
).pipe(
|
||||||
getFirstSucceededRemoteDataPayload(),
|
getFirstSucceededRemoteDataPayload(),
|
||||||
switchMap((bundle: Bundle) =>
|
switchMap((bundle: Bundle) =>
|
||||||
@@ -363,64 +378,45 @@ export class MetadataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For Items with more than one Bitstream (and no primary Bitstream), link to the first Bitstream with a MIME type
|
* For Items with more than one Bitstream (and no primary Bitstream), link to the first Bitstream
|
||||||
|
* with a MIME type.
|
||||||
|
*
|
||||||
|
* Note this will only check the current page (page size determined item.bitstream.pageSize in the
|
||||||
|
* config) of bitstreams for performance reasons.
|
||||||
|
* See https://github.com/DSpace/DSpace/issues/8648 for more info
|
||||||
|
*
|
||||||
* included in {@linkcode CITATION_PDF_URL_MIMETYPES}
|
* included in {@linkcode CITATION_PDF_URL_MIMETYPES}
|
||||||
* @param bitstreamRd
|
* @param bitstreamRd
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
private getFirstAllowedFormatBitstreamLink(bitstreamRd: RemoteData<PaginatedList<Bitstream>>): Observable<string> {
|
private getFirstAllowedFormatBitstreamLink(bitstreamRd: RemoteData<PaginatedList<Bitstream>>): Observable<string> {
|
||||||
return observableOf(bitstreamRd.payload).pipe(
|
if (hasValue(bitstreamRd.payload) && isNotEmpty(bitstreamRd.payload.page)) {
|
||||||
// Because there can be more than one page of bitstreams, this expand operator
|
// Retrieve the formats of all bitstreams in the page sequentially
|
||||||
// will retrieve them in turn. Due to the take(1) at the bottom, it will only
|
return observableConcat(
|
||||||
// retrieve pages until a match is found
|
...bitstreamRd.payload.page.map((bitstream: Bitstream) => bitstream.format.pipe(
|
||||||
expand((paginatedList: PaginatedList<Bitstream>) => {
|
getFirstSucceededRemoteDataPayload(),
|
||||||
if (hasNoValue(paginatedList.next)) {
|
// Keep the original bitstream, because it, not the format, is what we'll need
|
||||||
// If there's no next page, stop.
|
// for the link at the end
|
||||||
return EMPTY;
|
map((format: BitstreamFormat) => [bitstream, format])
|
||||||
} else {
|
))
|
||||||
// Otherwise retrieve the next page
|
).pipe(
|
||||||
return this.bitstreamDataService.findListByHref(
|
// Verify that the bitstream is downloadable
|
||||||
paginatedList.next,
|
mergeMap(([bitstream, format]: [Bitstream, BitstreamFormat]) => observableOf(bitstream).pipe(
|
||||||
undefined,
|
getDownloadableBitstream(this.authorizationService),
|
||||||
true,
|
map((bit: Bitstream) => [bit, format])
|
||||||
true,
|
)),
|
||||||
followLink('format')
|
// Filter out only pairs with whitelisted formats and non-null bitstreams, null from download check
|
||||||
).pipe(
|
filter(([bitstream, format]: [Bitstream, BitstreamFormat]) =>
|
||||||
getFirstCompletedRemoteData(),
|
hasValue(format) && hasValue(bitstream) && this.CITATION_PDF_URL_MIMETYPES.includes(format.mimetype)),
|
||||||
map((next: RemoteData<PaginatedList<Bitstream>>) => {
|
// We only need 1
|
||||||
if (hasValue(next.payload)) {
|
take(1),
|
||||||
return next.payload;
|
// Emit the link of the match
|
||||||
} else {
|
// tap((v) => console.log('result', v)),
|
||||||
return EMPTY;
|
map(([bitstream, ]: [Bitstream, BitstreamFormat]) => getBitstreamDownloadRoute(bitstream))
|
||||||
}
|
);
|
||||||
})
|
} else {
|
||||||
);
|
return EMPTY;
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
// Return the array of bitstreams inside each paginated list
|
|
||||||
map((paginatedList: PaginatedList<Bitstream>) => paginatedList.page),
|
|
||||||
// Emit the bitstreams in the list one at a time
|
|
||||||
switchMap((bitstreams: Bitstream[]) => bitstreams),
|
|
||||||
// Retrieve the format for each bitstream
|
|
||||||
switchMap((bitstream: Bitstream) => bitstream.format.pipe(
|
|
||||||
getFirstSucceededRemoteDataPayload(),
|
|
||||||
// Keep the original bitstream, because it, not the format, is what we'll need
|
|
||||||
// for the link at the end
|
|
||||||
map((format: BitstreamFormat) => [bitstream, format])
|
|
||||||
)),
|
|
||||||
// Check if bitstream downloadable
|
|
||||||
switchMap(([bitstream, format]: [Bitstream, BitstreamFormat]) => observableOf(bitstream).pipe(
|
|
||||||
getDownloadableBitstream(this.authorizationService),
|
|
||||||
map((bit: Bitstream) => [bit, format])
|
|
||||||
)),
|
|
||||||
// Filter out only pairs with whitelisted formats and non-null bitstreams, null from download check
|
|
||||||
filter(([bitstream, format]: [Bitstream, BitstreamFormat]) =>
|
|
||||||
hasValue(format) && hasValue(bitstream) && this.CITATION_PDF_URL_MIMETYPES.includes(format.mimetype)),
|
|
||||||
// We only need 1
|
|
||||||
take(1),
|
|
||||||
// Emit the link of the match
|
|
||||||
map(([bitstream, ]: [Bitstream, BitstreamFormat]) => getBitstreamDownloadRoute(bitstream))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
@import '../../../../../styles/variables.scss';
|
@import '../../../../../styles/variables.scss';
|
||||||
|
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -34,6 +34,7 @@ import { VersionHistoryDataService } from '../../../../core/data/version-history
|
|||||||
import { VersionDataService } from '../../../../core/data/version-data.service';
|
import { VersionDataService } from '../../../../core/data/version-data.service';
|
||||||
import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service';
|
import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service';
|
||||||
import { SearchService } from '../../../../core/shared/search/search.service';
|
import { SearchService } from '../../../../core/shared/search/search.service';
|
||||||
|
import { mockRouteService } from '../../../../item-page/simple/item-types/shared/item.component.spec';
|
||||||
|
|
||||||
let comp: JournalComponent;
|
let comp: JournalComponent;
|
||||||
let fixture: ComponentFixture<JournalComponent>;
|
let fixture: ComponentFixture<JournalComponent>;
|
||||||
@@ -99,7 +100,7 @@ describe('JournalComponent', () => {
|
|||||||
{ provide: BitstreamDataService, useValue: mockBitstreamDataService },
|
{ provide: BitstreamDataService, useValue: mockBitstreamDataService },
|
||||||
{ provide: WorkspaceitemDataService, useValue: {} },
|
{ provide: WorkspaceitemDataService, useValue: {} },
|
||||||
{ provide: SearchService, useValue: {} },
|
{ provide: SearchService, useValue: {} },
|
||||||
{ provide: RouteService, useValue: {} }
|
{ provide: RouteService, useValue: mockRouteService }
|
||||||
],
|
],
|
||||||
|
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
@@ -20,6 +20,7 @@ import { JournalVolumeSidebarSearchListElementComponent } from './item-list-elem
|
|||||||
import { JournalIssueSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/journal-issue/journal-issue-sidebar-search-list-element.component';
|
import { JournalIssueSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/journal-issue/journal-issue-sidebar-search-list-element.component';
|
||||||
import { JournalSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/journal/journal-sidebar-search-list-element.component';
|
import { JournalSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/journal/journal-sidebar-search-list-element.component';
|
||||||
import { ItemSharedModule } from '../../item-page/item-shared.module';
|
import { ItemSharedModule } from '../../item-page/item-shared.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module';
|
||||||
|
|
||||||
const ENTRY_COMPONENTS = [
|
const ENTRY_COMPONENTS = [
|
||||||
// put only entry components that use custom decorator
|
// put only entry components that use custom decorator
|
||||||
@@ -47,7 +48,8 @@ const ENTRY_COMPONENTS = [
|
|||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
ItemSharedModule,
|
ItemSharedModule,
|
||||||
SharedModule
|
SharedModule,
|
||||||
|
ResultsBackButtonModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
...ENTRY_COMPONENTS
|
...ENTRY_COMPONENTS
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field class="mr-auto" [item]="object">
|
<ds-item-page-title-field class="mr-auto" [item]="object">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -29,6 +29,7 @@ import { OrgUnitSidebarSearchListElementComponent } from './item-list-elements/s
|
|||||||
import { PersonSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/person/person-sidebar-search-list-element.component';
|
import { PersonSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/person/person-sidebar-search-list-element.component';
|
||||||
import { ProjectSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/project/project-sidebar-search-list-element.component';
|
import { ProjectSidebarSearchListElementComponent } from './item-list-elements/sidebar-search-list-elements/project/project-sidebar-search-list-element.component';
|
||||||
import { ItemSharedModule } from '../../item-page/item-shared.module';
|
import { ItemSharedModule } from '../../item-page/item-shared.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module';
|
||||||
|
|
||||||
const ENTRY_COMPONENTS = [
|
const ENTRY_COMPONENTS = [
|
||||||
// put only entry components that use custom decorator
|
// put only entry components that use custom decorator
|
||||||
@@ -69,7 +70,8 @@ const COMPONENTS = [
|
|||||||
CommonModule,
|
CommonModule,
|
||||||
ItemSharedModule,
|
ItemSharedModule,
|
||||||
SharedModule,
|
SharedModule,
|
||||||
NgbTooltipModule
|
NgbTooltipModule,
|
||||||
|
ResultsBackButtonModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
...COMPONENTS,
|
...COMPONENTS,
|
||||||
|
@@ -5,12 +5,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-9 float-left action-button">
|
<div class="col-9 float-left action-button">
|
||||||
<span *ngIf="operation.authorized">
|
<span *ngIf="operation.authorized">
|
||||||
<button class="btn btn-outline-primary" [disabled]="operation.disabled" [routerLink]="operation.operationUrl">
|
<button class="btn btn-outline-primary" [disabled]="operation.disabled" [routerLink]="operation.operationUrl" [attr.aria-label]="'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate">
|
||||||
{{'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate}}
|
{{'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<span *ngIf="!operation.authorized" [ngbTooltip]="'item.edit.tabs.status.buttons.unauthorized' | translate">
|
<span *ngIf="!operation.authorized" [ngbTooltip]="'item.edit.tabs.status.buttons.unauthorized' | translate">
|
||||||
<button class="btn btn-outline-primary" [disabled]="true">
|
<button class="btn btn-outline-primary" [disabled]="true" [attr.aria-label]="'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate">
|
||||||
{{'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate}}
|
{{'item.edit.tabs.status.buttons.' + operation.operationKey + '.button' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
@@ -47,6 +47,7 @@ import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
|
|||||||
import { OrcidSyncSettingsComponent } from './orcid-page/orcid-sync-settings/orcid-sync-settings.component';
|
import { OrcidSyncSettingsComponent } from './orcid-page/orcid-sync-settings/orcid-sync-settings.component';
|
||||||
import { OrcidQueueComponent } from './orcid-page/orcid-queue/orcid-queue.component';
|
import { OrcidQueueComponent } from './orcid-page/orcid-queue/orcid-queue.component';
|
||||||
import { UploadModule } from '../shared/upload/upload.module';
|
import { UploadModule } from '../shared/upload/upload.module';
|
||||||
|
import { ResultsBackButtonModule } from '../shared/results-back-button/results-back-button.module';
|
||||||
import { ItemAlertsComponent } from './alerts/item-alerts.component';
|
import { ItemAlertsComponent } from './alerts/item-alerts.component';
|
||||||
import { ItemVersionsModule } from './versions/item-versions.module';
|
import { ItemVersionsModule } from './versions/item-versions.module';
|
||||||
import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
|
import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
|
||||||
@@ -107,7 +108,8 @@ const DECLARATIONS = [
|
|||||||
ResearchEntitiesModule.withEntryComponents(),
|
ResearchEntitiesModule.withEntryComponents(),
|
||||||
NgxGalleryModule,
|
NgxGalleryModule,
|
||||||
NgbAccordionModule,
|
NgbAccordionModule,
|
||||||
UploadModule,
|
ResultsBackButtonModule,
|
||||||
|
UploadModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
...DECLARATIONS,
|
...DECLARATIONS,
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="row" *ngIf="iiifEnabled">
|
<div class="row" *ngIf="iiifEnabled">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<ds-mirador-viewer id="iiif-viewer"
|
<ds-mirador-viewer id="iiif-viewer"
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
@import '../../../../../styles/variables.scss';
|
@import '../../../../../styles/variables.scss';
|
||||||
|
|
||||||
|
@@ -163,12 +163,12 @@ describe('PublicationComponent', () => {
|
|||||||
|
|
||||||
describe('with IIIF viewer and search', () => {
|
describe('with IIIF viewer and search', () => {
|
||||||
|
|
||||||
|
const localMockRouteService = {
|
||||||
|
getPreviousUrl(): Observable<string> {
|
||||||
|
return of('/search?query=test%20query&fakeParam=true');
|
||||||
|
}
|
||||||
|
};
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
const localMockRouteService = {
|
|
||||||
getPreviousUrl(): Observable<string> {
|
|
||||||
return of('/search?query=test%20query&fakeParam=true');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const iiifEnabledMap: MetadataMap = {
|
const iiifEnabledMap: MetadataMap = {
|
||||||
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
||||||
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
||||||
@@ -193,13 +193,12 @@ describe('PublicationComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('with IIIF viewer and search but no previous search query', () => {
|
describe('with IIIF viewer and search but no previous search query', () => {
|
||||||
|
const localMockRouteService = {
|
||||||
|
getPreviousUrl(): Observable<string> {
|
||||||
|
return of('/item');
|
||||||
|
}
|
||||||
|
};
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
const localMockRouteService = {
|
|
||||||
getPreviousUrl(): Observable<string> {
|
|
||||||
return of('/item');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const iiifEnabledMap: MetadataMap = {
|
const iiifEnabledMap: MetadataMap = {
|
||||||
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
||||||
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
||||||
|
@@ -39,6 +39,11 @@ import { RouterTestingModule } from '@angular/router/testing';
|
|||||||
import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service';
|
import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service';
|
||||||
import { ResearcherProfileDataService } from '../../../../core/profile/researcher-profile-data.service';
|
import { ResearcherProfileDataService } from '../../../../core/profile/researcher-profile-data.service';
|
||||||
|
|
||||||
|
import { buildPaginatedList } from '../../../../core/data/paginated-list.model';
|
||||||
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { ItemComponent } from './item.component';
|
||||||
|
|
||||||
export function getIIIFSearchEnabled(enabled: boolean): MetadataValue {
|
export function getIIIFSearchEnabled(enabled: boolean): MetadataValue {
|
||||||
return Object.assign(new MetadataValue(), {
|
return Object.assign(new MetadataValue(), {
|
||||||
'value': enabled,
|
'value': enabled,
|
||||||
@@ -59,7 +64,11 @@ export function getIIIFEnabled(enabled: boolean): MetadataValue {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const mockRouteService = jasmine.createSpyObj('RouteService', ['getPreviousUrl']);
|
export const mockRouteService = {
|
||||||
|
getPreviousUrl(): Observable<string> {
|
||||||
|
return observableOf('');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a generic test for an item-page-fields component using a mockItem and the type of component
|
* Create a generic test for an item-page-fields component using a mockItem and the type of component
|
||||||
@@ -114,7 +123,7 @@ export function getItemPageFieldsTest(mockItem: Item, component) {
|
|||||||
{ provide: BitstreamDataService, useValue: mockBitstreamDataService },
|
{ provide: BitstreamDataService, useValue: mockBitstreamDataService },
|
||||||
{ provide: WorkspaceitemDataService, useValue: {} },
|
{ provide: WorkspaceitemDataService, useValue: {} },
|
||||||
{ provide: SearchService, useValue: {} },
|
{ provide: SearchService, useValue: {} },
|
||||||
{ provide: RouteService, useValue: {} },
|
{ provide: RouteService, useValue: mockRouteService },
|
||||||
{ provide: AuthorizationDataService, useValue: authorizationService },
|
{ provide: AuthorizationDataService, useValue: authorizationService },
|
||||||
{ provide: ResearcherProfileDataService, useValue: {} }
|
{ provide: ResearcherProfileDataService, useValue: {} }
|
||||||
],
|
],
|
||||||
@@ -376,4 +385,110 @@ describe('ItemComponent', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
|
bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])),
|
||||||
|
metadata: {
|
||||||
|
'publicationissue.issueNumber': [
|
||||||
|
{
|
||||||
|
language: 'en_US',
|
||||||
|
value: '1234'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'dc.description': [
|
||||||
|
{
|
||||||
|
language: 'en_US',
|
||||||
|
value: 'desc'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
});
|
||||||
|
describe('back to results', () => {
|
||||||
|
let comp: ItemComponent;
|
||||||
|
let fixture: ComponentFixture<any>;
|
||||||
|
let router: Router;
|
||||||
|
|
||||||
|
const searchUrl = '/search?query=test&spc.page=2';
|
||||||
|
const browseUrl = '/browse/title?scope=0cc&bbm.page=3';
|
||||||
|
const recentSubmissionsUrl = '/collections/be7b8430-77a5-4016-91c9-90863e50583a?cp.page=3';
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [
|
||||||
|
TranslateModule.forRoot({
|
||||||
|
loader: {
|
||||||
|
provide: TranslateLoader,
|
||||||
|
useClass: TranslateLoaderMock
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
RouterTestingModule,
|
||||||
|
],
|
||||||
|
declarations: [ItemComponent, GenericItemPageFieldComponent, TruncatePipe ],
|
||||||
|
providers: [
|
||||||
|
{ provide: ItemDataService, useValue: {} },
|
||||||
|
{ provide: TruncatableService, useValue: {} },
|
||||||
|
{ provide: RelationshipDataService, useValue: {} },
|
||||||
|
{ provide: ObjectCacheService, useValue: {} },
|
||||||
|
{ provide: UUIDService, useValue: {} },
|
||||||
|
{ provide: Store, useValue: {} },
|
||||||
|
{ provide: RemoteDataBuildService, useValue: {} },
|
||||||
|
{ provide: CommunityDataService, useValue: {} },
|
||||||
|
{ provide: HALEndpointService, useValue: {} },
|
||||||
|
{ provide: HttpClient, useValue: {} },
|
||||||
|
{ provide: DSOChangeAnalyzer, useValue: {} },
|
||||||
|
{ provide: VersionHistoryDataService, useValue: {} },
|
||||||
|
{ provide: VersionDataService, useValue: {} },
|
||||||
|
{ provide: NotificationsService, useValue: {} },
|
||||||
|
{ provide: DefaultChangeAnalyzer, useValue: {} },
|
||||||
|
{ provide: BitstreamDataService, useValue: {} },
|
||||||
|
{ provide: WorkspaceitemDataService, useValue: {} },
|
||||||
|
{ provide: SearchService, useValue: {} },
|
||||||
|
{ provide: RouteService, useValue: mockRouteService },
|
||||||
|
{ provide: AuthorizationDataService, useValue: {} },
|
||||||
|
{ provide: ResearcherProfileDataService, useValue: {} }
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(ItemComponent, {
|
||||||
|
set: {changeDetection: ChangeDetectionStrategy.Default}
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
router = TestBed.inject(Router);
|
||||||
|
spyOn(router, 'navigateByUrl');
|
||||||
|
TestBed.compileComponents();
|
||||||
|
fixture = TestBed.createComponent(ItemComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should hide back button',() => {
|
||||||
|
spyOn(mockRouteService, 'getPreviousUrl').and.returnValue(observableOf('/item'));
|
||||||
|
comp.showBackButton.subscribe((val) => {
|
||||||
|
expect(val).toBeFalse();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should show back button for search', () => {
|
||||||
|
spyOn(mockRouteService, 'getPreviousUrl').and.returnValue(observableOf(searchUrl));
|
||||||
|
comp.ngOnInit();
|
||||||
|
comp.showBackButton.subscribe((val) => {
|
||||||
|
expect(val).toBeTrue();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should show back button for browse', () => {
|
||||||
|
spyOn(mockRouteService, 'getPreviousUrl').and.returnValue(observableOf(browseUrl));
|
||||||
|
comp.ngOnInit();
|
||||||
|
comp.showBackButton.subscribe((val) => {
|
||||||
|
expect(val).toBeTrue();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should show back button for recent submissions', () => {
|
||||||
|
spyOn(mockRouteService, 'getPreviousUrl').and.returnValue(observableOf(recentSubmissionsUrl));
|
||||||
|
comp.ngOnInit();
|
||||||
|
comp.showBackButton.subscribe((val) => {
|
||||||
|
expect(val).toBeTrue();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@@ -5,6 +5,8 @@ import { getItemPageRoute } from '../../../item-page-routing-paths';
|
|||||||
import { RouteService } from '../../../../core/services/route.service';
|
import { RouteService } from '../../../../core/services/route.service';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { getDSpaceQuery, isIiifEnabled, isIiifSearchEnabled } from './item-iiif-utils';
|
import { getDSpaceQuery, isIiifEnabled, isIiifSearchEnabled } from './item-iiif-utils';
|
||||||
|
import { filter, map, take } from 'rxjs/operators';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-item',
|
selector: 'ds-item',
|
||||||
@@ -16,6 +18,17 @@ import { getDSpaceQuery, isIiifEnabled, isIiifSearchEnabled } from './item-iiif-
|
|||||||
export class ItemComponent implements OnInit {
|
export class ItemComponent implements OnInit {
|
||||||
@Input() object: Item;
|
@Input() object: Item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This regex matches previous routes. The button is shown
|
||||||
|
* for matching paths and hidden in other cases.
|
||||||
|
*/
|
||||||
|
previousRoute = /^(\/search|\/browse|\/collections|\/admin\/search|\/mydspace)/;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to show or hide the back to results button in the view.
|
||||||
|
*/
|
||||||
|
showBackButton: Observable<boolean>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Route to the item page
|
* Route to the item page
|
||||||
*/
|
*/
|
||||||
@@ -38,12 +51,33 @@ export class ItemComponent implements OnInit {
|
|||||||
|
|
||||||
mediaViewer;
|
mediaViewer;
|
||||||
|
|
||||||
constructor(protected routeService: RouteService) {
|
constructor(protected routeService: RouteService,
|
||||||
|
protected router: Router) {
|
||||||
this.mediaViewer = environment.mediaViewer;
|
this.mediaViewer = environment.mediaViewer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function used to return to list from the item.
|
||||||
|
*/
|
||||||
|
back = () => {
|
||||||
|
this.routeService.getPreviousUrl().pipe(
|
||||||
|
take(1)
|
||||||
|
).subscribe(
|
||||||
|
(url => {
|
||||||
|
this.router.navigateByUrl(url);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
|
|
||||||
this.itemPageRoute = getItemPageRoute(this.object);
|
this.itemPageRoute = getItemPageRoute(this.object);
|
||||||
|
// hide/show the back button
|
||||||
|
this.showBackButton = this.routeService.getPreviousUrl().pipe(
|
||||||
|
filter(url => this.previousRoute.test(url)),
|
||||||
|
take(1),
|
||||||
|
map(() => true)
|
||||||
|
);
|
||||||
// check to see if iiif viewer is required.
|
// check to see if iiif viewer is required.
|
||||||
this.iiifEnabled = isIiifEnabled(this.object);
|
this.iiifEnabled = isIiifEnabled(this.object);
|
||||||
this.iiifSearchEnabled = isIiifSearchEnabled(this.object);
|
this.iiifSearchEnabled = isIiifSearchEnabled(this.object);
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<ds-themed-results-back-button *ngIf="showBackButton | async" [back]="back"></ds-themed-results-back-button>
|
||||||
<div class="row" *ngIf="iiifEnabled">
|
<div class="row" *ngIf="iiifEnabled">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<ds-mirador-viewer id="iiif-viewer"
|
<ds-mirador-viewer id="iiif-viewer"
|
||||||
@@ -7,6 +8,7 @@
|
|||||||
</ds-mirador-viewer>
|
</ds-mirador-viewer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex flex-row">
|
<div class="d-flex flex-row">
|
||||||
<ds-item-page-title-field [item]="object" class="mr-auto">
|
<ds-item-page-title-field [item]="object" class="mr-auto">
|
||||||
</ds-item-page-title-field>
|
</ds-item-page-title-field>
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
@import '../../../../../styles/variables.scss';
|
@import '../../../../../styles/variables.scss';
|
||||||
|
|
||||||
|
@@ -169,13 +169,12 @@ describe('UntypedItemComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('with IIIF viewer and search', () => {
|
describe('with IIIF viewer and search', () => {
|
||||||
|
const localMockRouteService = {
|
||||||
|
getPreviousUrl(): Observable<string> {
|
||||||
|
return of('/search?query=test%20query&fakeParam=true');
|
||||||
|
}
|
||||||
|
};
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
const localMockRouteService = {
|
|
||||||
getPreviousUrl(): Observable<string> {
|
|
||||||
return of('/search?query=test%20query&fakeParam=true');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const iiifEnabledMap: MetadataMap = {
|
const iiifEnabledMap: MetadataMap = {
|
||||||
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
||||||
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
||||||
@@ -183,6 +182,7 @@ describe('UntypedItemComponent', () => {
|
|||||||
TestBed.overrideProvider(RouteService, {useValue: localMockRouteService});
|
TestBed.overrideProvider(RouteService, {useValue: localMockRouteService});
|
||||||
TestBed.compileComponents();
|
TestBed.compileComponents();
|
||||||
fixture = TestBed.createComponent(UntypedItemComponent);
|
fixture = TestBed.createComponent(UntypedItemComponent);
|
||||||
|
spyOn(localMockRouteService, 'getPreviousUrl').and.callThrough();
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = getItem(iiifEnabledMap);
|
comp.object = getItem(iiifEnabledMap);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
@@ -196,17 +196,16 @@ describe('UntypedItemComponent', () => {
|
|||||||
it('should retrieve the query term for previous route', (): void => {
|
it('should retrieve the query term for previous route', (): void => {
|
||||||
expect(comp.iiifQuery$.subscribe(result => expect(result).toEqual('test query')));
|
expect(comp.iiifQuery$.subscribe(result => expect(result).toEqual('test query')));
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with IIIF viewer and search but no previous search query', () => {
|
describe('with IIIF viewer and search but no previous search query', () => {
|
||||||
|
|
||||||
|
const localMockRouteService = {
|
||||||
|
getPreviousUrl(): Observable<string> {
|
||||||
|
return of('/item');
|
||||||
|
}
|
||||||
|
};
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
const localMockRouteService = {
|
|
||||||
getPreviousUrl(): Observable<string> {
|
|
||||||
return of('/item');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const iiifEnabledMap: MetadataMap = {
|
const iiifEnabledMap: MetadataMap = {
|
||||||
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
'dspace.iiif.enabled': [getIIIFEnabled(true)],
|
||||||
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
'iiif.search.enabled': [getIIIFSearchEnabled(true)],
|
||||||
@@ -214,6 +213,7 @@ describe('UntypedItemComponent', () => {
|
|||||||
TestBed.overrideProvider(RouteService, {useValue: localMockRouteService});
|
TestBed.overrideProvider(RouteService, {useValue: localMockRouteService});
|
||||||
TestBed.compileComponents();
|
TestBed.compileComponents();
|
||||||
fixture = TestBed.createComponent(UntypedItemComponent);
|
fixture = TestBed.createComponent(UntypedItemComponent);
|
||||||
|
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = getItem(iiifEnabledMap);
|
comp.object = getItem(iiifEnabledMap);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@@ -31,13 +31,13 @@ export class VersionedItemComponent extends ItemComponent {
|
|||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
private versionService: VersionDataService,
|
private versionService: VersionDataService,
|
||||||
private itemVersionShared: ItemVersionsSharedService,
|
private itemVersionShared: ItemVersionsSharedService,
|
||||||
private router: Router,
|
protected router: Router,
|
||||||
private workspaceItemDataService: WorkspaceitemDataService,
|
private workspaceItemDataService: WorkspaceitemDataService,
|
||||||
private searchService: SearchService,
|
private searchService: SearchService,
|
||||||
private itemService: ItemDataService,
|
private itemService: ItemDataService,
|
||||||
protected routeService: RouteService
|
protected routeService: RouteService,
|
||||||
) {
|
) {
|
||||||
super(routeService);
|
super(routeService, router);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
<ng-container *ngComponentOutlet="getStartsWithComponent(); injector: objectInjector;"></ng-container>
|
<ng-container *ngComponentOutlet="getStartsWithComponent(); injector: objectInjector;"></ng-container>
|
||||||
<div *ngIf="objects?.hasSucceeded && !objects?.isLoading && objects?.payload?.page.length > 0" @fadeIn>
|
<div *ngIf="objects?.hasSucceeded && !objects?.isLoading && objects?.payload?.page.length > 0" @fadeIn>
|
||||||
<div *ngIf="shouldDisplayResetButton$ |async" class="mb-2 reset">
|
<div *ngIf="shouldDisplayResetButton$ |async" class="mb-2 reset">
|
||||||
<button class="btn btn-secondary" (click)="back()"><i class="fas fa-arrow-left"></i> {{'browse.back.all-results' | translate}}</button>
|
<ds-themed-results-back-button [back]="back" [buttonLabel]="buttonLabel"></ds-themed-results-back-button>
|
||||||
</div>
|
</div>
|
||||||
<ds-viewable-collection
|
<ds-viewable-collection
|
||||||
[config]="paginationConfig"
|
[config]="paginationConfig"
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<ds-error *ngIf="objects?.hasFailed" message="{{'error.browse-by' | translate}}"></ds-error>
|
<ds-error *ngIf="objects?.hasFailed" message="{{'error.browse-by' | translate}}"></ds-error>
|
||||||
<div *ngIf="!objects?.isLoading && objects?.payload?.page.length === 0">
|
<div *ngIf="!objects?.isLoading && objects?.payload?.page.length === 0">
|
||||||
<div *ngIf="shouldDisplayResetButton$ |async" class="d-inline-block mb-4 reset">
|
<div *ngIf="shouldDisplayResetButton$ |async" class="d-inline-block mb-4 reset">
|
||||||
<button class="btn btn-secondary" (click)="back()"><i class="fas fa-arrow-left"></i> {{'browse.back.all-results' | translate}}</button>
|
<ds-themed-results-back-button [back]="back" [buttonLabel]="buttonLabel"></ds-themed-results-back-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="alert alert-info w-100" role="alert">
|
<div class="alert alert-info w-100" role="alert">
|
||||||
{{'browse.empty' | translate}}
|
{{'browse.empty' | translate}}
|
||||||
|
@@ -44,6 +44,9 @@ import { ConfigurationProperty } from '../../core/shared/configuration-property.
|
|||||||
import { SearchConfigurationServiceStub } from '../testing/search-configuration-service.stub';
|
import { SearchConfigurationServiceStub } from '../testing/search-configuration-service.stub';
|
||||||
import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
|
import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
|
||||||
import { getMockThemeService } from '../mocks/theme-service.mock';
|
import { getMockThemeService } from '../mocks/theme-service.mock';
|
||||||
|
import { SharedModule } from '../shared.module';
|
||||||
|
import { BrowseByRoutingModule } from '../../browse-by/browse-by-routing.module';
|
||||||
|
import { AccessControlRoutingModule } from '../../access-control/access-control-routing.module';
|
||||||
|
|
||||||
@listableObjectComponent(BrowseEntry, ViewMode.ListElement, DEFAULT_CONTEXT, 'custom')
|
@listableObjectComponent(BrowseEntry, ViewMode.ListElement, DEFAULT_CONTEXT, 'custom')
|
||||||
@Component({
|
@Component({
|
||||||
@@ -112,7 +115,10 @@ describe('BrowseByComponent', () => {
|
|||||||
themeService = getMockThemeService('dspace');
|
themeService = getMockThemeService('dspace');
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
BrowseByRoutingModule,
|
||||||
|
AccessControlRoutingModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
|
SharedModule,
|
||||||
NgbModule,
|
NgbModule,
|
||||||
TranslateModule.forRoot({
|
TranslateModule.forRoot({
|
||||||
loader: {
|
loader: {
|
||||||
@@ -123,7 +129,7 @@ describe('BrowseByComponent', () => {
|
|||||||
RouterTestingModule,
|
RouterTestingModule,
|
||||||
NoopAnimationsModule
|
NoopAnimationsModule
|
||||||
],
|
],
|
||||||
declarations: [],
|
declarations: [BrowseByComponent],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: SearchConfigurationService, useValue: new SearchConfigurationServiceStub() },
|
{ provide: SearchConfigurationService, useValue: new SearchConfigurationServiceStub() },
|
||||||
{ provide: ConfigurationDataService, useValue: configurationDataService },
|
{ provide: ConfigurationDataService, useValue: configurationDataService },
|
||||||
@@ -242,16 +248,5 @@ describe('BrowseByComponent', () => {
|
|||||||
expect(button).toBeDefined();
|
expect(button).toBeDefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('back', () => {
|
|
||||||
it('should navigate back to the main browse page', () => {
|
|
||||||
const id = 'test-pagination';
|
|
||||||
comp.back();
|
|
||||||
expect(paginationService.updateRoute).toHaveBeenCalledWith(id, {page: 1}, {
|
|
||||||
value: null,
|
|
||||||
startsWith: null,
|
|
||||||
[id + '.return']: null
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@@ -12,6 +12,7 @@ import { ViewMode } from '../../core/shared/view-mode.model';
|
|||||||
import { RouteService } from '../../core/services/route.service';
|
import { RouteService } from '../../core/services/route.service';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
import { hasValue } from '../empty.util';
|
import { hasValue } from '../empty.util';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-browse-by',
|
selector: 'ds-browse-by',
|
||||||
@@ -124,11 +125,25 @@ export class BrowseByComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
public constructor(private injector: Injector,
|
public constructor(private injector: Injector,
|
||||||
protected paginationService: PaginationService,
|
protected paginationService: PaginationService,
|
||||||
|
protected translateService: TranslateService,
|
||||||
private routeService: RouteService,
|
private routeService: RouteService,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The label used by the back button.
|
||||||
|
*/
|
||||||
|
buttonLabel = this.translateService.get('browse.back.all-results');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function used for back navigation in metadata browse.
|
||||||
|
*/
|
||||||
|
back = () => {
|
||||||
|
const page = +this.previousPage$.value > 1 ? +this.previousPage$.value : 1;
|
||||||
|
this.paginationService.updateRoute(this.paginationConfig.id, {page: page}, {[this.paginationConfig.id + '.return']: null, value: null, startsWith: null});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go to the previous page
|
* Go to the previous page
|
||||||
*/
|
*/
|
||||||
@@ -184,14 +199,6 @@ export class BrowseByComponent implements OnInit, OnDestroy {
|
|||||||
this.sub = this.routeService.getQueryParameterValue(this.paginationConfig.id + '.return').subscribe(this.previousPage$);
|
this.sub = this.routeService.getQueryParameterValue(this.paginationConfig.id + '.return').subscribe(this.previousPage$);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Navigate back to the previous browse by page
|
|
||||||
*/
|
|
||||||
back() {
|
|
||||||
const page = +this.previousPage$.value > 1 ? +this.previousPage$.value : 1;
|
|
||||||
this.paginationService.updateRoute(this.paginationConfig.id, {page: page}, {[this.paginationConfig.id + '.return']: null, value: null, startsWith: null});
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
if (this.sub) {
|
if (this.sub) {
|
||||||
this.sub.unsubscribe();
|
this.sub.unsubscribe();
|
||||||
|
25
src/app/shared/browse-by/shared-browse-by.module.ts
Normal file
25
src/app/shared/browse-by/shared-browse-by.module.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { BrowseByComponent } from './browse-by.component';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { SharedModule } from '../shared.module';
|
||||||
|
import { ResultsBackButtonModule } from '../results-back-button/results-back-button.module';
|
||||||
|
import { BrowseByRoutingModule } from '../../browse-by/browse-by-routing.module';
|
||||||
|
import { AccessControlRoutingModule } from '../../access-control/access-control-routing.module';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
BrowseByComponent,
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
ResultsBackButtonModule,
|
||||||
|
BrowseByRoutingModule,
|
||||||
|
AccessControlRoutingModule,
|
||||||
|
CommonModule,
|
||||||
|
SharedModule,
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
BrowseByComponent,
|
||||||
|
SharedModule,
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class SharedBrowseByModule { }
|
@@ -0,0 +1,5 @@
|
|||||||
|
<button class="btn btn-secondary btn-sm mb-2 ng-tns-c242-28" (click)="back()">
|
||||||
|
<i _ngcontent-dspace-angular-c242="" class="fas fa-arrow-left ng-tns-c242-3"></i>
|
||||||
|
{{this.buttonLabel | async}}
|
||||||
|
</button>
|
||||||
|
|
@@ -0,0 +1,73 @@
|
|||||||
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { ResultsBackButtonComponent } from './results-back-button.component';
|
||||||
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||||
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { RouterTestingModule } from '@angular/router/testing';
|
||||||
|
import { of } from 'rxjs';
|
||||||
|
|
||||||
|
describe('ResultsBackButtonComponent', () => {
|
||||||
|
|
||||||
|
let component: ResultsBackButtonComponent;
|
||||||
|
let fixture: ComponentFixture<ResultsBackButtonComponent>;
|
||||||
|
|
||||||
|
const translate = {
|
||||||
|
get: jasmine.createSpy('get').and.returnValue(of('item button')),
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('back to results', () => {
|
||||||
|
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ResultsBackButtonComponent],
|
||||||
|
imports: [TranslateModule.forRoot(),
|
||||||
|
RouterTestingModule.withRoutes([])
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
{ provide: TranslateService, useValue: translate }
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('from a metadata browse list', () => {
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
translate.get.calls.reset();
|
||||||
|
fixture = TestBed.createComponent(ResultsBackButtonComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
component.buttonLabel = of('browse button');
|
||||||
|
component.ngOnInit();
|
||||||
|
fixture.detectChanges();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should have back from browse label', () => {
|
||||||
|
expect(translate.get).not.toHaveBeenCalled();
|
||||||
|
const el = fixture.debugElement.nativeElement;
|
||||||
|
expect(el.innerHTML).toContain('browse button');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('from an item', () => {
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
translate.get.calls.reset();
|
||||||
|
fixture = TestBed.createComponent(ResultsBackButtonComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
component.ngOnInit();
|
||||||
|
fixture.detectChanges();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should set item label by default', () => {
|
||||||
|
expect(translate.get).toHaveBeenCalledWith('search.browse.item-back');
|
||||||
|
const el = fixture.debugElement.nativeElement;
|
||||||
|
expect(el.innerHTML).toContain('item button');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
@@ -0,0 +1,37 @@
|
|||||||
|
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-results-back-button',
|
||||||
|
styleUrls: ['./results-back-button.component.scss'],
|
||||||
|
templateUrl: './results-back-button.component.html',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
|
})
|
||||||
|
/**
|
||||||
|
* Component for creating a back to result list button.
|
||||||
|
*/
|
||||||
|
export class ResultsBackButtonComponent implements OnInit {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function used for back navigation.
|
||||||
|
*/
|
||||||
|
@Input() back: () => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The button label translation.
|
||||||
|
*/
|
||||||
|
@Input() buttonLabel?: Observable<any>;
|
||||||
|
|
||||||
|
constructor(private translateService: TranslateService) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
if (!this.buttonLabel) {
|
||||||
|
// Use the 'Back to Results' label as default.
|
||||||
|
this.buttonLabel = this.translateService.get('search.browse.item-back');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,22 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { ResultsBackButtonComponent } from './results-back-button.component';
|
||||||
|
import { ThemedResultsBackButtonComponent } from './themed-results-back-button.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
ResultsBackButtonComponent,
|
||||||
|
ThemedResultsBackButtonComponent
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
TranslateModule
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
ThemedResultsBackButtonComponent
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class ResultsBackButtonModule {
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,31 @@
|
|||||||
|
import { Component, Input } from '@angular/core';
|
||||||
|
import { ThemedComponent } from '../theme-support/themed.component';
|
||||||
|
import { ResultsBackButtonComponent } from './results-back-button.component';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-themed-results-back-button',
|
||||||
|
styleUrls: [],
|
||||||
|
templateUrl: '../theme-support/themed.component.html',
|
||||||
|
})
|
||||||
|
export class ThemedResultsBackButtonComponent extends ThemedComponent<ResultsBackButtonComponent> {
|
||||||
|
|
||||||
|
@Input() buttonLabel?: Observable<any>;
|
||||||
|
|
||||||
|
@Input() back: () => void;
|
||||||
|
|
||||||
|
protected inAndOutputNames: (keyof ResultsBackButtonComponent & keyof this)[] = ['back', 'buttonLabel'];
|
||||||
|
|
||||||
|
protected getComponentName(): string {
|
||||||
|
return 'ResultsBackButtonComponent';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected importThemedComponent(themeName: string): Promise<any> {
|
||||||
|
return import(`../../../themes/${themeName}/app/shared/results-back-button/results-back-button.component`);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected importUnthemedComponent(): Promise<any> {
|
||||||
|
return import(`./results-back-button.component`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -71,7 +71,6 @@ import {
|
|||||||
} from './object-detail/my-dspace-result-detail-element/search-result-detail-element.component';
|
} from './object-detail/my-dspace-result-detail-element/search-result-detail-element.component';
|
||||||
import { ObjectDetailComponent } from './object-detail/object-detail.component';
|
import { ObjectDetailComponent } from './object-detail/object-detail.component';
|
||||||
import { ObjNgFor } from './utils/object-ngfor.pipe';
|
import { ObjNgFor } from './utils/object-ngfor.pipe';
|
||||||
import { BrowseByComponent } from './browse-by/browse-by.component';
|
|
||||||
import {
|
import {
|
||||||
BrowseEntryListElementComponent
|
BrowseEntryListElementComponent
|
||||||
} from './object-list/browse-entry-list-element/browse-entry-list-element.component';
|
} from './object-list/browse-entry-list-element/browse-entry-list-element.component';
|
||||||
@@ -254,6 +253,7 @@ import { ThemedMyDSpaceStatusBadgeComponent } from './object-collection/shared/b
|
|||||||
import { ThemedAccessStatusBadgeComponent } from './object-collection/shared/badges/access-status-badge/themed-access-status-badge.component';
|
import { ThemedAccessStatusBadgeComponent } from './object-collection/shared/badges/access-status-badge/themed-access-status-badge.component';
|
||||||
import { MyDSpaceStatusBadgeComponent } from './object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component';
|
import { MyDSpaceStatusBadgeComponent } from './object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component';
|
||||||
|
|
||||||
|
|
||||||
const MODULES = [
|
const MODULES = [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
@@ -267,7 +267,7 @@ const MODULES = [
|
|||||||
RouterModule,
|
RouterModule,
|
||||||
DragDropModule,
|
DragDropModule,
|
||||||
GoogleRecaptchaModule,
|
GoogleRecaptchaModule,
|
||||||
MenuModule,
|
MenuModule
|
||||||
];
|
];
|
||||||
|
|
||||||
const ROOT_MODULES = [
|
const ROOT_MODULES = [
|
||||||
@@ -323,7 +323,6 @@ const COMPONENTS = [
|
|||||||
ViewModeSwitchComponent,
|
ViewModeSwitchComponent,
|
||||||
TruncatableComponent,
|
TruncatableComponent,
|
||||||
TruncatablePartComponent,
|
TruncatablePartComponent,
|
||||||
BrowseByComponent,
|
|
||||||
InputSuggestionsComponent,
|
InputSuggestionsComponent,
|
||||||
FilterInputSuggestionsComponent,
|
FilterInputSuggestionsComponent,
|
||||||
ValidationSuggestionsComponent,
|
ValidationSuggestionsComponent,
|
||||||
|
@@ -3246,9 +3246,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.move.button": "Move...",
|
"item.edit.tabs.status.buttons.move.button": "Mover éste ítem a una colección distinta",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
@@ -3278,9 +3278,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Retirar éste ítem",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
|
@@ -2908,7 +2908,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "ম্যাপড সংগ্রহ পরিচালনা করুন",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "ম্যাপড সংগ্রহ পরিচালনা করুন",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "সরানো ...",
|
"item.edit.tabs.status.buttons.move.button": "সরানো ...",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -2935,8 +2935,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "আপনি এই অ্যাকশন সঞ্চালন করার জন্য অনুমোদিত না",
|
"item.edit.tabs.status.buttons.unauthorized": "আপনি এই অ্যাকশন সঞ্চালন করার জন্য অনুমোদিত না",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "প্রত্যাহার ...",
|
"item.edit.tabs.status.buttons.withdraw.button": "এই আইটেম প্রত্যাহার করুন",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "সংগ্রহস্থল থেকে আইটেম প্রত্যাহার",
|
"item.edit.tabs.status.buttons.withdraw.label": "সংগ্রহস্থল থেকে আইটেম প্রত্যাহার",
|
||||||
|
7155
src/assets/i18n/ca.json5
Normal file
7155
src/assets/i18n/ca.json5
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3186,9 +3186,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.move.button": "Move...",
|
"item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
@@ -3218,9 +3218,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
|
@@ -2698,8 +2698,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Gespiegelte Sammlungen bearbeiten",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Gespiegelte Sammlungen bearbeiten",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Verschieben...",
|
"item.edit.tabs.status.buttons.move.button": "Verschieben Sie diesen Artikel in eine andere Sammlung",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Item in eine andere Sammlung verschieben",
|
"item.edit.tabs.status.buttons.move.label": "Item in eine andere Sammlung verschieben",
|
||||||
@@ -2722,8 +2722,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Item im Repositorium wiederherstellen",
|
"item.edit.tabs.status.buttons.reinstate.label": "Item im Repositorium wiederherstellen",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Zurückziehen...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Ziehen Sie diesen Artikel zurück",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Item aus dem Repositorium zurückziehen",
|
"item.edit.tabs.status.buttons.withdraw.label": "Item aus dem Repositorium zurückziehen",
|
||||||
|
@@ -780,6 +780,9 @@
|
|||||||
"browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}",
|
"browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}",
|
||||||
|
|
||||||
|
|
||||||
|
"search.browse.item-back": "Back to Results",
|
||||||
|
|
||||||
|
|
||||||
"chips.remove": "Remove chip",
|
"chips.remove": "Remove chip",
|
||||||
|
|
||||||
|
|
||||||
@@ -2137,7 +2140,7 @@
|
|||||||
|
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
|
|
||||||
"item.edit.tabs.status.buttons.move.button": "Move...",
|
"item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
|
|
||||||
"item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
"item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
|
|
||||||
@@ -2155,7 +2158,7 @@
|
|||||||
|
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
"item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
|
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
|
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
"item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -2470,8 +2470,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Hallinnoi liitettyjä kokoelmia",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Hallinnoi liitettyjä kokoelmia",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Siirrä...",
|
"item.edit.tabs.status.buttons.move.button": "Siirrä tämä kohde toiseen kokoelmaan",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Siirrä tietue toiseen kokoelmaan",
|
"item.edit.tabs.status.buttons.move.label": "Siirrä tietue toiseen kokoelmaan",
|
||||||
@@ -2494,8 +2494,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue arkistoon",
|
"item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue arkistoon",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Poista käytöstä...",
|
"item.edit.tabs.status.buttons.withdraw.button": "poista tämä kohde",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Poista tietue käytöstä",
|
"item.edit.tabs.status.buttons.withdraw.label": "Poista tietue käytöstä",
|
||||||
|
@@ -2811,8 +2811,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Gérer les collections associées",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Gérer les collections associées",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Déplacer...",
|
"item.edit.tabs.status.buttons.move.button": "Déplacer cet élément vers une autre collection",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Déplacer l'Item dans une autre collection",
|
"item.edit.tabs.status.buttons.move.label": "Déplacer l'Item dans une autre collection",
|
||||||
@@ -2838,8 +2838,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "Vous n'êtes pas autorisé à effectuer cette action",
|
"item.edit.tabs.status.buttons.unauthorized": "Vous n'êtes pas autorisé à effectuer cette action",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Retirer...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Retirer cet article",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Retirer l'Item du dépôt",
|
"item.edit.tabs.status.buttons.withdraw.label": "Retirer l'Item du dépôt",
|
||||||
|
@@ -2892,8 +2892,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manaids cruinneachaidhean mapaichte",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manaids cruinneachaidhean mapaichte",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Gluais...",
|
"item.edit.tabs.status.buttons.move.button": "Helyezze át ezt az elemet egy másik gyűjteménybe",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Gluais nì gu cruinneachadh eile",
|
"item.edit.tabs.status.buttons.move.label": "Gluais nì gu cruinneachadh eile",
|
||||||
@@ -2919,8 +2919,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "Chan eil cead agad an gnìomh seo a dhèanamh",
|
"item.edit.tabs.status.buttons.unauthorized": "Chan eil cead agad an gnìomh seo a dhèanamh",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Thoir air falbh...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Thoir air falbh",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Thoir nì air falbh bhon ionad-tasgaidh",
|
"item.edit.tabs.status.buttons.withdraw.label": "Thoir nì air falbh bhon ionad-tasgaidh",
|
||||||
|
@@ -2481,7 +2481,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Térképezett gyűjtemények szervezése",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Térképezett gyűjtemények szervezése",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Elmozdítás...",
|
"item.edit.tabs.status.buttons.move.button": "Elmozdítás...",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -2505,8 +2505,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Tárgy visszaállítása az adattárba",
|
"item.edit.tabs.status.buttons.reinstate.label": "Tárgy visszaállítása az adattárba",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Visszavonás...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Vedd vissza ezt az elemet",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Tárgy visszavonása az adattárból",
|
"item.edit.tabs.status.buttons.withdraw.label": "Tárgy visszavonása az adattárból",
|
||||||
|
@@ -3246,9 +3246,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.move.button": "Move...",
|
"item.edit.tabs.status.buttons.move.button": "Verplaats dit item naar een andere collectie",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
@@ -3278,9 +3278,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
|
@@ -3094,7 +3094,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Салыстырмалы коллекцияларды басқару",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Салыстырмалы коллекцияларды басқару",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Ысыру...",
|
"item.edit.tabs.status.buttons.move.button": "Ысыру...",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -3121,11 +3121,11 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "Сіз бұл әрекетті орындауға құқығыңыз жоқ",
|
"item.edit.tabs.status.buttons.unauthorized": "Сіз бұл әрекетті орындауға құқығыңыз жоқ",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Шегінуге...",
|
"item.edit.tabs.status.buttons.withdraw.button": "бұл тармақты алып тастаңыз",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Қоймадан тауарды алып қою",
|
"item.edit.tabs.status.buttons.withdraw.label": "Бұл элементті алып тастаңыз",
|
||||||
|
|
||||||
// "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.",
|
// "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.",
|
||||||
"item.edit.tabs.status.description": "Тауарларды басқару бетіне қош келдіңіз. Осы жерден элементті алып тастауға, қалпына келтіруге, жылжытуға немесе жоюға болады. Басқа қойындыларда жаңа метадеректерді / бит ағындарын жаңартуға немесе қосуға болады.",
|
"item.edit.tabs.status.description": "Тауарларды басқару бетіне қош келдіңіз. Осы жерден элементті алып тастауға, қалпына келтіруге, жылжытуға немесе жоюға болады. Басқа қойындыларда жаңа метадеректерді / бит ағындарын жаңартуға немесе қосуға болады.",
|
||||||
|
@@ -2672,7 +2672,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Pārvaldīt piesaistītās kolekcijas",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Pārvaldīt piesaistītās kolekcijas",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Pārvieto...",
|
"item.edit.tabs.status.buttons.move.button": "Pārvieto...",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -2696,8 +2696,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Atjaunot materiālu repozitorijā",
|
"item.edit.tabs.status.buttons.reinstate.label": "Atjaunot materiālu repozitorijā",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Atsaukt...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Izņemiet šo vienumu",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Izņemiet materiālu no repozitorijas",
|
"item.edit.tabs.status.buttons.withdraw.label": "Izņemiet materiālu no repozitorijas",
|
||||||
|
@@ -2915,7 +2915,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Beheer gemapte collecties",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Beheer gemapte collecties",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Verplaats ..",
|
"item.edit.tabs.status.buttons.move.button": "Verplaats ..",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -2939,8 +2939,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Zet het item terug in het repository",
|
"item.edit.tabs.status.buttons.reinstate.label": "Zet het item terug in het repository",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Trek terug ...",
|
"item.edit.tabs.status.buttons.withdraw.button": "onttrek hierdie item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Trek het item terug uit het repository",
|
"item.edit.tabs.status.buttons.withdraw.label": "Trek het item terug uit het repository",
|
||||||
|
@@ -2994,8 +2994,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Mover...",
|
"item.edit.tabs.status.buttons.move.button": "Mova este item para uma coleção diferente",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção",
|
"item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção",
|
||||||
@@ -3021,8 +3021,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "Você não está autorizado a realizar esta ação",
|
"item.edit.tabs.status.buttons.unauthorized": "Você não está autorizado a realizar esta ação",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Retirar...",
|
"item.edit.tabs.status.buttons.withdraw.button": "retirar este item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório",
|
"item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório",
|
||||||
|
@@ -2676,8 +2676,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Mover...",
|
"item.edit.tabs.status.buttons.move.button": "Mova este item para uma coleção diferente",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção",
|
"item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção",
|
||||||
@@ -2700,8 +2700,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório",
|
"item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Retirar...",
|
"item.edit.tabs.status.buttons.withdraw.button": "retirar este item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório",
|
"item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório",
|
||||||
|
@@ -2936,8 +2936,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Hantera mappade samlingar",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Hantera mappade samlingar",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Flytta...",
|
"item.edit.tabs.status.buttons.move.button": "Flytta detta föremål till en annan samling",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Flytta post till en annan samling",
|
"item.edit.tabs.status.buttons.move.label": "Flytta post till en annan samling",
|
||||||
@@ -2963,8 +2963,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
// "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action",
|
||||||
"item.edit.tabs.status.buttons.unauthorized": "Du saknar behörighet att utföra detta",
|
"item.edit.tabs.status.buttons.unauthorized": "Du saknar behörighet att utföra detta",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Återkalla...",
|
"item.edit.tabs.status.buttons.withdraw.button": "dra tillbaka den här artikeln",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Återkalla post från arkivet",
|
"item.edit.tabs.status.buttons.withdraw.label": "Återkalla post från arkivet",
|
||||||
|
@@ -3246,9 +3246,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.move.button": "Move...",
|
"item.edit.tabs.status.buttons.move.button": "Bu Öğeyi farklı bir Koleksiyona taşıyın",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
@@ -3278,9 +3278,9 @@
|
|||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
"item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
"item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
// TODO New key - Add a translation
|
// TODO New key - Add a translation
|
||||||
|
@@ -2472,7 +2472,7 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Eşlenen koleksiyonları yönetin",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Eşlenen koleksiyonları yönetin",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Taşınıyor...",
|
"item.edit.tabs.status.buttons.move.button": "Taşınıyor...",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
@@ -2496,8 +2496,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Öğeyi depoya geri yükle",
|
"item.edit.tabs.status.buttons.reinstate.label": "Öğeyi depoya geri yükle",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Çıkar...",
|
"item.edit.tabs.status.buttons.withdraw.button": "bu öğeyi geri çek",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Depodan öğeyi çıkar",
|
"item.edit.tabs.status.buttons.withdraw.label": "Depodan öğeyi çıkar",
|
||||||
|
@@ -2590,8 +2590,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
// "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections",
|
||||||
"item.edit.tabs.status.buttons.mappedCollections.label": "Керувати прив'язаними зібраннями",
|
"item.edit.tabs.status.buttons.mappedCollections.label": "Керувати прив'язаними зібраннями",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.button": "Move...",
|
// "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection",
|
||||||
"item.edit.tabs.status.buttons.move.button": "Перемістити...",
|
"item.edit.tabs.status.buttons.move.button": "Перемістити цей елемент до іншої колекції",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
// "item.edit.tabs.status.buttons.move.label": "Move item to another collection",
|
||||||
"item.edit.tabs.status.buttons.move.label": "Перемістити документ до іншого зібрання",
|
"item.edit.tabs.status.buttons.move.label": "Перемістити документ до іншого зібрання",
|
||||||
@@ -2614,8 +2614,8 @@
|
|||||||
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
// "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository",
|
||||||
"item.edit.tabs.status.buttons.reinstate.label": "Відновити документ в репозиторій",
|
"item.edit.tabs.status.buttons.reinstate.label": "Відновити документ в репозиторій",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...",
|
// "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item",
|
||||||
"item.edit.tabs.status.buttons.withdraw.button": "Вилучити...",
|
"item.edit.tabs.status.buttons.withdraw.button": "вилучити цей предмет",
|
||||||
|
|
||||||
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
// "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository",
|
||||||
"item.edit.tabs.status.buttons.withdraw.label": "Вилучити документ з репозиторію",
|
"item.edit.tabs.status.buttons.withdraw.label": "Вилучити документ з репозиторію",
|
||||||
|
@@ -190,6 +190,7 @@ export class DefaultAppConfig implements AppConfig {
|
|||||||
// When set to active, users will be able to switch to the use of this language in the user interface.
|
// When set to active, users will be able to switch to the use of this language in the user interface.
|
||||||
languages: LangConfig[] = [
|
languages: LangConfig[] = [
|
||||||
{ code: 'en', label: 'English', active: true },
|
{ code: 'en', label: 'English', active: true },
|
||||||
|
{ code: 'ca', label: 'Català', active: true },
|
||||||
{ code: 'cs', label: 'Čeština', active: true },
|
{ code: 'cs', label: 'Čeština', active: true },
|
||||||
{ code: 'de', label: 'Deutsch', active: true },
|
{ code: 'de', label: 'Deutsch', active: true },
|
||||||
{ code: 'es', label: 'Español', active: true },
|
{ code: 'es', label: 'Español', active: true },
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
# The URL to the DSpace sitemaps
|
# The URL to the DSpace sitemaps
|
||||||
# XML sitemap is listed first as it is preferred by most search engines
|
# XML sitemap is listed first as it is preferred by most search engines
|
||||||
Sitemap: /sitemap_index.xml
|
Sitemap: <%= origin %>/sitemap_index.xml
|
||||||
Sitemap: /sitemap_index.html
|
Sitemap: <%= origin %>/sitemap_index.html
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
# Default Access Group
|
# Default Access Group
|
@@ -0,0 +1,13 @@
|
|||||||
|
import {
|
||||||
|
ResultsBackButtonComponent as BaseComponent
|
||||||
|
} from '../../../../../app/shared/results-back-button/results-back-button.component';
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-results-back-button',
|
||||||
|
// styleUrls: ['./results-back-button.component.scss'],
|
||||||
|
styleUrls: ['../../../../../app/shared/results-back-button/results-back-button.component.scss'],
|
||||||
|
//templateUrl: './results-back-button.component.html',
|
||||||
|
templateUrl: '../../../../../app/shared/results-back-button/results-back-button.component.html'
|
||||||
|
})
|
||||||
|
export class ResultsBackButtonComponent extends BaseComponent {}
|
@@ -40,8 +40,10 @@ import {
|
|||||||
} from './app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component';
|
} from './app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component';
|
||||||
|
|
||||||
import { CommunityListElementComponent } from './app/shared/object-list/community-list-element/community-list-element.component';
|
import { CommunityListElementComponent } from './app/shared/object-list/community-list-element/community-list-element.component';
|
||||||
import { CollectionListElementComponent } from './app/shared/object-list/collection-list-element/collection-list-element.component';
|
import { CollectionListElementComponent} from './app/shared/object-list/collection-list-element/collection-list-element.component';
|
||||||
import { CollectionDropdownComponent } from './app/shared/collection-dropdown/collection-dropdown.component';
|
import { CollectionDropdownComponent } from './app/shared/collection-dropdown/collection-dropdown.component';
|
||||||
|
import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,18 +79,20 @@ const DECLARATIONS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
SharedModule,
|
SharedModule,
|
||||||
RootModule,
|
RootModule,
|
||||||
NavbarModule,
|
NavbarModule,
|
||||||
ItemPageModule,
|
SharedBrowseByModule,
|
||||||
ItemSharedModule,
|
ResultsBackButtonModule,
|
||||||
],
|
ItemPageModule,
|
||||||
declarations: DECLARATIONS,
|
ItemSharedModule,
|
||||||
providers: [
|
],
|
||||||
...ENTRY_COMPONENTS.map((component) => ({ provide: component }))
|
declarations: DECLARATIONS,
|
||||||
],
|
providers: [
|
||||||
|
...ENTRY_COMPONENTS.map((component) => ({provide: component}))
|
||||||
|
],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* This module is included in the main bundle that gets downloaded at first page load. So it should
|
* This module is included in the main bundle that gets downloaded at first page load. So it should
|
||||||
|
@@ -117,6 +117,8 @@ import { BrowseByTitlePageComponent } from './app/browse-by/browse-by-title-page
|
|||||||
import {
|
import {
|
||||||
ExternalSourceEntryImportModalComponent
|
ExternalSourceEntryImportModalComponent
|
||||||
} from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/external-source-entry-import-modal/external-source-entry-import-modal.component';
|
} from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/external-source-entry-import-modal/external-source-entry-import-modal.component';
|
||||||
|
import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
|
||||||
import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module';
|
import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module';
|
||||||
import { ItemSharedModule } from '../../app/item-page/item-shared.module';
|
import { ItemSharedModule } from '../../app/item-page/item-shared.module';
|
||||||
import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component';
|
import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component';
|
||||||
@@ -126,6 +128,8 @@ import { TypeBadgeComponent } from './app/shared/object-collection/shared/badges
|
|||||||
import { StatusBadgeComponent } from './app/shared/object-collection/shared/badges/status-badge/status-badge.component';
|
import { StatusBadgeComponent } from './app/shared/object-collection/shared/badges/status-badge/status-badge.component';
|
||||||
import { BadgesComponent } from './app/shared/object-collection/shared/badges/badges.component';
|
import { BadgesComponent } from './app/shared/object-collection/shared/badges/badges.component';
|
||||||
import { AccessStatusBadgeComponent } from './app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component';
|
import { AccessStatusBadgeComponent } from './app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component';
|
||||||
|
import { ResultsBackButtonComponent } from './app/shared/results-back-button/results-back-button.component';
|
||||||
|
|
||||||
|
|
||||||
const DECLARATIONS = [
|
const DECLARATIONS = [
|
||||||
FileSectionComponent,
|
FileSectionComponent,
|
||||||
@@ -188,6 +192,8 @@ const DECLARATIONS = [
|
|||||||
TypeBadgeComponent,
|
TypeBadgeComponent,
|
||||||
MyDSpaceStatusBadgeComponent,
|
MyDSpaceStatusBadgeComponent,
|
||||||
AccessStatusBadgeComponent,
|
AccessStatusBadgeComponent,
|
||||||
|
ResultsBackButtonComponent,
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
@@ -228,6 +234,8 @@ const DECLARATIONS = [
|
|||||||
ScrollToModule,
|
ScrollToModule,
|
||||||
SearchPageModule,
|
SearchPageModule,
|
||||||
SharedModule,
|
SharedModule,
|
||||||
|
SharedBrowseByModule,
|
||||||
|
ResultsBackButtonModule,
|
||||||
StatisticsModule,
|
StatisticsModule,
|
||||||
StatisticsPageModule,
|
StatisticsPageModule,
|
||||||
StoreModule,
|
StoreModule,
|
||||||
|
@@ -7,6 +7,8 @@ import { HeaderComponent } from './app/header/header.component';
|
|||||||
import { HeaderNavbarWrapperComponent } from './app/header-nav-wrapper/header-navbar-wrapper.component';
|
import { HeaderNavbarWrapperComponent } from './app/header-nav-wrapper/header-navbar-wrapper.component';
|
||||||
import { RootModule } from '../../app/root.module';
|
import { RootModule } from '../../app/root.module';
|
||||||
import { NavbarModule } from '../../app/navbar/navbar.module';
|
import { NavbarModule } from '../../app/navbar/navbar.module';
|
||||||
|
import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add components that use a custom decorator to ENTRY_COMPONENTS as well as DECLARATIONS.
|
* Add components that use a custom decorator to ENTRY_COMPONENTS as well as DECLARATIONS.
|
||||||
@@ -27,6 +29,8 @@ const DECLARATIONS = [
|
|||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
SharedModule,
|
SharedModule,
|
||||||
|
SharedBrowseByModule,
|
||||||
|
ResultsBackButtonModule,
|
||||||
RootModule,
|
RootModule,
|
||||||
NavbarModule,
|
NavbarModule,
|
||||||
],
|
],
|
||||||
|
@@ -55,6 +55,9 @@ import {
|
|||||||
} from '../../app/shared/resource-policies/resource-policies.module';
|
} from '../../app/shared/resource-policies/resource-policies.module';
|
||||||
import { ComcolModule } from '../../app/shared/comcol/comcol.module';
|
import { ComcolModule } from '../../app/shared/comcol/comcol.module';
|
||||||
import { RootModule } from '../../app/root.module';
|
import { RootModule } from '../../app/root.module';
|
||||||
|
import { BrowseByPageModule } from '../../app/browse-by/browse-by-page.module';
|
||||||
|
import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
|
||||||
|
import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
|
||||||
import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module';
|
import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module';
|
||||||
import { ItemSharedModule } from 'src/app/item-page/item-shared.module';
|
import { ItemSharedModule } from 'src/app/item-page/item-shared.module';
|
||||||
|
|
||||||
@@ -70,6 +73,8 @@ const DECLARATIONS = [
|
|||||||
RootModule,
|
RootModule,
|
||||||
BitstreamFormatsModule,
|
BitstreamFormatsModule,
|
||||||
BrowseByModule,
|
BrowseByModule,
|
||||||
|
BrowseByPageModule,
|
||||||
|
ResultsBackButtonModule,
|
||||||
CollectionFormModule,
|
CollectionFormModule,
|
||||||
CollectionPageModule,
|
CollectionPageModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@@ -99,6 +104,7 @@ const DECLARATIONS = [
|
|||||||
ScrollToModule,
|
ScrollToModule,
|
||||||
SearchPageModule,
|
SearchPageModule,
|
||||||
SharedModule,
|
SharedModule,
|
||||||
|
SharedBrowseByModule,
|
||||||
StatisticsModule,
|
StatisticsModule,
|
||||||
StatisticsPageModule,
|
StatisticsPageModule,
|
||||||
StoreModule,
|
StoreModule,
|
||||||
|
@@ -47,8 +47,8 @@ export const copyWebpackOptions = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
from: path.join(__dirname, '..', 'src', 'robots.txt'),
|
from: path.join(__dirname, '..', 'src', 'robots.txt.ejs'),
|
||||||
to: 'robots.txt'
|
to: 'assets/robots.txt.ejs'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
13
yarn.lock
13
yarn.lock
@@ -2187,6 +2187,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/deep-freeze/-/deep-freeze-0.1.2.tgz#68e5379291910e82c2f0d1629732163c2aa662cc"
|
resolved "https://registry.yarnpkg.com/@types/deep-freeze/-/deep-freeze-0.1.2.tgz#68e5379291910e82c2f0d1629732163c2aa662cc"
|
||||||
integrity sha512-M6x29Vk4681dght4IMnPIcF1SNmeEm0c4uatlTFhp+++H1oDK1THEIzuCC2WeCBVhX+gU0NndsseDS3zaCtlcQ==
|
integrity sha512-M6x29Vk4681dght4IMnPIcF1SNmeEm0c4uatlTFhp+++H1oDK1THEIzuCC2WeCBVhX+gU0NndsseDS3zaCtlcQ==
|
||||||
|
|
||||||
|
"@types/ejs@^3.1.1":
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.1.tgz#29c539826376a65e7f7d672d51301f37ed718f6d"
|
||||||
|
integrity sha512-RQul5wEfY7BjWm0sYY86cmUN/pcXWGyVxWX93DFFJvcrxax5zKlieLwA3T77xJGwNcZW0YW6CYG70p1m8xPFmA==
|
||||||
|
|
||||||
"@types/eslint-scope@^3.7.3":
|
"@types/eslint-scope@^3.7.3":
|
||||||
version "3.7.4"
|
version "3.7.4"
|
||||||
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
|
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
|
||||||
@@ -4712,7 +4717,7 @@ ee-first@1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||||
|
|
||||||
ejs@^3.1.5:
|
ejs@^3.1.5, ejs@^3.1.8:
|
||||||
version "3.1.8"
|
version "3.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
|
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
|
||||||
integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==
|
integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==
|
||||||
@@ -11036,9 +11041,9 @@ ua-parser-js@1.0.2:
|
|||||||
integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==
|
integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==
|
||||||
|
|
||||||
ua-parser-js@^0.7.30:
|
ua-parser-js@^0.7.30:
|
||||||
version "0.7.32"
|
version "0.7.33"
|
||||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211"
|
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532"
|
||||||
integrity sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==
|
integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==
|
||||||
|
|
||||||
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
|
Reference in New Issue
Block a user