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