From f3d2dd00dde374116e43546891862706b4e15994 Mon Sep 17 00:00:00 2001 From: TheCymaera <69355340+TheCymaera@users.noreply.github.com> Date: Fri, 11 Nov 2022 18:43:03 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Simplified=20RO=20even=20more?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/ResizeObserverSingleton.ts | 25 ++++++++----------- src/runtime/internal/dom.ts | 12 +++------ 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/runtime/internal/ResizeObserverSingleton.ts b/src/runtime/internal/ResizeObserverSingleton.ts index a8e4788e5c..8232e4fce1 100644 --- a/src/runtime/internal/ResizeObserverSingleton.ts +++ b/src/runtime/internal/ResizeObserverSingleton.ts @@ -7,14 +7,13 @@ const MapImplementation = "WeakMap" in window ? WeakMap : ("Map" in window ? Map export class ResizeObserverSingleton { constructor(readonly options?: ResizeObserverOptions) {} - addListener(element: Element, callback: Callback) { - this._subscriptions.set(element, new Subscription(callback)); + addListener(element: Element, listener: Listener) { + this._subscriptions.set(element, {listener}); this._getObserver().observe(element, this.options); - } - - removeListener(element: Element) { - this._subscriptions.delete(element); - this._getObserver().unobserve(element); + return ()=>{ + this._subscriptions.delete(element); + this._observer!.unobserve(element); // this line can probably be removed + } } getLastEntry(element: Element) { @@ -22,7 +21,7 @@ export class ResizeObserverSingleton { } private readonly _subscriptions: WeakMap = MapImplementation ? new MapImplementation() : undefined; - private _observer: ResizeObserver|undefined = undefined; + private _observer?: ResizeObserver; private _getObserver() { return this._observer ?? (this._observer = new ResizeObserver((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 { - constructor( - readonly listener: Callback, - public lastEntry?: ResizeObserverEntry, - ) {} +interface Subscription { + readonly listener: Listener, + lastEntry?: ResizeObserverEntry, } \ No newline at end of file diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 946dfb97b1..26dc44b3dd 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -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" }); export function add_content_rect_observer(node: Element, fn: () => void) { - resize_observer_content_rect.addListener(node, fn); - return ()=> resize_observer_content_rect.removeListener(node); + return resize_observer_content_rect.addListener(node, fn); } export function add_content_box_observer(node: Element, fn: () => void) { - resize_observer_content_box.addListener(node, fn); - return ()=> resize_observer_content_box.removeListener(node); + return resize_observer_content_box.addListener(node, fn); } export function add_border_box_observer(node: Element, fn: () => void) { - resize_observer_border_box.addListener(node, fn); - return ()=> resize_observer_border_box.removeListener(node); + return resize_observer_border_box.addListener(node, fn); } 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.removeListener(node); + return resize_observer_device_pixel_content_box.addListener(node, fn); } export function get_content_rect(node: Element) {