Upgrade to Bootstrap 5 & realign themes (#3506)

* 117631: upgraded bootstrap, ng-bootstrap and installed popper.js

* 117631: SASS to CSS variables

* 117631: Bootstrap 4 to 5 html/css fixes

* 117631: Theming fixes after bootstrap upgrade

* 117631: More theming fixes: accordions, spacing, search components etc

* 117631: Fixed tests

* 117631: Fixed offset issues

* 117631: Fixed contrast ratio issue

* 117631: Fixed variables, removed unnecessary mapping, fixed tables, upgraded to Bootstrap 5.3.3

* 118113: vertical footer deviders

* 118113: remove button shadow

* 118113: old checkboxes

* 118113: Custom icons font-family

* 118113: accordion color

* 118113: table striped customizable background-color

* 118113: revert vertical deviders in footer bs-secondary change

* 118113: modal close button

* 118113: add w-100 to btn-block elements

* 118113: border radius

* 118113: The date selector on the submission page gets squished to the side of its label fix

* 118113: adding margins to dynamic-form-control-containers

* 118113: adding gaps between sections of item submission form

* 118113: icon font-family removed !important

* 118113: removed !important from #legend_dc_date_issued

* 118113: move --bs-border-radius to $bs-border-radius

* 118113: remove new SCSS variable

* 118113: reduce size for Item type labels

* 118113: date picker border - transparent

* 118113: drag-item-container elements on same line

* 118113: specific border color for ds-number-picker buttons

* Simplify variables & styles

* 118627: html files

* Fix new SCSS compile issues, remove yarn.lock

* 118627: remove footer button shadow

* 118627: custom login button radius

* 118627: success button - white text

* 118627: table alternate colors

* Fix ghostly Bootstrap version, again

* Override (ng-)bootstrap versions for @ng-dynamic-forms

* 118627: Feedback - fix login button radius

* 118627: Feedback - fix footer button shadows

* 118627: Feedback - login border radius use $bs-border-radius-lg + change to rem

* 118627: Tooltip issue

* 118627: Metadata white authority badge

* 118627: Align Back button

* 118627: Bitstreams under Item's Metadata issue fix

* 118627: select on edit collection page "arrow icon"

* 118627: fix alignment issues

* 118627: fix admin sidebar "Managment" label

* 118627: Feedback - login button

* 118627: Line above table heads

* 118627: Remove HMTL accordion expandable arrow

* 118627: bitstream table

* 118627: notification "close button"

* 118627: faint border/shadow around the expand buttons on hierarchical browse pages

* 118627: tooltip margin

* 118627: Bootstrap 5 changed the default gutter size to 24px

* 118627: custom-aligning -> custom-alignment

* 118627: lint-fix

* 118627: lint fix

* 118627: e2e Fix with new "btn-close"

* 118627: e2e Fix heading order for access-control-form-container

* 118627: access-control-form-container mr-4 to me-4

* 118627: update mr to me & ml to ms & pr to ps & pl to ps

* 118627: Access Control "Mode" radiobuttons under Text

* 118627: Item submission Publisher select icon positioning

* 118627: resolved merge conflict with main (and npm install)

* 118627: cherrypicking 3553 commits

* Remove unused angular-idle-preload

(cherry picked from commit fef5dd72b3)

* 118627: npm install - to fix package-lock.json

* 120594: hamberger menu not showing fix

* 120594: big logo header issue

* 120594: remove faint shadow

* 120594: btn-transparent class

* 120594: badge-* to bg-*

* 120594: add padding-right & -left for rounded-pill

* 120594: update test variables to fit the new bootstrap variables

* 120594: add missing rss conditions

* 120594: fix white badges

* 118627: remove shadow on number-picker

* 120594: revert white badge fix

* 120594: re-add dropdown-button in dynamic-lookup-relation-search-tab

* 120594: remove default radio button styling

* 120594: full width radio buttons

* 120594: edit collection page alignment

* 120594: bg -> bg-primary

* 120594: revert to old info color

* 120594: revert media breakpoints

* 120594: recover PR 3227 rss

* 120594: remove login & logout from PR

* 120594: ds-filter input & label gap

* 120594: ds-filter aligning rows

* 120594: remove navbar.module.ts

* 120594: remove item-edit-bitstream.component.html

* 120594: remove item-edit-bitstream-drag-handle.component.html

* 120594: Fix vocabulary-treeview styling

* 120594: Remove unused browse-by-metadata-page.component.html

* 120594: red invalid input label

* 120594: use old link color for number-picker: #1f7293

* 120594: move $theme-colors to sass override

* 120594: spacing for upload icon

* 120594: decrease media-breakpoint-down

* 120594: PR 3227 rss

* 120594: merge in main bootstrap variable mappings

* 120594: restore all mapped variable that have a value

* 120594: fix unset variable item-edit-bitstream-bundle.component.scss

* 120594: old tooltip color

* 120594: edit bitstream render text inline with the icon

* Revert "120594: merge in main bootstrap variable mappings"

This reverts commit 4e61b5fb

* 120594: add non-default mapped variables with references

* 120594: add docs in _bootstrap_variables_mapping.scss

* 120594: use bootstrap variables instead of hardcoded values

---------

Co-authored-by: lotte <lotte_hofstede@hotmail.com>
Co-authored-by: Yura Bondarenko <yura.bondarenko@atmire.com>
Co-authored-by: Yury Bondarenko <ybnd@tuta.io>
Co-authored-by: Tim Donohue <tim.donohue@lyrasis.org>
This commit is contained in:
Wout-atmire
2025-03-05 19:15:51 +01:00
committed by GitHub
parent b480317599
commit e0240259ec
312 changed files with 1064 additions and 1662 deletions

View File

@@ -217,7 +217,7 @@ describe('New Submission page', () => {
});
// Close popup window
cy.get('ds-dynamic-lookup-relation-modal button.close').click();
cy.get('ds-dynamic-lookup-relation-modal button.btn-close').click();
// Back on the form, click the discard button to remove new submission
// Clicking it will display a confirmation, which we will confirm with another click

49
package-lock.json generated
View File

@@ -23,7 +23,7 @@
"@angular/ssr": "^17.3.11",
"@babel/runtime": "7.26.7",
"@kolkov/ngx-gallery": "^2.0.1",
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
"@ng-bootstrap/ng-bootstrap": "^12.0.0",
"@ng-dynamic-forms/core": "^16.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^16.0.0",
"@ngrx/effects": "^17.1.1",
@@ -33,7 +33,7 @@
"@nicky-lenaers/ngx-scroll-to": "^14.0.0",
"angulartics2": "^12.2.0",
"axios": "^1.7.9",
"bootstrap": "^4.6.1",
"bootstrap": "^5.3",
"cerialize": "0.1.18",
"cli-progress": "^3.12.0",
"colors": "^1.4.0",
@@ -5496,9 +5496,9 @@
}
},
"node_modules/@ng-bootstrap/ng-bootstrap": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-11.0.1.tgz",
"integrity": "sha512-xpXpW2x2S9ZQhEu5kCmEAFf8WvkVD+rcKb1NLQiLuiZgAQR7GXVexXy5Y+RIvTjAQmPEVyxaSgYiJA6sWNJLNw==",
"version": "12.1.2",
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.2.tgz",
"integrity": "sha512-p27c+mYVdHiJMYrj5hwClVJxLdiZxafAqlbw1sdJh2xJ1rGOe+H/kCf5YDRbhlHqRN+34Gr0RQqIUeD1I2V8hg==",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -5507,6 +5507,7 @@
"@angular/core": "^13.0.0",
"@angular/forms": "^13.0.0",
"@angular/localize": "^13.0.0",
"@popperjs/core": "^2.10.2",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -6250,6 +6251,16 @@
"node": ">=14"
}
},
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@react-dnd/asap": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz",
@@ -8679,9 +8690,9 @@
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="
},
"node_modules/bootstrap": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz",
"integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==",
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
"integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
"funding": [
{
"type": "github",
@@ -8693,8 +8704,7 @@
}
],
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.1"
"@popperjs/core": "^2.11.8"
}
},
"node_modules/brace-expansion": {
@@ -14878,13 +14888,6 @@
"jiti": "bin/jiti.js"
}
},
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"license": "MIT",
"peer": true
},
"node_modules/js-cookie": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
@@ -18383,18 +18386,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
"license": "MIT",
"peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/portscanner": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",

View File

