blob: 164ad9752e5a00a1e8bbdca5d5548f9a3cd00460 [file]
/*
* Copyright The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* This script displays and paginates the initially hidden table rows of Hit Ratios for time periods.
* See: HBASE-29276 Compute and display hit ratio by configurable, granular time periods
*/
// Wait for document to be fully loaded
document.addEventListener('DOMContentLoaded', function() {
// Count actual items in the DOM
const itemRows = document.querySelectorAll('tr.item-row');
// Pagination state
let currentPage = 1;
const pageSize = 10;
const totalItems = itemRows.length;
const totalPages = Math.ceil(totalItems / pageSize);
// Create page buttons
const pageButtonsContainer = document.getElementById('page-buttons');
if (pageButtonsContainer) {
for (let i = 1; i <= totalPages; i++) {
const button = document.createElement('button');
button.className = 'page-number';
button.textContent = i;
button.onclick = function() { goToPage(i); };
pageButtonsContainer.appendChild(button);
}
}
function displayItems() {
// Hide all item rows
itemRows.forEach(row => {
row.style.display = 'none';
});
// Calculate indexes
const startIndex = (currentPage - 1) * pageSize;
const endIndex = Math.min(startIndex + pageSize, totalItems);
// Show rows for current page
let displayedCount = 0;
for (let i = startIndex; i < endIndex; i++) {
const row = document.getElementById('row-' + i);
if (row) {
row.style.display = 'table-row';
displayedCount++;
}
}
// Update pagination UI
document.querySelectorAll('.page-number').forEach(btn => {
if (parseInt(btn.textContent) === currentPage) {
btn.classList.add('active');
} else {
btn.classList.remove('active');
}
});
const prevBtn = document.getElementById('prev-page');
const nextBtn = document.getElementById('next-page');
if (prevBtn) prevBtn.disabled = currentPage === 1;
if (nextBtn) nextBtn.disabled = currentPage === totalPages;
// Update page info
const pageInfo = document.getElementById('page-info');
if (pageInfo) {
pageInfo.textContent = `Showing ${startIndex + 1} to ${endIndex} of ${totalItems} items`;
}
}
function goToPage(page) {
if (page >= 1 && page <= totalPages) {
currentPage = page;
displayItems();
}
}
window.nextPage = function() {
goToPage(currentPage + 1);
};
window.prevPage = function() {
goToPage(currentPage - 1);
};
window.goToPage = goToPage;
// Check URL for initial page
const urlParams = new URLSearchParams(window.location.search);
const pageParam = urlParams.get('page');
if (pageParam) {
const parsedPage = parseInt(pageParam);
if (!isNaN(parsedPage) && parsedPage >= 1) {
currentPage = parsedPage;
}
}
// Initial display
displayItems();
});