etag support

This commit is contained in:
Carson Gross
2025-11-08 08:03:05 -07:00
parent 8534ab1a7b
commit f2bcf9d3ce
2 changed files with 16 additions and 6 deletions

View File

@@ -361,8 +361,14 @@ var htmx = (() => {
requestConfig[key] = configOverrides[key];
}
}
if (requestConfig.etag) {
sourceElement._htmx ||= {}
sourceElement._htmx.etag ||= requestConfig.etag
}
}
if (sourceElement._htmx?.etag) {
ctx.request.headers["If-none-match"] = sourceElement._htmx.etag
}
return ctx;
}
@@ -502,7 +508,7 @@ var htmx = (() => {
this.__extractHxHeaders(ctx);
if (!this.__trigger(elt, "htmx:after:request", {ctx})) return;
if(this.__handleHxHeadersAndMaybeReturnEarly(ctx)){
if(this.__handleHeadersAndMaybeReturnEarly(ctx)){
return
}
@@ -553,7 +559,7 @@ var htmx = (() => {
}
// returns true if the header aborts the current response handling
__handleHxHeadersAndMaybeReturnEarly(ctx) {
__handleHeadersAndMaybeReturnEarly(ctx) {
if (ctx.hx.trigger) {
this.__handleTriggerHeader(ctx.hx.trigger, ctx.sourceElement);
}
@@ -576,6 +582,10 @@ var htmx = (() => {
this.ajax('GET', path, opts);
return true // TODO this seems legit
}
if(ctx.response.headers.get("Etag")) {
ctx.elt._htmx ||= {}
ctx.elt._htmx.etag = ctx.response.headers.get("Etag");
}
}
async __handleSSE(ctx, elt, response) {

View File

@@ -22,7 +22,7 @@ describe('__handleHxHeadersAndMaybeReturnEarly unit tests', function() {
sourceElement: container
}
let result = htmx.__handleHxHeadersAndMaybeReturnEarly(ctx)
let result = htmx.__handleHeadersAndMaybeReturnEarly(ctx)
assert.isNotOk(result)
assert.isTrue(triggerFired)
@@ -34,7 +34,7 @@ describe('__handleHxHeadersAndMaybeReturnEarly unit tests', function() {
sourceElement: createProcessedHTML('<div></div>')
}
let result = htmx.__handleHxHeadersAndMaybeReturnEarly(ctx)
let result = htmx.__handleHeadersAndMaybeReturnEarly(ctx)
assert.isNotOk(result)
})
@@ -49,7 +49,7 @@ describe('__handleHxHeadersAndMaybeReturnEarly unit tests', function() {
sourceElement: container
}
let result = htmx.__handleHxHeadersAndMaybeReturnEarly(ctx)
let result = htmx.__handleHeadersAndMaybeReturnEarly(ctx)
assert.isNotOk(result)
})