index.cjs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', {
  3. value: true
  4. });
  5. var w3cKeyname = require('w3c-keyname');
  6. var prosemirrorState = require('prosemirror-state');
  7. var mac = typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false;
  8. function normalizeKeyName(name) {
  9. var parts = name.split(/-(?!$)/),
  10. result = parts[parts.length - 1];
  11. if (result == "Space") result = " ";
  12. var alt, ctrl, shift, meta;
  13. for (var i = 0; i < parts.length - 1; i++) {
  14. var mod = parts[i];
  15. if (/^(cmd|meta|m)$/i.test(mod)) meta = true;else if (/^a(lt)?$/i.test(mod)) alt = true;else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;else if (/^s(hift)?$/i.test(mod)) shift = true;else if (/^mod$/i.test(mod)) {
  16. if (mac) meta = true;else ctrl = true;
  17. } else throw new Error("Unrecognized modifier name: " + mod);
  18. }
  19. if (alt) result = "Alt-" + result;
  20. if (ctrl) result = "Ctrl-" + result;
  21. if (meta) result = "Meta-" + result;
  22. if (shift) result = "Shift-" + result;
  23. return result;
  24. }
  25. function normalize(map) {
  26. var copy = Object.create(null);
  27. for (var prop in map) {
  28. copy[normalizeKeyName(prop)] = map[prop];
  29. }
  30. return copy;
  31. }
  32. function modifiers(name, event) {
  33. var shift = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  34. if (event.altKey) name = "Alt-" + name;
  35. if (event.ctrlKey) name = "Ctrl-" + name;
  36. if (event.metaKey) name = "Meta-" + name;
  37. if (shift && event.shiftKey) name = "Shift-" + name;
  38. return name;
  39. }
  40. function keymap(bindings) {
  41. return new prosemirrorState.Plugin({
  42. props: {
  43. handleKeyDown: keydownHandler(bindings)
  44. }
  45. });
  46. }
  47. function keydownHandler(bindings) {
  48. var map = normalize(bindings);
  49. return function (view, event) {
  50. var name = w3cKeyname.keyName(event),
  51. baseName,
  52. direct = map[modifiers(name, event)];
  53. if (direct && direct(view.state, view.dispatch, view)) return true;
  54. if (name.length == 1 && name != " ") {
  55. if (event.shiftKey) {
  56. var noShift = map[modifiers(name, event, false)];
  57. if (noShift && noShift(view.state, view.dispatch, view)) return true;
  58. }
  59. if ((event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) && (baseName = w3cKeyname.base[event.keyCode]) && baseName != name) {
  60. var fromCode = map[modifiers(baseName, event)];
  61. if (fromCode && fromCode(view.state, view.dispatch, view)) return true;
  62. }
  63. }
  64. return false;
  65. };
  66. }
  67. exports.keydownHandler = keydownHandler;
  68. exports.keymap = keymap;