@@ -73,7 +73,9 @@
"@angular/forms": "^17.3.11"
},
"@ng-dynamic-forms/ui-ng-bootstrap": {
"ngx-mask": "14.2.4"
"ngx-mask": "14.2.4",
"@ng-bootstrap/ng-bootstrap": "^12.0.0",
"bootstrap": "^5.3"
},
"@ngtools/webpack": {
"@angular/compiler-cli": "^17.3.11",
@@ -110,7 +112,7 @@
"@angular/ssr": "^17.3.11",
"@babel/runtime": "7.26.7",
"@kolkov/ngx-gallery": "^2.0.1",
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
"@ng-bootstrap/ng-bootstrap": "^12.0.0",
"@ng-dynamic-forms/core": "^16.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^16.0.0",
"@ngrx/effects": "^17.1.1",
@@ -120,7 +122,7 @@
"@nicky-lenaers/ngx-scroll-to": "^14.0.0",
"angulartics2": "^12.2.0",
"axios": "^1.7.9",
"bootstrap": "^4.6.1",
"bootstrap": "^5.3",
"cerialize": "0.1.18",
"cli-progress": "^3.12.0",
"colors": "^1.4.0",

View File

@@ -1,19 +1,13 @@
<ngb-accordion #acc="ngbAccordion" [activeIds]="'browse'">
<ngb-panel [id]="'browse'">
<ng-template ngbPanelHeader>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('browse')"
<ng-template ngbPanelTitle>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" (click)="acc.toggle('browse')"
data-test="browse">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()"
[attr.aria-expanded]="acc.isExpanded('browse')"
aria-controls="bulk-access-browse-panel-content">
{{ 'admin.access-control.bulk-access-browse.header' | translate }}
</button>
<div class="text-right d-flex gap-2">
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded('browse')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded('browse')" class="fas fa-chevron-down fa-fw"></span>
</div>
</div>
</div>
</ng-template>
<ng-template ngbPanelContent>
@@ -22,7 +16,7 @@
<li [ngbNavItem]="'search'" role="presentation">
<a ngbNavLink>{{'admin.access-control.bulk-access-browse.search.header' | translate}}</a>
<ng-template ngbNavContent>
<div class="mx-n3">
<div class="bulk-access-search">
<ds-search [configuration]="'administrativeBulkAccess'"
[selectable]="true"
[selectionConfig]="{ repeatable: true, listId: listId }"
@@ -42,7 +36,7 @@
[showPaginator]="false"
(prev)="pagePrev()"
(next)="pageNext()">
<ul *ngIf="(objectsSelected$|async)?.hasSucceeded" class="list-unstyled ml-4">
<ul *ngIf="(objectsSelected$|async)?.hasSucceeded" class="list-unstyled ms-4">
<li *ngFor='let object of (objectsSelected$|async)?.payload?.page | paginate: { itemsPerPage: (paginationOptions$ | async).pageSize,
currentPage: (paginationOptions$ | async).currentPage, totalItems: (objectsSelected$|async)?.payload?.page.length }; let i = index; let last = last '
class="mt-4 mb-4 d-flex"

View File

@@ -0,0 +1,4 @@
.bulk-access-search {
margin-right: calc(var(--bs-gutter-x, 1.5rem) / -2);
margin-left: calc(var(--bs-gutter-x, 1.5rem) / -2);
}

View File

@@ -7,7 +7,7 @@
<hr>
<div class="d-flex justify-content-end">
<button class="btn btn-outline-primary mr-3" (click)="reset()">
<button class="btn btn-outline-primary me-3" (click)="reset()">
{{ 'access-control-cancel' | translate }}
</button>
<button class="btn btn-primary" [dsBtnDisabled]="!canExport()" (click)="submit()">

View File

@@ -1,17 +1,11 @@
<ngb-accordion #acc="ngbAccordion" [activeIds]="'settings'">
<ngb-panel [id]="'settings'">
<ng-template ngbPanelHeader>
<ng-template ngbPanelTitle>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('settings')" data-test="settings">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()" [attr.aria-expanded]="acc.isExpanded('settings')"
aria-controls="bulk-access-settings-panel-content">
{{ 'admin.access-control.bulk-access-settings.header' | translate }}
</button>
<div class="text-right d-flex gap-2">
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded('settings')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded('settings')" class="fas fa-chevron-down fa-fw"></span>
</div>
</div>
</div>
</ng-template>
<ng-template ngbPanelContent>

View File

@@ -5,10 +5,10 @@
<h1 id="header" class="pb-2">{{labelPrefix + 'head' | translate}}</h1>
<div>
<button class="mr-auto btn btn-success addEPerson-button"
<button class="me-auto btn btn-success addEPerson-button"
[routerLink]="'create'">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline ml-1">{{labelPrefix + 'button.add' | translate}}</span>
<span class="d-none d-sm-inline ms-1">{{labelPrefix + 'button.add' | translate}}</span>
</button>
</div>
</div>
@@ -18,17 +18,17 @@
</h2>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div>
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<select name="scope" id="scope" formControlName="scope" class="form-select" aria-label="Search scope">
<option value="metadata">{{labelPrefix + 'search.scope.metadata' | translate}}</option>
<option value="email">{{labelPrefix + 'search.scope.email' | translate}}</option>
</select>
</div>
<div class="flex-grow-1 mr-3 ml-3">
<div class="form-group input-group">
<div class="flex-grow-1 me-3 ms-3">
<div class="mb-3 input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" [attr.aria-label]="labelPrefix + 'search.placeholder' | translate"
[placeholder]="(labelPrefix + 'search.placeholder' | translate)">
<span class="input-group-append">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ labelPrefix + 'search.button' | translate }}
</button>

View File

@@ -29,7 +29,7 @@
<i class="fa fa-key"></i> {{'admin.access-control.epeople.actions.reset' | translate}}
</button>
</div>
<div *ngIf="canImpersonate$ | async" between class="btn-group">
<div *ngIf="canImpersonate$ | async" between class="btn-group ms-1">
<button *ngIf="!isImpersonated" class="btn btn-primary" type="button" (click)="impersonate()">
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}
</button>

View File

@@ -75,8 +75,8 @@
</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group mr-3">
<div class="flex-grow-1 me-3">
<div class="form-group input-group me-3">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">

View File

@@ -62,8 +62,8 @@
</h4>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group mr-3">
<div class="flex-grow-1 me-3">
<div class="mb-3 input-group me-3">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
@@ -75,7 +75,7 @@
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();" class="btn btn-secondary float-right">
<button (click)="clearFormAndResetResult();" class="btn btn-secondary float-end">
{{messagePrefix + '.button.see-all' | translate}}
</button>
</div>

View File

@@ -4,18 +4,18 @@
<div class="d-flex justify-content-between border-bottom mb-3">
<h1 id="header" class="pb-2">{{messagePrefix + 'head' | translate}}</h1>
<div>
<button class="mr-auto btn btn-success"
<button class="me-auto btn btn-success"
[routerLink]="'create'">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline ml-1">{{messagePrefix + 'button.add' | translate}}</span>
<span class="d-none d-sm-inline ms-1">{{messagePrefix + 'button.add' | translate}}</span>
</button>
</div>
</div>
<h2 id="search" class="border-bottom pb-2">{{messagePrefix + 'search.head' | translate}}</h2>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group">
<div class="flex-grow-1 me-3">
<div class="mb-3 input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" [attr.aria-label]="messagePrefix + 'search.placeholder' | translate"
[placeholder]="(messagePrefix + 'search.placeholder' | translate)" >

View File

@@ -8,7 +8,7 @@
<p>
<button class="btn btn-primary" (click)="this.selectCollection();">{{'admin.metadata-import.page.button.select-collection' | translate}}</button>
</p>
<div class="form-group">
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="validateOnly" [(ngModel)]="validateOnly">
<label class="form-check-label" for="validateOnly">
@@ -25,7 +25,7 @@
[uncheckedLabel]="'admin.metadata-import.page.toggle.url' | translate"
[checked]="isUpload"
(change)="toggleUpload()" ></ui-switch>
<small class="form-text text-muted">
<small class="form-text text-muted d-block">
{{'admin.batch-import.page.toggle.help' | translate}}
</small>
@@ -38,7 +38,7 @@
[dropMessageLabelReplacement]="'admin.batch-import.page.dropMsgReplace'">
</ds-file-dropzone-no-uploader>
<div class="form-group mt-2" *ngIf="!isUpload">
<div class="mb-3 mt-2" *ngIf="!isUpload">
<input class="form-control" type="text" placeholder="{{'admin.metadata-import.page.urlMsg' | translate}}"
data-test="file-url-input" [(ngModel)]="fileURL">
</div>

View File

@@ -1,7 +1,7 @@
<div class="container">
<h1 id="header">{{'admin.metadata-import.page.header' | translate}}</h1>
<p>{{'admin.metadata-import.page.help' | translate}}</p>
<div class="form-group">
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="validateOnly" [(ngModel)]="validateOnly">
<label class="form-check-label" for="validateOnly">

View File

@@ -37,7 +37,7 @@
<div class="mb-5 mt-5">
<!-- In the url section -->
<div class="d-flex align-items-center">
<div class="d-flex flex-column w-50 mr-2">
<div class="d-flex flex-column w-50 me-2">
<label for="url" class="font-weight-bold">{{ 'ldn-new-service.form.label.url' | translate }}</label>
<input [class.invalid-field]="formModel.get('url').invalid && formModel.get('url').touched"
[placeholder]="'ldn-new-service.form.placeholder.url' | translate" class="form-control"
@@ -73,7 +73,7 @@
<label for="lowerIp" class="font-weight-bold">{{ 'ldn-new-service.form.label.ip-range' | translate }}</label>
<div class="d-flex">
<input [class.invalid-field]="formModel.get('lowerIp').invalid && formModel.get('lowerIp').touched"
[placeholder]="'ldn-new-service.form.placeholder.lowerIp' | translate" class="form-control mr-2"
[placeholder]="'ldn-new-service.form.placeholder.lowerIp' | translate" class="form-control me-2"
formControlName="lowerIp"
id="lowerIp"
name="lowerIp"
@@ -298,7 +298,7 @@
</div>
<div class="modal-footer">
<div *ngIf="!isNewService">
<button (click)="closeModal()" class="btn btn-outline-secondary mr-2"
<button (click)="closeModal()" class="btn btn-outline-secondary me-2"
id="delete-confirm-edit">{{ 'service.detail.return' | translate }}
</button>
<button *ngIf="!isNewService" (click)="patchService()"
@@ -306,7 +306,7 @@
</button>
</div>
<div *ngIf="isNewService">
<button (click)="closeModal()" class="btn btn-outline-secondary mr-2 "
<button (click)="closeModal()" class="btn btn-outline-secondary me-2 "
id="delete-confirm-new">{{ 'service.refuse.create' | translate }}
</button>
<button (click)="createService()"

View File

