bootstrap-table-rails 1.11.0 → 1.11.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -4
  3. data/lib/bootstrap-table-rails/version.rb +1 -1
  4. data/vendor/assets/images/icon.png +0 -0
  5. data/vendor/assets/javascripts/bootstrap-table.js +300 -225
  6. data/vendor/assets/javascripts/extensions/bootstrap-table-accent-neutralise.js +0 -0
  7. data/vendor/assets/javascripts/extensions/bootstrap-table-angular.js +0 -0
  8. data/vendor/assets/javascripts/extensions/bootstrap-table-auto-refresh.js +84 -0
  9. data/vendor/assets/javascripts/extensions/bootstrap-table-click-edit-row.js +142 -0
  10. data/vendor/assets/javascripts/extensions/bootstrap-table-cookie.js +78 -36
  11. data/vendor/assets/javascripts/extensions/bootstrap-table-copy-rows.js +0 -0
  12. data/vendor/assets/javascripts/extensions/bootstrap-table-editable.js +0 -0
  13. data/vendor/assets/javascripts/extensions/bootstrap-table-export.js +12 -2
  14. data/vendor/assets/javascripts/extensions/bootstrap-table-filter-control.js +36 -11
  15. data/vendor/assets/javascripts/extensions/bootstrap-table-filter.js +0 -0
  16. data/vendor/assets/javascripts/extensions/bootstrap-table-flat-json.js +0 -0
  17. data/vendor/assets/javascripts/extensions/{bootstrap-table-group-by 2.js → bootstrap-table-group-by-v2.js} +0 -0
  18. data/vendor/assets/javascripts/extensions/bootstrap-table-group-by.js +0 -0
  19. data/vendor/assets/javascripts/extensions/bootstrap-table-i18n-enhance.js +0 -0
  20. data/vendor/assets/javascripts/extensions/bootstrap-table-key-events.js +0 -0
  21. data/vendor/assets/javascripts/extensions/bootstrap-table-mobile.js +0 -0
  22. data/vendor/assets/javascripts/extensions/bootstrap-table-multi-toggle.js +0 -0
  23. data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-search.js +0 -0
  24. data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-selection-row.js +127 -0
  25. data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-sort.js +1 -1
  26. data/vendor/assets/javascripts/extensions/bootstrap-table-natural-sorting.js +0 -0
  27. data/vendor/assets/javascripts/extensions/bootstrap-table-print.js +133 -0
  28. data/vendor/assets/javascripts/extensions/bootstrap-table-reorder-columns.js +4 -0
  29. data/vendor/assets/javascripts/extensions/bootstrap-table-reorder-rows.js +6 -4
  30. data/vendor/assets/javascripts/extensions/bootstrap-table-resizable.js +0 -0
  31. data/vendor/assets/javascripts/extensions/bootstrap-table-select2-filter.js +0 -0
  32. data/vendor/assets/javascripts/extensions/bootstrap-table-sticky-header.js +0 -0
  33. data/vendor/assets/javascripts/extensions/bootstrap-table-toolbar.js +2 -2
  34. data/vendor/assets/javascripts/extensions/bootstrap-table-tree-column.js +130 -0
  35. data/vendor/assets/javascripts/locale/README.md +179 -0
  36. data/vendor/assets/javascripts/locale/bootstrap-table-af-ZA.js +0 -0
  37. data/vendor/assets/javascripts/locale/bootstrap-table-ar-SA.js +0 -0
  38. data/vendor/assets/javascripts/locale/bootstrap-table-ca-ES.js +0 -0
  39. data/vendor/assets/javascripts/locale/bootstrap-table-cs-CZ.js +0 -0
  40. data/vendor/assets/javascripts/locale/bootstrap-table-da-DK.js +0 -0
  41. data/vendor/assets/javascripts/locale/bootstrap-table-de-DE.js +10 -4
  42. data/vendor/assets/javascripts/locale/bootstrap-table-el-GR.js +0 -0
  43. data/vendor/assets/javascripts/locale/bootstrap-table-en-US.js +0 -0
  44. data/vendor/assets/javascripts/locale/bootstrap-table-en-US.js.template +49 -0
  45. data/vendor/assets/javascripts/locale/bootstrap-table-es-AR.js +0 -0
  46. data/vendor/assets/javascripts/locale/bootstrap-table-es-CL.js +44 -0
  47. data/vendor/assets/javascripts/locale/bootstrap-table-es-CR.js +0 -0
  48. data/vendor/assets/javascripts/locale/bootstrap-table-es-ES.js +0 -0
  49. data/vendor/assets/javascripts/locale/bootstrap-table-es-MX.js +0 -0
  50. data/vendor/assets/javascripts/locale/bootstrap-table-es-NI.js +0 -0
  51. data/vendor/assets/javascripts/locale/bootstrap-table-es-SP.js +0 -0
  52. data/vendor/assets/javascripts/locale/bootstrap-table-et-EE.js +0 -0
  53. data/vendor/assets/javascripts/locale/bootstrap-table-fa-IR.js +0 -0
  54. data/vendor/assets/javascripts/locale/bootstrap-table-fr-BE.js +0 -0
  55. data/vendor/assets/javascripts/locale/bootstrap-table-fr-FR.js +0 -0
  56. data/vendor/assets/javascripts/locale/bootstrap-table-he-IL.js +0 -0
  57. data/vendor/assets/javascripts/locale/bootstrap-table-hr-HR.js +0 -0
  58. data/vendor/assets/javascripts/locale/bootstrap-table-hu-HU.js +0 -0
  59. data/vendor/assets/javascripts/locale/bootstrap-table-id-ID.js +49 -0
  60. data/vendor/assets/javascripts/locale/bootstrap-table-it-IT.js +12 -2
  61. data/vendor/assets/javascripts/locale/bootstrap-table-ja-JP.js +0 -0
  62. data/vendor/assets/javascripts/locale/bootstrap-table-ka-GE.js +0 -0
  63. data/vendor/assets/javascripts/locale/bootstrap-table-ko-KR.js +0 -0
  64. data/vendor/assets/javascripts/locale/bootstrap-table-ms-MY.js +0 -0
  65. data/vendor/assets/javascripts/locale/bootstrap-table-nb-NO.js +0 -0
  66. data/vendor/assets/javascripts/locale/bootstrap-table-nl-NL.js +0 -0
  67. data/vendor/assets/javascripts/locale/bootstrap-table-pl-PL.js +0 -0
  68. data/vendor/assets/javascripts/locale/bootstrap-table-pt-BR.js +0 -0
  69. data/vendor/assets/javascripts/locale/bootstrap-table-pt-PT.js +0 -0
  70. data/vendor/assets/javascripts/locale/bootstrap-table-ro-RO.js +0 -0
  71. data/vendor/assets/javascripts/locale/bootstrap-table-ru-RU.js +33 -0
  72. data/vendor/assets/javascripts/locale/bootstrap-table-sk-SK.js +0 -0
  73. data/vendor/assets/javascripts/locale/bootstrap-table-sv-SE.js +0 -0
  74. data/vendor/assets/javascripts/locale/bootstrap-table-th-TH.js +0 -0
  75. data/vendor/assets/javascripts/locale/bootstrap-table-tr-TR.js +0 -0
  76. data/vendor/assets/javascripts/locale/bootstrap-table-uk-UA.js +36 -0
  77. data/vendor/assets/javascripts/locale/bootstrap-table-ur-PK.js +0 -0
  78. data/vendor/assets/javascripts/locale/bootstrap-table-uz-Latn-UZ.js +49 -0
  79. data/vendor/assets/javascripts/locale/bootstrap-table-vi-VN.js +0 -0
  80. data/vendor/assets/javascripts/locale/bootstrap-table-zh-CN.js +0 -0
  81. data/vendor/assets/javascripts/locale/bootstrap-table-zh-TW.js +0 -0
  82. data/vendor/assets/stylesheets/bootstrap-table.css +9 -5
  83. data/vendor/assets/stylesheets/extensions/bootstrap-table-auto-refresh.css +3 -0
  84. data/vendor/assets/stylesheets/extensions/bootstrap-table-click-edit-row.css +21 -0
  85. data/vendor/assets/stylesheets/extensions/bootstrap-table-filter-control.css +13 -0
  86. data/vendor/assets/stylesheets/extensions/{bootstrap-table-group-by 2.css → bootstrap-table-group-by-v2.css} +0 -0
  87. data/vendor/assets/stylesheets/extensions/bootstrap-table-group-by.css +0 -0
  88. data/vendor/assets/stylesheets/extensions/bootstrap-table-multiple-selection-row.css +17 -0
  89. data/vendor/assets/stylesheets/extensions/bootstrap-table-reorder-rows.css +0 -0
  90. data/vendor/assets/stylesheets/extensions/bootstrap-table-sticky-header.css +0 -0
  91. data/vendor/assets/stylesheets/extensions/bootstrap-table-tree-column.css +1 -0
  92. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c05b4195ad766c3b26f0f2485f0b973862ef2728
