Skip to content

Commit ac33ac6

Browse files
Merge pull request #69 from uc-cdis/fix/508_issues
Fix: 508/accessibility issues in Atlas UI
2 parents 3c46da4 + 966a984 commit ac33ac6

23 files changed

+109
-75
lines changed

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<div style="margin-bottom:10px;">open source software</div>
6060

6161
<div>provided by</div>
62-
<div><a href="http://www.ohdsi.org"><img src="images/ohdsi_color.png"></a></div>
62+
<div><a href="http://www.ohdsi.org"><img src="images/ohdsi_color.png" alt="OHDSI logo with link to OHDSI site"></a></div>
6363
<div><a href="http://www.ohdsi.org">join the journey</a></div>
6464
</div>
6565
<!-- /ko -->
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
.warnings-badge {
22
display: inline-block;
33
span {
4-
color: #e3e3e3;
4+
color: #FAFAFA;
55
&.warning-alarm {
6-
background-color: #ff001a;
6+
background-color: #E60017;
77
}
88
&.warning-info {
9-
background-color: #337ab7;
9+
background-color: #3174AF;
1010
}
1111
&.warning-warn {
12-
background-color: #d82;
12+
background-color: #A36519;
1313
}
1414
}
1515
}

js/components/cohortbuilder/components/CohortExpressionEditorTemplate.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,19 @@
5050
<div class="observation-window" data-bind="with: $component.expression().PrimaryCriteria().ObservationWindow">
5151
<span
5252
data-bind="text: ko.i18n('components.cohortExpressionEditor.cohortEntryEventsText_3', 'with continuous observation of at least')"></span>
53-
<span contenteditable="true" class="numericInputField dropdown"
53+
<span contenteditable="true" title="Number of days before selector" class="numericInputField dropdown"
5454
data-bind="htmlValue: PriorDays.numeric(), eventType: 'blur', ko_autocomplete: { value: PriorDays, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }" />
5555
<span
5656
data-bind="text: ko.i18n('components.cohortExpressionEditor.cohortEntryEventsText_4', 'days before and')"></span>
57-
<span contenteditable="true" class="numericInputField dropdown"
57+
<span contenteditable="true" title="Number of days after selector" class="numericInputField dropdown"
5858
data-bind="htmlValue: PostDays.numeric(), eventType: 'blur', ko_autocomplete: { value: PostDays, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }" />
5959
<span
6060
data-bind="text: ko.i18n('components.cohortExpressionEditor.cohortEntryEventsText_5', 'days after event index date')"></span>
6161
</div>
6262
<div style="padding-top: 3px" data-bind="with: expression().PrimaryCriteria().PrimaryCriteriaLimit">
6363
<span
6464
data-bind="text: ko.i18n('components.cohortExpressionEditor.cohortEntryEventsText_6', 'Limit initial events to:')"></span>
65-
<select data-bind="options: $component.options.resultLimitOptions,
65+
<select title="Limit initial events to" data-bind="options: $component.options.resultLimitOptions,
6666
optionsText: function(item) { return item.name },
6767
optionsValue: 'id',
6868
value: Type">
@@ -157,7 +157,7 @@
157157
<div style="padding-top: 3px" data-bind="with: expression().ExpressionLimit">
158158
<span
159159
data-bind="text: ko.i18n('components.cohortExpressionEditor.inclusionCriteriaText_1', 'Limit qualifying events to:')"></span>
160-
<select data-bind="options: $component.options.resultLimitOptions,
160+
<select title="Limit qualifying events to" data-bind="options: $component.options.resultLimitOptions,
161161
optionsText: function(item) { return item.name },
162162
optionsValue: 'id',
163163
value: Type">
@@ -200,7 +200,7 @@
200200
<ul>
201201
<li>
202202
<span data-bind="text: ko.i18n('components.cohortExpressionEditor.cohortErasText_1', 'Specify era collapse gap size:')"></span>
203-
<span contenteditable="true" class="numericInputField dropdown" data-bind="htmlValue: CollapseSettings.EraPad.numeric(), eventType: 'blur', ko_autocomplete: { value: CollapseSettings.EraPad, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }" />
203+
<span contenteditable="true" title="Number of days" class="numericInputField dropdown" data-bind="htmlValue: CollapseSettings.EraPad.numeric(), eventType: 'blur', ko_autocomplete: { value: CollapseSettings.EraPad, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }" />
204204
<span data-bind="text: ko.i18n('components.cohortExpressionEditor.days', 'days')"></span>
205205
</li>
206206
<!-- ko if: $component.showCensorWindow -->

