/** * Book Review Item Component * Individual review with rating, author, date, and text */ class BookReviewItem extends HTMLElement { constructor() { super(); this.attachShadow({ mode: "open" }); } connectedCallback() { this.render(); } get rating() { return parseInt(this.getAttribute("rating") || "5", 10); } get author() { return this.getAttribute("author") || "Anoniem"; } get date() { return this.getAttribute("date") || ""; } renderStars() { const rating = Math.min(5, Math.max(0, this.rating)); const fullStars = rating; const emptyStars = 5 - rating; let stars = ""; for (let i = 0; i < fullStars; i++) { stars += ``; } for (let i = 0; i < emptyStars; i++) { stars += ``; } return stars; } render() { this.shadowRoot.innerHTML = `
${this.renderStars()}
${this.author} ${this.date ? `• ${this.date}` : ""}

`; } } customElements.define("book-review-item", BookReviewItem);