describe("hx-vals attribute", function() { beforeEach(function () { this.server = makeServer(); clearWorkArea(); }); afterEach(function () { this.server.restore(); clearWorkArea(); }); it('basic hx-vals works', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('basic hx-vals works with braces', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('multiple hx-vals works', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['v1'].should.equal("test"); params['v2'].should.equal("42"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals can be on parents', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); make("
"); var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals can override parents', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("best"); xhr.respond(200, {}, "Clicked!") }); make("
"); var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals overrides inputs', function () { this.server.respondWith("POST", "/include", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("best"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") var input = byId("i1") input.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals overrides hx-vars', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('basic hx-vals javascript: works', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals works with braces', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('multiple hx-vals works', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['v1'].should.equal("test"); params['v2'].should.equal("42"); xhr.respond(200, {}, "Clicked!") }); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals can be on parents', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); make('
') var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals can override parents', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("best"); xhr.respond(200, {}, "Clicked!") }); make('
') var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals overrides inputs', function () { this.server.respondWith("POST", "/include", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("best"); xhr.respond(200, {}, "Clicked!") }); var div = make('
') var input = byId("i1") input.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('hx-vals treats objects as JSON', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("{\"i2\":\"test\"}"); xhr.respond(200, {}, "Clicked!") }); var div = make("
") div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('basic hx-vals can be unset', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params.should.be.empty; xhr.respond(200, {}, "Clicked!") }); make( "
\
\
" ); var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('basic hx-vals with braces can be unset', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params.should.be.empty; xhr.respond(200, {}, "Clicked!") }); make( "
\
\
" ); var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('multiple hx-vals can be unset', function () { this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); params.should.be.empty; xhr.respond(200, {}, "Clicked!") }); make( "
\
\
" ); var div = byId("d1"); div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('unsetting hx-vals maintains input values', function () { this.server.respondWith("POST", "/include", function (xhr) { var params = getParameters(xhr); params['i1'].should.equal("test"); xhr.respond(200, {}, "Clicked!") }); var div = make( "
\ \
" ) var input = byId("i1") input.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); }); it('javascript: is not evaluated when allowEval is false', function () { var calledEvent = false; var handler = htmx.on("htmx:evalDisallowedError", function(){ calledEvent = true; }); try { htmx.config.allowEval = false; this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); should.not.exist(params['i1']); xhr.respond(200, {}, "Clicked!") }); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); } finally { htmx.config.allowEval = true; htmx.off("htmx:evalDisallowedError", handler); } calledEvent.should.equal(true); }); it('js: is not evaluated when allowEval is false', function () { var calledEvent = false; var handler = htmx.on("htmx:evalDisallowedError", function(){ calledEvent = true; }); try { htmx.config.allowEval = false; this.server.respondWith("POST", "/vars", function (xhr) { var params = getParameters(xhr); should.not.exist(params['i1']); xhr.respond(200, {}, "Clicked!") }); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal("Clicked!"); } finally { htmx.config.allowEval = true; htmx.off("htmx:evalDisallowedError", handler); } calledEvent.should.equal(true); }); });