All files / utils dom-query.ts

100% Statements 15/15
25% Branches 1/4
100% Functions 5/5
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93        94x                   94x 81x 222x                 94x 222x               94x 98x             94x 120x             94x                                                                                    
/**
 * @module Utils
 */
 
import * as MH from "@lisn/globals/minification-helpers";
 
import { DOMElement } from "@lisn/globals/types";
 
/**
 * Returns all the child elements of the given element that are not `script` or
 * `style` tags.
 *
 * @category DOM: Querying
 */
export const getVisibleContentChildren = (element: Element) =>
  MH.filter([...MH.childrenOf(element)], (ch) =>
    isVisibleContentTag(MH.tagName(ch)),
  );
 
/**
 * Returns whether the given tag is _not_ `script` or `style`. Comparison is
 * case insensitive.
 *
 * @category DOM: Querying
 */
export const isVisibleContentTag = (tagName: string) =>
  !MH.includes(["script", "style"], MH.toLowerCase(tagName));
 
/**
 * Returns whether the given tag name has by default an inline display.
 * Comparison is case insensitive.
 *
 * @category DOM: Querying
 */
export const isInlineTag = (tagName: string) =>
  inlineTags.has(tagName.toLowerCase());
 
/**
 * Returns whether the given element is as {@link DOMElement}.
 *
 * @category DOM: Querying
 */
export const isDOMElement = (target: unknown): target is DOMElement =>
  MH.isHTMLElement(target) ||
  MH.isInstanceOf(target, SVGElement) ||
  (typeof MathMLElement !== "undefined" &&
    MH.isInstanceOf(target, MathMLElement));
 
// --------------------
 
const inlineTags = MH.newSet([
  "a",
  "abbr",
  "acronym",
  "b",
  "bdi",
  "bdo",
  "big",
  "button",
  "cite",
  "code",
  "data",
  "dfn",
  "em",
  "i",
  "img",
  "input",
  "kbd",
  "label",
  "mark",
  "map",
  "object",
  "output",
  "q",
  "rp",
  "rt",
  "ruby",
  "s",
  "samp",
  "script",
  "select",
  "small",
  "span",
  "strong",
  "sub",
  "sup",
  "textarea",
  "time",
  "tt",
  "u",
  "var",
]);