From 2a2303d1dccc120dd7aa5f6b6ade0f89e0064850 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 25 Nov 2025 07:42:23 +0000
Subject: [PATCH] =Feed block mostly good! Referrals look good to go. Ready for Madi and Heidi to approve
---
src/feed/view.js | 53 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/src/feed/view.js b/src/feed/view.js
index abb91e5..6c64b6e 100644
--- a/src/feed/view.js
+++ b/src/feed/view.js
@@ -55,7 +55,7 @@
favourites: '[data-filter="favourites"]',
taxonomy: '[data-filter^="taxonomy"]'
},
- selectedTax: '.selected-terms',
+ selectedTax: '.selected-items',
clearFilter: 'button.clear-filters',
loadMore: 'button.load-more',
filterContainer: '.filters',
@@ -89,24 +89,39 @@
buttons.forEach((button) => {
const taxonomy = button.dataset.taxonomy;
this.currentTaxonomies.add(taxonomy);
+
this.selector.registerFilterButton(button, {
button: button,
buttonSelector: '[data-filter="taxonomy"]',
selected: this.ui.selectedTax
});
+
+ // Add preload listeners
+ this.addTaxonomyPreloadListeners(button, taxonomy);
});
- // Make this non-blocking
- setTimeout(() => {
- this.selector.batchFetchTaxonomies();
- this.selector.isInitializing = false;
- }, 0);
+ this.selector.isInitializing = false;
this.selector.subscribe((event, data) => {
if (event === 'selected-terms') this.handleTaxonomyChange(data);
});
}
+ addTaxonomyPreloadListeners(button, taxonomy) {
+ const preload = () => {
+ this.selector.preloadTaxonomy(taxonomy);
+ };
+
+ // Desktop hover
+ button.addEventListener('mouseenter', preload, { once: true });
+
+ // Touch/keyboard (fires before click)
+ button.addEventListener('pointerdown', preload, { once: true });
+
+ // Keyboard focus
+ button.addEventListener('focus', preload, { once: true });
+ }
+
handleTaxonomyChange(data) {
const { terms, taxonomy } = data;
@@ -177,10 +192,10 @@
}
initStore() {
- this.addPlaceholders();
- this.store = window.jvbStore.register(
+ const store = window.jvbStore.register(
'feed',
{
+ storeName: 'feed',
endpoint: 'feed',
keyPath: 'id',
indexes: [
@@ -197,6 +212,7 @@
delayFetch: true
}
);
+ this.store = store.feed;
this.store.subscribe((event, data) => {
switch (event) {
@@ -317,7 +333,6 @@
let items = this.store.getFiltered();
if (this.store.filters['page'] === 1) {
window.removeChildren(this.ui.grid);
- this.addPlaceholders();
}
if (items.length === 0) {
@@ -436,8 +451,17 @@
return template;
}
+ removePlaceholders() {
+ const placeholders = this.ui.grid.querySelectorAll('.placeholder');
+ if (placeholders.length > 0) {
+ placeholders.forEach(p => p.remove());
+ }
+ }
+
+
addPlaceholders() {
let total = this.contentTypes.length;
+ const fragment = document.createDocumentFragment();
for (let i = 0; i < 12; i++) {
let template = window.getTemplate('placeholderTemplate');
@@ -448,15 +472,10 @@
} else {
icon = window.getIcon(this.container.dataset.icon);
}
- template.appendChild(icon);
- this.ui.grid.appendChild(template);
+ template.append(icon);
+ fragment.append(template);
}
- }
-
- removePlaceholders() {
- if (this.ui.grid.querySelector('.placeholder')) {
- window.removeChildren(this.ui.grid);
- }
+ this.ui.grid.append(fragment);
}
--
Gitblit v1.10.0