3433a5b5cc11bc37d7e3a5fc19a906ce099fb8f838b8e79991e8c4a6dbdd4780ae1584cf671edda6e34cd9f4fa800420dc420e5d5081124eb1bf2ade3a3c0a 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {Map} from './shims/es6-collections.js';
  2. import ResizeObserverController from './ResizeObserverController.js';
  3. import ResizeObserverSPI from './ResizeObserverSPI.js';
  4. // Registry of internal observers. If WeakMap is not available use current shim
  5. // for the Map collection as it has all required methods and because WeakMap
  6. // can't be fully polyfilled anyway.
  7. const observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new Map();
  8. /**
  9. * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
  10. * exposing only those methods and properties that are defined in the spec.
  11. */
  12. class ResizeObserver {
  13. /**
  14. * Creates a new instance of ResizeObserver.
  15. *
  16. * @param {ResizeObserverCallback} callback - Callback that is invoked when
  17. * dimensions of the observed elements change.
  18. */
  19. constructor(callback) {
  20. if (!(this instanceof ResizeObserver)) {
  21. throw new TypeError('Cannot call a class as a function.');
  22. }
  23. if (!arguments.length) {
  24. throw new TypeError('1 argument required, but only 0 present.');
  25. }
  26. const controller = ResizeObserverController.getInstance();
  27. const observer = new ResizeObserverSPI(callback, controller, this);
  28. observers.set(this, observer);
  29. }
  30. }
  31. // Expose public methods of ResizeObserver.
  32. [
  33. 'observe',
  34. 'unobserve',
  35. 'disconnect'
  36. ].forEach(method => {
  37. ResizeObserver.prototype[method] = function () {
  38. return observers.get(this)[method](...arguments);
  39. };
  40. });
  41. export default ResizeObserver;