datatables-rails-bs3 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +15 -0
  2. data/lib/datatables-rails-bs3.rb +2 -0
  3. data/lib/jquery/datatables/rails/engine.rb +11 -0
  4. data/lib/jquery/datatables/rails/version.rb +7 -0
  5. data/vendor/assets/images/dataTables/back_disabled.png +0 -0
  6. data/vendor/assets/images/dataTables/back_enabled.png +0 -0
  7. data/vendor/assets/images/dataTables/back_enabled_hover.png +0 -0
  8. data/vendor/assets/images/dataTables/extras/background.png +0 -0
  9. data/vendor/assets/images/dataTables/extras/collection.png +0 -0
  10. data/vendor/assets/images/dataTables/extras/collection_hover.png +0 -0
  11. data/vendor/assets/images/dataTables/extras/copy.png +0 -0
  12. data/vendor/assets/images/dataTables/extras/copy_hover.png +0 -0
  13. data/vendor/assets/images/dataTables/extras/csv.png +0 -0
  14. data/vendor/assets/images/dataTables/extras/csv_hover.png +0 -0
  15. data/vendor/assets/images/dataTables/extras/pdf.png +0 -0
  16. data/vendor/assets/images/dataTables/extras/pdf_hover.png +0 -0
  17. data/vendor/assets/images/dataTables/extras/print.png +0 -0
  18. data/vendor/assets/images/dataTables/extras/print_hover.png +0 -0
  19. data/vendor/assets/images/dataTables/extras/xls.png +0 -0
  20. data/vendor/assets/images/dataTables/extras/xls_hover.png +0 -0
  21. data/vendor/assets/images/dataTables/favicon.ico +0 -0
  22. data/vendor/assets/images/dataTables/forward_disabled.png +0 -0
  23. data/vendor/assets/images/dataTables/forward_enabled.png +0 -0
  24. data/vendor/assets/images/dataTables/forward_enabled_hover.png +0 -0
  25. data/vendor/assets/images/dataTables/sort_asc.png +0 -0
  26. data/vendor/assets/images/dataTables/sort_asc_disabled.png +0 -0
  27. data/vendor/assets/images/dataTables/sort_both.png +0 -0
  28. data/vendor/assets/images/dataTables/sort_desc.png +0 -0
  29. data/vendor/assets/images/dataTables/sort_desc_disabled.png +0 -0
  30. data/vendor/assets/javascripts/dataTables/extras/AutoFill.js +820 -0
  31. data/vendor/assets/javascripts/dataTables/extras/ColReorder.js +956 -0
  32. data/vendor/assets/javascripts/dataTables/extras/ColVis.js +1013 -0
  33. data/vendor/assets/javascripts/dataTables/extras/FixedColumns.js +1240 -0
  34. data/vendor/assets/javascripts/dataTables/extras/FixedHeader.js +937 -0
  35. data/vendor/assets/javascripts/dataTables/extras/KeyTable.js +1111 -0
  36. data/vendor/assets/javascripts/dataTables/extras/Scroller.js +904 -0
  37. data/vendor/assets/javascripts/dataTables/extras/TableTools.js +2424 -0
  38. data/vendor/assets/javascripts/dataTables/extras/TableTools.min.js +76 -0
  39. data/vendor/assets/javascripts/dataTables/extras/ZeroClipboard.js +367 -0
  40. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnFilterOnReturn.js +17 -0
  41. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnGetColumnData.js +54 -0
  42. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnReloadAjax.js +44 -0
  43. data/vendor/assets/javascripts/dataTables/jquery.dataTables.api.fnSetFilteringDelay.js +32 -0
  44. data/vendor/assets/javascripts/dataTables/jquery.dataTables.bootstrap.js +383 -0
  45. data/vendor/assets/javascripts/dataTables/jquery.dataTables.js +12098 -0
  46. data/vendor/assets/javascripts/dataTables/jquery.dataTables.sorting.numbersHtml.js +15 -0
  47. data/vendor/assets/javascripts/dataTables/jquery.dataTables.typeDetection.numbersHtml.js +40 -0
  48. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboard.as +221 -0
  49. data/vendor/assets/media/dataTables/extras/as3/ZeroClipboardPdf.as +310 -0
  50. data/vendor/assets/media/dataTables/extras/as3/lib/AlivePDF.swc +0 -0
  51. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls.swf +0 -0
  52. data/vendor/assets/media/dataTables/extras/swf/copy_csv_xls_pdf.swf +0 -0
  53. data/vendor/assets/stylesheets/dataTables/extras/TableTools.css +314 -0
  54. data/vendor/assets/stylesheets/dataTables/extras/TableTools_JUI.css +185 -0
  55. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.bootstrap.css.scss +177 -0
  56. data/vendor/assets/stylesheets/dataTables/jquery.dataTables.css.scss +220 -0
  57. data/vendor/assets/stylesheets/dataTables/src/demo_page.css +107 -0
  58. data/vendor/assets/stylesheets/dataTables/src/demo_table.css +575 -0
  59. data/vendor/assets/stylesheets/dataTables/src/demo_table_jui.css +530 -0
  60. data/vendor/assets/stylesheets/dataTables/src/jquery.dataTables_themeroller.css +243 -0
  61. metadata +116 -0
