openfoodfoundation/openfoodnetwork

View on GitHub
app/webpacker/js/hotkeys.js

Summary

Maintainability
A
0 mins
Test Coverage
import hotkeys from "hotkeys-js";

// Enable hotkeys on form elements
hotkeys.filter = function (event) {
  var tagName = (event.target || event.srcElement).tagName;
  hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT|BUTTON)$/.test(tagName) ? "input" : "other");
  return true;
};

// Submit form
// Although 'enter' will submit the form in many cases, it doesn't cover elements such
// as select and textarea. This shortcut is a standard used across many major websites.
hotkeys("ctrl+enter, command+enter", function (event, handler) {
  const form = event.target.form;

  // Simulate a click on the first available submit button. This seems to be the most robust option,
  // ensuring that event handlers are handled first (eg for StimulusReflex). If there's no submit
  // button, nothing happens (eg for Angular forms).
  const submit = form && form.querySelector('input[type="submit"], button[type="submit"]');
  submit && submit.click();
});