js/components/cohortbuilder/components/ConceptSetQuickviewTemplate.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<tbody data-bind="foreach: conceptSet().expression.items">
1010
<tr>
1111
<td data-bind="attr:{title: concept.CONCEPT_NAME}"><div style="width:275px; overflow-x: hidden; text-overflow:ellipsis; white-space:nowrap" data-bind="text: concept.CONCEPT_NAME"></div></td>
12-
<td><span class="fa fa-check" data-bind="css: {selected: isExcluded}, click: () => isExcluded(!isExcluded())"></span></td>
13-
<td><span class="fa fa-check" data-bind="css: {selected: includeDescendants}, click: () => includeDescendants(!includeDescendants())"></span></td>
14-
<td><span class="fa fa-check" data-bind="css: {selected: includeMapped}, click: () => includeMapped(!includeMapped())"></span></td>
12+
<td><span tabindex="0" class="fa fa-check" data-bind="css: {selected: isExcluded}, click: () => isExcluded(!isExcluded()), event:{ keydown: (item, event) => (event.key === ' ' && event.target.click()) || true }"></span></td>
13+
<td><span tabindex="0" class="fa fa-check" data-bind="css: {selected: includeDescendants}, click: () => includeDescendants(!includeDescendants()), event:{ keydown: (item, event) => (event.key === ' ' && event.target.click()) || true }"></span></td>
14+
<td><span tabindex="0" class="fa fa-check" data-bind="css: {selected: includeMapped}, click: () => includeMapped(!includeMapped()), event:{ keydown: (item, event) => (event.key === ' ' && event.target.click()) || true }"></span></td>
1515
</tr>
1616
</tbody>
1717
</table>

js/components/cohortbuilder/components/ConceptSetSelector.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,23 @@ define([
5151
);
5252
});
5353

