Skip to content

Commit 6f4cad8

Browse files
committed
fix(selection): Prevent space bar scrolling
- Fix the parameters of $scope.headerButtonClick in selection.js. - Prevent space bar from scrolling on headers and selection cells.
1 parent 84ea8fa commit 6f4cad8

File tree

5 files changed

+35
-3
lines changed

5 files changed

+35
-3
lines changed

src/features/selection/js/selection.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -708,13 +708,20 @@
708708
link: function ($scope, $elm, $attrs, uiGridCtrl) {
709709
var self = uiGridCtrl.grid;
710710
$scope.selectButtonClick = selectButtonClick;
711+
$scope.selectButtonKeyDown = selectButtonKeyDown;
711712

712713
// On IE, prevent mousedowns on the select button from starting a selection.
713714
// If this is not done and you shift+click on another row, the browser will select a big chunk of text
714715
if (gridUtil.detectBrowser() === 'ie') {
715716
$elm.on('mousedown', selectButtonMouseDown);
716717
}
717718

719+
function selectButtonKeyDown(row, evt) {
720+
if (evt.keyCode === 32) {
721+
evt.preventDefault();
722+
selectButtonClick(row, evt);
723+
}
724+
}
718725

719726
function selectButtonClick(row, evt) {
720727
evt.stopPropagation();
@@ -759,7 +766,14 @@
759766
link: function ($scope, $elm, $attrs, uiGridCtrl) {
760767
var self = $scope.col.grid;
761768

762-
$scope.headerButtonClick = function (row, evt) {
769+
$scope.headerButtonKeyDown = function (evt) {
770+
if (evt.keyCode === 32 || evt.keyCode === 13) {
771+
evt.preventDefault();
772+
$scope.headerButtonClick(evt);
773+
}
774+
};
775+
776+
$scope.headerButtonClick = function (evt) {
763777
if (self.selection.selectAll) {
764778
uiGridSelectionService.clearSelectedRows(self, evt);
765779
if (self.options.noUnselect) {
@@ -846,6 +860,7 @@
846860
}
847861

848862
if (evt.keyCode === 32 && $scope.col.colDef.name === "selectionRowHeaderCol") {
863+
evt.preventDefault();
849864
uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt, ($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect), $scope.grid.options.noUnselect);
850865
$scope.$apply();
851866
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<div
22
class="ui-grid-selection-row-header-buttons ui-grid-icon-ok"
33
ng-class="{'ui-grid-row-selected': row.isSelected}"
4-
ng-click="selectButtonClick(row, $event)">
4+
ng-click="selectButtonClick(row, $event)"
5+
ng-keydown="selectButtonKeyDown(row, $event)">
56
&nbsp;
67
</div>
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<div
22
class="ui-grid-selection-row-header-buttons ui-grid-icon-ok"
33
ng-class="{'ui-grid-all-selected': grid.selection.selectAll}"
4-
ng-click="headerButtonClick($event)">
4+
ng-click="headerButtonClick($event)"
5+
ng-keydown="headerButtonKeyDown($event)">
56
</div>

src/js/core/directives/ui-grid-header-cell.js

+13
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@
153153
}
154154
};
155155

156+
$scope.handleKeyDown = function(event) {
157+
if (event.keyCode === 32) {
158+
event.preventDefault();
159+
}
160+
};
161+
156162
$scope.moveFn = function( event ){
157163
// Chrome is known to fire some bogus move events.
158164
var changeValue = event.pageX - previousMouseX;
@@ -353,8 +359,15 @@
353359
}).catch(angular.noop);
354360
};
355361

362+
$scope.headerCellArrowKeyDown = function(event) {
363+
if (event.keyCode === 32 || event.keyCode === 13) {
364+
event.preventDefault();
365+
$scope.toggleMenu(event);
366+
}
367+
};
356368

357369
$scope.toggleMenu = function(event) {
370+
358371
event.stopPropagation();
359372

360373
// If the menu is already showing...

src/templates/ui-grid/uiGridHeaderCell.html

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<div
77
role="button"
88
tabindex="0"
9+
ng-keydown="handleKeyDown($event)"
910
class="ui-grid-cell-contents ui-grid-header-cell-primary-focus"
1011
col-index="renderIndex"
1112
title="TOOLTIP">
@@ -39,6 +40,7 @@
3940
class="ui-grid-column-menu-button"
4041
ng-if="grid.options.enableColumnMenus && !col.isRowHeader && col.colDef.enableColumnMenu !== false"
4142
ng-click="toggleMenu($event)"
43+
ng-keydown="headerCellArrowKeyDown($event)"
4244
ng-class="{'ui-grid-column-menu-button-last-col': isLastCol}"
4345
ui-grid-one-bind-aria-label="i18n.headerCell.aria.columnMenuButtonLabel"
4446
aria-haspopup="true">

0 commit comments

Comments
 (0)