1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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;
|