diff --git a/.circleci/config.yml b/.circleci/config.yml
index 1fbabf8743..e44f656f77 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -436,4 +436,4 @@ workflows:
branches:
ignore: /.*/
tags:
- only: /^core-forms-components-reactor-\d+\.\d+\.\d+$/
+ only: /^core-forms-components-reactor-\d+\.\d+\.\d+-\w+$/
diff --git a/all/pom.xml b/all/pom.xml
index f92bb369b6..dc308bc1c4 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -21,7 +21,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
diff --git a/bundles/af-core/pom.xml b/bundles/af-core/pom.xml
index 41d466673c..6d62a96855 100644
--- a/bundles/af-core/pom.xml
+++ b/bundles/af-core/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
index 723c9eec9a..0e439f93dc 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractFormComponentImpl.java
@@ -17,17 +17,7 @@
import java.io.IOException;
import java.math.BigDecimal;
-import java.util.AbstractMap;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -68,9 +58,12 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.node.ArrayNode;
public class AbstractFormComponentImpl extends AbstractComponentImpl implements FormComponent {
@ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL, name = ReservedProperties.PN_DATAREF)
@@ -298,6 +291,10 @@ protected boolean getEditMode() {
if (rulesProperties.size() > 0) {
properties.put(CUSTOM_RULE_PROPERTY_WRAPPER, rulesProperties);
}
+ List disabledScripts = getDisabledXFAScripts();
+ if (disabledScripts.size() > 0) {
+ properties.put("fd:disabledXfaScripts", disabledScripts);
+ }
return properties;
}
@@ -550,4 +547,24 @@ public Map getDorProperties() {
return customDorProperties;
}
+ private List getDisabledXFAScripts() {
+ Set disabledScripts = new HashSet<>();
+ String xfaScripts = resource.getValueMap().get("fd:xfaScripts", "");
+ if (StringUtils.isNotEmpty(xfaScripts)) {
+ // read string xfaScripts to jsonNode
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ ArrayNode node = (ArrayNode) mapper.readTree(xfaScripts);
+ // iterate through the array node and add the elements which have disabled property set to true
+ for (JsonNode jsonNode : node) {
+ if (jsonNode.has("disabled") && jsonNode.get("disabled").asBoolean()) {
+ disabledScripts.add(jsonNode.get("activity").asText());
+ }
+ }
+ } catch (IOException e) {
+ logger.error("Error while parsing xfaScripts {} {}", e, resource.getPath());
+ }
+ }
+ return new ArrayList<>(disabledScripts);
+ }
}
diff --git a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractOptionsFieldImpl.java b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractOptionsFieldImpl.java
index b43f30b643..1b7fb8537f 100644
--- a/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractOptionsFieldImpl.java
+++ b/bundles/af-core/src/main/java/com/adobe/cq/forms/core/components/util/AbstractOptionsFieldImpl.java
@@ -107,7 +107,11 @@ public String[] getEnumNames() {
String[] enumName = map.values().toArray(new String[0]);
return Arrays.stream(enumName)
.map(p -> {
- return this.translate(ReservedProperties.PN_ENUM_NAMES, p);
+ String value = this.translate(ReservedProperties.PN_ENUM_NAMES, p);
+ if (value == null) {
+ value = "";
+ }
+ return value;
})
.toArray(String[]::new);
}
diff --git a/bundles/core/pom.xml b/bundles/core/pom.xml
index aa028c5d0d..a5a86858f1 100644
--- a/bundles/core/pom.xml
+++ b/bundles/core/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/examples/all/pom.xml b/examples/all/pom.xml
index a29935afb9..2fba0dd7de 100644
--- a/examples/all/pom.xml
+++ b/examples/all/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/examples/core/pom.xml b/examples/core/pom.xml
index c9a499bcdd..c3809ed5ef 100644
--- a/examples/core/pom.xml
+++ b/examples/core/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/examples/pom.xml b/examples/pom.xml
index 7f1e397d98..3398a28796 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
diff --git a/examples/ui.apps/pom.xml b/examples/ui.apps/pom.xml
index 8105ac3d9b..ede377a8cf 100644
--- a/examples/ui.apps/pom.xml
+++ b/examples/ui.apps/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/examples/ui.content/pom.xml b/examples/ui.content/pom.xml
index d35c541e14..92e8021951 100644
--- a/examples/ui.content/pom.xml
+++ b/examples/ui.content/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/it/apps/pom.xml b/it/apps/pom.xml
index 797ab38b90..d8c8e4c31c 100644
--- a/it/apps/pom.xml
+++ b/it/apps/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/it/config/pom.xml b/it/config/pom.xml
index 70566fc69f..11f0042edb 100644
--- a/it/config/pom.xml
+++ b/it/config/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/it/content/pom.xml b/it/content/pom.xml
index 7cd4ab11de..b35d4f2000 100644
--- a/it/content/pom.xml
+++ b/it/content/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/it/core/pom.xml b/it/core/pom.xml
index 462a280e46..43182355e2 100644
--- a/it/core/pom.xml
+++ b/it/core/pom.xml
@@ -18,7 +18,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../../parent/pom.xml
diff --git a/jsdocs/pom.xml b/jsdocs/pom.xml
index 2e48818eb3..097f1e2211 100644
--- a/jsdocs/pom.xml
+++ b/jsdocs/pom.xml
@@ -22,7 +22,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
diff --git a/parent/pom.xml b/parent/pom.xml
index 04435ab95d..e2d419b6e5 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -21,7 +21,7 @@
com.adobe.aem
core-forms-components-parent
pom
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
AEM Forms Core Components - Parent
Parent POM for AEM Forms Core Components
diff --git a/pom.xml b/pom.xml
index dc12985651..95742b20dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
parent/pom.xml
diff --git a/ui.af.apps/pom.xml b/ui.af.apps/pom.xml
index 38362a2211..8eb3c8f892 100644
--- a/ui.af.apps/pom.xml
+++ b/ui.af.apps/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/base/v1/base/_cq_editConfig.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/base/v1/base/_cq_editConfig.xml
index fc6d62c32d..5a4a7100a8 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/base/v1/base/_cq_editConfig.xml
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/base/v1/base/_cq_editConfig.xml
@@ -23,6 +23,12 @@
handler="CQ.FormsCoreComponents.editorhooks.viewQualifiedName"
icon="viewSOMExpression"
text="View Qualified Name"/>
+
+
0){
schemaRef = schemaRef[0].value;
configuredFormModel = schemaRef;
@@ -143,6 +161,8 @@
$(FDM_DROPDOWN_SELECTOR).val(schemaRef);
} else if (schemaType == CONNECTOR) {
$(CONNECTOR_DROPDOWN_SELECTOR).val(schemaRef);
+ } else if (schemaType == FORM_TEMPLATE) {
+ $(FORM_TEMPLATE_DROPDOWN_SELECTOR).val(schemaRef);
}
}
};
@@ -192,6 +212,21 @@
}
};
+ function formTemplateSelectorOnChanged(dialog) {
+ var selectedSchema = dialog.find(FORM_TEMPLATE_DROPDOWN_SELECTOR);
+ if(selectedSchema.length > 0) {
+ selectedSchema = selectedSchema[0].value;
+ setElementValue(dialog, SCHEMA_REF, selectedSchema);
+ setElementValue(dialog, DAM_SCHEMA_REF, selectedSchema);
+ isSchemaChanged = true;
+ if (configuredFormModel) {
+ confirmFormModelChange(selectedSchema, $(FORM_TEMPLATE_DROPDOWN_SELECTOR));
+ } else {
+ toBeConfiguredFormModel = selectedSchema;
+ }
+ }
+ };
+
function setElementValue(dialog, elementRef, value){
var element = dialog.find(elementRef);
if(element.length > 0){
@@ -225,20 +260,29 @@
function hideContainersExcept(selectedSchemaType) {
if (selectedSchemaType == JSON_SCHEMA) {
$(FDM_CONTAINER).hide();
+ $(FORM_TEMPLATE_CONTAINER).hide();
$(CONNECTOR_CONTAINER).hide();
$(SCHEMA_CONTAINER).show();
} else if (selectedSchemaType == FORM_DATA_MODEL) {
$(SCHEMA_CONTAINER).hide();
+ $(FORM_TEMPLATE_CONTAINER).hide();
$(CONNECTOR_CONTAINER).hide();
$(FDM_CONTAINER).show();
} else if (selectedSchemaType == CONNECTOR) {
$(SCHEMA_CONTAINER).hide();
$(FDM_CONTAINER).hide();
+ $(FORM_TEMPLATE_CONTAINER).hide();
$(CONNECTOR_CONTAINER).show();
- } else if (selectedSchemaType == 'none') {
+ } else if (selectedSchemaType == FORM_TEMPLATE) {
$(FDM_CONTAINER).hide();
$(CONNECTOR_CONTAINER).hide();
$(SCHEMA_CONTAINER).hide();
+ $(FORM_TEMPLATE_CONTAINER).show();
+ } else if (selectedSchemaType == NONE) {
+ $(FDM_CONTAINER).hide();
+ $(SCHEMA_CONTAINER).hide();
+ $(CONNECTOR_CONTAINER).hide();
+ $(FORM_TEMPLATE_CONTAINER).hide();
}
};
@@ -266,7 +310,8 @@
var formModelSelector = dialog.find(FORM_MODEL_SELECTOR)[0],
schemaSelector = dialog.find(SCHEMA_DROPDOWN_SELECTOR)[0],
fdmSelector = dialog.find(FDM_DROPDOWN_SELECTOR)[0],
- connectorSelector = dialog.find(CONNECTOR_DROPDOWN_SELECTOR)[0];
+ connectorSelector = dialog.find(CONNECTOR_DROPDOWN_SELECTOR)[0],
+ formTemplateSelector = dialog.find(FORM_TEMPLATE_DROPDOWN_SELECTOR)[0];
if (formModelSelector) {
formModelSelector.on("change", function() {
selectFormModelOnChanged(dialog);
@@ -287,6 +332,11 @@
connectorSelectorOnChanged(dialog);
});
};
+ if(formTemplateSelector) {
+ formTemplateSelector.on("change", function() {
+ formTemplateSelectorOnChanged(dialog);
+ });
+ }
selectFormModelOnLoad(dialog);
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/_cq_dialog/.content.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/_cq_dialog/.content.xml
index e3bf5979ef..55e4dc661f 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/_cq_dialog/.content.xml
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/container/v2/container/_cq_dialog/.content.xml
@@ -136,6 +136,10 @@
jcr:primaryType="nt:unstructured"
sling:resourceType="/libs/fd/af/connectors/rendercondition/marketo"/>
+
+
+
+
+
+
+
+
0;
+ } catch(e) {
+ console.error('Error parsing xfaScripts', e, json['fd:xfaScripts']);
+ }
+ }
+ }
+ return false
+ }
+
+ window.CQ.FormsCoreComponents.editorhooks.viewXfaScripts = function (editable) {
+ fetch(Granite.HTTP.externalize(editable.path + ".json")).then(async function (resp) {
+ const json = await resp.json();
+ // Assuming `resp` contains the JSON string with `fd:xfaScripts`
+ var xfaScripts = JSON.parse(json['fd:xfaScripts']);
+ var dialogContent = document.createElement('div');
+
+ // Create a Coral Table
+ var table = document.createElement('coral-table');
+
+ // Create the header
+ var thead = document.createElement('coral-table-head');
+ var headerRow = document.createElement('coral-table-row');
+
+ var eventNameHeader = document.createElement('coral-table-headercell');
+ eventNameHeader.textContent = 'Event Name';
+ var eventContentHeader = document.createElement('coral-table-headercell');
+ eventContentHeader.textContent = 'Event Content';
+ var disableHeader = document.createElement('coral-table-headercell');
+ disableHeader.textContent = 'Disable';
+
+ headerRow.appendChild(eventNameHeader);
+ headerRow.appendChild(eventContentHeader);
+ headerRow.appendChild(disableHeader);
+ thead.appendChild(headerRow);
+ table.appendChild(thead);
+
+ // Populate the table with data from xfaScripts
+ var tbody = document.createElement('coral-table-body');
+ xfaScripts.forEach(function(script) {
+ var row = document.createElement('coral-table-row');
+
+ var nameCell = document.createElement('coral-table-cell');
+ nameCell.textContent = script.runAt === "server" ? `${script.activity}(server)` : script.activity;
+ var contentCell = document.createElement('coral-table-cell');
+ contentCell.innerHTML = script.value.replaceAll("\n", "
");
+
+ var checkboxCell = document.createElement('coral-table-cell');
+ var checkbox = new Coral.Checkbox();
+ checkbox.name = 'disableCheckbox';
+ checkbox.on('change', function() {
+ script.disabled = this.checked;
+ });
+ checkboxCell.appendChild(checkbox);
+ checkbox.checked = !!script.disabled;
+ if (script.runAt === "server") {
+ checkbox.disabled = true;
+ }
+ row.appendChild(nameCell);
+ row.appendChild(contentCell);
+ row.appendChild(checkboxCell);
+
+ tbody.appendChild(row);
+ });
+ table.appendChild(tbody);
+
+ dialogContent.appendChild(table);
+
+ // Create the dialog
+ var dialog = new Coral.Dialog().set({
+ id: 'xfaScriptsDialog',
+ header: {
+ innerHTML: 'XFA Scripts'
+ },
+ content: {
+ innerHTML: ''
+ },
+ footer: {},
+ closable: "on"
+ });
+
+ // Add the table to the dialog content
+ //dialog.content.appendChild(dialogContent);
+
+ var okButton = new Coral.Button();
+ okButton.label.textContent = 'OK';
+ okButton.variant = Coral.Button.variant.PRIMARY;
+ okButton.addEventListener('click', function() {
+ // Prepare the modified xfaScripts for POST request
+ var modifiedXfaScripts = JSON.stringify({ 'fd:xfaScripts': JSON.stringify(xfaScripts) });
+ $.ajax({
+ url: editable.path,
+ type: 'POST',
+ data: {
+ "_charset_" : "UTF-8",
+ ':operation': 'import',
+ ':contentType': 'json',
+ ':content': modifiedXfaScripts,
+ ':replaceProperties': true
+ },
+ success: function(response) {
+ console.log('Successfully posted the data');
+ dialog.remove();
+ },
+ error: function(xhr, status, error) {
+ console.error('Error posting the data', error);
+ dialog.remove();
+ }
+ });
+ });
+ dialog.footer.appendChild(okButton);
+
+// Append and show the dialog
+ document.body.appendChild(dialog);
+
+ // add a listener on dialog show event
+ dialog.on('coral-overlay:open', function() {
+ dialog.content.appendChild(dialogContent);
+ });
+ dialog.show();
+
+ })
+ return true;
+ };
+
+})(window, Granite.author, Coral);
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/datepicker/v1/datepicker/clientlibs/site/js/datepickerview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/datepicker/v1/datepicker/clientlibs/site/js/datepickerview.js
index 86f65a2ab5..c4df1c1302 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/datepicker/v1/datepicker/clientlibs/site/js/datepickerview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/datepicker/v1/datepicker/clientlibs/site/js/datepickerview.js
@@ -99,10 +99,12 @@
this.widgetObject.setDisplayValue(this._model.value);
this.widgetObject.setCalendarWidgetValue(this._model.value);
this.setInactive();
+ this.triggerExit();
}, this.getWidget());
this.widgetObject.addEventListener('focus', (e) => {
this.widgetObject.setValue(e.target.value);
this.setActive();
+ this.triggerEnter();
}, this.getWidget());
this.widgetObject.addEventListener('input', (e) => {
if( e.target.value === '') {
@@ -117,9 +119,11 @@
this.widget.addEventListener('blur', (e) => {
this.setModelValue(e.target.value);
this.setInactive();
+ this.triggerExit();
});
this.widget.addEventListener('focus', (e) => {
this.setActive();
+ this.triggerEnter();
});
}
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/dropdown/v1/dropdown/clientlibs/site/js/dropdownview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/dropdown/v1/dropdown/clientlibs/site/js/dropdownview.js
index d32907b7d7..1c95f33839 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/dropdown/v1/dropdown/clientlibs/site/js/dropdownview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/dropdown/v1/dropdown/clientlibs/site/js/dropdownview.js
@@ -206,9 +206,11 @@
});
this.widget.addEventListener('focus', (e) => {
this.setActive();
+ this.triggerEnter();
});
this.widget.addEventListener('blur', (e) => {
this.setInactive();
+ this.triggerExit();
});
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/emailinput/v1/emailinput/clientlibs/site/js/emailinputview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/emailinput/v1/emailinput/clientlibs/site/js/emailinputview.js
index 41662f809c..b8974c5c7c 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/emailinput/v1/emailinput/clientlibs/site/js/emailinputview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/emailinput/v1/emailinput/clientlibs/site/js/emailinputview.js
@@ -74,10 +74,12 @@
this.setModelValue(e.target.value);
this.setWidgetValueToDisplayValue();
this.setInactive();
+ this.triggerExit();
});
this.widget.addEventListener('focus', (e) => {
this.setActive();
this.setWidgetValueToModelValue();
+ this.triggerEnter();
});
}
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/numberinput/v1/numberinput/clientlibs/site/js/numberinputview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/numberinput/v1/numberinput/clientlibs/site/js/numberinputview.js
index 8d737e0a0c..a81994501f 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/numberinput/v1/numberinput/clientlibs/site/js/numberinputview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/numberinput/v1/numberinput/clientlibs/site/js/numberinputview.js
@@ -100,12 +100,14 @@
this.setModelValue(e.target.value);
if(this.element) {
this.setInactive();
+ this.triggerExit();
}
});
}
this.getWidget().addEventListener('focus', (e) => {
if (this.element) {
this.setActive();
+ this.triggerEnter();
}
});
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/_cq_editConfig.xml b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/_cq_editConfig.xml
index b9cf9ad1bb..428607e492 100755
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/_cq_editConfig.xml
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/panelcontainer/v1/panelcontainer/_cq_editConfig.xml
@@ -25,5 +25,11 @@
handler="CQ.FormsCoreComponents.editorhooks.viewQualifiedName"
icon="viewSOMExpression"
text="View Qualified Name"/>
+
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/telephoneinput/v1/telephoneinput/clientlibs/site/js/telephoneinputview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/telephoneinput/v1/telephoneinput/clientlibs/site/js/telephoneinputview.js
index 7fe8a2d048..ea43ca183f 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/telephoneinput/v1/telephoneinput/clientlibs/site/js/telephoneinputview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/telephoneinput/v1/telephoneinput/clientlibs/site/js/telephoneinputview.js
@@ -74,10 +74,12 @@
this.setModelValue(e.target.value);
this.setWidgetValueToDisplayValue();
this.setInactive();
+ this.triggerExit();
});
this.widget.addEventListener('focus', (e) => {
this.setActive();
this.setWidgetValueToModelValue();
+ this.triggerEnter();
});
}
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/textinput/v1/textinput/clientlibs/site/js/textinputview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/textinput/v1/textinput/clientlibs/site/js/textinputview.js
index e2119a07df..2c075f12c1 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/textinput/v1/textinput/clientlibs/site/js/textinputview.js
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/textinput/v1/textinput/clientlibs/site/js/textinputview.js
@@ -74,10 +74,12 @@
this.setModelValue(e.target.value);
this.setWidgetValueToDisplayValue();
this.setInactive();
+ this.triggerExit();
});
this.widget.addEventListener('focus', (e) => {
this.setActive();
this.setWidgetValueToModelValue();
+ this.triggerEnter();
});
}
}
diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/page/v1/page/customfooterlibs.html b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/page/v1/page/customfooterlibs.html
index 268a57ac5c..c1152c89c8 100644
--- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/page/v1/page/customfooterlibs.html
+++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/page/v1/page/customfooterlibs.html
@@ -19,6 +19,7 @@
+
diff --git a/ui.apps/pom.xml b/ui.apps/pom.xml
index 132c8582b3..aec0f0b258 100644
--- a/ui.apps/pom.xml
+++ b/ui.apps/pom.xml
@@ -20,7 +20,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
diff --git a/ui.frontend/package-lock.json b/ui.frontend/package-lock.json
index 4d25a3c47d..b251272f8a 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.109",
+ "@aemforms/af-core-xfa": "^0.1.4",
"@aemforms/af-custom-functions": "1.0.10",
- "@aemforms/af-formatters": "^0.22.109"
+ "@aemforms/af-formatters": "^0.22.114"
},
"devDependencies": {
"@babel/preset-env": "^7.18.2",
@@ -60,13 +60,13 @@
"node": ">=16.0.0"
}
},
- "node_modules/@aemforms/af-core": {
- "version": "0.22.109",
- "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.109.tgz",
- "integrity": "sha512-vJv7dxJrx0Ta0KdL6/hC/RytMzJyQwHRra52V3VQoIa8O9r6/zfNovOYbhlXhGj2iF996UasrGrem+f9WuolvA==",
+ "node_modules/@aemforms/af-core-xfa": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@aemforms/af-core-xfa/-/af-core-xfa-0.1.4.tgz",
+ "integrity": "sha512-rijbb4XGIlSoCOjNnsWLmYlezNlAD5MA5Hp0pmOYanNpUPUf9c98UpGRhyVObn1jKb0wPy5vXGDBbkmyEftblA==",
"dependencies": {
"@adobe/json-formula": "0.1.50",
- "@aemforms/af-formatters": "^0.22.109"
+ "@aemforms/af-formatters": "^0.22.110"
}
},
"node_modules/@aemforms/af-custom-functions": {
@@ -75,9 +75,9 @@
"integrity": "sha512-n3w9tHkJOI5ISVYAK2cCi5k/oTu3rGgByDmMIgOH1+Ry4mL9nM3cxBTKEkPF8Y8JiKF1aUHIKM+MeP6u5PiiUA=="
},
"node_modules/@aemforms/af-formatters": {
- "version": "0.22.109",
- "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.109.tgz",
- "integrity": "sha512-WG4JiC1TDfg/5KLQyGziOKscYJ0mD8JgPzXYw7ZqpMAobgCEwKRSfu2Bf+Wr9v13ASigS0KhLssxSZIfOX/QJA=="
+ "version": "0.22.114",
+ "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.114.tgz",
+ "integrity": "sha512-kIrWTAzLgv2Te2sq8IQl4P0AtFAN1t3znnXXgMPp9MO6P+pB4mqaFlF+DUdE1BpbYdeEYdUxZioL/oq5NVtNag=="
},
"node_modules/@ampproject/remapping": {
"version": "2.2.1",
@@ -11075,13 +11075,13 @@
"resolved": "https://registry.npmjs.org/@adobe/json-formula/-/json-formula-0.1.50.tgz",
"integrity": "sha512-dmlLYfbty8NPVIdxvI9cJ+ZdXsrRCFrCdmL1+aR2auEzXJ86rD0bm1qu+S4NOpFiZLKIyx0zvUTykms40vNjsA=="
},
- "@aemforms/af-core": {
- "version": "0.22.109",
- "resolved": "https://registry.npmjs.org/@aemforms/af-core/-/af-core-0.22.109.tgz",
- "integrity": "sha512-vJv7dxJrx0Ta0KdL6/hC/RytMzJyQwHRra52V3VQoIa8O9r6/zfNovOYbhlXhGj2iF996UasrGrem+f9WuolvA==",
+ "@aemforms/af-core-xfa": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@aemforms/af-core-xfa/-/af-core-xfa-0.1.4.tgz",
+ "integrity": "sha512-rijbb4XGIlSoCOjNnsWLmYlezNlAD5MA5Hp0pmOYanNpUPUf9c98UpGRhyVObn1jKb0wPy5vXGDBbkmyEftblA==",
"requires": {
"@adobe/json-formula": "0.1.50",
- "@aemforms/af-formatters": "^0.22.109"
+ "@aemforms/af-formatters": "^0.22.110"
}
},
"@aemforms/af-custom-functions": {
@@ -11090,9 +11090,9 @@
"integrity": "sha512-n3w9tHkJOI5ISVYAK2cCi5k/oTu3rGgByDmMIgOH1+Ry4mL9nM3cxBTKEkPF8Y8JiKF1aUHIKM+MeP6u5PiiUA=="
},
"@aemforms/af-formatters": {
- "version": "0.22.109",
- "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.109.tgz",
- "integrity": "sha512-WG4JiC1TDfg/5KLQyGziOKscYJ0mD8JgPzXYw7ZqpMAobgCEwKRSfu2Bf+Wr9v13ASigS0KhLssxSZIfOX/QJA=="
+ "version": "0.22.114",
+ "resolved": "https://registry.npmjs.org/@aemforms/af-formatters/-/af-formatters-0.22.114.tgz",
+ "integrity": "sha512-kIrWTAzLgv2Te2sq8IQl4P0AtFAN1t3znnXXgMPp9MO6P+pB4mqaFlF+DUdE1BpbYdeEYdUxZioL/oq5NVtNag=="
},
"@ampproject/remapping": {
"version": "2.2.1",
diff --git a/ui.frontend/package.json b/ui.frontend/package.json
index 68ac54f75c..238cbc9c9b 100644
--- a/ui.frontend/package.json
+++ b/ui.frontend/package.json
@@ -13,18 +13,18 @@
"devDependencies": {
"@babel/preset-env": "^7.18.2",
"aem-clientlib-generator": "^1.8.0",
+ "babel-jest": "^26.6.0",
"cross-env": "^7.0.3",
"html-webpack-plugin": "^5.5.0",
"jest": "^28.1.1",
- "babel-jest": "^26.6.0",
"jest-environment-jsdom": "^28.1.1",
"webpack": "^5.73.0",
"webpack-cli": "^4.10.0",
"webpack-merge": "^5.8.0"
},
"dependencies": {
- "@aemforms/af-core": "^0.22.109",
- "@aemforms/af-formatters": "^0.22.109",
- "@aemforms/af-custom-functions": "1.0.10"
+ "@aemforms/af-core-xfa": "^0.1.4",
+ "@aemforms/af-custom-functions": "1.0.10",
+ "@aemforms/af-formatters": "^0.22.114"
}
}
diff --git a/ui.frontend/pom.xml b/ui.frontend/pom.xml
index 33d7b8de5c..529836ce5a 100644
--- a/ui.frontend/pom.xml
+++ b/ui.frontend/pom.xml
@@ -12,13 +12,11 @@
governing permissions and limitations under the License.
-->
-
+
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml
4.0.0
diff --git a/ui.frontend/src/GuideBridge.js b/ui.frontend/src/GuideBridge.js
index 694e8a09db..83530adaa8 100644
--- a/ui.frontend/src/GuideBridge.js
+++ b/ui.frontend/src/GuideBridge.js
@@ -17,7 +17,7 @@
import {Constants} from "./constants.js";
import Response from "./Response.js";
import AfFormData from "./FormData.js";
-import {readAttachments} from "@aemforms/af-core";
+import {readAttachments} from "@aemforms/af-core-xfa";
/**
* The GuideBridge class represents the bridge between an adaptive form and JavaScript APIs.
diff --git a/ui.frontend/src/LanguageUtils.js b/ui.frontend/src/LanguageUtils.js
index e4081262c5..b795f27a0c 100644
--- a/ui.frontend/src/LanguageUtils.js
+++ b/ui.frontend/src/LanguageUtils.js
@@ -16,7 +16,7 @@
import {Constants} from "./constants.js";
import HTTPAPILayer from "./HTTPAPILayer.js";
-import {setCustomDefaultConstraintTypeMessages} from "@aemforms/af-core";
+import {setCustomDefaultConstraintTypeMessages} from "@aemforms/af-core-xfa";
/**
* @module FormView
diff --git a/ui.frontend/src/handleXfa.js b/ui.frontend/src/handleXfa.js
new file mode 100644
index 0000000000..f1a6468b58
--- /dev/null
+++ b/ui.frontend/src/handleXfa.js
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright 2024 Adobe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+export function loadXfa(formdom, renderContext) {
+ if (window.xfalib) {
+ formBridge.registerConfig("disabledServerScripts", ["initialize", "$formready", "$layoutready"])
+ const xfaJson = JSON.parse(JSON.parse(JSON.stringify(formdom)));
+ xfalib.runtime.renderContext = JSON.parse(JSON.parse(JSON.stringify(renderContext)));
+ xfalib.script.XfaModelRegistry.prototype.createModel(xfaJson);
+ //initialize Acrobat specific scripts
+ new xfalib.acrobat.Acrobat();
+ return function (model) {
+ model._syncXfaProps();
+ xfalib.runtime.xfa.form._initialize(true);
+ $(window).trigger("XfaInitialized");
+ }
+ }
+}
diff --git a/ui.frontend/src/index.js b/ui.frontend/src/index.js
index 8ac52985ff..63a1b55abc 100644
--- a/ui.frontend/src/index.js
+++ b/ui.frontend/src/index.js
@@ -15,13 +15,13 @@
******************************************************************************/
import Utils from "./utils.js";
import LanguageUtils from "./LanguageUtils.js";
-import {createFormInstance, FileObject, extractFileInfo, readAttachments, Click, Change, Submit, Save, Blur, AddItem, RemoveItem, CustomEvent, UIChange} from "@aemforms/af-core";
+import {createFormInstance, FileObject, extractFileInfo, readAttachments, Click, Change, Submit, Save, Blur, AddItem, RemoveItem, CustomEvent, UIChange} from "@aemforms/af-core-xfa";
import {FormField, FormContainer, FormFieldBase, FormPanel, FormTabs, FormFileInput, FormOptionFieldBase, FormCheckBox, FormFileInputWidgetBase, FormFileInputWidget} from "./view/index.js";
import {Constants} from "./constants.js";
import GuideBridge from "./GuideBridge.js";
import HTTPAPILayer from "./HTTPAPILayer.js";
import {formatDate, parseDate} from "@aemforms/af-formatters";
-import {FunctionRuntime} from '@aemforms/af-core';
+import {FunctionRuntime} from '@aemforms/af-core-xfa';
import {customFunctions} from "./customFunctions";
/**
diff --git a/ui.frontend/src/utils.js b/ui.frontend/src/utils.js
index 16e03a285a..b5afedf218 100644
--- a/ui.frontend/src/utils.js
+++ b/ui.frontend/src/utils.js
@@ -17,7 +17,8 @@
import {Constants} from "./constants.js";
import HTTPAPILayer from "./HTTPAPILayer.js";
import {customFunctions} from "./customFunctions.js";
-import {FunctionRuntime} from '@aemforms/af-core'
+import {FunctionRuntime} from '@aemforms/af-core-xfa';
+import {loadXfa} from "./handleXfa";
/**
* @module FormView
@@ -332,7 +333,18 @@ class Utils {
if (_path == null) {
console.error(`data-${Constants.NS}-${formContainerClass}-path attribute is not present in the HTML element. Form cannot be initialized` )
} else {
- const _formJson = await HTTPAPILayer.getFormDefinition(_path, _pageLang);
+ const loader = elements[i].parentElement?.querySelector('[data-cmp-adaptiveform-container-loader]');
+ let _formJson, callback;
+ if (loader) {
+ const id = loader.getAttribute('data-cmp-adaptiveform-container-loader');
+ const response = await fetch(`/adobe/forms/af/${id}`)
+ _formJson = (await response.json()).afModelDefinition;
+ _formJson.id = id;
+ //window.formJson = _formJson
+ callback = loadXfa(_formJson.formdom, _formJson.xfaRenderContext);
+ } else {
+ _formJson = await HTTPAPILayer.getFormDefinition(_path, _pageLang);
+ }
console.debug("fetched model json", _formJson);
await this.registerCustomFunctionsV2( _formJson);
await this.registerCustomFunctionsByUrl(customFunctionUrl);
@@ -344,6 +356,14 @@ class Utils {
_prefillData = await HTTPAPILayer.getJson(_formJson.properties['fd:dataUrl'] + "?" + Object.keys(params).map(p => p+"="+params[p]).join("&"))
_prefillData = _prefillData || {};
_prefillData = Utils.stripIfWrapped(_prefillData);
+ if(window.formBridge){
+ window.formBridge.restoreFormState({
+ formState : {xfaDom: _prefillData.data.xfaDom, xfaRenderContext: _prefillData.data.xfaRenderContext},
+ context : this,
+ error : function() {},
+ success : function () {}
+ });
+ }
}
const formContainer = await createFormContainer({
_formJson,
@@ -351,6 +371,9 @@ class Utils {
_path,
_element: elements[i]
});
+ if (typeof callback === 'function') {
+ callback(formContainer.getModel());
+ }
Utils.initializeAllFields(formContainer);
const event = new CustomEvent(Constants.FORM_CONTAINER_INITIALISED, { "detail": formContainer });
document.dispatchEvent(event);
diff --git a/ui.frontend/src/view/FormCheckBox.js b/ui.frontend/src/view/FormCheckBox.js
index 6c47438cd4..9eee73e711 100644
--- a/ui.frontend/src/view/FormCheckBox.js
+++ b/ui.frontend/src/view/FormCheckBox.js
@@ -46,7 +46,14 @@ class FormCheckBox extends FormFieldBase {
const value = this.widget.checked ? this._onValue : this._offValue;
this._model.dispatch(new FormView.Actions.UIChange({'value': value}));
})
-
+ this.widget.addEventListener('focus', (e) => {
+ this.setActive();
+ this.triggerEnter();
+ });
+ this.widget.addEventListener('blur', (e) => {
+ this.setInactive();
+ this.triggerExit();
+ });
}
}
diff --git a/ui.frontend/src/view/FormContainer.js b/ui.frontend/src/view/FormContainer.js
index 3c44ae9c8b..ad9d8f8153 100644
--- a/ui.frontend/src/view/FormContainer.js
+++ b/ui.frontend/src/view/FormContainer.js
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
-import {createFormInstance} from "@aemforms/af-core";
+import {createFormInstance} from "@aemforms/af-core-xfa";
/**
* @module FormView
diff --git a/ui.frontend/src/view/FormField.js b/ui.frontend/src/view/FormField.js
index 22afc7ad75..fb38a5aebe 100644
--- a/ui.frontend/src/view/FormField.js
+++ b/ui.frontend/src/view/FormField.js
@@ -102,6 +102,14 @@ class FormField {
return this.element.getAttribute(Constants.DATA_ATTRIBUTE_ACTIVE) === 'true';
}
+ triggerExit() {
+ this._model.dispatch(new FormView.Actions.CustomEvent('xfaexit'));
+ }
+
+ triggerEnter() {
+ this._model.dispatch(new FormView.Actions.CustomEvent('xfaenter'));
+ }
+
/**
* Returns the form container path of the form field.
* @returns {string} The form container path.
diff --git a/ui.tests/pom.xml b/ui.tests/pom.xml
index 314c93de23..9b3af755aa 100644
--- a/ui.tests/pom.xml
+++ b/ui.tests/pom.xml
@@ -24,7 +24,7 @@
com.adobe.aem
core-forms-components-parent
- 3.0.100-SNAPSHOT
+ 3.0.100-xfaB003-SNAPSHOT
../parent/pom.xml