diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/basic/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/basic/.content.xml index 47d51b47b6..a6a95f2847 100755 --- a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/basic/.content.xml +++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/basic/.content.xml @@ -1,35 +1,48 @@ + jcr:primaryType="cq:Page"> + cq:deviceGroups="[mobile/groups/responsive]" + cq:lastModified="{Date}2024-09-10T14:57:01.796+05:30" + cq:lastModifiedBy="admin" + cq:template="/conf/core-components-examples/settings/wcm/templates/af-blank-v2" + jcr:language="en" + jcr:primaryType="cq:PageContent" + jcr:title="Adaptive Form V2 (IT)" + sling:resourceType="forms-components-examples/components/page"> + fd:version="2.1" + jcr:primaryType="nt:unstructured" + sling:resourceType="forms-components-examples/components/form/container" + dorType="none" + fieldType="form" + themeRef="/libs/fd/af/themes/canvas"> + - \ No newline at end of file + diff --git a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/test-fragment/.content.xml b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/test-fragment/.content.xml old mode 100644 new mode 100755 index 5f3b4bedba..608e1f9f4b --- a/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/test-fragment/.content.xml +++ b/it/content/src/main/content/jcr_root/content/forms/af/core-components-it/samples/fragment/test-fragment/.content.xml @@ -3,7 +3,7 @@ jcr:primaryType="cq:Page"> + jcr:created="{Date}2024-05-08T20:17:24.203+05:30" + jcr:lastModified="{Date}2024-05-08T20:17:24.203+05:30" + jcr:primaryType="nt:unstructured" + jcr:title="Responsive Text Input" + sling:resourceType="forms-components-examples/components/form/textinput" + fieldType="text-input" + name="textinput1715179644273"> + jcr:primaryType="nt:unstructured" + offset="1" + width="9"/> + + + + + diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/text/v1/text/clientlibs/site/js/textview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/text/v1/text/clientlibs/site/js/textview.js index 90381afbea..61a5b1df5e 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/text/v1/text/clientlibs/site/js/textview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/text/v1/text/clientlibs/site/js/textview.js @@ -66,9 +66,13 @@ updateValue(value) { // html sets undefined value as undefined string in input value, hence this check is added let actualValue = typeof value === "undefined" ? "" : value; - + const sanitizedValue = window.DOMPurify ? window.DOMPurify.sanitize(actualValue) : actualValue; // since there is no widget for textview, the innerHTML is being changed - this.element.children[0].innerHTML = actualValue; + if (this.element.children[0]) { + this.element.children[0].innerHTML = sanitizedValue; + } else { + this.element.innerHTML = sanitizedValue; + } } } diff --git a/ui.frontend/package-lock.json b/ui.frontend/package-lock.json index 672e7e78c4..5e8808fce0 100644 --- a/ui.frontend/package-lock.json +++ b/ui.frontend/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@aemforms/af-core": "^0.22.102", + "@aemforms/af-core": "^0.22.103", "@aemforms/af-custom-functions": "1.0.10", - "@aemforms/af-formatters": "^0.22.102" + "@aemforms/af-formatters": "^0.22.103" }, "devDependencies": { "@babel/preset-env": "^7.18.2", @@ -61,12 +61,12 @@ } }, "node_modules/@aemforms/af-core": { - "version": "0.22.102", - "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.102.tgz", - "integrity": "sha512-WdZuGDwH/uCbzfI1hsNq1HTmU9+oVtx0zEVy37e18RfMKOZjkvkCngiWaEqvUsa91N0xCM8NSIpZRCbv5CVkJw==", + "version": "0.22.103", + "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.103.tgz", + "integrity": "sha512-8P0+UkEHbn0pfIOOGIvNiaWYHOUmZwXiP+ZjX8fyvZW8Cq6McWid+ryAzR42e6i6hFJ8XefFyHfMuvcp43YiMA==", "dependencies": { "@adobe/json-formula": "0.1.50", - "@aemforms/af-formatters": "^0.22.102" + "@aemforms/af-formatters": "^0.22.103" } }, "node_modules/@aemforms/af-custom-functions": { @@ -75,9 +75,9 @@ "integrity": "sha512-n3w9tHkJOI5ISVYAK2cCi5k/oTu3rGgByDmMIgOH1+Ry4mL9nM3cxBTKEkPF8Y8JiKF1aUHIKM+MeP6u5PiiUA==" }, "node_modules/@aemforms/af-formatters": { - "version": "0.22.102", - "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.102.tgz", - "integrity": "sha512-s1HYp8thkyFwve7hK3dx00jXWV6K5JWZL+NMgiTI5BrCehq/sFoZy0Mgxnjutz1ekBvTgBy7vIpidn18Blg6dg==" + "version": "0.22.103", + "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.103.tgz", + "integrity": "sha512-6QV0u3A1TrBSj63b6SKcpu94tYMBWGob79TUyQl6xqzlKdm0aGqJuf4uiJlZcIqjyIWOJzFeNmDyghUfWkIJHw==" }, "node_modules/@ampproject/remapping": { "version": "2.2.1", @@ -11076,12 +11076,12 @@ "integrity": "sha512-dmlLYfbty8NPVIdxvI9cJ+ZdXsrRCFrCdmL1+aR2auEzXJ86rD0bm1qu+S4NOpFiZLKIyx0zvUTykms40vNjsA==" }, "@aemforms/af-core": { - "version": "0.22.102", - "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.102.tgz", - "integrity": "sha512-WdZuGDwH/uCbzfI1hsNq1HTmU9+oVtx0zEVy37e18RfMKOZjkvkCngiWaEqvUsa91N0xCM8NSIpZRCbv5CVkJw==", + "version": "0.22.103", + "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.103.tgz", + "integrity": "sha512-8P0+UkEHbn0pfIOOGIvNiaWYHOUmZwXiP+ZjX8fyvZW8Cq6McWid+ryAzR42e6i6hFJ8XefFyHfMuvcp43YiMA==", "requires": { "@adobe/json-formula": "0.1.50", - "@aemforms/af-formatters": "^0.22.102" + "@aemforms/af-formatters": "^0.22.103" } }, "@aemforms/af-custom-functions": { @@ -11090,9 +11090,9 @@ "integrity": "sha512-n3w9tHkJOI5ISVYAK2cCi5k/oTu3rGgByDmMIgOH1+Ry4mL9nM3cxBTKEkPF8Y8JiKF1aUHIKM+MeP6u5PiiUA==" }, "@aemforms/af-formatters": { - "version": "0.22.102", - "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.102.tgz", - "integrity": "sha512-s1HYp8thkyFwve7hK3dx00jXWV6K5JWZL+NMgiTI5BrCehq/sFoZy0Mgxnjutz1ekBvTgBy7vIpidn18Blg6dg==" + "version": "0.22.103", + "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.103.tgz", + "integrity": "sha512-6QV0u3A1TrBSj63b6SKcpu94tYMBWGob79TUyQl6xqzlKdm0aGqJuf4uiJlZcIqjyIWOJzFeNmDyghUfWkIJHw==" }, "@ampproject/remapping": { "version": "2.2.1", diff --git a/ui.frontend/package.json b/ui.frontend/package.json index 3b403381e5..7b3fe7d41d 100644 --- a/ui.frontend/package.json +++ b/ui.frontend/package.json @@ -23,8 +23,8 @@ "webpack-merge": "^5.8.0" }, "dependencies": { - "@aemforms/af-core": "^0.22.102", - "@aemforms/af-formatters": "^0.22.102", + "@aemforms/af-core": "^0.22.103", + "@aemforms/af-formatters": "^0.22.103", "@aemforms/af-custom-functions": "1.0.10" } } diff --git a/ui.tests/test-module/specs/aemEmbedContainer/aemEmbedContainer.runtime.spec.js b/ui.tests/test-module/specs/aemEmbedContainer/aemEmbedContainer.runtime.spec.js index 2d02ff9d3f..7212371f2e 100644 --- a/ui.tests/test-module/specs/aemEmbedContainer/aemEmbedContainer.runtime.spec.js +++ b/ui.tests/test-module/specs/aemEmbedContainer/aemEmbedContainer.runtime.spec.js @@ -100,7 +100,7 @@ describe("Sites with Aem Embed Container", () => { it("model initialized properly", () => { expect(formContainer, "formcontainer is initialized").to.not.be.null; // fragment component, text field and IntanceManager - expect(Object.keys(formContainer._fields).length).to.equal(4); + expect(Object.keys(formContainer._fields).length).to.be.gt(4); }) it("model's changes are reflected in the html ", () => { diff --git a/ui.tests/test-module/specs/fragment/fragment.runtime.spec.js b/ui.tests/test-module/specs/fragment/fragment.runtime.spec.js index a523a11e6b..5ca2f36726 100644 --- a/ui.tests/test-module/specs/fragment/fragment.runtime.spec.js +++ b/ui.tests/test-module/specs/fragment/fragment.runtime.spec.js @@ -178,4 +178,35 @@ describe("Form Runtime with Fragment", () => { }); }); }); + + + it("rules inside fragment should work when included in form", () => { + const [idTextBox, fieldView] = Object.entries(formContainer._fields)[0]; + const [idTextBox1, fieldView1] = Object.entries(formContainer._fields)[1]; + const [idPanel, panelView] = Object.entries(formContainer._fields)[4]; + const input = "abc"; + const model = formContainer._model.getElement(idPanel); + cy.get(`#${idTextBox}`).find("input").clear().type(input).blur().then(x => { + cy.get(`#${idTextBox1} input`).invoke('val').then(val => { + expect(val, "rules inside fragment (when included in form) did not work").to.equal(input); + }) + }) + + cy.get(`#${model.items[0].id}`).should('have.text', 'Thanks'); + }); + + it("same fragment referred twice should have unique ids", () => { + const [idTextBox, fieldView] = Object.entries(formContainer._fields)[2]; + const [idTextBox1, fieldView1] = Object.entries(formContainer._fields)[3]; + const [idPanel, panelView] = Object.entries(formContainer._fields)[5]; + const input = "abc"; + const model = formContainer._model.getElement(idPanel); + cy.get(`#${idTextBox}`).find("input").clear().type(input).blur().then(x => { + cy.get(`#${idTextBox1} input`).invoke('val').then(val => { + expect(val, "rules inside fragment (when included in form) did not work").to.equal(input); + }) + }) + + cy.get(`#${model.items[0].id}`).should('have.text', 'Thanks'); + }); })