bootstrap-table-rails 1.8.2.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,182 @@
1
+ /**
2
+ * @author: Dennis Hernández
3
+ * @webSite: http://djhvscf.github.io/Blog
4
+ * @version: v1.0.0
5
+ */
6
+
7
+ !function ($) {
8
+
9
+ 'use strict';
10
+
11
+ var diacriticsMap = {};
12
+ var defaultAccentsDiacritics = [
13
+ {'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
14
+ {'base':'AA','letters':'\uA732'},
15
+ {'base':'AE','letters':'\u00C6\u01FC\u01E2'},
16
+ {'base':'AO','letters':'\uA734'},
17
+ {'base':'AU','letters':'\uA736'},
18
+ {'base':'AV','letters':'\uA738\uA73A'},
19
+ {'base':'AY','letters':'\uA73C'},
20
+ {'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'},
21
+ {'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'},
22
+ {'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'},
23
+ {'base':'DZ','letters':'\u01F1\u01C4'},
24
+ {'base':'Dz','letters':'\u01F2\u01C5'},
25
+ {'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'},
26
+ {'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'},
27
+ {'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'},
28
+ {'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'},
29
+ {'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'},
30
+ {'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'},
31
+ {'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'},
32
+ {'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'},
33
+ {'base':'LJ','letters':'\u01C7'},
34
+ {'base':'Lj','letters':'\u01C8'},
35
+ {'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'},
36
+ {'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'},
37
+ {'base':'NJ','letters':'\u01CA'},
38
+ {'base':'Nj','letters':'\u01CB'},
39
+ {'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'},
40
+ {'base':'OI','letters':'\u01A2'},
41
+ {'base':'OO','letters':'\uA74E'},
42
+ {'base':'OU','letters':'\u0222'},
43
+ {'base':'OE','letters':'\u008C\u0152'},
44
+ {'base':'oe','letters':'\u009C\u0153'},
45
+ {'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'},
46
+ {'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'},
47
+ {'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'},
48
+ {'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'},
49
+ {'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'},
50
+ {'base':'TZ','letters':'\uA728'},
51
+ {'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'},
52
+ {'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'},
53
+ {'base':'VY','letters':'\uA760'},
54
+ {'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'},
55
+ {'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'},
56
+ {'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'},
57
+ {'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'},
58
+ {'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'},
59
+ {'base':'aa','letters':'\uA733'},
60
+ {'base':'ae','letters':'\u00E6\u01FD\u01E3'},
61
+ {'base':'ao','letters':'\uA735'},
62
+ {'base':'au','letters':'\uA737'},
63
+ {'base':'av','letters':'\uA739\uA73B'},
64
+ {'base':'ay','letters':'\uA73D'},
65
+ {'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'},
66
+ {'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'},
67
+ {'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'},
68
+ {'base':'dz','letters':'\u01F3\u01C6'},
69
+ {'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'},
70
+ {'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'},
71
+ {'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'},
72
+ {'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'},
73
+ {'base':'hv','letters':'\u0195'},
74
+ {'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'},
75
+ {'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'},
76
+ {'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'},
77
+ {'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'},
78
+ {'base':'lj','letters':'\u01C9'},
79
+ {'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'},
80
+ {'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'},
81
+ {'base':'nj','letters':'\u01CC'},
82
+ {'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'},
83
+ {'base':'oi','letters':'\u01A3'},
84
+ {'base':'ou','letters':'\u0223'},
85
+ {'base':'oo','letters':'\uA74F'},
86
+ {'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'},
87
+ {'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'},
88
+ {'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'},
89
+ {'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'},
90
+ {'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'},
91
+ {'base':'tz','letters':'\uA729'},
92
+ {'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'},
93
+ {'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'},
94
+ {'base':'vy','letters':'\uA761'},
95
+ {'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'},
96
+ {'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'},
97
+ {'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'},
98
+ {'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
99
+ ];
100
+
101
+ var initNeutraliser = function () {
102
+ for (var i=0; i < defaultAccentsDiacritics.length; i++){
103
+ var letters = defaultAccentsDiacritics[i].letters;
104
+ for (var j=0; j < letters.length ; j++){
105
+ diacriticsMap[letters[j]] = defaultAccentsDiacritics[i].base;
106
+ }
107
+ }
108
+ };
109
+
110
+ var removeDiacritics = function (str) {
111
+ return str.replace(/[^\u0000-\u007E]/g, function(a){
112
+ return diacriticsMap[a] || a;
113
+ });
114
+ };
115
+
116
+ $.extend($.fn.bootstrapTable.defaults, {
117
+ searchAccentNeutralise: false
118
+ });
119
+
120
+ var BootstrapTable = $.fn.bootstrapTable.Constructor,
121
+ _init = BootstrapTable.prototype.init,
122
+ _initSearch = BootstrapTable.prototype.initSearch;
123
+
124
+ BootstrapTable.prototype.init = function () {
125
+ if (this.options.searchAccentNeutralise) {
126
+ initNeutraliser();
127
+ }
128
+ _init.apply(this, Array.prototype.slice.apply(arguments));
129
+ };
130
+
131
+ BootstrapTable.prototype.initSearch = function () {
132
+ var that = this;
133
+
134
+ if (this.options.sidePagination !== 'server') {
135
+ var s = this.searchText && this.searchText.toLowerCase();
136
+ var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;
137
+
138
+ // Check filter
139
+ this.data = f ? $.grep(this.options.data, function (item, i) {
140
+ for (var key in f) {
141
+ if (item[key] !== f[key]) {
142
+ return false;
143
+ }
144
+ }
145
+ return true;
146
+ }) : this.options.data;
147
+
148
+ this.data = s ? $.grep(this.data, function (item, i) {
149
+ for (var key in item) {
150
+ key = $.isNumeric(key) ? parseInt(key, 10) : key;
151
+ var value = item[key],
152
+ column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)],
153
+ j = $.inArray(key, that.header.fields);
154
+
155
+ if (column && column.searchFormatter) {
156
+ value = $.fn.bootstrapTable.utils.calculateObjectValue(column,
157
+ that.header.formatters[j], [value, item, i], value);
158
+ }
159
+
160
+ var index = $.inArray(key, that.header.fields);
161
+ if (index !== -1 && that.header.searchables[index] && (typeof value === 'string' || typeof value === 'number')) {
162
+ if (that.options.searchAccentNeutralise) {
163
+ value = removeDiacritics(value);
164
+ s = removeDiacritics(s);
165
+ }
166
+ if (that.options.strictSearch) {
167
+ if ((value + '').toLowerCase() === s) {
168
+ return true;
169
+ }
170
+ } else {
171
+ if ((value + '').toLowerCase().indexOf(s) !== -1) {
172
+ return true;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ return false;
178
+ }) : this.data;
179
+ }
180
+ };
181
+
182
+ }(jQuery);
@@ -41,12 +41,25 @@
41
41
  return !!(navigator.cookieEnabled);
42
42
  };
43
43
 
44
+ var inArrayCookiesEnabled = function (cookieName, cookiesEnabled) {
45
+ var index = -1;
46
+
47
+ for (var i = 0; i < cookiesEnabled.length; i++) {
48
+ if (cookieName.toLowerCase() === cookiesEnabled[i].toLowerCase()) {
49
+ index = i;
50
+ break;
51
+ }
52
+ }
53
+
54
+ return index;
55
+ };
56
+
44
57
  var setCookie = function (that, cookieName, cookieValue) {
45
58
  if ((!that.options.cookie) || (!cookieEnabled()) || (that.options.cookieIdTable === '')) {
46
59
  return;
47
60
  }
48
61
 
49
- if ($.inArray(cookieName.toLowerCase(), that.options.cookiesEnabled) === -1) {
62
+ if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
50
63
  return;
51
64
  }
52
65
 
@@ -64,7 +77,7 @@
64
77
  return null;
65
78
  }
66
79
 
67
- if ($.inArray(cookieName.toLowerCase(), that.options.cookiesEnabled) === -1) {
80
+ if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
68
81
  return null;
69
82
  }
70
83
 
@@ -243,7 +256,7 @@
243
256
 
244
257
  if (columnsCookie) {
245
258
  $.each(this.columns, function (i, column) {
246
- column.visible = columnsCookie.indexOf(column.field) !== -1;
259
+ column.visible = $.inArray(column.field, columnsCookie) !== -1;
247
260
  });
248
261
  }
249
262
  };
@@ -18,7 +18,7 @@
18
18
  onEditableShown: function (field, row, $el, editable) {
19
19
  return false;
20
20
  },
21
- onEditableHidden: function (field, row, $el) {
21
+ onEditableHidden: function (field, row, $el, reason) {
22
22
  return false;
23
23
  }
24
24
  });
@@ -85,20 +85,20 @@
85
85
  that.trigger('editable-save', column.field, row, oldValue, $(this));
86
86
  });