@@ -4,7 +4,7 @@
</div>
<div class="d-flex justify-content-end">
<button class="btn btn-success" routerLink="/admin/ldn/services/new"><i
class="fas fa-plus pr-2"></i>{{ 'process.overview.new' | translate }}</button>
class="fas fa-plus pe-2"></i>{{ 'process.overview.new' | translate }}</button>
</div>
<ds-pagination *ngIf="(ldnServicesRD$ | async)?.payload?.totalElements > 0"
[collectionSize]="(ldnServicesRD$ | async)?.payload?.totalElements"
@@ -85,7 +85,7 @@
<div class="mt-4 text-right">
<button (click)="closeModal()"
[attr.aria-label]="'ldn-service-overview-close-modal' | translate"
class="btn btn-outline-secondary mr-2">{{ 'service.detail.delete.cancel' | translate }}</button>
class="btn btn-outline-secondary me-2">{{ 'service.detail.delete.cancel' | translate }}</button>
<button (click)="deleteSelected(this.selectedServiceId.toString(), ldnServicesService)"
class="btn btn-danger"
[attr.aria-label]="'ldn-service-overview-select-delete' | translate"

View File

@@ -3,7 +3,7 @@
<div class="col-12 col-md-3 text-left h4">{{((isInbound$ | async) ? 'admin.notify.dashboard.inbound' : 'admin.notify.dashboard.outbound') | translate}}</div>
<div class="col-md-9">
<div class="h4">
<button (click)="resetDefaultConfiguration()" *ngIf="(selectedSearchConfig$ | async) !== defaultConfiguration" class="badge badge-primary mr-1 mb-1">
<button (click)="resetDefaultConfiguration()" *ngIf="(selectedSearchConfig$ | async) !== defaultConfiguration" class="badge bg-primary me-1 mb-1">
{{ 'admin-notify-logs.' + (selectedSearchConfig$ | async) | translate}}
<span> ×</span>
</button>

View File

@@ -28,7 +28,7 @@
<tbody>
<tr *ngFor="let bitstreamFormat of (bitstreamFormats$ | async)?.payload?.page">
<td>
<label class="mb-0">
<label class="form-label mb-0">
<input type="checkbox"
[attr.aria-label]="'admin.registries.bitstream-formats.select' | translate"
[checked]="(selectedBitstreamFormatIDs$ | async)?.includes(bitstreamFormat.id)"
@@ -52,7 +52,7 @@
<div>
<button *ngIf="(bitstreamFormats$ | async)?.payload?.page?.length > 0" class="btn btn-primary deselect" (click)="deselectAll()">{{'admin.registries.bitstream-formats.table.deselect-all' | translate}}</button>
<button *ngIf="(bitstreamFormats$ | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-right" (click)="deleteFormats()">{{'admin.registries.bitstream-formats.table.delete' | translate}}</button>
<button *ngIf="(bitstreamFormats$ | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteFormats()">{{'admin.registries.bitstream-formats.table.delete' | translate}}</button>
</div>
</div>
</div>

View File

