app.views.ListSelect = class ListSelect extends app.View { static activeClass = "active"; static events = { click: "onClick" }; deactivate() { if (super.deactivate(...arguments)) { this.deselect(); } } select(el) { this.deselect(); if (el) { el.classList.add(this.constructor.activeClass); $.trigger(el, "select"); } } deselect() { const selection = this.getSelection(); if (selection) { selection.classList.remove(this.constructor.activeClass); $.trigger(selection, "deselect"); } } selectByHref(href) { if (this.getSelection()?.getAttribute("href") !== href) { this.select(this.find(`a[href='${href}']`)); } } selectCurrent() { this.selectByHref(location.pathname + location.hash); } getSelection() { return this.findByClass(this.constructor.activeClass); } onClick(event) { if (event.which !== 1 || event.metaKey || event.ctrlKey) { return; } const target = $.eventTarget(event); if (target.tagName === "A") { this.select(target); } }};
app.views.ListSelect = class ListSelect extends app.View {
static activeClass = "active";
static events = { click: "onClick" };
deactivate() {
if (super.deactivate(...arguments)) {
this.deselect();
}
}
select(el) {
this.deselect();
if (el) {
el.classList.add(this.constructor.activeClass);
$.trigger(el, "select");
}
}
deselect() {
const selection = this.getSelection();
if (selection) {
selection.classList.remove(this.constructor.activeClass);
$.trigger(selection, "deselect");
}
}
selectByHref(href) {
if (this.getSelection()?.getAttribute("href") !== href) {
this.select(this.find(`a[href='${href}']`));
}
}
selectCurrent() {
this.selectByHref(location.pathname + location.hash);
}
getSelection() {
return this.findByClass(this.constructor.activeClass);
}
onClick(event) {
if (event.which !== 1 || event.metaKey || event.ctrlKey) {
return;
}
const target = $.eventTarget(event);
if (target.tagName === "A") {
this.select(target);
}
}
};