diff -r a2342f26c9de -r b0b56e0f8c7f server/bo_client/app/mixins/click-outside-mixin.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/app/mixins/click-outside-mixin.js Fri Jan 15 15:35:00 2016 +0100 @@ -0,0 +1,56 @@ +import Ember from 'ember'; + +/** + * Mixin to detect outside click for a component. + * taken from http://stackoverflow.com/a/32115231 + */ +export default Ember.Mixin.create({ + onOutsideClick: Ember.K, + onOutsideClickEnabled: true, + + handleOutsideClick: function(event) { + var element = this.$(); + var target = Ember.$(event.target); + if(element && target) { + console.log("OUTSIDE CLICK", element.has(target).length, element.is(target)); + if (!(element.has(target).length || element.is(target))) { + this.onOutsideClick(); + } + } + }, + + _registerOutsideClickListener() { + let clickHandler = this.get('handleOutsideClick').bind(this); + + return Ember.$(document).on('click', clickHandler); + }, + + _unregisterOutsideClickListener() { + let clickHandler = this.get('handleOutsideClick').bind(this); + + return Ember.$(document).off('click', clickHandler); + }, + + _onOutsideClickEnabledChanged: Ember.observer('onOutsideClickEnabled', function() { + if(this.get('onOutsideClickEnabled')) { + this._registerOutsideClickListener(); + } + else { + this._unregisterOutsideClickListener(); + } + }), + + setupOutsideClickListener: Ember.on('didInsertElement', function() { + this._super(...arguments); + if(this.get('onOutsideClickEnabled')) { + return this._registerOutsideClickListener(); + } + else { + return Ember.$(document); + } + }), + + removeOutsideClickListener: Ember.on('willDestroyElement', function() { + return this._unregisterOutsideClickListener(); + }) +});