migrate discovery source codes from OPEN-O
[msb/discovery.git] / discovery-ui / src / main / resources / iui / microservices / js / dataTable.js
diff --git a/discovery-ui/src/main/resources/iui/microservices/js/dataTable.js b/discovery-ui/src/main/resources/iui/microservices/js/dataTable.js
new file mode 100644 (file)
index 0000000..66994f5
--- /dev/null
@@ -0,0 +1,148 @@
+/*\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