class FeedItem extends HTMLElement { constructor() { super(); this.attachShadow({mode: 'open'}); } load() { const template = document.createElement('template'); template.innerHTML = ` `; if (!this.loaded) { return fetch(`/api/item/${this.getAttribute('item-id')}`) .then(res => res.json()) .then(item => { template.innerHTML += item.Content || item.Description; this.shadowRoot.appendChild(template.content.cloneNode(true)); }) .then(() => this.loaded = true); } } } customElements.define('feed-item', FeedItem);