Skip to content

Commit 7dbf395

Browse files
classix-odmportuga
authored andcommitted
fix(selection): Prevent space bar scrolling (#6410)
- Fix the parameters of $scope.headerButtonClick in selection.js. - Prevent space bar from scrolling on headers and selection cells.
1 parent a6b52c2 commit 7dbf395

File tree

5 files changed

+34
-2
lines changed

5 files changed

+34
-2
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
}

src/features/selection/templates/selectionRowHeaderButtons.html

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
class="ui-grid-selection-row-header-buttons ui-grid-icon-ok"
33
ng-class="{'ui-grid-row-selected': row.isSelected}"
44
ng-click="selectButtonClick(row, $event)"
5+
ng-keydown="selectButtonKeyDown(row, $event)">
56
role="checkbox"
67
ng-model="row.isSelected">
78
 
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
@@ -163,6 +163,12 @@
163163
}
164164
};
165165

166+
$scope.handleKeyDown = function(event) {
167+
if (event.keyCode === 32) {
168+
event.preventDefault();
169+
}
170+
};
171+
166172
$scope.moveFn = function( event ){
167173
// Chrome is known to fire some bogus move events.
168174
var changeValue = event.pageX - previousMouseX;
@@ -363,8 +369,15 @@
363369
}).catch(angular.noop);
364370
};
365371

372+
$scope.headerCellArrowKeyDown = function(event) {
373+
if (event.keyCode === 32 || event.keyCode === 13) {
374+
event.preventDefault();
375+
$scope.toggleMenu(event);
376+
}
377+
};
366378

367379
$scope.toggleMenu = function(event) {
380+
368381
event.stopPropagation();
369382

370383
// 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)