describe('Core htmx Events', function() { var HTMX_HISTORY_CACHE_NAME = 'htmx-history-cache' beforeEach(function() { this.server = makeServer() clearWorkArea() }) afterEach(function() { this.server.restore() clearWorkArea() }) it('htmx:load fires properly', function() { var called = false var handler = htmx.on('htmx:load', function(evt) { called = true }) try { this.server.respondWith('GET', '/test', '') this.server.respondWith('GET', '/test', '
') var div = make("") div.click() this.server.respond() should.equal(called, true) } finally { htmx.off('htmx:load', handler) } }) it('htmx:configRequest allows attribute addition', function() { var handler = htmx.on('htmx:configRequest', function(evt) { evt.detail.parameters.param = 'true' }) try { var param = null this.server.respondWith('POST', '/test', function(xhr) { param = getParameters(xhr).param xhr.respond(200, {}, '') }) var div = make("") div.click() this.server.respond() param.should.equal('true') } finally { htmx.off('htmx:configRequest', handler) } }) it('htmx:configRequest is also dispatched in kebab-case', function() { var handler = htmx.on('htmx:config-request', function(evt) { evt.detail.parameters.param = 'true' }) try { var param = null this.server.respondWith('POST', '/test', function(xhr) { param = getParameters(xhr).param xhr.respond(200, {}, '') }) var div = make("") div.click() this.server.respond() param.should.equal('true') } finally { htmx.off('htmx:config-request', handler) } }) it('events are only dispatched once if kebab and camel case match', function() { var invoked = 0 var handler = htmx.on('custom', function() { invoked = invoked + 1 }) try { var div = make("") htmx.trigger(div, 'custom') invoked.should.equal(1) } finally { htmx.off('custom', handler) } }) it('events accept an options argument and the result works as expected', function() { var invoked = 0 var handler = htmx.on('custom', function() { invoked = invoked + 1 }, { once: true }) try { var div = make("") htmx.trigger(div, 'custom') htmx.trigger(div, 'custom') invoked.should.equal(1) } finally { htmx.off('custom', handler) } }) it('htmx:configRequest allows attribute removal', function() { var param = 'foo' var handler = htmx.on('htmx:configRequest', function(evt) { delete evt.detail.parameters.param }) try { this.server.respondWith('POST', '/test', function(xhr) { param = getParameters(xhr).param xhr.respond(200, {}, '') }) var div = make("") div.click() this.server.respond() should.equal(param, undefined) } finally { htmx.off('htmx:configRequest', handler) } }) it('htmx:configRequest allows header tweaking', function() { var header = 'foo' var handler = htmx.on('htmx:configRequest', function(evt) { evt.detail.headers['X-My-Header'] = 'bar' }) try { this.server.respondWith('POST', '/test', function(xhr) { header = xhr.requestHeaders['X-My-Header'] xhr.respond(200, {}, '') }) var div = make("") div.click() this.server.respond() should.equal(header, 'bar') } finally { htmx.off('htmx:configRequest', handler) } }) it('htmx:configRequest on form gives access to submit event', function() { var skip = false var submitterId var handler = htmx.on('htmx:configRequest', function(evt) { // submitter may be null, but undefined means the browser doesn't support it if (typeof evt.detail.triggeringEvent.submitter === 'undefined') { skip = true return } evt.detail.headers['X-Submitter-Id'] = evt.detail.triggeringEvent.submitter.id }) try { this.server.respondWith('POST', '/test', function(xhr) { submitterId = xhr.requestHeaders['X-Submitter-Id'] xhr.respond(200, {}, '') }) make('') var btn = byId('b1') btn.click() this.server.respond() if (skip) { this._runnable.title += " - Skipped as IE11 doesn't support submitter" this.skip() } should.equal(submitterId, 'b1') } finally { htmx.off('htmx:configRequest', handler) } }) it('htmx:afterSwap is called when replacing outerHTML', function() { var called = false var handler = htmx.on('htmx:afterSwap', function(evt) { called = true }) try { this.server.respondWith('POST', '/test', function(xhr) { xhr.respond(200, {}, '') }) var div = make("") div.click() this.server.respond() should.equal(called, true) } finally { htmx.off('htmx:afterSwap', handler) } }) it('htmx:afterSwap is called when replacing outerHTML, new line content', function() { var called = false var handler = htmx.on('htmx:afterSwap', function(evt) { called = true }) try { this.server.respondWith('POST', '/test', function(xhr) { xhr.respond(200, {}, '\n') }) var div = make("") div.click() this.server.respond() should.equal(called, true) } finally { htmx.off('htmx:afterSwap', handler) } }) it('htmx:oobBeforeSwap is called before swap', function() { var called = false var handler = htmx.on('htmx:oobBeforeSwap', function(evt) { called = true }) try { this.server.respondWith('POST', '/test', function(xhr) { xhr.respond(200, {}, "