import { SandHTMLElement } from '@ephox/sand';
import type { HTMLElementFullTagNameMap } from '../../alien/DomTypes';
import * as NodeTypes from './NodeTypes';
import type { SugarElement } from './SugarElement';
const name = (element: SugarElement): string => {
const r = element.dom.nodeName;
return r.toLowerCase();
};
const type = (element: SugarElement): number =>
element.dom.nodeType;
const value = (element: SugarElement): string | null =>
element.dom.nodeValue;
const isType = (t: number) => (element: SugarElement): element is SugarElement =>
type(element) === t;
const isComment = (element: SugarElement): element is SugarElement =>
type(element) === NodeTypes.COMMENT || name(element) === '#comment';
const isHTMLElement = (element: SugarElement): element is SugarElement =>
isElement(element) && SandHTMLElement.isPrototypeOf(element.dom);
const isElement = isType(NodeTypes.ELEMENT);
const isText = isType(NodeTypes.TEXT);
const isDocument = isType(NodeTypes.DOCUMENT);
const isDocumentFragment = isType(NodeTypes.DOCUMENT_FRAGMENT);
const isTag = (tag: K) => (e: SugarElement): e is SugarElement =>
isElement(e) && name(e) === tag;
export {
name,
type,
value,
isElement,
isHTMLElement,
isText,
isDocument,
isDocumentFragment,
isComment,
isTag
};