@@ -64,7 +64,7 @@ export class FormatFormComponent implements OnInit {
*/
arrayElementLayout: DynamicFormControlLayout = {
grid: {
group: 'form-row',
group: 'row',
},
};

View File

@@ -29,7 +29,7 @@
<tr *ngFor="let schema of (metadataSchemas | async)?.payload?.page"
[ngClass]="{'table-primary' : (activeMetadataSchema$ | async)?.id === schema.id}">
<td>
<label class="mb-0">
<label class="form-label mb-0">
<input type="checkbox"
[checked]="(selectedMetadataSchemaIDs$ | async)?.includes(schema.id)"
(change)="selectMetadataSchema(schema, $event)"
@@ -52,7 +52,7 @@
</div>
<div>
<button *ngIf="(metadataSchemas | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-right" (click)="deleteSchemas()">{{'admin.registries.metadata.schemas.table.delete' | translate}}</button>
<button *ngIf="(metadataSchemas | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteSchemas()">{{'admin.registries.metadata.schemas.table.delete' | translate}}</button>
</div>
</div>

View File

@@ -53,7 +53,7 @@
<div>
<button [routerLink]="['/admin/registries/metadata']" class="btn btn-primary">{{'admin.registries.schema.return' | translate}}</button>
<button *ngIf="fields?.page?.length > 0" type="submit" class="btn btn-danger float-right" (click)="deleteFields()">{{'admin.registries.schema.fields.table.delete' | translate}}</button>
<button *ngIf="fields?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteFields()">{{'admin.registries.schema.fields.table.delete' | translate}}</button>
</div>
</ng-container>

View File

@@ -13,7 +13,7 @@
<legend>{{group.key | translate}}</legend>
<ng-container [formGroup]="filtersForm">
<div *ngFor="let filter of group.filters" class="col-6">
<input type="checkbox" id="flt-{{filter.id}}" value="{{filter.id}}" class="form-check-input col-1 align-baseline" formControlName="{{filter.id}}"><label for="flt-{{filter.id}}" class="col-11 align-middle" title="{{filter.tooltipKey | translate}}">{{filter.key | translate}}</label>
<input type="checkbox" id="flt-{{filter.id}}" value="{{filter.id}}" class="form-check-input col-1" formControlName="{{filter.id}}"><label for="flt-{{filter.id}}" class="col-11 align-middle" title="{{filter.tooltipKey | translate}}">{{filter.key | translate}}</label>
</div>
</ng-container>
</fieldset>

View File

@@ -0,0 +1,8 @@
.col-6 > label.col-11.align-middle {
padding-left: 15px;
padding-right: 15px;
}
fieldset.row-cols-2 > legend {
float: none !important;
}

View File

@@ -1,14 +1,13 @@
<div>
<div class="modal-header">{{'supervision-group-selector.header' | translate}}
<button type="button" class="close" (click)="close()" aria-label="Close">
<span aria-hidden="true">×</span>
<button type="button" class="btn-close" (click)="close()" aria-label="Close">
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="control-group col-sm-12">
<label for="supervisionOrder">{{'supervision-group-selector.select.type-of-order.label' | translate}}</label>
<select name="supervisionOrder" id="supervisionOrder" class="form-control"
<label for="supervisionOrder" class="form-label">{{'supervision-group-selector.select.type-of-order.label' | translate}}</label>
<select name="supervisionOrder" id="supervisionOrder" class="form-select"
[(ngModel)]="selectedOrderType"
attr.aria-label="{{'supervision-group-selector.select.type-of-order.label' | translate}}">
<option value="EDITOR">{{'supervision-group-selector.select.type-of-order.option.editor' | translate}}</option>
@@ -20,7 +19,7 @@
</div>
<div class="row">
<div class="control-group col-sm-12">
<label for="supervisionGroup">{{'supervision-group-selector.select.group.label' | translate}}</label>
<label for="supervisionGroup" class="form-label">{{'supervision-group-selector.select.group.label' | translate}}</label>
<ng-container class="mb-3">
<input id="supervisionGroup" class="form-control" type="text" [value]="selectedGroup ? dsoNameService.getName(selectedGroup) : ''" disabled>
<ds-error *ngIf="isSubmitted && !selectedGroup" message="{{'supervision-group-selector.select.group.error' | translate}}"></ds-error>

View File

@@ -4,7 +4,7 @@
<span>{{'workflow-item.search.result.list.element.supervised-by' | translate}} </span>
</div>
<div>
<a class="badge badge-primary mr-1 mb-1 text-capitalize mw-100 text-truncate" *ngFor="let supervisionOrder of supervisionOrders" data-test="soBadge"
<a class="badge bg-primary me-1 mb-1 text-capitalize mw-100 text-truncate" *ngFor="let supervisionOrder of supervisionOrders" data-test="soBadge"
[ngbTooltip]="'workflow-item.search.result.list.element.supervised.remove-tooltip' | translate"
(click)="$event.preventDefault(); $event.stopImmediatePropagation(); deleteSupervisionOrder(supervisionOrder)" aria-label="Close">
{{ dsoNameService.getName(supervisionOrder.group) }}

View File

@@ -1,8 +1,8 @@
<ng-template dsDynamicComponentLoader>
</ng-template>
<div #badges class="position-absolute ml-1">
<div #badges class="position-absolute ms-1">
<div class="workflow-badge">
<span class="badge badge-info">{{ "admin.workflow.item.workflow" | translate }}</span>
<span class="badge bg-info">{{ "admin.workflow.item.workflow" | translate }}</span>
</div>
</div>
<ul #buttons class="list-group list-group-flush">

View File

@@ -1,8 +1,8 @@
<ng-template dsDynamicComponentLoader>
</ng-template>
<div #badges class="position-absolute ml-1">
<div #badges class="position-absolute ms-1">
<div class="workflow-badge">
<span class="badge badge-info">{{ "admin.workflow.item.workspace" | translate }}</span>
<span class="badge bg-info">{{ "admin.workflow.item.workspace" | translate }}</span>
</div>
</div>
<ul #buttons class="list-group list-group-flush">

View File

@@ -1,5 +1,5 @@
<div class="workflow-badge">
<span class="badge badge-info">{{ "admin.workflow.item.workflow" | translate }}</span>
<span class="badge bg-info">{{ "admin.workflow.item.workflow" | translate }}</span>
</div>
<ds-listable-object-component-loader *ngIf="item$ | async"
[object]="item$ | async"

View File

@@ -1,4 +1,4 @@
<span class="badge badge-info">{{ "admin.workflow.item.workspace" | translate }}</span>
<span class="badge bg-info">{{ "admin.workflow.item.workspace" | translate }}</span>
<ds-listable-object-component-loader *ngIf="item$ | async"
[object]="item$ | async"
[viewMode]="viewModes.ListElement"

View File

@@ -1,8 +1,8 @@
<div class="container">
<ds-resource-policies [resourceType]="'bitstream'" [resourceUUID]="(dsoRD$ | async)?.payload?.id"></ds-resource-policies>
<div class="button-row bottom">
<div class="text-right">
<a [routerLink]="['/bitstreams', (dsoRD$ | async)?.payload?.id, 'edit']" role="button" class="btn btn-outline-secondary mr-1">
<div class="text-end">
<a [routerLink]="['/bitstreams', (dsoRD$ | async)?.payload?.id, 'edit']" role="button" class="btn btn-outline-secondary me-1">
<i class="fas fa-arrow-left"></i> {{'bitstream.edit.return' | translate}}
</a>
</div>

View File

@@ -255,7 +255,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy {
group: [this.iiifLabelModel],
}, {
grid: {
host: 'form-row',
host: 'row',
},
});
@@ -273,7 +273,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy {
group: [this.iiifTocModel],
}, {
grid: {
host: 'form-row',
host: 'row',
},
});
@@ -291,7 +291,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy {
group: [this.iiifWidthModel],
}, {
grid: {
host: 'form-row',
host: 'row',
},
});
@@ -309,7 +309,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy {
group: [this.iiifHeightModel],
}, {
grid: {
host: 'form-row',
host: 'row',
},
});
@@ -332,7 +332,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy {
],
}, {
grid: {
host: 'form-row',
host: 'row',
},
}),
new DynamicFormGroupModel({

View File

@@ -7,6 +7,8 @@
padding-bottom: calc(var(--ds-content-spacing) / 2);
padding-top: calc(var(--ds-content-spacing) / 2);
background-color: var(--ds-breadcrumb-bg);
padding-left: calc(var(--bs-spacer) *.75);
padding-right: calc(var(--bs-spacer) *.75);
}
li.breadcrumb-item {

View File

@@ -5,7 +5,7 @@
<div *ngIf="collectionRD?.payload as collection">
<ds-view-tracker [object]="collection"></ds-view-tracker>
<div class="d-flex flex-row border-bottom mb-4 pb-4">
<header class="comcol-header mr-auto">
<header class="comcol-header me-auto">
<!-- Collection Name -->
<ds-comcol-page-header
[name]="dsoNameService.getName(collection)">

View File

@@ -4,8 +4,8 @@
<div class="col-12 pb-4">
<h1 id="header" class="border-bottom pb-2">{{ 'collection.delete.head' | translate}}</h1>
<p class="pb-2">{{ 'collection.delete.text' | translate:{ dso: dsoNameService.getName(dso) } }}</p>
<div class="form-group row">
<div class="col text-right space-children-mr">
<div class="mb-3 row">
<div class="col text-end space-children-mr">
<button class="btn btn-outline-secondary" (click)="onCancel(dso)" [dsBtnDisabled]="(processing$ | async)">
<i class="fas fa-times"></i> {{'collection.delete.cancel' | translate}}
</button>

View File

@@ -1,6 +1,8 @@
<ds-comcol-role
*ngFor="let comcolRole of comcolRoles$ | async"
[dso]="collection$ | async"
[comcolRole]="comcolRole"
>
</ds-comcol-role>
<div class="custom-alignment">
<ds-comcol-role
*ngFor="let comcolRole of comcolRoles$ | async"
[dso]="collection$ | async"
[comcolRole]="comcolRole"
>
</ds-comcol-role>
</div>

View File

@@ -2,19 +2,19 @@
<div class="container-fluid space-children-mr" *ngIf="shouldShow">
<h3>{{ 'collection.source.controls.head' | translate }}</h3>
<div>
<span class="font-weight-bold">{{'collection.source.controls.harvest.status' | translate}}</span>
<span class="fw-bold">{{'collection.source.controls.harvest.status' | translate}}</span>
<span>{{contentSource?.harvestStatus}}</span>
</div>
<div>
<span class="font-weight-bold">{{'collection.source.controls.harvest.start' | translate}}</span>
<span class="fw-bold">{{'collection.source.controls.harvest.start' | translate}}</span>
<span>{{contentSource?.harvestStartTime ? contentSource?.harvestStartTime : 'collection.source.controls.harvest.no-information'|translate }}</span>
</div>
<div>
<span class="font-weight-bold">{{'collection.source.controls.harvest.last' | translate}}</span>
<span class="fw-bold">{{'collection.source.controls.harvest.last' | translate}}</span>
<span>{{contentSource?.lastHarvested ? contentSource?.lastHarvested : 'collection.source.controls.harvest.no-information'|translate }}</span>
</div>
<div>
<span class="font-weight-bold">{{'collection.source.controls.harvest.message' | translate}}</span>
<span class="fw-bold">{{'collection.source.controls.harvest.message' | translate}}</span>
<span>{{contentSource?.message ? contentSource?.message: 'collection.source.controls.harvest.no-information'|translate }}</span>
</div>

View File

@@ -1,5 +1,5 @@
<div class="container-fluid">
<div class="d-inline-block float-right space-children-mr">
<div class="d-inline-block float-end space-children-mr">
<button class=" btn btn-danger" *ngIf="(isReinstatable$ | async) !== true"
[dsBtnDisabled]="(hasChanges$ | async) !== true"
(click)="discard()"><i
@@ -43,7 +43,7 @@
<div class="container mt-2" *ngIf="(contentSource?.harvestType !== harvestTypeNone)">
<div class="row">
<div class="col-12">
<div class="d-inline-block float-right ml-1 space-children-mr">
<div class="d-inline-block float-end ms-1 space-children-mr">
<button class=" btn btn-danger" *ngIf="(isReinstatable$ | async) !== true"
[dsBtnDisabled]="(hasChanges$ | async) !== true"
(click)="discard()"><i

View File

@@ -0,0 +1,9 @@
:host ::ng-deep #oaiSetContainer {
> :first-child {
padding-left: 0;
}
> :last-child {
padding-right: 0;
}
}

View File

@@ -23,6 +23,7 @@ import { getCollectionPageRoute } from '../collection-page-routing-paths';
@Component({
selector: 'ds-edit-collection',
templateUrl: '../../shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.html',
styleUrls: ['./edit-collection-page.component.scss'],
imports: [
RouterLink,
TranslateModule,

View File

@@ -24,7 +24,7 @@
<cdk-tree-node *cdkTreeNodeDef="let node; when: hasChild" cdkTreeNodePadding
class="example-tree-node expandable-node">
<div class="btn-group">
<button *ngIf="hasChild(null, node) | async" type="button" class="btn btn-default" cdkTreeNodeToggle
<button *ngIf="hasChild(null, node) | async" type="button" class="btn btn-default btn-transparent" cdkTreeNodeToggle
[attr.aria-label]="(node.isExpanded ? 'communityList.collapse' : 'communityList.expand') | translate:{ name: dsoNameService.getName(node.payload) }"
(click)="toggleExpanded(node)"
data-test="expand-button">
@@ -39,8 +39,8 @@
<div class="d-flex flex-row">
<span class="d-flex align-middle my-auto">
<a [routerLink]="node.route" class="lead">{{ dsoNameService.getName(node.payload) }}</a>
<span class="pr-2">&nbsp;</span>
<span *ngIf="node.payload.archivedItemsCount >= 0" class="badge badge-pill badge-secondary align-top archived-items-lead my-auto">{{node.payload.archivedItemsCount}}</span>
<span class="pe-2">&nbsp;</span>
<span *ngIf="node.payload.archivedItemsCount >= 0" class="badge rounded-pill bg-secondary align-top archived-items-lead my-auto ps-2 pe-2">{{node.payload.archivedItemsCount}}</span>
</span>
</div>
</div>

View File

@@ -3,7 +3,7 @@
<div *ngIf="communityRD?.payload; let communityPayload">
<ds-view-tracker [object]="communityPayload"></ds-view-tracker>
<div class="d-flex flex-row border-bottom mb-4 pb-4">
<header class="comcol-header mr-auto">
<header class="comcol-header me-auto">
<!-- Community name -->
<ds-comcol-page-header [name]="dsoNameService.getName(communityPayload)"></ds-comcol-page-header>
<!-- Community logo -->

View File

@@ -4,8 +4,8 @@
<div class="col-12 pb-4">
<h1 id="header" class="border-bottom pb-2">{{ 'community.delete.head' | translate}}</h1>
<p class="pb-2">{{ 'community.delete.text' | translate:{ dso: dsoNameService.getName(dso) } }}</p>
<div class="form-group row">
<div class="col text-right space-children-mr">
<div class="mb-3 row">
<div class="col text-end space-children-mr">
<button class="btn btn-outline-secondary" (click)="onCancel(dso)" [dsBtnDisabled]="(processing$ | async)">
<i class="fas fa-times" aria-hidden="true"></i> {{'community.delete.cancel' | translate}}
</button>

View File

@@ -1,6 +1,8 @@
<ds-comcol-role
*ngFor="let comcolRole of comcolRoles$ | async"
[dso]="community$ | async"
[comcolRole]="comcolRole"
>
</ds-comcol-role>
<div class="custom-alignment">
<ds-comcol-role
*ngFor="let comcolRole of comcolRoles$ | async"
[dso]="community$ | async"
[comcolRole]="comcolRole"
>
</ds-comcol-role>
</div>

View File

@@ -1,16 +1,16 @@
<form [formGroup]="form" (ngSubmit)="submit()">
<div class="form-group">
<div class="mb-3">
<div class="row mb-2">
<div class="col-12 col-sm-6">
<label class="font-weight-bold" for="task">{{'curation.form.task-select.label' |translate }}</label>
<select id="task" formControlName="task" class="form-control">
<label class="fw-bold form-label" for="task">{{'curation.form.task-select.label' |translate }}</label>
<select id="task" formControlName="task" class="form-select">
<option *ngFor="let task of tasks" [value]="task">
{{ 'curation-task.task.' + task + '.label' | translate }}
</option>
</select>
</div>
<div *ngIf="!hasHandleValue()" class="col-12 col-sm-6">
<label class="font-weight-bold" for="handle">{{'curation.form.handle.label' |translate }}</label>
<label class="fw-bold form-label" for="handle">{{'curation.form.handle.label' |translate }}</label>
<input id="handle" class="form-control" formControlName="handle">
<small class="text-muted">{{'curation.form.handle.hint' |translate }}</small>
</div>

View File

@@ -24,26 +24,26 @@
}
&.ds-warning {
background-color: var(--ds-warning-bg);
background-color: var(--ds-warning-bg-subtle);
.ds-flex-cell {
border: 1px solid var(--bs-warning);
border: 1px solid var(--bs-warning-border-subtle);
}
}
&.ds-danger {
background-color: var(--ds-danger-bg);
background-color: var(--ds-danger-bg-subtle);
.ds-flex-cell {
border: 1px solid var(--bs-danger);
border: 1px solid var(--bs-danger-border-subtle);
}
}
&.ds-success {
background-color: var(--ds-success-bg);
background-color: var(--ds-success-bg-subtle);
.ds-flex-cell {
border: 1px solid var(--bs-success);
border: 1px solid var(--bs-success-border-subtle);
}
}
}

View File

@@ -24,7 +24,7 @@
{{ (enabledFreeTextEditing ? dsoType + '.edit.metadata.edit.buttons.disable-free-text-editing' : dsoType + '.edit.metadata.edit.buttons.enable-free-text-editing') | translate }}
</button>
<div *ngIf="!isVirtual && !mdValue.editing && mdValue.newValue.authority && mdValue.newValue.confidence !== ConfidenceTypeEnum.CF_UNSET && mdValue.newValue.confidence !== ConfidenceTypeEnum.CF_NOVALUE">
<span class="badge badge-light border" >
<span class="badge bg-light border" >
<i dsAuthorityConfidenceState
class="fas fa-fw p-0"
aria-hidden="true"
@@ -37,7 +37,7 @@
<div class="mt-2" *ngIf=" mdValue.editing && (isAuthorityControlled() | async) && (isSuggesterVocabulary() | async)">
<div class="btn-group w-75">
<i dsAuthorityConfidenceState
class="fas fa-fw p-0 mr-1 mt-auto mb-auto"
class="fas fa-fw p-0 me-1 mt-auto mb-auto"
aria-hidden="true"
[authorityValue]="mdValue.newValue.confidence"
[iconMode]="true"
@@ -60,7 +60,7 @@
</div>
</div>
<div class="d-flex" *ngIf="mdRepresentation">
<a class="mr-2" target="_blank" [routerLink]="mdRepresentationItemRoute$ | async">{{ mdRepresentationName$ | async }}</a>
<a class="me-2" target="_blank" [routerLink]="mdRepresentationItemRoute$ | async">{{ mdRepresentationName$ | async }}</a>
<ds-type-badge [object]="mdRepresentation"></ds-type-badge>
</div>
</div>

View File

@@ -14,3 +14,6 @@
.cdk-drag-placeholder {
opacity: 0;
}
.badge.bg-light {
color: var(--bs-gray-900);
}

View File

@@ -1,24 +1,24 @@
<div class="item-metadata" *ngIf="form">
<div class="button-row top d-flex my-2 space-children-mr ml-gap">
<button class="mr-auto btn btn-success" id="dso-add-btn" [dsBtnDisabled]="form.newValue || (saving$ | async)"
<div class="button-row top d-flex my-2 space-children-mr ms-gap">
<button class="me-auto btn btn-success" id="dso-add-btn" [dsBtnDisabled]="form.newValue || (saving$ | async)"
[attr.aria-label]="dsoType + '.edit.metadata.add-button' | translate"
[title]="dsoType + '.edit.metadata.add-button' | translate"
(click)="add()"><i class="fas fa-plus" aria-hidden="true"></i>
<span class="d-none d-sm-inline">&nbsp;{{ dsoType + '.edit.metadata.add-button' | translate }}</span>
</button>
<button class="btn btn-warning ml-1" id="dso-reinstate-btn" *ngIf="isReinstatable" [dsBtnDisabled]="(saving$ | async)"
<button class="btn btn-warning ms-1" id="dso-reinstate-btn" *ngIf="isReinstatable" [dsBtnDisabled]="(saving$ | async)"
[attr.aria-label]="dsoType + '.edit.metadata.reinstate-button' | translate"
[title]="dsoType + '.edit.metadata.reinstate-button' | translate"
(click)="reinstate()"><i class="fas fa-undo-alt" aria-hidden="true"></i>
<span class="d-none d-sm-inline">&nbsp;{{ dsoType + '.edit.metadata.reinstate-button' | translate }}</span>
</button>
<button class="btn btn-primary ml-1" id="dso-save-btn" [dsBtnDisabled]="!hasChanges || (saving$ | async)"
<button class="btn btn-primary ms-1" id="dso-save-btn" [dsBtnDisabled]="!hasChanges || (saving$ | async)"
[attr.aria-label]="dsoType + '.edit.metadata.save-button' | translate"
[title]="dsoType + '.edit.metadata.save-button' | translate"
(click)="submit()"><i class="fas fa-save" aria-hidden="true"></i>
<span class="d-none d-sm-inline">&nbsp;{{ dsoType + '.edit.metadata.save-button' | translate }}</span>
</button>
<button class="btn btn-danger ml-1" id="dso-discard-btn" *ngIf="!isReinstatable"
<button class="btn btn-danger ms-1" id="dso-discard-btn" *ngIf="!isReinstatable"
[attr.aria-label]="dsoType + '.edit.metadata.discard-button' | translate"
[title]="dsoType + '.edit.metadata.discard-button' | translate"
[dsBtnDisabled]="!hasChanges || (saving$ | async)"
@@ -76,7 +76,7 @@
<ds-alert [content]="dsoType + '.edit.metadata.empty'" [type]="AlertTypeEnum.Info"></ds-alert>
</div>
<div class="button-row bottom d-inline-block w-100">
<div class="mt-2 float-right space-children-mr ml-gap">
<div class="mt-2 float-end space-children-mr ms-gap">
<button class="btn btn-warning" *ngIf="isReinstatable" [dsBtnDisabled]="(saving$ | async)"
[attr.aria-label]="dsoType + '.edit.metadata.reinstate-button' | translate"
[title]="dsoType + '.edit.metadata.reinstate-button' | translate"

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>
@@ -38,7 +38,7 @@
</a>
</div>
</div>
<div class="mt-5 w-100">
<div class="mt-5 w-100 px-0">
<ds-tabbed-related-entities-search [item]="object"
[relationTypes]="[{
label: 'isJournalOfPublication',

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<ds-truncatable [id]="dso.id">
<div class="position-absolute ml-1">
<div class="position-absolute ms-1">
<ng-content></ng-content>
</div>
<a *ngIf="linkType !== linkTypes.None"

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>
@@ -59,7 +59,7 @@
</a>
</div>
</div>
<div class="mt-5 w-100">
<div class="mt-5 w-100 px-0">
<ds-tabbed-related-entities-search [item]="object"
[relationTypes]="[{
label: 'isOrgUnitOfPerson',

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field class="mr-auto" [item]="object">
<ds-item-page-title-field class="me-auto" [item]="object">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>
@@ -55,7 +55,7 @@
</a>
</div>
</div>
<div class="mt-5 w-100">
<div class="mt-5 w-100 px-0">
<ds-tabbed-related-entities-search [item]="object"
[relationTypes]="[{
label: 'isAuthorOfPublication',

View File

@@ -1,6 +1,6 @@
<ds-results-back-button *ngIf="showBackButton$ | async" [back]="back"></ds-results-back-button>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>

View File

@@ -1,5 +1,5 @@
<div class="d-flex">
<!-- <div class="person-thumbnail pr-2">-->
<!-- <div class="person-thumbnail pe-2">-->
<!-- <ds-themed-thumbnail [thumbnail]="dso?.thumbnail | async" [defaultImage]="'assets/images/orgunit-placeholder.svg'"></ds-themed-thumbnail>-->
<!-- </div>-->
<div class="flex-grow-1">

View File

@@ -1,7 +1,6 @@
<div class="modal-header">
<h4 class="modal-title">New name variant</h4>
<button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">&times;</span>
<button type="button" class="btn-close" aria-label="Close" (click)="modal.dismiss('Cross click')">
</button>
</div>
<div class="modal-body">

View File

@@ -43,7 +43,7 @@ describe('NameVariantModalComponent', () => {
});
it('when close button is clicked, dismiss should be called on the modal', () => {
debugElement.query(By.css('button.close')).triggerEventHandler('click', {});
debugElement.query(By.css('button.btn-close')).triggerEventHandler('click', {});
expect(modal.dismiss).toHaveBeenCalled();
});

View File

@@ -1,4 +1,4 @@
<footer class="text-lg-start">
<footer>
<div *ngIf="showTopFooter" class="top-footer">
<!-- Grid container -->
<div class=" container p-4">

View File

@@ -68,6 +68,10 @@
}
}
}
.btn {
box-shadow: none;
}
}
}

