Browse Source

Merge pull request #747 from Kollibri/master

Fix issue with disabled options (Issue #733)
Igor Vaynberg 12 years ago
parent
commit
434827d22c
2 changed files with 23 additions and 25 deletions
  1. 6 8
      select2.css
  2. 17 17
      select2.js

+ 6 - 8
select2.css

@@ -344,7 +344,8 @@ Version: @@ver@@ Timestamp: @@timestamp@@
 }
 }
 
 
 /*
 /*
-disabled look for already selected choices in the results dropdown
+disabled look for disabled choices in the results dropdown
+*/
 .select2-results .select2-disabled.select2-highlighted {
 .select2-results .select2-disabled.select2-highlighted {
     color: #666;
     color: #666;
     background: #f4f4f4;
     background: #f4f4f4;
@@ -356,8 +357,8 @@ disabled look for already selected choices in the results dropdown
   display: list-item;
   display: list-item;
   cursor: default;
   cursor: default;
 }
 }
-*/
-.select2-results .select2-disabled {
+
+.select2-results .select2-selected {
     display: none;
     display: none;
 }
 }
 
 
@@ -548,11 +549,8 @@ disabled look for already selected choices in the results dropdown
 
 
 
 
 .select2-result-selectable .select2-match,
 .select2-result-selectable .select2-match,
-.select2-result-unselectable .select2-result-selectable .select2-match {
-    text-decoration: underline;
-}
 .select2-result-unselectable .select2-match {
 .select2-result-unselectable .select2-match {
-    text-decoration: none;
+    text-decoration: underline;
 }
 }
 
 
 .select2-offscreen {
 .select2-offscreen {
@@ -571,4 +569,4 @@ disabled look for already selected choices in the results dropdown
   .select2-search input {
   .select2-search input {
       background-position: 100% -21px !important;
       background-position: 100% -21px !important;
   }
   }
-}
+}

+ 17 - 17
select2.js