4
- data.tar.gz: 25a78fa1c75f7eef2d54392fd72d1414353ed683
3
+ metadata.gz: 178cc246caf26c90aa810577dfd6766f427a8bd5
4
+ data.tar.gz: 92f4035d61f532fe493fbc82c57945bd0b9a127b
5
5
  SHA512:
6
- metadata.gz: 039327619e54a229bc6ea5841c8709c6119cfaf394f3af7e080373605e33fa21b5934406f2886ff0ac326650522f670529f05af389a59432c0fa56a32ea88fae
7
- data.tar.gz: 3c06f123c2e71d448bce802383704186a118147215cd30ce2fe5da2747ec5ce1e56b2a61e82317c18c2b6dd19177a579e4d49ff26b6b1d57eaa814c2463c18a6
6
+ metadata.gz: 7fb78f807132c4f1aec587921f16deacf771fb2d20ef815247bcb51f32e3ce6fcdb3a56a452905928119efc39b8ca5cbbe1ba76ca863fad49b6bab69a4e7bb55
7
+ data.tar.gz: 11a070cfdadf4005392abb30caadc247793f53f70c322263a9a30a7b44c987d9c14506a60fe70edb22907ed23d02a228cd4ede3b4f23b0d84f7d3ffe0f4e7f54
data/README.md CHANGED
@@ -34,31 +34,43 @@ Dir tree:
34
34
  ``` tree
35
35
  vendor/
36
36
  └── assets
37
+ ├── images
38
+ │   └── icon.png
37
39
  ├── javascripts
38
40
  │   ├── bootstrap-table-locale-all.js
39
41
  │   ├── bootstrap-table.js
40
42
  │   ├── extensions
41
43
  │   │   ├── bootstrap-table-accent-neutralise.js
42
44
  │   │   ├── bootstrap-table-angular.js
45
+ │   │   ├── bootstrap-table-auto-refresh.js
46
+ │   │   ├── bootstrap-table-click-edit-row.js
43
47
  │   │   ├── bootstrap-table-cookie.js
48
+ │   │   ├── bootstrap-table-copy-rows.js
44
49
  │   │   ├── bootstrap-table-editable.js
45
50
  │   │   ├── bootstrap-table-export.js
46
51
  │   │   ├── bootstrap-table-filter-control.js
47
52
  │   │   ├── bootstrap-table-filter.js
48
53
  │   │   ├── bootstrap-table-flat-json.js
49
- │   │   ├── bootstrap-table-group-by\ 2.js
54
+ │   │   ├── bootstrap-table-group-by-v2.js
50
55
  │   │   ├── bootstrap-table-group-by.js
56
+ │   │   ├── bootstrap-table-i18n-enhance.js
51
57
  │   │   ├── bootstrap-table-key-events.js
52
58
  │   │   ├── bootstrap-table-mobile.js
59
+ │   │   ├── bootstrap-table-multi-toggle.js
53
60
  │   │   ├── bootstrap-table-multiple-search.js
61
+ │   │   ├── bootstrap-table-multiple-selection-row.js
54
62
  │   │   ├── bootstrap-table-multiple-sort.js
55
63
  │   │   ├── bootstrap-table-natural-sorting.js
64
+ │   │   ├── bootstrap-table-print.js
56
65
  │   │   ├── bootstrap-table-reorder-columns.js
57
66
  │   │   ├── bootstrap-table-reorder-rows.js
58
67
  │   │   ├── bootstrap-table-resizable.js
68
+ │   │   ├── bootstrap-table-select2-filter.js
59
69
  │   │   ├── bootstrap-table-sticky-header.js
60
- │   │   └── bootstrap-table-toolbar.js
70
+ │   │   ├── bootstrap-table-toolbar.js
71
+ │   │   └── bootstrap-table-tree-column.js
61
72
  │   └── locale
73
+ │   ├── README.md
62
74
  │   ├── bootstrap-table-af-ZA.js
63
75
  │   ├── bootstrap-table-ar-SA.js
64
76
  │   ├── bootstrap-table-ca-ES.js
@@ -67,7 +79,9 @@ vendor/
67
79
  │   ├── bootstrap-table-de-DE.js
68
80
  │   ├── bootstrap-table-el-GR.js
69
81
  │   ├── bootstrap-table-en-US.js
82
+ │   ├── bootstrap-table-en-US.js.template
70
83
  │   ├── bootstrap-table-es-AR.js
84
+ │   ├── bootstrap-table-es-CL.js
71
85
  │   ├── bootstrap-table-es-CR.js
72
86
  │   ├── bootstrap-table-es-ES.js
73
87
  │   ├── bootstrap-table-es-MX.js
@@ -80,6 +94,7 @@ vendor/
80
94
  │   ├── bootstrap-table-he-IL.js
81
95
  │   ├── bootstrap-table-hr-HR.js
82
96
  │   ├── bootstrap-table-hu-HU.js
97
+ │   ├── bootstrap-table-id-ID.js
83
98
  │   ├── bootstrap-table-it-IT.js
84
99
  │   ├── bootstrap-table-ja-JP.js
85
100
  │   ├── bootstrap-table-ka-GE.js
@@ -98,16 +113,22 @@ vendor/
98
113
  │   ├── bootstrap-table-tr-TR.js
99
114
  │   ├── bootstrap-table-uk-UA.js
100
115
  │   ├── bootstrap-table-ur-PK.js
116
+ │   ├── bootstrap-table-uz-Latn-UZ.js
101
117
  │   ├── bootstrap-table-vi-VN.js
102
118
  │   ├── bootstrap-table-zh-CN.js
103
119
  │   └── bootstrap-table-zh-TW.js
104
120
  └── stylesheets
105
121
  ├── bootstrap-table.css
106
122
  └── extensions
107
- ├── bootstrap-table-group-by\ 2.css
123
+ ├── bootstrap-table-auto-refresh.css
124
+ ├── bootstrap-table-click-edit-row.css
125
+ ├── bootstrap-table-filter-control.css
126
+ ├── bootstrap-table-group-by-v2.css
108
127
  ├── bootstrap-table-group-by.css
128
+ ├── bootstrap-table-multiple-selection-row.css
109
129
  ├── bootstrap-table-reorder-rows.css
110
- └── bootstrap-table-sticky-header.css
130
+ ├── bootstrap-table-sticky-header.css
131
+ └── bootstrap-table-tree-column.css
111
132
  ```
