bootstrap-table-rails 1.11.0 → 1.11.1.1

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.
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);