Sha256: a2375ad4839f2d2c78f7e2c52d31617ebc54cc6b2dfcf426d8ea6777581e3190

Contents?: true

Size: 1.98 KB

Versions: 37

Compression:

Stored size: 1.98 KB

Contents

import { stopEventPropagation, fireClick } from './handle-dom';
import { setFocusStyle } from './handle-swal-dom';


var handleKeyDown = function(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(e);
    $targetElement.focus();

    if (params.confirmButtonColor) {
      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;
      fireClick($targetElement, e);
    } else {
      // Fallback - let the browser handle it.
      $targetElement = undefined;
    }
  }
};

export default handleKeyDown;

Version data entries

37 entries across 37 versions & 2 rubygems

Version Path
radius-rails-3.1.4 app/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.22 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.21 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.20 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.19 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.18 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.17 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.16 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.15 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.14 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.13 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.12 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.10 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.9 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.8 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.7 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.6 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.5 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.4 vendor/assets/components/sweetalert/dev/modules/handle-key.js
abstracted-0.4.3 vendor/assets/components/sweetalert/dev/modules/handle-key.js