form-serialize-js
Version:
Serialize form fields to submit through ajax
96 lines (93 loc) • 3 kB
JavaScript
"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;