diff --git a/DnsServerCore/www/js/zone.js b/DnsServerCore/www/js/zone.js index c74d5f26..d5136471 100644 --- a/DnsServerCore/www/js/zone.js +++ b/DnsServerCore/www/js/zone.js @@ -269,16 +269,37 @@ $(function () { break; } }); + + $("#optZonesPerPage").change(function () { + localStorage.setItem("optZonesPerPage", $("#optZonesPerPage").val()); + }); + + var optZonesPerPage = localStorage.getItem("optZonesPerPage"); + if (optZonesPerPage != null) + $("#optZonesPerPage").val(optZonesPerPage); }); -function refreshZones(checkDisplay) { +function refreshZones(checkDisplay, pageNumber) { if (checkDisplay == null) checkDisplay = false; var divViewZones = $("#divViewZones"); - if (checkDisplay && (divViewZones.css('display') === "none")) - return; + if (checkDisplay) { + if (divViewZones.css("display") === "none") + return; + + if (($("#tableZonesBody").html().length > 0) && !$("#mainPanelTabPaneZones").hasClass("active")) + return; + } + + if (pageNumber == null) { + pageNumber = $("#txtZonesPageNumber").val(); + if (pageNumber == "") + pageNumber = 1; + } + + var zonesPerPage = $("#optZonesPerPage").val(); var divViewZonesLoader = $("#divViewZonesLoader"); var divEditZone = $("#divEditZone"); @@ -288,9 +309,11 @@ function refreshZones(checkDisplay) { divViewZonesLoader.show(); HTTPRequest({ - url: "/api/zones/list?token=" + sessionData.token, + url: "/api/zones/list?token=" + sessionData.token + "&pageNumber=" + pageNumber + "&zonesPerPage=" + zonesPerPage, success: function (responseJSON) { var zones = responseJSON.response.zones; + var firstRowNumber = ((responseJSON.response.pageNumber - 1) * zonesPerPage) + 1; + var lastRowNumber = firstRowNumber + (zones.length - 1); var tableHtmlRows = ""; for (var i = 0; i < zones.length; i++) { @@ -349,7 +372,8 @@ function refreshZones(checkDisplay) { break; } - tableHtmlRows += "" + htmlEncode(name === "." ? "" : name) + ""; + tableHtmlRows += "" + (firstRowNumber + i) + ""; + tableHtmlRows += "" + htmlEncode(name === "." ? "" : name) + ""; tableHtmlRows += "" + type + ""; tableHtmlRows += "" + dnssecStatus + ""; tableHtmlRows += "" + status + ""; @@ -379,12 +403,54 @@ function refreshZones(checkDisplay) { tableHtmlRows += ""; } + var paginationHtml = ""; + + if (responseJSON.response.pageNumber > 1) { + paginationHtml += "
  • «
  • "; + paginationHtml += "
  • "; + } + + var pageStart = responseJSON.response.pageNumber - 5; + if (pageStart < 1) + pageStart = 1; + + var pageEnd = pageStart + 9; + if (pageEnd > responseJSON.response.totalPages) { + var endDiff = pageEnd - responseJSON.response.totalPages; + pageEnd = responseJSON.response.totalPages; + + pageStart -= endDiff; + if (pageStart < 1) + pageStart = 1; + } + + for (var i = pageStart; i <= pageEnd; i++) { + if (i == responseJSON.response.pageNumber) + paginationHtml += "
  • " + i + "
  • "; + else + paginationHtml += "
  • " + i + "
  • "; + } + + if (responseJSON.response.pageNumber < responseJSON.response.totalPages) { + paginationHtml += "
  • "; + paginationHtml += "
  • »
  • "; + } + + var statusHtml; + + if (responseJSON.response.zones.length > 0) + statusHtml = firstRowNumber + "-" + lastRowNumber + " (" + responseJSON.response.zones.length + ") of " + responseJSON.response.totalZones + " zones (page " + responseJSON.response.pageNumber + " of " + responseJSON.response.totalPages + ")"; + else + statusHtml = "0 zones"; + + $("#txtZonesPageNumber").val(responseJSON.response.pageNumber); $("#tableZonesBody").html(tableHtmlRows); - if (zones.length > 0) - $("#tableZonesFooter").html("Total Zones: " + zones.length + ""); - else - $("#tableZonesFooter").html("No Zones Found"); + $("#tableZonesTopStatus").html(statusHtml); + $("#tableZonesTopPagination").html(paginationHtml); + + $("#tableZonesFooterStatus").html(statusHtml); + $("#tableZonesFooterPagination").html(paginationHtml); divViewZonesLoader.hide(); divViewZones.show(); @@ -545,14 +611,7 @@ function deleteZoneMenu(objMenuItem) { HTTPRequest({ url: "/api/zones/delete?token=" + sessionData.token + "&zone=" + zone, success: function (responseJSON) { - $("#trZone" + id).remove(); - - var totalZones = $('#tableZones >tbody >tr').length; - - if (totalZones > 0) - $("#tableZonesFooter").html("Total Zones: " + totalZones + ""); - else - $("#tableZonesFooter").html("No Zones Found"); + refreshZones(); showAlert("success", "Zone Deleted!", "Zone '" + zone + "' was deleted successfully."); }, @@ -1236,6 +1295,15 @@ function toggleHideDnssecRecords(hideDnssecRecords) { } function showEditZone(zone) { + if (zone == null) { + zone = $("#txtZonesEdit").val(); + if (zone === "") { + showAlert("warning", "Missing!", "Please enter a zone name to start editing."); + $("#txtZonesEdit").focus(); + return; + } + } + var divViewZonesLoader = $("#divViewZonesLoader"); var divViewZones = $("#divViewZones"); var divEditZone = $("#divEditZone"); @@ -1247,6 +1315,8 @@ function showEditZone(zone) { HTTPRequest({ url: "/api/zones/records/get?token=" + sessionData.token + "&domain=" + zone + "&zone=" + zone + "&listZone=true", success: function (responseJSON) { + zone = responseJSON.response.zone.name; + var zoneType; if (responseJSON.response.zone.internal) zoneType = "Internal";