112
133
 
113
134
 
@@ -1,7 +1,7 @@
1
1
  module Bootstrap
2
2
  module Table
3
3
  module Rails
4
- VERSION = "1.11.0"
4
+ VERSION = "1.11.1.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @author zhixin wen <wenzhixin2010@gmail.com>
3
- * version: 1.11.0
3
+ * version: 1.11.1
4
4
  * https://github.com/wenzhixin/bootstrap-table/
5
5
  */
6
6
 
@@ -140,7 +140,7 @@
140
140
  return func;
141
141
  }
142
142
  if (typeof func === 'function') {
143
- return func.apply(self, args);
143
+ return func.apply(self, args || []);
144
144
  }
145
145
  if (!func && typeof name === 'string' && sprintf.apply(this, [name].concat(args))) {
146
146
  return sprintf.apply(this, [name].concat(args));
@@ -190,16 +190,6 @@
190
190
  return text;
191
191
  };
192
192
 
193
- var getRealHeight = function ($el) {
194
- var height = 0;
195
- $el.children().each(function () {
196
- if (height < $(this).outerHeight(true)) {
197
- height = $(this).outerHeight(true);
198
- }
199
- });
200
- return height;
201
- };
202
-
203
193
  var getRealDataAttr = function (dataAttr) {
204
194
  for (var attr in dataAttr) {
205
195
  var auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase();
@@ -220,7 +210,9 @@
220
210
  }
221
211
  var props = field.split('.');
222
212
  for (var p in props) {
223
- value = value && value[props[p]];
213
+ if (props.hasOwnProperty(p)) {
214
+ value = value && value[props[p]];
215
+ }
224
216
  }
225
217
  return escape ? escapeHTML(value) : value;
226
218
  };
@@ -287,6 +279,7 @@
287
279
 
288
280
  BootstrapTable.DEFAULTS = {
289
281
  classes: 'table table-hover',
282
+ sortClass: undefined,
290
283
  locale: undefined,
291
284
  height: undefined,
292
285
  undefinedText: '-',
@@ -296,6 +289,7 @@
296
289
  striped: false,
297
290
  columns: [[]],
298
291
  data: [],
292
+ totalField: 'total',
299
293
  dataField: 'rows',
300
294
  method: 'get',
301
295
  url: undefined,
@@ -313,6 +307,7 @@
313
307
  },
314
308
  pagination: false,
315
309
  onlyInfoPagination: false,
310
+ paginationLoop: true,
316
311
  sidePagination: 'client', // client or server
317
312
  totalRows: 0, // server side need to set
318
313
  pageNumber: 1,
@@ -531,7 +526,8 @@
531
526
  cellStyle: undefined,
532
527
  searchable: true,
533
528
  searchFormatter: true,
534
- cardVisible: true
529
+ cardVisible: true,
530
+ escape : false
535
531
  };
536
532
 
537
533
  BootstrapTable.EVENTS = {
@@ -569,6 +565,7 @@
569
565
  this.initTable();
570
566
  this.initHeader();
571
567
  this.initData();
568
+ this.initHiddenRows();
572
569
  this.initFooter();
573
570
  this.initToolbar();
574
571
  this.initPagination();
@@ -814,13 +811,12 @@
814
811
  sprintf(' rowspan="%s"', column.rowspan),
815
812
  sprintf(' colspan="%s"', column.colspan),
816
813
  sprintf(' data-field="%s"', column.field),
817
- "tabindex='0'",
818
814
  '>');
819
815
 
820
816
  html.push(sprintf('<div class="th-inner %s">', that.options.sortable && column.sortable ?
821
817
  'sortable both' : ''));
822
818
 
823
- text = column.title;
819
+ text = that.options.escape ? escapeHTML(column.title) : column.title;
824
820
 
825
821
  if (column.checkbox) {
826
822
  if (!that.options.singleSelect && that.options.checkboxHeader) {
@@ -931,7 +927,8 @@
931
927
  var that = this,
932
928
  name = this.options.sortName,
933
929
  order = this.options.sortOrder === 'desc' ? -1 : 1,
934
- index = $.inArray(this.options.sortName, this.header.fields);
930
+ index = $.inArray(this.options.sortName, this.header.fields),
931
+ timeoutId = 0;
935
932
 
936
933
  if (this.options.customSort !== $.noop) {
937
934
  this.options.customSort.apply(this, [this.options.sortName, this.options.sortOrder]);
@@ -996,6 +993,17 @@
996
993
 
997
994
  return order;
998
995
  });
996
+
997
+ if (this.options.sortClass !== undefined) {
998
+ clearTimeout(timeoutId);
999
+ timeoutId = setTimeout(function () {
1000
+ that.$el.removeClass(that.options.sortClass);
1001
+ var index = that.$header.find(sprintf('[data-field="%s"]',
1002
+ that.options.sortName).index() + 1);
1003
+ that.$el.find(sprintf('tr td:nth-child(%s)', index))
1004
+ .addClass(that.options.sortClass);
1005
+ }, 250);
1006
+ }
999
1007
  }
1000
1008
  };
1001
1009
 
@@ -1058,7 +1066,7 @@
1058
1066
  html.push(sprintf('<button class="btn' +
1059
1067
  sprintf(' btn-%s', this.options.buttonsClass) +
1060
1068
  sprintf(' btn-%s', this.options.iconSize) +
1061
- '" type="button" name="paginationSwitch" title="%s">',
1069
+ '" type="button" name="paginationSwitch" aria-label="pagination Switch" title="%s">',
1062
1070
  this.options.formatPaginationSwitch()),
1063
1071
  sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.paginationSwitchDown),
