🎨 Simplified RO even more

pull/8022/head
TheCymaera 4 years ago
parent c0572ba4c0
commit f3d2dd00dd

@ -7,14 +7,13 @@ const MapImplementation = "WeakMap" in window ? WeakMap : ("Map" in window ? Map
export class ResizeObserverSingleton { export class ResizeObserverSingleton {
constructor(readonly options?: ResizeObserverOptions) {} constructor(readonly options?: ResizeObserverOptions) {}
addListener(element: Element, callback: Callback) { addListener(element: Element, listener: Listener) {
this._subscriptions.set(element, new Subscription(callback)); this._subscriptions.set(element, {listener});
this._getObserver().observe(element, this.options); this._getObserver().observe(element, this.options);
} return ()=>{
this._subscriptions.delete(element);
removeListener(element: Element) { this._observer!.unobserve(element); // this line can probably be removed
this._subscriptions.delete(element); }
this._getObserver().unobserve(element);
} }
getLastEntry(element: Element) { getLastEntry(element: Element) {
@ -22,7 +21,7 @@ export class ResizeObserverSingleton {
} }
private readonly _subscriptions: WeakMap<Element, Subscription> = MapImplementation ? new MapImplementation() : undefined; private readonly _subscriptions: WeakMap<Element, Subscription> = MapImplementation ? new MapImplementation() : undefined;
private _observer: ResizeObserver|undefined = undefined; private _observer?: ResizeObserver;
private _getObserver() { private _getObserver() {
return this._observer ?? (this._observer = new ResizeObserver((entries)=>{ return this._observer ?? (this._observer = new ResizeObserver((entries)=>{
for (const entry of entries) { for (const entry of entries) {
@ -34,11 +33,9 @@ export class ResizeObserverSingleton {
} }
} }
type Callback = (entry: ResizeObserverEntry)=>any; type Listener = (entry: ResizeObserverEntry)=>any;
class Subscription { interface Subscription {
constructor( readonly listener: Listener,
readonly listener: Callback, lastEntry?: ResizeObserverEntry,
public lastEntry?: ResizeObserverEntry,
) {}
} }

@ -647,23 +647,19 @@ const resize_observer_border_box = new ResizeObserverSingleton({ box: "border-bo
const resize_observer_device_pixel_content_box = new ResizeObserverSingleton({ box: "device-pixel-content-box" }); const resize_observer_device_pixel_content_box = new ResizeObserverSingleton({ box: "device-pixel-content-box" });
export function add_content_rect_observer(node: Element, fn: () => void) { export function add_content_rect_observer(node: Element, fn: () => void) {
resize_observer_content_rect.addListener(node, fn); return resize_observer_content_rect.addListener(node, fn);
return ()=> resize_observer_content_rect.removeListener(node);
} }
export function add_content_box_observer(node: Element, fn: () => void) { export function add_content_box_observer(node: Element, fn: () => void) {
resize_observer_content_box.addListener(node, fn); return resize_observer_content_box.addListener(node, fn);
return ()=> resize_observer_content_box.removeListener(node);
} }
export function add_border_box_observer(node: Element, fn: () => void) { export function add_border_box_observer(node: Element, fn: () => void) {
resize_observer_border_box.addListener(node, fn); return resize_observer_border_box.addListener(node, fn);
return ()=> resize_observer_border_box.removeListener(node);
} }
export function add_device_pixel_content_box_observer(node: Element, fn: () => void) { export function add_device_pixel_content_box_observer(node: Element, fn: () => void) {
resize_observer_device_pixel_content_box.addListener(node, fn); return resize_observer_device_pixel_content_box.addListener(node, fn);
return ()=> resize_observer_device_pixel_content_box.removeListener(node);
} }
export function get_content_rect(node: Element) { export function get_content_rect(node: Element) {

Loading…
Cancel
Save