35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
(() => {
|
|
for (const feed of document.querySelectorAll("[data-activity-feed]")) {
|
|
const items = [...feed.querySelectorAll("[data-activity-item]")];
|
|
const batchSize = Number.parseInt(feed.dataset.batchSize || "6", 10);
|
|
const controls = feed.parentElement.querySelector("[data-activity-controls]");
|
|
const status = controls?.querySelector("[data-activity-status]");
|
|
const button = controls?.querySelector("[data-activity-more]");
|
|
|
|
if (!controls || !status || !button || items.length <= batchSize) continue;
|
|
|
|
let visibleCount = Math.min(batchSize, items.length);
|
|
|
|
const render = () => {
|
|
for (const [index, item] of items.entries()) {
|
|
item.hidden = index >= visibleCount;
|
|
}
|
|
|
|
const remaining = items.length - visibleCount;
|
|
status.textContent = `Showing ${visibleCount} of ${items.length} recent activity items.`;
|
|
button.disabled = remaining === 0;
|
|
button.textContent = remaining
|
|
? `Show ${Math.min(batchSize, remaining)} more`
|
|
: "All activity shown";
|
|
controls.hidden = false;
|
|
};
|
|
|
|
button.addEventListener("click", () => {
|
|
visibleCount = Math.min(visibleCount + batchSize, items.length);
|
|
render();
|
|
});
|
|
|
|
render();
|
|
}
|
|
})();
|