feature: reactions

This commit is contained in:
Andy Burke 2025-10-14 22:20:54 -07:00
parent 6500d9a9be
commit b8467ec870
16 changed files with 2603 additions and 383 deletions

View file

@ -14,11 +14,13 @@ function smarten_feeds() {
continue;
}
const feed_item_template = feed.querySelector("template");
if (!feed_item_template) {
console.warn("No template for smart feed: " + feed);
continue;
}
feed.__templates = feed
.querySelectorAll("template[data-for_type]")
.values()
.reduce((_templates, template) => {
_templates[template.dataset.for_type] = template;
return _templates;
}, {});
feed.__start = () => {
feed.__started = true;
@ -65,17 +67,26 @@ function smarten_feeds() {
};
feed.__target = (item) => {
return feed.__target_element?.(item) ?? feed;
if (!feed.__target_element) {
return feed;
}
return feed.__target_element(item);
};
feed.__autoscroll_debounce_timeout = undefined;
feed.__render = async (item) => {
const template = feed.__templates[item.type];
if (!template) {
return;
}
feed.__context =
feed.__context ??
(feed.dataset.context ? new Function(feed.dataset.context) : undefined);
const context = feed.__context ? await feed.__context(item, feed) : {};
const rendered_html = eval("`" + feed_item_template.innerHTML.trim() + "`");
const rendered_html = eval("`" + template.innerHTML.trim() + "`");
const existing_element =
feed.querySelector("#" + item.id?.replace(/([:\.])/g, "\\$1")) ??
@ -106,6 +117,10 @@ function smarten_feeds() {
}
} else {
const target = feed.__target(item);
if (!target) {
return;
}
switch (feed.dataset.insert ?? "append") {
case "prepend":
target.insertAdjacentHTML("afterbegin", rendered_html);
@ -120,7 +135,7 @@ function smarten_feeds() {
break;
}
if (feed.dataset.autoscroll) {
if (target === feed && feed.dataset.autoscroll) {
if (feed.__autoscroll_debounce_timeout) {
clearTimeout(feed.__autoscroll_debounce_timeout);
}