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('Dynamic hx-vals using spread operator 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!') }) window.foo = function() { return { v1: 'test', v2: 42 } } var div = make("
") div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') delete window.foo }) 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 with javascript', 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 with javascript', 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 with javascript', 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 with javascript', 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) }) it('hx-vals works with null values', function() { this.server.respondWith('POST', '/vars', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('null') xhr.respond(200, {}, 'Clicked!') }) var div = make("
") div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('hx-vals works with object values', function() { this.server.respondWith('POST', '/vars', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('{"a":"b"}') xhr.respond(200, {}, 'Clicked!') }) var div = make("
") div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) })