87
87
  that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
88
- .off('shown').on('shown', function (e) {
88
+ .off('shown').on('shown', function (e, editable) {
89
89
  var data = that.getData(),
90
90
  index = $(this).parents('tr[data-index]').data('index'),
91
91
  row = data[index];
92
92
 
93
- that.trigger('editable-shown', column.field, row, $(this));
93
+ that.trigger('editable-shown', column.field, row, $(this), editable);
94
94
  });
95
95
  that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
96
- .off('hidden').on('hidden', function (e, editable) {
96
+ .off('hidden').on('hidden', function (e, reason) {
97
97
  var data = that.getData(),
98
98
  index = $(this).parents('tr[data-index]').data('index'),
99
99
  row = data[index];
100
100
 
101
- that.trigger('editable-hidden', column.field, row, $(this), editable);
101
+ that.trigger('editable-hidden', column.field, row, $(this), reason);
102
102
  });
103
103
  });
104
104
  this.trigger('editable-init');
@@ -84,8 +84,11 @@
84
84
 
85
85
  if (that.options.exportDataType === 'all' && that.options.pagination) {
86
86
  that.togglePagination();
87
- doExport();
88
- that.togglePagination();
87
+ that.$el.on('load-success.bs.table', function () {
88
+ doExport();
89
+ that.$el.off('load-success.bs.table');
90
+ that.togglePagination();
91
+ });
89
92
  } else if (that.options.exportDataType === 'selected') {
90
93
  var data = that.getData(),
91
94
  selectedData = that.getAllSelections();
@@ -8,61 +8,10 @@
8
8
 
9
9
  'use strict';
10
10
 
11
- var sprintf = function (str) {
12
- var args = arguments,
13
- flag = true,
14
- i = 1;
15
-
16
- str = str.replace(/%s/g, function () {
17
- var arg = args[i++];
18
-
19
- if (typeof arg === 'undefined') {
20
- flag = false;
21
- return '';
22
- }
23
- return arg;
24
- });
25
- return flag ? str : '';
26
- };
27
-
28
- var getFieldIndex = function (columns, field) {
29
- var index = -1;
30
-
31
- $.each(columns, function (i, column) {
32
- if (column.field === field) {
33
- index = i;
34
- return false;
35
- }
36
- return true;
37
- });
38
- return index;
39
- };
40
-
41
- var calculateObjectValue = function (self, name, args, defaultValue) {
42
- if (typeof name === 'string') {
43
- // support obj.func1.func2
44
- var names = name.split('.');
45
-
46
- if (names.length > 1) {
47
- name = window;
48
- $.each(names, function (i, f) {
49
- name = name[f];
50
- });
51
- } else {
52
- name = window[name];
53
- }
54
- }
55
- if (typeof name === 'object') {
56
- return name;
57
- }
58
- if (typeof name === 'function') {
59
- return name.apply(self, args);
60
- }
61
- return defaultValue;
62
- };
11
+ var sprintf = $.fn.bootstrapTable.utils.sprintf;
63
12
 
64
13
  var addOptionToSelectControl = function (selectControl, value, text) {
65
- //selectControl = $(selectControl.get(0));
14
+ selectControl = $(selectControl.get(selectControl.length - 1));
66
15
  if (existsOptionInSelectControl(selectControl, value)) {
67
16
  selectControl.append($("<option></option>")
68
17
  .attr("value", value)
@@ -87,11 +36,9 @@
87
36
  };
88
37
 
89
38
  var existsOptionInSelectControl = function (selectControl, value) {
90
- var options = selectControl.get(0).options,
91
- iOpt = 0;
92
-
93
- for (; iOpt < options.length; iOpt++) {
94
- if (options[iOpt].value === value) {
39
+ var options = selectControl.get(selectControl.length - 1).options;
40
+ for (var i = 0; i < options.length; i++) {
41
+ if (options[i].value === value.toString()) {
95
42
  //The value is nor valid to add
96
43
  return false;
97
44
  }
@@ -246,6 +193,26 @@
246
193
  }, that.options.searchTimeOut);
247
194
  });
248
195
 
196
+ header.off('mouseup', 'input').on('mouseup', 'input', function (event) {
197
+ var $input = $(this),
198
+ oldValue = $input.val();
199
+
200
+ if (oldValue === "") {
201
+ return;
202
+ }
203
+
204
+ setTimeout(function(){
205
+ var newValue = $input.val();
206
+
207
+ if (newValue === "") {
208
+ clearTimeout(timeoutId);
209
+ timeoutId = setTimeout(function () {
210
+ that.onColumnSearch(event);
211
+ }, that.options.searchTimeOut);
212
+ }
213
+ }, 1);
214
+ });
215
+
249
216
  if (header.find('.date-filter-control').length > 0) {
250
217
  $.each(that.columns, function (i, column) {
251
218
  if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'datepicker') {
@@ -275,7 +242,8 @@
275
242
  $.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
276
243
  filterControl: undefined,
277
244
  filterData: undefined,
278
- filterDatepickerOptions: undefined
245
+ filterDatepickerOptions: undefined,
246
+ filterStrictSearch: false
279
247
  });
280
248
 
281
249
  $.extend($.fn.bootstrapTable.Constructor.EVENTS, {
@@ -366,16 +334,16 @@
366
334
 
367
335
  $.each(this.header.fields, function (j, field) {
368
336
  var value = item[field],
369
- column = that.columns[getFieldIndex(that.columns, field)];
337
+ column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)];
370
338
 
371
- value = calculateObjectValue(that.header, that.header.formatters[j], [value, item, i], value);
339
+ value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header, that.header.formatters[j], [value, item, i], value);
372
340
 
373
341
  if ((!column.checkbox) || (!column.radio)) {
374
342
  if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'select' && column.searchable) {
375
343
  if (column.filterData === undefined || column.filterData.toLowerCase() === 'column') {
376
344
  var selectControl = $('.' + column.field);
377
345
  if (selectControl !== undefined && selectControl.length > 0) {
378
- if (selectControl.get(0).options.length === 0) {
346
+ if (selectControl.get(selectControl.length - 1).options.length === 0) {
379
347
  //Added the default option
380
348
  addOptionToSelectControl(selectControl, '', '');
381
349
  }
@@ -399,17 +367,27 @@
399
367
  //Check partial column filter
400
368
  this.data = fp ? $.grep(this.data, function (item, i) {
401
369
  for (var key in fp) {
370
+ var thisColumn = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)];
402
371
  var fval = fp[key].toLowerCase();
403
372
  var value = item[key];
404
- value = calculateObjectValue(that.header,
373
+ value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header,
405
374
  that.header.formatters[$.inArray(key, that.header.fields)],
406
375
  [value, item, i], value);
407
376
 
408
- if (!($.inArray(key, that.header.fields) !== -1 &&
409
- (typeof value === 'string' || typeof value === 'number') &&
410
- (value + '').toLowerCase().indexOf(fval) !== -1)) {
411
- return false;
377
+ if(thisColumn.filterStrictSearch===true){
378
+ if (!($.inArray(key, that.header.fields) !== -1 &&
379
+ (typeof value === 'string' || typeof value === 'number') &&
380
+ value.toLowerCase() === fval.toLowerCase())) {
381
+ return false;
382
+ }
412
383
  }
384
+ else{
385
+ if (!($.inArray(key, that.header.fields) !== -1 &&
386
+ (typeof value === 'string' || typeof value === 'number') &&
387
+ (value + '').toLowerCase().indexOf(fval) !== -1)) {
388
+ return false;
389
+ }
390
+ };
413
391
  }
414
392
  return true;
415
393
  }) : this.data;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @author: Dennis Hernández
3
3
  * @webSite: http://djhvscf.github.io/Blog
4
- * @version: v1.0.0
4
+ * @version: v1.1.0
5
5
  */
6
6
 
7
7
  !function ($) {
@@ -14,19 +14,6 @@
14
14
  obj = {},
15
15
  parentId = undefined;
16
16
 
17
- var getFieldIndex = function (columns, field) {
18
- var index = -1;
19
-
20
- $.each(columns, function (i, column) {
21
- if (column.field === field) {
22
- index = i;
23
- return false;
24
- }
25
- return true;
26
- });
27
- return index;
28
- };
29
-
30
17
  var getParentRowId = function (that, id) {
31
18
  var parentRows = that.$body.find('tr').not('[' + 'data-tt-parent-id]');
32
19
 
@@ -42,10 +29,10 @@
42
29
  var sumData = function (that, data) {
43
30
  var sumRow = {};
44
31
  $.each(data, function (i, row) {
45
- for(var prop in row) {
46
- if (!row.IsParent) {
32
+ if (!row.IsParent) {
33
+ for (var prop in row) {
47
34
  if (!isNaN(parseFloat(row[prop]))) {
48
- if (that.columns[getFieldIndex(that.columns, prop)].groupBySumGroup) {
35
+ if (that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, prop)].groupBySumGroup) {
49
36
  if (sumRow[prop] === undefined) {
50
37
  sumRow[prop] = 0;
51
38
  }
@@ -76,53 +63,69 @@
76
63
 
77
64
  var setObjectKeys = function () {
78
65
  // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
79
- Object.keys = function (o) {
80
- if (o !== Object(o)) {
81
- throw new TypeError('Object.keys called on a non-object');
82
- }
83
- var k = [],
84
- p;
85
- for (p in o) {
86
- if (Object.prototype.hasOwnProperty.call(o, p)) {
87
- k.push(p);
88
- }
89
- }
90
- return k;
91
- }
66
+ Object.keys = function (o) {
67
+ if (o !== Object(o)) {
68
+ throw new TypeError('Object.keys called on a non-object');
69
+ }
70
+ var k = [],
71
+ p;
72
+ for (p in o) {
73
+ if (Object.prototype.hasOwnProperty.call(o, p)) {
74
+ k.push(p);
75
+ }
76
+ }
77
+ return k;
78
+ }
79
+ };
80
+
81
+ var getDataArrayFromItem = function (that, item) {
82
+ var itemDataArray = [];
83
+ for (var i = 0; i < that.options.groupByField.length; i++) {
84
+ itemDataArray.push(item[that.options.groupByField[i]]);
85
+ }
86
+
87
+ return itemDataArray;
92
88
  };
93
89
 
94
- var groupBy = function (array , f) {
95
- var groups = {};
96
- $.each(array, function(i, o) {
97
- var group = JSON.stringify(f(o));
98
- groups[group] = groups[group] || [];
99
- groups[group].push(o);
100
- });
101
- return Object.keys(groups).map(function (group) {
90
+ var getNewRow = function (that, result, index) {
91
+ var newRow = {};
92
+ for (var i = 0; i < that.options.groupByField.length; i++) {
93
+ newRow[that.options.groupByField[i].toString()] = result[index][0][that.options.groupByField[i]];
94
+ }
95
+
96
+ newRow.IsParent = true;
97
+
98
+ return newRow;
99
+ };
100
+
101
+ var groupBy = function (array, f) {
102
+ var groups = {};
103
+ $.each(array, function (i, o) {
104
+ var group = JSON.stringify(f(o));
105
+ groups[group] = groups[group] || [];
106
+ groups[group].push(o);
107
+ });
108
+ return Object.keys(groups).map(function (group) {
102
109
  return groups[group];
103
- });
110
+ });
104
111
  };
105
112
 
106
113
  var makeGrouped = function (that, data) {
107
- var newRow = {},
108
- newData = [],
114
+ var newData = [],
109
115
  sumRow = {};
110
116
 
111
117
  var result = groupBy(data, function (item) {
112
- return [item[that.options.groupByField]];
118
+ return getDataArrayFromItem(that, item);
113
119
  });
114
120
 
115
121
  for (var i = 0; i < result.length; i++) {
116
- newRow[that.options.groupByField.toString()] = result[i][0][that.options.groupByField];
117
- newRow.IsParent = true;
118
- result[i].unshift(newRow);
122
+ result[i].unshift(getNewRow(that, result, i));
119
123
  if (that.options.groupBySumGroup) {
120
- sumRow = sumData(that, result[i])
124
+ sumRow = sumData(that, result[i]);
121
125
  if (!$.isEmptyObject(sumRow)) {
122
126
  result[i].push(sumRow);
123
127
  }
124
128
  }
125
- newRow = {};
126
129
  }
127
130
 
128
131
  newData = newData.concat.apply(newData, result);
@@ -138,7 +141,7 @@
138
141
 
139
142
  $.extend($.fn.bootstrapTable.defaults, {
140
143
  groupBy: false,
141
- groupByField: '',
144
+ groupByField: [],
142
145
  groupBySumGroup: false,
143
146
  groupByInitExpanded: undefined, //node, 'all'
144
147
  //internal variables
@@ -146,7 +149,7 @@
146
149
  originalData: undefined
147
150
  });
148
151
 
149
- $.fn.bootstrapTable.methods.push('collapseAll', 'expandAll');
152
+ $.fn.bootstrapTable.methods.push('collapseAll', 'expandAll', 'refreshGroupByField');
150
153
 
151
154
  $.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
152
155
  groupBySumGroup: false
@@ -159,7 +162,7 @@
159
162
  BootstrapTable.prototype.init = function () {
160
163
  //Temporal validation
161
164
  if (!this.options.sortName) {
162
- if ((this.options.groupBy) && (this.options.groupByField !== '')) {
165
+ if ((this.options.groupBy) && (this.options.groupByField.length > 0)) {
163
166
  var that = this;
164
167
 
165
168
  // Compatibility: IE < 9 and old browsers
@@ -204,7 +207,12 @@
204
207
  BootstrapTable.prototype.initData = function (data, type) {
205
208
  //Temporal validation
206
209
  if (!this.options.sortName) {
207
- if ((this.options.groupBy) && (this.options.groupByField !== '')) {
210
+ if ((this.options.groupBy) && (this.options.groupByField.length > 0)) {
211
+
212
+ this.options.groupByField = typeof this.options.groupByField === 'string' ?
213
+ this.options.groupByField.replace('[', '').replace(']', '')
214
+ .replace(/ /g, '').toLowerCase().split(',') : this.options.groupByField;
215
+
208
216
  data = makeGrouped(this, data ? data : this.options.data);
209
217
  }
210
218
  }
@@ -224,5 +232,12 @@
224
232
  if (id !== undefined) {
225
233
  this.$el.treetable('expandNode', id);
226
234
  }
227
- }
235
+ };
236
+
237
+ BootstrapTable.prototype.refreshGroupByField = function (groupByFields) {
238
+ if (!$.fn.bootstrapTable.utils.compareObjects(this.options.groupByField, groupByFields)) {
239
+ this.options.groupByField = groupByFields;
240
+ this.load(this.options.originalData);
241
+ }
242
+ };
228
243
  }(jQuery);