Loading spinner by feed
This commit is contained in:
parent
92329aee3c
commit
48aed34203
@ -298,7 +298,9 @@ button:disabled {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.feed-name {
|
.feed-name {
|
||||||
display: block;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
padding: 0.15rem;
|
padding: 0.15rem;
|
||||||
margin: 0.25rem 0;
|
margin: 0.25rem 0;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
@ -314,6 +316,26 @@ button:disabled {
|
|||||||
background-color: rgba(255, 255, 255, 0.1);
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.feed-spinner {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: 8px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
border-top: 2px solid var(--text-color);
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: feed-spin 1s linear infinite;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feed-name.loading .feed-spinner {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes feed-spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
/* Dropdown styles */
|
/* Dropdown styles */
|
||||||
.feed-menu-button {
|
.feed-menu-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -29,11 +29,17 @@ document.addEventListener('click', (e) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function renderFeedItem(feed) {
|
function openFeed(feed) {
|
||||||
const name = document.createElement('span');
|
const name = document.createElement('span');
|
||||||
name.className = 'feed-name';
|
name.className = 'feed-name';
|
||||||
name.textContent = feed.name;
|
name.textContent = feed.name;
|
||||||
|
|
||||||
|
const spinner = document.createElement('div');
|
||||||
|
spinner.className = 'feed-spinner';
|
||||||
|
name.appendChild(spinner);
|
||||||
|
|
||||||
name.onclick = async () => {
|
name.onclick = async () => {
|
||||||
|
name.classList.add('loading');
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`/poll/${feed.feed_id}`, {
|
const response = await fetch(`/poll/${feed.feed_id}`, {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
@ -46,6 +52,8 @@ function renderFeedItem(feed) {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error polling feed:', error);
|
console.error('Error polling feed:', error);
|
||||||
|
} finally {
|
||||||
|
name.classList.remove('loading');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -104,7 +112,7 @@ async function handleFeeds() {
|
|||||||
feedList.appendChild(emptyMessage);
|
feedList.appendChild(emptyMessage);
|
||||||
} else {
|
} else {
|
||||||
feeds.forEach(feed => {
|
feeds.forEach(feed => {
|
||||||
feedList.appendChild(renderFeedItem(feed));
|
feedList.appendChild(openFeed(feed));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user