View File

@@ -5,7 +5,7 @@
<div class="card-body">
<div class="row">
<div class="col-12">
<span class="font-weight-bold">{{'forgot-password.form.identification.email' | translate}} </span>
<span class="fw-bold form-label">{{'forgot-password.form.identification.email' | translate}} </span>
<span [attr.data-test]="'email' | dsBrowserOnly">{{(registration$ |async).email}}</span>
</div>
</div>

View File

@@ -11,7 +11,7 @@
<ds-context-help-toggle></ds-context-help-toggle>
<ds-auth-nav-menu></ds-auth-nav-menu>
<ds-impersonate-navbar></ds-impersonate-navbar>
<div *ngIf="isMobile$ | async" class="pl-2">
<div *ngIf="isMobile$ | async" class="ps-2">
<button class="navbar-toggler px-0" type="button" (click)="toggleNavbar()"
aria-controls="collapsingNav"
aria-expanded="false" [attr.aria-label]="'nav.toggle' | translate">

View File

@@ -22,6 +22,6 @@
</div>
</div>
<ng-container *ngIf="entry && isPlainProperty(entry.value)">
<p data-test="property"> <span class="font-weight-bold">{{ getPropertyLabel(entry.key) | titlecase }}</span> : {{entry.value}}</p>
<p data-test="property"> <span class="fw-bold">{{ getPropertyLabel(entry.key) | titlecase }}</span> : {{entry.value}}</p>
</ng-container>
</div>