@@ -0,0 +1,54 @@
1
+ (function($) {
2
+ /*
3
+ * Function: fnGetColumnData
4
+ * Purpose: Return an array of table values from a particular column.
5
+ * Returns: array string: 1d data array
6
+ * Inputs: object:oSettings - dataTable settings object. This is always the last argument past to the function
7
+ * int:iColumn - the id of the column to extract the data from
8
+ * bool:bUnique - optional - if set to false duplicated values are not filtered out
9
+ * bool:bFiltered - optional - if set to false all the table data is used (not only the filtered)
10
+ * bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array
11
+ * Author: Benedikt Forchhammer <b.forchhammer /AT\ mind2.de>
12
+ */
13
+ $.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) {
14
+ // check that we have a column id
15
+ if ( typeof iColumn == "undefined" ) return new Array();
16
+
17
+ // by default we only wany unique data
18
+ if ( typeof bUnique == "undefined" ) bUnique = true;
19
+
20
+ // by default we do want to only look at filtered data
21
+ if ( typeof bFiltered == "undefined" ) bFiltered = true;
22
+
23
+ // by default we do not wany to include empty values
24
+ if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;
25
+
26
+ // list of rows which we're going to loop through
27
+ var aiRows;
28
+
29
+ // use only filtered rows
30
+ if (bFiltered == true) aiRows = oSettings.aiDisplay;
31
+ // use all rows
32
+ else aiRows = oSettings.aiDisplayMaster; // all row numbers
33
+
34
+ // set up data array
35
+ var asResultData = new Array();
36
+
37
+ for (var i=0,c=aiRows.length; i<c; i++) {
38
+ iRow = aiRows[i];
39
+ var sValue = this.fnGetData(iRow, iColumn);
40
+
41
+ // ignore empty values?
42
+ if (bIgnoreEmpty == true && sValue.length == 0) continue;
43
+
44
+ // ignore unique values?
45
+ else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;
46
+
47
+ // else push the value onto the result data array
48
+ else asResultData.push(sValue);
49
+ }
50
+
51
+ return asResultData;
52
+ }
53
+
54
+ }(jQuery));
@@ -0,0 +1,44 @@
1
+ $.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource, fnCallback, bStandingRedraw )
2
+ {
3
+ if ( typeof sNewSource != 'undefined' && sNewSource != null )
4
+ {
5
+ oSettings.sAjaxSource = sNewSource;
6
+ }
7
+ this.oApi._fnProcessingDisplay( oSettings, true );
8
+ var that = this;
9
+ var iStart = oSettings._iDisplayStart;
10
+ var aData = [];
11
+
12
+ this.oApi._fnServerParams( oSettings, aData );
13
+
14
+ oSettings.fnServerData( oSettings.sAjaxSource, aData, function(json) {
15
+ /* Clear the old information from the table */
16
+ that.oApi._fnClearTable( oSettings );
17
+
18
+ /* Got the data - add it to the table */
19
+ var aData = (oSettings.sAjaxDataProp !== "") ?
20
+ that.oApi._fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ) : json;
21
+
22
+ for ( var i=0 ; i<aData.length ; i++ )
23
+ {
24
+ that.oApi._fnAddData( oSettings, aData[i] );
25
+ }
26
+
27
+ oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
28
+ that.fnDraw();
29
+
30
+ if ( typeof bStandingRedraw != 'undefined' && bStandingRedraw === true )
31
+ {
32
+ oSettings._iDisplayStart = iStart;
33
+ that.fnDraw( false );
34
+ }
35
+
36
+ that.oApi._fnProcessingDisplay( oSettings, false );
37
+
38
+ /* Callback user function - for event handlers etc */
39
+ if ( typeof fnCallback == 'function' && fnCallback != null )
40
+ {
41
+ fnCallback( oSettings );
42
+ }
43
+ }, oSettings );
44
+ }
@@ -0,0 +1,32 @@
1
+ jQuery.fn.dataTableExt.oApi.fnSetFilteringDelay = function ( oSettings, iDelay ) {
2
+ var _that = this;
3
+
4
+ if ( iDelay === undefined ) {
5
+ iDelay = 250;
6
+ }
7
+
8
+ this.each( function ( i ) {
9
+ $.fn.dataTableExt.iApiIndex = i;
10
+ var
11
+ $this = this,
12
+ oTimerId = null,
13
+ sPreviousSearch = null,
14
+ anControl = $( 'input', _that.fnSettings().aanFeatures.f );
15
+
16
+ anControl.unbind( 'keyup' ).bind( 'keyup', function() {
17
+ var $$this = $this;
18
+
19
+ if (sPreviousSearch === null || sPreviousSearch != anControl.val()) {
20
+ window.clearTimeout(oTimerId);
21
+ sPreviousSearch = anControl.val();
22
+ oTimerId = window.setTimeout(function() {
23
+ $.fn.dataTableExt.iApiIndex = i;
24
+ _that.fnFilter( anControl.val() );
25
+ }, iDelay);
26
+ }
27
+ });
28
+
29
+ return this;
30
+ } );
31
+ return this;
32
+ };
@@ -0,0 +1,383 @@
1
+ /* Set the defaults for DataTables initialisation */
2
+ $.extend( true, $.fn.dataTable.defaults, {
3
+ "sDom": "<'row'<'col-sm-12'<'pull-right'f><'pull-left'l>r<'clearfix'>>>t<'row'<'col-sm-12'<'pull-left'i><'pull-right'p><'clearfix'>>>",
4
+ "sPaginationType": "bs_normal",
5
+ "oLanguage": {
6
+ "sLengthMenu": "Show _MENU_ Rows",
7
+ "sSearch": ""
8
+ }
9
+ } );
10
+
11
+ /* Default class modification */
12
+ $.extend( $.fn.dataTableExt.oStdClasses, {
13
+ "sWrapper": "dataTables_wrapper form-inline"
14
+ } );
15
+
16
+ /* API method to get paging information */
17
+ $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
18
+ {
19
+ return {
20
+ "iStart": oSettings._iDisplayStart,
21
+ "iEnd": oSettings.fnDisplayEnd(),
22
+ "iLength": oSettings._iDisplayLength,
23
+ "iTotal": oSettings.fnRecordsTotal(),
24
+ "iFilteredTotal": oSettings.fnRecordsDisplay(),
25
+ "iPage": oSettings._iDisplayLength === -1 ?
26
+ 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
27
+ "iTotalPages": oSettings._iDisplayLength === -1 ?
28
+ 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
29
+ };
30
+ };
31
+
32
+ /* Bootstrap style pagination control */
33
+ $.extend( $.fn.dataTableExt.oPagination, {
34
+ "bs_normal": {
35
+ "fnInit": function( oSettings, nPaging, fnDraw ) {
36
+ var oLang = oSettings.oLanguage.oPaginate;
37
+ var fnClickHandler = function ( e ) {
38
+ e.preventDefault();
39
+ if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
40
+ fnDraw( oSettings );
41
+ }
42
+ };
43
+ $(nPaging).append(
44
+ '<ul class="pagination">'+
45
+ '<li class="prev disabled"><a href="#"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
46
+ '<li class="next disabled"><a href="#">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
47
+ '</ul>'
48
+ );
49
+ var els = $('a', nPaging);
50
+ $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
51
+ $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
52
+ },
53
+ "fnUpdate": function ( oSettings, fnDraw ) {
54
+ var iListLength = 5;
55
+ var oPaging = oSettings.oInstance.fnPagingInfo();
56
+ var an = oSettings.aanFeatures.p;
57
+ var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
58
+ if ( oPaging.iTotalPages < iListLength) {
59
+ iStart = 1;
60
+ iEnd = oPaging.iTotalPages;
61
+ }
62
+ else if ( oPaging.iPage <= iHalf ) {
63
+ iStart = 1;
64
+ iEnd = iListLength;
65
+ } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
66
+ iStart = oPaging.iTotalPages - iListLength + 1;
67
+ iEnd = oPaging.iTotalPages;
68
+ } else {
69
+ iStart = oPaging.iPage - iHalf + 1;
70
+ iEnd = iStart + iListLength - 1;
71
+ }
72
+ for ( i=0, ien=an.length ; i<ien ; i++ ) {
73
+ $('li:gt(0)', an[i]).filter(':not(:last)').remove();
74
+ for ( j=iStart ; j<=iEnd ; j++ ) {
75
+ sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
76
+ $('<li '+sClass+'><a href="#">'+j+'</a></li>')
77
+ .insertBefore( $('li:last', an[i])[0] )
78
+ .bind('click', function (e) {
79
+ e.preventDefault();
80
+ oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
81
+ fnDraw( oSettings );
82
+ } );
83
+ }
84
+ if ( oPaging.iPage === 0 ) {
85
+ $('li:first', an[i]).addClass('disabled');
86
+ } else {
87
+ $('li:first', an[i]).removeClass('disabled');
88
+ }
89
+
90
+ if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
91
+ $('li:last', an[i]).addClass('disabled');
92
+ } else {
93
+ $('li:last', an[i]).removeClass('disabled');
94
+ }
95
+ }
96
+ }
97
+ },
98
+ "bs_two_button": {
99
+ "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
100
+ {
101
+ var oLang = oSettings.oLanguage.oPaginate;
102
+ var oClasses = oSettings.oClasses;
103
+ var fnClickHandler = function ( e ) {
104
+ if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
105
+ {
106
+ fnCallbackDraw( oSettings );
107
+ }
108
+ };
109
+ var sAppend = '<ul class="pagination">'+
110
+ '<li class="prev"><a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
111
+ '<li class="next"><a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
112
+ '</ul>';
113
+ $(nPaging).append( sAppend );
114
+ var els = $('a', nPaging);
115
+ var nPrevious = els[0],
116
+ nNext = els[1];
117
+ oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
118
+ oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
119
+ if ( !oSettings.aanFeatures.p )
120
+ {
121
+ nPaging.id = oSettings.sTableId+'_paginate';
122
+ nPrevious.id = oSettings.sTableId+'_previous';
123
+ nNext.id = oSettings.sTableId+'_next';
124
+ nPrevious.setAttribute('aria-controls', oSettings.sTableId);
125
+ nNext.setAttribute('aria-controls', oSettings.sTableId);
126
+ }
127
+ },
128
+ "fnUpdate": function ( oSettings, fnCallbackDraw )
129
+ {
130
+ if ( !oSettings.aanFeatures.p )
131
+ {
132
+ return;
133
+ }
134
+ var oPaging = oSettings.oInstance.fnPagingInfo();
135
+ var oClasses = oSettings.oClasses;
136
+ var an = oSettings.aanFeatures.p;
137
+ var nNode;
138
+ for ( var i=0, iLen=an.length ; i<iLen ; i++ )
139
+ {
140
+ if ( oPaging.iPage === 0 ) {
141
+ $('li:first', an[i]).addClass('disabled');
142
+ } else {
143
+ $('li:first', an[i]).removeClass('disabled');
144
+ }
145
+
146
+ if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
147
+ $('li:last', an[i]).addClass('disabled');
148
+ } else {
149
+ $('li:last', an[i]).removeClass('disabled');
150
+ }
151
+ }
152
+ }
153
+ },
154
+ "bs_four_button": {
155
+ "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
156
+ {
157
+ var oLang = oSettings.oLanguage.oPaginate;
158
+ var oClasses = oSettings.oClasses;
159
+ var fnClickHandler = function ( e ) {
160
+ if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
161
+ {
162
+ fnCallbackDraw( oSettings );
163
+ }
164
+ };
165
+ $(nPaging).append(
166
+ '<ul class="pagination">'+
167
+ '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'"><span class="glyphicon glyphicon-backward"></span>&nbsp;'+oLang.sFirst+'</a></li>'+
168
+ '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'"><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;'+oLang.sPrevious+'</a></li>'+
169
+ '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
170
+ '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'&nbsp;<span class="glyphicon glyphicon-forward"></span></a></li>'+
171
+ '</ul>'
172
+ );
173
+ var els = $('a', nPaging);
174
+ var nFirst = els[0],
175
+ nPrev = els[1],
176
+ nNext = els[2],
177
+ nLast = els[3];
178
+ oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
179
+ oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
180
+ oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
181
+ oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
182
+ if ( !oSettings.aanFeatures.p )
183
+ {
184
+ nPaging.id = oSettings.sTableId+'_paginate';
185
+ nFirst.id =oSettings.sTableId+'_first';
186
+ nPrev.id =oSettings.sTableId+'_previous';
187
+ nNext.id =oSettings.sTableId+'_next';
188
+ nLast.id =oSettings.sTableId+'_last';
189
+ }
190
+ },
191
+ "fnUpdate": function ( oSettings, fnCallbackDraw )
192
+ {
193
+ if ( !oSettings.aanFeatures.p )
194
+ {
195
+ return;
196
+ }
197
+ var oPaging = oSettings.oInstance.fnPagingInfo();
198
+ var oClasses = oSettings.oClasses;
199
+ var an = oSettings.aanFeatures.p;
200
+ var nNode;
201
+ for ( var i=0, iLen=an.length ; i<iLen ; i++ )
202
+ {
203
+ if ( oPaging.iPage === 0 ) {
204
+ $('li:eq(0)', an[i]).addClass('disabled');
205
+ $('li:eq(1)', an[i]).addClass('disabled');
206
+ } else {
207
+ $('li:eq(0)', an[i]).removeClass('disabled');
208
+ $('li:eq(1)', an[i]).removeClass('disabled');
209
+ }
210
+
211
+ if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
212
+ $('li:eq(2)', an[i]).addClass('disabled');
213
+ $('li:eq(3)', an[i]).addClass('disabled');
214
+ } else {
215
+ $('li:eq(2)', an[i]).removeClass('disabled');
216
+ $('li:eq(3)', an[i]).removeClass('disabled');
217
+ }
218
+ }
219
+ }
220
+ },
221
+ "bs_full": {
222
+ "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
223
+ {
224
+ var oLang = oSettings.oLanguage.oPaginate;
225
+ var oClasses = oSettings.oClasses;
226
+ var fnClickHandler = function ( e ) {
227
+ if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
228
+ {
229
+ fnCallbackDraw( oSettings );
230
+ }
231
+ };
232
+ $(nPaging).append(
233
+ '<ul class="pagination">'+
234
+ '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a></li>'+
235
+ '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a></li>'+
236
+ '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a></li>'+
237
+ '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a></li>'+
238
+ '</ul>'
239
+ );
240
+ var els = $('a', nPaging);
241
+ var nFirst = els[0],
242
+ nPrev = els[1],
243
+ nNext = els[2],
244
+ nLast = els[3];
245
+ oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
246
+ oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
247
+ oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
248
+ oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
249
+ if ( !oSettings.aanFeatures.p )
250
+ {
251
+ nPaging.id = oSettings.sTableId+'_paginate';
252
+ nFirst.id =oSettings.sTableId+'_first';
253
+ nPrev.id =oSettings.sTableId+'_previous';
254
+ nNext.id =oSettings.sTableId+'_next';
255
+ nLast.id =oSettings.sTableId+'_last';
256
+ }
257
+ },
258
+ "fnUpdate": function ( oSettings, fnCallbackDraw )
259
+ {
260
+ if ( !oSettings.aanFeatures.p )
261
+ {
262
+ return;
263
+ }
264
+ var oPaging = oSettings.oInstance.fnPagingInfo();
265
+ var iPageCount = $.fn.dataTableExt.oPagination.iFullNumbersShowPages;
266
+ var iPageCountHalf = Math.floor(iPageCount / 2);
267
+ var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
268
+ var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
269
+ var sList = "";
270
+ var iStartButton, iEndButton, i, iLen;
271
+ var oClasses = oSettings.oClasses;
272
+ var anButtons, anStatic, nPaginateList, nNode;
273
+ var an = oSettings.aanFeatures.p;
274
+ var fnBind = function (j) {
275
+ oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
276
+ oSettings.oApi._fnPageChange( oSettings, e.data.page );
277
+ fnCallbackDraw( oSettings );
278
+ e.preventDefault();
279
+ } );
280
+ };
281
+ if ( oSettings._iDisplayLength === -1 )
282
+ {
283
+ iStartButton = 1;
284
+ iEndButton = 1;
285
+ iCurrentPage = 1;
286
+ }
287
+ else if (iPages < iPageCount)
288
+ {
289
+ iStartButton = 1;
290
+ iEndButton = iPages;
291
+ }
292
+ else if (iCurrentPage <= iPageCountHalf)
293
+ {
294
+ iStartButton = 1;
295
+ iEndButton = iPageCount;
296
+ }
297
+ else if (iCurrentPage >= (iPages - iPageCountHalf))
298
+ {
299
+ iStartButton = iPages - iPageCount + 1;
300
+ iEndButton = iPages;
301
+ }
302
+ else
303
+ {
304
+ iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
305
+ iEndButton = iStartButton + iPageCount - 1;
306
+ }
307
+ for ( i=iStartButton ; i<=iEndButton ; i++ )
308
+ {
309
+ sList += (iCurrentPage !== i) ?
310
+ '<li><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>' :
311
+ '<li class="active"><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>';
312
+ }
313
+ for ( i=0, iLen=an.length ; i<iLen ; i++ )
314
+ {
315
+ nNode = an[i];
316
+ if ( !nNode.hasChildNodes() )
317
+ {
318
+ continue;
319
+ }
320
+ $('li:gt(1)', an[i]).filter(':not(li:eq(-2))').filter(':not(li:eq(-1))').remove();
321
+ if ( oPaging.iPage === 0 ) {
322
+ $('li:eq(0)', an[i]).addClass('disabled');
323
+ $('li:eq(1)', an[i]).addClass('disabled');
324
+ } else {
325
+ $('li:eq(0)', an[i]).removeClass('disabled');
326
+ $('li:eq(1)', an[i]).removeClass('disabled');
327
+ }
328
+ if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
329
+ $('li:eq(-1)', an[i]).addClass('disabled');
330
+ $('li:eq(-2)', an[i]).addClass('disabled');
331
+ } else {
332
+ $('li:eq(-1)', an[i]).removeClass('disabled');
333
+ $('li:eq(-2)', an[i]).removeClass('disabled');
334
+ }
335
+ $(sList)
336
+ .insertBefore('li:eq(-2)', an[i])
337
+ .bind('click', function (e) {
338
+ e.preventDefault();
339
+ oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
340
+ fnCallbackDraw( oSettings );
341
+ });
342
+ }
343
+ }
344
+ }
345
+ } );
346
+
347
+
348
+ /*
349
+ * TableTools Bootstrap compatibility
350
+ * Required TableTools 2.1+
351
+ */
352
+ if ( $.fn.DataTable.TableTools ) {
353
+ // Set the classes that TableTools uses to something suitable for Bootstrap
354
+ $.extend( true, $.fn.DataTable.TableTools.classes, {
355
+ "container": "DTTT btn-group",
356
+ "buttons": {
357
+ "normal": "btn",
358
+ "disabled": "disabled"
359
+ },
360
+ "collection": {
361
+ "container": "DTTT_dropdown dropdown-menu",
362
+ "buttons": {
363
+ "normal": "",
364
+ "disabled": "disabled"
365
+ }
366
+ },
367
+ "print": {
368
+ "info": "DTTT_print_info modal"
369
+ },
370
+ "select": {
371
+ "row": "active"
372
+ }
373
+ } );
374
+
375
+ // Have the collection use a bootstrap compatible dropdown
376
+ $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
377
+ "collection": {
378
+ "container": "ul",
379
+ "button": "li",
380
+ "liner": "a"
381
+ }
382
+ } );
383
+ }