import { Arr } from '@ephox/katamari'; import type { SugarElement } from '../api/node/SugarElement'; import * as AttrList from '../api/properties/AttrList'; // IE11 Can return undefined for a classList on elements such as math, so we make sure it's not undefined before attempting to use it. const supports = (element: SugarElement): element is SugarElement => (element.dom as Element).classList !== undefined; const get = (element: SugarElement): string[] => AttrList.read(element, 'class'); const add = (element: SugarElement, clazz: string): boolean => AttrList.add(element, 'class', clazz); const remove = (element: SugarElement, clazz: string): boolean => AttrList.remove(element, 'class', clazz); const toggle = (element: SugarElement, clazz: string): boolean => { if (Arr.contains(get(element), clazz)) { return remove(element, clazz); } else { return add(element, clazz); } }; export { get, add, remove, toggle, supports };