describe('hx-boost attribute', function() { beforeEach(function() { this.server = makeServer() clearWorkArea() }) afterEach(function() { this.server.restore() clearWorkArea() }) it('handles basic anchor properly', function() { this.server.respondWith('GET', '/test', 'Boosted') var div = make('
Foo
') var a = byId('a1') a.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form post properly', function() { this.server.respondWith('POST', '/test', 'Boosted') var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form post with button formaction properly', function() { this.server.respondWith('POST', '/test', 'Boosted') var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form post with button formmethod properly', function() { this.server.respondWith('POST', '/test', 'Boosted') var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form post properly w/ explicit action', function() { this.server.respondWith('POST', '/test', 'Boosted') var div = make('
') var form = byId('f1') form.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form get properly', function() { this.server.respondWith('GET', '/test', 'Boosted') var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('handles basic form with no explicit method property', function() { this.server.respondWith('GET', '/test', 'Boosted') var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('does not boost forms with method="dialog"', function() { make('
') var form = byId('f1') var internalData = htmx._('getInternalData')(form) should.equal(undefined, internalData.boosted) }) it('handles basic anchor properly w/ data-* prefix', function() { this.server.respondWith('GET', '/test', 'Boosted') var div = make('
Foo
') var a = byId('a1') a.click() this.server.respond() div.innerHTML.should.equal('Boosted') }) it('overriding default swap style does not effect boosting', function() { htmx.config.defaultSwapStyle = 'afterend' try { this.server.respondWith('GET', '/test', 'Boosted') var a = make('Foo') a.click() this.server.respond() a.innerHTML.should.equal('Boosted') } finally { htmx.config.defaultSwapStyle = 'innerHTML' } }) it('anchors w/ explicit targets are not boosted', function() { var a = make('Foo') var internalData = htmx._('getInternalData')(a) should.equal(undefined, internalData.boosted) }) it('includes an HX-Boosted Header', function() { this.server.respondWith('GET', '/test', function(xhr) { should.equal(xhr.requestHeaders['HX-Boosted'], 'true') xhr.respond(200, {}, 'Boosted!') }) var btn = make('Click Me!') btn.click() this.server.respond() btn.innerHTML.should.equal('Boosted!') }) it('form get w/ search params in action property excludes search params', function() { this.server.respondWith('GET', /\/test.*/, function(xhr) { should.equal(undefined, getParameters(xhr).foo) xhr.respond(200, {}, 'Boosted!') }) var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted!') }) it('form post w/ query params in action property uses full url', function() { this.server.respondWith('POST', /\/test.*/, function(xhr) { should.equal(undefined, getParameters(xhr).foo) xhr.respond(200, {}, 'Boosted!') }) var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted!') }) it('form get with an unset action property', function() { this.server.respondWith('GET', /\/*/, function(xhr) { should.equal(undefined, getParameters(xhr).foo) xhr.respond(200, {}, 'Boosted!') }) var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted!') }) it('form get with an empty action property', function() { this.server.respondWith('GET', /\/*/, function(xhr) { should.equal(undefined, getParameters(xhr).foo) xhr.respond(200, {}, 'Boosted!') }) var div = make('
') var btn = byId('b1') btn.click() this.server.respond() div.innerHTML.should.equal('Boosted!') }) })