@ribajs/core
Version:
Core module of Riba.js
30 lines (27 loc) • 777 B
text/typescript
import { Binder } from "../binder.js";
/**
* sort-childs using flex order
*/
export class FlexSortChildsBinder extends Binder<boolean, HTMLElement> {
static key = "flex-sort-childs";
priority = 90000;
routine(el: HTMLElement, descending: boolean) {
const childrens = Array.from(el.children) as HTMLElement[];
childrens.sort((a, b) => {
if (!a.dataset.sortBy || !b.dataset.sortBy) {
return 0;
}
if (a.dataset.sortBy < b.dataset.sortBy) {
return descending ? 1 : -1;
}
if (a.dataset.sortBy > b.dataset.sortBy) {
return descending ? -1 : 1;
}
return 0;
});
for (let i = 0; i < childrens.length; i++) {
const child = childrens[i];
child.style.order = i.toString();
}
}
}