79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _stopEventPropagation$fireClick = require('./handle-dom');
|
||
|
|
||
|
var _setFocusStyle = require('./handle-swal-dom');
|
||
|
|
||
|
var handleKeyDown = function handleKeyDown(event, params, modal) {
|
||
|
var e = event || window.event;
|
||
|
var keyCode = e.keyCode || e.which;
|
||
|
|
||
|
var $okButton = modal.querySelector('button.confirm');
|
||
|
var $cancelButton = modal.querySelector('button.cancel');
|
||
|
var $modalButtons = modal.querySelectorAll('button[tabindex]');
|
||
|
|
||
|
if ([9, 13, 32, 27].indexOf(keyCode) === -1) {
|
||
|
// Don't do work on keys we don't care about.
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var $targetElement = e.target || e.srcElement;
|
||
|
|
||
|
var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.
|
||
|
for (var i = 0; i < $modalButtons.length; i++) {
|
||
|
if ($targetElement === $modalButtons[i]) {
|
||
|
btnIndex = i;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (keyCode === 9) {
|
||
|
// TAB
|
||
|
if (btnIndex === -1) {
|
||
|
// No button focused. Jump to the confirm button.
|
||
|
$targetElement = $okButton;
|
||
|
} else {
|
||
|
// Cycle to the next button
|
||
|
if (btnIndex === $modalButtons.length - 1) {
|
||
|
$targetElement = $modalButtons[0];
|
||
|
} else {
|
||
|
$targetElement = $modalButtons[btnIndex + 1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_stopEventPropagation$fireClick.stopEventPropagation(e);
|
||
|
$targetElement.focus();
|
||
|
|
||
|
if (params.confirmButtonColor) {
|
||
|
_setFocusStyle.setFocusStyle($targetElement, params.confirmButtonColor);
|
||
|
}
|
||
|
} else {
|
||
|
if (keyCode === 13) {
|
||
|
if ($targetElement.tagName === 'INPUT') {
|
||
|
$targetElement = $okButton;
|
||
|
$okButton.focus();
|
||
|
}
|
||
|
|
||
|
if (btnIndex === -1) {
|
||
|
// ENTER/SPACE clicked outside of a button.
|
||
|
$targetElement = $okButton;
|
||
|
} else {
|
||
|
// Do nothing - let the browser handle it.
|
||
|
$targetElement = undefined;
|
||
|
}
|
||
|
} else if (keyCode === 27 && params.allowEscapeKey === true) {
|
||
|
$targetElement = $cancelButton;
|
||
|
_stopEventPropagation$fireClick.fireClick($targetElement, e);
|
||
|
} else {
|
||
|
// Fallback - let the browser handle it.
|
||
|
$targetElement = undefined;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports['default'] = handleKeyDown;
|
||
|
module.exports = exports['default'];
|