(
'track-contextmenu',
{
bubbles: true,
composed: true,
detail: {
track,
clientX: e.clientX,
clientY: e.clientY,
},
},
),
);
}
/* ================================================================
* Render
* ================================================================ */
private renderTrackRow(
track: library.Track,
index: number,
) {
const active = this.isActiveTrack(track);
const selected = this.selectedTracks.has(
track.FilePath,
);
const classes = [
'track-row',
active ? 'active' : '',
selected ? 'selected' : '',
]
.filter(Boolean)
.join(' ');
const displayNumber =
track.TrackNumber > 0
? track.TrackNumber
: index + 1;
return html`
this.onTrackClick(e, track, index)}
@dblclick=${(e: MouseEvent) =>
this.onTrackDblClick(
e,
track,
index,
)}
@contextmenu=${(e: MouseEvent) =>
this.onTrackContextMenu(e, track)}
@dragstart=${(e: DragEvent) =>
this.onTrackDragStart(
e,
track,
index,
)}
@dragend=${() => this.onTrackDragEnd()}
>
${displayNumber}
${track.TrackName}
${formatMilliseconds(
track.TrackLength,
)}
`;
}
override render() {
return html`
${this.tracks.map(
(track, i) =>
this.renderTrackRow(track, i),
)}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'album-dropdown': AlbumDropdown;
}
}