1064
1072
  '</button>');
@@ -1068,7 +1076,7 @@
1068
1076
  html.push(sprintf('<button class="btn' +
1069
1077
  sprintf(' btn-%s', this.options.buttonsClass) +
1070
1078
  sprintf(' btn-%s', this.options.iconSize) +
1071
- '" type="button" name="refresh" title="%s">',
1079
+ '" type="button" name="refresh" aria-label="refresh" title="%s">',
1072
1080
  this.options.formatRefresh()),
1073
1081
  sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.refresh),
1074
1082
  '</button>');
@@ -1078,7 +1086,7 @@
1078
1086
  html.push(sprintf('<button class="btn' +
1079
1087
  sprintf(' btn-%s', this.options.buttonsClass) +
1080
1088
  sprintf(' btn-%s', this.options.iconSize) +
1081
- '" type="button" name="toggle" title="%s">',
1089
+ '" type="button" name="toggle" aria-label="toggle" title="%s">',
1082
1090
  this.options.formatToggle()),
1083
1091
  sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.toggle),
1084
1092
  '</button>');
@@ -1087,7 +1095,7 @@
1087
1095
  if (this.options.showColumns) {
1088
1096
  html.push(sprintf('<div class="keep-open btn-group" title="%s">',
1089
1097
  this.options.formatColumns()),
1090
- '<button type="button" class="btn' +
1098
+ '<button type="button" aria-label="columns" class="btn' +
1091
1099
  sprintf(' btn-%s', this.options.buttonsClass) +
1092
1100
  sprintf(' btn-%s', this.options.iconSize) +
1093
1101
  ' dropdown-toggle" data-toggle="dropdown">',
@@ -1108,7 +1116,7 @@
1108
1116
  var checked = column.visible ? ' checked="checked"' : '';
1109
1117
 
1110
1118
  if (column.switchable) {
1111
- html.push(sprintf('<li>' +
1119
+ html.push(sprintf('<li role="menuitem">' +
1112
1120
  '<label><input type="checkbox" data-field="%s" value="%s"%s> %s</label>' +
1113
1121
  '</li>', column.field, i, checked, column.title));
1114
1122
  switchableCount++;
@@ -1172,7 +1180,7 @@
1172
1180
 
1173
1181
  this.$toolbar.append(html.join(''));
1174
1182
  $search = this.$toolbar.find('.search input');
1175
- $search.off('keyup drop').on('keyup drop', function (event) {
1183
+ $search.off('keyup drop blur').on('keyup drop blur', function (event) {
1176
1184
  if (that.options.searchOnEnterKey && event.keyCode !== 13) {
1177
1185
  return;
1178
1186
  }
@@ -1235,7 +1243,7 @@
1235
1243
  this.data = f ? $.grep(this.options.data, function (item, i) {
1236
1244
  for (var key in f) {
1237
1245
  if ($.isArray(f[key]) && $.inArray(item[key], f[key]) === -1 ||
1238
- item[key] !== f[key]) {
1246
+ !$.isArray(f[key]) && item[key] !== f[key]) {
1239
1247
  return false;
1240
1248
  }
1241
1249
  }
@@ -1377,14 +1385,14 @@
1377
1385
  }
1378
1386
 
1379
1387
  $.each(pageList, function (i, page) {
1380
- if (!that.options.smartDisplay || i === 0 || pageList[i - 1] <= that.options.totalRows) {
1388
+ if (!that.options.smartDisplay || i === 0 || pageList[i - 1] < that.options.totalRows) {
1381
1389
  var active;
1382
1390
  if ($allSelected) {
1383
1391
  active = page === that.options.formatAllRows() ? ' class="active"' : '';
1384
1392
  } else {
1385
1393
  active = page === that.options.pageSize ? ' class="active"' : '';
1386
1394
  }
1387
- pageNumber.push(sprintf('<li%s><a href="javascript:void(0)">%s</a></li>', active, page));
1395
+ pageNumber.push(sprintf('<li role="menuitem"%s><a href="#">%s</a></li>', active, page));
1388
1396
  }
1389
1397
  });
1390
1398
  pageNumber.push('</ul></span>');
@@ -1395,7 +1403,7 @@
1395
1403
  html.push('</div>',
1396
1404
  '<div class="pull-' + this.options.paginationHAlign + ' pagination">',
1397
1405
  '<ul class="pagination' + sprintf(' pagination-%s', this.options.iconSize) + '">',
1398
- '<li class="page-pre"><a href="javascript:void(0)">' + this.options.paginationPreText + '</a></li>');
1406
+ '<li class="page-pre"><a href="#">' + this.options.paginationPreText + '</a></li>');
1399
1407
 
1400
1408
  if (this.totalPages < 5) {
1401
1409
  from = 1;
@@ -1416,7 +1424,7 @@
1416
1424
  if (this.totalPages >= 6) {
1417
1425
  if (this.options.pageNumber >= 3) {
1418
1426
  html.push('<li class="page-first' + (1 === this.options.pageNumber ? ' active' : '') + '">',
1419
- '<a href="javascript:void(0)">', 1, '</a>',
1427
+ '<a href="#">', 1, '</a>',
1420
1428
  '</li>');
1421
1429
 
1422
1430
  from++;
@@ -1427,7 +1435,7 @@
1427
1435
  from--;
1428
1436
  } else {
1429
1437
  html.push('<li class="page-first-separator disabled">',
1430
- '<a href="javascript:void(0)">...</a>',
1438
+ '<a href="#">...</a>',
1431
1439
  '</li>');
1432
1440
  }
1433
1441
 
@@ -1453,14 +1461,14 @@
1453
1461
 
1454
1462
  for (i = from; i <= to; i++) {
1455
1463
  html.push('<li class="page-number' + (i === this.options.pageNumber ? ' active' : '') + '">',
1456
- '<a href="javascript:void(0)">', i, '</a>',
1464
+ '<a href="#">', i, '</a>',
1457
1465
  '</li>');
1458
1466
  }
1459
1467
 
1460
1468
  if (this.totalPages >= 8) {
1461
1469
  if (this.options.pageNumber <= (this.totalPages - 4)) {
1462
1470
  html.push('<li class="page-last-separator disabled">',
1463
- '<a href="javascript:void(0)">...</a>',
1471
+ '<a href="#">...</a>',
1464
1472
  '</li>');
1465
1473
  }
1466
1474
  }
@@ -1468,13 +1476,13 @@
1468
1476
  if (this.totalPages >= 6) {
1469
1477
  if (this.options.pageNumber <= (this.totalPages - 3)) {
1470
1478
  html.push('<li class="page-last' + (this.totalPages === this.options.pageNumber ? ' active' : '') + '">',
1471
- '<a href="javascript:void(0)">', this.totalPages, '</a>',
1479
+ '<a href="#">', this.totalPages, '</a>',
1472
1480
  '</li>');
1473
1481
  }
1474
1482
  }
1475
1483
 
1476
1484
  html.push(
1477
- '<li class="page-next"><a href="javascript:void(0)">' + this.options.paginationNextText + '</a></li>',
1485
+ '<li class="page-next"><a href="#">' + this.options.paginationNextText + '</a></li>',
1478
1486
  '</ul>',
1479
1487
  '</div>');
1480
1488
  }
@@ -1499,6 +1507,16 @@
1499
1507
  // when data is empty, hide the pagination
1500
1508
  this.$pagination[this.getData().length ? 'show' : 'hide']();
1501
1509
  }
1510
+
1511
+ if (!this.options.paginationLoop) {
1512
+ if (this.options.pageNumber === 1) {
1513
+ $pre.addClass('disabled');
1514
+ }
1515
+ if (this.options.pageNumber === this.totalPages) {
1516
+ $next.addClass('disabled');
1517
+ }
1518
+ }
1519
+
1502
1520
  if ($allSelected) {
1503
1521
  this.options.pageSize = this.options.formatAllRows();
1504
1522
  }
@@ -1540,11 +1558,13 @@
1540
1558
  this.$toolbar.find('.page-size').text(this.options.pageSize);
1541
1559
 
1542
1560
  this.updatePagination(event);
1561
+ return false;
1543
1562
  };
1544
1563
 
1545
1564
  BootstrapTable.prototype.onPageFirst = function (event) {
1546
1565
  this.options.pageNumber = 1;
1547
1566
  this.updatePagination(event);
1567
+ return false;
1548
1568
  };
1549
1569
 
1550
1570
  BootstrapTable.prototype.onPagePre = function (event) {
@@ -1554,6 +1574,7 @@
1554
1574
  this.options.pageNumber--;
1555
1575
  }
1556
1576
  this.updatePagination(event);
1577
+ return false;
1557
1578
  };
1558
1579
 
1559
1580
  BootstrapTable.prototype.onPageNext = function (event) {
@@ -1563,11 +1584,13 @@
1563
1584
  this.options.pageNumber++;
1564
1585
  }
1565
1586
  this.updatePagination(event);
1587
+ return false;
1566
1588
  };
1567
1589
 
1568
1590
  BootstrapTable.prototype.onPageLast = function (event) {
1569
1591
  this.options.pageNumber = this.totalPages;
1570
1592
  this.updatePagination(event);
1593
+ return false;
1571
1594
  };
1572
1595
 
1573
1596
  BootstrapTable.prototype.onPageNumber = function (event) {
@@ -1576,55 +1599,138 @@
1576
1599
  }
1577
1600
  this.options.pageNumber = +$(event.currentTarget).text();
1578
1601
  this.updatePagination(event);
1602
+ return false;
1579
1603
  };
1580
1604
 
1581
- BootstrapTable.prototype.initBody = function (fixedScroll) {
1582
- var that = this,
1605
+ BootstrapTable.prototype.initRow = function(item, i, data, parentDom) {
1606
+ var that=this,
1607
+ key,
1583
1608
  html = [],
1584
- data = this.getData();
1609
+ style = {},
1610
+ csses = [],
1611
+ data_ = '',
1612
+ attributes = {},
1613
+ htmlAttributes = [];
1585
1614
 
1586
- this.trigger('pre-body', data);
1615
+ if ($.inArray(item, this.hiddenRows) > -1) {
1616
+ return;
1617
+ }
1587
1618
 
1588
- this.$body = this.$el.find('>tbody');
1589
- if (!this.$body.length) {
1590
- this.$body = $('<tbody></tbody>').appendTo(this.$el);
1619
+ style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style);
1620
+
1621
+ if (style && style.css) {
1622
+ for (key in style.css) {
1623
+ csses.push(key + ': ' + style.css[key]);
1624
+ }
1591
1625
  }
1592
1626
 
1593
- //Fix #389 Bootstrap-table-flatJSON is not working
1627
+ attributes = calculateObjectValue(this.options,
1628
+ this.options.rowAttributes, [item, i], attributes);
1594
1629
 
1595
- if (!this.options.pagination || this.options.sidePagination === 'server') {
1596
- this.pageFrom = 1;
1597
- this.pageTo = data.length;
1630
+ if (attributes) {
1631
+ for (key in attributes) {
1632
+ htmlAttributes.push(sprintf('%s="%s"', key, escapeHTML(attributes[key])));
1633
+ }
1598
1634
  }
1599
1635
 
1600
- for (var i = this.pageFrom - 1; i < this.pageTo; i++) {
1601
- var key,
1602
- item = data[i],
1603
- style = {},
1604
- csses = [],
1636
+ if (item._data && !$.isEmptyObject(item._data)) {
1637
+ $.each(item._data, function(k, v) {
1638
+ // ignore data-index
1639
+ if (k === 'index') {
1640
+ return;
1641
+ }
1642
+ data_ += sprintf(' data-%s="%s"', k, v);
1643
+ });
1644
+ }
1645
+
1646
+ html.push('<tr',
1647
+ sprintf(' %s', htmlAttributes.join(' ')),
1648
+ sprintf(' id="%s"', $.isArray(item) ? undefined : item._id),
1649
+ sprintf(' class="%s"', style.classes || ($.isArray(item) ? undefined : item._class)),
1650
+ sprintf(' data-index="%s"', i),
1651
+ sprintf(' data-uniqueid="%s"', item[this.options.uniqueId]),
1652
+ sprintf('%s', data_),
1653
+ '>'
1654
+ );
1655
+
1656
+ if (this.options.cardView) {
1657
+ html.push(sprintf('<td colspan="%s"><div class="card-views">', this.header.fields.length));
1658
+ }
1659
+
1660
+ if (!this.options.cardView && this.options.detailView) {
1661
+ html.push('<td>',
1662
+ '<a class="detail-icon" href="#">',
1663
+ sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.detailOpen),
1664
+ '</a>',
1665
+ '</td>');
1666
+ }
1667
+
1668
+ $.each(this.header.fields, function(j, field) {
1669
+ var text = '',
1670
+ value_ = getItemField(item, field, that.options.escape),
1671
+ value = '',
1672
+ type = '',
1673
+ cellStyle = {},
1674
+ id_ = '',
1675
+ class_ = that.header.classes[j],
1605
1676
  data_ = '',
1606
- attributes = {},
1607
- htmlAttributes = [];
1677
+ rowspan_ = '',
1678
+ colspan_ = '',
1679
+ title_ = '',
1680
+ column = that.columns[j];
1608
1681
 
1609
- style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style);
1682
+ if (that.fromHtml && typeof value_ === 'undefined') {
1683
+ return;
1684
+ }
1610
1685
 
1611
- if (style && style.css) {
1612
- for (key in style.css) {
1613
- csses.push(key + ': ' + style.css[key]);
1614
- }
1686
+ if (!column.visible) {
1687
+ return;
1615
1688
  }
1616
1689
 
1617
- attributes = calculateObjectValue(this.options,
1618
- this.options.rowAttributes, [item, i], attributes);
1690
+ if (that.options.cardView && (!column.cardVisible)) {
1691
+ return;
1692
+ }
1619
1693
 
1620
- if (attributes) {
1621
- for (key in attributes) {
1622
- htmlAttributes.push(sprintf('%s="%s"', key, escapeHTML(attributes[key])));
1694
+ if (column.escape) {
1695
+ value_ = escapeHTML(value_);
1696
+ }
1697
+
1698
+ style = sprintf('style="%s"', csses.concat(that.header.styles[j]).join('; '));
1699
+
1700
+ // handle td's id and class
1701
+ if (item['_' + field + '_id']) {
1702
+ id_ = sprintf(' id="%s"', item['_' + field + '_id']);
1703
+ }
1704
+ if (item['_' + field + '_class']) {
1705
+ class_ = sprintf(' class="%s"', item['_' + field + '_class']);
1706
+ }
1707
+ if (item['_' + field + '_rowspan']) {
1708
+ rowspan_ = sprintf(' rowspan="%s"', item['_' + field + '_rowspan']);
1709
+ }
1710
+ if (item['_' + field + '_colspan']) {
1711
+ colspan_ = sprintf(' colspan="%s"', item['_' + field + '_colspan']);
1712
+ }
1713
+ if (item['_' + field + '_title']) {
1714
+ title_ = sprintf(' title="%s"', item['_' + field + '_title']);
1715
+ }
1716
+ cellStyle = calculateObjectValue(that.header,
1717
+ that.header.cellStyles[j], [value_, item, i, field], cellStyle);
1718
+ if (cellStyle.classes) {
1719
+ class_ = sprintf(' class="%s"', cellStyle.classes);
1720
+ }
1721
+ if (cellStyle.css) {
1722
+ var csses_ = [];
1723
+ for (var key in cellStyle.css) {
1724
+ csses_.push(key + ': ' + cellStyle.css[key]);
1623
1725
  }
1726
+ style = sprintf('style="%s"', csses_.concat(that.header.styles[j]).join('; '));
1624
1727
  }
1625
1728
 
1626
- if (item._data && !$.isEmptyObject(item._data)) {
1627
- $.each(item._data, function (k, v) {
1729
+ value = calculateObjectValue(column,
1730
+ that.header.formatters[j], [value_, item, i], value_);
1731
+
1732
+ if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) {
1733
+ $.each(item['_' + field + '_data'], function(k, v) {
1628
1734
  // ignore data-index
1629
1735
  if (k === 'index') {
1630
1736
  return;
@@ -1633,159 +1739,101 @@
1633
1739
  });
1634
1740
  }
1635
1741
 
1636
- html.push('<tr',
1637
- sprintf(' %s', htmlAttributes.join(' ')),
1638
- sprintf(' id="%s"', $.isArray(item) ? undefined : item._id),
1639
- sprintf(' class="%s"', style.classes || ($.isArray(item) ? undefined : item._class)),
1640
- sprintf(' data-index="%s"', i),
1641
- sprintf(' data-uniqueid="%s"', item[this.options.uniqueId]),
1642
- sprintf('%s', data_),
1643
- '>'
1644
- );
1742
+ if (column.checkbox || column.radio) {
1743
+ type = column.checkbox ? 'checkbox' : type;
1744
+ type = column.radio ? 'radio' : type;
1645
1745
 
1646
- if (this.options.cardView) {
1647
- html.push(sprintf('<td colspan="%s"><div class="card-views">', this.header.fields.length));
1648
- }
1746
+ text = [sprintf(that.options.cardView ?
1747
+ '<div class="card-view %s">' : '<td class="bs-checkbox %s">', column['class'] || ''),
1748
+ '<input' +
1749
+ sprintf(' data-index="%s"', i) +
1750
+ sprintf(' name="%s"', that.options.selectItemName) +
1751
+ sprintf(' type="%s"', type) +
1752
+ sprintf(' value="%s"', item[that.options.idField]) +
1753
+ sprintf(' checked="%s"', value === true ||
1754
+ (value_ || value && value.checked) ? 'checked' : undefined) +
1755
+ sprintf(' disabled="%s"', !column.checkboxEnabled ||
1756
+ (value && value.disabled) ? 'disabled' : undefined) +
1757
+ ' />',
1758
+ that.header.formatters[j] && typeof value === 'string' ? value : '',
1759
+ that.options.cardView ? '</div>' : '</td>'
1760
+ ].join('');
1649
1761
 
1650
- if (!this.options.cardView && this.options.detailView) {
1651
- html.push('<td>',
1652
- '<a class="detail-icon" href="javascript:">',
1653
- sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.detailOpen),
1654
- '</a>',
1655
- '</td>');
1656
- }
1762
+ item[that.header.stateField] = value === true || (value && value.checked);
1763
+ } else {
1764
+ value = typeof value === 'undefined' || value === null ?
1765
+ that.options.undefinedText : value;
1766
+
1767
+ text = that.options.cardView ? ['<div class="card-view">',
1768
+ that.options.showHeader ? sprintf('<span class="title" %s>%s</span>', style,
1769
+ getPropertyFromOther(that.columns, 'field', 'title', field)) : '',
1770
+ sprintf('<span class="value">%s</span>', value),
1771
+ '</div>'
1772
+ ].join('') : [sprintf('<td%s %s %s %s %s %s %s>',
1773
+ id_, class_, style, data_, rowspan_, colspan_, title_),
1774
+ value,
1775
+ '</td>'
1776
+ ].join('');
1657
1777
 
1658
- $.each(this.header.fields, function (j, field) {
1659
- var text = '',
1660
- value = getItemField(item, field, that.options.escape),
1661
- type = '',
1662
- cellStyle = {},
1663
- id_ = '',
1664
- class_ = that.header.classes[j],
1665
- data_ = '',
1666
- rowspan_ = '',
1667
- colspan_ = '',
1668
- title_ = '',
1669
- column = that.columns[j];
1670
-
1671
- if (that.fromHtml && typeof value === 'undefined') {
1672
- return;
1778
+ // Hide empty data on Card view when smartDisplay is set to true.
1779
+ if (that.options.cardView && that.options.smartDisplay && value === '') {
1780
+ // Should set a placeholder for event binding correct fieldIndex
1781
+ text = '<div class="card-view"></div>';
1673
1782
  }
1783
+ }
1674
1784
 
1675
- if (!column.visible) {
1676
- return;
1677
- }
1785
+ html.push(text);
1786
+ });
1678
1787
 
1679
- if (that.options.cardView && !column.cardVisible) {
1680
- return;
1681
- }
1788
+ if (this.options.cardView) {
1789
+ html.push('</div></td>');
1790
+ }
1791
+ html.push('</tr>');
1682
1792
 
1683
- style = sprintf('style="%s"', csses.concat(that.header.styles[j]).join('; '));
1793
+ return html.join(' ');
1794
+ };
1684
1795
 
1685
- // handle td's id and class
1686
- if (item['_' + field + '_id']) {
1687
- id_ = sprintf(' id="%s"', item['_' + field + '_id']);
1688
- }
1689
- if (item['_' + field + '_class']) {
1690
- class_ = sprintf(' class="%s"', item['_' + field + '_class']);
1691
- }
1692
- if (item['_' + field + '_rowspan']) {
1693
- rowspan_ = sprintf(' rowspan="%s"', item['_' + field + '_rowspan']);
1694
- }
1695
- if (item['_' + field + '_colspan']) {
1696
- colspan_ = sprintf(' colspan="%s"', item['_' + field + '_colspan']);
1697
- }
1698
- if (item['_' + field + '_title']) {
1699
- title_ = sprintf(' title="%s"', item['_' + field + '_title']);
1700
- }
1701
- cellStyle = calculateObjectValue(that.header,
1702
- that.header.cellStyles[j], [value, item, i, field], cellStyle);
1703
- if (cellStyle.classes) {
1704
- class_ = sprintf(' class="%s"', cellStyle.classes);
1705
- }
1706
- if (cellStyle.css) {
1707
- var csses_ = [];
1708
- for (var key in cellStyle.css) {
1709
- csses_.push(key + ': ' + cellStyle.css[key]);
1710
- }
1711
- style = sprintf('style="%s"', csses_.concat(that.header.styles[j]).join('; '));
1712
- }
1796
+ BootstrapTable.prototype.initBody = function (fixedScroll) {
1797
+ var that = this,
1798
+ html = [],
1799
+ data = this.getData();
1713
1800
 
1714
- value = calculateObjectValue(column,
1715
- that.header.formatters[j], [value, item, i], value);
1801
+ this.trigger('pre-body', data);
1716
1802
 
1717
- if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) {
1718
- $.each(item['_' + field + '_data'], function (k, v) {
1719
- // ignore data-index
1720
- if (k === 'index') {
1721
- return;
1722
- }
1723
- data_ += sprintf(' data-%s="%s"', k, v);
1724
- });
1725
- }
1803
+ this.$body = this.$el.find('>tbody');
1804
+ if (!this.$body.length) {
1805
+ this.$body = $('<tbody></tbody>').appendTo(this.$el);
1806
+ }
1726
1807
 
1727
- if (column.checkbox || column.radio) {
1728
- type = column.checkbox ? 'checkbox' : type;
1729
- type = column.radio ? 'radio' : type;
1808
+ //Fix #389 Bootstrap-table-flatJSON is not working
1730
1809
 
1731
- text = [sprintf(that.options.cardView ?
1732
- '<div class="card-view %s">' : '<td class="bs-checkbox %s">', column['class'] || ''),
1733
- '<input' +
1734
- sprintf(' data-index="%s"', i) +
1735
- sprintf(' name="%s"', that.options.selectItemName) +
1736
- sprintf(' type="%s"', type) +
1737
- sprintf(' value="%s"', item[that.options.idField]) +
1738
- sprintf(' checked="%s"', value === true ||
1739
- (value && value.checked) ? 'checked' : undefined) +
1740
- sprintf(' disabled="%s"', !column.checkboxEnabled ||
1741
- (value && value.disabled) ? 'disabled' : undefined) +
1742
- ' />',
1743
- that.header.formatters[j] && typeof value === 'string' ? value : '',
1744
- that.options.cardView ? '</div>' : '</td>'
1745
- ].join('');
1746
-
1747
- item[that.header.stateField] = value === true || (value && value.checked);
1748
- } else {
1749
- value = typeof value === 'undefined' || value === null ?
1750
- that.options.undefinedText : value;
1751
-
1752
- text = that.options.cardView ? ['<div class="card-view">',
1753
- that.options.showHeader ? sprintf('<span class="title" %s>%s</span>', style,
1754
- getPropertyFromOther(that.columns, 'field', 'title', field)) : '',
1755
- sprintf('<span class="value">%s</span>', value),
1756
- '</div>'
1757
- ].join('') : [sprintf('<td%s %s %s %s %s %s %s>',
1758
- id_, class_, style, data_, rowspan_, colspan_, title_),
1759
- value,
1760
- '</td>'
1761
- ].join('');
1762
-
1763
- // Hide empty data on Card view when smartDisplay is set to true.
1764
- if (that.options.cardView && that.options.smartDisplay && value === '') {
1765
- // Should set a placeholder for event binding correct fieldIndex
1766
- text = '<div class="card-view"></div>';
1767
- }
1768
- }
1810
+ if (!this.options.pagination || this.options.sidePagination === 'server') {
1811
+ this.pageFrom = 1;
1812
+ this.pageTo = data.length;
1813
+ }
1769
1814
 
1770
- html.push(text);
1771
- });
1815
+ var trFragments = $(document.createDocumentFragment());
1816
+ var hasTr;
1772
1817
 
1773
- if (this.options.cardView) {
1774
- html.push('</div></td>');
1818
+ for (var i = this.pageFrom - 1; i < this.pageTo; i++) {
1819
+ var item = data[i];
1820
+ var tr = this.initRow(item, i, data, trFragments);
1821
+ hasTr = hasTr || !!tr;
1822
+ if (tr&&tr!==true) {
1823
+ trFragments.append(tr);
1775
1824
  }
1776
-
1777
- html.push('</tr>');
1778
1825
  }
1779
1826
 
1780
1827
  // show no records
1781
- if (!html.length) {
1782
- html.push('<tr class="no-records-found">',
1828
+ if (!hasTr) {
1829
+ trFragments.append('<tr class="no-records-found">' +
1783
1830
  sprintf('<td colspan="%s">%s</td>',
1784
- this.$header.find('th').length, this.options.formatNoMatches()),
1831
+ this.$header.find('th').length,
1832
+ this.options.formatNoMatches()) +
1785
1833
  '</tr>');
1786
1834
  }
1787
1835
 
1788
- this.$body.html(html.join(''));
1836
+ this.$body.html(trFragments);
1789
1837
 
1790
1838
  if (!fixedScroll) {
1791
1839
  this.scrollTo(0);
@@ -1827,8 +1875,8 @@
1827
1875
  // remove and update
1828
1876
  if ($tr.next().is('tr.detail-view')) {
1829
1877
  $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailOpen));
1830
- $tr.next().remove();
1831
1878
  that.trigger('collapse-row', index, row);
1879
+ $tr.next().remove();
1832
1880
  } else {
1833
1881
  $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailClose));
1834
1882
  $tr.after(sprintf('<tr class="detail-view"><td colspan="%s"></td></tr>', $tr.find('td').length));
@@ -1840,6 +1888,7 @@
1840
1888
  that.trigger('expand-row', index, row, $element);
1841
1889
  }
1842
1890
  that.resetView();
1891
+ return false;
1843
1892
  });
1844
1893
 
1845
1894
  this.$selectItem = this.$body.find(sprintf('[name="%s"]', this.options.selectItemName));
@@ -2041,6 +2090,7 @@
2041
2090
  row[that.header.stateField] = false;
2042
2091
  }
2043
2092
  });
2093
+ this.initHiddenRows();
2044
2094
  };
2045
2095
 
2046
2096
  BootstrapTable.prototype.trigger = function (name) {
@@ -2257,17 +2307,6 @@
2257
2307
  }
2258
2308
  };
2259
2309
 
2260
- BootstrapTable.prototype.toggleRow = function (index, uniqueId, visible) {
2261
- if (index === -1) {
2262
- return;
2263
- }
2264
-
2265
- this.$body.find(typeof index !== 'undefined' ?
2266
- sprintf('tr[data-index="%s"]', index) :
2267
- sprintf('tr[data-uniqueid="%s"]', uniqueId))
2268
- [visible ? 'show' : 'hide']();
2269
- };
2270
-
2271
2310
  BootstrapTable.prototype.getVisibleFields = function () {
2272
2311
  var that = this,
2273
2312
  visibleFields = [];
@@ -2297,8 +2336,8 @@
2297
2336
  this.$selectItem.length === this.$selectItem.filter(':checked').length);
2298
2337
 
2299
2338
  if (this.options.height) {
2300
- var toolbarHeight = getRealHeight(this.$toolbar),
2301
- paginationHeight = getRealHeight(this.$pagination),
2339
+ var toolbarHeight = this.$toolbar.outerHeight(true),
2340
+ paginationHeight = this.$pagination.outerHeight(true),
2302
2341
  height = this.options.height - toolbarHeight - paginationHeight;
2303
2342
 
2304
2343
  this.$tableContainer.css('height', height + 'px');
@@ -2345,7 +2384,7 @@
2345
2384
 
2346
2385
  // #431: support pagination
2347
2386
  if (this.options.sidePagination === 'server') {
2348
- this.options.totalRows = data.total;
2387
+ this.options.totalRows = data[this.options.totalField];
2349
2388
  fixedScroll = data.fixedScroll;
2350
2389
  data = data[this.options.dataField];
2351
2390
  } else if (!$.isArray(data)) { // support fixedScroll
@@ -2391,6 +2430,9 @@
2391
2430
  }
2392
2431
  if ($.inArray(row[params.field], params.values) !== -1) {
2393
2432
  this.options.data.splice(i, 1);
2433
+ if (this.options.sidePagination === 'server') {
2434
+ this.options.totalRows -= 1;
2435
+ }
2394
2436
  }
2395
2437
  }
2396
2438
 
@@ -2486,6 +2528,7 @@
2486
2528
  });
2487
2529
 
2488
2530
  this.initSearch();
2531
+ this.initPagination();
2489
2532
  this.initSort();
2490
2533
  this.initBody(true);
2491
2534
  };
@@ -2513,32 +2556,57 @@
2513
2556
  });
