--- /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();
+ })
+});