11import Ember from 'ember' ;
22import layout from '../templates/components/burger-menu' ;
33import computedStyleFor from 'ember-burger-menu/computed/style-for' ;
4- import SwipeSupport from 'ember-burger-menu/mixins/swipe-support' ;
4+ import SwipeSupportMixin from 'ember-burger-menu/mixins/swipe-support' ;
5+ import DomMixin from 'ember-lifeline/mixins/dom' ;
56
67const {
78 $,
@@ -13,7 +14,7 @@ const {
1314 inject : { service }
1415} = Ember ;
1516
16- export default Ember . Component . extend ( SwipeSupport , {
17+ export default Ember . Component . extend ( DomMixin , SwipeSupportMixin , {
1718 classNames : [ 'ember-burger-menu' ] ,
1819 classNameBindings : [ 'open:is-open' , 'translucentOverlay' , 'animationClass' , 'position' ] ,
1920 attributeBindings : [ 'style' ] ,
@@ -24,8 +25,10 @@ export default Ember.Component.extend(SwipeSupport, {
2425 translucentOverlay : true ,
2526 dismissOnClick : true ,
2627 dismissOnEsc : true ,
28+ gesturesEnabled : true ,
2729
2830 open : alias ( 'state.open' ) ,
31+ locked : alias ( 'state.locked' ) ,
2932 position : alias ( 'state.position' ) ,
3033 width : alias ( 'state.width' ) ,
3134 animation : alias ( 'state.animation' ) ,
@@ -41,35 +44,32 @@ export default Ember.Component.extend(SwipeSupport, {
4144 willDestroyElement ( ) {
4245 this . _super ( ...arguments ) ;
4346 run . cancel ( this . _setupEventsTimer ) ;
44- this . _teardownEvents ( ) ;
4547 } ,
4648
47- setupEvents : on ( 'didInsertElement' , observer ( 'open' , function ( ) {
48- let methodName = this . get ( 'open' ) ? '_setupEvents' : '_teardownEvents' ;
49- this . _setupEventsTimer = run . scheduleOnce ( 'afterRender' , this , methodName ) ;
49+ setupEvents : on ( 'didInsertElement' , observer ( 'open' , 'locked' , function ( ) {
50+ if ( this . get ( 'locked' ) ) {
51+ this . _setupEventsTimer = run . scheduleOnce ( 'afterRender' , this , '_teardownEvents' ) ;
52+ } else {
53+ let methodName = this . get ( 'open' ) ? '_setupEvents' : '_teardownEvents' ;
54+ this . _setupEventsTimer = run . scheduleOnce ( 'afterRender' , this , methodName ) ;
55+ }
5056 } ) ) ,
5157
5258 _setupEvents ( ) {
53- let $element = this . $ ( ) ;
54- let onClick = this . onClick . bind ( this ) ;
55- let onKeyUp = this . onKeyup . bind ( this ) ;
56-
5759 if ( this . get ( 'dismissOnClick' ) ) {
58- $element . on ( 'click.bm ' , onClick ) ;
59- $element . on ( 'touchstart.bm ' , onClick ) ;
60+ this . addEventListener ( this . $ ( ) , 'click' , this . onClick ) ;
61+ this . addEventListener ( this . $ ( ) , 'touchstart' , this . onClick ) ;
6062 }
6163
6264 if ( this . get ( 'dismissOnEsc' ) ) {
63- $ ( document ) . on ( 'keyup.bm ' , onKeyUp ) ;
65+ this . addEventListener ( document , 'keyup' , this . onKeyup ) ;
6466 }
6567 } ,
6668
6769 _teardownEvents ( ) {
68- let $element = this . $ ( ) ;
69-
70- $element . off ( 'click.bm' ) ;
71- $element . off ( 'touchstart.bm' ) ;
72- $ ( document ) . off ( 'keyup.bm' ) ;
70+ this . removeEventListener ( this . $ ( ) , 'click' , this . onClick ) ;
71+ this . removeEventListener ( this . $ ( ) , 'touchstart' , this . onClick ) ;
72+ this . removeEventListener ( document , 'keyup' , this . onKeyup ) ;
7373 } ,
7474
7575 onClick ( e ) {
@@ -91,8 +91,14 @@ export default Ember.Component.extend(SwipeSupport, {
9191 onSwipe ( direction , target ) {
9292 let position = this . get ( 'position' ) ;
9393 let open = this . get ( 'open' ) ;
94+ let locked = this . get ( 'locked' ) ;
95+ let gesturesEnabled = this . get ( 'gesturesEnabled' ) ;
9496 let isMenuSwipe = $ ( target ) . closest ( '.bm-menu' ) . length > 0 ;
9597
98+ if ( ! gesturesEnabled || locked ) {
99+ return ;
100+ }
101+
96102 if ( open && isMenuSwipe && position === direction ) {
97103 this . set ( 'open' , false ) ;
98104 } else if ( ! open && position !== direction ) {
0 commit comments