describe('hx-include attribute', function() { beforeEach(function() { this.server = makeServer() clearWorkArea() }) afterEach(function() { this.server.restore() clearWorkArea() }) it('By default an input includes itself', 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('non-GET includes closest form', 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('d1') input.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('non-GET includes closest form and overrides values included that exist outside the form', 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('d1') input.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('GET does not include closest form by default', function() { this.server.respondWith('GET', '/include', function(xhr) { var params = getParameters(xhr) should.equal(params.i1, undefined) xhr.respond(200, {}, 'Clicked!') }) var div = make('
') var input = byId('d1') input.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('Single input not included twice when in form', 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('Two inputs are included twice when they have the same name', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.deep.equal(['test', 'test2']) xhr.respond(200, {}, 'Clicked!') }) var div = make('
' + '' + '' + '
') var input = byId('i1') input.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('Two inputs are included twice when in form when they have the same name', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.deep.equal(['test', 'test2']) xhr.respond(200, {}, 'Clicked!') }) var div = make('
' + '' + '' + '
') var input = byId('i1') input.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('Input not included twice when it explicitly refers to parent form', 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('Input can be referred to externally', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('') var div = make('
') div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('Two inputs can be referred to externally', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') params.i2.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('') make('') var div = make('
') div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('A form can be referred to externally', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') params.i2.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('
' + '' + '' + '
') var div = make('
') div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('By default an input includes itself w/ data-* prefix', 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('If the element is not includeable, its descendant inputs are included', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') params.i2.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('
') var div = make('
') div.click() this.server.respond() div.innerHTML.should.equal('Clicked!') }) it('The `closest` modifier can be used in the hx-include selector', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') params.i2.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('
' + '
') var btn = byId('btn') btn.click() this.server.respond() btn.innerHTML.should.equal('Clicked!') }) it('The `this` modifier can be used in the hx-include selector', function() { this.server.respondWith('POST', '/include', function(xhr) { var params = getParameters(xhr) params.i1.should.equal('test') params.i2.should.equal('test') xhr.respond(200, {}, 'Clicked!') }) make('
' + '
') var btn = byId('btn') btn.click() this.server.respond() btn.innerHTML.should.equal('Clicked!') }) })