54-
self.itemClicked = function (item) {
54+
self.itemClicked = function (item, event) {
55+
// Check for key presses
56+
if (event.type === "keydown") {
57+
const key = event.key;
58+
if (key === "Enter" || key === " ") {
59+
event.preventDefault(); // Prevent default behavior
60+
event.target.click(); // Simulate a click, which closes the menu
61+
return true;
62+
} else if (key === "ArrowRight") {
63+
event.preventDefault();
64+
const hoverEvent = new Event('mouseover', { bubbles: true });
65+
event.target.dispatchEvent(hoverEvent); // Simulate hover.
66+
return true;
67+
} else {
68+
return true; // Let other keys propagate normally
69+
}
70+
}
5571
self.conceptSetId(item.id);
5672
self.previewVisible(false);
5773
};

js/components/cohortbuilder/components/ConceptSetSelectorTemplate.html

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,36 @@
1313

1414
<ul class="dropdown-menu dropdown-menu-right"
1515
style="height: auto; max-height:200px; width:200px; overflow-x: hidden; padding:4px" role="menu">
16-
<li class="dropdown-item" onclick="event.stopPropagation();">
17-
<input type="text" style="width:100%; border: solid 1px #9bc1fd; border-radius: 3px"
16+
<li class="dropdown-item" onclick="event.stopPropagation();" role="presentation">
17+
<input type="text" style="width:100%; border: solid 1px #9bc1fd; border-radius: 3px" role="searchbox"
1818
data-bind="attr: {placeholder: ko.i18n('components.conceptSetSelector.searchWithTripleDots', 'Search...')}, textInput: filterText">
1919
</li>
2020
<!-- ko foreach: filteredConceptSets -->
21-
<li class="dropdown-item conceptset" style="cursor:pointer">
21+
<li class="dropdown-item conceptset" style="cursor:pointer" role="menuitem" aria-haspopup="true" aria-controls="filtered-conceptset-submenu">
2222
<a>
23-
<div style="max-width:195px; overflow-x: hidden; text-overflow:ellipsis;"
24-
data-bind="text: name, attr:{'title': name}, click: $component.itemClicked"></div>
23+
<div style="max-width:195px; overflow-x: hidden; text-overflow:ellipsis;" tabindex="0"
24+
role="button"
25+
aria-label="Click/Enter to select concept, hover/Arrow Right to see submenu"
26+
data-bind="text: name, attr:{'title': name}, event:{ keydown: $component.itemClicked, click: $component.itemClicked }"></div>
2527
</a>
2628
</li>
2729
<!-- ko if: $component.conceptSetId() != null && $index() == 0 -->
28-
<li class="divider"></li>
30+
<li class="divider" role="separator"></li>
2931
<!-- /ko -->
3032
<!-- /ko -->
3133
<!-- ko if: filteredConceptSets().length > 1 -->
32-
<li class="divider"></li>
34+
<li class="divider" role="separator"></li>
3335
<!-- /ko -->
34-
<li style="cursor:pointer"><a class="conceptset_import">
36+
<li style="cursor:pointer" role="menuitem"><a class="conceptset_import">
3537
<span data-bind="text:ko.i18n('components.conceptSetSelector.importConcept','Import Concept Set')"></span>
3638
</a></li>
37-
<li style="cursor:pointer"><a data-bind="click: clear">
39+
<li style="cursor:pointer" role="menuitem"><a data-bind="click: clear">
3840
<span data-bind="text:ko.i18n('components.conceptSetSelector.clearConceptSet','Clear Concept Set')"></span>
3941
</a></li>
4042
</ul>
4143
<ul>
4244
<!-- ko if: previewVisible -->
43-
<div onclick="event.stopPropagation();" class="undraggable"
45+
<div onclick="event.stopPropagation();" class="undraggable" id="filtered-conceptset-submenu" role="menu" tabindex="0"
4446
style="border: solid 1px black;padding:5px; z-index: 999; background-color:white; position: absolute; max-height:200px; overflow-y:auto"
4547
data-bind="style: { top: `${previewTop()}px`, left: `${previewLeft()}px`}">
4648
<div style="background-color:#aaa; font-weight: bold" data-bind="text: previewConceptSet().name"></div>

js/components/cohortbuilder/components/EndStrategyEditorTemplate.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div>
22
<span data-bind="text: ko.i18n('components.endStrategyEditor.eventWillPersistUntil', 'Event will persist until:')"></span>
3-
<select data-bind="options: $component.strategyOptions,
3+
<select title="Event will persist until" data-bind="options: $component.strategyOptions,
44
optionsText: function(item) { return item.text },
55
optionsValue: 'name',
66
value: strategyType">

js/components/conceptset/conceptset-editor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ define([
2828
this.canEditCurrentConceptSet = params.canEditCurrentConceptSet;
2929
this.commonUtils = commonUtils;
3030
this.columns = [
31-
{ title: '', orderable: false, render: () => renderers.renderCheckbox('isSelected', this.canEditCurrentConceptSet()) },
31+
{ title: ko.i18n('columns.selected', 'Selected'), orderable: false, render: () => renderers.renderCheckbox('isSelected', this.canEditCurrentConceptSet()) },
3232
{ title: ko.i18n('columns.conceptId', 'Concept Id'), data: 'concept.CONCEPT_ID'},
3333
{ title: ko.i18n('columns.conceptCode', 'Concept Code'), data: 'concept.CONCEPT_CODE'},
3434
{ title: ko.i18n('columns.conceptName', 'Concept Name'), render: commonUtils.renderBoundLink},

js/components/conceptset/conceptset-list.less

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
&__conceptset-tabs .tabs__header-title {
1313
font-size: 1.2rem;
14-
background-color: #888;
15-
color: #ccc;
14+
background-color: #696969;
15+
color: #EBEBEB;
1616
}
1717

1818
&__conceptset-tabs .tabs__header-title--selected {

js/components/modal.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div
1+
<div aria-labelledby="atlas-modal-dialog-title"
22
data-bind="modal: $component.showModal, css: classes({ extra: ['modal', fade() ? 'fade' : ''], modifiers: $component.modifiers })"
33
tabindex="-1" role="dialog">
44
<div class="modal-dialog"
@@ -10,7 +10,7 @@
1010
aria-hidden="true">&times;</span></button>
1111
<!-- /ko -->
1212
<i data-bind="css: $component.iconClass"></i>
13-
<div class="modal-title" data-bind="text: $component.title"></div>
13+
<div id="atlas-modal-dialog-title" class="modal-title" data-bind="text: $component.title"></div>
1414
</div>
1515
<div data-bind="if: $component.showModal, css: classes(templateWrapperClass)">
1616
<!-- ko if: $component.template -->

0 commit comments

Comments
 (0)