UNPKG

form-serialize-js

Version:
96 lines (93 loc) 3 kB
"use strict"; var _interopRequireDefault = require("reshow-runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("reshow-runtime/helpers/toConsumableArray")); var _setObjectValue = _interopRequireDefault(require("set-object-value")); // @ts-check /** * @param {any} formParams */ var maybeArray = function maybeArray(formParams, _ref) { var name = _ref.name, value = _ref.value, arrayMode = _ref.arrayMode; switch (arrayMode) { case "arrayKeyKeep": case "arrayKey": var len = name.length; if ("[]" === name.substring(len - 2, len)) { var thisName = arrayMode === "arrayKeyKeep" ? name : name.substring(0, len - 2); (0, _setObjectValue["default"])(formParams, [thisName], value, true); } else { formParams[name] = value; } break; case "auto": if (formParams[name]) { (0, _setObjectValue["default"])(formParams, [name], value, true); } else { formParams[name] = value; } break; default: formParams[name] = value; break; } }; /** * @param {HTMLFormElement} formEl * @param {string=} arrayMode */ var formSerialize = function formSerialize(formEl, arrayMode) { arrayMode = null != arrayMode ? arrayMode : "auto"; var formParams = {}; var elements = (0, _toConsumableArray2["default"])( /**@type any*/formEl.elements); elements.forEach(function (el) { var name = /**@type any*/el.name, value = /**@type any*/el.value, type = /**@type any*/el.type, checked = /**@type any*/el.checked; var booleanValue = el.getAttribute("data-boolean") ? !!(-1 !== "|0|null|true|false|".indexOf("|" + value.toLowerCase() + "|") ? JSON.parse(value.toLowerCase()) : value) : value; if (name) { switch (type.toLowerCase()) { case "checkbox": if (checked) { maybeArray(formParams, { name: name, value: booleanValue, arrayMode: arrayMode }); } break; case "radio": if (checked) { formParams[name] = booleanValue; } break; case "select-multiple": var options = /**@type NodeListOf<HTMLOptionElement>*/ el.querySelectorAll("option[selected]"); (0, _toConsumableArray2["default"])( /**@type any*/options).forEach(function (opt) { var optValue = opt.value || opt.text; maybeArray(formParams, { name: name, value: optValue, arrayMode: arrayMode }); }); break; default: maybeArray(formParams, { name: name, value: value, arrayMode: arrayMode }); break; } } }); return formParams; }; var _default = exports["default"] = formSerialize; module.exports = exports.default;