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
@@ -16,6 +16,7 @@
16
16
  sql: 'SQL',
17
17
  doc: 'MS-Word',
18
18
  excel: 'MS-Excel',
19
+ xlsx: 'MS-Excel (OpenXML)',
19
20
  powerpoint: 'MS-Powerpoint',
20
21
  pdf: 'PDF'
21
22
  };
@@ -58,7 +59,7 @@
58
59
  '<button class="btn' +
59
60
  sprintf(' btn-%s', this.options.buttonsClass) +
60
61
  sprintf(' btn-%s', this.options.iconSize) +
61
- ' dropdown-toggle" ' +
62
+ ' dropdown-toggle" aria-label="export type" ' +
62
63
  'title="' + this.options.formatExport() + '" ' +
63
64
  'data-toggle="dropdown" type="button">',
64
65
  sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.export),
@@ -81,7 +82,7 @@
81
82
  }
82
83
  $.each(exportTypes, function (i, type) {
83
84
  if (TYPE_NAME.hasOwnProperty(type)) {
84
- $menu.append(['<li data-type="' + type + '">',
85
+ $menu.append(['<li role="menuitem" data-type="' + type + '">',
85
86
  '<a href="javascript:void(0)">',
86
87
  TYPE_NAME[type],
87
88
  '</a>',
@@ -108,6 +109,15 @@
108
109
  var data = that.getData(),
109
110
  selectedData = that.getAllSelections();
110
111
 
112
+ // Quick fix #2220
113
+ if (that.options.sidePagination === 'server') {
114
+ data = {total: that.options.totalRows};
115
+ data[that.options.dataField] = that.getData();
116
+
117
+ selectedData = {total: that.options.totalRows};
118
+ selectedData[that.options.dataField] = that.getAllSelections();
119
+ }
120
+
111
121
  that.load(selectedData);
112
122
  doExport();
113
123
  that.load(data);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @author: Dennis Hernández
3
3
  * @webSite: http://djhvscf.github.io/Blog
4
- * @version: v2.1.0
4
+ * @version: v2.1.1
5
5
  */
6
6
 
7
7
  (function ($) {
@@ -11,6 +11,24 @@
11
11
  var sprintf = $.fn.bootstrapTable.utils.sprintf,
12
12
  objectKeys = $.fn.bootstrapTable.utils.objectKeys;
13
13
 
14
+ var getOptionsFromSelectControl = function (selectControl) {
15
+ return selectControl.get(selectControl.length - 1).options;
16
+ };
17
+
18
+ var hideUnusedSelectOptions = function (selectControl, uniqueValues) {
19
+ var options = getOptionsFromSelectControl(selectControl);
20
+
21
+ for (var i = 0; i < options.length; i++) {
22
+ if (options[i].value !== "") {
23
+ if (!uniqueValues.hasOwnProperty(options[i].value)) {
24
+ selectControl.find(sprintf("option[value='%s']", options[i].value)).hide();
25
+ } else {
26
+ selectControl.find(sprintf("option[value='%s']", options[i].value)).show();
27
+ }
28
+ }
29
+ }
30
+ };
31
+
14
32
  var addOptionToSelectControl = function (selectControl, value, text) {
15
33
  value = $.trim(value);
16
34
  selectControl = $(selectControl.get(selectControl.length - 1));
@@ -39,7 +57,7 @@
39
57
  };
40
58
 
41
59
  var existOptionInSelectControl = function (selectControl, value) {
42
- var options = selectControl.get(selectControl.length - 1).options;
60
+ var options = getOptionsFromSelectControl(selectControl);
43
61
  for (var i = 0; i < options.length; i++) {
44
62
  if (options[i].value === value.toString()) {
45
63
  //The value is not valid to add
@@ -161,7 +179,7 @@
161
179
  };
162
180
 
163
181
  var initFilterSelectControls = function (that) {
164
- var data = that.options.data,
182
+ var data = that.data,
165
183
  itemsPerPage = that.pageTo < that.options.data.length ? that.options.data.length : that.pageTo,
166
184
 
167
185
  isColumnSearchableViaSelect = function (column) {
@@ -198,18 +216,23 @@
198
216
 
199
217
  uniqueValues[formattedValue] = fieldValue;
200
218
  }
219
+
201
220
  for (var key in uniqueValues) {
202
221
  addOptionToSelectControl(selectControl, uniqueValues[key], key);
203
222
  }
204
223
 
205
224
  sortSelectControl(selectControl);
225
+
226
+ if (that.options.hideUnusedSelectOptions) {
227
+ hideUnusedSelectOptions(selectControl, uniqueValues);
228
+ }
206
229
  }
207
230
  });
208
231
  };
209
232
 
210
- var escapeID = function( id ) {
233
+ var escapeID = function(id) {
211
234
  return String(id).replace( /(:|\.|\[|\]|,)/g, "\\$1" );
212
- };
235
+ };
213
236
 
214
237
  var createControls = function (that, header) {
215
238
  var addedFilterControl = false,
@@ -226,15 +249,15 @@
226
249
  }
227
250
 
228
251
  if (!column.filterControl) {
229
- html.push('<div style="height: 34px;"></div>');
252
+ html.push('<div class="no-filter-control"></div>');
230
253
  } else {
231
- html.push('<div style="margin: 0 2px 2px 2px;" class="filterControl">');
254
+ html.push('<div class="filter-control">');
232
255
 
233
256
  var nameControl = column.filterControl.toLowerCase();
234
257
  if (column.searchable && that.options.filterTemplate[nameControl]) {
235
258
  addedFilterControl = true;
236
259
  isVisible = 'visible';
237
- html.push(that.options.filterTemplate[nameControl](that, column.field, isVisible));
260
+ html.push(that.options.filterTemplate[nameControl](that, column.field, isVisible, column.filterControlPlaceholder));
238
261
  }
239
262
  }
240
263
 
@@ -332,6 +355,7 @@
332
355
  if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'datepicker') {
333
356
  header.find('.date-filter-control.bootstrap-table-filter-control-' + column.field).datepicker(column.filterDatepickerOptions)
334
357
  .on('changeDate', function (e) {
358
+ $(sprintf(".%s", e.currentTarget.classList.toString().split(" ").join("."))).val(e.currentTarget.value);
335
359
  //Fired the keyup event
336
360
  $(e.currentTarget).keyup();
337
361
  });
@@ -406,8 +430,8 @@
406
430
  filterShowClear: false,
407
431
  alignmentSelectControlOptions: undefined,
408
432
  filterTemplate: {
409
- input: function (that, field, isVisible) {
410
- return sprintf('<input type="text" class="form-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s">', field, isVisible);
433
+ input: function (that, field, isVisible, placeholder) {
434
+ return sprintf('<input type="text" class="form-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s" placeholder="%s">', field, isVisible, placeholder);
411
435
  },
412
436
  select: function (that, field, isVisible) {
413
437
  return sprintf('<select class="form-control bootstrap-table-filter-control-%s" style="width: 100%; visibility: %s" dir="%s"></select>',
@@ -426,7 +450,8 @@
426
450
  filterData: undefined,
427
451
  filterDatepickerOptions: undefined,
428
452
  filterStrictSearch: false,
429
- filterStartsWithSearch: false
453
+ filterStartsWithSearch: false,
454
+ filterControlPlaceholder: ""
430
455
  });
431
456
 
432
457
  $.extend($.fn.bootstrapTable.Constructor.EVENTS, {
@@ -0,0 +1,127 @@
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
+ document.onselectstart = function() {
12
+ return false;
13
+ };
14
+
15
+ var getTableObjectFromCurrentTarget = function (currentTarget) {
16
+ currentTarget = $(currentTarget);
17
+ return currentTarget.is("table") ? currentTarget : currentTarget.parents().find(".table");
18
+ };
19
+
20
+ var getRow = function (target) {
21
+ target = $(target);
22
+ return target.parent().parent();
23
+ };
24
+
25
+ var onRowClick = function (e) {
26
+ var that = getTableObjectFromCurrentTarget(e.currentTarget);
27
+
28
+ if (window.event.ctrlKey) {
29
+ toggleRow(e.currentTarget, that, false, false);
30
+ }
31
+
32
+ if (window.event.button === 0) {
33
+ if (!window.event.ctrlKey && !window.event.shiftKey) {
34
+ clearAll(that);
35
+ toggleRow(e.currentTarget, that, false, false);
36
+ }
37
+
38
+ if (window.event.shiftKey) {
39
+ selectRowsBetweenIndexes([that.bootstrapTable("getOptions").multipleSelectRowLastSelectedRow.rowIndex, e.currentTarget.rowIndex], that)
40
+ }
41
+ }
42
+ };
43
+
44
+ var onCheckboxChange = function (e) {
45
+ var that = getTableObjectFromCurrentTarget(e.currentTarget);
46
+ clearAll(that);
47
+ toggleRow(getRow(e.currentTarget), that, false, false);
48
+ };
49
+
50
+ var toggleRow = function (row, that, clearAll, useShift) {
51
+ if (clearAll) {
52
+ row = $(row);
53
+ that.bootstrapTable("getOptions").multipleSelectRowLastSelectedRow = undefined;
54
+ row.removeClass(that.bootstrapTable("getOptions").multipleSelectRowCssClass);
55
+ that.bootstrapTable("uncheck", row.data("index"));
56
+ } else {
57
+ that.bootstrapTable("getOptions").multipleSelectRowLastSelectedRow = row;
58
+ row = $(row);
59
+ if (useShift) {
60
+ row.addClass(that.bootstrapTable("getOptions").multipleSelectRowCssClass);
61
+ that.bootstrapTable("check", row.data("index"));
62
+ } else {
63
+ if(row.hasClass(that.bootstrapTable("getOptions").multipleSelectRowCssClass)) {
64
+ row.removeClass(that.bootstrapTable("getOptions").multipleSelectRowCssClass)
65
+ that.bootstrapTable("uncheck", row.data("index"));
66
+ } else {
67
+ row.addClass(that.bootstrapTable("getOptions").multipleSelectRowCssClass);
68
+ that.bootstrapTable("check", row.data("index"));
69
+ }
70
+ }
71
+ }
72
+ };
73
+
74
+ var selectRowsBetweenIndexes = function (indexes, that) {
75
+ indexes.sort(function(a, b) {
76
+ return a - b;
77
+ });
78
+
79
+ for (var i = indexes[0]; i <= indexes[1]; i++) {
80
+ toggleRow(that.bootstrapTable("getOptions").multipleSelectRowRows[i-1], that, false, true);
81
+ }
82
+ };
83
+
84
+ var clearAll = function (that) {
85
+ for (var i = 0; i < that.bootstrapTable("getOptions").multipleSelectRowRows.length; i++) {
86
+ toggleRow(that.bootstrapTable("getOptions").multipleSelectRowRows[i], that, true, false);
87
+ }
88
+ };
89
+
90
+ $.extend($.fn.bootstrapTable.defaults, {
91
+ multipleSelectRow: false,
92
+ multipleSelectRowCssClass: 'multiple-select-row-selected',
93
+ //internal variables used by the extension
94
+ multipleSelectRowLastSelectedRow: undefined,
95
+ multipleSelectRowRows: []
96
+ });
97
+
98
+ var BootstrapTable = $.fn.bootstrapTable.Constructor,
99
+ _init = BootstrapTable.prototype.init,
100
+ _initBody = BootstrapTable.prototype.initBody;
101
+
102
+ BootstrapTable.prototype.init = function () {
103
+ if (this.options.multipleSelectRow) {
104
+ var that = this;
105
+
106
+ //Make sure that the internal variables have the correct value
107
+ this.options.multipleSelectRowLastSelectedRow = undefined;
108
+ this.options.multipleSelectRowRows = [];
109
+
110
+ this.$el.on("post-body.bs.table", function (e) {
111
+ setTimeout(function () {
112
+ that.options.multipleSelectRowRows = that.$body.children();
113
+ that.options.multipleSelectRowRows.click(onRowClick);
114
+ that.options.multipleSelectRowRows.find("input[type=checkbox]").change(onCheckboxChange);
115
+ }, 1);
116
+ });
117
+ }
118
+
119
+ _init.apply(this, Array.prototype.slice.apply(arguments));
120
+ };
121
+
122
+ BootstrapTable.prototype.clearAllMultipleSelectionRow = function () {
123
+ clearAll(this);
124
+ };
125
+
126
+ $.fn.bootstrapTable.methods.push('clearAllMultipleSelectionRow');
127
+ }(jQuery);
@@ -257,7 +257,7 @@
257
257
  });
258
258
 
259
259
  this.$el.on('load-success.bs.table', function() {
260
- if (!isSingleSort && that.options.sortPriority !== null && typeof that.options.sortPriority === 'object') {
260
+ if (!isSingleSort && that.options.sortPriority !== null && typeof that.options.sortPriority === 'object' && that.options.sidePagination !== 'server') {
261
261
  that.onMultipleSort();
262
262
  }
263
263
  });
@@ -0,0 +1,133 @@
1
+ (function ($) {
2
+ 'use strict';
3
+
4
+ var sprintf = $.fn.bootstrapTable.utils.sprintf;
5
+
6
+ function printPageBuilderDefault(table) {
7
+ return '<html><head>' +
8
+ '<style type="text/css" media="print">' +
9
+ ' @page { size: auto; margin: 25px 0 25px 0; }' +
10
+ '</style>' +
11
+ '<style type="text/css" media="all">' +
12
+ 'table{border-collapse: collapse; font-size: 12px; }\n' +
13
+ 'table, th, td {border: 1px solid grey}\n' +
14
+ 'th, td {text-align: center; vertical-align: middle;}\n' +
15
+ 'p {font-weight: bold; margin-left:20px }\n' +
16
+ 'table { width:94%; margin-left:3%; margin-right:3%}\n' +
17
+ 'div.bs-table-print { text-align:center;}\n' +
18
+ '</style></head><title>Print Table</title><body>' +
19
+ '<p>Printed on: ' + new Date + ' </p>' +
20
+ '<div class="bs-table-print">' + table + "</div></body></html>";
21
+ }
22
+ $.extend($.fn.bootstrapTable.defaults, {
23
+ showPrint: false,
24
+ printAsFilteredAndSortedOnUI: true, //boolean, when true - print table as sorted and filtered on UI.
25
+ //Please note that if true is set, along with explicit predefined print options for filtering and sorting (printFilter, printSortOrder, printSortColumn)- then they will be applied on data already filtered and sorted by UI controls.
26
+ //For printing data as filtered and sorted on UI - do not set these 3 options:printFilter, printSortOrder, printSortColumn
27
+ printSortColumn: undefined , //String, set column field name to be sorted by
28
+ printSortOrder: 'asc', //String: 'asc' , 'desc' - relevant only if printSortColumn is set
29
+ printPageBuilder: function(table){return printPageBuilderDefault(table)} // function, receive html <table> element as string, returns html string for printing. by default delegates to function printPageBuilderDefault(table). used for styling and adding header or footer
30
+ });
31
+ $.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
32
+ printFilter: undefined, //set value to filter by in print page
33
+ printIgnore: false, //boolean, set true to ignore this column in the print page
34
+ printFormatter:undefined //function(value, row, index), formats the cell value for this column in the printed table. Function behaviour is similar to the 'formatter' column option
35
+ });
36
+ $.extend($.fn.bootstrapTable.defaults.icons, {
37
+ print: 'glyphicon-print icon-share'
38
+ });
39
+
40
+ var BootstrapTable = $.fn.bootstrapTable.Constructor,
41
+ _initToolbar = BootstrapTable.prototype.initToolbar;
42
+
43
+ BootstrapTable.prototype.initToolbar = function () {
44
+ this.showToolbar = this.options.showPrint;
45
+
46
+ _initToolbar.apply(this, Array.prototype.slice.apply(arguments));
47
+
48
+ if (this.options.showPrint) {
49
+ var that = this,
50
+ $btnGroup = this.$toolbar.find('>.btn-group'),
51
+ $print = $btnGroup.find('button.bs-print');
52
+
53
+ if (!$print.length) {
54
+ $print = $([
55
+ '<button class="bs-print btn btn-default' + sprintf(' btn-%s"', this.options.iconSize) + ' name="print" title="print" type="button">',
56
+ sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.print),
57
+ '</button>'].join('')).appendTo($btnGroup);
58
+
59
+ $print.click(function () {
60
+ function formatValue(row, i, column ) {
61
+ var value = row[column.field];
62
+ if (typeof column.printFormatter === 'function') {
63
+ return column.printFormatter.apply(column, [value, row, i]);
64
+ }
65
+ else {
66
+ return value || "-";
67
+ }
68
+ }
69
+ function buildTable(data,columns) {
70
+ var out = "<table><thead><tr>";
71
+ for(var h = 0; h < columns.length; h++) {
72
+ if(!columns[h].printIgnore) {
73
+ out += ("<th>"+columns[h].title+"</th>");
74
+ }
75
+ }
76
+ out += "</tr></thead><tbody>";
77
+ for(var i = 0; i < data.length; i++) {
78
+ out += "<tr>";
79
+ for(var j = 0; j < columns.length; j++) {
80
+ if(!columns[j].printIgnore) {
81
+ out += ("<td>"+ formatValue(data[i], i, columns[j])+"</td>");
82
+ }
83
+ }
84
+ out += "</tr>";
85
+ }
86
+ out += "</tbody></table>";
87
+ return out;
88
+ }
89
+ function sortRows(data,colName,sortOrder) {
90
+ if(!colName){
91
+ return data;
92
+ }
93
+ var reverse = sortOrder != 'asc';
94
+ reverse = -((+reverse) || -1);
95
+ return data.sort(function (a, b) {
96
+ return reverse * (a[colName].localeCompare(b[colName]));
97
+ });
98
+ }
99
+ function filterRow(row,filters) {
100
+ for (var index = 0; index < filters.length; ++index) {
101
+ if(row[filters[index].colName]!=filters[index].value) {
102
+ return false;
103
+ }
104
+ }
105
+ return true;
106
+ }
107
+ function filterRows(data,filters) {
108
+ return data.filter(function (row) {
109
+ return filterRow(row,filters)
110
+ });
111
+ }
112
+ function getColumnFilters(columns) {
113
+ return !columns || !columns[0] ? [] : columns[0].filter(function (col) {
114
+ return col.printFilter;
115
+ }).map(function (col) {
116
+ return {colName:col.field, value:col.printFilter};
117
+ });
118
+ }
119
+ var doPrint = function (data) {
120
+ data=filterRows(data,getColumnFilters(that.options.columns));
121
+ data=sortRows(data,that.options.printSortColumn,that.options.printSortOrder);
122
+ var table=buildTable(data,that.options.columns[0]);
123
+ var newWin = window.open("");
124
+ newWin.document.write(that.options.printPageBuilder.call(this, table));
125
+ newWin.print();
126
+ newWin.close();
127
+ };
128
+ doPrint(that.options.printAsFilteredAndSortedOnUI? that.getData() : that.options.data.slice(0));
129
+ });
130
+ }
131
+ }
132
+ };
133
+ })(jQuery);