| |
| |
| |
|
|
|
|
| export class Loading {
|
| |
| |
|
|
| static show(containerId, message = 'Loading...') {
|
| const container = document.getElementById(containerId);
|
| if (!container) {
|
| console.warn(`[Loading] Container not found: ${containerId}`);
|
| return;
|
| }
|
|
|
| const spinner = document.createElement('div');
|
| spinner.className = 'loading-container';
|
| spinner.innerHTML = `
|
| <div class="spinner"></div>
|
| <p class="loading-text">${message}</p>
|
| `;
|
|
|
| container.innerHTML = '';
|
| container.appendChild(spinner);
|
| }
|
|
|
| |
| |
|
|
| static hide(containerId) {
|
| const container = document.getElementById(containerId);
|
| if (!container) return;
|
|
|
| const spinner = container.querySelector('.loading-container');
|
| if (spinner) {
|
| spinner.remove();
|
| }
|
| }
|
|
|
| |
| |
|
|
| static skeletonRows(count = 5, columns = 5) {
|
| let html = '';
|
| for (let i = 0; i < count; i++) {
|
| html += '<tr class="skeleton-row">';
|
| for (let j = 0; j < columns; j++) {
|
| html += '<td><div class="skeleton-box"></div></td>';
|
| }
|
| html += '</tr>';
|
| }
|
| return html;
|
| }
|
|
|
| |
| |
|
|
| static skeletonCards(count = 4) {
|
| let html = '';
|
| for (let i = 0; i < count; i++) {
|
| html += `
|
| <div class="skeleton-card">
|
| <div class="skeleton-box skeleton-title"></div>
|
| <div class="skeleton-box skeleton-text"></div>
|
| <div class="skeleton-box skeleton-text"></div>
|
| </div>
|
| `;
|
| }
|
| return html;
|
| }
|
|
|
| |
| |
|
|
| static addSkeleton(selector) {
|
| document.querySelectorAll(selector).forEach(el => {
|
| el.classList.add('skeleton');
|
| });
|
| }
|
|
|
| |
| |
|
|
| static removeSkeleton(selector) {
|
| document.querySelectorAll(selector).forEach(el => {
|
| el.classList.remove('skeleton');
|
| });
|
| }
|
| }
|
|
|
| export default Loading;
|
|
|