Skip to content

Commit 5c6805a

Browse files
committed
slide in one change, what could go wrong?
1 parent 1837f1f commit 5c6805a

9 files changed

Lines changed: 73 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
* Fix bug where the `htmx:afterSettle` event was raised multiple times with oob swaps occured
1313
* A large number of accessibility fixes were made in the docs (Thank you Denis & crew!)
1414
* Fixed bug w/ WebSocket extension initialization caused by "naked" `hx-trigger` feature
15+
* The `HX-Reselect` HTTP response header has been added to change the selection from the returned content
1516
* Many other smaller bug fixes
1617

1718
## [1.9.2] - 2023-04-28

dist/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) &&

dist/htmx.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/htmx.min.js.gz

32 Bytes
Binary file not shown.

www/content/docs.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ The fastest way to get going with htmx is to load it via a CDN. You can simply a
114114
and get going:
115115

116116
```html
117-
<script src="https://unpkg.com/htmx.org@1.9.3" integrity="sha384-XY2Xw5H9PQ+kQW239ss69pMtcqbDSHMqt9wpjGudVRU8fd+37aoZeQYD/dggR3wM" crossorigin="anonymous"></script>
117+
<script src="https://unpkg.com/htmx.org@1.9.3" integrity="sha384-lVb3Rd/Ca0AxaoZg5sACe8FJKF0tnUgR2Kd7ehUOG5GCcROv5uBIZsOqovBAcWua" crossorigin="anonymous"></script>
118118
```
119119

120120
While the CDN approach is extremely simple, you may want to consider [not using CDNs in production](https://blog.wesleyac.com/posts/why-not-javascript-cdn).
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
+++
2+
title = "htmx 1.9.3 has been released!"
3+
date = 2023-07-14
4+
[taxonomies]
5+
tag = ["posts", "announcements"]
6+
+++
7+
8+
## htmx 1.9.3 Release
9+
10+
I'm happy to announce the [1.9.3 release](https://unpkg.com/browse/htmx.org@1.9.3/) of htmx.
11+
12+
### New Features
13+
14+
* The `hx-on` attribute has been deprecated (sorry) in favor of `hx-on-<event name>` attributes. See [`hx-on`](/attributes/hx-on) for more information.
15+
* You can now configure if a type of HTTP request uses the body for parameters or not. In particular, the `DELETE` _should_ use
16+
query parameters, according to the spec. htmx has used the body, instead. To avoid breaking code we are keeping this undefined
17+
behavior for now, but allowing people to fix it for their use cases by updating the `htmx.config.methodsThatUseUrlParams` config
18+
option. Thank you to Alex and Vincent for their feedback and work on this issue!
19+
* The `this` symbol is now available in event filter expressions, and refers to the element the `hx-trigger` is on
20+
* The `HX-Reselect` HTTP response header has been added to change the selection from the returned content
21+
22+
### Improvements & Bug fixes
23+
24+
* We now have functioning CI using GitHub actions!
25+
* Fix bug where the `htmx:afterSettle` event was raised multiple times with oob swaps occured
26+
* A large number of accessibility fixes were made in the docs (Thank you Denis & crew!)
27+
* Fixed bug w/ WebSocket extension initialization caused by "naked" `hx-trigger` feature
28+
* Many other smaller bug fixes
29+
30+
Thank you to everyone who contributed, and enjoy!

www/static/test/1.9.3/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) &&

www/static/test/1.9.3/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/themes/htmx-theme/static/js/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) &&

0 commit comments

Comments
 (0)