11import Mixin from '@ember/object/mixin' ;
22import { inject as service } from '@ember/service' ;
33
4+ let componentsToNotify = [ ] ;
5+ let didSetupListener = false ;
6+
7+ function setupListener ( ) {
8+ didSetupListener = true ;
9+ window . addEventListener ( 'resize' , ( ) => {
10+ componentsToNotify . forEach ( c => {
11+ c . scaleFont ( ) ;
12+ } ) ;
13+ } , false ) ;
14+ }
15+
416export default Mixin . create ( {
517
618 classNames : [ 'resize-text' ] ,
@@ -11,15 +23,21 @@ export default Mixin.create({
1123 textMeasurer : service ( ) ,
1224
1325 didInsertElement ( ) {
14- this . _super ( ...arguments ) ;
15- window . addEventListener ( 'resize' , this . set ( '_resizeHandler' , this . scaleFont . bind ( this ) ) , false ) ;
26+ if ( ! didSetupListener ) {
27+ setupListener ( ) ;
28+ }
29+ componentsToNotify . push ( this ) ;
1630 this . element . style [ 'white-space' ] = 'nowrap' ;
1731 this . scaleFont ( ) ;
1832 } ,
1933
20- willDestroyElement : function ( ) {
21- this . _super ( ...arguments ) ;
22- window . removeEventListener ( 'resize' , this . get ( '_resizeHandler' ) , false ) ;
34+ willDestroy ( ) {
35+ for ( let i = 0 ; i < componentsToNotify . length ; i ++ ) {
36+ if ( componentsToNotify [ i ] === this ) {
37+ componentsToNotify . splice ( i , 1 ) ;
38+ break ;
39+ }
40+ }
2341 } ,
2442
2543 scaleFont ( ) {
0 commit comments