--- /dev/null
+/*\r
+ * Copyright 2016 ZTE, Inc. and others.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+$.fn.dataTableExt.oApi.fnPagingInfo = function (oSettings) {\r
+ return {\r
+ "iEnd": oSettings.fnDisplayEnd(),\r
+ "iLength": oSettings._iDisplayLength,\r
+ "iTotal": oSettings.fnRecordsTotal(),\r
+ "iFilteredTotal": oSettings.fnRecordsDisplay(),\r
+ "iPage": Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),\r
+ "iTotalPages": Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)\r
+ };\r
+};\r
+\r
+$.extend($.fn.dataTableExt.oPagination, {\r
+ "bootstrap_extended": {\r
+ "fnInit": function (oSettings, nPaging, fnDraw) {\r
+ var oLang = oSettings.oLanguage.oPaginate;\r
+ var oPaging = oSettings.oInstance.fnPagingInfo();\r
+\r
+ var fnClickHandler = function (e) {\r
+ e.preventDefault();\r
+ if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {\r
+ fnDraw(oSettings);\r
+ }\r
+ };\r
+\r
+ $(nPaging).append(\r
+ '<div class="pagination-panel"> ' + oLang.sPage + ' ' +\r
+ '<a href="#" class="btn btn-sm default prev disabled" title="' + oLang.sPrevious + '"><i class="fa fa-angle-left"></i></a>' +\r
+ '<input type="text" class="pagination-panel-input input-mini input-inline input-sm" maxlenght="5" style="text-align:center; margin: 0 4px; border: 1px solid rgb(169, 169, 169);height: 28px;">' +\r
+ '<a href="#" class="btn btn-sm default next disabled" title="' + oLang.sNext + '"><i class="fa fa-angle-right"></i></a> ' +\r
+ oLang.sPageOf + ' <span class="pagination-panel-total"></span>' +\r
+ '</div>'\r
+ );\r
+\r
+ var els = $('a', nPaging);\r
+\r
+ $(els[0]).bind('click.DT', {action: "previous"}, fnClickHandler);\r
+ $(els[1]).bind('click.DT', {action: "next"}, fnClickHandler);\r
+\r
+ $('.pagination-panel-input', nPaging).bind('change.DT', function (e) {\r
+ var oPaging = oSettings.oInstance.fnPagingInfo();\r
+ e.preventDefault();\r
+ var page = parseInt($(this).val());\r
+ if (page > 0 && page < oPaging.iTotalPages) {\r
+ if (oSettings.oApi._fnPageChange(oSettings, page - 1)) {\r
+ fnDraw(oSettings);\r
+ }\r
+ } else {\r
+ $(this).val(oPaging.iPage + 1);\r
+ }\r
+ });\r
+\r
+ $('.pagination-panel-input', nPaging).bind('keypress.DT', function (e) {\r
+ var oPaging = oSettings.oInstance.fnPagingInfo();\r
+ if (e.which == 13) {\r
+ var page = parseInt($(this).val());\r
+ if (page > 0 && page < oSettings.oInstance.fnPagingInfo().iTotalPages) {\r
+ if (oSettings.oApi._fnPageChange(oSettings, page - 1)) {\r
+ fnDraw(oSettings);\r
+ }\r
+ } else {\r
+ $(this).val(oPaging.iPage + 1);\r
+ }\r
+ e.preventDefault();\r
+ }\r
+ });\r
+ },\r
+\r
+ "fnUpdate": function (oSettings, fnDraw) {\r
+ var iListLength = 5;\r
+ var oPaging = oSettings.oInstance.fnPagingInfo();\r
+ var an = oSettings.aanFeatures.p;\r
+ var i, j, sClass, iStart, iEnd, iHalf = Math.floor(iListLength / 2);\r
+\r
+ if (oPaging.iTotalPages < iListLength) {\r
+ iStart = 1;\r
+ iEnd = oPaging.iTotalPages;\r
+ }\r
+ else if (oPaging.iPage <= iHalf) {\r
+ iStart = 1;\r
+ iEnd = iListLength;\r
+ } else if (oPaging.iPage >= (oPaging.iTotalPages - iHalf)) {\r
+ iStart = oPaging.iTotalPages - iListLength + 1;\r
+ iEnd = oPaging.iTotalPages;\r
+ } else {\r
+ iStart = oPaging.iPage - iHalf + 1;\r
+ iEnd = iStart + iListLength - 1;\r
+ }\r
+\r
+\r
+ for (i = 0, iLen = an.length; i < iLen; i++) {\r
+ var wrapper = $(an[i]).parents(".dataTables_wrapper");\r
+\r
+ if (oPaging.iTotalPages <= 0) {\r
+ $('.pagination-panel, .dataTables_length', wrapper).hide();\r
+ } else {\r
+ $('.pagination-panel, .dataTables_length', wrapper).show();\r
+ }\r
+\r
+ $('.pagination-panel-total', an[i]).html(oPaging.iTotalPages);\r
+ $('.pagination-panel-input', an[i]).val(oPaging.iPage + 1);\r
+\r
+ // Remove the middle elements\r
+ $('li:gt(1)', an[i]).filter(':not(.next)').remove();\r
+\r
+ // Add the new list items and their event handlers\r
+ for (j = iStart; j <= iEnd; j++) {\r
+ sClass = (j == oPaging.iPage + 1) ? 'class="active"' : '';\r
+ $('<li ' + sClass + '><a href="#">' + j + '</a></li>')\r
+ .insertBefore($('li.next:first', an[i])[0])\r
+ .bind('click', function (e) {\r
+ e.preventDefault();\r
+ oSettings._iDisplayStart = (parseInt($('a', this).text(), 10) - 1) * oPaging.iLength;\r
+ fnDraw(oSettings);\r
+ });\r
+ }\r
+\r
+ // Add / remove disabled classes from the static elements\r
+ if (oPaging.iPage === 0) {\r
+ $('a.prev', an[i]).addClass('disabled');\r
+ } else {\r
+ $('a.prev', an[i]).removeClass('disabled');\r
+ }\r
+\r
+ if (oPaging.iPage === oPaging.iTotalPages - 1 || oPaging.iTotalPages === 0) {\r
+ $('a.next', an[i]).addClass('disabled');\r
+ } else {\r
+ $('a.next', an[i]).removeClass('disabled');\r
+ }\r
+ }\r
+ }\r
+ }\r
+});\r