50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
// Grid sort button
|
|
class BrickGridSortButton {
|
|
constructor(button, grid) {
|
|
this.button = button;
|
|
this.grid = grid;
|
|
this.data = this.button.dataset;
|
|
|
|
// Setup
|
|
button.addEventListener("click", ((grid, button) => (e) => {
|
|
grid.sort(button);
|
|
})(grid, this));
|
|
}
|
|
|
|
// Active
|
|
active() {
|
|
this.button.classList.remove("btn-outline-primary");
|
|
this.button.classList.add("btn-primary");
|
|
}
|
|
|
|
// Inactive
|
|
inactive() {
|
|
delete this.button.dataset.sortOrder;
|
|
this.button.classList.remove("btn-primary");
|
|
this.button.classList.add("btn-outline-primary");
|
|
}
|
|
|
|
// Toggle sorting
|
|
toggle(order) {
|
|
// Cleanup
|
|
delete this.button.dataset.sortOrder;
|
|
|
|
let icon = this.button.querySelector("i.ri");
|
|
if (icon) {
|
|
this.button.removeChild(icon);
|
|
}
|
|
|
|
// Set order
|
|
if (order) {
|
|
this.active();
|
|
|
|
this.button.dataset.sortOrder = order;
|
|
|
|
icon = document.createElement("i");
|
|
icon.classList.add("ri", "ms-1", `ri-sort-${order}`);
|
|
|
|
this.button.append(icon);
|
|
}
|
|
}
|
|
}
|