diff --git a/index.d.ts b/index.d.ts index 0787688..96e5877 100644 --- a/index.d.ts +++ b/index.d.ts @@ -67,8 +67,9 @@ declare class Pjax { * @param {string} requestText The raw text of the response. Same as request.responseText. * @param {XMLHttpRequest} request The XHR object. * @param {string} href The original URI used to initiate the request. + * @param options The Pjax options object used for the request */ - handleResponse(requestText: string, request: XMLHttpRequest, href: string): void; + handleResponse(requestText: string, request: XMLHttpRequest, href: string, options?: Pjax.IOptions): void; /** * Initiates the request by calling doRequest(). diff --git a/lib/proto/attach-form.js b/lib/proto/attach-form.js index ee8ed31..0dbab38 100644 --- a/lib/proto/attach-form.js +++ b/lib/proto/attach-form.js @@ -40,8 +40,9 @@ var formAction = function(el, event) { var tagName = element.tagName.toLowerCase() // jscs:disable disallowImplicitTypeConversion if (!!element.name && element.attributes !== undefined && tagName !== "button") { - var type = element.attributes.type // jscs:enable disallowImplicitTypeConversion + var type = element.attributes.type + if ((!type || type.value !== "checkbox" && type.value !== "radio") || element.checked) { // Build array of values to submit var values = [] diff --git a/lib/proto/handle-response.js b/lib/proto/handle-response.js index 442da38..ab94197 100644 --- a/lib/proto/handle-response.js +++ b/lib/proto/handle-response.js @@ -2,13 +2,13 @@ var clone = require("../util/clone.js") var newUid = require("../uniqueid.js") var trigger = require("../events/trigger.js") -module.exports = function(responseText, request, href) { - var tempOptions = clone(this.options); - tempOptions.request = request +module.exports = function(responseText, request, href, options) { + options = clone(options || this.options) + options.request = request // Fail if unable to load HTML via AJAX if (responseText === false) { - trigger(document, "pjax:complete pjax:error", tempOptions) + trigger(document, "pjax:complete pjax:error", options) return } @@ -49,13 +49,13 @@ module.exports = function(responseText, request, href) { } this.state.href = href - this.state.options = clone(this.options) + this.state.options = options try { this.loadContent(responseText, this.options) } catch (e) { - trigger(document, "pjax:error", tempOptions) + trigger(document, "pjax:error", options) if (!this.options.debug) { if (console && console.error) { diff --git a/lib/send-request.js b/lib/send-request.js index 1c4a7f8..5f74d5f 100644 --- a/lib/send-request.js +++ b/lib/send-request.js @@ -13,21 +13,21 @@ module.exports = function(location, options, callback) { request.onreadystatechange = function() { if (request.readyState === 4) { if (request.status === 200) { - callback(request.responseText, request, location) + callback(request.responseText, request, location, options) } else if (request.status !== 0) { - callback(null, request, location) + callback(null, request, location, options) } } } request.onerror = function(e) { console.log(e) - callback(null, request, location) + callback(null, request, location, options) } request.ontimeout = function() { - callback(null, request, location) + callback(null, request, location, options) } // Prepare the request payload for forms, if available diff --git a/tests/lib/proto/handle-response.js b/tests/lib/proto/handle-response.js index 1e0bd37..b534273 100644 --- a/tests/lib/proto/handle-response.js +++ b/tests/lib/proto/handle-response.js @@ -37,7 +37,9 @@ tape("test events triggered when handleResponse(false) is called", function(t) { tape("test when handleResponse() is called normally", function(t) { var pjax = { - options: {}, + options: { + test: 1 + }, loadContent: noop, state: {} } @@ -55,7 +57,9 @@ tape("test when handleResponse() is called normally", function(t) { scrollPos: [0, 0] }, "window.history.state is set correctly") t.equals(pjax.state.href, "href", "this.state.href is set correctly") - t.same(pjax.state.options, pjax.options, "this.state.options is set correctly") + t.equals(Object.keys(pjax.state.options).length, 2, "this.state.options is set correctly") + t.same(pjax.state.options.request, request, "this.state.options is set correctly") + t.equals(pjax.state.options.test, 1, "this.state.options is set correctly") t.end() })