import util from "./util" import { Message, Author } from "./message" var _ = util._ var $ = util.$ export class ThreadSummaryElement extends HTMLElement { static observedAttributes = [ "data-len", "data-msg", "data-author", "data-latest", "data-created", "data-new" ]; private _len: number = 0;; private _msg: Message | null = null;; private _author: Author | null = null; private _adapter: string = ""; private _created: Date = new Date(); private _latest: Date = new Date(); private _new: boolean = false; constructor() { super(); } connectedCallback() { this.innerHTML = "
" // adapter shouldn't change, just set it here this._adapter = this.getAttribute("data-adapter") ?? ""; this.attributeChangedCallback(); if (this._msg) { this.addEventListener("click", this.viewThread(this), false); } } attributeChangedCallback() { const datastore = _("datastore")[this._adapter]; const msgId = this.getAttribute("data-msg"); if (msgId && datastore && ((this._msg && this._msg.id != msgId) || !this._msg)) { this._msg = datastore.messages.get(msgId); if (this._msg) { const threadText = this.querySelector(".thread_text"); if (threadText) { threadText.innerHTML = this._msg.content; } let author = datastore.profileCache.get(this._msg.author); if (!author) { // request it! } this._author = author || { id: this._msg.author }; const threadAuthor = this.querySelector(".thread_author"); if (threadAuthor && this._author) { threadAuthor.innerHTML = this._author.profilePic ? `${this._author.id} ${this._new ? "!" : ""}[${this._len}] created: ${this._created}, updated: ${this._latest}`; } } } viewThread(self: ThreadSummaryElement) { return () => { const a = $(`adapter_${self._adapter}`); if (a && self._msg) { a.setAttribute("data-view", "thread"); a.setAttribute("data-viewing", self._msg.id); } } } }