UNPKG

@ideal-postcodes/jsutil

Version:

Browser Address Autocomplete for api.ideal-postcodes.co.uk

106 lines (105 loc) 3.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contains = exports.remove = exports.show = exports.hide = exports.restoreStyle = exports.setStyle = exports.getDocument = exports.getScope = exports.toElem = exports.insertBefore = exports.getAnchors = exports.toHtmlElem = exports.getParent = exports.markLoaded = exports.loaded = exports.toArray = exports.hasWindow = void 0; const string_1 = require("./string"); const hasWindow = () => typeof window !== "undefined"; exports.hasWindow = hasWindow; const toArray = (nodeList) => Array.prototype.slice.call(nodeList); exports.toArray = toArray; const loaded = (elem, prefix = "idpc") => elem.getAttribute(prefix) === "true"; exports.loaded = loaded; const markLoaded = (elem, prefix = "idpc") => elem.setAttribute(prefix, "true"); exports.markLoaded = markLoaded; const isTrue = () => true; const getParent = (node, entity, test = isTrue) => { let parent = node; const tagName = entity.toUpperCase(); while (parent.tagName !== "HTML") { if (parent.tagName === tagName && test(parent)) return parent; if (parent.parentNode === null) return null; parent = parent.parentNode; } return null; }; exports.getParent = getParent; const toHtmlElem = (parent, selector) => (selector ? parent.querySelector(selector) : null); exports.toHtmlElem = toHtmlElem; const getAnchors = (selector, d) => { const matches = (d || window.document).querySelectorAll(selector); const anchors = (0, exports.toArray)(matches).filter((e) => !(0, exports.loaded)(e)); if (anchors.length === 0) return []; anchors.forEach((anchor) => (0, exports.markLoaded)(anchor)); return anchors; }; exports.getAnchors = getAnchors; const insertBefore = ({ elem, target }) => { const parent = target.parentNode; if (parent === null) return; parent.insertBefore(elem, target); return elem; }; exports.insertBefore = insertBefore; const toElem = (elem, context) => { if ((0, string_1.isString)(elem)) return context.querySelector(elem); return elem; }; exports.toElem = toElem; const d = () => window.document; const getScope = (scope) => { if ((0, string_1.isString)(scope)) return d().querySelector(scope); if (scope === null) return d(); return scope; }; exports.getScope = getScope; const getDocument = (scope) => { if (scope instanceof Document || scope.constructor.name === "HTMLDocument") return scope; if (scope.ownerDocument) return scope.ownerDocument; return d(); }; exports.getDocument = getDocument; const setStyle = (element, style) => { const currentRules = element.getAttribute("style"); Object.keys(style).forEach((key) => (element.style[key] = style[key])); return currentRules; }; exports.setStyle = setStyle; const restoreStyle = (element, style) => { element.setAttribute("style", style || ""); }; exports.restoreStyle = restoreStyle; const hide = (e) => { e.style.display = "none"; return e; }; exports.hide = hide; const show = (e) => { e.style.display = ""; return e; }; exports.show = show; const remove = (elem) => { if (elem === null || elem.parentNode === null) return; elem.parentNode.removeChild(elem); }; exports.remove = remove; const contains = (scope, selector, text) => { const elements = scope.querySelectorAll(selector); for (let i = 0; i < elements.length; i++) { const e = elements[i]; const content = e.innerText; if (content && content.trim() === text) return e; } return null; }; exports.contains = contains;