UNPKG

@ideal-postcodes/jsutil

Version:

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

87 lines (86 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.change = exports.setValue = exports.optionsHasText = exports.hasValue = exports.update = exports.isInputElem = exports.isTextarea = exports.isInput = exports.isSelect = void 0; const event_1 = require("./event"); const isSelect = (e) => { if (e === null) return false; return (e instanceof HTMLSelectElement || e.constructor.name === "HTMLSelectElement"); }; exports.isSelect = isSelect; const isInput = (e) => { if (e === null) return false; return (e instanceof HTMLInputElement || e.constructor.name === "HTMLInputElement"); }; exports.isInput = isInput; const isTextarea = (e) => { if (e === null) return false; return (e instanceof HTMLTextAreaElement || e.constructor.name === "HTMLTextAreaElement"); }; exports.isTextarea = isTextarea; const isInputElem = (e) => (0, exports.isInput)(e) || (0, exports.isTextarea)(e) || (0, exports.isSelect)(e); exports.isInputElem = isInputElem; const update = (input, value, skipTrigger = false) => { if (!input) return; if (!(0, exports.isInput)(input) && !(0, exports.isTextarea)(input)) return; (0, exports.change)({ e: input, value, skipTrigger }); }; exports.update = update; const hasValue = (select, value) => { if (value === null) return false; return select.querySelector(`[value="${value}"]`) !== null; }; exports.hasValue = hasValue; const optionsHasText = (select, value) => { if (value === null) return []; const options = select.querySelectorAll("option"); return Array.from(options).filter((o) => { const normalizedText = o.textContent ? o.textContent.replace(/[\n\r]/g, '').replace(/\s+/g, ' ').trim() : ''; return normalizedText === value; }); }; exports.optionsHasText = optionsHasText; const updateSelect = ({ e, value, skipTrigger }) => { if (value === null) return; if (!(0, exports.isSelect)(e)) return; (0, exports.setValue)(e, value); if (!skipTrigger) (0, event_1.trigger)(e, "select"); (0, event_1.trigger)(e, "change"); }; const setValue = (e, value) => { const descriptor = Object.getOwnPropertyDescriptor(e.constructor.prototype, "value"); if (descriptor === undefined) return; if (descriptor.set === undefined) return; const setter = descriptor.set; setter.call(e, value); }; exports.setValue = setValue; const updateInput = ({ e, value, skipTrigger }) => { if (value === null) return; if (!(0, exports.isInput)(e) && !(0, exports.isTextarea)(e)) return; (0, exports.setValue)(e, value); if (!skipTrigger) (0, event_1.trigger)(e, "input"); (0, event_1.trigger)(e, "change"); }; const change = (options) => { if (options.value === null) return; updateSelect(options); updateInput(options); }; exports.change = change;