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.
- checksums.yaml +4 -4
- data/README.md +25 -4
- data/lib/bootstrap-table-rails/version.rb +1 -1
- data/vendor/assets/images/icon.png +0 -0
- data/vendor/assets/javascripts/bootstrap-table.js +300 -225
- data/vendor/assets/javascripts/extensions/bootstrap-table-accent-neutralise.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-angular.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-auto-refresh.js +84 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-click-edit-row.js +142 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-cookie.js +78 -36
- data/vendor/assets/javascripts/extensions/bootstrap-table-copy-rows.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-editable.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-export.js +12 -2
- data/vendor/assets/javascripts/extensions/bootstrap-table-filter-control.js +36 -11
- data/vendor/assets/javascripts/extensions/bootstrap-table-filter.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-flat-json.js +0 -0
- data/vendor/assets/javascripts/extensions/{bootstrap-table-group-by 2.js → bootstrap-table-group-by-v2.js} +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-group-by.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-i18n-enhance.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-key-events.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-mobile.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-multi-toggle.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-search.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-selection-row.js +127 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-multiple-sort.js +1 -1
- data/vendor/assets/javascripts/extensions/bootstrap-table-natural-sorting.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-print.js +133 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-reorder-columns.js +4 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-reorder-rows.js +6 -4
- data/vendor/assets/javascripts/extensions/bootstrap-table-resizable.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-select2-filter.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-sticky-header.js +0 -0
- data/vendor/assets/javascripts/extensions/bootstrap-table-toolbar.js +2 -2
- data/vendor/assets/javascripts/extensions/bootstrap-table-tree-column.js +130 -0
- data/vendor/assets/javascripts/locale/README.md +179 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-af-ZA.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ar-SA.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ca-ES.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-cs-CZ.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-da-DK.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-de-DE.js +10 -4
- data/vendor/assets/javascripts/locale/bootstrap-table-el-GR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-en-US.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-en-US.js.template +49 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-AR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-CL.js +44 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-CR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-ES.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-MX.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-NI.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-es-SP.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-et-EE.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-fa-IR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-fr-BE.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-fr-FR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-he-IL.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-hr-HR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-hu-HU.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-id-ID.js +49 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-it-IT.js +12 -2
- data/vendor/assets/javascripts/locale/bootstrap-table-ja-JP.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ka-GE.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ko-KR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ms-MY.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-nb-NO.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-nl-NL.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-pl-PL.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-pt-BR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-pt-PT.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ro-RO.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ru-RU.js +33 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-sk-SK.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-sv-SE.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-th-TH.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-tr-TR.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-uk-UA.js +36 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-ur-PK.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-uz-Latn-UZ.js +49 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-vi-VN.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-zh-CN.js +0 -0
- data/vendor/assets/javascripts/locale/bootstrap-table-zh-TW.js +0 -0
- data/vendor/assets/stylesheets/bootstrap-table.css +9 -5
- data/vendor/assets/stylesheets/extensions/bootstrap-table-auto-refresh.css +3 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-click-edit-row.css +21 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-filter-control.css +13 -0
- data/vendor/assets/stylesheets/extensions/{bootstrap-table-group-by 2.css → bootstrap-table-group-by-v2.css} +0 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-group-by.css +0 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-multiple-selection-row.css +17 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-reorder-rows.css +0 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-sticky-header.css +0 -0
- data/vendor/assets/stylesheets/extensions/bootstrap-table-tree-column.css +1 -0
- metadata +20 -4
File without changes
|
@@ -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.
|
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 =
|
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.
|
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(
|
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
|
252
|
+
html.push('<div class="no-filter-control"></div>');
|
230
253
|
} else {
|
231
|
-
html.push('<div
|
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, {
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
});
|
File without changes
|
@@ -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);
|