import {Map} from './shims/es6-collections.js'; import ResizeObserverController from './ResizeObserverController.js'; import ResizeObserverSPI from './ResizeObserverSPI.js'; // Registry of internal observers. If WeakMap is not available use current shim // for the Map collection as it has all required methods and because WeakMap // can't be fully polyfilled anyway. const observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new Map(); /** * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation * exposing only those methods and properties that are defined in the spec. */ class ResizeObserver { /** * Creates a new instance of ResizeObserver. * * @param {ResizeObserverCallback} callback - Callback that is invoked when * dimensions of the observed elements change. */ constructor(callback) { if (!(this instanceof ResizeObserver)) { throw new TypeError('Cannot call a class as a function.'); } if (!arguments.length) { throw new TypeError('1 argument required, but only 0 present.'); } const controller = ResizeObserverController.getInstance(); const observer = new ResizeObserverSPI(callback, controller, this); observers.set(this, observer); } } // Expose public methods of ResizeObserver. [ 'observe', 'unobserve', 'disconnect' ].forEach(method => { ResizeObserver.prototype[method] = function () { return observers.get(this)[method](...arguments); }; }); export default ResizeObserver;