Skip to content

Commit 9425f18

Browse files
authored
fix: observer PR cleanup (#8484)
leftovers from #8022
1 parent cd690e0 commit 9425f18

File tree

5 files changed

+37
-22
lines changed

5 files changed

+37
-22
lines changed

src/compiler/compile/render_dom/wrappers/Element/index.ts

+24-11
Original file line numberDiff line numberDiff line change
@@ -765,20 +765,33 @@ export default class ElementWrapper extends Wrapper {
765765
`);
766766

767767
binding_group.events.forEach(name => {
768-
const resizeListenerFunctions = {
769-
elementresize: 'add_iframe_resize_listener',
770-
elementresizecontentbox: 'resize_observer_content_box.observe',
771-
elementresizeborderbox: 'resize_observer_border_box.observe',
772-
elementresizedevicepixelcontentbox: 'resize_observer_device_pixel_content_box.observe'
773-
};
774-
775-
if (name in resizeListenerFunctions) {
768+
if (['elementresize', 'elementresizecontentbox', 'elementresizeborderbox', 'elementresizedevicepixelcontentbox'].indexOf(name) !== -1) {
776769
const resize_listener = block.get_unique_name(`${this.var.name}_resize_listener`);
777770
block.add_variable(resize_listener);
778771

779-
block.chunks.mount.push(
780-
b`${resize_listener} = @${resizeListenerFunctions[name]}(${this.var}, ${callee}.bind(${this.var}));`
781-
);
772+
// Can't dynamically do `@fn[name]`, code-red doesn't know how to resolve it
773+
switch (name) {
774+
case 'elementresize':
775+
block.chunks.mount.push(
776+
b`${resize_listener} = @add_iframe_resize_listener(${this.var}, ${callee}.bind(${this.var}));`
777+
);
778+
break;
779+
case 'elementresizecontentbox':
780+
block.chunks.mount.push(
781+
b`${resize_listener} = @resize_observer_content_box.observe(${this.var}, ${callee}.bind(${this.var}));`
782+
);
783+
break;
784+
case 'elementresizeborderbox':
785+
block.chunks.mount.push(
786+
b`${resize_listener} = @resize_observer_border_box.observe(${this.var}, ${callee}.bind(${this.var}));`
787+
);
788+
break;
789+
case 'elementresizedevicepixelcontentbox':
790+
block.chunks.mount.push(
791+
b`${resize_listener} = @resize_observer_device_pixel_content_box.observe(${this.var}, ${callee}.bind(${this.var}));`
792+
);
793+
break;
794+
}
782795

783796
block.chunks.destroy.push(
784797
b`${resize_listener}();`

src/runtime/internal/ResizeObserverSingleton.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { globals } from './globals';
2+
13
/**
24
* Resize observer singleton.
35
* One listener per element only!
@@ -15,19 +17,19 @@ export class ResizeObserverSingleton {
1517
};
1618
}
1719

18-
static readonly entries: WeakMap<Element, ResizeObserverEntry> = 'WeakMap' in globalThis ? new WeakMap() : undefined;
19-
20-
private readonly _listeners: WeakMap<Element, Listener> = 'WeakMap' in globalThis ? new WeakMap() : undefined;
20+
private readonly _listeners: WeakMap<Element, Listener> = 'WeakMap' in globals ? new WeakMap() : undefined;
2121
private _observer?: ResizeObserver;
2222
private _getObserver() {
2323
return this._observer ?? (this._observer = new ResizeObserver((entries) => {
2424
for (const entry of entries) {
25-
ResizeObserverSingleton.entries.set(entry.target, entry);
25+
(ResizeObserverSingleton as any).entries.set(entry.target, entry);
2626
this._listeners.get(entry.target)?.(entry);
2727
}
2828
}));
2929
}
3030
}
31+
// Needs to be written like this to pass the tree-shake-test
32+
(ResizeObserverSingleton as any).entries = 'WeakMap' in globals ? new WeakMap() : undefined;
3133

3234
type Listener = (entry: ResizeObserverEntry)=>any;
3335

src/runtime/internal/dom.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -747,9 +747,9 @@ export function add_iframe_resize_listener(node: HTMLElement, fn: () => void) {
747747
};
748748
}
749749

750-
export const resize_observer_content_box = new ResizeObserverSingleton({ box: 'content-box' });
751-
export const resize_observer_border_box = new ResizeObserverSingleton({ box: 'border-box' });
752-
export const resize_observer_device_pixel_content_box = new ResizeObserverSingleton({ box: 'device-pixel-content-box' });
750+
export const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'content-box' });
751+
export const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'border-box' });
752+
export const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'device-pixel-content-box' });
753753
export { ResizeObserverSingleton };
754754

755755
export function toggle_class(element, name, toggle) {

test/js/samples/bind-width-height/expected.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* generated by Svelte vX.Y.Z */
22
import {
33
SvelteComponent,
4+
add_iframe_resize_listener,
45
add_render_callback,
5-
add_resize_listener,
66
detach,
77
element,
88
init,
@@ -23,7 +23,7 @@ function create_fragment(ctx) {
2323
},
2424
m(target, anchor) {
2525
insert(target, div, anchor);
26-
div_resize_listener = add_resize_listener(div, /*div_elementresize_handler*/ ctx[2].bind(div));
26+
div_resize_listener = add_iframe_resize_listener(div, /*div_elementresize_handler*/ ctx[2].bind(div));
2727
},
2828
p: noop,
2929
i: noop,

test/js/samples/video-bindings/expected.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* generated by Svelte vX.Y.Z */
22
import {
33
SvelteComponent,
4+
add_iframe_resize_listener,
45
add_render_callback,
5-
add_resize_listener,
66
detach,
77
element,
88
init,
@@ -42,7 +42,7 @@ function create_fragment(ctx) {
4242
},
4343
m(target, anchor) {
4444
insert(target, video, anchor);
45-
video_resize_listener = add_resize_listener(video, /*video_elementresize_handler*/ ctx[7].bind(video));
45+
video_resize_listener = add_iframe_resize_listener(video, /*video_elementresize_handler*/ ctx[7].bind(video));
4646

4747
if (!mounted) {
4848
dispose = [

0 commit comments

Comments
 (0)