From 56dabe84560927f59d64eb37a797ac1ae0a46b1b Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 12 May 2026 18:58:21 +0000
Subject: [PATCH] =added state schema.org class
---
src/feed/view.js | 54 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/src/feed/view.js b/src/feed/view.js
index 103423b..87e79b9 100644
--- a/src/feed/view.js
+++ b/src/feed/view.js
@@ -77,13 +77,17 @@
this.ui.content = this.ui.filters.container.querySelectorAll('[name="content"]');
if (this.ui.content.length === 0) this.ui.content = false;
this.ui.taxonomies = this.ui.filters.container.querySelectorAll('[data-taxonomy]');
- if (this.ui.taxonomies.length === 0) this.ui.content = false;
+ if (this.ui.taxonomies.length === 0) this.ui.taxonomies = false;
this.ui.orderbyWrap = this.ui.filters.container.querySelector('[data-for-order]');
- if (this.ui.orderbyWrap.length === 0) this.ui.content = false;
+ if (this.ui.orderbyWrap.length === 0) this.ui.orderbyWrap = false;
this.ui.order = this.ui.filters.container.querySelectorAll('[data-filter="order"]');
- if (this.ui.order.length === 0) this.ui.content = false;
+ if (this.ui.order.length === 0) this.ui.order = false;
this.ui.orderby = this.ui.filters.container.querySelectorAll('[data-filter="orderby"]');
- if (this.ui.orderby.length === 0) this.ui.content = false;
+ if (this.ui.orderby.length === 0) this.ui.orderby = false;
+
+ this.orderbyFilters = (this.ui.orderby)
+ ? Array.from(this.ui.orderby).map(o => o.value)
+ : [];
this.contentTypes = (this.ui.content)
? Array.from(this.ui.content).map(c => c.value)
@@ -179,6 +183,12 @@
this.store.clearCache();
this.store.fetch();
}
+
+ let orderbyButton = window.targetCheck(e, '[data-filter="orderby"]');
+ if (orderbyButton && orderbyButton.value === 'random' && orderbyButton.checked) {
+ // Already selected random, just re-render to trigger new shuffle
+ this.renderItems();
+ }
}
nextPage() {
@@ -433,6 +443,11 @@
}
}
initStore() {
+ let extraOrderby = this.orderbyFilters.filter(v => !['date','modified','title','random'].includes(v));
+ let extraIndexes = [];
+ extraOrderby.forEach(orderby =>{
+ extraIndexes.push({name:orderby, keyPath: orderby});
+ });
const store = window.jvbStore.register(
'feed',
{
@@ -443,8 +458,10 @@
{ name: 'content', keyPath: 'content'},
{ name: 'taxonomy', keyPath: 'taxonomy'},
{ name: 'user', keyPath: 'user'},
- { name: 'date', keyPath: 'modified'},
- { name: 'title', keyPath: 'title'}
+ { name: 'date', keyPath: 'date'},
+ { name: 'modified', keyPath: 'modified'},
+ { name: 'title', keyPath: 'title'},
+ ... extraIndexes
],
filters: this.filters,
TTL: 6 * 60 * 60 * 1000, //6 hours
@@ -452,12 +469,13 @@
required: 'content',
}
);
+
this.store = store.feed;
this.store.subscribe((event, data) => {
switch (event) {
case 'data-loaded':
- this.renderItems();
+ this.renderItems(data.items);
this.ui.buttons.loadMore.hidden = true;
if (this.store.lastResponse && this.store.lastResponse?.has_more) {
this.ui.buttons.loadMore.hidden = !this.store.lastResponse?.has_more??true;
@@ -471,8 +489,8 @@
return this.store.filters.page === 1;
}
- renderItems() {
- let items = this.store.getFiltered();
+ renderItems(items = null) {
+ items = items??this.store.getFiltered();
if (this.isFirstPage()) {
window.removeChildren(this.ui.grid);
}
@@ -503,6 +521,10 @@
}
createItemElement(item) {
+ if (typeof item !== 'object') {
+ item = this.store.get(item);
+ if (!item) return;
+ }
return this.templates.create(`feedItem${window.uppercaseFirst(item.content)}`, item);
}
splitIDs(value) {
@@ -574,14 +596,16 @@
let link = termItem.querySelector('a');
if (!link) continue;
+ let title = window.decodeHTMLEntities(term.title);
+
[
link.href,
link.title,
link.textContent
] = [
term.url,
- `See more ${term.title}`,
- term.title
+ `See more ${title}`,
+ title
];
element.append(termItem);
}
@@ -599,7 +623,7 @@
element.textContent = window.formatTimeAgo(value, 'F Y');
}
formatField(element, value) {
- element.textContent = value;
+ element.textContent = window.decodeHTMLEntities(value);
}
addTimelineElements(item, template) {
@@ -616,10 +640,10 @@
];
if (afterEl) {
- afterEl.textContent = `After ${item.fields.number - 1} Tx`;
+ afterEl.textContent = `After ${item.number - 1} Tx`;
}
if (number) {
- number.textContent = item.fields.number;
+ number.textContent = item.number - 1;
}
if (started) {
this.formatTimeField(started, item.fields.timeline[0]['post_date']);
@@ -649,7 +673,7 @@
el.dataset.id = data.id;
el.dataset.taxonomy = data.taxonomy;
if (refs.icon) refs.icon.className = `icon icon=${data.icon}`;
- if (refs.span) refs.span.textContent = data.name;
+ if (refs.span) refs.span.textContent = window.decodeHTMLEntities(data.name);
}
});
T.define('emptyState');
--
Gitblit v1.10.0