describe("loading states extension", function () { beforeEach(function () { this.server = makeServer(); this.clock = sinon.useFakeTimers(); clearWorkArea(); }); afterEach(function () { this.server.restore(); this.clock.restore(); clearWorkArea(); }); it('works on basic setup', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make('
'); btn.click(); element.style.display.should.be.equal("inline-block"); this.server.respond(); element.style.display.should.be.equal("none"); btn.innerHTML.should.equal("Clicked!"); }); it('works with custom display', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make('
'); btn.click(); element.style.display.should.be.equal("flex"); this.server.respond(); element.style.display.should.be.equal("none"); btn.innerHTML.should.equal("Clicked!"); }); it('works with classes', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make('
'); btn.click(); element.should.have.class("test"); this.server.respond(); element.should.not.have.class("test"); btn.innerHTML.should.equal("Clicked!"); }); it('works with classes removal', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make('
'); btn.click(); element.should.not.have.class("test"); this.server.respond(); element.should.have.class("test"); btn.innerHTML.should.equal("Clicked!"); }); it('works with disabling', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make(''); var element = make(''); var element = make(''); var element = make('
'); btn.click(); element.should.have.class("test"); this.clock.tick(1000); element.should.not.have.class("test"); this.server.respond(); element.should.have.class("test"); btn.innerHTML.should.equal("Clicked!"); }); it('works with custom targets', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var element = make('
'); btn.click(); element.should.have.class("test"); this.server.respond(); element.should.not.have.class("test"); btn.innerHTML.should.equal("Clicked!"); }); it('works with path filters', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var matchingRequestElement = make('
'); var nonMatchingPathElement = make('
'); btn.click(); matchingRequestElement.should.have.class("test"); nonMatchingPathElement.should.not.have.class("test"); this.server.respond(); matchingRequestElement.should.not.have.class("test"); nonMatchingPathElement.should.not.have.class("test"); btn.innerHTML.should.equal("Clicked!"); }); it('works with scopes', function () { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make('
'); var element = make('
'); btn.getElementsByTagName("button")[0].click(); element.should.not.have.class("test"); this.server.respond(); element.should.not.have.class("test"); btn.getElementsByTagName("button")[0].innerHTML.should.equal("Clicked!"); }); it('history restore should not have loading states in content', function () { // this test is based on test from test/attributes/hx-push-url.js:65 this.server.respondWith("GET", "/test1", ''); this.server.respondWith("GET", "/test2", ''); make('
'); byId("d1").click(); byId("d1").disabled.should.be.true; this.server.respond(); byId("d2").disabled.should.be.false; var workArea = getWorkArea(); workArea.textContent.should.equal("test1"); byId("d2").click(); byId("d2").disabled.should.be.true; this.server.respond(); workArea.textContent.should.equal("test2") htmx._('restoreHistory')("/test1") var el = byId("d2"); el.disabled.should.be.false; }) });