// general helpers, not related to the DOM and usable in different contexts

// turn a list of key=value pairs (like tuples) into data that can be sent via AJAX
// taken from https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
// but requiring an array as input rather than a hash, to preserve order of pairs
function getFormDataFromPairs (pairs) {

  const urlEncodedDataPairs = [];

  pairs.forEach(pair => {

    urlEncodedDataPairs.push(`${window.encodeURIComponent(pair[0])}=${window.encodeURIComponent(pair[1])}`);

  });

  // Combine the pairs into a single string and replace all %-encoded spaces to 
  // the '+' character; matches the behaviour of browser form submissions.
  return urlEncodedDataPairs.join('&').replace(/%20/g, '+');

};

exports.getFormDataFromPairs = getFormDataFromPairs;

// general helpers, not related to the DOM and usable in different contexts

// turn a list of key=value pairs (like tuples) into data that can be sent via AJAX
// taken from https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
// but requiring an array as input rather than a hash, to preserve order of pairs
function getFormDataFromPairs (pairs) {

  const urlEncodedDataPairs = [];

  pairs.forEach(pair => {

    urlEncodedDataPairs.push(`${window.encodeURIComponent(pair[0])}=${window.encodeURIComponent(pair[1])}`);

  });

  return urlEncodedDataPairs.join('&');

};

exports.getFormDataFromPairs = getFormDataFromPairs;

Change treatment of space character in URLs