Lint and format src/runtime/internal/ResizeObserverSingleton.js

pull/8569/head
S. Elliott Johnson 3 years ago
parent 33e664781a
commit a63a6a4ef0

@ -5,62 +5,63 @@ import { globals } from './globals';
* https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ
*/ */
export class ResizeObserverSingleton { export class ResizeObserverSingleton {
options; options;
constructor(options) { constructor(options) {
this.options = options; this.options = options;
} }
/** @param {Element} element /** @param {Element} element
* @param {Listener} listener * @param {Listener} listener
* @returns {() => void} * @returns {() => void}
*/ */
observe(element, listener) { observe(element, listener) {
this._listeners.set(element, listener); this._listeners.set(element, listener);
this._getObserver().observe(element, this.options); this._getObserver().observe(element, this.options);
return () => { return () => {
this._listeners.delete(element); this._listeners.delete(element);
this._observer.unobserve(element); // this line can probably be removed this._observer.unobserve(element); // this line can probably be removed
}; };
} }
/** @private /** @private
* @readonly * @readonly
* @default 'WeakMap' in globals ? new WeakMap() : undefined * @default 'WeakMap' in globals ? new WeakMap() : undefined
*/ */
_listeners = 'WeakMap' in globals ? new WeakMap() : undefined; _listeners = 'WeakMap' in globals ? new WeakMap() : undefined;
/** @private */ /** @private */
_observer = undefined; _observer = undefined;
/** @private /** @private
* @returns {ResizeObserver} * @returns {ResizeObserver}
*/ */
_getObserver() { _getObserver() {
return (this._observer ?? return (
(this._observer = new ResizeObserver((entries) => { this._observer ??
for (const entry of entries) { (this._observer = new ResizeObserver((entries) => {
ResizeObserverSingleton.entries.set(entry.target, entry); for (const entry of entries) {
this._listeners.get(entry.target)?.(entry); ResizeObserverSingleton.entries.set(entry.target, entry);
} this._listeners.get(entry.target)?.(entry);
}))); }
} }))
);
}
} }
// Needs to be written like this to pass the tree-shake-test // Needs to be written like this to pass the tree-shake-test
ResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined; ResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined;
/** @typedef {(entry: ResizeObserverEntry) => any} Listener */ /** @typedef {(entry: ResizeObserverEntry) => any} Listener */
/** @typedef {'border-box' | 'content-box' | 'device-pixel-content-box'} ResizeObserverBoxOptions */ /** @typedef {'border-box' | 'content-box' | 'device-pixel-content-box'} ResizeObserverBoxOptions */
/** @typedef {Object} ResizeObserverSize /** @typedef {Object} ResizeObserverSize
* @property {number} blockSize * @property {number} blockSize
* @property {number} inlineSize * @property {number} inlineSize
*/ */
/** @typedef {Object} ResizeObserverEntry /** @typedef {Object} ResizeObserverEntry
* @property {readonlyResizeObserverSize[]} borderBoxSize * @property {readonlyResizeObserverSize[]} borderBoxSize
* @property {readonlyResizeObserverSize[]} contentBoxSize * @property {readonlyResizeObserverSize[]} contentBoxSize
* @property {DOMRectReadOnly} contentRect * @property {DOMRectReadOnly} contentRect
* @property {readonlyResizeObserverSize[]} devicePixelContentBoxSize * @property {readonlyResizeObserverSize[]} devicePixelContentBoxSize
* @property {Element} target * @property {Element} target
*/ */
/** @typedef {Object} ResizeObserverOptions /** @typedef {Object} ResizeObserverOptions
* @property {ResizeObserverBoxOptions} [box] * @property {ResizeObserverBoxOptions} [box]
*/ */
/** @typedef {Object} ResizeObserver */ /** @typedef {Object} ResizeObserver */
/** @typedef {Object} ResizeObserverCallback */ /** @typedef {Object} ResizeObserverCallback */

Loading…
Cancel
Save