Extract and set form values through the DOM—no frameworks required! https://github.com/TheoryOfNekomata/formxtra
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
TheoryOfNekomata bc9b96b597 Merge branch 'master' of code.modal.sh:TheoryOfNekomata/formxtr 3 years ago
cypress Restructure tests, add other scenarios 3 years ago
src Restructure tests, add other scenarios 3 years ago
test/utils Restructure tests, add other scenarios 3 years ago
.gitignore Update README 3 years ago
.npmignore Update README 3 years ago
LICENSE Initial commit 3 years ago
README.md Merge branch 'master' of code.modal.sh:TheoryOfNekomata/formxtr 3 years ago
cypress.json Restructure tests, add other scenarios 3 years ago
jest.config.js Unify tests 3 years ago
package.json Restructure tests, add other scenarios 3 years ago
publish.sh Update usage notes, prepare for publishing 3 years ago
tsconfig.json Implement tests 3 years ago
yarn.lock Restructure tests, add other scenarios 3 years ago

README.md

formxtr

Extract form values through the DOM.

Motivation

There are many ways to lay out forms.

Installation

The package can be found on:

Usage

For an example form:

<!-- ...  -->

<form id="form">
	<input type="text" name="username" />
	<input type="password" name="password" />
	<button type="submit" name="type" value="client">Log In As Client</button>
	<button type="submit" name="type" value="admin">Log In As Admin</button>
</form>

<!-- ... --->

Use the library as follows (code is in TypeScript, but can work with JavaScript as well):

import getFormValues from '@theoryofnekomata/formxtr';

const form: HTMLFormElement = document.getElementById('form');

// optional, but just in case there are multiple submit buttons in the form,
// individual submitters can be considered
const submitter = form.querySelector('[type="submit"][name="type"][value="client"]');

const values = getFormValues(form, submitter);

const processResult = (result: Record<string, unknown>) => {
  throw new Error('Not yet implemented.');
};

// Best use case is with event handlers
form.addEventListener('submit', async e => {
	const { target: form, submitter } = e;
	e.preventDefault();

	const values = getFormValues(form, submitter);

	// Get the form values and send as request to some API
	const response = await fetch(
		'https://example.com/api/log-in',
		{
			method: 'POST',
			body: JSON.stringify(values),
			headers: {
				'Content-Type': 'application/json',
			},
		},
	);

	if (response.ok) {
		const result = await response.json();

		processResult(result);
	}
})

Tests

The library has been tested on JSDOM through Jest, and the real DOM using Cypress.