util.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.isSamePoint = isSamePoint;
  7. exports.monitorResize = monitorResize;
  8. exports.restoreFocus = restoreFocus;
  9. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  10. var _contains = _interopRequireDefault(require("../vc-util/Dom/contains"));
  11. var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
  12. function isSamePoint(prev, next) {
  13. if (prev === next) return true;
  14. if (!prev || !next) return false;
  15. if ('pageX' in next && 'pageY' in next) {
  16. return prev.pageX === next.pageX && prev.pageY === next.pageY;
  17. }
  18. if ('clientX' in next && 'clientY' in next) {
  19. return prev.clientX === next.clientX && prev.clientY === next.clientY;
  20. }
  21. return false;
  22. }
  23. function restoreFocus(activeElement, container) {
  24. // Focus back if is in the container
  25. if (activeElement !== document.activeElement && (0, _contains.default)(container, activeElement) && typeof activeElement.focus === 'function') {
  26. activeElement.focus();
  27. }
  28. }
  29. function monitorResize(element, callback) {
  30. var prevWidth = null;
  31. var prevHeight = null;
  32. function onResize(_ref) {
  33. var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
  34. target = _ref2[0].target;
  35. if (!document.documentElement.contains(target)) return;
  36. var _target$getBoundingCl = target.getBoundingClientRect(),
  37. width = _target$getBoundingCl.width,
  38. height = _target$getBoundingCl.height;
  39. var fixedWidth = Math.floor(width);
  40. var fixedHeight = Math.floor(height);
  41. if (prevWidth !== fixedWidth || prevHeight !== fixedHeight) {
  42. // https://webkit.org/blog/9997/resizeobserver-in-webkit/
  43. Promise.resolve().then(function () {
  44. callback({
  45. width: fixedWidth,
  46. height: fixedHeight
  47. });
  48. });
  49. }
  50. prevWidth = fixedWidth;
  51. prevHeight = fixedHeight;
  52. }
  53. var resizeObserver = new _resizeObserverPolyfill.default(onResize);
  54. if (element) {
  55. resizeObserver.observe(element);
  56. }
  57. return function () {
  58. resizeObserver.disconnect();
  59. };
  60. }