server/bo_client/app/mixins/click-outside-mixin.js
changeset 28 b0b56e0f8c7f
child 537 d2e6ee099125
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     1 import Ember from 'ember';
       
     2 
       
     3 /**
       
     4  * Mixin to detect outside click for a component.
       
     5  * taken from http://stackoverflow.com/a/32115231
       
     6  */
       
     7 export default Ember.Mixin.create({
       
     8   onOutsideClick: Ember.K,
       
     9   onOutsideClickEnabled: true,
       
    10 
       
    11   handleOutsideClick: function(event) {
       
    12     var element = this.$();
       
    13     var target = Ember.$(event.target);
       
    14     if(element && target) {
       
    15       console.log("OUTSIDE CLICK", element.has(target).length, element.is(target));
       
    16       if (!(element.has(target).length || element.is(target))) {
       
    17         this.onOutsideClick();
       
    18       }
       
    19     }
       
    20   },
       
    21 
       
    22   _registerOutsideClickListener() {
       
    23     let clickHandler = this.get('handleOutsideClick').bind(this);
       
    24 
       
    25     return Ember.$(document).on('click', clickHandler);
       
    26   },
       
    27 
       
    28   _unregisterOutsideClickListener() {
       
    29     let clickHandler = this.get('handleOutsideClick').bind(this);
       
    30 
       
    31     return Ember.$(document).off('click', clickHandler);
       
    32   },
       
    33 
       
    34   _onOutsideClickEnabledChanged: Ember.observer('onOutsideClickEnabled', function() {
       
    35     if(this.get('onOutsideClickEnabled')) {
       
    36       this._registerOutsideClickListener();
       
    37     }
       
    38     else {
       
    39       this._unregisterOutsideClickListener();
       
    40     }
       
    41   }),
       
    42 
       
    43   setupOutsideClickListener: Ember.on('didInsertElement', function() {
       
    44     this._super(...arguments);
       
    45     if(this.get('onOutsideClickEnabled')) {
       
    46       return this._registerOutsideClickListener();
       
    47     }
       
    48     else {
       
    49       return Ember.$(document);
       
    50     }
       
    51   }),
       
    52 
       
    53   removeOutsideClickListener: Ember.on('willDestroyElement', function() {
       
    54     return this._unregisterOutsideClickListener();
       
    55   })
       
    56 });