2514
2557
 
2515
2558
  this.initSearch();
2559
+ this.initPagination();
2516
2560
  this.initSort();
2517
2561
  this.initBody(true);
2518
2562
  };
2519
2563
 
2564
+ BootstrapTable.prototype.initHiddenRows = function () {
2565
+ this.hiddenRows = [];
2566
+ };
2567
+
2520
2568
  BootstrapTable.prototype.showRow = function (params) {
2521
- if (!params.hasOwnProperty('index') && !params.hasOwnProperty('uniqueId')) {
2522
- return;
2523
- }
2524
- this.toggleRow(params.index, params.uniqueId, true);
2569
+ this.toggleRow(params, true);
2525
2570
  };
2526
2571
 
2527
2572
  BootstrapTable.prototype.hideRow = function (params) {
2528
- if (!params.hasOwnProperty('index') && !params.hasOwnProperty('uniqueId')) {
2573
+ this.toggleRow(params, false);
2574
+ };
2575
+
2576
+ BootstrapTable.prototype.toggleRow = function (params, visible) {
2577
+ var row, index;
2578
+
2579
+ if (params.hasOwnProperty('index')) {
2580
+ row = this.getData()[params.index];
2581
+ } else if (params.hasOwnProperty('uniqueId')) {
2582
+ row = this.getRowByUniqueId(params.uniqueId);
2583
+ }
2584
+
2585
+ if (!row) {
2529
2586
  return;
2530
2587
  }
2531
- this.toggleRow(params.index, params.uniqueId, false);
2588
+
2589
+ index = $.inArray(row, this.hiddenRows);
2590
+
2591
+ if (!visible && index === -1) {
2592
+ this.hiddenRows.push(row);
2593
+ } else if (visible && index > -1) {
2594
+ this.hiddenRows.splice(index, 1);
2595
+ }
2596
+ this.initBody(true);
2532
2597
  };
2533
2598
 
2534
- BootstrapTable.prototype.getRowsHidden = function (show) {
2535
- var rows = $(this.$body[0]).children().filter(':hidden'),
2536
- i = 0;
2537
- if (show) {
2538
- for (; i < rows.length; i++) {
2539
- $(rows[i]).show();
2599
+ BootstrapTable.prototype.getHiddenRows = function (show) {
2600
+ var that = this,
2601
+ data = this.getData(),
2602
+ rows = [];
2603
+
2604
+ $.each(data, function (i, row) {
2605
+ if ($.inArray(row, that.hiddenRows) > -1) {
2606
+ rows.push(row);
2540
2607
  }
2541
- }
2608
+ });
2609
+ this.hiddenRows = rows;
2542
2610
  return rows;
2543
2611
  };
2544
2612
 
@@ -2593,7 +2661,8 @@
2593
2661
  var that = this;
2594
2662
 
2595
2663
  return $.grep(this.options.data, function (row) {
2596
- return row[that.header.stateField];
2664
+ // fix #2424: from html with checkbox
2665
+ return row[that.header.stateField] === true;
2597
2666
  });
2598
2667
  };
2599
2668
 
@@ -2718,7 +2787,13 @@
2718
2787
 
2719
2788
  BootstrapTable.prototype.refresh = function (params) {
2720
2789
  if (params && params.url) {
2721
- this.options.pageNumber = 1;
2790
+ this.options.url = params.url;
2791
+ }
2792
+ if (params && params.pageNumber) {
2793
+ this.options.pageNumber = params.pageNumber;
2794
+ }
2795
+ if (params && params.pageSize) {
2796
+ this.options.pageSize = params.pageSize;
2722
2797
  }
2723
2798
  this.initServer(params && params.silent,
2724
2799
  params && params.query, params && params.url);
@@ -2937,7 +3012,7 @@
2937
3012
  'getSelections', 'getAllSelections', 'getData',
2938
3013
  'load', 'append', 'prepend', 'remove', 'removeAll',
2939
3014
  'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId',
2940
- 'getRowByUniqueId', 'showRow', 'hideRow', 'getRowsHidden',
3015
+ 'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows',
2941
3016
  'mergeCells',
2942
3017
  'checkAll', 'uncheckAll', 'checkInvert',
2943
3018
  'check', 'uncheck',