import type { SugarElement } from '../node/SugarElement'; import * as Traverse from '../search/Traverse'; const before = (marker: SugarElement, element: SugarElement): void => { const parent = Traverse.parent(marker); parent.each((v) => { v.dom.insertBefore(element.dom, marker.dom); }); }; const after = (marker: SugarElement, element: SugarElement): void => { const sibling = Traverse.nextSibling(marker); sibling.fold(() => { const parent = Traverse.parent(marker); parent.each((v) => { append(v, element); }); }, (v) => { before(v, element); }); }; const prepend = (parent: SugarElement, element: SugarElement): void => { const firstChild = Traverse.firstChild(parent); firstChild.fold(() => { append(parent, element); }, (v) => { parent.dom.insertBefore(element.dom, v.dom); }); }; const append = (parent: SugarElement, element: SugarElement): void => { parent.dom.appendChild(element.dom); }; const appendAt = (parent: SugarElement, element: SugarElement, index: number): void => { Traverse.child(parent, index).fold(() => { append(parent, element); }, (v) => { before(v, element); }); }; const wrap = (element: SugarElement, wrapper: SugarElement): void => { before(element, wrapper); append(wrapper, element); }; export { before, after, prepend, append, appendAt, wrap };