resize-event.js 1000 B

1234567891011121314151617181920212223242526272829303132333435
  1. import ResizeObserver from 'resize-observer-polyfill';
  2. const isServer = typeof window === 'undefined';
  3. /* istanbul ignore next */
  4. const resizeHandler = function(entries) {
  5. for (let entry of entries) {
  6. const listeners = entry.target.__resizeListeners__ || [];
  7. if (listeners.length) {
  8. listeners.forEach(fn => {
  9. fn();
  10. });
  11. }
  12. }
  13. };
  14. /* istanbul ignore next */
  15. export const addResizeListener = function(element, fn) {
  16. if (isServer) return;
  17. if (!element.__resizeListeners__) {
  18. element.__resizeListeners__ = [];
  19. element.__ro__ = new ResizeObserver(resizeHandler);
  20. element.__ro__.observe(element);
  21. }
  22. element.__resizeListeners__.push(fn);
  23. };
  24. /* istanbul ignore next */
  25. export const removeResizeListener = function(element, fn) {
  26. if (!element || !element.__resizeListeners__) return;
  27. element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
  28. if (!element.__resizeListeners__.length) {
  29. element.__ro__.disconnect();
  30. }
  31. };