Browse Source

Trigger events when the dropdown opens and closes

Kevin Brown 10 years ago
parent
commit
cbc2d2f3ec
5 changed files with 95 additions and 10 deletions
  1. 19 2
      dist/js/select2.amd.full.js
  2. 19 2
      dist/js/select2.amd.js
  3. 19 2
      dist/js/select2.full.js
  4. 19 2
      dist/js/select2.js
  5. 19 2
      src/js/select2/core.js

+ 19 - 2
dist/js/select2.amd.full.js

@@ -673,6 +673,7 @@ define('select2/core',[
     this.data = new this.options.dataAdapter($element, this.options);
 
     var $container = this.render();
+    this.$container = $container;
 
     $container.insertAfter(this.$element);
 
@@ -716,18 +717,26 @@ define('select2/core',[
     });
 
     this.selection.on("toggle", function () {
-      $container.toggleClass("open");
+      self.toggleDropdown();
     });
 
     this.results.on("selected", function (params) {
       self.trigger("select", params);
 
-      $container.removeClass("open");
+      self.trigger("close");
     });
 
     this.results.on("unselected", function (params) {
       self.trigger("unselect", params);
 
+      self.trigger("close");
+    });
+
+    this.on("open", function () {
+      $container.addClass("open");
+    });
+
+    this.on("close", function () {
       $container.removeClass("open");
     });
 
@@ -750,6 +759,14 @@ define('select2/core',[
 
   Utils.Extend(Select2, Utils.Observable);
 
+  Select2.prototype.toggleDropdown = function () {
+    if (this.$container.hasClass("open")) {
+      this.trigger("close");
+    } else {
+      this.trigger("open");
+    }
+  }
+
   Select2.prototype.render = function () {
     var $container = $(
       '<span class="select2 select2-container select2-theme-default">' +

+ 19 - 2
dist/js/select2.amd.js

@@ -673,6 +673,7 @@ define('select2/core',[
     this.data = new this.options.dataAdapter($element, this.options);
 
     var $container = this.render();
+    this.$container = $container;
 
     $container.insertAfter(this.$element);
 
@@ -716,18 +717,26 @@ define('select2/core',[
     });
 
     this.selection.on("toggle", function () {
-      $container.toggleClass("open");
+      self.toggleDropdown();
     });
 
     this.results.on("selected", function (params) {
       self.trigger("select", params);
 
-      $container.removeClass("open");
+      self.trigger("close");
     });
 
     this.results.on("unselected", function (params) {
       self.trigger("unselect", params);
 
+      self.trigger("close");
+    });
+
+    this.on("open", function () {
+      $container.addClass("open");
+    });
+
+    this.on("close", function () {
       $container.removeClass("open");
     });
 
@@ -750,6 +759,14 @@ define('select2/core',[
 
   Utils.Extend(Select2, Utils.Observable);
 
+  Select2.prototype.toggleDropdown = function () {
+    if (this.$container.hasClass("open")) {
+      this.trigger("close");
+    } else {
+      this.trigger("open");
+    }
+  }
+
   Select2.prototype.render = function () {
     var $container = $(
       '<span class="select2 select2-container select2-theme-default">' +

+ 19 - 2
dist/js/select2.full.js

@@ -10210,6 +10210,7 @@ define('select2/core',[
     this.data = new this.options.dataAdapter($element, this.options);
 
     var $container = this.render();
+    this.$container = $container;
 
     $container.insertAfter(this.$element);
 
@@ -10253,18 +10254,26 @@ define('select2/core',[
     });
 
     this.selection.on("toggle", function () {
-      $container.toggleClass("open");
+      self.toggleDropdown();
     });
 
     this.results.on("selected", function (params) {
       self.trigger("select", params);
 
-      $container.removeClass("open");
+      self.trigger("close");
     });
 
     this.results.on("unselected", function (params) {
       self.trigger("unselect", params);
 
+      self.trigger("close");
+    });
+
+    this.on("open", function () {
+      $container.addClass("open");
+    });
+
+    this.on("close", function () {
       $container.removeClass("open");
     });
 
@@ -10287,6 +10296,14 @@ define('select2/core',[
 
   Utils.Extend(Select2, Utils.Observable);
 
+  Select2.prototype.toggleDropdown = function () {
+    if (this.$container.hasClass("open")) {
+      this.trigger("close");
+    } else {
+      this.trigger("open");
+    }
+  }
+
   Select2.prototype.render = function () {
     var $container = $(
       '<span class="select2 select2-container select2-theme-default">' +

+ 19 - 2
dist/js/select2.js

@@ -1101,6 +1101,7 @@ define('select2/core',[
     this.data = new this.options.dataAdapter($element, this.options);
 
     var $container = this.render();
+    this.$container = $container;
 
     $container.insertAfter(this.$element);
 
@@ -1144,18 +1145,26 @@ define('select2/core',[
     });
 
     this.selection.on("toggle", function () {
-      $container.toggleClass("open");
+      self.toggleDropdown();
     });
 
     this.results.on("selected", function (params) {
       self.trigger("select", params);
 
-      $container.removeClass("open");
+      self.trigger("close");
     });
 
     this.results.on("unselected", function (params) {
       self.trigger("unselect", params);
 
+      self.trigger("close");
+    });
+
+    this.on("open", function () {
+      $container.addClass("open");
+    });
+
+    this.on("close", function () {
       $container.removeClass("open");
     });
 
@@ -1178,6 +1187,14 @@ define('select2/core',[
 
   Utils.Extend(Select2, Utils.Observable);
 
+  Select2.prototype.toggleDropdown = function () {
+    if (this.$container.hasClass("open")) {
+      this.trigger("close");
+    } else {
+      this.trigger("open");
+    }
+  }
+
   Select2.prototype.render = function () {
     var $container = $(
       '<span class="select2 select2-container select2-theme-default">' +

+ 19 - 2
src/js/select2/core.js

@@ -19,6 +19,7 @@ define([
     this.data = new this.options.dataAdapter($element, this.options);
 
     var $container = this.render();
+    this.$container = $container;
 
     $container.insertAfter(this.$element);
 
@@ -62,18 +63,26 @@ define([
     });
 
     this.selection.on("toggle", function () {
-      $container.toggleClass("open");
+      self.toggleDropdown();
     });
 
     this.results.on("selected", function (params) {
       self.trigger("select", params);
 
-      $container.removeClass("open");
+      self.trigger("close");
     });
 
     this.results.on("unselected", function (params) {
       self.trigger("unselect", params);
 
+      self.trigger("close");
+    });
+
+    this.on("open", function () {
+      $container.addClass("open");
+    });
+
+    this.on("close", function () {
       $container.removeClass("open");
     });
 
@@ -96,6 +105,14 @@ define([
 
   Utils.Extend(Select2, Utils.Observable);
 
+  Select2.prototype.toggleDropdown = function () {
+    if (this.$container.hasClass("open")) {
+      this.trigger("close");
+    } else {
+      this.trigger("open");
+    }
+  }
+
   Select2.prototype.render = function () {
     var $container = $(
       '<span class="select2 select2-container select2-theme-default">' +