control.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.keydownBehavior = void 0;
  6. var _utils = require("../../utils");
  7. var _shared = require("../shared");
  8. /**
  9. * This file should contain behavior for arrow keys as described here:
  10. * https://w3c.github.io/uievents-code/#key-controlpad-section
  11. */
  12. const keydownBehavior = [{
  13. matches: (keyDef, element) => (keyDef.key === 'Home' || keyDef.key === 'End') && ((0, _utils.isElementType)(element, ['input', 'textarea']) || (0, _utils.isContentEditable)(element)),
  14. handle: (keyDef, element) => {
  15. // This could probably been improved by collapsing a selection range
  16. if (keyDef.key === 'Home') {
  17. (0, _utils.setSelectionRange)(element, 0, 0);
  18. } else {
  19. var _getValue$length, _getValue;
  20. const newPos = (_getValue$length = (_getValue = (0, _utils.getValue)(element)) == null ? void 0 : _getValue.length) != null ? _getValue$length :
  21. /* istanbul ignore next */
  22. 0;
  23. (0, _utils.setSelectionRange)(element, newPos, newPos);
  24. }
  25. }
  26. }, {
  27. matches: (keyDef, element) => (keyDef.key === 'PageUp' || keyDef.key === 'PageDown') && (0, _utils.isElementType)(element, ['input']),
  28. handle: (keyDef, element) => {
  29. // This could probably been improved by collapsing a selection range
  30. if (keyDef.key === 'PageUp') {
  31. (0, _utils.setSelectionRange)(element, 0, 0);
  32. } else {
  33. var _getValue$length2, _getValue2;
  34. const newPos = (_getValue$length2 = (_getValue2 = (0, _utils.getValue)(element)) == null ? void 0 : _getValue2.length) != null ? _getValue$length2 :
  35. /* istanbul ignore next */
  36. 0;
  37. (0, _utils.setSelectionRange)(element, newPos, newPos);
  38. }
  39. }
  40. }, {
  41. matches: (keyDef, element) => keyDef.key === 'Delete' && (0, _utils.isEditable)(element) && !(0, _utils.isCursorAtEnd)(element),
  42. handle: (keDef, element, options, state) => {
  43. const {
  44. newValue,
  45. newSelectionStart
  46. } = (0, _utils.calculateNewValue)('', element, state.carryValue, undefined, 'forward');
  47. (0, _shared.fireInputEvent)(element, {
  48. newValue,
  49. newSelectionStart,
  50. eventOverrides: {
  51. inputType: 'deleteContentForward'
  52. }
  53. });
  54. (0, _shared.carryValue)(element, state, newValue);
  55. }
  56. }];
  57. exports.keydownBehavior = keydownBehavior;