101 lines
2.6 KiB
TypeScript
101 lines
2.6 KiB
TypeScript
|
import { TextField } from "./TextField";
|
||
|
|
||
|
export class TrackCard extends HTMLElement {
|
||
|
trackNumberContainer: TextField;
|
||
|
nameContainer: TextField;
|
||
|
albumContainer: TextField;
|
||
|
artistContainer: TextField;
|
||
|
durationContainer: TextField;
|
||
|
|
||
|
static get observedAttributes() {
|
||
|
return ["id", "trackNumber", "name", "album", "artist", "duration"];
|
||
|
}
|
||
|
|
||
|
constructor() {
|
||
|
super();
|
||
|
|
||
|
this.trackNumberContainer = document.createElement("text-field");
|
||
|
|
||
|
this.nameContainer = document.createElement("text-field");
|
||
|
this.nameContainer.classList.add("track-card__name");
|
||
|
|
||
|
this.albumContainer = document.createElement("text-field");
|
||
|
this.albumContainer.classList.add("track-card__album");
|
||
|
|
||
|
this.artistContainer = document.createElement("text-field");
|
||
|
this.artistContainer.classList.add("track-card__artist");
|
||
|
|
||
|
this.durationContainer = document.createElement("text-field");
|
||
|
this.durationContainer.classList.add("track-card__duration");
|
||
|
}
|
||
|
|
||
|
get name(): string | null {
|
||
|
return this.getAttribute("name");
|
||
|
}
|
||
|
|
||
|
set name(name: string | null) {
|
||
|
if (name) {
|
||
|
this.setAttribute("name", name);
|
||
|
this.nameContainer.text = name;
|
||
|
} else {
|
||
|
this.removeAttribute("open");
|
||
|
this.nameContainer.text = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
get artist(): string | null {
|
||
|
return this.getAttribute("artist");
|
||
|
}
|
||
|
|
||
|
set artist(artist: string | null) {
|
||
|
if (artist) {
|
||
|
this.setAttribute("artist", artist);
|
||
|
this.artistContainer.text = artist;
|
||
|
} else {
|
||
|
this.removeAttribute("open");
|
||
|
this.artistContainer.text = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
get album(): string | null {
|
||
|
return this.getAttribute("album");
|
||
|
}
|
||
|
|
||
|
set album(album: string | null) {
|
||
|
if (album) {
|
||
|
this.setAttribute("album", album);
|
||
|
this.albumContainer.text = album;
|
||
|
} else {
|
||
|
this.removeAttribute("open");
|
||
|
this.albumContainer.text = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
get duration(): string | null {
|
||
|
return this.getAttribute("duration");
|
||
|
}
|
||
|
|
||
|
set duration(duration: string | null) {
|
||
|
if (duration) {
|
||
|
this.setAttribute("duration", duration);
|
||
|
this.durationContainer.text = duration;
|
||
|
} else {
|
||
|
this.removeAttribute("open");
|
||
|
this.durationContainer.text = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
connectedCallback() {
|
||
|
const container = document.createElement("data-card");
|
||
|
container.classList.add("track-card");
|
||
|
|
||
|
// this.appendChild(this.trackNumberContainer);
|
||
|
container.appendChild(this.nameContainer);
|
||
|
container.appendChild(this.albumContainer);
|
||
|
container.appendChild(this.artistContainer);
|
||
|
container.appendChild(this.durationContainer);
|
||
|
|
||
|
this.appendChild(container);
|
||
|
}
|
||
|
}
|