123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { isTag } from 'domhandler';
- /*
- * https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js
- * https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js
- */
- const submittableSelector = 'input,select,textarea,keygen';
- const r20 = /%20/g;
- const rCRLF = /\r?\n/g;
- /**
- * Encode a set of form elements as a string for submission.
- *
- * @category Forms
- * @example
- *
- * ```js
- * $('<form><input name="foo" value="bar" /></form>').serialize();
- * //=> 'foo=bar'
- * ```
- *
- * @returns The serialized form.
- * @see {@link https://api.jquery.com/serialize/}
- */
- export function serialize() {
- // Convert form elements into name/value objects
- const arr = this.serializeArray();
- // Serialize each element into a key/value string
- const retArr = arr.map((data) => `${encodeURIComponent(data.name)}=${encodeURIComponent(data.value)}`);
- // Return the resulting serialization
- return retArr.join('&').replace(r20, '+');
- }
- /**
- * Encode a set of form elements as an array of names and values.
- *
- * @category Forms
- * @example
- *
- * ```js
- * $('<form><input name="foo" value="bar" /></form>').serializeArray();
- * //=> [ { name: 'foo', value: 'bar' } ]
- * ```
- *
- * @returns The serialized form.
- * @see {@link https://api.jquery.com/serializeArray/}
- */
- export function serializeArray() {
- // Resolve all form elements from either forms or collections of form elements
- return this.map((_, elem) => {
- const $elem = this._make(elem);
- if (isTag(elem) && elem.name === 'form') {
- return $elem.find(submittableSelector).toArray();
- }
- return $elem.filter(submittableSelector).toArray();
- })
- .filter(
- // Verify elements have a name (`attr.name`) and are not disabled (`:enabled`)
- '[name!=""]:enabled' +
- // And cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`)
- ':not(:submit, :button, :image, :reset, :file)' +
- // And are either checked/don't have a checkable state
- ':matches([checked], :not(:checkbox, :radio))')
- .map((_, elem) => {
- var _a;
- const $elem = this._make(elem);
- const name = $elem.attr('name'); // We have filtered for elements with a name before.
- // If there is no value set (e.g. `undefined`, `null`), then default value to empty
- const value = (_a = $elem.val()) !== null && _a !== void 0 ? _a : '';
- // If we have an array of values (e.g. `<select multiple>`), return an array of key/value pairs
- if (Array.isArray(value)) {
- return value.map((val) =>
- /*
- * We trim replace any line endings (e.g. `\r` or `\r\n` with `\r\n`) to guarantee consistency across platforms
- * These can occur inside of `<textarea>'s`
- */
- ({ name, value: val.replace(rCRLF, '\r\n') }));
- }
- // Otherwise (e.g. `<input type="text">`, return only one key/value pair
- return { name, value: value.replace(rCRLF, '\r\n') };
- })
- .toArray();
- }
- //# sourceMappingURL=forms.js.map
|