mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Fix Create a new process page accessibility issues
- Added missing aria-label to delete buttons - Moved hardcoded translation to translation files - Fix color contrast issues on buttons - Fix minor alignment issues - Added missing aria labels to input and select elements
This commit is contained in:
@@ -3,12 +3,12 @@
|
|||||||
<h2 class="col-12">
|
<h2 class="col-12">
|
||||||
{{headerKey | translate}}
|
{{headerKey | translate}}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6 mb-2">
|
||||||
<form #form="ngForm" (ngSubmit)="submitForm(form)">
|
<form #form="ngForm" (ngSubmit)="submitForm(form)">
|
||||||
<ds-scripts-select [script]="selectedScript" (select)="selectedScript = $event; parameters = undefined"></ds-scripts-select>
|
<ds-scripts-select [script]="selectedScript" (select)="selectedScript = $event; parameters = undefined"></ds-scripts-select>
|
||||||
<ds-process-parameters [initialParams]="parameters" [script]="selectedScript" (updateParameters)="parameters = $event"></ds-process-parameters>
|
<ds-process-parameters [initialParams]="parameters" [script]="selectedScript" (updateParameters)="parameters = $event"></ds-process-parameters>
|
||||||
<button [routerLink]="['/processes']" class="btn btn-light float-left">{{ 'process.new.cancel' | translate }}</button>
|
<a [routerLink]="['/processes']" class="btn btn-danger float-left">{{ 'process.new.cancel' | translate }}</a>
|
||||||
<button type="submit" class="btn btn-light float-right">{{ 'process.new.submit' | translate }}</button>
|
<button type="submit" class="btn btn-primary float-right">{{ 'process.new.submit' | translate }}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
|
@@ -1,16 +1,20 @@
|
|||||||
<div class="form-row mb-2 mx-0">
|
<div class="form-row gap-2 mb-2 mx-0">
|
||||||
<select id="process-parameters"
|
<select id="process-parameters"
|
||||||
class="form-control col"
|
class="form-control col"
|
||||||
name="parameter-{{index}}"
|
name="parameter-{{index}}"
|
||||||
|
[attr.aria-label]="'process.new.select-parameter' | translate"
|
||||||
[(ngModel)]="selectedParameter"
|
[(ngModel)]="selectedParameter"
|
||||||
#param="ngModel">
|
#param="ngModel">
|
||||||
<option [ngValue]="undefined">Add a parameter...</option>
|
<option [ngValue]="undefined">{{ 'process.new.add-parameter' | translate }}</option>
|
||||||
<option *ngFor="let param of parameters" [ngValue]="param.name">
|
<option *ngFor="let param of parameters" [ngValue]="param.name">
|
||||||
{{param.nameLong || param.name}}
|
{{param.nameLong || param.name}}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
<ds-parameter-value-input [initialValue]="parameterValue.value" [parameter]="selectedScriptParameter" (updateValue)="selectedParameterValue = $event" class="d-block col" [index]="index"></ds-parameter-value-input>
|
<ds-parameter-value-input [initialValue]="parameterValue.value" [parameter]="selectedScriptParameter" (updateValue)="selectedParameterValue = $event" class="d-block col px-0" [index]="index"></ds-parameter-value-input>
|
||||||
<button *ngIf="removable" class="btn btn-light col-1 remove-button" (click)="removeParameter.emit(parameterValue);"><span class="fas fa-trash"></span></button>
|
<button *ngIf="removable" [attr.aria-label]="'process.new.delete-parameter' | translate"
|
||||||
|
(click)="removeParameter.emit(parameterValue);" class="btn btn-danger col-1 remove-button">
|
||||||
|
<i class="fas fa-trash"></i>
|
||||||
|
</button>
|
||||||
<span *ngIf="!removable" class="col-1"></span>
|
<span *ngIf="!removable" class="col-1"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { ParameterSelectComponent } from './parameter-select.component';
|
import { ParameterSelectComponent } from './parameter-select.component';
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
@@ -33,7 +33,10 @@ describe('ParameterSelectComponent', () => {
|
|||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
init();
|
init();
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [FormsModule],
|
imports: [
|
||||||
|
FormsModule,
|
||||||
|
TranslateModule.forRoot(),
|
||||||
|
],
|
||||||
declarations: [ParameterSelectComponent],
|
declarations: [ParameterSelectComponent],
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
})
|
})
|
||||||
|
@@ -1 +1 @@
|
|||||||
<input type="hidden" value="true" name="boolean-value-{{index}}" id="boolean-value-{{index}}"/>
|
<input [attr.aria-label]="'process.new.parameter.label' | translate" type="hidden" value="true" name="boolean-value-{{index}}" id="boolean-value-{{index}}"/>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { BooleanValueInputComponent } from './boolean-value-input.component';
|
import { BooleanValueInputComponent } from './boolean-value-input.component';
|
||||||
|
|
||||||
describe('BooleanValueInputComponent', () => {
|
describe('BooleanValueInputComponent', () => {
|
||||||
@@ -8,6 +8,9 @@ describe('BooleanValueInputComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
|
imports: [
|
||||||
|
TranslateModule.forRoot(),
|
||||||
|
],
|
||||||
declarations: [BooleanValueInputComponent]
|
declarations: [BooleanValueInputComponent]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<input required #string="ngModel" type="text" class="form-control" name="date-value-{{index}}" id="date-value-{{index}}" [ngModel]="value" (ngModelChange)="setValue($event)"/>
|
<input [attr.aria-label]="'process.new.parameter.label' | translate" required #string="ngModel" type="text" class="form-control" name="date-value-{{index}}" id="date-value-{{index}}" [ngModel]="value" (ngModelChange)="setValue($event)"/>
|
||||||
<div *ngIf="string.invalid && (string.dirty || string.touched)"
|
<div *ngIf="string.invalid && (string.dirty || string.touched)"
|
||||||
class="alert alert-danger validation-error">
|
class="alert alert-danger validation-error mb-0">
|
||||||
<div *ngIf="string.errors.required">
|
<div *ngIf="string.errors.required">
|
||||||
{{'process.new.parameter.string.required' | translate}}
|
{{'process.new.parameter.string.required' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
:host {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: calc(var(--bs-spacer) / 2);
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<label for="file-upload-{{index}}" class="d-flex align-items-center m-0">
|
<label for="file-upload-{{index}}" class="d-flex align-items-center m-0">
|
||||||
<span class="btn btn-light">
|
<span class="btn btn-primary">
|
||||||
{{'process.new.parameter.file.upload-button' | translate}}
|
{{'process.new.parameter.file.upload-button' | translate}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file-name ml-1">{{fileObject?.name}}</span>
|
<span class="file-name ml-1">{{fileObject?.name}}</span>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<input required #string="ngModel" type="text" name="string-value-{{index}}" class="form-control" id="string-value-{{index}}" [ngModel]="value" (ngModelChange)="setValue($event)"/>
|
<input [attr.aria-label]="'process.new.parameter.label' | translate" required #string="ngModel" type="text" name="string-value-{{index}}" class="form-control" id="string-value-{{index}}" [ngModel]="value" (ngModelChange)="setValue($event)"/>
|
||||||
<div *ngIf="string.invalid && (string.dirty || string.touched)"
|
<div *ngIf="string.invalid && (string.dirty || string.touched)"
|
||||||
class="alert alert-danger validation-error">
|
class="alert alert-danger validation-error mb-0">
|
||||||
<div *ngIf="string.errors.required">
|
<div *ngIf="string.errors.required">
|
||||||
{{'process.new.parameter.string.required' | translate}}
|
{{'process.new.parameter.string.required' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
:host {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: calc(var(--bs-spacer) / 2);
|
||||||
|
}
|
||||||
|
@@ -3136,6 +3136,14 @@
|
|||||||
|
|
||||||
"process.new.select-parameters": "Parameters",
|
"process.new.select-parameters": "Parameters",
|
||||||
|
|
||||||
|
"process.new.select-parameter": "Select parameter",
|
||||||
|
|
||||||
|
"process.new.add-parameter": "Add a parameter...",
|
||||||
|
|
||||||
|
"process.new.delete-parameter": "Delete parameter",
|
||||||
|
|
||||||
|
"process.new.parameter.label": "Parameter value",
|
||||||
|
|
||||||
"process.new.cancel": "Cancel",
|
"process.new.cancel": "Cancel",
|
||||||
|
|
||||||
"process.new.submit": "Save",
|
"process.new.submit": "Save",
|
||||||
|
Reference in New Issue
Block a user