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!"); }) });