Refactor query string building
This commit is contained in:
@@ -11,7 +11,8 @@ var formAction = function(el, event) {
|
|||||||
// Initialize requestOptions
|
// Initialize requestOptions
|
||||||
options.requestOptions = {
|
options.requestOptions = {
|
||||||
requestUrl: el.getAttribute("action") || window.location.href,
|
requestUrl: el.getAttribute("action") || window.location.href,
|
||||||
requestMethod: el.getAttribute("method") || "GET"
|
requestMethod: el.getAttribute("method") || "GET",
|
||||||
|
requestParams: []
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a testable virtual link of the form action
|
// create a testable virtual link of the form action
|
||||||
@@ -44,20 +45,20 @@ var formAction = function(el, event) {
|
|||||||
|
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
|
||||||
var params = []
|
|
||||||
for (var elementKey in el.elements) {
|
for (var elementKey in el.elements) {
|
||||||
var element = el.elements[elementKey]
|
var element = el.elements[elementKey]
|
||||||
// jscs:disable disallowImplicitTypeConversion
|
// jscs:disable disallowImplicitTypeConversion
|
||||||
if (!!element.name && element.attributes !== undefined && element.tagName.toLowerCase() !== "button") {
|
if (!!element.name && element.attributes !== undefined && element.tagName.toLowerCase() !== "button") {
|
||||||
// jscs:enable disallowImplicitTypeConversion
|
// jscs:enable disallowImplicitTypeConversion
|
||||||
if ((!element.attributes.type || element.attributes.type.value !== "checkbox" && element.attributes.type.value !== "radio") || element.checked) {
|
if ((!element.attributes.type || element.attributes.type.value !== "checkbox" && element.attributes.type.value !== "radio") || element.checked) {
|
||||||
params.push({name: encodeURIComponent(element.name), value: encodeURIComponent(element.value)})
|
options.requestOptions.requestParams.push({
|
||||||
|
name: encodeURIComponent(element.name),
|
||||||
|
value: encodeURIComponent(element.value)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
options.requestOptions.requestParams = params
|
|
||||||
|
|
||||||
el.setAttribute(attrClick, "submit")
|
el.setAttribute(attrClick, "submit")
|
||||||
|
|
||||||
options.triggerElement = el
|
options.triggerElement = el
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ var updateQueryString = require("./util/update-query-string");
|
|||||||
|
|
||||||
module.exports = function(location, options, callback) {
|
module.exports = function(location, options, callback) {
|
||||||
options = options || {}
|
options = options || {}
|
||||||
|
var queryString
|
||||||
var requestMethod = (options.requestMethod || "GET").toUpperCase()
|
var requestMethod = (options.requestMethod || "GET").toUpperCase()
|
||||||
var requestParams = options.requestParams || null
|
var requestParams = options.requestParams || null
|
||||||
var requestPayload = null
|
var requestPayload = null
|
||||||
@@ -29,22 +30,23 @@ module.exports = function(location, options, callback) {
|
|||||||
|
|
||||||
// Prepare the request payload for forms, if available
|
// Prepare the request payload for forms, if available
|
||||||
if (requestParams && requestParams.length) {
|
if (requestParams && requestParams.length) {
|
||||||
|
// Build query string
|
||||||
|
queryString = (requestParams.map(function(param) {return param.name + "=" + param.value})).join("&")
|
||||||
|
|
||||||
switch (requestMethod) {
|
switch (requestMethod) {
|
||||||
case "GET":
|
case "GET":
|
||||||
// Reset query string to avoid an issue with repeat submissions where checkboxes that were
|
// Reset query string to avoid an issue with repeat submissions where checkboxes that were
|
||||||
// previously checked are incorrectly preserved
|
// previously checked are incorrectly preserved
|
||||||
location = location.split("?")[0]
|
location = location.split("?")[0]
|
||||||
|
|
||||||
// Build new query string
|
// Append new query string
|
||||||
requestParams.forEach(function(param) {
|
location += "?" + queryString
|
||||||
location = updateQueryString(location, param.name, param.value)
|
break
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "POST":
|
case "POST":
|
||||||
// Build payload string
|
// Send query string as request payload
|
||||||
requestPayload = (requestParams.map(function(param) {return param.name + "=" + param.value})).join("&")
|
requestPayload = queryString
|
||||||
break;
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user