describe("hx-sync attribute", function(){ beforeEach(function() { this.server = makeServer(); clearWorkArea(); }); afterEach(function() { this.server.restore(); clearWorkArea(); }); it('can use drop strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b1.click(); b2.click(); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); }); it('defaults to the drop strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b1.click(); b2.click(); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); }); it('can use replace strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b1.click(); b2.click(); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Initial'); b2.innerHTML.should.equal('Click 0'); }); it('can use queue all strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + ' ' + '
') var b1 = byId("b1"); b1.click(); var b2 = byId("b2"); b2.click(); var b3 = byId("b3"); b3.click(); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); b3.innerHTML.should.equal('Initial'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Click 1'); b3.innerHTML.should.equal('Initial'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Click 1'); b3.innerHTML.should.equal('Click 2'); }); it('can use queue last strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + ' ' + '
') var b1 = byId("b1"); b1.click(); var b2 = byId("b2"); b2.click(); var b3 = byId("b3"); b3.click(); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); b3.innerHTML.should.equal('Initial'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); b3.innerHTML.should.equal('Click 1'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); b3.innerHTML.should.equal('Click 1'); }); it('can use queue first strategy', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + ' ' + '
') var b1 = byId("b1"); b1.click(); var b2 = byId("b2"); b2.click(); var b3 = byId("b3"); b3.click(); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Initial'); b3.innerHTML.should.equal('Initial'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Click 1'); b3.innerHTML.should.equal('Initial'); this.server.respond(); b1.innerHTML.should.equal('Click 0'); b2.innerHTML.should.equal('Click 1'); b3.innerHTML.should.equal('Initial'); }); it('can use abort strategy to end existing abortable request', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b1.click(); b2.click(); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Initial'); b2.innerHTML.should.equal('Click 0'); }); it('can use abort strategy to drop abortable request when one is in flight', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b2.click(); b1.click(); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Initial'); b2.innerHTML.should.equal('Click 0'); }); it('can abort a request programmatically', function() { var count = 0; this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "Click " + count++); }); make('
' + '
') var b1 = byId("b1"); var b2 = byId("b2"); b1.click(); b2.click(); htmx.trigger(b1, "htmx:abort"); this.server.respond(); this.server.respond(); b1.innerHTML.should.equal('Initial'); b2.innerHTML.should.equal('Click 0'); }); })