ソースを参照

Merge branch 'master' into develop

James Mikesell 9 年 前
コミット
6f5aa30e65
1 ファイル変更38 行追加26 行削除
  1. 38 26
      src/extensions/filter-control/bootstrap-table-filter-control.js

+ 38 - 26
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -14,12 +14,14 @@
     var addOptionToSelectControl = function (selectControl, value, text) {
     var addOptionToSelectControl = function (selectControl, value, text) {
         value = $.trim(value);
         value = $.trim(value);
         selectControl = $(selectControl.get(selectControl.length - 1));
         selectControl = $(selectControl.get(selectControl.length - 1));
-        if (existOptionInSelectControl(selectControl, value)) {
+        if (!existOptionInSelectControl(selectControl, value)) {
             selectControl.append($("<option></option>")
             selectControl.append($("<option></option>")
                 .attr("value", value)
                 .attr("value", value)
                 .text($('<div />').html(text).text()));
                 .text($('<div />').html(text).text()));
+        }
+    };
 
 
-            // Sort it. Not overly efficient to do this here
+    var sortSelectControl = function (selectControl) {
             var $opts = selectControl.find('option:gt(0)');
             var $opts = selectControl.find('option:gt(0)');
             $opts.sort(function (a, b) {
             $opts.sort(function (a, b) {
                 a = $(a).text().toLowerCase();
                 a = $(a).text().toLowerCase();
@@ -34,20 +36,19 @@
 
 
             selectControl.find('option:gt(0)').remove();
             selectControl.find('option:gt(0)').remove();
             selectControl.append($opts);
             selectControl.append($opts);
-        }
     };
     };
 
 
     var existOptionInSelectControl = function (selectControl, value) {
     var existOptionInSelectControl = function (selectControl, value) {
         var options = selectControl.get(selectControl.length - 1).options;
         var options = selectControl.get(selectControl.length - 1).options;
         for (var i = 0; i < options.length; i++) {
         for (var i = 0; i < options.length; i++) {
-            if (!value || options[i].value === value.toString()) {
+            if (options[i].value === value.toString()) {
                 //The value is not valid to add
                 //The value is not valid to add
-                return false;
+                return true;
             }
             }
         }
         }
 
 
         //If we get here, the value is valid to add
         //If we get here, the value is valid to add
-        return true;
+        return false;
     };
     };
 
 
     var fixHeaderCSS = function (that) {
     var fixHeaderCSS = function (that) {
@@ -179,26 +180,31 @@
             (that.options.sidePagination === 'server' ? that.pageTo : that.options.totalRows) :
             (that.options.sidePagination === 'server' ? that.pageTo : that.options.totalRows) :
             that.pageTo;
             that.pageTo;
 
 
-        for (var i = 0; i < z; i++) {
-            $.each(that.header.fields, function (j, field) {
-                var column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)],
-                    selectControl = $('.' + escapeID(column.field));
-
-                if (isColumnSearchableViaSelect(column) && isFilterDataNotGiven(column) && hasSelectControlElement(selectControl)) {
-                    if (selectControl.get(selectControl.length - 1).options.length === 0) {
-                        //Added the default option
-                        addOptionToSelectControl(selectControl, '', '');
-                    }
+        $.each(that.header.fields, function (j, field) {
+            var column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)],
+                selectControl = $('.' + escapeID(column.field));
 
 
+            if (isColumnSearchableViaSelect(column) && isFilterDataNotGiven(column) && hasSelectControlElement(selectControl)) {
+                if (selectControl.get(selectControl.length - 1).options.length === 0) {
+                    //Added the default option
+                    addOptionToSelectControl(selectControl, '', '');
+                }
+                
+                var uniqueValues = {};
+                for (var i = 0; i < z; i++) {
                     //Added a new value
                     //Added a new value
                     var fieldValue = data[i][field],
                     var fieldValue = data[i][field],
                         formattedValue = $.fn.bootstrapTable.utils.calculateObjectValue(that.header, that.header.formatters[j], [fieldValue, data[i], i], fieldValue);
                         formattedValue = $.fn.bootstrapTable.utils.calculateObjectValue(that.header, that.header.formatters[j], [fieldValue, data[i], i], fieldValue);
 
 
-                    addOptionToSelectControl(selectControl, fieldValue, formattedValue);
+                    uniqueValues[formattedValue] = fieldValue;
                 }
                 }
-            });
-        }
-
+                for (var key in uniqueValues) {
+                    addOptionToSelectControl(selectControl, uniqueValues[key], key);
+                }
+                
+                sortSelectControl(selectControl);
+            }
+        });
     };
     };
 
 
     var escapeID = function( id ) {
     var escapeID = function( id ) {
@@ -261,9 +267,10 @@
                             url: filterDataSource,
                             url: filterDataSource,
                             dataType: 'json',
                             dataType: 'json',
                             success: function (data) {
                             success: function (data) {
-                                $.each(data, function (key, value) {
-                                    addOptionToSelectControl(selectControl, key, value);
-                                });
+                                for (var key in data) {
+                                    addOptionToSelectControl(selectControl, key, data[key]);
+                                }
+                                sortSelectControl(selectControl);
                             }
                             }
                         });
                         });
                         break;
                         break;
@@ -272,12 +279,14 @@
                         for (key in variableValues) {
                         for (key in variableValues) {
                             addOptionToSelectControl(selectControl, key, variableValues[key]);
                             addOptionToSelectControl(selectControl, key, variableValues[key]);
                         }
                         }
+                        sortSelectControl(selectControl);
                         break;
                         break;
                     case 'jso':
                     case 'jso':
                         variableValues = JSON.parse(filterDataSource);
                         variableValues = JSON.parse(filterDataSource);
                         for (key in variableValues) {
                         for (key in variableValues) {
                             addOptionToSelectControl(selectControl, key, variableValues[key]);
                             addOptionToSelectControl(selectControl, key, variableValues[key]);
                         }
                         }
+                        sortSelectControl(selectControl);
                         break;
                         break;
                 }
                 }
             }
             }
@@ -356,15 +365,17 @@
                 for (var key in variableValues) {
                 for (var key in variableValues) {
                     addOptionToSelectControl(selectControl, key, variableValues[key]);
                     addOptionToSelectControl(selectControl, key, variableValues[key]);
                 }
                 }
+                sortSelectControl(selectControl);
             },
             },
             'url': function (filterDataSource, selectControl) {
             'url': function (filterDataSource, selectControl) {
                 $.ajax({
                 $.ajax({
                     url: filterDataSource,
                     url: filterDataSource,
                     dataType: 'json',
                     dataType: 'json',
                     success: function (data) {
                     success: function (data) {
-                        $.each(data, function (key, value) {
-                            addOptionToSelectControl(selectControl, key, value);
-                        });
+                        for (var key in data) {
+                            addOptionToSelectControl(selectControl, key, data[key]);
+                        }
+                        sortSelectControl(selectControl);
                     }
                     }
                 });
                 });
             },
             },
@@ -373,6 +384,7 @@
                 for (var key in variableValues) {
                 for (var key in variableValues) {
                     addOptionToSelectControl(selectControl, key, variableValues[key]);
                     addOptionToSelectControl(selectControl, key, variableValues[key]);
                 }
                 }
+                sortSelectControl(selectControl);
             }
             }
         };
         };