import { Arr } from '@ephox/katamari'; import * as ClassList from '../../impl/ClassList'; import type { SugarElement } from '../node/SugarElement'; import * as Class from './Class'; /* * ClassList is IE10 minimum: * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList */ const add = (element: SugarElement, classes: string[]): void => { Arr.each(classes, (x) => { Class.add(element, x); }); }; const remove = (element: SugarElement, classes: string[]): void => { Arr.each(classes, (x) => { Class.remove(element, x); }); }; const toggle = (element: SugarElement, classes: string[]): void => { Arr.each(classes, (x) => { Class.toggle(element, x); }); }; const hasAll = (element: SugarElement, classes: string[]): boolean => Arr.forall(classes, (clazz) => Class.has(element, clazz)); const hasAny = (element: SugarElement, classes: string[]): boolean => Arr.exists(classes, (clazz) => Class.has(element, clazz)); const getNative = (element: SugarElement): string[] => { const classList = element.dom.classList; const r: Array = new Array(classList.length); for (let i = 0; i < classList.length; i++) { const item = classList.item(i); if (item !== null) { r[i] = item; } } return r; }; const get = (element: SugarElement): string[] => ClassList.supports(element) ? getNative(element) : ClassList.get(element); export { add, remove, toggle, hasAll, hasAny, get };