@@ -612,7 +612,7 @@ the specific language governing permissions and limitations under the Apache Lic
             search.bind("blur", function () { search.removeClass("select2-focused");});
             search.bind("blur", function () { search.removeClass("select2-focused");});
 
 
             this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) {
             this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) {
-                if ($(e.target).closest(".select2-result-selectable:not(.select2-disabled)").length > 0) {
+                if ($(e.target).closest(".select2-result-selectable:visible").length > 0) {
                     this.highlightUnderEvent(e);
                     this.highlightUnderEvent(e);
                     this.selectHighlighted(e);
                     this.selectHighlighted(e);
                 } else {
                 } else {
@@ -1058,7 +1058,7 @@ the specific language governing permissions and limitations under the Apache Lic
                 return;
                 return;
             }
             }
 
 
-            children = results.find(".select2-result-selectable");
+            children = results.find(".select2-result:visible");
 
 
             child = $(children[index]);
             child = $(children[index]);
 
 
@@ -1086,13 +1086,13 @@ the specific language governing permissions and limitations under the Apache Lic
 
 
         // abstract
         // abstract
         moveHighlight: function (delta) {
         moveHighlight: function (delta) {
-            var choices = this.results.find(".select2-result-selectable"),
+            var choices = this.results.find(".select2-result:visible"),
                 index = this.highlight();
                 index = this.highlight();
 
 
             while (index > -1 && index < choices.length) {
             while (index > -1 && index < choices.length) {
                 index += delta;
                 index += delta;
                 var choice = $(choices[index]);
                 var choice = $(choices[index]);
-                if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled")) {
+                if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {
                     this.highlight(index);
                     this.highlight(index);
                     break;
                     break;
                 }
                 }
@@ -1101,7 +1101,7 @@ the specific language governing permissions and limitations under the Apache Lic
 
 
         // abstract
         // abstract
         highlight: function (index) {
         highlight: function (index) {
-            var choices = this.results.find(".select2-result-selectable").not(".select2-disabled");
+            var choices = this.results.find(".select2-result:visible");
 
 
             if (arguments.length === 0) {
             if (arguments.length === 0) {
                 return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
                 return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
@@ -1119,14 +1119,14 @@ the specific language governing permissions and limitations under the Apache Lic
 
 
         // abstract
         // abstract
         countSelectableResults: function() {
         countSelectableResults: function() {
-            return this.results.find(".select2-result-selectable").not(".select2-disabled").length;
+            return this.results.find(".select2-result-selectable").not(".select2-disabled").not(".select2-selected").length;
         },
         },
 
 
         // abstract
         // abstract
         highlightUnderEvent: function (event) {
         highlightUnderEvent: function (event) {
             var el = $(event.target).closest(".select2-result-selectable");
             var el = $(event.target).closest(".select2-result-selectable");
             if (el.length > 0 && !el.is(".select2-highlighted")) {
             if (el.length > 0 && !el.is(".select2-highlighted")) {
-        		var choices = this.results.find('.select2-result-selectable');
+        		var choices = this.results.find('.select2-result');
                 this.highlight(choices.index(el));
                 this.highlight(choices.index(el));
             } else if (el.length == 0) {
             } else if (el.length == 0) {
                 // if we are over an unselectable item remove al highlights
                 // if we are over an unselectable item remove al highlights
@@ -1329,10 +1329,10 @@ the specific language governing permissions and limitations under the Apache Lic
         // abstract
         // abstract
         selectHighlighted: function (options) {
         selectHighlighted: function (options) {
             var index=this.highlight(),
             var index=this.highlight(),
-                highlighted=this.results.find(".select2-highlighted").not(".select2-disabled"),
-                data = highlighted.closest('.select2-result-selectable').data("select2-data");
+                highlighted=this.results.find(".select2-highlighted:visible"),
+                data = highlighted.closest('.select2-result:visible').data("select2-data");
             if (data) {
             if (data) {
-                highlighted.addClass("select2-disabled");
+                highlighted.addClass("select2-selected");
                 this.highlight(index);
                 this.highlight(index);
                 this.onSelect(data, options);
                 this.onSelect(data, options);
             }
             }
@@ -1677,7 +1677,7 @@ the specific language governing permissions and limitations under the Apache Lic
 
 
             // find the selected element in the result list
             // find the selected element in the result list
 
 
-            this.results.find(".select2-result-selectable").each2(function (i, elm) {
+            this.results.find(".select2-result:visible").each2(function (i, elm) {
                 if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
                 if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
                     selected = i;
                     selected = i;
                     return false;
                     return false;
@@ -2188,30 +2188,30 @@ the specific language governing permissions and limitations under the Apache Lic
         // multi
         // multi
         postprocessResults: function () {
         postprocessResults: function () {
             var val = this.getVal(),
             var val = this.getVal(),
-                choices = this.results.find(".select2-result-selectable"),
+                choices = this.results.find(".select2-result:visible"),
                 compound = this.results.find(".select2-result-with-children"),
                 compound = this.results.find(".select2-result-with-children"),
                 self = this;
                 self = this;
 
 
             choices.each2(function (i, choice) {
             choices.each2(function (i, choice) {
                 var id = self.id(choice.data("select2-data"));
                 var id = self.id(choice.data("select2-data"));
                 if (indexOf(id, val) >= 0) {
                 if (indexOf(id, val) >= 0) {
-                    choice.addClass("select2-disabled").removeClass("select2-result-selectable");
+                    choice.addClass("select2-selected").removeClass("select2-result-selectable");
                 } else {
                 } else {
-                    choice.removeClass("select2-disabled").addClass("select2-result-selectable");
+                    choice.removeClass("select2-selected").addClass("select2-result-selectable");
                 }
                 }
             });
             });
 
 
             compound.each2(function(i, e) {
             compound.each2(function(i, e) {
                 if (!e.is('.select2-result-selectable') && e.find(".select2-result-selectable").length==0) {  // FIX FOR HIERARCHICAL DATA
                 if (!e.is('.select2-result-selectable') && e.find(".select2-result-selectable").length==0) {  // FIX FOR HIERARCHICAL DATA
-                    e.addClass("select2-disabled");
+                    e.addClass("select2-selected");
                 } else {
                 } else {
-                    e.removeClass("select2-disabled");
+                    e.removeClass("select2-selected");
                 }
                 }
             });
             });
 
 
             if (this.highlight() == -1){
             if (this.highlight() == -1){
                 choices.each2(function (i, choice) {
                 choices.each2(function (i, choice) {
-                    if (!choice.hasClass("select2-disabled") && choice.hasClass("select2-result-selectable")) {
+                    if (!choice.hasClass("select2-selected") &&!choice.hasClass("select2-disabled") && choice.hasClass("select2-result-selectable")) {
                         self.highlight(0);
                         self.highlight(0);
                         return false;
                         return false;
                     }
                     }