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!')
})
})