Skip to content

Instantly share code, notes, and snippets.

@mydea
Last active June 22, 2020 09:25
Show Gist options
  • Save mydea/b72b17554c484287721f7f0e8d672eeb to your computer and use it in GitHub Desktop.
Save mydea/b72b17554c484287721f7f0e8d672eeb to your computer and use it in GitHub Desktop.
New Twiddle
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class Application extends Controller {
@tracked size = {
height: 'unknown',
width: 'unknown',
};
@tracked runCount = 0;
@action onResize({ width, element, runCount }) {
this.size = {
height: element.clientHeight,
width: width,
};
this.runCount = runCount;
}
}
import { modifier } from 'ember-modifier';
export function resizeObserver(
element,
[onResize],
{ hasResizeObserver = 'ResizeObserver' in window }
) {
// Note: The resize observer will also run initially
// If it is not supported, we only call it once,
// but it will not trigger on actual resizing
// Note: This can be overwritten for tests
if (!hasResizeObserver) {
let width = Math.floor(element.offsetWidth);
onResize({ width, element, runCount: 0 });
return;
}
let runCount = 0;
let previousWidth;
let resizeObserver = new ResizeObserver(() => {
let width = Math.floor(element.offsetWidth);
if (width === previousWidth) {
return;
}
onResize({ width, element, runCount });
runCount++;
previousWidth = width;
});
resizeObserver.observe(element);
return () => resizeObserver.disconnect();
}
export default modifier(resizeObserver);
<h1>Modifier in Safari repro</h1>
<ul>
<li>Run count: {{this.runCount}}</li>
<li>Width: {{this.size.width}}</li>
<li>Height: {{this.size.height}}</li>
</ul>
<div {{resize-observer this.onResize}}>
Check resize on this element...
</div>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-modifier": "1.0.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment