jquery-datatables 1.10.19.1 → 1.10.20
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.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/README.md +28 -1
- data/app/assets/javascripts/datatables/dataTables.uikit.js +2 -2
- data/app/assets/javascripts/datatables/extensions/AutoFill/dataTables.autoFill.js +42 -29
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.bootstrap.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.bootstrap4.js +8 -2
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.colVis.js +6 -3
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.foundation.js +5 -4
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.html5.js +58 -6
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.print.js +16 -5
- data/app/assets/javascripts/datatables/extensions/Buttons/buttons.semanticui.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Buttons/dataTables.buttons.js +267 -152
- data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/ColReorder/dataTables.colReorder.js +121 -52
- data/app/assets/javascripts/datatables/extensions/FixedColumns/dataTables.fixedColumns.js +32 -5
- data/app/assets/javascripts/datatables/extensions/KeyTable/dataTables.keyTable.js +166 -63
- data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/RowGroup/dataTables.rowGroup.js +105 -53
- data/app/assets/javascripts/datatables/extensions/RowGroup/rowGroup.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/RowGroup/{rowGroup.semanicui.js → rowGroup.semanticui.js} +0 -0
- data/app/assets/javascripts/datatables/extensions/RowReorder/dataTables.rowReorder.js +10 -9
- data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Scroller/dataTables.scroller.js +519 -636
- data/app/assets/javascripts/datatables/extensions/Scroller/scroller.foundation.js +1 -1
- data/app/assets/javascripts/datatables/extensions/Select/dataTables.select.js +49 -18
- data/app/assets/javascripts/datatables/extensions/Select/select.foundation.js +1 -1
- data/app/assets/javascripts/datatables/jquery.dataTables.js +97 -60
- data/app/assets/javascripts/datatables/plugins/api/average.js +7 -6
- data/app/assets/javascripts/datatables/plugins/api/sum.js +7 -6
- data/app/assets/javascripts/datatables/plugins/pagination/ellipses.js +160 -0
- data/app/assets/javascripts/datatables/plugins/pagination/extjs.js +137 -0
- data/app/assets/javascripts/datatables/plugins/pagination/four_button.js +110 -0
- data/app/assets/javascripts/datatables/plugins/pagination/full_numbers_no_ellipses.js +59 -0
- data/app/assets/javascripts/datatables/plugins/pagination/input.js +22 -19
- data/app/assets/javascripts/datatables/plugins/pagination/scrolling.js +130 -0
- data/app/assets/javascripts/datatables/plugins/pagination/select.js +97 -0
- data/app/assets/javascripts/datatables/plugins/pagination/simple_incremental_bootstrap.js +154 -0
- data/app/assets/javascripts/datatables/plugins/pagination/simple_numbers_no_ellipses.js +59 -0
- data/app/assets/javascripts/datatables/plugins/search/dataTables.alphabetSearch.js +440 -399
- data/app/assets/javascripts/datatables/plugins/sorting/enum.js +51 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-dd-MMM-yyyy.js +63 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-de.js +125 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-eu.js +64 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-euro.js +48 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/date-uk.js +35 -12
- data/app/assets/javascripts/datatables/plugins/type-detection/datetime-moment.js +74 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/datetime-us.js +86 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/file-size.js +37 -13
- data/app/assets/javascripts/datatables/plugins/type-detection/ip-address.js +113 -11
- data/app/assets/javascripts/datatables/plugins/type-detection/numString.js +63 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/percent.js +34 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/time-elapsed-dhms.js +42 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/time.js +56 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/title-numeric.js +40 -0
- data/app/assets/javascripts/datatables/plugins/type-detection/title-string.js +36 -0
- data/app/assets/stylesheets/datatables/extensions/AutoFill/autoFill.dataTables.scss +10 -3
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap.scss +12 -3
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.bootstrap4.scss +13 -6
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.dataTables.scss +2 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.foundation.scss +5 -1
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.jqueryui.scss +1 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/buttons.semanticui.scss +2 -1
- data/app/assets/stylesheets/datatables/extensions/Buttons/common.scss +10 -0
- data/app/assets/stylesheets/datatables/extensions/Buttons/mixins.scss +42 -30
- data/app/assets/stylesheets/datatables/extensions/FixedColumns/fixedColumns.bootstrap.scss +11 -7
- data/app/assets/stylesheets/datatables/extensions/FixedColumns/fixedColumns.foundation.scss +1 -0
- data/app/assets/stylesheets/datatables/extensions/KeyTable/keyTable.dataTables.scss +13 -5
- data/app/assets/stylesheets/datatables/extensions/RowGroup/rowGroup.dataTables.scss +20 -2
- data/app/assets/stylesheets/datatables/extensions/Scroller/scroller.dataTables.scss +15 -2
- data/lib/jquery-datatables/version.rb +1 -1
- metadata +26 -12
- data/app/assets/javascripts/datatables/dataTables.bootstrap2.js +0 -162
- data/app/assets/javascripts/datatables/extensions/ColReorder/colReorder.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/FixedColumns/fixedColumns.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/FixedHeader/fixedHeader.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/KeyTable/keyTable.semanicui.js +0 -38
- data/app/assets/javascripts/datatables/extensions/RowReorder/rowReorder.semanicui.js +0 -38
- data/app/assets/stylesheets/datatables/dataTables.bootstrap2.scss +0 -178
@@ -0,0 +1,59 @@
|
|
1
|
+
/**
|
2
|
+
* Plug-in offers the same functionality as `full_numbers` pagination type
|
3
|
+
* (see `pagingType` option) but without ellipses.
|
4
|
+
*
|
5
|
+
* See [example](http://www.gyrocode.com/articles/jquery-datatables-pagination-without-ellipses) for demonstration.
|
6
|
+
*
|
7
|
+
* @name Full Numbers - No Ellipses
|
8
|
+
* @summary Same pagination as 'full_numbers' but without ellipses
|
9
|
+
* @author [Michael Ryvkin](http://www.gyrocode.com)
|
10
|
+
*
|
11
|
+
* @example
|
12
|
+
* $(document).ready(function() {
|
13
|
+
* $('#example').dataTable( {
|
14
|
+
* "pagingType": "full_numbers_no_ellipses"
|
15
|
+
* } );
|
16
|
+
* } );
|
17
|
+
*/
|
18
|
+
|
19
|
+
$.fn.DataTable.ext.pager.full_numbers_no_ellipses = function(page, pages){
|
20
|
+
var numbers = [];
|
21
|
+
var buttons = $.fn.DataTable.ext.pager.numbers_length;
|
22
|
+
var half = Math.floor( buttons / 2 );
|
23
|
+
|
24
|
+
var _range = function ( len, start ){
|
25
|
+
var end;
|
26
|
+
|
27
|
+
if ( typeof start === "undefined" ){
|
28
|
+
start = 0;
|
29
|
+
end = len;
|
30
|
+
|
31
|
+
} else {
|
32
|
+
end = start;
|
33
|
+
start = len;
|
34
|
+
}
|
35
|
+
|
36
|
+
var out = [];
|
37
|
+
for ( var i = start ; i < end; i++ ){ out.push(i); }
|
38
|
+
|
39
|
+
return out;
|
40
|
+
};
|
41
|
+
|
42
|
+
|
43
|
+
if ( pages <= buttons ) {
|
44
|
+
numbers = _range( 0, pages );
|
45
|
+
|
46
|
+
} else if ( page <= half ) {
|
47
|
+
numbers = _range( 0, buttons);
|
48
|
+
|
49
|
+
} else if ( page >= pages - 1 - half ) {
|
50
|
+
numbers = _range( pages - buttons, pages );
|
51
|
+
|
52
|
+
} else {
|
53
|
+
numbers = _range( page - half, page + half + 1);
|
54
|
+
}
|
55
|
+
|
56
|
+
numbers.DT_el = 'span';
|
57
|
+
|
58
|
+
return [ 'first', 'previous', numbers, 'next', 'last' ];
|
59
|
+
};
|
@@ -54,9 +54,9 @@
|
|
54
54
|
var lastClassName = 'last';
|
55
55
|
|
56
56
|
var paginateClassName = 'paginate';
|
57
|
-
var paginateOfClassName = 'paginate_of';
|
58
57
|
var paginatePageClassName = 'paginate_page';
|
59
58
|
var paginateInputClassName = 'paginate_input';
|
59
|
+
var paginateTotalClassName = 'paginate_total';
|
60
60
|
|
61
61
|
$.fn.dataTableExt.oPagination.input = {
|
62
62
|
'fnInit': function (oSettings, nPaging, fnCallbackDraw) {
|
@@ -65,11 +65,12 @@
|
|
65
65
|
var nNext = document.createElement('span');
|
66
66
|
var nLast = document.createElement('span');
|
67
67
|
var nInput = document.createElement('input');
|
68
|
-
var
|
69
|
-
var
|
68
|
+
var nTotal = document.createElement('span');
|
69
|
+
var nInfo = document.createElement('span');
|
70
70
|
|
71
71
|
var language = oSettings.oLanguage.oPaginate;
|
72
72
|
var classes = oSettings.oClasses;
|
73
|
+
var info = language.info || 'Page _INPUT_ of _TOTAL_';
|
73
74
|
|
74
75
|
nFirst.innerHTML = language.sFirst;
|
75
76
|
nPrevious.innerHTML = language.sPrevious;
|
@@ -81,9 +82,8 @@
|
|
81
82
|
nNext.className = nextClassName + ' ' + classes.sPageButton;
|
82
83
|
nLast.className = lastClassName + ' ' + classes.sPageButton;
|
83
84
|
|
84
|
-
nOf.className = paginateOfClassName;
|
85
|
-
nPage.className = paginatePageClassName;
|
86
85
|
nInput.className = paginateInputClassName;
|
86
|
+
nTotal.className = paginateTotalClassName;
|
87
87
|
|
88
88
|
if (oSettings.sTableId !== '') {
|
89
89
|
nPaging.setAttribute('id', oSettings.sTableId + '_' + paginateClassName);
|
@@ -94,17 +94,20 @@
|
|
94
94
|
}
|
95
95
|
|
96
96
|
nInput.type = 'text';
|
97
|
-
|
97
|
+
|
98
|
+
info = info.replace(/_INPUT_/g, '</span>' + nInput.outerHTML + '<span>');
|
99
|
+
info = info.replace(/_TOTAL_/g, '</span>' + nTotal.outerHTML + '<span>');
|
100
|
+
nInfo.innerHTML = '<span>' + info + '</span>';
|
98
101
|
|
99
102
|
nPaging.appendChild(nFirst);
|
100
103
|
nPaging.appendChild(nPrevious);
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
+
$(nInfo).children().each(function (i, n) {
|
105
|
+
nPaging.appendChild(n);
|
106
|
+
});
|
104
107
|
nPaging.appendChild(nNext);
|
105
108
|
nPaging.appendChild(nLast);
|
106
109
|
|
107
|
-
$(nFirst).click(function() {
|
110
|
+
$(nFirst).click(function () {
|
108
111
|
var iCurrentPage = calcCurrentPage(oSettings);
|
109
112
|
if (iCurrentPage !== 1) {
|
110
113
|
oSettings.oApi._fnPageChange(oSettings, 'first');
|
@@ -112,7 +115,7 @@
|
|
112
115
|
}
|
113
116
|
});
|
114
117
|
|
115
|
-
$(nPrevious).click(function() {
|
118
|
+
$(nPrevious).click(function () {
|
116
119
|
var iCurrentPage = calcCurrentPage(oSettings);
|
117
120
|
if (iCurrentPage !== 1) {
|
118
121
|
oSettings.oApi._fnPageChange(oSettings, 'previous');
|
@@ -120,7 +123,7 @@
|
|
120
123
|
}
|
121
124
|
});
|
122
125
|
|
123
|
-
$(nNext).click(function() {
|
126
|
+
$(nNext).click(function () {
|
124
127
|
var iCurrentPage = calcCurrentPage(oSettings);
|
125
128
|
if (iCurrentPage !== calcPages(oSettings)) {
|
126
129
|
oSettings.oApi._fnPageChange(oSettings, 'next');
|
@@ -128,7 +131,7 @@
|
|
128
131
|
}
|
129
132
|
});
|
130
133
|
|
131
|
-
$(nLast).click(function() {
|
134
|
+
$(nLast).click(function () {
|
132
135
|
var iCurrentPage = calcCurrentPage(oSettings);
|
133
136
|
if (iCurrentPage !== calcPages(oSettings)) {
|
134
137
|
oSettings.oApi._fnPageChange(oSettings, 'last');
|
@@ -136,7 +139,7 @@
|
|
136
139
|
}
|
137
140
|
});
|
138
141
|
|
139
|
-
$(
|
142
|
+
$(nPaging).find('.' + paginateInputClassName).keyup(function (e) {
|
140
143
|
// 38 = up arrow, 39 = right arrow
|
141
144
|
if (e.which === 38 || e.which === 39) {
|
142
145
|
this.value++;
|
@@ -166,7 +169,7 @@
|
|
166
169
|
|
167
170
|
// Take the brutal approach to cancelling text selection.
|
168
171
|
$('span', nPaging).bind('mousedown', function () { return false; });
|
169
|
-
$('span', nPaging).bind('selectstart', function() { return false; });
|
172
|
+
$('span', nPaging).bind('selectstart', function () { return false; });
|
170
173
|
|
171
174
|
// If we can't page anyway, might as well not show it.
|
172
175
|
var iPages = calcPages(oSettings);
|
@@ -215,10 +218,10 @@
|
|
215
218
|
.addClass(disableClasses[lastClassName]);
|
216
219
|
|
217
220
|
// Paginate of N pages text
|
218
|
-
$(an).
|
221
|
+
$(an).find('.' + paginateTotalClassName).html(iPages);
|
219
222
|
|
220
|
-
// Current page
|
221
|
-
$(an).
|
223
|
+
// Current page number input value
|
224
|
+
$(an).find('.' + paginateInputClassName).val(iCurrentPage);
|
222
225
|
}
|
223
226
|
};
|
224
|
-
})(jQuery);
|
227
|
+
})(jQuery);
|
@@ -0,0 +1,130 @@
|
|
1
|
+
/**
|
2
|
+
* This modification of DataTables' standard two button pagination controls
|
3
|
+
* adds a little animation effect to the paging action by redrawing the table
|
4
|
+
* multiple times for each event, each draw progressing by one row until the
|
5
|
+
* required point in the table is reached.
|
6
|
+
*
|
7
|
+
* @name Scrolling navigation
|
8
|
+
* @summary Show page changes as a redraw of the table, scrolling records.
|
9
|
+
* @author [Allan Jardine](http://sprymedia.co.uk)
|
10
|
+
*
|
11
|
+
* @example
|
12
|
+
* $(document).ready(function() {
|
13
|
+
* $('#example').dataTable( {
|
14
|
+
* "sPaginationType": "scrolling"
|
15
|
+
* } );
|
16
|
+
* } );
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
/* Time between each scrolling frame */
|
21
|
+
$.fn.dataTableExt.oPagination.iTweenTime = 100;
|
22
|
+
|
23
|
+
$.fn.dataTableExt.oPagination.scrolling = {
|
24
|
+
"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
|
25
|
+
{
|
26
|
+
var oLang = oSettings.oLanguage.oPaginate;
|
27
|
+
var oClasses = oSettings.oClasses;
|
28
|
+
var fnClickHandler = function ( e ) {
|
29
|
+
if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
|
30
|
+
{
|
31
|
+
fnCallbackDraw( oSettings );
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
var sAppend = (!oSettings.bJUI) ?
|
36
|
+
'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+
|
37
|
+
'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>'
|
38
|
+
:
|
39
|
+
'<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+
|
40
|
+
'<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>';
|
41
|
+
$(nPaging).append( sAppend );
|
42
|
+
|
43
|
+
var els = $('a', nPaging);
|
44
|
+
var nPrevious = els[0],
|
45
|
+
nNext = els[1];
|
46
|
+
|
47
|
+
oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, function() {
|
48
|
+
/* Disallow paging event during a current paging event */
|
49
|
+
if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )
|
50
|
+
{
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
|
54
|
+
oSettings.iPagingLoopStart = oSettings._iDisplayStart;
|
55
|
+
oSettings.iPagingEnd = oSettings._iDisplayStart - oSettings._iDisplayLength;
|
56
|
+
|
57
|
+
/* Correct for underrun */
|
58
|
+
if ( oSettings.iPagingEnd < 0 )
|
59
|
+
{
|
60
|
+
oSettings.iPagingEnd = 0;
|
61
|
+
}
|
62
|
+
|
63
|
+
var iTween = $.fn.dataTableExt.oPagination.iTweenTime;
|
64
|
+
var innerLoop = function () {
|
65
|
+
if ( oSettings.iPagingLoopStart > oSettings.iPagingEnd ) {
|
66
|
+
oSettings.iPagingLoopStart--;
|
67
|
+
oSettings._iDisplayStart = oSettings.iPagingLoopStart;
|
68
|
+
fnCallbackDraw( oSettings );
|
69
|
+
setTimeout( function() { innerLoop(); }, iTween );
|
70
|
+
} else {
|
71
|
+
oSettings.iPagingLoopStart = -1;
|
72
|
+
}
|
73
|
+
};
|
74
|
+
innerLoop();
|
75
|
+
} );
|
76
|
+
|
77
|
+
oSettings.oApi._fnBindAction( nNext, {action: "next"}, function() {
|
78
|
+
/* Disallow paging event during a current paging event */
|
79
|
+
if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 )
|
80
|
+
{
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
|
84
|
+
oSettings.iPagingLoopStart = oSettings._iDisplayStart;
|
85
|
+
|
86
|
+
/* Make sure we are not over running the display array */
|
87
|
+
if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
|
88
|
+
{
|
89
|
+
oSettings.iPagingEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
|
90
|
+
}
|
91
|
+
|
92
|
+
var iTween = $.fn.dataTableExt.oPagination.iTweenTime;
|
93
|
+
var innerLoop = function () {
|
94
|
+
if ( oSettings.iPagingLoopStart < oSettings.iPagingEnd ) {
|
95
|
+
oSettings.iPagingLoopStart++;
|
96
|
+
oSettings._iDisplayStart = oSettings.iPagingLoopStart;
|
97
|
+
fnCallbackDraw( oSettings );
|
98
|
+
setTimeout( function() { innerLoop(); }, iTween );
|
99
|
+
} else {
|
100
|
+
oSettings.iPagingLoopStart = -1;
|
101
|
+
}
|
102
|
+
};
|
103
|
+
innerLoop();
|
104
|
+
} );
|
105
|
+
},
|
106
|
+
|
107
|
+
"fnUpdate": function ( oSettings, fnCallbackDraw )
|
108
|
+
{
|
109
|
+
if ( !oSettings.aanFeatures.p )
|
110
|
+
{
|
111
|
+
return;
|
112
|
+
}
|
113
|
+
|
114
|
+
/* Loop over each instance of the pager */
|
115
|
+
var an = oSettings.aanFeatures.p;
|
116
|
+
for ( var i=0, iLen=an.length ; i<iLen ; i++ )
|
117
|
+
{
|
118
|
+
if ( an[i].childNodes.length !== 0 )
|
119
|
+
{
|
120
|
+
an[i].childNodes[0].className =
|
121
|
+
( oSettings._iDisplayStart === 0 ) ?
|
122
|
+
oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled;
|
123
|
+
|
124
|
+
an[i].childNodes[1].className =
|
125
|
+
( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ?
|
126
|
+
oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
};
|
@@ -0,0 +1,97 @@
|
|
1
|
+
/**
|
2
|
+
* This pagination plug-in provides a `dt-tag select` menu with the list of the page
|
3
|
+
* numbers that are available for viewing.
|
4
|
+
*
|
5
|
+
* @name Select list
|
6
|
+
* @summary Show a `dt-tag select` list of pages the user can pick from.
|
7
|
+
* @author _jneilliii_
|
8
|
+
*
|
9
|
+
* @example
|
10
|
+
* $(document).ready(function() {
|
11
|
+
* $('#example').dataTable( {
|
12
|
+
* "sPaginationType": "listbox"
|
13
|
+
* } );
|
14
|
+
* } );
|
15
|
+
*/
|
16
|
+
|
17
|
+
$.fn.dataTableExt.oPagination.listbox = {
|
18
|
+
/*
|
19
|
+
* Function: oPagination.listbox.fnInit
|
20
|
+
* Purpose: Initalise dom elements required for pagination with listbox input
|
21
|
+
* Returns: -
|
22
|
+
* Inputs: object:oSettings - dataTables settings object
|
23
|
+
* node:nPaging - the DIV which contains this pagination control
|
24
|
+
* function:fnCallbackDraw - draw function which must be called on update
|
25
|
+
*/
|
26
|
+
"fnInit": function (oSettings, nPaging, fnCallbackDraw) {
|
27
|
+
var nInput = document.createElement('select');
|
28
|
+
var nPage = document.createElement('span');
|
29
|
+
var nOf = document.createElement('span');
|
30
|
+
nOf.className = "paginate_of";
|
31
|
+
nPage.className = "paginate_page";
|
32
|
+
if (oSettings.sTableId !== '') {
|
33
|
+
nPaging.setAttribute('id', oSettings.sTableId + '_paginate');
|
34
|
+
}
|
35
|
+
nInput.style.display = "inline";
|
36
|
+
nPage.innerHTML = "Page ";
|
37
|
+
nPaging.appendChild(nPage);
|
38
|
+
nPaging.appendChild(nInput);
|
39
|
+
nPaging.appendChild(nOf);
|
40
|
+
$(nInput).change(function (e) { // Set DataTables page property and redraw the grid on listbox change event.
|
41
|
+
window.scroll(0,0); //scroll to top of page
|
42
|
+
if (this.value === "" || this.value.match(/[^0-9]/)) { /* Nothing entered or non-numeric character */
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
var iNewStart = oSettings._iDisplayLength * (this.value - 1);
|
46
|
+
if (iNewStart > oSettings.fnRecordsDisplay()) { /* Display overrun */
|
47
|
+
oSettings._iDisplayStart = (Math.ceil((oSettings.fnRecordsDisplay() - 1) / oSettings._iDisplayLength) - 1) * oSettings._iDisplayLength;
|
48
|
+
fnCallbackDraw(oSettings);
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
oSettings._iDisplayStart = iNewStart;
|
52
|
+
fnCallbackDraw(oSettings);
|
53
|
+
}); /* Take the brutal approach to cancelling text selection */
|
54
|
+
$('span', nPaging).bind('mousedown', function () {
|
55
|
+
return false;
|
56
|
+
});
|
57
|
+
$('span', nPaging).bind('selectstart', function () {
|
58
|
+
return false;
|
59
|
+
});
|
60
|
+
},
|
61
|
+
|
62
|
+
/*
|
63
|
+
* Function: oPagination.listbox.fnUpdate
|
64
|
+
* Purpose: Update the listbox element
|
65
|
+
* Returns: -
|
66
|
+
* Inputs: object:oSettings - dataTables settings object
|
67
|
+
* function:fnCallbackDraw - draw function which must be called on update
|
68
|
+
*/
|
69
|
+
"fnUpdate": function (oSettings, fnCallbackDraw) {
|
70
|
+
if (!oSettings.aanFeatures.p) {
|
71
|
+
return;
|
72
|
+
}
|
73
|
+
var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
|
74
|
+
var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; /* Loop over each instance of the pager */
|
75
|
+
var an = oSettings.aanFeatures.p;
|
76
|
+
for (var i = 0, iLen = an.length; i < iLen; i++) {
|
77
|
+
var spans = an[i].getElementsByTagName('span');
|
78
|
+
var inputs = an[i].getElementsByTagName('select');
|
79
|
+
var elSel = inputs[0];
|
80
|
+
if(elSel.options.length != iPages) {
|
81
|
+
elSel.options.length = 0; //clear the listbox contents
|
82
|
+
for (var j = 0; j < iPages; j++) { //add the pages
|
83
|
+
var oOption = document.createElement('option');
|
84
|
+
oOption.text = j + 1;
|
85
|
+
oOption.value = j + 1;
|
86
|
+
try {
|
87
|
+
elSel.add(oOption, null); // standards compliant; doesn't work in IE
|
88
|
+
} catch (ex) {
|
89
|
+
elSel.add(oOption); // IE only
|
90
|
+
}
|
91
|
+
}
|
92
|
+
spans[1].innerHTML = " of " + iPages;
|
93
|
+
}
|
94
|
+
elSel.value = iCurrentPage;
|
95
|
+
}
|
96
|
+
}
|
97
|
+
};
|
@@ -0,0 +1,154 @@
|
|
1
|
+
/**
|
2
|
+
* This pagination style shows Previous/Next buttons, and page numbers only
|
3
|
+
* for "known" pages that are visited at least once time using [Next>] button.
|
4
|
+
* Initially only Prev/Next buttons are shown (Prev is initially disabled).
|
5
|
+
*
|
6
|
+
* [<Previous] [Next>]
|
7
|
+
*
|
8
|
+
* When user navigates through the pages using [Next>] button, navigation shows
|
9
|
+
* the numbers for the previous pages. As an example, when user reaches page 2,
|
10
|
+
* page numbers 1 and 2 are shown:
|
11
|
+
*
|
12
|
+
* [<Previous] 1 2 [Next>]
|
13
|
+
*
|
14
|
+
* When user reaches page 4, page numbers 1, 2, 3, and 4 are shown:
|
15
|
+
*
|
16
|
+
* [<Previous] 1 2 3 4 [Next>]
|
17
|
+
*
|
18
|
+
* When user navigates back, pagination will remember the last page number
|
19
|
+
* he reached and the numbesr up to the last known page are shown. As an example,
|
20
|
+
* when user returns to the page 2, page numbers 1, 2, 3, and 4 are still shown:
|
21
|
+
*
|
22
|
+
* [<Previous] 1 2 3 4 [Next>]
|
23
|
+
*
|
24
|
+
* This pagination style is designed for users who will not directly jump to
|
25
|
+
* the random page that they have not opened before. Assumption is that users
|
26
|
+
* will discover new pages using [Next>] button. This pagination enables users
|
27
|
+
* to easily go back and forth to any page that they discovered.
|
28
|
+
*
|
29
|
+
* Key benefit: This pagination supports usual pagination pattern and does not
|
30
|
+
* require server to return total count of items just to calculate last page and
|
31
|
+
* all numbers. This migh be huge performance benefit because server does not
|
32
|
+
* need to execute two queries in server-side processing mode:
|
33
|
+
* - One to get the records that will be shown on the current page,
|
34
|
+
* - Second to get the total count just to calculate full pagination.
|
35
|
+
*
|
36
|
+
* Without second query, page load time might be 2x faster, especially in cases
|
37
|
+
* when server can quickly get top 100 records, but it would need to scan entire
|
38
|
+
* database table just to calculate the total count and position of the last
|
39
|
+
* page. This pagination style is reasonable trade-off between simple and fullnumbers
|
40
|
+
* pagination.
|
41
|
+
*
|
42
|
+
* @name Simple Incremental navigation (Bootstrap)
|
43
|
+
* @summary Shows forward/back buttons and all known page numbers.
|
44
|
+
* @author [Jovan Popovic](http://github.com/JocaPC)
|
45
|
+
*
|
46
|
+
* @example
|
47
|
+
* $(document).ready(function() {
|
48
|
+
* $('#example').dataTable( {
|
49
|
+
* "pagingType": "simple_incremental_bootstrap"
|
50
|
+
* } );
|
51
|
+
* } );
|
52
|
+
*/
|
53
|
+
|
54
|
+
$.fn.dataTableExt.oPagination.simple_incremental_bootstrap = {
|
55
|
+
|
56
|
+
"fnInit": function (oSettings, nPaging, fnCallbackDraw) {
|
57
|
+
$(nPaging).prepend($("<ul class=\"pagination\"></ul>"));
|
58
|
+
var ul = $("ul", $(nPaging));
|
59
|
+
nFirst = document.createElement('li');
|
60
|
+
nPrevious = document.createElement('li');
|
61
|
+
nNext = document.createElement('li');
|
62
|
+
|
63
|
+
$(nPrevious).append($('<span>' + (oSettings.oLanguage.oPaginate.sPrevious) + '</span>'));
|
64
|
+
$(nFirst).append($('<span>1</span>'));
|
65
|
+
$(nNext).append($('<span>' + (oSettings.oLanguage.oPaginate.sNext) + '</span>'));
|
66
|
+
|
67
|
+
nFirst.className = "paginate_button first active";
|
68
|
+
nPrevious.className = "paginate_button previous";
|
69
|
+
nNext.className = "paginate_button next";
|
70
|
+
|
71
|
+
ul.append(nPrevious);
|
72
|
+
ul.append(nFirst);
|
73
|
+
ul.append(nNext);
|
74
|
+
|
75
|
+
$(nFirst).click(function () {
|
76
|
+
oSettings.oApi._fnPageChange(oSettings, "first");
|
77
|
+
fnCallbackDraw(oSettings);
|
78
|
+
});
|
79
|
+
|
80
|
+
$(nPrevious).click(function () {
|
81
|
+
if (!(oSettings._iDisplayStart === 0)) {
|
82
|
+
oSettings.oApi._fnPageChange(oSettings, "previous");
|
83
|
+
fnCallbackDraw(oSettings);
|
84
|
+
}
|
85
|
+
});
|
86
|
+
|
87
|
+
$(nNext).click(function () {
|
88
|
+
if (!(oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()
|
89
|
+
||
|
90
|
+
oSettings.aiDisplay.length < oSettings._iDisplayLength)) {
|
91
|
+
oSettings.oApi._fnPageChange(oSettings, "next");
|
92
|
+
fnCallbackDraw(oSettings);
|
93
|
+
}
|
94
|
+
});
|
95
|
+
|
96
|
+
/* Disallow text selection */
|
97
|
+
$(nFirst).bind('selectstart', function () { return false; });
|
98
|
+
$(nPrevious).bind('selectstart', function () { return false; });
|
99
|
+
$(nNext).bind('selectstart', function () { return false; });
|
100
|
+
|
101
|
+
// Reset dynamically generated pages on length/filter change.
|
102
|
+
$(oSettings.nTable).DataTable().on('length.dt', function (e, settings, len) {
|
103
|
+
$("li.dynamic_page_item", nPaging).remove();
|
104
|
+
});
|
105
|
+
|
106
|
+
$(oSettings.nTable).DataTable().on('search.dt', function (e, settings, len) {
|
107
|
+
$("li.dynamic_page_item", nPaging).remove();
|
108
|
+
});
|
109
|
+
},
|
110
|
+
|
111
|
+
/*
|
112
|
+
* Function: oPagination.simple_incremental_bootstrap.fnUpdate
|
113
|
+
* Purpose: Update the list of page buttons shows
|
114
|
+
* Inputs: object:oSettings - dataTables settings object
|
115
|
+
* function:fnCallbackDraw - draw function which must be called on update
|
116
|
+
*/
|
117
|
+
"fnUpdate": function (oSettings, fnCallbackDraw) {
|
118
|
+
if (!oSettings.aanFeatures.p) {
|
119
|
+
return;
|
120
|
+
}
|
121
|
+
|
122
|
+
/* Loop over each instance of the pager */
|
123
|
+
var an = oSettings.aanFeatures.p;
|
124
|
+
for (var i = 0, iLen = an.length ; i < iLen ; i++) {
|
125
|
+
var buttons = an[i].getElementsByTagName('li');
|
126
|
+
$(buttons).removeClass("active");
|
127
|
+
|
128
|
+
if (oSettings._iDisplayStart === 0) {
|
129
|
+
buttons[0].className = "paginate_buttons disabled previous";
|
130
|
+
buttons[buttons.length - 1].className = "paginate_button enabled next";
|
131
|
+
} else {
|
132
|
+
buttons[0].className = "paginate_buttons enabled previous";
|
133
|
+
}
|
134
|
+
|
135
|
+
var page = Math.round(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
|
136
|
+
if (page == buttons.length-1 && oSettings.aiDisplay.length > 0) {
|
137
|
+
$new = $('<li class="dynamic_page_item active"><span>' + page + "</span></li>");
|
138
|
+
$(buttons[buttons.length - 1]).before($new);
|
139
|
+
$new.click(function () {
|
140
|
+
$(oSettings.nTable).DataTable().page(page-1);
|
141
|
+
|
142
|
+
fnCallbackDraw(oSettings);
|
143
|
+
});
|
144
|
+
} else
|
145
|
+
$(buttons[page]).addClass("active");
|
146
|
+
|
147
|
+
if (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()
|
148
|
+
||
|
149
|
+
oSettings.aiDisplay.length < oSettings._iDisplayLength) {
|
150
|
+
buttons[buttons.length - 1].className = "paginate_button disabled next";
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
};
|