Skip to content

Commit 1837f1f

Browse files
committed
Merge remote-tracking branch 'origin/master' into dev
2 parents ec0c11c + 3521c3c commit 1837f1f

3 files changed

Lines changed: 21 additions & 5 deletions

File tree

src/htmx.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,8 +1010,8 @@ return (function () {
10101010
}
10111011
}
10121012

1013-
function maybeSelectFromResponse(elt, fragment) {
1014-
var selector = getClosestAttributeValue(elt, "hx-select");
1013+
function maybeSelectFromResponse(elt, fragment, selectOverride) {
1014+
var selector = selectOverride || getClosestAttributeValue(elt, "hx-select");
10151015
if (selector) {
10161016
var newFragment = getDocument().createDocumentFragment();
10171017
forEach(fragment.querySelectorAll(selector), function (node) {
@@ -1085,12 +1085,12 @@ return (function () {
10851085
}
10861086
}
10871087

1088-
function selectAndSwap(swapStyle, target, elt, responseText, settleInfo) {
1088+
function selectAndSwap(swapStyle, target, elt, responseText, settleInfo, selectOverride) {
10891089
settleInfo.title = findTitle(responseText);
10901090
var fragment = makeFragment(responseText);
10911091
if (fragment) {
10921092
handleOutOfBandSwaps(elt, fragment, settleInfo);
1093-
fragment = maybeSelectFromResponse(elt, fragment);
1093+
fragment = maybeSelectFromResponse(elt, fragment, selectOverride);
10941094
handlePreservedElements(fragment);
10951095
return swap(swapStyle, elt, target, fragment, settleInfo);
10961096
}
@@ -3325,8 +3325,13 @@ return (function () {
33253325
// safari issue - see https://github.com/microsoft/playwright/issues/5894
33263326
}
33273327

3328+
var selectOverride;
3329+
if (hasHeader(xhr, /HX-Reselect:/i)) {
3330+
selectOverride = xhr.getResponseHeader("HX-Reselect");
3331+
}
3332+
33283333
var settleInfo = makeSettleInfo(target);
3329-
selectAndSwap(swapSpec.swapStyle, target, elt, serverResponse, settleInfo);
3334+
selectAndSwap(swapSpec.swapStyle, target, elt, serverResponse, settleInfo, selectOverride);
33303335

33313336
if (selectionInfo.elt &&
33323337
!bodyContains(selectionInfo.elt) &&

test/core/headers.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,16 @@ describe("Core htmx AJAX headers", function () {
188188
div1.innerHTML.should.equal("Result");
189189
})
190190

191+
it("should handle HX-Reselect", function () {
192+
this.server.respondWith("GET", "/test", [200, {"HX-Reselect": "#d2"}, "<div id='d1'>foo</div><div id='d2'>bar</div>"]);
193+
194+
var div = make('<div hx-get="/test" hx-select="#d1"></div>');
195+
div.click();
196+
this.server.respond();
197+
198+
div.innerHTML.should.equal('<div id="d2">bar</div>');
199+
});
200+
191201
it("should handle simple string HX-Trigger-After-Swap response header properly w/ outerHTML swap", function () {
192202
this.server.respondWith("GET", "/test", [200, {"HX-Trigger-After-Swap": "foo"}, ""]);
193203

www/content/reference.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ The table below lists all other attributes available in htmx.
117117
| [`HX-Replace-Url`](@/headers/hx-replace-url.md) | replaces the current URL in the location bar
118118
| `HX-Reswap` | Allows you to specify how the response will be swapped. See [hx-swap](@/attributes/hx-swap.md) for possible values
119119
| `HX-Retarget` | A CSS selector that updates the target of the content update to a different element on the page
120+
| `HX-Reselect` | A CSS selector that allows you to choose which part of the response is used to be swapped in. Overrides an existing [`hx-select`](@/attributes/hx-select.md) on the triggering element
120121
| [`HX-Trigger`](@/headers/hx-trigger.md) | allows you to trigger client side events, see the [documentation](@/headers/hx-trigger.md) for more info
121122
| [`HX-Trigger-After-Settle`](@/headers/hx-trigger.md) | allows you to trigger client side events, see the [documentation](@/headers/hx-trigger.md) for more info
122123
| [`HX-Trigger-After-Swap`](@/headers/hx-trigger.md) | allows you to trigger client side events, see the [documentation](@/headers/hx-trigger.md) for more info

0 commit comments

Comments
 (0)