mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
Merge pull request #4244 from oscar-escire/Issue/4201
Keyboard 'tab' key navigation improved
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
}
|
||||
|
||||
<ng-template #breadcrumb let-text="text" let-url="url">
|
||||
<li class="breadcrumb-item"><div class="breadcrumb-item-limiter"><a [routerLink]="url" class="text-truncate" [ngbTooltip]="text | translate" placement="bottom" >{{text | translate}}</a></div></li>
|
||||
<li class="breadcrumb-item"><div class="breadcrumb-item-limiter"><a [routerLink]="url" class="text-truncate" [ngbTooltip]="text | translate" placement="bottom" role="link" tabindex="0">{{text | translate}}</a></div></li>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #activeBreadcrumb let-text="text">
|
||||
|
@@ -20,6 +20,8 @@
|
||||
<a class="btn btn-primary"
|
||||
[routerLink]="['/search']"
|
||||
[queryParams]="queryParams"
|
||||
[queryParamsHandling]="'merge'">
|
||||
[queryParamsHandling]="'merge'"
|
||||
role="link"
|
||||
tabindex="0">
|
||||
{{ 'browse.taxonomy.button' | translate }}</a>
|
||||
</section>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<div class="align-middle my-auto">
|
||||
@if ((dataSource.loading$ | async) !== true) {
|
||||
<button (click)="getNextPage(node)"
|
||||
class="btn btn-outline-primary btn-sm" role="button">
|
||||
class="btn btn-outline-primary btn-sm" role="button" tabindex="0">
|
||||
<i class="fas fa-angle-down"></i> {{ 'communityList.showMore' | translate }}
|
||||
</button>
|
||||
}
|
||||
@@ -34,7 +34,11 @@
|
||||
<button 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">
|
||||
(keyup.enter)="toggleExpanded(node)"
|
||||
(keyup.space)="toggleExpanded(node)"
|
||||
data-test="expand-button"
|
||||
role="button"
|
||||
tabindex="0">
|
||||
<span class="{{node.isExpanded ? 'fa fa-chevron-down' : 'fa fa-chevron-right'}}"
|
||||
aria-hidden="true"></span>
|
||||
<span class="sr-only">{{ (node.isExpanded ? 'communityList.collapse' : 'communityList.expand') | translate:{ name: dsoNameService.getName(node.payload) } }}</span>
|
||||
@@ -48,7 +52,7 @@
|
||||
}
|
||||
<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>
|
||||
<a [routerLink]="node.route" class="lead" role="link" tabindex="0">{{ dsoNameService.getName(node.payload) }}</a>
|
||||
<span class="pe-2"> </span>
|
||||
@if (node.payload.archivedItemsCount >= 0) {
|
||||
<span class="badge rounded-pill bg-secondary align-top archived-items-lead my-auto ps-2 pe-2">{{node.payload.archivedItemsCount}}</span>
|
||||
@@ -88,7 +92,7 @@
|
||||
<span class="fa fa-chevron-right"></span>
|
||||
</span>
|
||||
<h6 class="align-middle my-auto">
|
||||
<a [routerLink]="node.route" class="lead">{{ dsoNameService.getName(node.payload) }}</a>
|
||||
<a [routerLink]="node.route" class="lead" role="link" tabindex="0">{{ dsoNameService.getName(node.payload) }}</a>
|
||||
</h6>
|
||||
</div>
|
||||
<ds-truncatable [id]="node.id">
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -48,7 +48,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -48,7 +48,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -54,7 +54,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="true">
|
||||
</ds-thumbnail>
|
||||
</a>
|
||||
@@ -26,7 +26,7 @@
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out"
|
||||
[innerHTML]="dsoTitle"></a>
|
||||
[innerHTML]="dsoTitle" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -4,7 +4,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="true">
|
||||
</ds-thumbnail>
|
||||
</a>
|
||||
@@ -26,7 +26,7 @@
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out"
|
||||
[innerHTML]="dsoTitle"></a>
|
||||
[innerHTML]="dsoTitle" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<div class="col-3 col-md-2">
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="true">
|
||||
</ds-thumbnail>
|
||||
</a>
|
||||
@@ -24,7 +24,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out"
|
||||
[innerHTML]="dsoTitle"></a>
|
||||
[innerHTML]="dsoTitle" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -53,7 +53,7 @@
|
||||
[label]="'journalissue.page.keyword'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -36,7 +36,7 @@
|
||||
[label]="'journalvolume.page.description'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -35,7 +35,7 @@
|
||||
[label]="'journal.page.description'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -56,7 +56,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -47,7 +47,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<a
|
||||
[target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate">
|
||||
class="card-img-top full-width" [attr.title]="'search.results.view-result' | translate" role="link" tabindex="0">
|
||||
<div>
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="false">
|
||||
</ds-thumbnail>
|
||||
@@ -40,7 +40,7 @@
|
||||
<div class="text-center">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[itemPageRoute]"
|
||||
class="lead btn btn-primary viewButton">{{ 'search.results.view-result' | translate}}</a>
|
||||
class="lead btn btn-primary viewButton" role="link" tabindex="0">{{ 'search.results.view-result' | translate}}</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async"
|
||||
[defaultImage]="'assets/images/orgunit-placeholder.svg'"
|
||||
[alt]="'thumbnail.orgunit.alt'"
|
||||
@@ -32,7 +32,7 @@
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead"
|
||||
[innerHTML]="dsoTitle || ('orgunit.listelement.no-title' | translate)"></a>
|
||||
[innerHTML]="dsoTitle || ('orgunit.listelement.no-title' | translate)" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -4,7 +4,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async"
|
||||
[defaultImage]="'assets/images/person-placeholder.svg'"
|
||||
[alt]="'thumbnail.person.alt'"
|
||||
@@ -32,7 +32,7 @@
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead"
|
||||
[innerHTML]="dsoTitle || ('person.listelement.no-title' | translate)"></a>
|
||||
[innerHTML]="dsoTitle || ('person.listelement.no-title' | translate)" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -4,7 +4,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out" role="link" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async"
|
||||
[defaultImage]="'assets/images/project-placeholder.svg'"
|
||||
[alt]="'thumbnail.project.alt'"
|
||||
@@ -32,7 +32,7 @@
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'"
|
||||
[attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out"
|
||||
[innerHTML]="dsoTitle"></a>
|
||||
[innerHTML]="dsoTitle" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span
|
||||
|
@@ -56,7 +56,7 @@
|
||||
[label]="'orgunit.page.description'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -52,7 +52,7 @@
|
||||
[label]="'person.page.name'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -64,7 +64,7 @@
|
||||
[label]="'project.page.keyword'">
|
||||
</ds-generic-item-page-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
{{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -26,7 +26,7 @@
|
||||
<h5 class="text-uppercase">Footer Content</h5>
|
||||
<ul class="list-unstyled mb-0">
|
||||
<li>
|
||||
<a routerLink="./" class="">Suspendisse potenti</a>
|
||||
<a routerLink="./" class="" role="link" tabindex="0">Suspendisse potenti</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -53,40 +53,40 @@
|
||||
<div class="content-container">
|
||||
<p class="m-0">
|
||||
<a class="text-white"
|
||||
href="http://www.dspace.org/">{{ 'footer.link.dspace' | translate}}</a>
|
||||
href="http://www.dspace.org/" role="link" tabindex="0">{{ 'footer.link.dspace' | translate}}</a>
|
||||
{{ 'footer.copyright' | translate:{year: dateObj | date:'y'} }}
|
||||
<a class="text-white"
|
||||
href="https://www.lyrasis.org/">{{ 'footer.link.lyrasis' | translate}}</a>
|
||||
href="https://www.lyrasis.org/" role="link" tabindex="0">{{ 'footer.link.lyrasis' | translate}}</a>
|
||||
</p>
|
||||
<ul class="footer-info list-unstyled d-flex justify-content-center mb-0">
|
||||
<li>
|
||||
<button class="btn btn-link text-white" type="button" (click)="showCookieSettings()">
|
||||
<button class="btn btn-link text-white" type="button" (click)="showCookieSettings()" role="button" tabindex="0">
|
||||
{{ 'footer.link.cookies' | translate}}
|
||||
</button>
|
||||
</li>
|
||||
@if (showPrivacyPolicy) {
|
||||
<li>
|
||||
<a class="btn text-white"
|
||||
routerLink="info/privacy">{{ 'footer.link.privacy-policy' | translate}}</a>
|
||||
routerLink="info/privacy" role="link" tabindex="0">{{ 'footer.link.privacy-policy' | translate}}</a>
|
||||
</li>
|
||||
}
|
||||
@if (showEndUserAgreement) {
|
||||
<li>
|
||||
<a class="btn text-white"
|
||||
routerLink="info/end-user-agreement">{{ 'footer.link.end-user-agreement' | translate}}</a>
|
||||
routerLink="info/end-user-agreement" role="link" tabindex="0">{{ 'footer.link.end-user-agreement' | translate}}</a>
|
||||
</li>
|
||||
}
|
||||
@if (showSendFeedback$ | async) {
|
||||
<li>
|
||||
<a class="btn text-white"
|
||||
routerLink="info/feedback">{{ 'footer.link.feedback' | translate}}</a>
|
||||
routerLink="info/feedback" role="link" tabindex="0">{{ 'footer.link.feedback' | translate}}</a>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
@if (coarLdnEnabled$ | async) {
|
||||
<div class="notify-enabled text-white">
|
||||
<a class="coar-notify-support-route" routerLink="info/coar-notify-support">
|
||||
<a class="coar-notify-support-route" routerLink="info/coar-notify-support" role="link" tabindex="0">
|
||||
<img class="n-coar" src="assets/images/n-coar.svg" [attr.alt]="'menu.header.image.logo' | translate" />
|
||||
{{ 'footer.link.coar-notify-support' | translate }}
|
||||
</a>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<header>
|
||||
<div class="container">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<a class="navbar-brand my-2" routerLink="/home">
|
||||
<a class="navbar-brand my-2" routerLink="/home" role="button" tabindex="0">
|
||||
<img src="assets/images/dspace-logo.svg" [attr.alt]="'menu.header.image.logo' | translate"/>
|
||||
</a>
|
||||
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<li>issue permanent urls and trustworthy identifiers, including optional integrations with handle.net and DataCite DOI</li>
|
||||
</ul>
|
||||
<p>Join an international community of <a href="https://wiki.lyrasis.org/display/DSPACE/DSpace+Positioning"
|
||||
target="_blank">leading institutions using DSpace</a>.
|
||||
target="_blank" role="link" tabindex="0">leading institutions using DSpace</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
</ds-listable-object-component-loader>
|
||||
</div>
|
||||
}
|
||||
<button (click)="onLoadMore()" class="btn btn-primary search-button mt-4 float-start ng-tns-c290-40"> {{'vocabulary-treeview.load-more' | translate }} ...</button>
|
||||
<button (click)="onLoadMore()" class="btn btn-primary search-button mt-4 float-start ng-tns-c290-40" role="button" tabindex="0"> {{'vocabulary-treeview.load-more' | translate }} ...</button>
|
||||
</div>
|
||||
}
|
||||
@if (itemRD?.hasFailed) {
|
||||
|
@@ -10,7 +10,7 @@
|
||||
<div class="d-flex justify-content-between flex-wrap">
|
||||
<span class="align-self-center">{{'item.alerts.withdrawn' | translate}}</span>
|
||||
<div class="gap-2 d-flex">
|
||||
<a routerLink="/home" class="btn btn-primary btn-sm">{{"404.link.home-page" | translate}}</a>
|
||||
<a routerLink="/home" class="btn btn-primary btn-sm" role="button" tabindex="0">{{"404.link.home-page" | translate}}</a>
|
||||
@if (showReinstateButton$ | async) {
|
||||
<a class="btn btn-primary btn-sm" (click)="openReinstateModal()">{{ 'item.alerts.reinstate-request' | translate}}</a>
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<ds-metadata-field-wrapper [label]="label | translate">
|
||||
<div class="collections">
|
||||
@for (collection of (this.collections$ | async); track collection; let last = $last) {
|
||||
<a [routerLink]="['/collections', collection.id]">
|
||||
<a [routerLink]="['/collections', collection.id]" role="button" tabindex="0">
|
||||
<span>{{ dsoNameService.getName(collection) }}</span>@if (!last) {
|
||||
<span [innerHTML]="separator"></span>
|
||||
}
|
||||
@@ -21,6 +21,8 @@
|
||||
class="load-more-btn btn btn-sm btn-outline-secondary"
|
||||
role="button"
|
||||
href="javascript:void(0);"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
{{'item.page.collections.load-more' | translate}}
|
||||
</a>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<ds-metadata-field-wrapper [label]="label | translate">
|
||||
@for (mdValue of mdValues; track mdValue; let last = $last) {
|
||||
<a class="dont-break-out" [href]="mdValue.value" [target]="hasInternalLink(mdValue.value) ? '_self' : '_blank'">
|
||||
<a class="dont-break-out" [href]="mdValue.value" [target]="hasInternalLink(mdValue.value) ? '_self' : '_blank'" role="link" tabindex="0">
|
||||
{{ linktext || mdValue.value }}@if (!last) {
|
||||
<span [innerHTML]="separator"></span>
|
||||
}
|
||||
|
@@ -23,14 +23,14 @@
|
||||
<a class="dont-break-out ds-simple-metadata-link"
|
||||
[href]="value"
|
||||
[attr.target]="getLinkAttributes(value).target"
|
||||
[attr.rel]="getLinkAttributes(value).rel">
|
||||
[attr.rel]="getLinkAttributes(value).rel" role="link" tabindex="0">
|
||||
{{value}}
|
||||
</a>
|
||||
</ng-template>
|
||||
|
||||
<!-- Render value as a link with icon -->
|
||||
<ng-template #linkImg let-img="img" let-value="value">
|
||||
<a [href]="value" class="link-anchor dont-break-out ds-simple-metadata-link" target="_blank">
|
||||
<a [href]="value" class="link-anchor dont-break-out ds-simple-metadata-link" target="_blank" role="link" tabindex="0">
|
||||
<img class="link-logo"
|
||||
[alt]="img.alt | translate"
|
||||
[style.height]="'var(' + img.heightVar + ', --ds-item-page-img-field-default-inline-height)'"
|
||||
@@ -48,5 +48,5 @@
|
||||
<ng-template #browselink let-value="value">
|
||||
<a class="dont-break-out preserve-line-breaks ds-browse-link"
|
||||
[routerLink]="['/browse', browseDefinition.id]"
|
||||
[queryParams]="getQueryParams(value)">{{value}}</a>
|
||||
[queryParams]="getQueryParams(value)" role="link" tabindex="0">{{value}}</a>
|
||||
</ng-template>
|
||||
|
@@ -116,7 +116,7 @@
|
||||
</ds-geospatial-item-page-field>
|
||||
}
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" role="button" [routerLink]="[itemPageRoute + '/full']">
|
||||
<a class="btn btn-outline-primary" role="button" [routerLink]="[itemPageRoute + '/full']" role="button" tabindex="0">
|
||||
<i class="fas fa-info-circle"></i> {{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -104,7 +104,7 @@
|
||||
<ds-item-page-cc-license-field [item]="object" [variant]="'full'">
|
||||
</ds-item-page-cc-license-field>
|
||||
<div>
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button">
|
||||
<a class="btn btn-outline-primary" [routerLink]="[itemPageRoute + '/full']" role="button" role="button" tabindex="0">
|
||||
<i class="fas fa-info-circle"></i> {{"item.page.link.full" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -3,6 +3,6 @@
|
||||
<h2><small><em>{{missingItem}}</em></small></h2>
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<a routerLink="/home" class="btn btn-primary">{{"404.link.home-page" | translate}}</a>
|
||||
<a routerLink="/home" class="btn btn-primary" role="button" tabindex="0">{{"404.link.home-page" | translate}}</a>
|
||||
</p>
|
||||
</div>
|
||||
|
@@ -5,6 +5,6 @@
|
||||
<p>{{"error-page." + code | translate}}</p>
|
||||
<br/>
|
||||
<p class="text-center">
|
||||
<a href="/home" class="btn btn-primary">{{ status + ".link.home-page" | translate}}</a>
|
||||
<a href="/home" class="btn btn-primary" role="link" tabindex="0">{{ status + ".link.home-page" | translate}}</a>
|
||||
</p>
|
||||
</div>
|
||||
|
@@ -5,6 +5,6 @@
|
||||
<p>{{"404.help" | translate}}</p>
|
||||
<br/>
|
||||
<p class="text-center">
|
||||
<a routerLink="/home" class="btn btn-primary">{{"404.link.home-page" | translate}}</a>
|
||||
<a routerLink="/home" class="btn btn-primary" role="button" tabindex="0">{{"404.link.home-page" | translate}}</a>
|
||||
</p>
|
||||
</div>
|
@@ -42,7 +42,7 @@
|
||||
<div class="processed-message">
|
||||
<p>{{ 'grant-deny-request-copy.processed' | translate }}</p>
|
||||
<p class="text-center">
|
||||
<a routerLink="/home" class="btn btn-primary">{{ 'grant-deny-request-copy.home-page' | translate }}</a>
|
||||
<a routerLink="/home" class="btn btn-primary" role="button" tabindex="0">{{ 'grant-deny-request-copy.home-page' | translate }}</a>
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
[class.display]="searchExpanded ? 'inline-block' : 'none'"
|
||||
[tabIndex]="searchExpanded ? 0 : -1"
|
||||
[attr.data-test]="'header-search-box' | dsBrowserOnly">
|
||||
<button class="submit-icon btn btn-link btn-link-inline" [attr.aria-label]="'nav.search.button' | translate" type="button" (click)="searchExpanded ? onSubmit(searchForm.value) : expand()" [attr.data-test]="'header-search-icon' | dsBrowserOnly">
|
||||
<button class="submit-icon btn btn-link btn-link-inline" [attr.aria-label]="'nav.search.button' | translate" type="button" (click)="searchExpanded ? onSubmit(searchForm.value) : expand()" [attr.data-test]="'header-search-icon' | dsBrowserOnly" tabindex="0" role="button">
|
||||
<em class="fas fa-search fa-lg fa-fw"></em>
|
||||
</button>
|
||||
</form>
|
||||
|
@@ -8,6 +8,7 @@
|
||||
<a href="javascript:void(0);" class="dropdownLogin px-0.5" [attr.aria-label]="'nav.login' |translate"
|
||||
(click)="$event.preventDefault()" [attr.data-test]="'login-menu' | dsBrowserOnly"
|
||||
role="menuitem"
|
||||
tabindex="0"
|
||||
aria-haspopup="menu"
|
||||
aria-controls="loginDropdownMenu"
|
||||
[attr.aria-expanded]="loginDrop.isOpen()"
|
||||
@@ -26,6 +27,7 @@
|
||||
<div ngbDropdown #loggedInDrop="ngbDropdown" display="dynamic" placement="bottom-right" class="d-inline-block" @fadeInOut>
|
||||
<a href="javascript:void(0);"
|
||||
role="menuitem"
|
||||
tabindex="0"
|
||||
[attr.aria-label]="'nav.user-profile-menu-and-logout' | translate"
|
||||
aria-controls="user-menu-dropdown"
|
||||
(click)="$event.preventDefault()" [title]="'nav.user-profile-menu-and-logout' | translate"
|
||||
@@ -43,12 +45,12 @@
|
||||
} @else {
|
||||
<div data-test="auth-nav">
|
||||
@if ((isAuthenticated | async) !== true) {
|
||||
<a routerLink="/login" routerLinkActive="active" class="loginLink px-0.5" role="button">
|
||||
<a routerLink="/login" routerLinkActive="active" class="loginLink px-0.5" role="button" tabindex="0">
|
||||
{{ 'nav.login' | translate }}<span class="sr-only">(current)</span>
|
||||
</a>
|
||||
}
|
||||
@if ((isAuthenticated | async)) {
|
||||
<a role="button" [attr.aria-label]="'nav.logout' |translate" [title]="'nav.logout' | translate" routerLink="/logout" routerLinkActive="active" class="logoutLink px-1">
|
||||
<a role="button" [attr.aria-label]="'nav.logout' |translate" [title]="'nav.logout' | translate" routerLink="/logout" routerLinkActive="active" class="logoutLink px-1" role="button" tabindex="0">
|
||||
<i class="fas fa-sign-out-alt fa-lg fa-fw"></i>
|
||||
<span class="sr-only">(current)</span>
|
||||
</a>
|
||||
|
@@ -10,7 +10,9 @@
|
||||
role="tab"
|
||||
[routerLink]="option.routerLink"
|
||||
[queryParams]="option.params"
|
||||
[class.active]="(currentOption$ | async)?.id === option.id">
|
||||
[class.active]="(currentOption$ | async)?.id === option.id"
|
||||
role="tab"
|
||||
tabindex="0">
|
||||
{{ option.label | translate }}
|
||||
</a>
|
||||
}
|
||||
|
@@ -3,6 +3,6 @@
|
||||
@if (title) {
|
||||
<span class="mb-0">{{ title | translate }}</span>
|
||||
}
|
||||
<a [href]="getHandle()">{{getHandle()}}</a>
|
||||
<a [href]="getHandle()" role="link" tabindex="0">{{getHandle()}}</a>
|
||||
</p>
|
||||
}
|
||||
|
@@ -5,7 +5,9 @@
|
||||
[queryParams]="(bitstreamPath$| async)?.queryParams"
|
||||
[target]="isBlank ? '_blank': '_self'"
|
||||
[ngClass]="cssClasses"
|
||||
[attr.aria-label]="('file-download-link.download' | translate) + dsoNameService.getName(bitstream)">
|
||||
[attr.aria-label]="('file-download-link.download' | translate) + dsoNameService.getName(bitstream)"
|
||||
role="link"
|
||||
tabindex="0">
|
||||
@if ((canDownload$ | async) === false && (canDownloadWithToken$ | async) === false) {
|
||||
<!-- If the user cannot download the file by auth or token, show a lock icon -->
|
||||
<span role="img" [attr.aria-label]="'file-download-link.restricted' | translate" class="pr-1"><i class="fas fa-lock"></i></span>
|
||||
|
@@ -9,21 +9,21 @@
|
||||
[placeholder]="'vocabulary-treeview.search.form.search-placeholder' | translate">
|
||||
<div class="input-group-append" id="button-addon4">
|
||||
<button class="btn btn-outline-primary" type="button" (click)="search()" [dsBtnDisabled]="!isSearchEnabled()"
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.search' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.search' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.search.form.search' | translate}}
|
||||
</button>
|
||||
<button class="btn btn-outline-secondary" type="button" (click)="reset()"
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.reset' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.reset' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.search.form.reset' | translate}}
|
||||
</button>
|
||||
@if (showAdd && this.vocabularyOptions.closed) {
|
||||
<button class="btn btn-outline-primary" type="button" (click)="add()"
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.add' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.add' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.search.form.add' | translate}}
|
||||
</button>
|
||||
}
|
||||
<button class="btn btn-outline-primary" type="button" (click)="add()" [dsBtnDisabled]="this.vocabularyOptions.closed"
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.add' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.search.form.add' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.search.form.add' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
@@ -59,6 +59,8 @@
|
||||
[(ngModel)]="node.isSelected"
|
||||
[checked]="node.isSelected"
|
||||
(change)="onSelect(node.item)"
|
||||
role="checkbox"
|
||||
tabindex="0"
|
||||
>
|
||||
<span>{{node.item.display}}</span>
|
||||
</label>
|
||||
@@ -70,7 +72,9 @@
|
||||
[ngbTooltip]="node.item?.otherInformation?.note"
|
||||
[openDelay]="500"
|
||||
container="body"
|
||||
(click)="onSelect(node.item)">
|
||||
(click)="onSelect(node.item)"
|
||||
role="button"
|
||||
tabindex="0">
|
||||
<span>{{node.item.display}}</span>
|
||||
</button>
|
||||
}
|
||||
@@ -80,7 +84,11 @@
|
||||
<cdk-tree-node *cdkTreeNodeDef="let node; when: hasChildren" cdkTreeNodePadding class="d-flex">
|
||||
<button type="button" class="btn btn-default px-2 me-1 btn-transparent" cdkTreeNodeToggle
|
||||
[attr.aria-label]="'toggle ' + node.name"
|
||||
(click)="loadChildren(node)">
|
||||
(click)="loadChildren(node)"
|
||||
(keydown.enter)="loadChildren(node)"
|
||||
(keydown.space)="loadChildren(node)"
|
||||
role="button"
|
||||
tabindex="0">
|
||||
<i class="fas fa-fw {{treeControl.isExpanded(node) ? 'fa-angle-down' : 'fa-angle-right'}}"></i>
|
||||
</button>
|
||||
|
||||
@@ -95,6 +103,8 @@
|
||||
[(ngModel)]="node.isSelected"
|
||||
[checked]="node.isSelected"
|
||||
(change)="onSelect(node.item)"
|
||||
role="checkbox"
|
||||
tabindex="0"
|
||||
>
|
||||
<span>{{node.item.display}}</span>
|
||||
</label>
|
||||
@@ -106,7 +116,9 @@
|
||||
[ngbTooltip]="node.item?.otherInformation?.note"
|
||||
[openDelay]="500"
|
||||
container="body"
|
||||
(click)="onSelect(node.item)">
|
||||
(click)="onSelect(node.item)"
|
||||
role="button"
|
||||
tabindex="0">
|
||||
<span>{{node.item.display}}</span>
|
||||
</button>
|
||||
}
|
||||
@@ -114,14 +126,14 @@
|
||||
|
||||
<cdk-tree-node *cdkTreeNodeDef="let node; when: isLoadMore" cdkTreeNodePadding>
|
||||
<button class="btn btn-outline-secondary btn-sm" (click)="loadMore(node.loadMoreParentItem)"
|
||||
[attr.aria-label]="'vocabulary-treeview.load-more' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.load-more' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.load-more' | translate}}...
|
||||
</button>
|
||||
</cdk-tree-node>
|
||||
|
||||
<cdk-tree-node *cdkTreeNodeDef="let node; when: isLoadMoreRoot">
|
||||
<button class="btn btn-outline-secondary btn-sm" (click)="loadMoreRoot(node)"
|
||||
[attr.aria-label]="'vocabulary-treeview.load-more' | translate">
|
||||
[attr.aria-label]="'vocabulary-treeview.load-more' | translate" role="button" tabindex="0">
|
||||
{{'vocabulary-treeview.load-more' | translate}}...
|
||||
</button>
|
||||
</cdk-tree-node>
|
||||
|
@@ -1,3 +1,3 @@
|
||||
<button class="btn btn-lg btn-primary w-100 text-white" (click)="redirectToExternalProvider()">
|
||||
<button class="btn btn-lg btn-primary w-100 text-white" (click)="redirectToExternalProvider()" role="button" tabindex="0">
|
||||
<i class="fas fa-sign-in-alt"></i> {{getButtonLabel() | translate}}
|
||||
</button>
|
||||
|
@@ -28,18 +28,18 @@
|
||||
}
|
||||
|
||||
<button class="btn btn-lg btn-primary w-100" type="submit" [attr.data-test]="'login-button' | dsBrowserOnly"
|
||||
[dsBtnDisabled]="!form.valid"><i class="fas fa-sign-in-alt"></i> {{"login.form.submit" | translate}}</button>
|
||||
[dsBtnDisabled]="!form.valid" role="button" tabindex="0"><i class="fas fa-sign-in-alt"></i> {{"login.form.submit" | translate}}</button>
|
||||
</form>
|
||||
|
||||
@if (canShowDivider$ | async) {
|
||||
<div class="mt-2">
|
||||
@if (canRegister$ | async) {
|
||||
<a class="dropdown-item" [routerLink]="[getRegisterRoute()]"
|
||||
[attr.data-test]="'register' | dsBrowserOnly" role="menuitem">{{"login.form.new-user" | translate}}</a>
|
||||
[attr.data-test]="'register' | dsBrowserOnly" role="menuitem" tabindex="0">{{"login.form.new-user" | translate}}</a>
|
||||
}
|
||||
@if (canForgot$ | async) {
|
||||
<a class="dropdown-item" [routerLink]="[getForgotRoute()]"
|
||||
[attr.data-test]="'forgot' | dsBrowserOnly" role="menuitem">{{"login.form.forgot-password" | translate}}</a>
|
||||
[attr.data-test]="'forgot' | dsBrowserOnly" role="menuitem" tabindex="0">{{"login.form.forgot-password" | translate}}</a>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
@@ -8,4 +8,5 @@
|
||||
(keyup.space)="navigate($event)"
|
||||
(keydown.enter)="navigate($event)"
|
||||
href="javascript:void(0);"
|
||||
tabindex="0"
|
||||
>{{item.text | translate}}</a>
|
||||
|
@@ -1 +1 @@
|
||||
<span class="ds-menu-item" [class.disabled]="item.disabled">{{item.text | translate}}</span>
|
||||
<span class="ds-menu-item" [class.disabled]="item.disabled" tabindex="0" role="button">{{item.text | translate}}</span>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<div class="d-flex flex-row">
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[]" [queryParams]="queryParams$ | async" [queryParamsHandling]="'merge'" class="lead">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="[]" [queryParams]="queryParams$ | async" [queryParamsHandling]="'merge'" class="lead" role="link" tabindex="0">
|
||||
{{object.value}}
|
||||
</a>
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<div class="d-flex flex-row">
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="['/collections/' + object.id]" class="lead">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="['/collections/' + object.id]" class="lead" role="link" tabindex="0">
|
||||
{{ dsoNameService.getName(object) }}
|
||||
</a>
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<div class="d-flex flex-row">
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="['/communities/' + object.id]" class="lead">
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null" [routerLink]="['/communities/' + object.id]" class="lead" role="link" tabindex="0">
|
||||
{{ dsoNameService.getName(object) }}
|
||||
</a>
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
}
|
||||
@if ((mdRepresentation.representationType==='plain_text') && isLink()) {
|
||||
<a class="dont-break-out"
|
||||
target="_blank" [href]="mdRepresentation.getValue()">
|
||||
target="_blank" [href]="mdRepresentation.getValue()" role="link" tabindex="0">
|
||||
{{mdRepresentation.getValue()}}
|
||||
</a>
|
||||
}
|
||||
@@ -18,7 +18,9 @@
|
||||
<a
|
||||
class="dont-break-out ds-browse-link"
|
||||
[routerLink]="['/browse/', mdRepresentation.browseDefinition.id]"
|
||||
[queryParams]="getQueryParams()">
|
||||
[queryParams]="getQueryParams()"
|
||||
role="link"
|
||||
tabindex="0">
|
||||
{{mdRepresentation.getValue()}}
|
||||
</a>
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<div class="col-3 col-md-2">
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out">
|
||||
[routerLink]="[itemPageRoute]" class="dont-break-out" role="button" tabindex="0">
|
||||
<ds-thumbnail [thumbnail]="dso?.thumbnail | async" [limitWidth]="true">
|
||||
</ds-thumbnail>
|
||||
</a>
|
||||
@@ -28,7 +28,7 @@
|
||||
@if (linkType !== linkTypes.None) {
|
||||
<a [target]="(linkType === linkTypes.ExternalLink) ? '_blank' : '_self'" [attr.rel]="(linkType === linkTypes.ExternalLink) ? 'noopener noreferrer' : null"
|
||||
[routerLink]="[itemPageRoute]" class="lead item-list-title dont-break-out"
|
||||
[innerHTML]="dsoTitle"></a>
|
||||
[innerHTML]="dsoTitle" role="link" tabindex="0"></a>
|
||||
}
|
||||
@if (linkType === linkTypes.None) {
|
||||
<span class="lead item-list-title dont-break-out"
|
||||
|
@@ -12,14 +12,14 @@
|
||||
<div class="col">
|
||||
@if (!hideGear) {
|
||||
<div ngbDropdown #paginationControls="ngbDropdown" placement="bottom-right" class="d-inline-block float-end">
|
||||
<button class="btn btn-secondary" id="paginationControls" ngbDropdownToggle [title]="'pagination.options.description' | translate" [attr.aria-label]="'pagination.options.description' | translate" aria-haspopup="true" aria-expanded="false"><i class="fas fa-cog" aria-hidden="true"></i></button>
|
||||
<button class="btn btn-secondary" id="paginationControls" ngbDropdownToggle [title]="'pagination.options.description' | translate" [attr.aria-label]="'pagination.options.description' | translate" aria-haspopup="true" aria-expanded="false" role="button" tabindex="0"><i class="fas fa-cog" aria-hidden="true"></i></button>
|
||||
<ul id="paginationControlsDropdownMenu" aria-labelledby="paginationControls" role="menu" ngbDropdownMenu>
|
||||
<li role="menuitem">
|
||||
<span class="dropdown-header" id="pagination-control_results-per-page" role="heading">{{ 'pagination.results-per-page' | translate}}</span>
|
||||
<ul aria-labelledby="pagination-control_results-per-page" class="list-unstyled" role="listbox">
|
||||
@for (item of pageSizeOptions; track item) {
|
||||
<li role="option" [attr.aria-selected]="item === (pageSize$ | async)">
|
||||
<button (click)="doPageSizeChange(item)" class="dropdown-item">
|
||||
<button (click)="doPageSizeChange(item)" class="dropdown-item" role="button" tabindex="0">
|
||||
<i [ngClass]="{'invisible': item !== (pageSize$ | async) }" class="fas fa-check" aria-hidden="true"></i> {{item}}
|
||||
</button>
|
||||
</li>
|
||||
@@ -32,7 +32,7 @@
|
||||
<ul aria-labelledby="pagination-control_sort-direction" class="list-unstyled" role="listbox">
|
||||
@for (direction of (sortDirections | dsKeys); track direction) {
|
||||
<li [attr.aria-selected]="direction.value === (sortDirection$ | async)" role="option">
|
||||
<button class="dropdown-item" (click)="doSortDirectionChange(direction.value)">
|
||||
<button class="dropdown-item" (click)="doSortDirectionChange(direction.value)" role="button" tabindex="0">
|
||||
<i [ngClass]="{'invisible': direction.value !== (sortDirection$ |async)}" class="fas fa-check" aria-hidden="true"></i> {{'sorting.' + direction.key | translate}}
|
||||
</button>
|
||||
</li>
|
||||
@@ -73,12 +73,12 @@
|
||||
<div class="d-flex justify-content-between">
|
||||
<button id="nav-prev" type="button" class="btn btn-outline-primary float-start"
|
||||
(click)="goPrev()"
|
||||
[dsBtnDisabled]="(objects?.payload?.currentPage <= 1) && (paginationOptions?.currentPage <= 1)">
|
||||
[dsBtnDisabled]="(objects?.payload?.currentPage <= 1) && (paginationOptions?.currentPage <= 1)" role="button" tabindex="0">
|
||||
<i class="fas fa-angle-left"></i> {{'pagination.previous.button' |translate}}
|
||||
</button>
|
||||
<button id="nav-next" type="button" class="btn btn-outline-primary float-end"
|
||||
(click)="goNext()"
|
||||
[dsBtnDisabled]="(objects?.payload?.currentPage >= objects?.payload?.totalPages) || (paginationOptions?.currentPage >= objects?.payload?.totalPages)">
|
||||
[dsBtnDisabled]="(objects?.payload?.currentPage >= objects?.payload?.totalPages) || (paginationOptions?.currentPage >= objects?.payload?.totalPages)" role="button" tabindex="0">
|
||||
<span [ngbTooltip]="objects?.payload?.currentPage >= objects?.payload?.totalPages ? ('pagination.next.button.disabled.tooltip' |translate) : null">
|
||||
<i class="fas fa-angle-right"></i> {{'pagination.next.button' |translate}}
|
||||
</span>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<button class="btn btn-secondary btn-sm mb-2 ng-tns-c242-28" (click)="back()">
|
||||
<button class="btn btn-secondary btn-sm mb-2 ng-tns-c242-28" (click)="back()" role="button" tabindex="0">
|
||||
<i _ngcontent-dspace-angular-c242="" class="fas fa-arrow-left ng-tns-c242-3"></i>
|
||||
{{this.buttonLabel | async}}
|
||||
</button>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
@if (route$ | async; as route) {
|
||||
<div class="d-inline-block float-end margin-right">
|
||||
<a target="_blank" rel="noopener noreferrer" [href]="route" class="btn btn-secondary"
|
||||
[title]="'feed.description' | translate" [attr.aria-label]="'feed.description' | translate">
|
||||
[title]="'feed.description' | translate" [attr.aria-label]="'feed.description' | translate" role="button" tabindex="0">
|
||||
<i class="fas fa-rss-square"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -4,14 +4,14 @@
|
||||
@if (showScopeSelector) {
|
||||
<button class="scope-button btn btn-outline-secondary text-truncate"
|
||||
[ngbTooltip]="dsoNameService.getName(selectedScope | async)" type="button"
|
||||
(click)="openScopeModal()">
|
||||
(click)="openScopeModal()" role="button" tabindex="0">
|
||||
{{dsoNameService.getName(selectedScope | async) || ('search.form.scope.all' | translate)}}
|
||||
</button>
|
||||
}
|
||||
<input type="text" [(ngModel)]="query" name="query" class="form-control"
|
||||
[attr.aria-label]="searchPlaceholder" [attr.data-test]="'search-box' | dsBrowserOnly"
|
||||
[placeholder]="searchPlaceholder">
|
||||
<button type="submit" class="search-button btn btn-{{brandColor}}" [attr.data-test]="'search-button' | dsBrowserOnly"><i class="fas fa-search"></i> {{ ('search.form.search' | translate) }}</button>
|
||||
[placeholder]="searchPlaceholder" tabindex="0">
|
||||
<button type="submit" class="search-button btn btn-{{brandColor}}" [attr.data-test]="'search-button' | dsBrowserOnly" role="button" tabindex="0"><i class="fas fa-search"></i> {{ ('search.form.search' | translate) }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@@ -13,13 +13,13 @@
|
||||
<div class="clearfix toggle-more-filters">
|
||||
@if ((isLastPage$ | async) !== true) {
|
||||
<a class="float-start"
|
||||
(click)="showMore()" href="javascript:void(0);">
|
||||
(click)="showMore()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-more" | translate}}
|
||||
</a>
|
||||
}
|
||||
@if ((currentPage | async) > 1) {
|
||||
<a class="float-end"
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);">
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-less" | translate}}
|
||||
</a>
|
||||
}
|
||||
|
@@ -13,13 +13,13 @@
|
||||
<div class="clearfix toggle-more-filters">
|
||||
@if ((isLastPage$ | async) !== true) {
|
||||
<a class="float-start"
|
||||
(click)="showMore()" href="javascript:void(0);">
|
||||
(click)="showMore()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-more" | translate}}
|
||||
</a>
|
||||
}
|
||||
@if ((currentPage | async) > 1) {
|
||||
<a class="float-end"
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);">
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-less" | translate}}
|
||||
</a>
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
[queryParams]="addQueryParams$ | async"
|
||||
(click)="announceFilter(); filterService.minimizeAll()">
|
||||
<label class="mb-0 d-flex w-100">
|
||||
<input type="checkbox" [checked]="false" class="my-1 align-self-stretch filter-checkbox"/>
|
||||
<input type="checkbox" [checked]="false" class="my-1 align-self-stretch filter-checkbox" role="checkbox" tabindex="0"/>
|
||||
<span class="w-100 ps-1 break-facet">
|
||||
<span class="float-end badge bg-secondary rounded-pill mt-1 ms-1">{{filterValue.count | dsShortNumber}}</span>
|
||||
{{ 'search.filters.' + filterConfig.name + '.' + filterValue.value | translate: {default: filterValue.value} }}
|
||||
|
@@ -2,7 +2,8 @@
|
||||
<a class="d-flex flex-row"
|
||||
(click)="filterService.minimizeAll()"
|
||||
[routerLink]="[searchLink]"
|
||||
[queryParams]="changeQueryParams" queryParamsHandling="merge">
|
||||
[queryParams]="changeQueryParams" queryParamsHandling="merge"
|
||||
role="button" tabindex="0">
|
||||
<span class="filter-value px-1">{{filterValue.label}}</span>
|
||||
<span class="float-end filter-value-count ms-auto">
|
||||
<span class="badge bg-secondary rounded-pill">{{filterValue.count | dsShortNumber}}</span>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
[queryParams]="removeQueryParams | async"
|
||||
(click)="searchFilterService.minimizeAll()">
|
||||
<label class="mb-0 d-flex w-100">
|
||||
<input type="checkbox" [checked]="true" class="my-1 align-self-stretch filter-checkbox"/>
|
||||
<input type="checkbox" [checked]="true" class="my-1 align-self-stretch filter-checkbox" role="checkbox" tabindex="0"/>
|
||||
<span class="filter-value ps-1 break-facet">
|
||||
{{ 'search.filters.' + filterConfig.name + '.' + selectedValue.value | translate: {default: selectedValue.label} }}
|
||||
</span>
|
||||
|
@@ -6,6 +6,8 @@
|
||||
[attr.aria-expanded]="(collapsed$ | async) !== true"
|
||||
[attr.aria-label]="(((collapsed$ | async) ? 'search.filters.filter.expand' : 'search.filters.filter.collapse') | translate) + ' ' + (('search.filters.filter.' + filter.name + '.head') | translate | lowercase)"
|
||||
[attr.data-test]="'filter-toggle' | dsBrowserOnly"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<span class="h4 d-inline-block text-left mt-auto mb-auto dark:text-white text-dark">
|
||||
{{'search.filters.filter.' + filter.name + '.head'| translate}}
|
||||
|
@@ -13,13 +13,13 @@
|
||||
<div class="clearfix toggle-more-filters">
|
||||
@if ((isLastPage$ | async) !== true) {
|
||||
<a class="float-start"
|
||||
(click)="showMore()" href="javascript:void(0);">
|
||||
(click)="showMore()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-more" | translate}}
|
||||
</a>
|
||||
}
|
||||
@if ((currentPage | async) > 1) {
|
||||
<a class="float-end"
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);">
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-less" | translate}}
|
||||
</a>
|
||||
}
|
||||
@@ -44,7 +44,7 @@
|
||||
<a
|
||||
href="javascript:void(0);"
|
||||
id="show-{{filterConfig.name}}-tree"
|
||||
(click)="showVocabularyTree()">
|
||||
(click)="showVocabularyTree()" role="button" tabindex="0">
|
||||
{{'search.filters.filter.show-tree' | translate: {name: ('search.filters.filter.' + filterConfig.name + '.head' | translate | lowercase )} }}
|
||||
</a>
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<button class="sr-only" type="submit">
|
||||
<button class="sr-only" type="submit" role="button" tabindex="0">
|
||||
{{'search.filters.search.submit' | translate}}
|
||||
</button>
|
||||
</form>
|
||||
@@ -46,7 +46,7 @@
|
||||
}
|
||||
</div>
|
||||
}
|
||||
<button (click)="onSubmit()" class="btn btn-primary">
|
||||
<button (click)="onSubmit()" class="btn btn-primary" role="button" tabindex="0">
|
||||
{{'search.filters.search.submit' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
|
@@ -13,13 +13,13 @@
|
||||
<div class="clearfix toggle-more-filters">
|
||||
@if ((isLastPage$ | async) !== true) {
|
||||
<a class="float-start"
|
||||
(click)="showMore()" href="javascript:void(0);">
|
||||
(click)="showMore()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-more" | translate}}
|
||||
</a>
|
||||
}
|
||||
@if ((currentPage | async) > 1) {
|
||||
<a class="float-end"
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);">
|
||||
(click)="showFirstPageOnly()" href="javascript:void(0);" role="button" tabindex="0">
|
||||
{{"search.filters.filter.show-less" | translate}}
|
||||
</a>
|
||||
}
|
||||
|
@@ -55,7 +55,7 @@
|
||||
{{ 'search.results.no-results' | translate }}
|
||||
<a [routerLink]="['/search']"
|
||||
[queryParams]="{ query: surroundStringWithQuotes(searchConfig?.query) }"
|
||||
queryParamsHandling="merge">
|
||||
queryParamsHandling="merge" role="link" tabindex="0">
|
||||
{{"search.results.no-results-link" | translate}}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -32,7 +32,7 @@
|
||||
<div class="mb-3 input-group pt-1 pt-md-0">
|
||||
<input class="form-control" placeholder="{{'browse.startsWith.type_date' | translate}}" [attr.aria-label]="'browse.startsWith.type_date.label' |translate" type="text" name="startsWith"
|
||||
formControlName="startsWith" [value]="getStartsWith() ? getStartsWith() : ''"/>
|
||||
<button class="btn btn-primary" type="submit"><i class="fas fa-book-open"></i> {{ 'browse.startsWith.submit' | translate }}</button>
|
||||
<button class="btn btn-primary" type="submit" role="button" tabindex="0"><i class="fas fa-book-open"></i> {{ 'browse.startsWith.submit' | translate }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<div class="row">
|
||||
<div class="mb-3 input-group col-sm-12 col-md-6 col-auto">
|
||||
<input class="form-control" [attr.aria-label]="'browse.startsWith.input' | translate" placeholder="{{'browse.search-form.placeholder' | translate}}" type="text" name="startsWith" formControlName="startsWith" [value]="getStartsWith()" />
|
||||
<button class="btn btn-primary" type="submit"><i class="fas fa-book-open"></i> {{'browse.startsWith.submit' | translate}}</button>
|
||||
<button class="btn btn-primary" type="submit" role="button" tabindex="0"><i class="fas fa-book-open"></i> {{'browse.startsWith.submit' | translate}}</button>
|
||||
</div>
|
||||
</div>
|
||||
<small class="text-muted">{{'browse.startsWith.type_text' | translate}}</small>
|
||||
|
@@ -10,6 +10,7 @@
|
||||
(keyup.Space)="toggle()"
|
||||
role="button"
|
||||
[attr.aria-expanded]="isExpanded"
|
||||
tabindex="0"
|
||||
>
|
||||
<i class="fas {{isExpanded ? 'fa-angle-up' : 'fa-angle-down'}}"></i>
|
||||
<span class="ms-1">{{ 'item.truncatable-part.show-' + (isExpanded ? 'less' : 'more') | translate }}</span>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
[attr.role]="(isMobile$ | async) ? 'navigation' : 'presentation'"
|
||||
[attr.aria-label]="(isMobile$ | async) ? ('nav.main.description' | translate) : null"
|
||||
class="h-100 flex-fill d-flex flex-row flex-nowrap justify-content-start align-items-center gapx-3">
|
||||
<a class="d-block my-2 my-md-0" routerLink="/home" [attr.aria-label]="'home.title' | translate">
|
||||
<a class="d-block my-2 my-md-0" routerLink="/home" [attr.aria-label]="'home.title' | translate" role="button" tabindex="0">
|
||||
<img id="header-logo" src="assets/images/dspace-logo.svg" [attr.alt]="'menu.header.image.logo' | translate"/>
|
||||
</a>
|
||||
@if ((isMobile$ | async) !== true) {
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<div class="d-flex flex-wrap">
|
||||
<div>
|
||||
<h1 class="display-2">DSpace 9</h1>
|
||||
<p><i class="fas fa-circle-info"></i> This site is running DSpace 9. For more information, see the <a href="https://wiki.lyrasis.org/display/DSDOC9x/Release+Notes">DSpace 9 Release Notes</a>.</p>
|
||||
<p><i class="fas fa-circle-info"></i> This site is running DSpace 9. For more information, see the <a href="https://wiki.lyrasis.org/display/DSDOC9x/Release+Notes" role="link" tabindex="0">DSpace 9 Release Notes</a>.</p>
|
||||
<p class="lead">DSpace is the world leading open source repository platform that enables
|
||||
organisations to:</p>
|
||||
</div>
|
||||
@@ -20,7 +20,7 @@
|
||||
handle.net and DataCite DOI
|
||||
</li>
|
||||
</ul>
|
||||
<p>Join an international community of <a href="https://wiki.lyrasis.org/display/DSPACE/DSpace+Positioning" target="_blank">leading institutions using DSpace</a>.</p>
|
||||
<p>Join an international community of <a href="https://wiki.lyrasis.org/display/DSPACE/DSpace+Positioning" target="_blank" role="link" tabindex="0">leading institutions using DSpace</a>.</p>
|
||||
<p>The test user accounts below have their password set to the name of this
|
||||
software in lowercase.</p>
|
||||
<ul>
|
||||
|
Reference in New Issue
Block a user