View File

@@ -1,18 +1,14 @@
<ng-container *ngIf="healthInfoResponse">
<ngb-accordion #acc="ngbAccordion" [activeIds]="activeId">
<ngb-panel [id]="entry.key" *ngFor="let entry of healthInfoResponse | dsObjNgFor">
<ng-template ngbPanelHeader>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle(entry.key)" data-test="info-component">
<ng-template ngbPanelTitle>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" (click)="acc.toggle(entry.key)" data-test="info-component">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()" [attr.aria-expanded]="acc.isExpanded(entry.key)"
[attr.aria-controls]="'health-info-' + entry.key + '-content'">
{{ getPanelLabel(entry.key) | titlecase }}
</button>
<div class="text-right d-flex gap-2">
<ds-health-status [status]="entry.value?.status"></ds-health-status>
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded(entry.key)" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded(entry.key)" class="fas fa-chevron-down fa-fw"></span>
</div>
<div class="text-end d-flex gap-2">
<ds-health-status class="me-2" [status]="entry.value?.status"></ds-health-status>
</div>
</div>
</ng-template>

View File

@@ -22,7 +22,7 @@
</ng-container>
<ng-container *ngIf="healthComponent?.details">
<div *ngFor="let item of healthComponent?.details | dsObjNgFor" data-test="details">
<p data-test="property"><span class="font-weight-bold">{{ getPropertyLabel(item.key) | titlecase }}</span> : {{item.value}}</p>
<p data-test="property"><span class="fw-bold">{{ getPropertyLabel(item.key) | titlecase }}</span> : {{item.value}}</p>
</div>
</ng-container>
<ng-container *ngIf="!healthComponent?.details && !healthComponent?.components">

View File

@@ -4,18 +4,14 @@
</p>
<ngb-accordion #acc="ngbAccordion" [activeIds]="activeId">
<ngb-panel [id]="entry.key" *ngFor="let entry of healthResponse.components | dsObjNgFor">
<ng-template ngbPanelHeader>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle(entry.key)" data-test="component">
<ng-template ngbPanelTitle>
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" (click)="acc.toggle(entry.key)" data-test="component">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()" [attr.aria-expanded]="acc.isExpanded(entry.key)"
[attr.aria-controls]="'health-panel-' + entry.key + '-content'">
{{ getPanelLabel(entry.key) | titlecase }}
</button>
<div class="text-right d-flex gap-2">
<ds-health-status [status]="entry.value?.status"></ds-health-status>
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded(entry.key)" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded(entry.key)" class="fas fa-chevron-down fa-fw"></span>
</div>
<div class="text-end d-flex gap-2">
<ds-health-status class="me-2" [status]="entry.value?.status"></ds-health-status>
</div>
</div>
</ng-template>

View File

@@ -1,12 +1,12 @@
<ng-container [ngSwitch]="status">
<i *ngSwitchCase="HealthStatus.UP"
class="fa fa-check-circle text-success my-auto"
class="fa fa-check-circle text-success ms-2 mt-1"
ngbTooltip="{{'health-page.status.ok.info' | translate}}" container="body" ></i>
<i *ngSwitchCase="HealthStatus.UP_WITH_ISSUES"
class="fa fa-exclamation-triangle text-warning my-auto"
class="fa fa-exclamation-triangle text-warning ms-2 mt-1"
ngbTooltip="{{'health-page.status.warning.info' | translate}}" container="body"></i>
<i *ngSwitchCase="HealthStatus.DOWN"
class="fa fa-times-circle text-danger my-auto"
class="fa fa-times-circle text-danger ms-2 mt-1"
ngbTooltip="{{'health-page.status.error.info' | translate}}" container="body"></i>
</ng-container>

View File

@@ -1,8 +1,8 @@
<div class="jumbotron jumbotron-fluid mt-ncs">
<div class="jumbotron py-4 px-2 py-sm-5 px-sm-0 mt-0 mb-4">
<div class="container">
<div class="d-flex flex-wrap">
<div>
<h1 class="display-3">DSpace 9</h1>
<h1 class="display-2">DSpace 9</h1>
<p class="lead">DSpace is the world leading open source repository platform that enables organisations to:</p>
</div>
</div>

View File

@@ -13,7 +13,7 @@
a {
color: var(--ds-home-news-link-color);
@include hover {
&:hover {
color: var(--ds-home-news-link-hover-color);
}
}

View File

@@ -6,7 +6,7 @@
<ds-listable-object-component-loader [object]="item" [viewMode]="viewMode" class="pb-4">
</ds-listable-object-component-loader>
</div>
<button (click)="onLoadMore()" class="btn btn-primary search-button mt-4"> {{'vocabulary-treeview.load-more' | translate }} ...</button>
<button (click)="onLoadMore()" class="btn btn-primary search-button mt-4 float-start ng-tns-c290-40"> {{'vocabulary-treeview.load-more' | translate }} ...</button>
</div>
<ds-error *ngIf="itemRD?.hasFailed" message="{{'error.recent-submissions' | translate}}"></ds-error>
<ds-loading *ngIf="!itemRD || itemRD.isLoading" message="{{'loading.recent-submissions' | translate}}">

View File

@@ -2,11 +2,11 @@
<ds-end-user-agreement-content></ds-end-user-agreement-content>
<form class="form-user-agreement-accept mt-4" (ngSubmit)="submit()" novalidate>
<input class="ml-1 mr-2" type="checkbox" id="user-agreement-accept" [(ngModel)]="accepted" [ngModelOptions]="{standalone: true}">
<input class="ms-1 me-2" type="checkbox" id="user-agreement-accept" [(ngModel)]="accepted" [ngModelOptions]="{standalone: true}">
<label class="col-form-label-lg" for="user-agreement-accept">{{ 'info.end-user-agreement.accept' | translate }}</label>
<div class="d-flex mt-4">
<button id="button-cancel" type="button" (click)="cancel()" class="btn btn-outline-secondary mr-auto">{{ 'info.end-user-agreement.buttons.cancel' | translate }}</button>
<button id="button-cancel" type="button" (click)="cancel()" class="btn btn-outline-secondary me-auto">{{ 'info.end-user-agreement.buttons.cancel' | translate }}</button>
<button id="button-save" type="submit" class="btn btn-primary" [dsBtnDisabled]="!accepted">{{ 'info.end-user-agreement.buttons.save' | translate }}</button>
</div>
</form>

View File

@@ -5,7 +5,7 @@
<form [formGroup]="feedbackForm" (ngSubmit)="createFeedback()" class="col p-0">
<div class="row mt-3">
<div class="control-group col-sm-12">
<label class="control-label" for="email">{{ 'info.feedback.email-label' | translate }}&nbsp;</label>
<label class="control-label form-label" for="email">{{ 'info.feedback.email-label' | translate }}&nbsp;</label>
<input id="email" class="form-control" name="email" type="text" value="" formControlName="email" autofocus="autofocus" title="{{ 'info.feedback.email_help' | translate }}">
<small class="text-muted">{{ 'info.feedback.email_help' | translate }}</small>
</div>
@@ -20,7 +20,7 @@
<div class="row mt-3">
<div class="control-group col-sm-12">
<label class="control-label" for="comments">{{ 'info.feedback.comments' | translate }}:&nbsp;</label>
<label class="control-label form-label" for="comments">{{ 'info.feedback.comments' | translate }}:&nbsp;</label>
<textarea id="comments" formControlName="message" class="form-control" name="message" cols="20" rows="5"> </textarea>
</div>
</div>
@@ -33,14 +33,14 @@
<div class="row mt-3">
<div class="control-group col-sm-12">
<label class="control-label" for="page">{{ 'info.feedback.page-label' | translate }}&nbsp;</label>
<label class="control-label form-labe" for="page">{{ 'info.feedback.page-label' | translate }}&nbsp;</label>
<input id="page" readonly class="form-control" name="page" type="text" value="" formControlName="page" autofocus="autofocus" title="{{ 'info.feedback.page_help' | translate }}">
<small class="text-muted">{{ 'info.feedback.page_help' | translate }}</small>
</div>
</div>
<div class="row mt-3">
<div class="control-group col-sm-12 text-right">
<div class="control-group col-sm-12 text-end">
<button [dsBtnDisabled]="!feedbackForm.valid" class="btn btn-primary" name="submit" type="submit">{{ 'info.feedback.send' | translate }}</button>
</div>
</div>

View File

@@ -11,10 +11,10 @@
</div>
<form [class]="'ng-invalid'" [formGroup]="requestCopyForm" (ngSubmit)="onSubmit()">
<div class="form-group">
<div class="mb-3">
<div class="row mb-4">
<div class="col-12">
<label for="name">{{'bitstream-request-a-copy.name.label' | translate}}</label>
<label for="name" class="form-label">{{'bitstream-request-a-copy.name.label' | translate}}</label>
<input [className]="(name.invalid) && (name.dirty || name.touched) ? 'form-control is-invalid' :'form-control'"
type="text" id="name" formControlName="name"/>
<div *ngIf="name.invalid && (name.dirty || name.touched)"
@@ -28,7 +28,7 @@
<div class="row mb-4">
<div class="col-12">
<label
for="email">{{'bitstream-request-a-copy.email.label' | translate}}</label>
for="email" class="form-label">{{'bitstream-request-a-copy.email.label' | translate}}</label>
<input
[className]="(email.invalid) && (email.dirty || email.touched) ? 'form-control is-invalid' :'form-control'"
id="email" formControlName="email">
@@ -44,13 +44,13 @@
<div class="row mb-4">
<div class="col-12">
<div>{{'bitstream-request-a-copy.allfiles.label' |translate}}</div>
<div class="ml-4">
<div class="ms-4 form-check">
<input [className]="'form-check-input'" type="radio"
id="allfiles-true" formControlName="allfiles" value="true">
<label class="form-check-label"
for="allfiles-true">{{'bitstream-request-a-copy.files-all-true.label' | translate}}</label>
</div>
<div class="ml-4">
<div class="ms-4">
<input [className]="'form-check-input'" type="radio"
id="allfiles-false" formControlName="allfiles" value="false" [attr.disabled]="bitstream === undefined ? true : null ">
<label class="form-check-label"
@@ -61,7 +61,7 @@
<div class="row mb-4">
<div class="col-12">
<label
for="message">{{'bitstream-request-a-copy.message.label' | translate}}</label>
for="message" class="form-label">{{'bitstream-request-a-copy.message.label' | translate}}</label>
<textarea rows="5"
[className]="'form-control'"
id="message" formControlName="message"></textarea>
@@ -72,9 +72,9 @@
<hr>
<div class="row">
<div class="col-12 text-right">
<div class="col-12 text-end">
<a (click)="navigateBack()" role="button" class="btn btn-outline-secondary mr-1">
<a (click)="navigateBack()" role="button" class="btn btn-outline-secondary me-1">
<i class="fas fa-arrow-left"></i> {{'bitstream-request-a-copy.return' | translate}}
</a>

View File

@@ -5,13 +5,13 @@
<h1>{{'item.bitstreams.upload.title' | translate}}</h1>
<ng-container *ngVar="(itemRD$ | async)?.payload as item">
<div *ngIf="item">
<span class="font-weight-bold">{{'item.bitstreams.upload.item' | translate}}</span>
<span class="fw-bold">{{'item.bitstreams.upload.item' | translate}}</span>
<span>{{ dsoNameService.getName(item) }}</span>
</div>
</ng-container>
</div>
<div class="col-12">
<label class="font-weight-bold">{{'item.bitstreams.upload.bundle' | translate}}</label>
<label class="fw-bold form-label">{{'item.bitstreams.upload.bundle' | translate}}</label>
<ds-dso-input-suggestions #f id="search-form"
[suggestions]="bundles"
[placeholder]="'item.bitstreams.upload.bundle.placeholder' | translate"
@@ -24,7 +24,7 @@
(click)="f.open()"
ngDefaultControl>
</ds-dso-input-suggestions>
<button *ngIf="!selectedBundleId && selectedBundleName?.length > 0" class="btn btn-success mr-2" (click)="createBundle()">
<button *ngIf="!selectedBundleId && selectedBundleName?.length > 0" class="btn btn-success me-2" (click)="createBundle()">
<i class="fa fa-plus"></i> {{ 'item.bitstreams.upload.bundle.new' | translate }}
</button>
<ds-uploader class="w-100" *ngIf="selectedBundleId"

View File

@@ -27,7 +27,7 @@
<router-outlet></router-outlet>
</div>
<div class="button-row bottom">
<div class="text-right">
<div class="text-end">
<a [routerLink]="getItemPage((itemRD$ | async)?.payload)" role="button" class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{'item.edit.return' | translate}}</a>
</div>
</div>

