@ideal-postcodes/jsutil
Version:
Browser Address Autocomplete for api.ideal-postcodes.co.uk
106 lines (105 loc) • 3.68 kB
JavaScript
;
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;