View File

@@ -4,7 +4,7 @@
</div>
<div class="button-row top d-flex mt-2 space-children-mr">
<button class="mr-auto btn btn-success"
<button class="me-auto btn btn-success"
[attr.aria-label]="'item.edit.bitstreams.upload-button' | translate"
[routerLink]="[itemPageRoute, 'bitstreams', 'new']"><i
class="fas fa-upload"></i>
@@ -50,7 +50,7 @@
<ds-loading *ngIf="!bundles" message="{{'loading.bitstreams' | translate}}"></ds-loading>
<div class="button-row bottom">
<div class="mt-4 float-right space-children-mr ml-gap">
<div class="mt-4 float-end space-children-mr ms-gap">
<button class="btn btn-warning" *ngIf="isReinstatable$ | async"
[attr.aria-label]="'item.edit.bitstreams.reinstate-button' | translate"
(click)="reinstate()"><i

View File

@@ -82,7 +82,7 @@
<th class="bitstream-name row-element {{ columnSizes.columns[0].buildClasses() }}"
scope="row" id="{{ entry.nameStripped }}" headers="{{ bundleName }} name">
<div class="drag-handle text-muted float-left p-1 mr-2" tabindex="0" cdkDragHandle
<div class="drag-handle text-muted float-left p-1 mr-2 d-inline" tabindex="0" cdkDragHandle
(keydown.enter)="select($event, entry)" (keydown.space)="select($event, entry)" (click)="select($event, entry)">
<i class="fas fa-grip-vertical fa-fw"
[title]="'item.edit.bitstreams.edit.buttons.drag' | translate"></i>

View File

@@ -1,13 +1,16 @@
.header-row {
color: var(--bs-table-dark-color);
background-color: var(--bs-table-dark-bg);
border-color: var(--bs-table-dark-bg);
& > th {
padding: .75rem;
}
--bs-table-bg: var(--bs-dark);
--bs-table-bg-state: var(--bs-dark);
--bs-table-color-state: var(--bs-light);
}
.bundle-row {
color: var(--bs-table-head-color);
background-color: var(--bs-table-head-bg);
border-color: var(--bs-table-border-color);
--bs-table-color-state: var(--bs-dark);
--bs-table-bg: var(--bs-light-bg-subtle);
--bs-table-bg-state: var(--bs-light-bg-subtle);
}
.row-element {

View File

@@ -35,7 +35,7 @@
[object]="relatedItem"
[viewMode]="viewMode">
</ds-listable-object-component-loader>
<div class="ml-auto">
<div class="ms-auto">
<div class="btn-group">
<button class="btn btn-outline-info btn-sm"
(click)="openVirtualMetadataModal(virtualMetadataModal)">
@@ -48,9 +48,8 @@
<div class="thumb-font-1">
<div class="modal-header">
{{'virtual-metadata.delete-item.modal-head' | translate}}
<button type="button" class="close"
<button type="button" class="btn-close"
(click)="closeVirtualMetadataModal()" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
@@ -61,7 +60,7 @@
</ds-listable-object-component-loader>
<div *ngFor="let metadata of (relationshipDto.virtualMetadata$ | async)">
<div>
<div class="font-weight-bold">
<div class="fw-bold">
{{metadata.metadataField}}
</div>
<div>

View File

@@ -20,7 +20,7 @@
<div class="row">
<div class="col-12">
<p>
<label for="inheritPoliciesCheckbox">
<label class="form-label" for="inheritPoliciesCheckbox">
<ng-template #tooltipContent>
{{ 'item.edit.move.inheritpolicies.tooltip' | translate }}
</ng-template>
@@ -36,7 +36,7 @@
</div>
<div class="button-row bottom">
<div class="float-right space-children-mr">
<div class="float-end space-children-mr">
<button [routerLink]="[(itemPageRoute$ | async), 'edit']" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left"></i> {{'item.edit.move.cancel' | translate}}
</button>

View File

@@ -1,9 +1,9 @@
<div class="col-12 col-md-3 h-auto float-left d-flex action-label">
<div class="col-12 col-md-3 h-auto float-start d-flex action-label">
<span class="justify-content-center align-self-center font-weight-bold">
{{'item.edit.tabs.status.buttons.' + operation.operationKey + '.label' | translate}}
</span>
</div>
<div class="col-12 col-md-9 float-left action-button">
<div class="col-12 col-md-9 float-start action-button">
<span *ngIf="operation.authorized">
<button class="btn btn-outline-primary" [dsBtnDisabled]="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}}

View File

@@ -5,7 +5,7 @@
<p>{{descriptionMessage | translate}}</p>
<div *ngFor="let identifier of (identifiers$ | async)" class="w-100 p">
<div *ngIf="(identifier.identifierType === 'doi')">
<p class="float-left">{{doiToUpdateMessage | translate}}: {{identifier.value}}
<p class="float-start">{{doiToUpdateMessage | translate}}: {{identifier.value}}
({{"item.edit.identifiers.doi.status."+identifier.identifierStatus|translate}})
</p>
</div>

View File

@@ -1,6 +1,6 @@
<h2 class="h4">
{{relationshipMessageKey$ | async | translate}}
<button class="ml-2 btn btn-success" [dsBtnDisabled]="(hasChanges | async)" (click)="openLookup()">
<button class="ms-2 btn btn-success" [dsBtnDisabled]="(hasChanges | async)" (click)="openLookup()">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline">&nbsp;{{"item.edit.relationships.edit.buttons.add" | translate}}</span>
</button>

View File

@@ -7,7 +7,7 @@
>
</ds-listable-object-component-loader>
</div>
<div class="col-2">
<div class="col-2 position-relative">
<div class="btn-group relationship-action-buttons">
<button [dsBtnDisabled]="!canRemove()" (click)="openVirtualMetadataModal(virtualMetadataModal)"
class="btn btn-outline-danger btn-sm"

View File

@@ -15,7 +15,7 @@
</div>
</div>
<div class="button-row bottom">
<div class="float-right ml-gap">
<div class="float-end ms-gap">
<ng-container *ngTemplateOutlet="buttons"></ng-container>
</div>
</div>

View File

@@ -1,28 +1,28 @@
<p class="mt-2">{{'item.edit.tabs.status.description' | translate}}</p>
<div class="row">
<div *ngFor="let statusKey of statusDataKeys" class="w-100 pt-1">
<div class="col-12 col-md-3 float-left status-label font-weight-bold">
<div class="col-12 col-md-3 float-start status-label font-weight-bold">
{{'item.edit.tabs.status.labels.' + statusKey | translate}}:
</div>
<div class="col-12 col-md-9 float-left status-data" id="status-{{statusKey}}">
<div class="col-12 col-md-9 float-start status-data" id="status-{{statusKey}}">
{{statusData[statusKey]}}
</div>
</div>
<div *ngFor="let identifier of (identifiers$ | async)" class="w-100 pt-1">
<div *ngIf="(identifier.identifierType==='doi')">
<div class="col-12 col-md-3 float-left status-label font-weight-bold">
<div class="col-12 col-md-3 float-start status-label font-weight-bold">
{{identifier.identifierType.toLocaleUpperCase()}}
</div>
<div class="col-12 col-md-9 float-left status-label font-weight-bold">{{identifier.value}}
<div class="col-12 col-md-9 float-start status-label font-weight-bold">{{identifier.value}}
({{"item.edit.identifiers.doi.status."+identifier.identifierStatus|translate}})</div>
</div>
</div>
<div class="col-12 col-md-3 float-left status-label font-weight-bold">
<div class="col-12 col-md-3 float-start status-label font-weight-bold">
{{'item.edit.tabs.status.labels.itemPage' | translate}}:
</div>
<div class="col-12 col-md-9 float-left status-data" id="status-itemPage">
<div class="col-12 col-md-9 float-start status-data" id="status-itemPage">
<a [routerLink]="itemPageRoute$ | async">{{itemPageRoute$ | async}}</a>
</div>

View File

@@ -1,7 +1,6 @@
<div [ngClass]="showThumbnails ? 'hide-modal-thumbnail-column' : ''">
<div class="modal-header">{{'virtual-metadata.delete-relationship.modal-head' | translate}}
<button type="button" class="close" (click)="close.emit()" aria-label="Close">
<span aria-hidden="true">×</span>
<button type="button" class="btn-close" (click)="close.emit()" aria-label="Close">
</button>
</div>
<div class="modal-body">
@@ -18,7 +17,7 @@
<ds-listable-object-component-loader [object]="itemDTO.item">
</ds-listable-object-component-loader>
<div *ngFor="let metadata of virtualMetadata.get(itemDTO.item.uuid)">
<div class="font-weight-bold">
<div class="fw-bold">
{{metadata.metadataField}}
</div>
<div>

View File

@@ -99,7 +99,7 @@ describe('VirtualMetadataComponent', () => {
spyOn(comp.close, 'emit');
fixture.debugElement
.query(By.css('button.close'))
.query(By.css('button.btn-close'))
.triggerEventHandler('click', null);
expect(comp.close.emit).toHaveBeenCalled();
});

View File

@@ -6,7 +6,7 @@
<ds-view-tracker [object]="item"></ds-view-tracker>
<div *ngIf="!item.isWithdrawn || (isAdmin$|async)" class="full-item-info">
<div class="d-flex flex-row">
<ds-item-page-title-field class="mr-auto" [item]="item"></ds-item-page-title-field>
<ds-item-page-title-field class="me-auto" [item]="item"></ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>
<div class="simple-view-link my-3" *ngIf="!fromSubmissionObject">
@@ -31,8 +31,8 @@
<ds-item-page-collections [item]="item"></ds-item-page-collections>
<ds-item-versions class="mt-2" [item]="item"></ds-item-versions>
<div class="button-row bottom" *ngIf="fromSubmissionObject">
<div class="text-right">
<button class="btn btn-outline-secondary mr-1" (click)="back()"><i
<div class="text-end">
<button class="btn btn-outline-secondary me-1" (click)="back()"><i
class="fas fa-arrow-left"></i> {{'item.page.return' | translate}}</button>
</div>
</div>

View File

@@ -47,7 +47,7 @@
</ds-alert>
<div class="row" *ngIf="(ownerCanDisconnectProfileFromOrcid() | async)" data-test="unlinkOwner">
<div class="col">
<button type="submit" class="btn btn-danger float-right" (click)="unlinkOrcid()"
<button type="submit" class="btn btn-danger float-end" (click)="unlinkOrcid()"
[dsBtnDisabled]="(unlinkProcessing | async)">
<span *ngIf="(unlinkProcessing | async) !== true"><i
class="fas fa-unlink"></i> {{ 'person.page.orcid.unlink' | translate }}</span>
@@ -55,7 +55,7 @@
class='fas fa-circle-notch fa-spin'></i> {{'person.page.orcid.unlink.processing' | translate}}</span>
</button>
<button *ngIf="(hasMissingOrcidAuthorizations() | async)" type="submit"
class="btn btn-primary float-right" (click)="linkOrcid()">
class="btn btn-primary float-end" (click)="linkOrcid()">
<span><i class="fas fa-check"></i> {{ 'person.page.orcid.grant-authorizations' | translate }}</span>
</button>
</div>
@@ -73,7 +73,7 @@
</div>
<div class="row">
<div class="col">
<button class="btn btn-primary float-right" (click)="linkOrcid()">
<button class="btn btn-primary float-end" (click)="linkOrcid()">
<i class="fas fa-link"></i>
{{'person.page.orcid.link' | translate}}
</button>

View File

@@ -10,7 +10,7 @@
<div *ngIf="(processingConnection | async) !== true && (item | async)" class="container">
<div class="button-row bottom mb-3">
<div class="text-right">
<div class="text-end">
<a [routerLink]="getItemPage()" role="button" class="btn btn-outline-secondary" data-test="back-button">
<i class="fas fa-arrow-left"></i> {{'item.orcid.return' | translate}}
</a>

View File

@@ -12,9 +12,9 @@
{{ 'person.page.orcid.synchronization-mode-message' | translate}}
</ds-alert>
</div>
<div class="form-group row">
<label for="syncMode">{{ 'person.page.orcid.synchronization-mode.label'| translate }}</label>
<select class="form-control" [(ngModel)]="currentSyncMode" name="syncMode" id="syncMode"
<div class="mb-3 row">
<label class="form-label" for="syncMode">{{ 'person.page.orcid.synchronization-mode.label'| translate }}</label>
<select class="form-select" [(ngModel)]="currentSyncMode" name="syncMode" id="syncMode"
required>
<option *ngFor="let syncMode of syncModes"
[value]="syncMode.value">{{ syncMode.label | translate }}</option>
@@ -36,13 +36,13 @@
{{ 'person.page.orcid.synchronization-mode-publication-message' | translate}}
</ds-alert>
</div>
<div class="form-group">
<div class="mb-3">
<div *ngFor="let option of syncPublicationOptions" class="row form-check">
<input type="radio" [(ngModel)]="currentSyncPublications"
name="syncPublications" id="publicationOption_{{option.value}}" [value]="option.value"
required>
<label for="publicationOption_{{option.value}}"
class="ml-2">{{option.label | translate}}</label>
class="ms-2 form-label">{{option.label | translate}}</label>
</div>
</div>
</div>
@@ -59,12 +59,12 @@
{{ 'person.page.orcid.synchronization-mode-funding-message' | translate}}
</ds-alert>
</div>
<div class="form-group">
<div class="mb-3">
<div *ngFor="let option of syncFundingOptions" class="row form-check">
<input type="radio" [(ngModel)]="currentSyncFunding"
name="syncFundings" id="fundingOption_{{option.value}}" [value]="option.value"
required>
<label for="fundingOption_{{option.value}}" class="ml-2">{{option.label | translate}}</label>
<label for="fundingOption_{{option.value}}" class="ms-2 form-label">{{option.label | translate}}</label>
</div>
</div>
</div>
@@ -81,12 +81,12 @@
{{ 'person.page.orcid.synchronization-mode-profile-message' | translate}}
</ds-alert>
</div>
<div class="form-group">
<div class="mb-3">
<div *ngFor="let option of syncProfileOptions" class="row form-check">
<input type="checkbox" [(ngModel)]="option.checked"
name="syncProfile_{{option.value}}" id="profileOption_{{option.value}}"
[value]="option.value">
<label for="profileOption_{{option.value}}" class="ml-2">{{option.label | translate}}</label>
<label for="profileOption_{{option.value}}" class="ms-2 form-label">{{option.label | translate}}</label>
</div>
</div>
</div>
@@ -96,7 +96,7 @@
</div>
<div class="row">
<div class="col">
<button type="submit" class="btn btn-primary float-right">
<button type="submit" class="btn btn-primary float-end">
<i class="fas fa-edit"></i>
{{ 'person.page.orcid.save.preference.changes' | translate }}
</button>

View File

@@ -3,7 +3,7 @@
<div class="file-section">
<ds-file-download-link *ngFor="let file of bitstreams; let last=last;" [bitstream]="file" [item]="item">
<span>
<span *ngIf="primaryBitsreamId === file.id" class="badge badge-primary">{{ 'item.page.bitstreams.primary' | translate }}</span>
<span *ngIf="primaryBitsreamId === file.id" class="badge bg-primary">{{ 'item.page.bitstreams.primary' | translate }}</span>
{{ dsoNameService.getName(file) }}
</span>
<span> ({{(file?.sizeBytes) | dsFileSize }})</span>

View File

@@ -1,4 +1,4 @@
@include media-breakpoint-down(md) {
@include media-breakpoint-down(lg) {
.container {
width: 100%;
max-width: none;

View File

@@ -9,7 +9,7 @@
</div>
</div>
<div class="d-flex flex-row">
<ds-item-page-title-field [item]="object" class="mr-auto">
<ds-item-page-title-field [item]="object" class="me-auto">
</ds-item-page-title-field>
<ds-dso-edit-menu></ds-dso-edit-menu>
</div>

Some files were not shown because too many files have changed in this diff Show More